Merge "qca-wifi: ignore ack with 0 mac addr"
diff --git a/dp/wifi3.0/dp_tx_capture.c b/dp/wifi3.0/dp_tx_capture.c
index 967025a..f11b71a 100644
--- a/dp/wifi3.0/dp_tx_capture.c
+++ b/dp/wifi3.0/dp_tx_capture.c
@@ -427,8 +427,8 @@
ptr_mgmt_hdr->ppdu_id, wh->i_fc[1], wh->i_fc[0],
wh->i_dur[1], wh->i_dur[0]);
} else {
- qdf_nbuf_free(nbuf);
- return;
+ if (!pdev->bpr_enable)
+ qdf_nbuf_free(nbuf);
}
}
@@ -821,7 +821,7 @@
if (ts->tsf > ptr_msdu_info->tsf)
tsf_delta = ts->tsf - ptr_msdu_info->tsf;
else
- tsf_delta = ptr_msdu_info->tsf - ts->tsf;
+ tsf_delta = LOWER_32_MASK - ptr_msdu_info->tsf + ts->tsf;
if (tsf_delta < MAX_MSDU_THRESHOLD_TSF)
break;
@@ -1908,7 +1908,7 @@
frame_ctrl_le =
qdf_cpu_to_le16(mpdu_info->frame_ctrl);
duration_le =
- qdf_cpu_to_le16(ppdu_desc->bar_tx_duration);
+ qdf_cpu_to_le16(mpdu_info->tx_duration);
wh_min->i_fc[1] = (frame_ctrl_le & 0xFF00) >> 8;
wh_min->i_fc[0] = (frame_ctrl_le & 0xFF);
wh_min->i_aidordur[1] = (duration_le & 0xFF00) >> 8;
@@ -1999,6 +1999,7 @@
cur_ppdu_desc->ppdu_start_timestamp;
ppdu_desc->ppdu_end_timestamp =
cur_ppdu_desc->ppdu_end_timestamp;
+ ppdu_desc->tx_duration = cur_ppdu_desc->tx_duration;
ppdu_desc->user[0].peer_id = cur_ppdu_desc->user[0].peer_id;
ppdu_desc->frame_ctrl = (IEEE80211_FC0_SUBTYPE_RTS |
IEEE80211_FC0_TYPE_CTL);
@@ -2023,6 +2024,8 @@
cur_ppdu_desc->ppdu_start_timestamp;
ppdu_desc->ppdu_end_timestamp =
cur_ppdu_desc->ppdu_end_timestamp;
+ ppdu_desc->tx_duration = cur_ppdu_desc->tx_duration -
+ (RTS_INTERVAL + SIFS_INTERVAL);
ppdu_desc->user[0].peer_id = peer_id;
peer = dp_tx_cap_peer_find_by_id(pdev->soc, peer_id);
if (peer) {
@@ -2761,7 +2764,7 @@
if (start_tsf > ptr_comp_info->tx_tsf)
tsf_delta = start_tsf - ptr_comp_info->tx_tsf;
else
- tsf_delta = ptr_comp_info->tx_tsf - start_tsf;
+ tsf_delta = LOWER_32_MASK - ptr_comp_info->tx_tsf + start_tsf;
if (tsf_delta > MAX_MGMT_ENQ_DELAY) {
/*
diff --git a/dp/wifi3.0/dp_tx_capture.h b/dp/wifi3.0/dp_tx_capture.h
index 0511bd0..3988a21 100644
--- a/dp/wifi3.0/dp_tx_capture.h
+++ b/dp/wifi3.0/dp_tx_capture.h
@@ -37,6 +37,8 @@
#define SIFS_INTERVAL 16
+#define RTS_INTERVAL 40
+
#define MAX_MGMT_PEER_FILTER 16
struct dp_peer_mgmt_list {
uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
diff --git a/dp/wifi3.0/dp_txrx_wds.h b/dp/wifi3.0/dp_txrx_wds.h
index 5c5b328..6df07b0 100644
--- a/dp/wifi3.0/dp_txrx_wds.h
+++ b/dp/wifi3.0/dp_txrx_wds.h
@@ -132,9 +132,9 @@
qdf_spin_lock_bh(&soc->ast_lock);
ast = soc->ast_table[sa_idx];
- qdf_spin_unlock_bh(&soc->ast_lock);
if (!ast) {
+ qdf_spin_unlock_bh(&soc->ast_lock);
/*
* In HKv1, it is possible that HW retains the AST entry in
* GSE cache on 1 radio , even after the AST entry is deleted
@@ -199,8 +199,10 @@
if ((ast->type == CDP_TXRX_AST_TYPE_WDS_HM) ||
- (ast->type == CDP_TXRX_AST_TYPE_WDS_HM_SEC))
+ (ast->type == CDP_TXRX_AST_TYPE_WDS_HM_SEC)) {
+ qdf_spin_unlock_bh(&soc->ast_lock);
return;
+ }
/*
* Ensure we are updating the right AST entry by
@@ -226,15 +228,12 @@
* and rptr2 connected to ROOT AP over 2G
* radio
*/
- qdf_spin_lock_bh(&soc->ast_lock);
dp_peer_del_ast(soc, ast);
- qdf_spin_unlock_bh(&soc->ast_lock);
} else {
/* this case is when a STA roams from one
* reapter to another repeater, but inside
* same radio.
*/
- qdf_spin_lock_bh(&soc->ast_lock);
/* For HKv2 do not update the AST entry if
* new ta_peer is on STA vap as SRC port
* learning is disable on STA vap
@@ -255,9 +254,11 @@
* clients and looped back (intrabss) by Root AP
*/
if (ast->pdev_id != ta_peer->vdev->pdev->pdev_id) {
+ qdf_spin_unlock_bh(&soc->ast_lock);
return;
}
+ qdf_spin_unlock_bh(&soc->ast_lock);
/*
* Kickout, when direct associated peer(SA) roams
* to another AP and reachable via TA peer
@@ -275,7 +276,10 @@
wds_src_mac);
}
}
+ return;
}
+
+ qdf_spin_unlock_bh(&soc->ast_lock);
}
/**
diff --git a/qal/inc/qal_streamfs.h b/qal/inc/qal_streamfs.h
deleted file mode 100644
index 2fc623c..0000000
--- a/qal/inc/qal_streamfs.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2018 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/**
- * DOC: qal_streamfs
- * stream file system APIs
- */
-
-#if !defined(__QAL_STREAMFS_H)
-#define _QAL_STREAMFS_H
-
-/* Include Files */
-#include <qdf_types.h>
-
-struct qal_streamfs_chan;
-struct qal_dentry_t;
-struct qal_streamfs_chan_callbacks;
-struct qal_streamfs_chan_buf;
-
-/**
- * qal_streamfs_create_dir() - Create streamfs directory
- * @name: name of directory to create
- * @parent: dentry of parent directory, NULL for root directory
- *
- * Returns directory dentry pointer if successful, NULL otherwise.
- */
-struct qal_dentry_t *
-qal_streamfs_create_dir(const char *name, struct qal_dentry_t *parent);
-
-/**
- * qal_streamfs_create_file() - Create streamfs chan buffer file
- * @name: base name of file to create
- * @mode: filemode
- * @parent: dentry of parent directory, NULL for root directory
- * @buf: pointer to chan buffer
- *
- * Returns file dentry pointer if successful, NULL otherwise.
- */
-struct qal_dentry_t *
-qal_streamfs_create_file(const char *name, uint16_t mode,
- struct qal_dentry_t *parent,
- struct qal_streamfs_chan_buf *buf);
-
-/**
- * qal_streamfs_remove_dir_recursive() - Remove streamfs directory recursive
- * @d: dentry of the directory
- */
-void qal_streamfs_remove_dir_recursive(struct qal_dentry_t *d);
-
-/**
- * qal_streamfs_remove_dir() - Remove streamfs directory
- * @d: dentry of the directory
- */
-void qal_streamfs_remove_dir(struct qal_dentry_t *d);
-
-/**
- * qal_streamfs_remove_file() - Remove streamfs chan buffer file
- * @d: dentry of the buffer file
- */
-void qal_streamfs_remove_file(struct qal_dentry_t *d);
-
-/**
- * qal_streamfs_open() - Create streamfs channel for data trasfer
- * @base_filename: base name of files to create, %NULL for buffering only
- * @parent: dentry of parent directory, %NULL for root directory
- * @subbuf_size: size of sub-buffers
- * @n_subbufs: number of sub-buffers
- * @cb: streamfs channel callback functions
- * @private_data: user-defined data
- *
- * Returns channel pointer if successful, %NULL otherwise.
- */
-struct qal_streamfs_chan *
-qal_streamfs_open(const char *base_filename,
- struct qal_dentry_t *parent,
- size_t subbuf_size, size_t n_subbufs,
- struct qal_streamfs_chan_callbacks *cb,
- void *private_data);
-
-/**
- * qal_streamfs_close() - Closes all channel buffers and frees the channel.
- * @chan: pointer to qal_streamfs_chan.
- *
- * Returns NONE
- */
-void qal_streamfs_close(struct qal_streamfs_chan *chan);
-
-/**
- * qal_streamfs_flush() - Flushes all channel buffers.
- * @chan: pointer to qal_streamfs_chan.
- *
- * Returns NONE
- */
-void qal_streamfs_flush(struct qal_streamfs_chan *chan);
-
-/**
- * qal_streamfs_reset - reset streamfs channel
- * This erases data from all channel buffers and restarting the channel
- * in its initial state.
- * The buffers are not freed, so any mappings are still in effect.
- * @chan: pointer to qal_streamfs_chan.
- *
- * Returns NONE
- */
-void qal_streamfs_reset(struct qal_streamfs_chan *chan);
-
-/**
- * qal_streamfs_subbufs_consumed - update the buffer's sub-buffers-consumed
- * count
- * @chan: pointer to qal_streamfs_chan.
- * @cpu: the cpu associated with the channel buffer to update
- * @subbufs_consumed: number of sub-buffers to add to current buf's count
- *
- * Returns NONE
- */
-void qal_streamfs_subbufs_consumed(struct qal_streamfs_chan *chan,
- unsigned int cpu,
- size_t consumed);
-
-/**
- * qal_streamfs_write - write data into the channel
- * @chan: relay channel
- * @data: data to be written
- * @length: number of bytes to write
- *
- * Writes data into the current cpu's channel buffer.
- */
-void qal_streamfs_write(struct qal_streamfs_chan *chan, const void *data,
- size_t length);
-
-/**
- * qal_streamfs_buf_full - boolean, is the channel buffer full?
- * @buf: channel buffer
- *
- * Returns 1 if the buffer is full, 0 otherwise.
- */
-int qal_streamfs_buf_full(struct qal_streamfs_chan_buf *buf);
-
-#endif
diff --git a/qal/linux/src/qal_streamfs.c b/qal/linux/src/qal_streamfs.c
deleted file mode 100644
index 2be7ddc..0000000
--- a/qal/linux/src/qal_streamfs.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 2018 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/**
- * DOC: qal_streamfs
- * This file provides OS dependent stream filesystem APIs
- */
-#include <qdf_module.h>
-#include <qal_streamfs.h>
-#include <relay.h>
-#include <debugfs.h>
-
-struct qal_dentry_t *
-qal_streamfs_create_dir(const char *name, struct qal_dentry_t *parent)
-{
- struct dentry *dir = NULL;
-
- if (!name)
- return NULL;
-
- dir = debugfs_create_dir(name, (struct dentry *)parent);
-
- return (struct qal_dentry_t *)dir;
-}
-qdf_export_symbol(qal_streamfs_create_dir);
-
-struct qal_dentry_t *
-qal_streamfs_create_file(const char *name, uint16_t mode,
- struct qal_dentry_t *parent,
- struct qal_streamfs_chan_buf *buf)
-{
- struct dentry *file = NULL;
-
- if (!name)
- return NULL;
-
- file = debugfs_create_file(name, mode, (struct dentry *)parent,
- (struct rchan_buf *)buf,
- &relay_file_operations);
-
- return (struct qal_dentry_t *)file;
-}
-qdf_export_symbol(qal_streamfs_create_file);
-
-void qal_streamfs_remove_dir_recursive(struct qal_dentry_t *d)
-{
- debugfs_remove_recursive((struct dentry *)d);
-}
-qdf_export_symbol(qal_streamfs_remove_dir_recursive);
-
-void qal_streamfs_remove_dir(struct qal_dentry_t *d)
-{
- debugfs_remove((struct dentry *)d);
-}
-qdf_export_symbol(qal_streamfs_remove_dir);
-
-void qal_streamfs_remove_file(struct qal_dentry_t *d)
-{
- debugfs_remove((struct dentry *)d);
-}
-qdf_export_symbol(qal_streamfs_remove_file);
-
-
-/**
- * qal_streamfs_open() - Create streamfs channel for data trasfer
- * @base_filename: base name of files to create, %NULL for buffering only
- * @parent: dentry of parent directory, %NULL for root directory
- * @subbuf_size: size of sub-buffers
- * @n_subbufs: number of sub-buffers
- * @cb: streamfs channel callback functions
- * @private_data: user-defined data
- *
- * Returns channel pointer if successful, %NULL otherwise.
- */
-struct qal_streamfs_chan *
-qal_streamfs_open(const char *base_filename,
- struct qal_dentry_t *parent,
- size_t subbuf_size, size_t n_subbufs,
- struct qal_streamfs_chan_callbacks *cb,
- void *private_data)
-{
- struct rchan *channel_ptr = NULL;
-
- channel_ptr = relay_open(base_filename, (struct dentry *)parent,
- subbuf_size, n_subbufs,
- (struct rchan_callbacks *)cb, private_data);
-
- return (struct qal_streamfs_chan *)channel_ptr;
-}
-
-qdf_export_symbol(qal_streamfs_open);
-
-/**
- * qal_streamfs_close() - Closes all channel buffers and frees the channel.
- * @chan: pointer to qal_streamfs_chan.
- *
- * Returns NONE
- */
-void qal_streamfs_close(struct qal_streamfs_chan *chan)
-{
- if (chan)
- relay_close((struct rchan *)chan);
-}
-
-qdf_export_symbol(qal_streamfs_close);
-
-/**
- * qal_streamfs_flush() - Flushes all channel buffers.
- * @chan: pointer to qal_streamfs_chan.
- *
- * Returns NONE
- */
-void qal_streamfs_flush(struct qal_streamfs_chan *chan)
-{
- if (chan)
- relay_flush((struct rchan *)chan);
-}
-
-qdf_export_symbol(qal_streamfs_flush);
-
-/**
- * qal_streamfs_reset - reset streamfs channel
- * This erases data from all channel buffers and restarting the channel
- * in its initial state.
- * The buffers are not freed, so any mappings are still in effect.
- * @chan: pointer to qal_streamfs_chan.
- *
- * Returns NONE
- */
-void qal_streamfs_reset(struct qal_streamfs_chan *chan)
-{
- if (chan)
- relay_reset((struct rchan *)chan);
-}
-
-qdf_export_symbol(qal_streamfs_reset);
-
-/**
- * qal_streamfs_subbufs_consumed - update the buffer's sub-buffers-consumed
- * count
- * @chan: pointer to qal_streamfs_chan.
- * @cpu: the cpu associated with the channel buffer to update
- * @subbufs_consumed: number of sub-buffers to add to current buf's count
- *
- * Returns NONE
- */
-void qal_streamfs_subbufs_consumed(struct qal_streamfs_chan *chan,
- unsigned int cpu,
- size_t consumed)
-{
- if (chan)
- relay_subbufs_consumed((struct rchan *)chan, cpu, consumed);
-}
-
-qdf_export_symbol(qal_streamfs_subbufs_consumed);
-
-/**
- * qal_streamfs_write - write data into the channel
- * @chan: relay channel
- * @data: data to be written
- * @length: number of bytes to write
- *
- * Writes data into the current cpu's channel buffer.
- */
-inline void qal_streamfs_write(struct qal_streamfs_chan *chan,
- const void *data,
- size_t length)
-{
- if (chan)
- relay_write((struct rchan *)chan, data, length);
-}
-
-qdf_export_symbol(qal_streamfs_write);
-
-/**
- * qal_streamfs_buf_full - boolean, is the channel buffer full?
- * @buf: channel buffer
- *
- * Returns 1 if the buffer is full, 0 otherwise.
- */
-int qal_streamfs_buf_full(struct qal_streamfs_chan_buf *buf)
-{
- return relay_buf_full((struct rchan_buf *)buf);
-}
-
-qdf_export_symbol(qal_streamfs_buf_full);
diff --git a/target_if/cfr/inc/target_if_cfr.h b/target_if/cfr/inc/target_if_cfr.h
deleted file mode 100644
index d1533ff..0000000
--- a/target_if/cfr/inc/target_if_cfr.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _TARGET_IF_CFR_H_
-#define _TARGET_IF_CFR_H_
-
-#include <wlan_objmgr_cmn.h>
-#include <wlan_objmgr_psoc_obj.h>
-#include <wlan_objmgr_pdev_obj.h>
-#include <wlan_objmgr_vdev_obj.h>
-#include <wlan_objmgr_peer_obj.h>
-
-#include "wmi_unified_cfr_api.h"
-#include "wmi_unified_param.h"
-#include "wmi_unified_cfr_param.h"
-#define PEER_CFR_CAPTURE_ENABLE 1
-#define PEER_CFR_CAPTURE_DISABLE 0
-
-#define PEER_CFR_CAPTURE_EVT_STATUS_MASK 0x80000000
-#define PEER_CFR_CAPTURE_EVT_PS_STATUS_MASK 0x40000000
-#define CFR_TX_EVT_STATUS_MASK 0x00000003
-
-/* Status codes used by correlate and relay function */
-#define STATUS_STREAM_AND_RELEASE 0
-#define STATUS_HOLD 1
-#define STATUS_ERROR -1
-
-/* Module IDs using corrlation function */
-#define CORRELATE_DBR_MODULE_ID 0
-/*
- * HKV2 - Tx completion event for one-shot capture
- * Cypress - Tx completion event for one-shot capture (or) RXTLV event for RCC
- */
-#define CORRELATE_TX_EV_MODULE_ID 1
-
-/**
- * target_if_cfr_init_pdev() - Inits cfr pdev and registers necessary handlers.
- * @psoc: pointer to psoc object
- * @pdev: pointer to pdev object
- *
- * Return: Registration status for necessary handlers
- */
-int target_if_cfr_init_pdev(struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev);
-
-/**
- * target_if_cfr_deinit_pdev() - De-inits corresponding pdev and handlers.
- * @psoc: pointer to psoc object
- * @pdev: pointer to pdev object
- *
- * Return: De-registration status for necessary handlers
- */
-int target_if_cfr_deinit_pdev(struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev);
-
-/**
- * target_if_cfr_tx_ops_register() - Registers tx ops for cfr module
- * @tx_ops - pointer to tx_ops structure.
- */
-void target_if_cfr_tx_ops_register(struct wlan_lmac_if_tx_ops *tx_ops);
-
-/**
- * target_if_cfr_enable_cfr_timer() - Enables cfr timer
- * @pdev: pointer to pdev object
- * @cfr_timer: Amount of time this timer has to run
- *
- * Return: status of timer
- */
-int target_if_cfr_enable_cfr_timer(struct wlan_objmgr_pdev *pdev,
- uint32_t cfr_timer);
-
-/**
- * target_if_cfr_pdev_set_param() - Function to set params for cfr config
- * @pdev: pointer to pdev object
- * @param_id: param id which has to be set
- * @param_value: value of param being set
- *
- * Return: success/failure of setting param
- */
-int target_if_cfr_pdev_set_param(struct wlan_objmgr_pdev *pdev,
- uint32_t param_id, uint32_t param_value);
-/**
- * target_if_cfr_start_capture() - Function to start cfr capture for a peer
- * @pdev: pointer to pdev object
- * @peer: pointer to peer object
- * @cfr_params: capture parameters for this peer
- *
- * Return: success/failure status of start capture
- */
-int target_if_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer,
- struct cfr_capture_params *cfr_params);
-/**
- * target_if_cfr_stop_capture() - Function to stop cfr capture for a peer
- * @pdev: pointer to pdev object
- * @peer: pointer to peer object
- *
- * Return: success/failure status of stop capture
- */
-int target_if_cfr_stop_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer);
-
-/**
- * target_if_cfr_get_target_type() - Function to get target type
- * @psoc: pointer to psoc object
- *
- * Return: target type of target
- */
-int target_if_cfr_get_target_type(struct wlan_objmgr_psoc *psoc);
-
-/**
- * target_if_cfr_set_cfr_support() - Function to set cfr support
- * @psoc: pointer to psoc object
- * @value: value to be set
- */
-void target_if_cfr_set_cfr_support(struct wlan_objmgr_psoc *psoc,
- uint8_t value);
-
-/**
- * target_if_cfr_info_send() - Function to send cfr info to upper layers
- * @pdev: pointer to pdev object
- * @head: pointer to cfr info head
- * @hlen: head len
- * @data: pointer to cfr info data
- * @dlen: data len
- * @tail: pointer to cfr info tail
- * @tlen: tail len
- */
-void target_if_cfr_info_send(struct wlan_objmgr_pdev *pdev, void *head,
- size_t hlen, void *data, size_t dlen, void *tail,
- size_t tlen);
-
-/**
- * cfr_wifi2_0_init_pdev() - Function to init legacy pdev
- * @psoc: pointer to psoc object
- * @pdev: pointer to pdev object
- *
- * Return: success/failure status of init
- */
-QDF_STATUS cfr_wifi2_0_init_pdev(struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev);
-
-/**
- * cfr_wifi2_0_deinit_pdev() - Function to deinit legacy pdev
- * @psoc: pointer to psoc object
- * @pdev: pointer to pdev object
- *
- * Return: success/failure status of deinit
- */
-QDF_STATUS cfr_wifi2_0_deinit_pdev(struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev);
-#endif
diff --git a/target_if/cfr/inc/target_if_cfr_6018.h b/target_if/cfr/inc/target_if_cfr_6018.h
deleted file mode 100644
index 4255f85..0000000
--- a/target_if/cfr/inc/target_if_cfr_6018.h
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _TARGET_IF_CFR_6018_H_
-#define _TARGET_IF_CFR_6018_H_
-
-#ifdef WLAN_ENH_CFR_ENABLE
-/*
- * Memory requirements :
- *
- * 1. DMA header :
- *
- * Legacy DMA header(QCA8074V2) : 2 words (length = 8 bytes)
- * Enhanced DMA header(QCA6018) : Upto 16 words depending on no. of MU users
- * in UL-MU-PPDU (Max length = 64 bytes)
- *
- * Fixed 4 words for whal_cfir_enhanced_hdr + freeze TLV
- * + uplink_user_info TLV (MAX 4)
- *
- * mu_rx_num_users -> No. of words in CFR DMA header
- * 0 -> 12 = 4 + 7(freeze TLV) + 1(for 64-bit alignment)
- * 1 -> 12 = 4 + 7(freeze TLV) + 1(user1)
- * 2 -> 14 = 4 + 7(freeze TLV) + 2(users 1,2) + 1(for 64-bit alignment)
- * 3 -> 14 = 4 + 7(freeze TLV) + 3(users 1,2,3)
- * 4 -> 16 = 4 + 7(freeze TLV) + 4(users 1,2,3,4) + 1(for 64-bit alignment)
- *
- *
- * 2. CFR data size for max BW/Nss/Nrx
- *
- * Cypress : Max BW = 80 MHz
- * NSS = 2
- * Nrx = 2
- * Size of one tone = 4 bytes
- *
- * a. RTT-H - 2048 bytes
- *
- * b. Debug-H (MIMO CFR) - 16016 bytes
- *
- * c. RTT-H + CIR - 10240 bytes = 2048(RTT-H) + 8192(CIR)
- */
-
-/* Max 4 users in MU case */
-#define CYP_CFR_MU_USERS 4
-
-#define CYP_MAX_HEADER_LENGTH_WORDS 16
-
-/* payload_len = Max(2048, 16016, 10240) = 16064 (64-bit alignment) */
-#define CYP_MAX_DATA_LENGTH_BYTES 16064
-
-/* in ms */
-#define LUT_AGE_TIMER 3000
-#define LUT_AGE_THRESHOLD 3000
-#define NUM_LUT_ENTRIES 136
-
-/* Max size :
- * 16173 = 93 bytes(csi header) + 64 bytes(cfr header) + 16016 bytes(cfr
- * payload)
- */
-#define STREAMFS_MAX_SUBBUF_CYP 16173
-
-#define STREAMFS_NUM_SUBBUF_CYP 255
-
-/*
- * @tag: ucode fills this with 0xBA
- *
- * @length: length of CFR header in words (32-bit)
- *
- * @upload_done: ucode sets this to 1 to indicate DMA completion
- *
- * @capture_type:
- *
- * 0 - None
- * 1 - RTT-H (Nss = 1, Nrx)
- * 2 - Debug-H (Nss, Nrx)
- * 3 - Reserved
- * 5 - RTT-H + CIR(Nss, Nrx)
- *
- * @preamble_type:
- *
- * 0 - Legacy
- * 1 - HT
- * 2 - VHT
- * 3 - HE
- *
- * @nss:
- *
- * 0 - 1-stream
- * 1 - 2-stream
- * .. ..
- * 7 - 8-stream
- *
- *@num_chains:
- *
- * 0 - 1-chain
- * 1 - 2-chain
- * .. ..
- * 7 - 8-chain
- *
- *@upload_bw_pkt:
- *
- * 0 - 20 MHz
- * 1 - 40 MHz
- * 2 - 80 MHz
- * 3 - 160 MHz
- *
- * @sw_peer_id_valid: Indicates whether sw_peer_id field is valid or not,
- * sent from MAC to PHY via the MACRX_FREEZE_CAPTURE_CHANNEL TLV
- *
- * @sw_peer_id: Indicates peer id based on AST search, sent from MAC to PHY
- * via the MACRX_FREEZE_CAPTURE_CHANNEL TLV
- *
- * @phy_ppdu_id: sent from PHY to MAC, copied to MACRX_FREEZE_CAPTURE_CHANNEL
- * TLV
- *
- * @total_bytes: Total size of CFR payload (FFT bins)
- *
- * @header_version:
- *
- * 1 - HKV2/Hastings
- * 2 - Cypress
- *
- * @target_id:
- *
- * 1 - Hastings
- * 2 - Cypress
- * 3 - Hastings Prime
- * 4 - Pine
- *
- * @cfr_fmt:
- *
- * 0 - raw (32-bit format)
- * 1 - compressed (24-bit format)
- *
- * @mu_rx_data_incl: Indicates whether CFR header contains UL-MU-MIMO info
- *
- * @freeze_data_incl: Indicates whether CFR header contains
- * MACRX_FREEZE_CAPTURE_CHANNEL TLV
- *
- * @decimation_factor: FFT bins decimation
- * @mu_rx_num_users: Number of users in UL-MU-PPDU
- */
-struct whal_cfir_enhanced_hdr {
- uint16_t tag : 8,
- length : 6,
- rsvd1 : 2;
-
- uint16_t upload_done : 1,
- capture_type : 3,
- preamble_type : 2,
- nss : 3,
- num_chains : 3,
- upload_pkt_bw : 3,
- sw_peer_id_valid : 1;
-
- uint16_t sw_peer_id : 16;
-
- uint16_t phy_ppdu_id : 16;
-
- uint16_t total_bytes;
-
- uint16_t header_version :4,
- target_id :4,
- cfr_fmt :1,
- rsvd2 :1,
- mu_rx_data_incl :1,
- freeze_data_incl:1,
- rsvd3 :4;
-
- uint16_t mu_rx_num_users :8,
- decimation_factor :4,
- rsvd4 :4;
-
- uint16_t rsvd5;
-};
-
-struct macrx_freeze_capture_channel {
- uint16_t freeze : 1, //[0]
- capture_reason : 3, //[3:1]
- packet_type : 2, //[5:4]
- packet_sub_type : 4, //[9:6]
- reserved : 5, //[14:10]
- sw_peer_id_valid : 1; //[15]
- uint16_t sw_peer_id : 16; //[15:0]
- uint16_t phy_ppdu_id : 16; //[15:0]
- uint16_t packet_ta_lower_16 : 16; //[15:0]
- uint16_t packet_ta_mid_16 : 16; //[15:0]
- uint16_t packet_ta_upper_16 : 16; //[15:0]
- uint16_t packet_ra_lower_16 : 16; //[15:0]
- uint16_t packet_ra_mid_16 : 16; //[15:0]
- uint16_t packet_ra_upper_16 : 16; //[15:0]
- uint16_t tsf_timestamp_15_0 : 16; //[15:0]
- uint16_t tsf_timestamp_31_16 : 16; //[15:0]
- uint16_t tsf_timestamp_47_32 : 16; //[15:0]
- uint16_t tsf_timestamp_63_48 : 16; //[15:0]
- uint16_t user_index : 6, //[5:0]
- directed : 1, //[6]
- reserved_13 : 9; //[15:7]
-};
-
-struct uplink_user_setup_info {
- uint32_t bw_info_valid : 1, //[0]
- uplink_receive_type : 2, //[2:1]
- reserved_0a : 1, //[3]
- uplink_11ax_mcs : 4, //[7:4]
- ru_width : 7, //[14:8]
- reserved_0b : 1, //[15]
- nss : 3, //[18:16]
- stream_offset : 3, //[21:19]
- sta_dcm : 1, //[22]
- sta_coding : 1, //[23]
- ru_start_index : 7, //[30:24]
- reserved_0c : 1; //[31]
-};
-
-/**
- * cfr_6018_init_pdev() - Inits cfr pdev and registers necessary handlers.
- * @psoc: pointer to psoc object
- * @pdev: pointer to pdev object
- *
- * Return: Registration status for necessary handlers
- */
-QDF_STATUS cfr_6018_init_pdev(
- struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev);
-
-/**
- * cfr_6018_deinit_pdev() - De-inits corresponding pdev and handlers.
- * @psoc: pointer to psoc object
- * @pdev: pointer to pdev object
- *
- * Return: De-registration status for necessary handlers
- */
-QDF_STATUS cfr_6018_deinit_pdev(
- struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev);
-
-/**
- * target_if_cfr_start_lut_age_timer() - Start timer to flush aged-out LUT
- * entries
- * @pdev: pointer to pdev object
- *
- * Return: None
- */
-void target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev);
-
-/**
- * target_if_cfr_stop_lut_age_timer() - Stop timer to flush aged-out LUT
- * entries
- * @pdev: pointer to pdev object
- *
- * Return: None
- */
-void target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev);
-
-/**
- * target_if_cfr_dump_lut_enh() - Dump all valid LUT entries
- * @pdev: objmgr PDEV
- *
- * Return: none
- */
-void target_if_cfr_dump_lut_enh(struct wlan_objmgr_pdev *pdev);
-
-/**
- * target_if_cfr_config_rcc() - Start repetitive channel capture
- * @pdev: pointer to pdev object
- * @rcc_param: rcc configurations
- *
- * Return: Success/Failure status
- */
-QDF_STATUS target_if_cfr_config_rcc(struct wlan_objmgr_pdev *pdev,
- struct cfr_rcc_param *rcc_param);
-
-/**
- * target_if_cfr_default_ta_ra_config() - Configure default values to all
- * params(BW/NSS/TA/RA) in TA_RA mode
- * @rcc_param: rcc configurations
- * @allvalid: Indicates whether all TA_RA params are valid or not.
- * It could be either 0 or 1.
- * 1: should be sent to FW during CFR initialization
- * 0: should be set, after a successful commit session.
- * @reset_cfg: This bitmap is being used to determine which groups'
- * parameters are needed to be reset to its default state.
- */
-void target_if_cfr_default_ta_ra_config(struct cfr_rcc_param *rcc_param,
- bool allvalid, uint16_t reset_cfg);
-
-/**
- * target_if_cfr_rx_tlv_process() - Process PPDU status TLVs and store info in
- * lookup table
- * @pdev: PDEV object
- * @nbuf: ppdu info
- *
- * Return: none
- */
-void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf);
-
-/**
- * target_if_cfr_update_global_cfg() - Update global config after a successful
- * commit
- * @pdev: pointer to pdev object
- *
- * Return: None
- */
-void target_if_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev);
-#else
-static QDF_STATUS cfr_6018_init_pdev(
- struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev)
-{
- return QDF_STATUS_SUCCESS;
-}
-
-static QDF_STATUS cfr_6018_deinit_pdev(
- struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev)
-{
- return QDF_STATUS_SUCCESS;
-}
-#endif
-#endif
diff --git a/target_if/cfr/src/target_if_cfr.c b/target_if/cfr/src/target_if_cfr.c
deleted file mode 100644
index 525b212..0000000
--- a/target_if/cfr/src/target_if_cfr.c
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <target_if_cfr.h>
-#include <wlan_tgt_def_config.h>
-#include <target_type.h>
-#include <hif_hw_version.h>
-#include <ol_if_athvar.h>
-#include <target_if.h>
-#include <wlan_lmac_if_def.h>
-#include <wlan_osif_priv.h>
-#include <wlan_mlme_dispatcher.h>
-#include <init_deinit_lmac.h>
-#include <wlan_cfr_utils_api.h>
-#include <wlan_objmgr_pdev_obj.h>
-#include <target_if_cfr_8074v2.h>
-#include <target_if_cfr_6018.h>
-
-int target_if_cfr_stop_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer)
-{
- struct peer_cfr *pe;
- struct peer_cfr_params param = {0};
- struct wmi_unified *pdev_wmi_handle = NULL;
- struct wlan_objmgr_vdev *vdev = {0};
- struct pdev_cfr *pdev_cfrobj;
- int retv = 0;
-
- pe = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_CFR);
- if (pe == NULL)
- return -EINVAL;
-
- pdev_wmi_handle = lmac_get_pdev_wmi_handle(pdev);
- vdev = wlan_peer_get_vdev(peer);
-
- qdf_mem_set(¶m, sizeof(param), 0);
-
- param.request = PEER_CFR_CAPTURE_DISABLE;
- param.macaddr = wlan_peer_get_macaddr(peer);
- param.vdev_id = wlan_vdev_get_id(vdev);
-
- param.periodicity = pe->period;
- param.bandwidth = pe->bandwidth;
- param.capture_method = pe->capture_method;
-
- retv = wmi_unified_send_peer_cfr_capture_cmd(pdev_wmi_handle, ¶m);
-
- pdev_cfrobj = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (!pdev_cfrobj) {
- cfr_err("pdev object for CFR is null");
- return -EINVAL;
- }
- cfr_err("CFR capture stats for this capture:");
- cfr_err("DBR event count = %llu, Tx event count = %llu "
- "Release count = %llu",
- pdev_cfrobj->dbr_evt_cnt, pdev_cfrobj->tx_evt_cnt,
- pdev_cfrobj->release_cnt);
-
- pdev_cfrobj->dbr_evt_cnt = 0;
- pdev_cfrobj->tx_evt_cnt = 0;
- pdev_cfrobj->release_cnt = 0;
-
- return retv;
-}
-
-int target_if_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer,
- struct cfr_capture_params *cfr_params)
-{
- struct peer_cfr_params param = {0};
- struct wmi_unified *pdev_wmi_handle = NULL;
- struct wlan_objmgr_vdev *vdev;
- int retv = 0;
-
- pdev_wmi_handle = lmac_get_pdev_wmi_handle(pdev);
- vdev = wlan_peer_get_vdev(peer);
- qdf_mem_set(¶m, sizeof(param), 0);
-
- param.request = PEER_CFR_CAPTURE_ENABLE;
- param.macaddr = wlan_peer_get_macaddr(peer);
- param.vdev_id = wlan_vdev_get_id(vdev);
-
- param.periodicity = cfr_params->period;
- param.bandwidth = cfr_params->bandwidth;
- param.capture_method = cfr_params->method;
-
- retv = wmi_unified_send_peer_cfr_capture_cmd(pdev_wmi_handle, ¶m);
- return retv;
-}
-
-int target_if_cfr_pdev_set_param(struct wlan_objmgr_pdev *pdev,
- uint32_t param_id, uint32_t param_value)
-{
- struct pdev_params pparam;
- uint32_t pdev_id;
-
- pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
- if (pdev_id < 0)
- return -EINVAL;
-
- qdf_mem_set(&pparam, sizeof(pparam), 0);
- pparam.param_id = param_id;
- pparam.param_value = param_value;
-
- return wmi_unified_pdev_param_send(lmac_get_pdev_wmi_handle(pdev),
- &pparam, pdev_id);
-}
-
-int target_if_cfr_enable_cfr_timer(struct wlan_objmgr_pdev *pdev,
- uint32_t cfr_timer)
-{
- struct pdev_cfr *pa;
- int retval;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (pa == NULL)
- return QDF_STATUS_E_FAILURE;
-
- if (!cfr_timer) {
- /* disable periodic cfr capture */
- retval =
- target_if_cfr_pdev_set_param(pdev,
- wmi_pdev_param_per_peer_prd_cfr_enable,
- WMI_HOST_PEER_CFR_TIMER_DISABLE);
-
- if (retval == QDF_STATUS_SUCCESS)
- pa->cfr_timer_enable = 0;
- } else {
- /* enable periodic cfr capture (default base timer is 10ms ) */
- retval =
- target_if_cfr_pdev_set_param(pdev,
- wmi_pdev_param_per_peer_prd_cfr_enable,
- WMI_HOST_PEER_CFR_TIMER_ENABLE);
-
- if (retval == QDF_STATUS_SUCCESS)
- pa->cfr_timer_enable = 1;
- }
-
- return retval;
-}
-
-int target_if_cfr_get_target_type(struct wlan_objmgr_psoc *psoc)
-{
- uint32_t target_type = 0;
- struct wlan_lmac_if_target_tx_ops *target_type_tx_ops;
-
- target_type_tx_ops = &psoc->soc_cb.tx_ops.target_tx_ops;
-
- if (target_type_tx_ops->tgt_get_tgt_type)
- target_type = target_type_tx_ops->tgt_get_tgt_type(psoc);
-
- return target_type;
-}
-
-int target_if_cfr_init_pdev(struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev)
-{
- uint32_t target_type;
- struct pdev_cfr *pa;
- struct psoc_cfr *cfr_sc;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (pa == NULL)
- return QDF_STATUS_E_FAILURE;
-
- /* Reset unassociated entries for every init */
- qdf_mem_zero(&pa->unassoc_pool[0], MAX_CFR_ENABLED_CLIENTS *
- sizeof(struct unassoc_pool_entry));
-
- cfr_sc = wlan_objmgr_psoc_get_comp_private_obj(psoc,
- WLAN_UMAC_COMP_CFR);
-
- if (cfr_sc == NULL)
- return QDF_STATUS_E_FAILURE;
-
- target_type = target_if_cfr_get_target_type(psoc);
-
- if (target_type == TARGET_TYPE_QCA8074V2) {
- pa->is_cfr_capable = cfr_sc->is_cfr_capable;
- return cfr_8074v2_init_pdev(psoc, pdev);
- } else if ((target_type == TARGET_TYPE_IPQ4019) ||
- (target_type == TARGET_TYPE_QCA9984) ||
- (target_type == TARGET_TYPE_QCA9888)) {
-
- pa->is_cfr_capable = cfr_sc->is_cfr_capable;
-
- return cfr_wifi2_0_init_pdev(psoc, pdev);
- } else if (target_type == TARGET_TYPE_QCA6018) {
- pa->is_cfr_capable = cfr_sc->is_cfr_capable;
- return cfr_6018_init_pdev(psoc, pdev);
- } else
- return QDF_STATUS_E_NOSUPPORT;
-}
-
-int target_if_cfr_deinit_pdev(struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev)
-{
- uint32_t target_type;
-
- target_type = target_if_cfr_get_target_type(psoc);
-
- if (target_type == TARGET_TYPE_QCA8074V2) {
- return cfr_8074v2_deinit_pdev(psoc, pdev);
- } else if ((target_type == TARGET_TYPE_IPQ4019) ||
- (target_type == TARGET_TYPE_QCA9984) ||
- (target_type == TARGET_TYPE_QCA9888)) {
-
- return cfr_wifi2_0_deinit_pdev(psoc, pdev);
- } else if (target_type == TARGET_TYPE_QCA6018) {
- return cfr_6018_deinit_pdev(psoc, pdev);
- } else
- return QDF_STATUS_E_NOSUPPORT;
-}
-
-#ifdef WLAN_ENH_CFR_ENABLE
-QDF_STATUS target_if_cfr_config_rcc(struct wlan_objmgr_pdev *pdev,
- struct cfr_rcc_param *rcc_info)
-{
- QDF_STATUS status;
- struct wmi_unified *pdev_wmi_handle = NULL;
-
- pdev_wmi_handle = lmac_get_pdev_wmi_handle(pdev);
- if (!pdev_wmi_handle) {
- cfr_err("pdev_wmi_handle is null");
- return QDF_STATUS_E_NULL_VALUE;
- }
-
- rcc_info->pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
- rcc_info->num_grp_tlvs =
- count_set_bits(rcc_info->modified_in_curr_session);
-
- status = wmi_unified_send_cfr_rcc_cmd(pdev_wmi_handle, rcc_info);
- return status;
-}
-
-void target_if_cfr_default_ta_ra_config(struct cfr_rcc_param *rcc_info,
- bool allvalid, uint16_t reset_cfg)
-{
- struct ta_ra_cfr_cfg *curr_cfg = NULL;
- int grp_id;
-
- uint8_t def_mac[QDF_MAC_ADDR_SIZE] = {0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF};
- uint8_t null_mac[QDF_MAC_ADDR_SIZE] = {0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00};
-
- for (grp_id = 0; grp_id < MAX_TA_RA_ENTRIES; grp_id++) {
- if (qdf_test_bit(grp_id, (unsigned long *)&reset_cfg)) {
- curr_cfg = &rcc_info->curr[grp_id];
- qdf_mem_copy(curr_cfg->tx_addr,
- null_mac, QDF_MAC_ADDR_SIZE);
- qdf_mem_copy(curr_cfg->tx_addr_mask,
- def_mac, QDF_MAC_ADDR_SIZE);
- qdf_mem_copy(curr_cfg->rx_addr,
- null_mac, QDF_MAC_ADDR_SIZE);
- qdf_mem_copy(curr_cfg->rx_addr_mask,
- def_mac, QDF_MAC_ADDR_SIZE);
- curr_cfg->bw = 0xf;
- curr_cfg->nss = 0xff;
- curr_cfg->mgmt_subtype_filter = 0;
- curr_cfg->ctrl_subtype_filter = 0;
- curr_cfg->data_subtype_filter = 0;
- if (!allvalid) {
- curr_cfg->valid_ta = 0;
- curr_cfg->valid_ta_mask = 0;
- curr_cfg->valid_ra = 0;
- curr_cfg->valid_ra_mask = 0;
- curr_cfg->valid_bw_mask = 0;
- curr_cfg->valid_nss_mask = 0;
- curr_cfg->valid_mgmt_subtype = 0;
- curr_cfg->valid_ctrl_subtype = 0;
- curr_cfg->valid_data_subtype = 0;
- } else {
- curr_cfg->valid_ta = 1;
- curr_cfg->valid_ta_mask = 1;
- curr_cfg->valid_ra = 1;
- curr_cfg->valid_ra_mask = 1;
- curr_cfg->valid_bw_mask = 1;
- curr_cfg->valid_nss_mask = 1;
- curr_cfg->valid_mgmt_subtype = 1;
- curr_cfg->valid_ctrl_subtype = 1;
- curr_cfg->valid_data_subtype = 1;
- }
- }
- }
-}
-#endif
-
-#ifdef WLAN_ENH_CFR_ENABLE
-void target_if_enh_cfr_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops)
-{
- tx_ops->cfr_tx_ops.cfr_config_rcc =
- target_if_cfr_config_rcc;
- tx_ops->cfr_tx_ops.cfr_start_lut_timer =
- target_if_cfr_start_lut_age_timer;
- tx_ops->cfr_tx_ops.cfr_stop_lut_timer =
- target_if_cfr_stop_lut_age_timer;
- tx_ops->cfr_tx_ops.cfr_default_ta_ra_cfg =
- target_if_cfr_default_ta_ra_config;
- tx_ops->cfr_tx_ops.cfr_dump_lut_enh =
- target_if_cfr_dump_lut_enh;
- tx_ops->cfr_tx_ops.cfr_rx_tlv_process =
- target_if_cfr_rx_tlv_process;
- tx_ops->cfr_tx_ops.cfr_update_global_cfg =
- target_if_cfr_update_global_cfg;
-}
-#else
-void target_if_enh_cfr_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops)
-{
-}
-#endif
-
-void target_if_cfr_tx_ops_register(struct wlan_lmac_if_tx_ops *tx_ops)
-{
- tx_ops->cfr_tx_ops.cfr_init_pdev =
- target_if_cfr_init_pdev;
- tx_ops->cfr_tx_ops.cfr_deinit_pdev =
- target_if_cfr_deinit_pdev;
- tx_ops->cfr_tx_ops.cfr_enable_cfr_timer =
- target_if_cfr_enable_cfr_timer;
- tx_ops->cfr_tx_ops.cfr_start_capture =
- target_if_cfr_start_capture;
- tx_ops->cfr_tx_ops.cfr_stop_capture =
- target_if_cfr_stop_capture;
- target_if_enh_cfr_tx_ops(tx_ops);
-}
-
-void target_if_cfr_set_cfr_support(struct wlan_objmgr_psoc *psoc,
- uint8_t value)
-{
- if (psoc->soc_cb.rx_ops.cfr_rx_ops.cfr_support_set)
- psoc->soc_cb.rx_ops.cfr_rx_ops.cfr_support_set(psoc, value);
-}
-
-void target_if_cfr_info_send(struct wlan_objmgr_pdev *pdev, void *head,
- size_t hlen, void *data, size_t dlen, void *tail,
- size_t tlen)
-{
- struct wlan_objmgr_psoc *psoc;
-
- psoc = wlan_pdev_get_psoc(pdev);
-
- if (psoc->soc_cb.rx_ops.cfr_rx_ops.cfr_info_send)
- psoc->soc_cb.rx_ops.cfr_rx_ops.cfr_info_send(pdev, head, hlen,
- data, dlen, tail,
- tlen);
-}
diff --git a/target_if/cfr/src/target_if_cfr_6018.c b/target_if/cfr/src/target_if_cfr_6018.c
deleted file mode 100644
index 826726a..0000000
--- a/target_if/cfr/src/target_if_cfr_6018.c
+++ /dev/null
@@ -1,1648 +0,0 @@
-/*
- * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef WLAN_ENH_CFR_ENABLE
-
-#include <target_if_cfr.h>
-#include <wlan_tgt_def_config.h>
-#include <target_type.h>
-#include <hif_hw_version.h>
-#include <ol_if_athvar.h>
-#include <target_if.h>
-#include <wlan_lmac_if_def.h>
-#include <wlan_osif_priv.h>
-#include <wlan_mlme_dispatcher.h>
-#include <init_deinit_lmac.h>
-#include <wlan_cfr_utils_api.h>
-#ifdef DIRECT_BUF_RX_ENABLE
-#include <target_if_direct_buf_rx_api.h>
-#endif
-#include <target_if_cfr_6018.h>
-#include "cdp_txrx_ctrl.h"
-
-#define CMN_NOISE_FLOOR (-96)
-
-static u_int32_t end_magic = 0xBEAFDEAD;
-/**
- * get_lut_entry() - Retrieve LUT entry using cookie number
- * @pcfr: PDEV CFR object
- * @offset: cookie number
- *
- * Return: look up table entry
- */
-static struct look_up_table *get_lut_entry(struct pdev_cfr *pcfr,
- int offset)
-{
- if (offset > NUM_LUT_ENTRIES) {
- cfr_err("Invalid offset\n");
- return NULL;
- }
- return &pcfr->lut[offset];
-}
-
-/**
- * release_lut_entry_enh() - Clear all params in an LUT entry
- * @pdev: objmgr PDEV
- * @lut: pointer to LUT
- *
- * Return: status
- */
-int release_lut_entry_enh(struct wlan_objmgr_pdev *pdev,
- struct look_up_table *lut)
-{
- lut->dbr_recv = false;
- lut->tx_recv = false;
- lut->data = NULL;
- lut->data_len = 0;
- lut->dbr_ppdu_id = 0;
- lut->tx_ppdu_id = 0;
- lut->dbr_tstamp = 0;
- lut->txrx_tstamp = 0;
- lut->tx_address1 = 0;
- lut->tx_address2 = 0;
- lut->dbr_address = 0;
- qdf_mem_zero(&lut->header, sizeof(struct csi_cfr_header));
-
- return 0;
-}
-
-/**
- * target_if_cfr_dump_lut_enh() - dump all valid lut entries
- * @pdev: objmgr pdev
- *
- * return: none
- */
-void target_if_cfr_dump_lut_enh(struct wlan_objmgr_pdev *pdev)
-{
- struct pdev_cfr *pcfr;
- struct look_up_table *lut = NULL;
- int i = 0;
- uint64_t diff;
- QDF_STATUS retval = 0;
-
- retval = wlan_objmgr_pdev_try_get_ref(pdev, WLAN_CFR_ID);
- if (retval != QDF_STATUS_SUCCESS) {
- cfr_err("failed to get pdev reference");
- return;
- }
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (!pcfr) {
- cfr_err("pdev object for CFR is null");
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
- return;
- }
-
- qdf_spin_lock_bh(&pcfr->lut_lock);
-
- for (i = 0; i < NUM_LUT_ENTRIES; i++) {
- lut = get_lut_entry(pcfr, i);
- if (!lut)
- continue;
- if (lut->dbr_recv ^ lut->tx_recv) {
- diff = (lut->dbr_tstamp > lut->txrx_tstamp) ?
- (lut->dbr_tstamp - lut->txrx_tstamp) :
- (lut->txrx_tstamp - lut->dbr_tstamp);
- cfr_err("idx:%d dbrevnt: %d txrxevent: %d "
- "dbrppdu:0x%x txrxppdu:0x%x dbr_tstamp: %llu "
- "txrx_tstamp: %llu diff: %llu\n",
- i, lut->dbr_recv, lut->tx_recv,
- lut->dbr_ppdu_id, lut->tx_ppdu_id,
- lut->dbr_tstamp, lut->txrx_tstamp, diff);
- }
-
- }
-
- qdf_spin_unlock_bh(&pcfr->lut_lock);
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-}
-
-/**
- * cfr_free_pending_dbr_events() - Flush all pending DBR events. This is useful
- * in cases where for RXTLV drops in host monitor status ring is huge.
- * @pdev: objmgr pdev
- *
- * return: none
- */
-void cfr_free_pending_dbr_events(struct wlan_objmgr_pdev *pdev)
-{
- struct pdev_cfr *pcfr;
- struct look_up_table *lut = NULL;
- int i = 0;
- QDF_STATUS retval = 0;
-
- retval = wlan_objmgr_pdev_try_get_ref(pdev, WLAN_CFR_ID);
- if (retval != QDF_STATUS_SUCCESS) {
- cfr_err("failed to get pdev reference");
- return;
- }
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (!pcfr) {
- cfr_err("pdev object for CFR is null");
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
- return;
- }
-
- for (i = 0; i < NUM_LUT_ENTRIES; i++) {
- lut = get_lut_entry(pcfr, i);
- if (!lut)
- continue;
-
- if (lut->dbr_recv && !lut->tx_recv &&
- (lut->dbr_tstamp < pcfr->last_success_tstamp)) {
- target_if_dbr_buf_release(pdev, DBR_MODULE_CFR,
- lut->dbr_address,
- i, 0);
- pcfr->flush_dbr_cnt++;
- release_lut_entry_enh(pdev, lut);
- }
- }
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-}
-
-/**
- * dump_freeze_tlv() - Dump freeze TLV sent in enhanced DMA header
- * @freeze_tlv: Freeze TLV sent from MAC to PHY
- * @cookie: Index into lookup table
- *
- * Return: none
- */
-void dump_freeze_tlv(void *freeze_tlv, uint32_t cookie)
-{
- struct macrx_freeze_capture_channel *freeze =
- (struct macrx_freeze_capture_channel *)freeze_tlv;
-
- cfr_debug("<DBRCOMP><FREEZE><%u>\n"
- "freeze: %d capture_reason: %d packet_type: 0x%x\n"
- "packet_subtype: 0x%x sw_peer_id_valid: %d sw_peer_id: %d\n"
- "phy_ppdu_id: 0x%04x packet_ta_upper_16: 0x%04x\n"
- "packet_ta_mid_16: 0x%04x packet_ta_lower_16: 0x%04x\n"
- "packet_ra_upper_16: 0x%04x packet_ra_mid_16: 0x%04x\n"
- "packet_ra_lower_16: 0x%04x tsf_timestamp_63_48: 0x%04x\n"
- "tsf_timestamp_47_32: 0x%04x tsf_timestamp_31_16: 0x%04x\n"
- "tsf_timestamp_15_0: 0x%04x user_index: %d directed: %d\n",
- cookie,
- freeze->freeze,
- freeze->capture_reason,
- freeze->packet_type,
- freeze->packet_sub_type,
- freeze->sw_peer_id_valid,
- freeze->sw_peer_id,
- freeze->phy_ppdu_id,
- freeze->packet_ta_upper_16,
- freeze->packet_ta_mid_16,
- freeze->packet_ta_lower_16,
- freeze->packet_ra_upper_16,
- freeze->packet_ra_mid_16,
- freeze->packet_ra_lower_16,
- freeze->tsf_timestamp_63_48,
- freeze->tsf_timestamp_47_32,
- freeze->tsf_timestamp_31_16,
- freeze->tsf_timestamp_15_0,
- freeze->user_index,
- freeze->directed);
-}
-
-/**
- * dump_mu_rx_info() - Dump MU info in enhanced DMA header
- * @mu_rx_user_info: MU info sent by ucode
- * @mu_rx_num_users: Number of MU users in UL-MU-PPDU
- * @cookie: Index into lookup table
- *
- * Return: none
- */
-void dump_mu_rx_info(void *mu_rx_user_info, uint8_t mu_rx_num_users,
- uint32_t cookie)
-{
- uint8_t i;
- struct uplink_user_setup_info *ul_mu_user_info =
- (struct uplink_user_setup_info *) mu_rx_user_info;
-
- for (i = 0 ; i < mu_rx_num_users; i++) {
- cfr_debug("<DBRCOMP><MU><%u>\n"
- "<user_id:%d>\n"
- "bw_info_valid = %d\n"
- "uplink_receive_type = %d\n"
- "uplink_11ax_mcs = %d\n"
- "ru_width = %d\n"
- "nss = %d\n"
- "stream_offset = %d\n"
- "sta_dcm = %d\n"
- "sta_coding = %d\n"
- "ru_start_index = %d\n",
- cookie,
- i,
- ul_mu_user_info->bw_info_valid,
- ul_mu_user_info->uplink_receive_type,
- ul_mu_user_info->uplink_11ax_mcs,
- ul_mu_user_info->ru_width,
- ul_mu_user_info->nss,
- ul_mu_user_info->stream_offset,
- ul_mu_user_info->sta_dcm,
- ul_mu_user_info->sta_coding,
- ul_mu_user_info->ru_start_index);
- ul_mu_user_info += sizeof(struct uplink_user_setup_info);
- }
-}
-
-void dump_metadata(struct csi_cfr_header *header, uint32_t cookie)
-{
- uint8_t user_id, chain_id;
- struct cfr_metadata_version_3 *meta = &header->u.meta_v3;
- uint8_t *usermac = NULL;
-
- cfr_debug("<METADATA><%u>\n"
- "start_magic_num = 0x%x\n"
- "vendorid = 0x%x\n"
- "cfr_metadata_version = %d\n"
- "cfr_data_version = %d\n"
- "chip_type = %d\n"
- "platform_type = %d\n"
- "status = %d\n"
- "capture_bw = %d\n"
- "channel_bw = %d\n"
- "phy_mode = %d\n"
- "prim20_chan = %d\n"
- "center_freq1 = %d\n"
- "center_freq2 = %d\n"
- "ack_capture_mode = %d\n"
- "cfr_capture_type = %d\n"
- "sts_count = %d\n"
- "num_rx_chain = %d\n"
- "timestamp = 0x%x\n"
- "length = %d\n"
- "is_mu_ppdu = %d\n"
- "num_users = %d\n",
- cookie,
- header->start_magic_num,
- header->vendorid,
- header->cfr_metadata_version,
- header->cfr_data_version,
- header->chip_type,
- header->pltform_type,
- meta->status,
- meta->capture_bw,
- meta->channel_bw,
- meta->phy_mode,
- meta->prim20_chan,
- meta->center_freq1,
- meta->center_freq2,
- meta->capture_mode,
- meta->capture_type,
- meta->sts_count,
- meta->num_rx_chain,
- meta->timestamp,
- meta->length,
- meta->is_mu_ppdu,
- meta->num_mu_users);
-
- if (meta->is_mu_ppdu) {
- for (user_id = 0; user_id < meta->num_mu_users; user_id++) {
- usermac = meta->peer_addr.mu_peer_addr[user_id];
- cfr_debug("peermac[%d]: %s\n",
- user_id,
- ether_sprintf(usermac));
- }
- } else {
- cfr_debug("peermac: %s\n",
- ether_sprintf(meta->peer_addr.su_peer_addr));
- }
-
- for (chain_id = 0; chain_id < HOST_MAX_CHAINS; chain_id++) {
- cfr_debug("chain_rssi[%d] = %d\n",
- chain_id,
- meta->chain_rssi[chain_id]);
- }
-
- for (chain_id = 0; chain_id < HOST_MAX_CHAINS; chain_id++) {
- cfr_debug("chain_phase[%d] = %d\n",
- chain_id,
- meta->chain_phase[chain_id]);
- }
-}
-/**
- * dump_enh_dma_hdr() - Dump enhanced DMA header populated by ucode
- * @dma_hdr: pointer to enhanced DMA header
- * @freeze_tlv: pointer to MACRX_FREEZE_CAPTURE_CHANNEL TLV
- * @mu_rx_user_info: UPLINK_USER_SETUP_INFO TLV
- * @header: pointer to metadata passed to userspace
- * @error: Indicates whether it is an error
- * @cookie: Index into lookup table
- *
- * Return: none
- */
-void dump_enh_dma_hdr(struct whal_cfir_enhanced_hdr *dma_hdr,
- void *freeze_tlv,
- void *mu_rx_user_info,
- struct csi_cfr_header *header,
- int error,
- uint32_t cookie)
-{
- if (!error) {
- cfr_debug("<DBRCOMP><%u>\n"
- "Tag: 0x%02x Length: %d udone: %d\n"
- "ctype: %d preamble: %d Nss: %d\n"
- "num_chains: %d bw: %d peervalid: %d\n"
- "peer_id: %d ppdu_id: 0x%04x total_bytes: %d\n"
- "header_version: %d target_id: %d cfr_fmt: %d\n"
- "mu_rx_data_incl: %d freeze_data_incl: %d\n"
- "mu_rx_num_users: %d decimation_factor: %d\n",
- cookie,
- dma_hdr->tag,
- dma_hdr->length,
- dma_hdr->upload_done,
- dma_hdr->capture_type,
- dma_hdr->preamble_type,
- dma_hdr->nss,
- dma_hdr->num_chains,
- dma_hdr->upload_pkt_bw,
- dma_hdr->sw_peer_id_valid,
- dma_hdr->sw_peer_id,
- dma_hdr->phy_ppdu_id,
- dma_hdr->total_bytes,
- dma_hdr->header_version,
- dma_hdr->target_id,
- dma_hdr->cfr_fmt,
- dma_hdr->mu_rx_data_incl,
- dma_hdr->freeze_data_incl,
- dma_hdr->mu_rx_num_users,
- dma_hdr->decimation_factor);
-
- if (dma_hdr->freeze_data_incl)
- dump_freeze_tlv(freeze_tlv, cookie);
-
- if (dma_hdr->mu_rx_data_incl)
- dump_mu_rx_info(mu_rx_user_info,
- dma_hdr->mu_rx_num_users,
- cookie);
- } else {
- cfr_err("<DBRCOMP><%u>\n"
- "Tag: 0x%02x Length: %d udone: %d\n"
- "ctype: %d preamble: %d Nss: %d\n"
- "num_chains: %d bw: %d peervalid: %d\n"
- "peer_id: %d ppdu_id: 0x%04x total_bytes: %d\n"
- "header_version: %d target_id: %d cfr_fmt: %d\n"
- "mu_rx_data_incl: %d freeze_data_incl: %d\n"
- "mu_rx_num_users: %d decimation_factor: %d\n",
- cookie,
- dma_hdr->tag,
- dma_hdr->length,
- dma_hdr->upload_done,
- dma_hdr->capture_type,
- dma_hdr->preamble_type,
- dma_hdr->nss,
- dma_hdr->num_chains,
- dma_hdr->upload_pkt_bw,
- dma_hdr->sw_peer_id_valid,
- dma_hdr->sw_peer_id,
- dma_hdr->phy_ppdu_id,
- dma_hdr->total_bytes,
- dma_hdr->header_version,
- dma_hdr->target_id,
- dma_hdr->cfr_fmt,
- dma_hdr->mu_rx_data_incl,
- dma_hdr->freeze_data_incl,
- dma_hdr->mu_rx_num_users,
- dma_hdr->decimation_factor);
- }
-}
-
-
-/**
- * extract_peer_mac_from_freeze_tlv() - extract macaddr from freeze tlv
- * @freeze_tlv: Freeze TLV sent from MAC to PHY
- * @peermac: macaddr of the peer
- *
- * Return: none
- */
-void extract_peer_mac_from_freeze_tlv(void *freeze_tlv, uint8_t *peermac)
-{
- struct macrx_freeze_capture_channel *freeze =
- (struct macrx_freeze_capture_channel *)freeze_tlv;
-
- peermac[0] = freeze->packet_ta_lower_16 & 0x00FF;
- peermac[1] = (freeze->packet_ta_lower_16 & 0xFF00) >> 8;
- peermac[2] = freeze->packet_ta_mid_16 & 0x00FF;
- peermac[3] = (freeze->packet_ta_mid_16 & 0xFF00) >> 8;
- peermac[4] = freeze->packet_ta_upper_16 & 0x00FF;
- peermac[5] = (freeze->packet_ta_upper_16 & 0xFF00) >> 8;
-}
-
-/**
- * check_dma_length() - Sanity check DMA header and payload length
- * @dma_hdr: pointer to enhanced DMA header
- *
- * Return: QDF_STATUS
- */
-QDF_STATUS check_dma_length(struct look_up_table *lut)
-{
- if (lut->header_length <= CYP_MAX_HEADER_LENGTH_WORDS &&
- lut->payload_length <= CYP_MAX_DATA_LENGTH_BYTES) {
- return QDF_STATUS_SUCCESS;
- } else {
- return QDF_STATUS_E_FAILURE;
- }
-}
-
-/**
- * correlate_and_relay_enh() - Correlate TXRX and DBR events and stream CFR
- * data to userspace
- * @pdev: objmgr PDEV
- * @cookie: Index into lookup table
- * @lut: pointer to lookup table
- * @module_id: ID of the event received
- * 0 - DBR event
- * 1 - TXRX event
- *
- * Return:
- * - STATUS_ERROR
- * - STATUS_HOLD
- * - STATUS_STREAM_AND_RELEASE
- */
-int correlate_and_relay_enh(struct wlan_objmgr_pdev *pdev, uint32_t cookie,
- struct look_up_table *lut, uint8_t module_id)
-{
- struct pdev_cfr *pcfr;
- uint64_t diff;
- int status = STATUS_ERROR;
-
- if (module_id > 1) {
- cfr_err("Received request with invalid mod id. Investigate!!");
- QDF_ASSERT(0);
- status = STATUS_ERROR;
- goto done;
- }
-
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
-
- if (module_id == CORRELATE_TX_EV_MODULE_ID) {
- if (lut->tx_recv)
- pcfr->cfr_dma_aborts++;
- lut->tx_recv = true;
- } else if (module_id == CORRELATE_DBR_MODULE_ID) {
- pcfr->dbr_evt_cnt++;
- lut->dbr_recv = true;
- }
-
- if ((lut->dbr_recv == true) && (lut->tx_recv == true)) {
- if (lut->dbr_ppdu_id == lut->tx_ppdu_id) {
-
- pcfr->last_success_tstamp = lut->dbr_tstamp;
- if (lut->dbr_tstamp > lut->txrx_tstamp) {
- diff = lut->dbr_tstamp - lut->txrx_tstamp;
- cfr_debug("<CORRELATE><%u>: "
- "TXRX evt -> DBR evt"
- "(delay = %llu ms)\n", cookie, diff);
- } else if (lut->txrx_tstamp > lut->dbr_tstamp) {
- diff = lut->txrx_tstamp - lut->dbr_tstamp;
- cfr_debug("<CORRELATE><%u>: "
- "DBR evt -> TXRX evt"
- "(delay = %llu ms)\n", cookie, diff);
- }
-
- /*
- * Flush pending dbr events, if newer PPDU TLV is
- * received
- */
- cfr_free_pending_dbr_events(pdev);
-
- if (check_dma_length(lut) == QDF_STATUS_SUCCESS) {
- pcfr->release_cnt++;
- cfr_debug("<CORRELATE><%u>:Stream and release "
- "CFR data for "
- "ppdu_id:0x%04x\n", cookie,
- lut->tx_ppdu_id);
- status = STATUS_STREAM_AND_RELEASE;
- goto done;
- } else {
- pcfr->invalid_dma_length_cnt++;
- cfr_err("<CORRELATE><%u>:CFR buffers "
- "received with invalid length "
- "header_length_words = %d "
- "cfr_payload_length_bytes = %d "
- "ppdu_id:0x%04x\n",
- cookie,
- lut->header_length,
- lut->payload_length,
- lut->tx_ppdu_id);
- /*
- * Assert here as length exceeding the allowed
- * limit would anyway manifest as random crash
- */
- QDF_ASSERT(0);
- status = STATUS_ERROR;
- goto done;
- }
- } else {
- /*
- * When there is a ppdu id mismatch, discard the TXRX
- * event since multiple PPDUs are likely to have same
- * dma addr, due to ucode aborts
- */
- cfr_debug("Received new dbr event for same "
- "cookie %u",
- cookie);
- lut->tx_recv = false;
- lut->tx_ppdu_id = 0;
- pcfr->clear_txrx_event++;
- pcfr->cfr_dma_aborts++;
- status = STATUS_HOLD;
- }
- } else {
- status = STATUS_HOLD;
- }
-done:
- return status;
-}
-
-/**
- * target_if_cfr_rx_tlv_process() - Process PPDU status TLVs and store info in
- * lookup table
- * @pdev_obj: PDEV object
- * @nbuf: ppdu info
- *
- * Return: none
- */
-void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
-{
- struct cdp_rx_indication_ppdu *cdp_rx_ppdu;
- struct cdp_rx_stats_ppdu_user *rx_stats_peruser;
- struct cdp_rx_ppdu_cfr_info *cfr_info;
- qdf_dma_addr_t buf_addr = 0, buf_addr_extn = 0;
- struct pdev_cfr *pcfr;
- struct look_up_table *lut = NULL;
- struct csi_cfr_header *header = NULL;
- uint32_t cookie;
- struct wlan_objmgr_psoc *psoc;
- struct wlan_channel *bss_chan;
- enum wlan_phymode ch_phymode;
- uint16_t ch_freq;
- uint32_t ch_cfreq1;
- uint32_t ch_cfreq2;
- uint8_t rx_chainmask;
- struct wlan_objmgr_vdev *vdev = NULL;
- int i, status = 0;
- QDF_STATUS retval = 0;
- struct wlan_lmac_if_cfr_rx_ops *cfr_rx_ops = NULL;
- struct cfr_metadata_version_3 *meta = NULL;
-
- if (qdf_unlikely(!pdev)) {
- cfr_err("pdev is null\n");
- qdf_nbuf_free(nbuf);
- return;
- }
-
- retval = wlan_objmgr_pdev_try_get_ref(pdev, WLAN_CFR_ID);
- if (qdf_unlikely(retval != QDF_STATUS_SUCCESS)) {
- cfr_err("failed to get pdev reference");
- qdf_nbuf_free(nbuf);
- return;
- }
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (qdf_unlikely(!pcfr)) {
- cfr_err("pdev object for CFR is NULL");
- goto relref;
- }
-
- cdp_rx_ppdu = (struct cdp_rx_indication_ppdu *)qdf_nbuf_data(nbuf);
- cfr_info = &cdp_rx_ppdu->cfr_info;
-
- if (!cfr_info->bb_captured_channel)
- goto relref;
-
- psoc = wlan_pdev_get_psoc(pdev);
- if (qdf_unlikely(!psoc)) {
- cfr_err("psoc is null\n");
- goto relref;
- }
-
- cfr_rx_ops = &psoc->soc_cb.rx_ops.cfr_rx_ops;
- buf_addr_extn = cfr_info->rtt_che_buffer_pointer_high8 & 0xF;
- buf_addr = (cfr_info->rtt_che_buffer_pointer_low32 |
- ((uint64_t)buf_addr_extn << 32));
-
-
- if (target_if_dbr_cookie_lookup(pdev, DBR_MODULE_CFR, buf_addr,
- &cookie, 0)) {
- cfr_debug("Cookie lookup failure for addr: 0x%pK",
- (void *)((uintptr_t)buf_addr));
- goto relref;
- }
-
- cfr_debug("<RXTLV><%u>:buffer address: 0x%pK \n"
- "<WIFIRX_PPDU_START_E> ppdu_id: 0x%04x\n"
- "<WIFIRXPCU_PPDU_END_INFO_E> BB_CAPTURED_CHANNEL = %d\n"
- "<WIFIPHYRX_PKT_END_E> RX_LOCATION_INFO_VALID = %d\n"
- "<WIFIPHYRX_PKT_END_E> RTT_CHE_BUFFER_POINTER_LOW32 = %x\n"
- "<WIFIPHYRX_PKT_END_E> RTT_CHE_BUFFER_POINTER_HIGH8 = %x\n"
- "<WIFIPHYRX_PKT_END_E> CHAN_CAPTURE_STATUS = %d\n",
- cookie,
- (void *)((uintptr_t)buf_addr),
- cdp_rx_ppdu->ppdu_id,
- cfr_info->bb_captured_channel,
- cfr_info->rx_location_info_valid,
- cfr_info->rtt_che_buffer_pointer_low32,
- cfr_info->rtt_che_buffer_pointer_high8,
- cfr_info->chan_capture_status);
-
- qdf_spin_lock_bh(&pcfr->lut_lock);
-
- lut = get_lut_entry(pcfr, cookie);
- if (qdf_unlikely(!lut)) {
- cfr_err("lut is NULL");
- goto unlock;
- }
-
- vdev = wlan_objmgr_pdev_get_first_vdev(pdev, WLAN_CFR_ID);
- if (qdf_unlikely(!vdev)) {
- cfr_debug("vdev is null\n");
- goto unlock;
- }
-
- bss_chan = wlan_vdev_mlme_get_bss_chan(vdev);
- ch_freq = bss_chan->ch_freq;
- ch_cfreq1 = bss_chan->ch_cfreq1;
- ch_cfreq2 = bss_chan->ch_cfreq2;
- ch_phymode = bss_chan->ch_phymode;
- rx_chainmask = wlan_vdev_mlme_get_rxchainmask(vdev);
- wlan_objmgr_vdev_release_ref(vdev, WLAN_CFR_ID);
-
- pcfr->rx_tlv_evt_cnt++;
- lut->tx_ppdu_id = cdp_rx_ppdu->ppdu_id;
- lut->tx_address1 = cfr_info->rtt_che_buffer_pointer_low32;
- lut->tx_address2 = cfr_info->rtt_che_buffer_pointer_high8;
- lut->txrx_tstamp = qdf_ktime_to_ms(qdf_ktime_get());
- header = &lut->header;
- meta = &header->u.meta_v3;
-
- header->start_magic_num = 0xDEADBEAF;
- header->vendorid = 0x8cfdf0;
- header->cfr_metadata_version = CFR_META_VERSION_3;
- header->cfr_data_version = CFR_DATA_VERSION_1;
- header->chip_type = CFR_CAPTURE_RADIO_CYP;
- header->pltform_type = CFR_PLATFORM_TYPE_ARM;
- header->Reserved = 0;
-
- meta->status = 1;
- meta->capture_bw = cdp_rx_ppdu->u.bw;
- meta->phy_mode = ch_phymode;
- meta->prim20_chan = ch_freq;
- meta->center_freq1 = ch_cfreq1;
- meta->center_freq2 = ch_cfreq2;
- meta->capture_mode = 0;
- meta->num_rx_chain = rx_chainmask;
-
- meta->timestamp = cdp_rx_ppdu->timestamp;
- meta->is_mu_ppdu = (cdp_rx_ppdu->u.ppdu_type == CDP_RX_TYPE_SU) ? 0 : 1;
- meta->num_mu_users = (meta->is_mu_ppdu) ? (cdp_rx_ppdu->num_users) : 0;
-
- if (meta->num_mu_users > CYP_CFR_MU_USERS)
- meta->num_mu_users = CYP_CFR_MU_USERS;
-
- for (i = 0; i < MAX_CHAIN; i++)
- meta->chain_rssi[i] =
- cdp_rx_ppdu->per_chain_rssi[i] + CMN_NOISE_FLOOR;
-
- if (cdp_rx_ppdu->u.ppdu_type != CDP_RX_TYPE_SU) {
- for (i = 0 ; i < meta->num_mu_users; i++) {
- rx_stats_peruser = &cdp_rx_ppdu->user[i];
- qdf_mem_copy(meta->peer_addr.mu_peer_addr[i],
- rx_stats_peruser->mac_addr,
- QDF_MAC_ADDR_SIZE);
- }
- }
- status = correlate_and_relay_enh(pdev, cookie, lut,
- CORRELATE_TX_EV_MODULE_ID);
- if (status == STATUS_STREAM_AND_RELEASE) {
- if (cfr_rx_ops->cfr_info_send)
- status = cfr_rx_ops->cfr_info_send(pdev,
- &lut->header,
- sizeof(struct
- csi_cfr_header),
- lut->data,
- lut->data_len,
- &end_magic, 4);
- dump_metadata(header, cookie);
- release_lut_entry_enh(pdev, lut);
- target_if_dbr_buf_release(pdev, DBR_MODULE_CFR, buf_addr,
- cookie, 0);
- cfr_debug("Data sent to upper layers, release look up table");
- } else if (status == STATUS_HOLD) {
- cfr_debug("HOLD for buffer address: 0x%pK cookie: %u",
- (void *)((uintptr_t)buf_addr), cookie);
- } else {
- cfr_err("Correlation returned invalid status!!");
- }
-
-unlock:
- qdf_spin_unlock_bh(&pcfr->lut_lock);
-relref:
- qdf_nbuf_free(nbuf);
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-}
-
-/**
- * freeze_reason_to_capture_type() - Convert capture type enum in freeze tlv
- * to the cfr type enum shared with userspace
- * @freeze_tlv: pointer to MACRX_FREEZE_CAPTURE_CHANNEL TLV
- *
- * Return: cfr type enum
- */
-uint8_t freeze_reason_to_capture_type(void *freeze_tlv)
-{
- struct macrx_freeze_capture_channel *freeze =
- (struct macrx_freeze_capture_channel *)freeze_tlv;
-
- switch (freeze->capture_reason) {
- case FREEZE_REASON_TM:
- return CFR_TYPE_METHOD_TM;
- case FREEZE_REASON_FTM:
- return CFR_TYPE_METHOD_FTM;
- case FREEZE_REASON_TA_RA_TYPE_FILTER:
- return CFR_TYPE_METHOD_TA_RA_TYPE_FILTER;
- case FREEZE_REASON_NDPA_NDP:
- return CFR_TYPE_METHOD_NDPA_NDP;
- case FREEZE_REASON_ALL_PACKET:
- return CFR_TYPE_METHOD_ALL_PACKET;
- case FREEZE_REASON_ACK_RESP_TO_TM_FTM:
- return CFR_TYPE_METHOD_ACK_RESP_TO_TM_FTM;
- default:
- return CFR_TYPE_METHOD_AUTO;
- }
- return CFR_TYPE_METHOD_AUTO;
-}
-
-#ifdef DIRECT_BUF_RX_ENABLE
-/**
- * enh_cfr_dbr_event_handler() - Process DBR event for CFR data DMA completion
- * @pdev: PDEV object
- * @payload: pointer to CFR data
- *
- * Return: status
- */
-bool enh_cfr_dbr_event_handler(struct wlan_objmgr_pdev *pdev,
- struct direct_buf_rx_data *payload)
-{
- uint8_t *data = NULL;
- uint32_t cookie = 0;
- struct whal_cfir_enhanced_hdr dma_hdr = {0};
- int length, status = 0;
- struct wlan_objmgr_psoc *psoc;
- struct pdev_cfr *pcfr;
- struct look_up_table *lut = NULL;
- struct csi_cfr_header *header = NULL;
- void *mu_rx_user_info = NULL, *freeze_tlv = NULL;
- uint8_t capture_type;
- uint8_t *peer_macaddr = NULL;
- struct wlan_lmac_if_cfr_rx_ops *cfr_rx_ops = NULL;
- struct cfr_metadata_version_3 *meta = NULL;
-
- if ((!pdev) || (!payload)) {
- cfr_err("pdev or payload is null");
- return true;
- }
-
- psoc = wlan_pdev_get_psoc(pdev);
- if (!psoc) {
- cfr_err("psoc is null");
- return true;
- }
-
- cfr_rx_ops = &psoc->soc_cb.rx_ops.cfr_rx_ops;
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (!pcfr) {
- cfr_err("pdev object for CFR is null");
- return true;
- }
-
- data = payload->vaddr;
- cookie = payload->cookie;
-
- cfr_debug("<DBRCOMP><%u>:bufferaddr: 0x%pK cookie: %u\n", cookie,
- (void *)((uintptr_t)payload->paddr), cookie);
-
- qdf_mem_copy(&dma_hdr, &data[0],
- sizeof(struct whal_cfir_enhanced_hdr));
-
- if (dma_hdr.freeze_data_incl) {
- freeze_tlv = data + sizeof(struct whal_cfir_enhanced_hdr);
- capture_type = freeze_reason_to_capture_type(freeze_tlv);
- }
-
- if (dma_hdr.mu_rx_data_incl) {
- mu_rx_user_info = data +
- sizeof(struct whal_cfir_enhanced_hdr) +
- (dma_hdr.freeze_data_incl ?
- sizeof(struct macrx_freeze_capture_channel) : 0);
- }
-
-
- length = dma_hdr.length * 4;
- length += dma_hdr.total_bytes; /* size of cfr data */
-
- qdf_spin_lock_bh(&pcfr->lut_lock);
-
- lut = get_lut_entry(pcfr, cookie);
- if (!lut) {
- cfr_err("lut is NULL");
- qdf_spin_unlock_bh(&pcfr->lut_lock);
- return true;
- }
-
- lut->data = data;
- lut->data_len = length;
- lut->dbr_ppdu_id = dma_hdr.phy_ppdu_id;
- lut->dbr_address = payload->paddr;
- lut->dbr_tstamp = qdf_ktime_to_ms(qdf_ktime_get());
- lut->header_length = dma_hdr.length;
- lut->payload_length = dma_hdr.total_bytes;
- qdf_mem_copy(&lut->dma_hdr, &dma_hdr,
- sizeof(struct whal_cfir_dma_hdr));
-
- header = &lut->header;
- meta = &header->u.meta_v3;
- meta->channel_bw = dma_hdr.upload_pkt_bw;
- meta->length = length;
- /* For Tx based captures, capture type is sent from FW */
- if (capture_type != CFR_TYPE_METHOD_ACK_RESP_TO_TM_FTM) {
- meta->capture_type = capture_type;
- meta->sts_count = (dma_hdr.nss + 1);
- if (!dma_hdr.mu_rx_data_incl) {
- /* extract peer addr from freeze tlv */
- peer_macaddr =
- meta->peer_addr.su_peer_addr;
- extract_peer_mac_from_freeze_tlv(freeze_tlv,
- peer_macaddr);
- }
- }
-
- dump_enh_dma_hdr(&dma_hdr, freeze_tlv, mu_rx_user_info,
- header, 0, cookie);
- status = correlate_and_relay_enh(pdev, cookie, lut,
- CORRELATE_DBR_MODULE_ID);
- if (status == STATUS_STREAM_AND_RELEASE) {
- /*
- * Message format
- * Meta data Header + actual payload + trailer
- */
- if (cfr_rx_ops->cfr_info_send)
- status = cfr_rx_ops->cfr_info_send(pdev,
- &lut->header,
- sizeof(struct
- csi_cfr_header),
- lut->data,
- lut->data_len,
- &end_magic, 4);
- dump_metadata(header, cookie);
- release_lut_entry_enh(pdev, lut);
- cfr_debug("Data sent to upper layers, released look up table");
- status = true;
- } else if (status == STATUS_HOLD) {
- cfr_debug("TxRx event not received yet. "
- "Buffer is not released");
- status = false;
- } else {
- cfr_err("Correlation returned invalid status!!");
- status = true;
- }
-
- qdf_spin_unlock_bh(&pcfr->lut_lock);
- return status;
-}
-
-/**
- * target_if_register_to_dbr_enh() - Initialize DBR ring and register callback
- * for DBR events
- * @pdev: PDEV object
- *
- * Return: status
- */
-QDF_STATUS
-target_if_register_to_dbr_enh(struct wlan_objmgr_pdev *pdev)
-{
- struct wlan_objmgr_psoc *psoc;
- struct wlan_lmac_if_direct_buf_rx_tx_ops *dbr_tx_ops = NULL;
- struct dbr_module_config dbr_config;
-
- psoc = wlan_pdev_get_psoc(pdev);
- dbr_tx_ops = &psoc->soc_cb.tx_ops.dbr_tx_ops;
- dbr_config.num_resp_per_event = DBR_NUM_RESP_PER_EVENT_CFR;
- dbr_config.event_timeout_in_ms = DBR_EVENT_TIMEOUT_IN_MS_CFR;
- if (dbr_tx_ops->direct_buf_rx_module_register) {
- return dbr_tx_ops->direct_buf_rx_module_register
- (pdev, DBR_MODULE_CFR, &dbr_config,
- enh_cfr_dbr_event_handler);
- }
-
- return QDF_STATUS_SUCCESS;
-}
-
-/**
- * target_if_unregister_to_dbr_enh() - Unregister callback for DBR events
- * @pdev: PDEV object
- *
- * Return: status
- */
-QDF_STATUS
-target_if_unregister_to_dbr_enh(struct wlan_objmgr_pdev *pdev)
-{
- struct wlan_objmgr_psoc *psoc;
- struct wlan_lmac_if_direct_buf_rx_tx_ops *dbr_tx_ops = NULL;
-
- psoc = wlan_pdev_get_psoc(pdev);
- dbr_tx_ops = &psoc->soc_cb.tx_ops.dbr_tx_ops;
- if (dbr_tx_ops->direct_buf_rx_module_unregister) {
- return dbr_tx_ops->direct_buf_rx_module_unregister
- (pdev, DBR_MODULE_CFR);
- }
-
- return QDF_STATUS_SUCCESS;
-}
-#endif
-
-/**
- * dump_cfr_peer_tx_event_enh() - Dump TX completion event
- * @event: ptr to WMI TX completion event for QOS frames sent during
- * one-shot capture
- * @cookie: Index into lookup table
- *
- * Return: none
- */
-void dump_cfr_peer_tx_event_enh(wmi_cfr_peer_tx_event_param *event,
- uint32_t cookie)
-{
- cfr_debug("<TXCOMP><%u>CFR capture method: %d vdev_id: %d mac: %s\n",
- cookie,
- event->capture_method, event->vdev_id,
- ether_sprintf(&event->peer_mac_addr.bytes[0]));
-
- cfr_debug("<TXCOMP><%u>Chan: %d bw: %d phymode: %d cfreq1: %d cfrq2: %d "
- "nss: %d\n",
- cookie,
- event->primary_20mhz_chan, event->bandwidth,
- event->phy_mode, event->band_center_freq1,
- event->band_center_freq2, event->spatial_streams);
-
- cfr_debug("<TXCOMP><%u>Correlation_info1: 0x%08x "
- "Correlation_info2: 0x%08x\n",
- cookie,
- event->correlation_info_1, event->correlation_info_2);
-
- cfr_debug("<TXCOMP><%u>status: 0x%x ts: %d counter: %d rssi0: 0x%08x\n",
- cookie,
- event->status, event->timestamp_us, event->counter,
- event->chain_rssi[0]);
-}
-
-#ifdef DIRECT_BUF_RX_ENABLE
-/**
- * enh_prepare_cfr_header_txstatus() - Prepare CFR metadata for TX failures
- * @tx_evt_param: ptr to WMI TX completion event
- * @header: pointer to metadata
- *
- * Return: none
- */
-static void enh_prepare_cfr_header_txstatus(wmi_cfr_peer_tx_event_param
- *tx_evt_param,
- struct csi_cfr_header *header)
-{
- header->start_magic_num = 0xDEADBEAF;
- header->vendorid = 0x8cfdf0;
- header->cfr_metadata_version = CFR_META_VERSION_3;
- header->cfr_data_version = CFR_DATA_VERSION_1;
- header->chip_type = CFR_CAPTURE_RADIO_CYP;
- header->pltform_type = CFR_PLATFORM_TYPE_ARM;
- header->Reserved = 0;
- header->u.meta_v3.status = 0; /* failure */
- header->u.meta_v3.length = 0;
-
- qdf_mem_copy(&header->u.meta_v2.peer_addr[0],
- &tx_evt_param->peer_mac_addr.bytes[0], QDF_MAC_ADDR_SIZE);
-
-}
-
-/**
- * target_if_peer_capture_event() - WMI TX completion event for one-shot
- * capture
- * @sc: pointer to offload soc object
- * @data: WMI TX completion event buffer
- * @datalen: WMI Tx completion event buffer length
- *
- * Return: status
- */
-static int
-target_if_peer_capture_event(ol_scn_t sc, uint8_t *data, uint32_t datalen)
-{
- QDF_STATUS retval = 0;
- ol_ath_soc_softc_t *scn = (ol_ath_soc_softc_t *)sc;
- struct wmi_unified *wmi_handle;
- struct wlan_objmgr_psoc *psoc;
- struct wlan_objmgr_pdev *pdev;
- struct wlan_objmgr_vdev *vdev;
- uint32_t cookie;
- struct pdev_cfr *pcfr;
- struct look_up_table *lut = NULL;
- struct csi_cfr_header *header = NULL;
- struct csi_cfr_header header_error = {0};
- wmi_cfr_peer_tx_event_param tx_evt_param = {0};
- qdf_dma_addr_t buf_addr = 0, buf_addr_temp = 0;
- int status;
- struct wlan_channel *bss_chan;
- struct wlan_lmac_if_cfr_rx_ops *cfr_rx_ops = NULL;
-
- psoc = scn->psoc_obj;
- if (!psoc) {
- cfr_err("psoc is null");
- return -EINVAL;
- }
-
- cfr_rx_ops = &psoc->soc_cb.rx_ops.cfr_rx_ops;
-
- retval = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_CFR_ID);
- if (QDF_IS_STATUS_ERROR(retval)) {
- cfr_err("unable to get psoc reference");
- return -EINVAL;
- }
-
- wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc);
- if (!wmi_handle) {
- cfr_err("wmi_handle is null");
- wlan_objmgr_psoc_release_ref(psoc, WLAN_CFR_ID);
- return -EINVAL;
- }
-
-
- retval = wmi_extract_cfr_peer_tx_event_param(wmi_handle, data,
- &tx_evt_param);
-
- if (retval != QDF_STATUS_SUCCESS) {
- cfr_err("Failed to extract cfr tx event param");
- wlan_objmgr_psoc_release_ref(psoc, WLAN_CFR_ID);
- return -EINVAL;
- }
-
-
- vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, tx_evt_param.vdev_id,
- WLAN_CFR_ID);
- if (!vdev) {
- cfr_err("vdev is null");
- wlan_objmgr_psoc_release_ref(psoc, WLAN_CFR_ID);
- return -EINVAL;
- }
-
- pdev = wlan_vdev_get_pdev(vdev);
- if (!pdev) {
- cfr_err("pdev is null");
- wlan_objmgr_psoc_release_ref(psoc, WLAN_CFR_ID);
- wlan_objmgr_vdev_release_ref(vdev, WLAN_CFR_ID);
- return -EINVAL;
- }
-
- retval = wlan_objmgr_pdev_try_get_ref(pdev, WLAN_CFR_ID);
- if (retval != QDF_STATUS_SUCCESS) {
- cfr_err("failed to get pdev reference");
- wlan_objmgr_psoc_release_ref(psoc, WLAN_CFR_ID);
- wlan_objmgr_vdev_release_ref(vdev, WLAN_CFR_ID);
- return -EINVAL;
- }
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (!pcfr) {
- cfr_err("pdev object for CFR is NULL");
- retval = -EINVAL;
- goto relref;
- }
-
- if ((tx_evt_param.status & PEER_CFR_CAPTURE_EVT_PS_STATUS_MASK) == 1) {
- cfr_err("CFR capture failed as peer is in powersave : %s",
- ether_sprintf(&tx_evt_param.peer_mac_addr.bytes[0]));
-
- enh_prepare_cfr_header_txstatus(&tx_evt_param, &header_error);
- if (cfr_rx_ops->cfr_info_send)
- cfr_rx_ops->cfr_info_send(pdev,
- &header_error,
- sizeof(struct
- csi_cfr_header),
- NULL, 0, &end_magic, 4);
-
- retval = -EINVAL;
- goto relref;
- }
-
- if ((tx_evt_param.status & PEER_CFR_CAPTURE_EVT_STATUS_MASK) == 0) {
- cfr_debug("CFR capture failed for peer : %s",
- ether_sprintf(&tx_evt_param.peer_mac_addr.bytes[0]));
- retval = -EINVAL;
- goto relref;
- }
-
- if (tx_evt_param.status & CFR_TX_EVT_STATUS_MASK) {
- cfr_debug("TX packet returned status %d for peer: %s",
- tx_evt_param.status & CFR_TX_EVT_STATUS_MASK,
- ether_sprintf(&tx_evt_param.peer_mac_addr.bytes[0]));
- retval = -EINVAL;
- goto relref;
- }
-
- buf_addr_temp = (tx_evt_param.correlation_info_2 & 0x0f);
- buf_addr = (tx_evt_param.correlation_info_1 |
- ((uint64_t)buf_addr_temp << 32));
-
- if (target_if_dbr_cookie_lookup(pdev, DBR_MODULE_CFR, buf_addr,
- &cookie, 0)) {
- cfr_debug("Cookie lookup failure for addr: 0x%pK status: 0x%x",
- (void *)((uintptr_t)buf_addr), tx_evt_param.status);
- retval = -EINVAL;
- goto relref;
- }
-
- cfr_debug("buffer address: 0x%pK cookie: %u",
- (void *)((uintptr_t)buf_addr), cookie);
-
- dump_cfr_peer_tx_event_enh(&tx_evt_param, cookie);
-
- qdf_spin_lock_bh(&pcfr->lut_lock);
-
- lut = get_lut_entry(pcfr, cookie);
- if (!lut) {
- cfr_err("lut is NULL\n");
- retval = -EINVAL;
- goto unlock;
- }
-
- pcfr->tx_evt_cnt++;
- pcfr->total_tx_evt_cnt++;
-
- lut->tx_ppdu_id = (tx_evt_param.correlation_info_2 >> 16);
- lut->tx_address1 = tx_evt_param.correlation_info_1;
- lut->tx_address2 = tx_evt_param.correlation_info_2;
- lut->txrx_tstamp = qdf_ktime_to_ms(qdf_ktime_get());
-
- header = &lut->header;
- header->start_magic_num = 0xDEADBEAF;
- header->vendorid = 0x8cfdf0;
- header->cfr_metadata_version = CFR_META_VERSION_3;
- header->cfr_data_version = CFR_DATA_VERSION_1;
- header->chip_type = CFR_CAPTURE_RADIO_CYP;
- header->pltform_type = CFR_PLATFORM_TYPE_ARM;
- header->Reserved = 0;
- header->u.meta_v3.status = (tx_evt_param.status &
- PEER_CFR_CAPTURE_EVT_STATUS_MASK) ?
- 1 : 0;
- header->u.meta_v3.capture_bw = tx_evt_param.bandwidth;
-
- bss_chan = wlan_vdev_mlme_get_bss_chan(vdev);
- header->u.meta_v3.phy_mode = bss_chan->ch_phymode;
-
- header->u.meta_v3.prim20_chan = tx_evt_param.primary_20mhz_chan;
- header->u.meta_v3.center_freq1 = tx_evt_param.band_center_freq1;
- header->u.meta_v3.center_freq2 = tx_evt_param.band_center_freq2;
-
- /* Currently CFR data is captured on ACK of a Qos NULL frame.
- * For 20 MHz, ACK is Legacy and for 40/80/160, ACK is DUP Legacy.
- */
- header->u.meta_v3.capture_mode = tx_evt_param.bandwidth ?
- CFR_DUP_LEGACY_ACK : CFR_LEGACY_ACK;
- header->u.meta_v3.capture_type = tx_evt_param.capture_method;
- header->u.meta_v3.num_rx_chain = wlan_vdev_mlme_get_rxchainmask(vdev);
- header->u.meta_v3.sts_count = tx_evt_param.spatial_streams;
- header->u.meta_v3.timestamp = tx_evt_param.timestamp_us;
-
- qdf_mem_copy(&header->u.meta_v3.peer_addr.su_peer_addr[0],
- &tx_evt_param.peer_mac_addr.bytes[0], QDF_MAC_ADDR_SIZE);
- qdf_mem_copy(&header->u.meta_v3.chain_rssi[0],
- &tx_evt_param.chain_rssi[0],
- HOST_MAX_CHAINS * sizeof(tx_evt_param.chain_rssi[0]));
- qdf_mem_copy(&header->u.meta_v3.chain_phase[0],
- &tx_evt_param.chain_phase[0],
- HOST_MAX_CHAINS * sizeof(tx_evt_param.chain_phase[0]));
-
- status = correlate_and_relay_enh(pdev, cookie, lut,
- CORRELATE_TX_EV_MODULE_ID);
- if (status == STATUS_STREAM_AND_RELEASE) {
- if (cfr_rx_ops->cfr_info_send)
- status = cfr_rx_ops->cfr_info_send(pdev,
- &lut->header,
- sizeof(
- struct
- csi_cfr_header),
- lut->data,
- lut->data_len,
- &end_magic, 4);
- dump_metadata(header, cookie);
- release_lut_entry_enh(pdev, lut);
- target_if_dbr_buf_release(pdev, DBR_MODULE_CFR, buf_addr,
- cookie, 0);
- cfr_debug("Data sent to upper layers, "
- "releasing look up table");
- } else if (status == STATUS_HOLD) {
- cfr_debug("HOLD for buffer address: 0x%pK cookie: %u",
- (void *)((uintptr_t)buf_addr), cookie);
- } else {
- cfr_err("Correlation returned invalid status!!");
- retval = -EINVAL;
- }
-
-unlock:
- qdf_spin_unlock_bh(&pcfr->lut_lock);
-relref:
-
- wlan_objmgr_psoc_release_ref(psoc, WLAN_CFR_ID);
- wlan_objmgr_vdev_release_ref(vdev, WLAN_CFR_ID);
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return retval;
-}
-#else
-static int
-target_if_peer_capture_event(ol_scn_t sc, uint8_t *data, uint32_t datalen)
-{
- return 0;
-}
-#endif
-
-/**
- * target_if_register_tx_completion_enh_event_handler() - Register callback for
- * WMI TX completion event
- * @psoc: PSOC object
- *
- * Return: Success/Failure status
- */
-int
-target_if_register_tx_completion_enh_event_handler(struct wlan_objmgr_psoc
- *psoc)
-{
- /* Register completion handler here */
- wmi_unified_t wmi_hdl;
- int ret = 0;
-
- wmi_hdl = get_wmi_unified_hdl_from_psoc(psoc);
- if (!wmi_hdl) {
- cfr_err("Unable to get wmi handle");
- return -EINVAL;
- }
-
- ret = wmi_unified_register_event_handler(wmi_hdl,
- wmi_peer_cfr_capture_event_id,
- target_if_peer_capture_event,
- WMI_RX_UMAC_CTX);
- /*
- * Event registration is called per pdev
- * Ignore erorr if event is alreday registred.
- */
- if (ret == QDF_STATUS_E_FAILURE)
- ret = QDF_STATUS_SUCCESS;
-
- return ret;
-}
-
-/**
- * target_if_unregister_tx_completion_enh_event_handler() - Unregister callback
- * for WMI TX completion event
- * @psoc: PSOC object
- *
- * Return: Success/Failure status
- */
-int
-target_if_unregister_tx_completion_enh_event_handler(struct wlan_objmgr_psoc
- *psoc)
-{
- /* Unregister completion handler here */
- wmi_unified_t wmi_hdl;
- int status = 0;
-
- wmi_hdl = get_wmi_unified_hdl_from_psoc(psoc);
- if (!wmi_hdl) {
- cfr_err("Unable to get wmi handle");
- return -EINVAL;
- }
-
- status = wmi_unified_unregister_event(wmi_hdl,
- wmi_peer_cfr_capture_event_id);
- return status;
-}
-
-/**
- * lut_ageout_timer_task() - Timer to flush pending TXRX/DBR events
- *
- * Return: none
- */
-static os_timer_func(lut_ageout_timer_task)
-{
- int i = 0;
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct look_up_table *lut = NULL;
- uint64_t diff, cur_tstamp;
-
- OS_GET_TIMER_ARG(pcfr, struct pdev_cfr*);
-
- if (!pcfr) {
- cfr_err("pdev object for CFR is null");
- return;
- }
-
- pdev = pcfr->pdev_obj;
- if (!pdev) {
- cfr_err("pdev is null");
- return;
- }
-
- if (wlan_objmgr_pdev_try_get_ref(pdev, WLAN_CFR_ID)
- != QDF_STATUS_SUCCESS) {
- cfr_err("failed to get pdev reference");
- return;
- }
-
- cur_tstamp = qdf_ktime_to_ms(qdf_ktime_get());
-
- qdf_spin_lock_bh(&pcfr->lut_lock);
-
- for (i = 0; i < NUM_LUT_ENTRIES; i++) {
- lut = get_lut_entry(pcfr, i);
- if (!lut)
- continue;
-
- if (lut->dbr_recv && !lut->tx_recv) {
- diff = cur_tstamp - lut->dbr_tstamp;
- if (diff > LUT_AGE_THRESHOLD) {
- cfr_debug("<%d>TXRX event not received for "
- "%llu ms, release lut entry : "
- "dma_addr = 0x%pK\n", i, diff,
- (void *)((uintptr_t)lut->dbr_address));
- target_if_dbr_buf_release(pdev, DBR_MODULE_CFR,
- lut->dbr_address,
- i, 0);
- pcfr->flush_timeout_dbr_cnt++;
- release_lut_entry_enh(pdev, lut);
- }
- }
- }
-
- qdf_spin_unlock_bh(&pcfr->lut_lock);
-
- if (pcfr->lut_timer_init)
- qdf_timer_mod(&pcfr->lut_age_timer, LUT_AGE_TIMER);
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-}
-
-/**
- * target_if_cfr_start_lut_age_timer() - Start timer to flush aged-out LUT
- * entries
- * @pdev: pointer to pdev object
- *
- * Return: None
- */
-void target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev)
-{
- struct pdev_cfr *pcfr;
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (pcfr->lut_timer_init)
- qdf_timer_mod(&pcfr->lut_age_timer, LUT_AGE_TIMER);
-}
-
-/**
- * target_if_cfr_stop_lut_age_timer() - Stop timer to flush aged-out LUT
- * entries
- * @pdev: pointer to pdev object
- *
- * Return: None
- */
-void target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev)
-{
- struct pdev_cfr *pcfr;
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (pcfr->lut_timer_init)
- qdf_timer_stop(&pcfr->lut_age_timer);
-}
-
-/**
- * target_if_cfr_update_global_cfg() - Update global config after a successful
- * commit
- * @pdev: pointer to pdev object
- *
- * Return: None
- */
-void target_if_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev)
-{
- int grp_id;
- struct pdev_cfr *pcfr;
- struct ta_ra_cfr_cfg *curr_cfg = NULL;
- struct ta_ra_cfr_cfg *glbl_cfg = NULL;
- unsigned long *modified_in_this_session;
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- modified_in_this_session =
- (unsigned long *)&pcfr->rcc_param.modified_in_curr_session;
-
- for (grp_id = 0; grp_id < MAX_TA_RA_ENTRIES; grp_id++) {
- if (qdf_test_bit(grp_id, modified_in_this_session)) {
- /* Populating global config based on user's input */
- glbl_cfg = &pcfr->global[grp_id];
- curr_cfg = &pcfr->rcc_param.curr[grp_id];
-
- if (curr_cfg->valid_ta)
- qdf_mem_copy(glbl_cfg->tx_addr,
- curr_cfg->tx_addr,
- QDF_MAC_ADDR_SIZE);
-
- if (curr_cfg->valid_ra)
- qdf_mem_copy(glbl_cfg->rx_addr,
- curr_cfg->rx_addr,
- QDF_MAC_ADDR_SIZE);
-
- if (curr_cfg->valid_ta_mask)
- qdf_mem_copy(glbl_cfg->tx_addr_mask,
- curr_cfg->tx_addr_mask,
- QDF_MAC_ADDR_SIZE);
-
- if (curr_cfg->valid_ra_mask)
- qdf_mem_copy(glbl_cfg->rx_addr_mask,
- curr_cfg->rx_addr_mask,
- QDF_MAC_ADDR_SIZE);
-
- if (curr_cfg->valid_bw_mask)
- glbl_cfg->bw = curr_cfg->bw;
-
- if (curr_cfg->valid_nss_mask)
- glbl_cfg->nss = curr_cfg->nss;
-
- if (curr_cfg->valid_mgmt_subtype)
- glbl_cfg->mgmt_subtype_filter =
- curr_cfg->mgmt_subtype_filter;
-
- if (curr_cfg->valid_ctrl_subtype)
- glbl_cfg->ctrl_subtype_filter =
- curr_cfg->ctrl_subtype_filter;
-
- if (curr_cfg->valid_data_subtype)
- glbl_cfg->data_subtype_filter =
- curr_cfg->data_subtype_filter;
- }
- }
-}
-
-/**
- * cfr_6018_init_pdev() - Inits cfr pdev and registers necessary handlers.
- * @psoc: pointer to psoc object
- * @pdev: pointer to pdev object
- *
- * Return: Registration status for necessary handlers
- */
-QDF_STATUS cfr_6018_init_pdev(struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev)
-{
- QDF_STATUS status = QDF_STATUS_SUCCESS;
- struct pdev_cfr *pcfr;
-
- if (!pdev) {
- cfr_err("PDEV is NULL!");
- return QDF_STATUS_E_NULL_VALUE;
- }
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (!pcfr) {
- cfr_err("pcfr is NULL!");
- return QDF_STATUS_E_NULL_VALUE;
- }
-
-#if DIRECT_BUF_RX_ENABLE
- status = target_if_register_to_dbr_enh(pdev);
- if (status != QDF_STATUS_SUCCESS) {
- cfr_err("Failed to register with dbr");
- return status;
- }
-#endif
-
- status = target_if_register_tx_completion_enh_event_handler(psoc);
- if (status != QDF_STATUS_SUCCESS) {
- cfr_err("Failed to register with tx event handler");
- return status;
- }
-
- pcfr->is_cfr_rcc_capable = 1;
- pcfr->rcc_param.pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
- pcfr->rcc_param.modified_in_curr_session = MAX_RESET_CFG_ENTRY;
- pcfr->rcc_param.num_grp_tlvs = MAX_TA_RA_ENTRIES;
-
- target_if_cfr_default_ta_ra_config(&pcfr->rcc_param,
- true, MAX_RESET_CFG_ENTRY);
-
- status = target_if_cfr_config_rcc(pdev, &pcfr->rcc_param);
- if (status == QDF_STATUS_SUCCESS) {
- /* Update global configuration */
- target_if_cfr_update_global_cfg(pdev);
- } else {
- cfr_err("Sending WMI to configure default has failed\n");
- return status;
- }
-
- pcfr->rcc_param.modified_in_curr_session = 0;
-
- pcfr->cfr_max_sta_count = MAX_CFR_ENABLED_CLIENTS;
- pcfr->subbuf_size = STREAMFS_MAX_SUBBUF_CYP;
- pcfr->num_subbufs = STREAMFS_NUM_SUBBUF_CYP;
-
- if (!pcfr->lut_timer_init) {
- qdf_timer_init(NULL,
- &(pcfr->lut_age_timer),
- lut_ageout_timer_task, (void *)pcfr,
- QDF_TIMER_TYPE_WAKE_APPS);
- pcfr->lut_timer_init = 1;
- }
-
- qdf_spinlock_create(&pcfr->lut_lock);
-
- return status;
-}
-
-/**
- * cfr_6018_deinit_pdev() - De-inits corresponding pdev and handlers.
- * @psoc: pointer to psoc object
- * @pdev: pointer to pdev object
- *
- * Return: De-registration status for necessary handlers
- */
-QDF_STATUS cfr_6018_deinit_pdev(struct wlan_objmgr_psoc *psoc,
- struct wlan_objmgr_pdev *pdev)
-{
- int status;
- struct pdev_cfr *pcfr;
-
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
- if (!pcfr) {
- cfr_err("pcfr is NULL");
- return -EINVAL;
- }
-
- if (pcfr->lut_timer_init) {
- qdf_timer_stop(&pcfr->lut_age_timer);
- qdf_timer_free(&(pcfr->lut_age_timer));
- pcfr->lut_timer_init = 0;
- }
-
- pcfr->tx_evt_cnt = 0;
- pcfr->dbr_evt_cnt = 0;
- pcfr->release_cnt = 0;
- pcfr->total_tx_evt_cnt = 0;
- pcfr->rx_tlv_evt_cnt = 0;
- pcfr->flush_dbr_cnt = 0;
- pcfr->flush_timeout_dbr_cnt = 0;
- pcfr->invalid_dma_length_cnt = 0;
- pcfr->clear_txrx_event = 0;
- pcfr->cfr_dma_aborts = 0;
- qdf_mem_zero(&pcfr->rcc_param, sizeof(struct cfr_rcc_param));
- qdf_mem_zero(&pcfr->global, (sizeof(struct ta_ra_cfr_cfg) *
- MAX_TA_RA_ENTRIES));
- pcfr->cfr_timer_enable = 0;
-
-#ifdef DIRECT_BUF_RX_ENABLE
- status = target_if_unregister_to_dbr_enh(pdev);
- if (status != QDF_STATUS_SUCCESS)
- cfr_err("Failed to register with dbr");
-#endif
-
- status = target_if_unregister_tx_completion_enh_event_handler(psoc);
- if (status != QDF_STATUS_SUCCESS)
- cfr_err("Failed to register with dbr");
-
- qdf_spinlock_destroy(&pcfr->lut_lock);
-
- return status;
-}
-
-#endif /* WLAN_ENH_CFR_ENABLE */
-
diff --git a/tools/linux/cfr_test_app.c b/tools/linux/cfr_test_app.c
index dd620d8..1a9dd2b 100644
--- a/tools/linux/cfr_test_app.c
+++ b/tools/linux/cfr_test_app.c
@@ -39,7 +39,7 @@
#include <time.h>
#include <signal.h>
-#define CFR_DUMP_STREAMFS_FILE "/sys/kernel/debug/cfr%s/cfr_dump0"
+#define CFR_DUMP_STREAMFS_FILE "/sys/kernel/debug/qdf/cfr%s/cfr_dump0"
#define CFR_DUMP_FILE "/tmp/cfr_dump_%s.bin"
#define MAX_FILE_SIZE (8 * 1024 * 1024)
diff --git a/umac/cfr/core/inc/cfr_defs_i.h b/umac/cfr/core/inc/cfr_defs_i.h
deleted file mode 100644
index 9abee4a..0000000
--- a/umac/cfr/core/inc/cfr_defs_i.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _CFR_DEFS_I_H_
-#define _CFR_DEFS_I_H_
-
-#include <wlan_objmgr_cmn.h>
-#include <wlan_objmgr_global_obj.h>
-#include <wlan_objmgr_psoc_obj.h>
-#include <wlan_objmgr_pdev_obj.h>
-#include <wlan_objmgr_vdev_obj.h>
-#include <wlan_objmgr_peer_obj.h>
-#include <qdf_list.h>
-#include <qdf_timer.h>
-#include <qdf_util.h>
-#include <qdf_types.h>
-#include <wlan_cfr_utils_api.h>
-
-/**
- * wlan_cfr_psoc_obj_create_handler() - psoc object create handler for cfr
- * @psoc - pointer to psoc object
- * @args - void pointer in case it needs arguments
- *
- * Return: status of object creation
- */
-QDF_STATUS
-wlan_cfr_psoc_obj_create_handler(struct wlan_objmgr_psoc *psoc, void *arg);
-
-/**
- * wlan_cfr_psoc_obj_destroy_handler() - psoc object destroy handler for cfr
- * @psoc - pointer to psoc object
- * @args - void pointer in case it needs arguments
- *
- * Return: status of destroy object
- */
-QDF_STATUS
-wlan_cfr_psoc_obj_destroy_handler(struct wlan_objmgr_psoc *psoc, void *arg);
-
-/**
- * wlan_cfr_pdev_obj_create_handler() - pdev object create handler for cfr
- * @pdev - pointer to pdev object
- * @args - void pointer in case it needs arguments
- *
- * Return: status of object creation
- */
-QDF_STATUS
-wlan_cfr_pdev_obj_create_handler(struct wlan_objmgr_pdev *pdev, void *arg);
-
-/**
- * wlan_cfr_pdev_obj_destroy_handler() - pdev object destroy handler for cfr
- * @pdev - pointer to pdev object
- * @args - void pointer in case it needs arguments
- *
- * Return: status of destroy object
- */
-QDF_STATUS
-wlan_cfr_pdev_obj_destroy_handler(struct wlan_objmgr_pdev *pdev, void *arg);
-
-/**
- * wlan_cfr_peer_obj_create_handler() - peer object create handler for cfr
- * @peer - pointer to peer object
- * @args - void pointer in case it needs arguments
- *
- * Return: status of object creation
- */
-QDF_STATUS
-wlan_cfr_peer_obj_create_handler(struct wlan_objmgr_peer *peer, void *arg);
-
-/**
- * wlan_cfr_peer_obj_destroy_handler() - peer object destroy handler for cfr
- * @peer - pointer to peer object
- * @args - void pointer in case it needs arguments
- *
- * Return: status ofi destry object
- */
-QDF_STATUS
-wlan_cfr_peer_obj_destroy_handler(struct wlan_objmgr_peer *peer, void *arg);
-
-/**
- * cfr_streamfs_init() - stream filesystem init
- * @pdev - pointer to pdev object
- *
- * Return: status of fs init
- */
-QDF_STATUS
-cfr_streamfs_init(struct wlan_objmgr_pdev *pdev);
-
-/**
- * cfr_streamfs_remove() - stream filesystem remove
- * @pdev - pointer to pdev object
- *
- * Return: status of fs remove
- */
-QDF_STATUS
-cfr_streamfs_remove(struct wlan_objmgr_pdev *pdev);
-
-/**
- * cfr_streamfs_write() - write to stream filesystem
- * @pa - pointer to pdev_cfr object
- * @write_data - Pointer to data
- * @write_len - data len
- *
- * Return: status of fs write
- */
-QDF_STATUS
-cfr_streamfs_write(struct pdev_cfr *pa, const void *write_data,
- size_t write_len);
-
-/**
- * cfr_streamfs_flush() - flush the write to streamfs
- * @pa - pointer to pdev_cfr object
- *
- * Return: status of fs flush
- */
-QDF_STATUS
-cfr_streamfs_flush(struct pdev_cfr *pa);
-
-#endif
diff --git a/umac/cfr/core/src/cfr_common.c b/umac/cfr/core/src/cfr_common.c
deleted file mode 100644
index a963b43..0000000
--- a/umac/cfr/core/src/cfr_common.c
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <cfr_defs_i.h>
-#include <qdf_types.h>
-#include <osif_private.h>
-#include <ol_if_athvar.h>
-#include <wlan_objmgr_pdev_obj.h>
-#include <wlan_objmgr_vdev_obj.h>
-#include <wlan_objmgr_peer_obj.h>
-#include <wlan_cfr_tgt_api.h>
-#include <qal_streamfs.h>
-#include <relay.h>
-#include <debugfs.h>
-#include <target_if.h>
-
-QDF_STATUS
-wlan_cfr_psoc_obj_create_handler(struct wlan_objmgr_psoc *psoc, void *arg)
-{
- struct psoc_cfr *cfr_sc = NULL;
-
- cfr_sc = (struct psoc_cfr *)qdf_mem_malloc(sizeof(struct psoc_cfr));
- if (NULL == cfr_sc) {
- cfr_err("Failed to allocate cfr_ctx object\n");
- return QDF_STATUS_E_NOMEM;
- }
-
- qdf_mem_zero(cfr_sc, sizeof(struct psoc_cfr));
- cfr_sc->psoc_obj = psoc;
-
- wlan_objmgr_psoc_component_obj_attach(psoc, WLAN_UMAC_COMP_CFR,
- (void *)cfr_sc,
- QDF_STATUS_SUCCESS);
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS
-wlan_cfr_psoc_obj_destroy_handler(struct wlan_objmgr_psoc *psoc, void *arg)
-{
- struct psoc_cfr *cfr_sc = NULL;
-
- cfr_sc = wlan_objmgr_psoc_get_comp_private_obj(psoc,
- WLAN_UMAC_COMP_CFR);
- if (NULL != cfr_sc) {
- wlan_objmgr_psoc_component_obj_detach(psoc, WLAN_UMAC_COMP_CFR,
- (void *)cfr_sc);
- qdf_mem_free(cfr_sc);
- }
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS
-wlan_cfr_pdev_obj_create_handler(struct wlan_objmgr_pdev *pdev, void *arg)
-{
- struct pdev_cfr *pa = NULL;
-
- if (NULL == pdev) {
- cfr_err("PDEV is NULL\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- pa = (struct pdev_cfr *)qdf_mem_malloc(sizeof(struct pdev_cfr));
- if (NULL == pa) {
- cfr_err("Failed to allocate pdev_cfr object\n");
- return QDF_STATUS_E_NOMEM;
- }
- qdf_mem_zero(pa, sizeof(struct pdev_cfr));
- pa->pdev_obj = pdev;
-
- wlan_objmgr_pdev_component_obj_attach(pdev, WLAN_UMAC_COMP_CFR,
- (void *)pa, QDF_STATUS_SUCCESS);
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS
-wlan_cfr_pdev_obj_destroy_handler(struct wlan_objmgr_pdev *pdev, void *arg)
-{
- struct pdev_cfr *pa = NULL;
-
- if (NULL == pdev) {
- cfr_err("PDEV is NULL\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (NULL != pa) {
- wlan_objmgr_pdev_component_obj_detach(pdev, WLAN_UMAC_COMP_CFR,
- (void *)pa);
- qdf_mem_free(pa);
- }
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS
-wlan_cfr_peer_obj_create_handler(struct wlan_objmgr_peer *peer, void *arg)
-{
- struct peer_cfr *pe = NULL;
-
- if (NULL == peer) {
- cfr_err("PEER is NULL\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- pe = (struct peer_cfr *)qdf_mem_malloc(sizeof(struct peer_cfr));
- if (NULL == pe) {
- cfr_err("Failed to allocate peer_cfr object\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- pe->peer_obj = peer;
-
- /* Remaining will be populated when we give CFR capture command */
- wlan_objmgr_peer_component_obj_attach(peer, WLAN_UMAC_COMP_CFR,
- (void *)pe, QDF_STATUS_SUCCESS);
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS
-wlan_cfr_peer_obj_destroy_handler(struct wlan_objmgr_peer *peer, void *arg)
-{
- struct peer_cfr *pe = NULL;
- struct wlan_objmgr_vdev *vdev;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct pdev_cfr *pa = NULL;
-
- if (NULL == peer) {
- cfr_err("PEER is NULL\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- vdev = wlan_peer_get_vdev(peer);
- if (vdev)
- pdev = wlan_vdev_get_pdev(vdev);
-
- if (pdev)
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev,
- WLAN_UMAC_COMP_CFR);
-
- pe = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_CFR);
-
- if (pa && pe) {
- if (pe->period && pe->request)
- pa->cfr_current_sta_count--;
- }
-
- if (NULL != pe) {
- wlan_objmgr_peer_component_obj_detach(peer, WLAN_UMAC_COMP_CFR,
- (void *)pe);
- qdf_mem_free(pe);
- }
-
- return QDF_STATUS_SUCCESS;
-}
-
-/**
- * create_buf_file_handler() - Create streamfs buffer file
- * @filename: base name of files to create, NULL for buffering only
- * @parent: dentry of parent directory, NULL for root directory
- * @mode: filemode
- * @rchan_buf: streamfs channel buf
- *
- * Returns dentry if successful, NULL otherwise.
- */
-static struct dentry *create_buf_file_handler(const char *filename,
- struct dentry *parent,
- umode_t mode,
- struct rchan_buf *buf,
- int *is_global)
-{
- struct qal_dentry_t *buf_file;
- *is_global = 1;
- buf_file = qal_streamfs_create_file(filename, mode,
- (struct qal_dentry_t *)parent,
- (struct qal_streamfs_chan_buf *)buf);
-
- if (!buf_file) {
- cfr_err("Chan buffer creation failed\n");
- return NULL;
- }
-
- return (struct dentry *)buf_file;
-}
-
-/**
- * remove_buf_file_handler() - Remove streamfs buffer file
- * @dentry:dentry
- */
-static int remove_buf_file_handler(struct dentry *dentry)
-{
- qal_streamfs_remove_file((struct qal_dentry_t *)dentry);
-
- return 0;
-}
-
-static struct rchan_callbacks cfr_streamfs_cb = {
- .create_buf_file = create_buf_file_handler,
- .remove_buf_file = remove_buf_file_handler,
-};
-
-QDF_STATUS cfr_streamfs_init(struct wlan_objmgr_pdev *pdev)
-{
- struct pdev_cfr *pa = NULL;
- char folder[32];
- struct net_device *pdev_netdev;
- struct ol_ath_softc_net80211 *scn;
- struct target_pdev_info *tgt_hdl;
-
- if (pdev == NULL) {
- cfr_err("PDEV is NULL\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- tgt_hdl = wlan_pdev_get_tgt_if_handle(pdev);
-
- if (!tgt_hdl) {
- cfr_err("target_pdev_info is NULL\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- scn = target_pdev_get_feature_ptr(tgt_hdl);
- pdev_netdev = scn->netdev;
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
-
- if (pa == NULL) {
- cfr_err("pdev_cfr is NULL\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- if (!pa->is_cfr_capable) {
- cfr_err("CFR IS NOT SUPPORTED\n");
- return QDF_STATUS_E_FAILURE;
- }
-
- snprintf(folder, sizeof(folder), "cfr%s", pdev_netdev->name);
-
- pa->dir_ptr = qal_streamfs_create_dir((const char *)folder, NULL);
-
- if (!pa->dir_ptr) {
- cfr_err("Directory create failed");
- return QDF_STATUS_E_FAILURE;
- }
-
- pa->chan_ptr = qal_streamfs_open("cfr_dump", pa->dir_ptr,
- pa->subbuf_size, pa->num_subbufs,
- (struct qal_streamfs_chan_callbacks *)&cfr_streamfs_cb,
- NULL);
-
- if (!pa->chan_ptr) {
- cfr_err("Chan create failed");
- qal_streamfs_remove_dir_recursive(pa->dir_ptr);
- pa->dir_ptr = NULL;
- return QDF_STATUS_E_FAILURE;
- }
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS cfr_streamfs_remove(struct wlan_objmgr_pdev *pdev)
-{
- struct pdev_cfr *pa = NULL;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (pa) {
- if (pa->chan_ptr) {
- qal_streamfs_close(pa->chan_ptr);
- pa->chan_ptr = NULL;
- }
-
- if (pa->dir_ptr) {
- qal_streamfs_remove_dir_recursive(pa->dir_ptr);
- pa->dir_ptr = NULL;
- }
-
- } else
- return QDF_STATUS_E_FAILURE;
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS cfr_streamfs_write(struct pdev_cfr *pa, const void *write_data,
- size_t write_len)
-{
- if (pa->chan_ptr) {
-
- /* write to channel buffer */
- qal_streamfs_write(pa->chan_ptr, (const void *)write_data,
- write_len);
- } else
- return QDF_STATUS_E_FAILURE;
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS cfr_streamfs_flush(struct pdev_cfr *pa)
-{
- if (pa->chan_ptr) {
-
- /* Flush the data write to channel buffer */
- qal_streamfs_flush(pa->chan_ptr);
- } else
- return QDF_STATUS_E_FAILURE;
-
- return QDF_STATUS_SUCCESS;
-}
diff --git a/umac/cfr/dispatcher/inc/wlan_cfr_tgt_api.h b/umac/cfr/dispatcher/inc/wlan_cfr_tgt_api.h
deleted file mode 100644
index b9d3b28..0000000
--- a/umac/cfr/dispatcher/inc/wlan_cfr_tgt_api.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _WLAN_CFR_TGT_API_H_
-#define _WLAN_CFR_TGT_API_H_
-
-#include <wlan_objmgr_peer_obj.h>
-#include <wlan_objmgr_pdev_obj.h>
-#include <wlan_objmgr_cmn.h>
-#include <qdf_types.h>
-
-/* tgt layer has APIs in application, to access functions in target
- * through tx_ops.
- */
-
-/**
- * tgt_cfr_init_pdev() - API that registers CFR to handlers.
- * @pdev: pointer to pdev_object
- *
- * Return: success/failure of init
- */
-int tgt_cfr_init_pdev(struct wlan_objmgr_pdev *pdev);
-
-/**
- * tgt_cfr_deinit_pdev() - API that de-registers CFR to handlers.
- * @pdev: pointer to pdev_object
- *
- * Return: success/failure of de-init
- */
-int tgt_cfr_deinit_pdev(struct wlan_objmgr_pdev *pdev);
-
-/**
- * tgt_cfr_get_target_type() - API to determine target type.
- * @psoc: pointer to psoc_object
- *
- * Return: enum value of target type
- */
-int tgt_cfr_get_target_type(struct wlan_objmgr_psoc *psoc);
-
-/**
- * tgt_cfr_start_capture() - API to start cfr capture on a peer.
- * @pdev: pointer to pdev_object
- * @peer: pointer to peer_object
- * @cfr_params: pointer to config cfr_params
- *
- * Return: success/failure of start capture
- */
-int tgt_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer,
- struct cfr_capture_params *cfr_params);
-
-/**
- * tgt_cfr_stop_capture() - API to stop cfr capture on a peer.
- * @pdev: pointer to pdev_object
- * @peer: pointer to peer_object
- *
- * Return: success/failure of stop capture
- */
-int tgt_cfr_stop_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer);
-
-/**
- * tgt_cfr_enable_cfr_timer() - API to enable cfr timer
- * @pdev: pointer to pdev_object
- * @cfr_timer: Amount of time this timer has to run. If 0, it disables timer.
- *
- * Return: success/failure of timer enable
- */
-int
-tgt_cfr_enable_cfr_timer(struct wlan_objmgr_pdev *pdev, uint32_t cfr_timer);
-
-/**
- * tgt_cfr_support_set() - API to set cfr support
- * @psoc: pointer to psoc_object
- * @value: value to be set
- */
-void tgt_cfr_support_set(struct wlan_objmgr_psoc *psoc, uint32_t value);
-
-/**
- * tgt_cfr_info_send() - API to send cfr info
- * @pdev: pointer to pdev_object
- * @head: pointer to cfr info head
- * @hlen: head len
- * @data: pointer to cfr info data
- * @dlen: data len
- * @tail: pointer to cfr info tail
- * @tlen: tail len
- *
- * Return: success/failure of cfr info send
- */
-uint32_t tgt_cfr_info_send(struct wlan_objmgr_pdev *pdev, void *head,
- size_t hlen, void *data, size_t dlen, void *tail,
- size_t tlen);
-
-#ifdef WLAN_ENH_CFR_ENABLE
-/**
- * tgt_cfr_config_rcc() - API to set RCC
- * @pdev: pointer to pdev_object
- * @rcc_param: rcc configurations
- *
- * Return: succcess / failure
- */
-QDF_STATUS tgt_cfr_config_rcc(struct wlan_objmgr_pdev *pdev,
- struct cfr_rcc_param *rcc_param);
-
-/**
- * tgt_cfr_start_lut_age_timer() - API to start timer to flush aged out LUT
- * entries
- * @pdev: pointer to pdev_object
- *
- * Return: None
- */
-void tgt_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev);
-
-/**
- * tgt_cfr_stop_lut_age_timer() - API to stop timer to flush aged out LUT
- * entries
- * @pdev: pointer to pdev_object
- *
- * Return: None
- */
-void tgt_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev);
-
-/**
- * tgt_cfr_default_ta_ra_cfg() - API to configure default values in TA_RA mode
- * entries
- * @pdev: pointer to pdev_object
- *
- * Return: none
- */
-void tgt_cfr_default_ta_ra_cfg(struct wlan_objmgr_pdev *pdev,
- struct cfr_rcc_param *rcc_param,
- bool allvalid, uint16_t reset_cfg);
-
-/**
- * tgt_cfr_dump_lut_enh() - Print all LUT entries
- * @pdev: pointer to pdev_object
- */
-void tgt_cfr_dump_lut_enh(struct wlan_objmgr_pdev *pdev);
-
-/**
- * tgt_cfr_rx_tlv_process() - Process PPDU status TLVs
- * @pdev_obj: pointer to pdev_object
- * @nbuf: pointer to cdp_rx_indication_ppdu
- */
-void tgt_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf);
-
-/**
- * tgt_cfr_update_global_cfg() - Update global config after successful commit
- * @pdev: pointer to pdev_object
- */
-void tgt_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev);
-#endif
-#endif
diff --git a/umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h b/umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h
deleted file mode 100644
index b117727..0000000
--- a/umac/cfr/dispatcher/inc/wlan_cfr_ucfg_api.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _WLAN_CFR_UCFG_API_H_
-#define _WLAN_CFR_UCFG_API_H_
-
-#include <wlan_objmgr_peer_obj.h>
-#include <wlan_objmgr_pdev_obj.h>
-#include <ieee80211_ioctl.h>
-
-#define MAX_CFR_PRD (10*60*1000) /* 10 minutes */
-
-/**
- * ucfg_cfr_start_capture() - function to start cfr capture for connected client
- * @pdev: pointer to pdev object
- * @peer: pointer to peer object
- * @cfr_params: config params to cfr capture
- *
- * Return: status of start capture.
- */
-int ucfg_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer,
- struct cfr_capture_params *cfr_params);
-
-/**
- * ucfg_cfr_stop_capture() - function to stop cfr capture for connected client
- * @pdev: pointer to pdev object
- * @peer: pointer to peer object
- *
- * Return: status of stop capture.
- */
-int ucfg_cfr_stop_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer);
-
-/**
- * ucfg_cfr_start_capture_probe_req() - function to start cfr capture for
- * unassociated clients
- * @pdev: pointer to pdev object
- * @unassoc_mac: mac address of un-associated client
- * @cfr_params: config params to cfr capture
- *
- * Return: status of start capture.
- */
-int ucfg_cfr_start_capture_probe_req(struct wlan_objmgr_pdev *pdev,
- struct qdf_mac_addr *unassoc_mac,
- struct cfr_capture_params *params);
-
-/**
- * ucfg_cfr_stop_capture_probe_req() - function to stop cfr capture for
- * unassociated cleints
- * @pdev: pointer to pdev object
- * @unassoc_mac: mac address of un-associated client
- *
- * Return: status of stop capture.
- */
-int ucfg_cfr_stop_capture_probe_req(struct wlan_objmgr_pdev *pdev,
- struct qdf_mac_addr *unassoc_mac);
-
-/**
- * ucfg_cfr_list_peers() - Lists total number of peers with cfr capture enabled
- * @pdev: pointer to pdev object
- *
- * Return: number of peers with cfr capture enabled
- */
-int ucfg_cfr_list_peers(struct wlan_objmgr_pdev *pdev);
-
-/**
- * ucfg_cfr_set_timer() - function to enable cfr timer
- * @pdev: pointer to pdev object
- * @value: value to be set
- *
- * Return: status of timer enable
- */
-int ucfg_cfr_set_timer(struct wlan_objmgr_pdev *pdev, uint32_t value);
-
-/**
- * ucfg_cfr_get_timer() - function to get cfr_timer_enable
- * @pdev: pointer to pdev object
- *
- * Return: value of cfr_timer_enable
- */
-int ucfg_cfr_get_timer(struct wlan_objmgr_pdev *pdev);
-
-#ifdef WLAN_ENH_CFR_ENABLE
-/* Channel capture recipe filters */
-enum capture_type {
- RCC_DIRECTED_FTM_FILTER,
- RCC_ALL_FTM_ACK_FILTER,
- RCC_DIRECTED_NDPA_NDP_FILTER,
- RCC_NDPA_NDP_ALL_FILTER,
- RCC_TA_RA_FILTER,
- RCC_ALL_PACKET_FILTER,
- RCC_DIS_ALL_MODE,
-};
-
-/**
- * ucfg_cfr_set_rcc_mode() - function to set RCC mode
- * @vdev: pointer to vdev object
- * @mode: capture type passed by user
- * @value: Enable/Disable capture mode
- *
- * Return: status if the mode is set or not
- */
-QDF_STATUS ucfg_cfr_set_rcc_mode(struct wlan_objmgr_vdev *vdev,
- enum capture_type mode, uint8_t value);
-
-/**
- * ucfg_cfr_get_rcc_enabled() - function to get RCC mode
- * @vdev: pointer to vdev object
- *
- * Return: if the rcc is enabled or not
- */
-bool ucfg_cfr_get_rcc_enabled(struct wlan_objmgr_vdev *vdev);
-
-/**
- * ucfg_cfr_set_tara_config() - function to configure TA/RA address and mask
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_set_tara_config(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_set_bw_nss() - function to configure nss and bandwidth
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_set_bw_nss(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_set_frame_type_subtype() - function to configure frame type/subtype
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS
-ucfg_cfr_set_frame_type_subtype(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_set_capture_duration() - function to configure capture duration
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS
-ucfg_cfr_set_capture_duration(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_set_capture_interval() - function to configure capture interval
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS
-ucfg_cfr_set_capture_interval(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_set_en_bitmap() - function to configure 16-bit bitmap in TA_RA mode
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_set_en_bitmap(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_set_reset_bitmap() - function to clear all 9 params for all 16
- * groups in TA_RA mode
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_set_reset_bitmap(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_set_ul_mu_user_mask() - function to configure UL MU user mask
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS
-ucfg_cfr_set_ul_mu_user_mask(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_set_freeze_tlv_delay_cnt() - function to configure freeze TLV delay
- * count threshold
- * @vdev: pointer to vdev object
- * @params: user config
- *
- * Return: status
- */
-QDF_STATUS
-ucfg_cfr_set_freeze_tlv_delay_cnt(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params);
-
-/**
- * ucfg_cfr_committed_rcc_config() - function to commit user config
- * @vdev: pointer to vdev object
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_committed_rcc_config(struct wlan_objmgr_vdev *vdev);
-
-/**
- * ucfg_cfr_get_cfg() - function to display user config
- * @vdev: pointer to vdev object
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev);
-
-/**
- * ucfg_cfr_rcc_dump_dbg_counters() - function to display PPDU counters
- * @vdev: pointer to vdev object
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev);
-
-/**
- * ucfg_cfr_rcc_clr_dbg_counters() - function to clear CFR PPDU counters
- * @vdev: pointer to vdev object
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_rcc_clr_dbg_counters(struct wlan_objmgr_vdev *vdev);
-
-/**
- * ucfg_cfr_rcc_dump_lut() - function to display lookup table
- * @vdev: pointer to vdev object
- *
- * Return: status
- */
-QDF_STATUS ucfg_cfr_rcc_dump_lut(struct wlan_objmgr_vdev *vdev);
-#endif
-#endif
diff --git a/umac/cfr/dispatcher/inc/wlan_cfr_utils_api.h b/umac/cfr/dispatcher/inc/wlan_cfr_utils_api.h
deleted file mode 100644
index 144af33..0000000
--- a/umac/cfr/dispatcher/inc/wlan_cfr_utils_api.h
+++ /dev/null
@@ -1,584 +0,0 @@
-/*
- * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _WLAN_CFR_UTILS_API_H_
-#define _WLAN_CFR_UTILS_API_H_
-
-#include <wlan_objmgr_cmn.h>
-#include <qal_streamfs.h>
-#ifdef WLAN_ENH_CFR_ENABLE
-#include <qdf_timer.h>
-#endif
-
-#define cfr_alert(format, args...) \
- QDF_TRACE_FATAL(QDF_MODULE_ID_CFR, format, ## args)
-
-#define cfr_err(format, args...) \
- QDF_TRACE_ERROR(QDF_MODULE_ID_CFR, format, ## args)
-
-#define cfr_warn(format, args...) \
- QDF_TRACE_WARN(QDF_MODULE_ID_CFR, format, ## args)
-
-#define cfr_info(format, args...) \
- QDF_TRACE_INFO(QDF_MODULE_ID_CFR, format, ## args)
-
-#define cfr_debug(format, args...) \
- QDF_TRACE_DEBUG(QDF_MODULE_ID_CFR, format, ## args)
-
-#define DBR_EVENT_TIMEOUT_IN_MS_CFR 1
-#define DBR_NUM_RESP_PER_EVENT_CFR 1
-#define MAX_CFR_ENABLED_CLIENTS 10
-#ifdef WLAN_ENH_CFR_ENABLE
-#define MAX_CFR_MU_USERS 4
-#define NUM_CHAN_CAPTURE_STATUS 4
-#define NUM_CHAN_CAPTURE_REASON 6
-#define MAX_TA_RA_ENTRIES 16
-#define MAX_RESET_CFG_ENTRY 0xFFFF
-#endif
-
-enum cfrmetaversion {
- CFR_META_VERSION_NONE,
- CFR_META_VERSION_1,
- CFR_META_VERSION_2,
- CFR_META_VERSION_3,
- CFR_META_VERSION_MAX = 0xFF,
-};
-
-enum cfrdataversion {
- CFR_DATA_VERSION_NONE,
- CFR_DATA_VERSION_1,
- CFR_DATA_VERSION_MAX = 0xFF,
-};
-
-enum cfrplatformtype {
- CFR_PLATFORM_TYPE_NONE,
- CFR_PLATFORM_TYPE_MIPS,
- CFR_PLATFORM_TYPE_ARM,
- CFR_PLATFFORM_TYPE_MAX = 0xFF,
-};
-
-enum cfrradiotype {
- CFR_CAPTURE_RADIO_NONE,
- CFR_CAPTURE_RADIO_OSPREY,
- CFR_CAPTURE_RADIO_PEAKCOCK,
- CFR_CAPTURE_RADIO_SCORPION,
- CFR_CAPTURE_RADIO_HONEYBEE,
- CFR_CAPTURE_RADIO_DRAGONFLY,
- CFR_CAPTURE_RADIO_JET,
- CFR_CAPTURE_RADIO_PEREGRINE = 17,
- CFR_CAPTURE_RADIO_SWIFT,
- CFR_CAPTURE_RADIO_BEELINER,
- CFR_CAPTURE_RADIO_CASCADE,
- CFR_CAPTURE_RADIO_DAKOTA,
- CFR_CAPTURE_RADIO_BESRA,
- CFR_CAPTURE_RADIO_HKV2,
- CFR_CAPTURE_RADIO_CYP,
- CFR_CAPTURE_RADIO_MAX = 0xFF,
-};
-
-enum ack_capture_mode {
- CFR_LEGACY_ACK = 0,
- CFR_DUP_LEGACY_ACK = 1,
- CFR_HT_ACK = 2,
- CFR_VHT_ACK = 3,
- CFR_INVALID_ACK, /*Always keep this at last*/
-};
-
-/* Similar to WMI_PEER_CFR_CAPTURE_METHOD used in one-shot capture */
-enum cfr_capture_type {
- CFR_TYPE_METHOD_NULL_FRAME = 0,
- CFR_TYPE_METHOD_NULL_FRAME_WITH_PHASE = 1,
- CFR_TYPE_METHOD_PROBE_RESP = 2,
- CFR_TYPE_METHOD_TM = 3,
- CFR_TYPE_METHOD_FTM = 4,
- CFR_TYPE_METHOD_ACK_RESP_TO_TM_FTM = 5,
- CFR_TYPE_METHOD_TA_RA_TYPE_FILTER = 6,
- CFR_TYPE_METHOD_NDPA_NDP = 7,
- CFR_TYPE_METHOD_ALL_PACKET = 8,
- /* Add new capture methods before this line */
- CFR_TYPE_METHOD_LAST_VALID,
- CFR_TYPE_METHOD_AUTO = 0xff,
- CFR_TYPE_METHOD_MAX,
-};
-
-struct cfr_metadata_version_1 {
- u_int8_t peer_addr[QDF_MAC_ADDR_SIZE];
- u_int8_t status;
- u_int8_t capture_bw;
- u_int8_t channel_bw;
- u_int8_t phy_mode;
- u_int16_t prim20_chan;
- u_int16_t center_freq1;
- u_int16_t center_freq2;
- u_int8_t capture_mode;
- u_int8_t capture_type;
- u_int8_t sts_count;
- u_int8_t num_rx_chain;
- u_int32_t timestamp;
- u_int32_t length;
-} __attribute__ ((__packed__));
-
-#define HOST_MAX_CHAINS 8
-
-struct cfr_metadata_version_2 {
- u_int8_t peer_addr[QDF_MAC_ADDR_SIZE];
- u_int8_t status;
- u_int8_t capture_bw;
- u_int8_t channel_bw;
- u_int8_t phy_mode;
- u_int16_t prim20_chan;
- u_int16_t center_freq1;
- u_int16_t center_freq2;
- u_int8_t capture_mode;
- u_int8_t capture_type;
- u_int8_t sts_count;
- u_int8_t num_rx_chain;
- u_int32_t timestamp;
- u_int32_t length;
- u_int32_t chain_rssi[HOST_MAX_CHAINS];
- u_int16_t chain_phase[HOST_MAX_CHAINS];
-} __attribute__ ((__packed__));
-
-#ifdef WLAN_ENH_CFR_ENABLE
-struct cfr_metadata_version_3 {
- u_int8_t status;
- u_int8_t capture_bw;
- u_int8_t channel_bw;
- u_int8_t phy_mode;
- u_int16_t prim20_chan;
- u_int16_t center_freq1;
- u_int16_t center_freq2;
- u_int8_t capture_mode; /* ack_capture_mode */
- u_int8_t capture_type; /* cfr_capture_type */
- u_int8_t sts_count;
- u_int8_t num_rx_chain;
- u_int32_t timestamp;
- u_int32_t length;
- u_int8_t is_mu_ppdu;
- u_int8_t num_mu_users;
- union {
- u_int8_t su_peer_addr[QDF_MAC_ADDR_SIZE];
- u_int8_t mu_peer_addr[MAX_CFR_MU_USERS][QDF_MAC_ADDR_SIZE];
- } peer_addr;
- u_int32_t chain_rssi[HOST_MAX_CHAINS];
- u_int16_t chain_phase[HOST_MAX_CHAINS];
-} __attribute__ ((__packed__));
-#endif
-
-struct csi_cfr_header {
- u_int32_t start_magic_num;
- u_int32_t vendorid;
- u_int8_t cfr_metadata_version;
- u_int8_t cfr_data_version;
- u_int8_t chip_type;
- u_int8_t pltform_type;
- u_int32_t Reserved;
-
- union {
- struct cfr_metadata_version_1 meta_v1;
- struct cfr_metadata_version_2 meta_v2;
-#ifdef WLAN_ENH_CFR_ENABLE
- struct cfr_metadata_version_3 meta_v3;
-#endif
- } u;
-} __attribute__ ((__packed__));
-
-/**
- * struct cfr_capture_params - structure to store cfr config param
- * bandwidth: bandwitdh of capture
- * period: period of capture
- * method: enum of method being followed to capture cfr data. 0-QoS null data
- */
-struct cfr_capture_params {
- u_int8_t bandwidth;
- u_int32_t period;
- u_int8_t method;
-};
-
-/**
- * struct psoc_cfr - private psoc object for cfr
- * psoc_obj: pointer to psoc object
- * is_cfr_capable: flag to determine if cfr is enabled or not
- */
-struct psoc_cfr {
- struct wlan_objmgr_psoc *psoc_obj;
- uint8_t is_cfr_capable;
-};
-
-/**
- * struct cfr_wmi_host_mem_chunk - wmi mem chunk related
- * vaddr: pointer to virtual address
- * paddr: physical address
- * len: len of the mem chunk allocated
- * req_id: reqid related to the mem chunk
- */
-struct cfr_wmi_host_mem_chunk {
- uint32_t *vaddr;
- uint32_t paddr;
- uint32_t len;
- uint32_t req_id;
-};
-
-struct whal_cfir_dma_hdr {
- uint16_t
- // 'BA'
- tag : 8,
- // '02', length of header in 4 octet units
- length : 6,
- // 00
- reserved : 2;
- uint16_t
- // [16]
- upload_done : 1,
- // [17:18], 0: invalid, 1: CFR, 2: CIR, 3: DebugH
- capture_type : 3,
- // [19:20], 0: Legacy, 1: HT, 2: VHT, 3: HE
- preamble_type : 2,
- // [21:23], 0: 1-stream, 1: 2-stream, ..., 7: 8-stream
- nss : 3,
- // [24:27], 0: invalid, 1: 1-chain, 2: 2-chain, etc.
- num_chains : 3,
- // [28:30], 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 MHz
- upload_pkt_bw : 3, // [31]
- sw_peer_id_valid : 1;
- uint16_t
- sw_peer_id : 16; // [15:0]
- uint16_t
- phy_ppdu_id : 16; // [15:0]
-};
-
-#define MAX_LUT_ENTRIES 140 /* For HKv2 136 is max */
-
-/**
- * struct look_up_table - Placeholder for 2 asynchronous events (DBR and
- * TXRX event)
- * dbr_recv: Indicates whether WMI for DBR completion is received or not
- * tx_recv: Indicates whether WMI for TX completion (or) WDI event for RX
- * status is received or not
- * data: pointer to CFR data that ucode DMAs to host memory
- * data_len: length of CFR data DMAed by ucode
- * dbr_ppdu_id: PPDU id retrieved from DBR completion WMI event
- * tx_ppdu_id: PPDU id retrieved from WMI TX completion event (or) PPDU status
- * TLV
- * dbr_address: Physical address of the CFR data dump retrieved from DBR
- * completion WMI event
- * tx_address1: Physical address of the CFR data from TX/RX event
- * tx_address2: Physical address of the CFR data from TX/RX event
- * csi_cfr_header: CFR header constructed by host
- * whal_cfir_enhanced_hdr: CFR header constructed by ucode
- * tx_tstamp: Timestamp when TX/RX event was received
- * dbr_tstamp: Timestamp when DBR completion event was received
- * header_length: Length of header DMAed by ucode in words
- * payload_length: Length of CFR payload
- */
-struct look_up_table {
- bool dbr_recv;
- bool tx_recv;
- uint8_t *data; /* capture payload */
- uint32_t data_len; /* capture len */
- uint16_t dbr_ppdu_id; /* ppdu id from dbr */
- uint16_t tx_ppdu_id; /* ppdu id from TX event */
- qdf_dma_addr_t dbr_address; /* capture len */
- uint32_t tx_address1; /* capture len */
- uint32_t tx_address2; /* capture len */
- struct csi_cfr_header header;
- struct whal_cfir_dma_hdr dma_hdr;
- uint64_t txrx_tstamp;
- uint64_t dbr_tstamp;
- uint32_t header_length;
- uint32_t payload_length;
-};
-
-struct unassoc_pool_entry {
- struct qdf_mac_addr mac;
- struct cfr_capture_params cfr_params;
- bool is_valid;
-};
-
-#ifdef WLAN_ENH_CFR_ENABLE
-/**
- * struct ta_ra_cfr_cfg - structure to store configuration of 16 groups in
- * M_TA_RA mode
- * filter_group_id: Filter group number for which the below filters needs to be
- * applied
- * bw: CFR capture will be done for packets matching the bandwidths specified
- * within this bitmask
- * nss: CFR capture will be done for packets matching the Nss specified within
- * this bitmask
- * valid_ta: Ta_addr is valid if set
- * valid_ta_mask: Ta_addr_mask is valid if set
- * valid_ra: Ra_addr is valid if set
- * valid_ra_mask: Ra_addr_mask is valid if set
- * valid_bw_mask: Bandwidth is valid if set
- * valid_nss_mask: NSS is valid if set
- * valid_mgmt_subtype: Mgmt_subtype is valid if set
- * valid_ctrl_subtype: Ctrl_subtype is valid if set
- * valid_data_subtype: Data_subtype is valid if set
- * mgmt_subtype_filter: Managments Packets matching the subtype filter
- * categories will be filtered in by MAC for CFR capture.
- * ctrl_subtype_filter: Control Packets matching the subtype filter
- * categories will be filtered in by MAC for CFR capture.
- * data_subtype_filter: Data Packets matching the subtype filter
- * categories will be filtered in by MAC for CFR capture.
- * tx_addr: Packets whose transmitter address matches (tx_addr & tx_addr_mask)
- * will be filtered in by MAC
- * tx_addr_mask: Packets whose transmitter address matches (tx_addr &
- * tx_addr_mask) will be filtered in by MAC
- * rx_addr: Packets whose receiver address matches (rx_addr & rx_addr_mask)
- * will be filtered in by MAC
- * rx_addr_mask: Packets whose receiver address matches (rx_addr &
- * rx_addr_mask) will be filtered in by MAC
- */
-struct ta_ra_cfr_cfg {
- uint8_t filter_group_id;
- uint16_t bw :5,
- nss :8,
- rsvd0 :3;
- uint16_t valid_ta :1,
- valid_ta_mask :1,
- valid_ra :1,
- valid_ra_mask :1,
- valid_bw_mask :1,
- valid_nss_mask :1,
- valid_mgmt_subtype :1,
- valid_ctrl_subtype :1,
- valid_data_subtype :1,
- rsvd1 :7;
- uint16_t mgmt_subtype_filter;
- uint16_t ctrl_subtype_filter;
- uint16_t data_subtype_filter;
- uint8_t tx_addr[QDF_MAC_ADDR_SIZE];
- uint8_t rx_addr[QDF_MAC_ADDR_SIZE];
- uint8_t tx_addr_mask[QDF_MAC_ADDR_SIZE];
- uint8_t rx_addr_mask[QDF_MAC_ADDR_SIZE];
-
-} qdf_packed;
-
-/**
- * struct cfr_rcc_param - structure to store cfr config param
- * pdev_id: pdev_id for identifying the MAC
- * capture_duration: Capture Duration field for which CFR capture has to happen,
- * in microsecond units
- * capture_interval: Capture interval field which is time in between
- * consecutive CFR capture, in microsecond units
- * ul_mu_user_mask_lower: Bitfields indicates which of the users in the current
- * UL MU tranmission are enabled for CFR capture.
- * ul_mu_user_mask_upper: This is contiuation of the above lower mask.
- * freeze_tlv_delay_cnt_en: Enable Freeze TLV delay counter in MAC
- * freeze_tlv_delay_cnt_thr: Indicates the number of consecutive Rx packets to
- * be skipped before CFR capture is enabled again.
- * filter_group_bitmap: Bitfields set indicates which of the CFR group config is
- * enabled
- * m_directed_ftm: Filter Directed FTM ACK frames for CFR capture
- * m_all_ftm_ack: Filter All FTM ACK frames for CFR capture
- * m_ndpa_ndp_directed: Filter NDPA NDP Directed Frames for CFR capture
- * m_ndpa_ndp_all: Filter all NDPA NDP for CFR capture
- * m_ta_ra_filter: Filter Frames based on TA/RA/Subtype as provided in CFR Group
- * config
- * m_all_packet: Filter in All packets for CFR Capture
- * num_grp_tlvs: Indicates the number of groups in M_TA_RA mode, that have
- * changes in the current commit session, use to construct WMI group TLV(s)
- * curr: Placeholder for M_TA_RA group config in current commit session
- * modified_in_curr_session: Bitmap indicating number of groups in M_TA_RA mode
- * that have changed in current commit session.
- */
-struct cfr_rcc_param {
- uint8_t pdev_id;
- uint32_t capture_duration;
- uint32_t capture_interval;
- uint32_t ul_mu_user_mask_lower;
- uint32_t ul_mu_user_mask_upper;
- uint16_t freeze_tlv_delay_cnt_en :1,
- freeze_tlv_delay_cnt_thr :8,
- rsvd0 :7;
- uint16_t filter_group_bitmap;
- uint8_t m_directed_ftm : 1,
- m_all_ftm_ack : 1,
- m_ndpa_ndp_directed : 1,
- m_ndpa_ndp_all : 1,
- m_ta_ra_filter : 1,
- m_all_packet : 1,
- rsvd1 : 2;
- uint8_t num_grp_tlvs;
-
- struct ta_ra_cfr_cfg curr[MAX_TA_RA_ENTRIES];
- uint16_t modified_in_curr_session;
-};
-#endif /* WLAN_ENH_CFR_ENABLE */
-
-/**
- * struct pdev_cfr - private pdev object for cfr
- * pdev_obj: pointer to pdev object
- * is_cfr_capable: flag to determine if cfr is enabled or not
- * cfr_timer_enable: flag to enable/disable timer
- * cfr_mem_chunk: Region of memory used for storing cfr data
- * cfr_max_sta_count: Maximum stations supported in one-shot capture mode
- * num_subbufs: No. of sub-buffers used in relayfs
- * subbuf_size: Size of sub-buffer used in relayfs
- * chan_ptr: Channel in relayfs
- * dir_ptr: Parent directory of relayfs file
- * lut: lookup table used to store asynchronous DBR and TX/RX events for
- * correlation
- * dbr_buf_size: Size of DBR completion buffer
- * dbr_num_bufs: No. of DBR completions
- * tx_evt_cnt: No. of TX completion events till CFR stop was issued
- * total_tx_evt_cnt: No. of Tx completion events since wifi was up
- * dbr_evt_cnt: No. of WMI DBR completion events
- * release_cnt: No. of CFR data buffers relayed to userspace
- * rcc_param: Structure to store CFR config for the current commit session
- * global: Structure to store accumulated CFR config
- * rx_tlv_evt_cnt: Number of CFR WDI events from datapath
- * lut_age_timer: Timer to flush pending TXRX/DBR events in lookup table
- * lut_timer_init: flag to determine if lut_age_timer is initialized or not
- * is_cfr_rcc_capable: Flag to determine if RCC is enabled or not.
- * flush_dbr_cnt: No. of un-correlated DBR completions flushed when a newer PPDU
- * is correlated successfully with newer DBR completion
- * invalid_dma_length_cnt: No. of buffers for which CFR DMA header length (or)
- * data length was invalid
- * flush_timeout_dbr_cnt: No. of DBR completion flushed out in ageout logic
- * clear_txrx_event: No. of PPDU status TLVs over-written in LUT
- * unassoc_pool: Pool of un-associated clients used when capture method is
- * CFR_CAPTURE_METHOD_PROBE_RESPONSE
- * last_success_tstamp: DBR timestamp which indicates that both DBR and TX/RX
- * events have been received successfully.
- * cfr_dma_aborts: No. of CFR DMA aborts in ucode
- */
-/*
- * To be extended if we get more capbality info
- * from FW's extended service ready event.
- */
-struct pdev_cfr {
- struct wlan_objmgr_pdev *pdev_obj;
- uint8_t is_cfr_capable;
- uint8_t cfr_timer_enable;
- struct cfr_wmi_host_mem_chunk cfr_mem_chunk;
- uint16_t cfr_max_sta_count;
- uint16_t cfr_current_sta_count;
- uint32_t num_subbufs;
- uint32_t subbuf_size;
- struct qal_streamfs_chan *chan_ptr;
- struct qal_dentry_t *dir_ptr;
- struct look_up_table lut[MAX_LUT_ENTRIES];
- uint32_t dbr_buf_size;
- uint32_t dbr_num_bufs;
- uint64_t tx_evt_cnt;
- uint64_t total_tx_evt_cnt;
- uint64_t dbr_evt_cnt;
- uint64_t release_cnt;
-#ifdef WLAN_ENH_CFR_ENABLE
- struct cfr_rcc_param rcc_param;
- struct ta_ra_cfr_cfg global[MAX_TA_RA_ENTRIES];
- uint64_t rx_tlv_evt_cnt;
- qdf_timer_t lut_age_timer;
- uint8_t lut_timer_init;
- uint8_t is_cfr_rcc_capable;
- uint64_t flush_dbr_cnt;
- uint64_t invalid_dma_length_cnt;
- uint64_t flush_timeout_dbr_cnt;
- uint64_t clear_txrx_event;
- uint64_t last_success_tstamp;
- uint64_t cfr_dma_aborts;
-#endif
- struct unassoc_pool_entry unassoc_pool[MAX_CFR_ENABLED_CLIENTS];
- qdf_spinlock_t lut_lock;
-};
-
-#define PEER_CFR_CAPTURE_ENABLE 1
-#define PEER_CFR_CAPTURE_DISABLE 0
-/**
- * struct peer_cfr - private peer object for cfr
- * peer_obj: pointer to peer_obj
- * request: Type of request (start/stop)
- * bandwidth: bandwitdth of capture for this peer
- * capture_method: enum determining type of cfr data capture.
- * 0-Qos null data
- */
-struct peer_cfr {
- struct wlan_objmgr_peer *peer_obj;
- u_int8_t request; /* start/stop */
- u_int8_t bandwidth;
- u_int32_t period;
- u_int8_t capture_method;
-};
-
-/**
- * cfr_initialize_pdev() - cfr initialize pdev
- * @pdev: Pointer to pdev_obj
- *
- * Return: status of cfr pdev init
- */
-QDF_STATUS cfr_initialize_pdev(struct wlan_objmgr_pdev *pdev);
-
-/**
- * cfr_deinitialize_pdev() - cfr deinitialize pdev
- * @pdev: Pointer to pdev_obj
- *
- * Return: status of cfr pdev deinit
- */
-QDF_STATUS cfr_deinitialize_pdev(struct wlan_objmgr_pdev *pdev);
-
-/**
- * wlan_cfr_init() - Global init for cfr.
- *
- * Return: status of global init pass/fail
- */
-QDF_STATUS wlan_cfr_init(void);
-
-/**
- * wlan_cfr_deinit() - Global de-init for cfr.
- *
- * Return: status of global de-init pass/fail
- */
-QDF_STATUS wlan_cfr_deinit(void);
-
-/**
- * wlan_cfr_pdev_open() - pdev_open function for cfr.
- * @pdev: pointer to pdev object
- *
- * Return: status of pdev_open pass/fail
- */
-QDF_STATUS wlan_cfr_pdev_open(struct wlan_objmgr_pdev *pdev);
-
-/**
- * wlan_cfr_pdev_close() - pdev_close function for cfr.
- * @pdev: pointer to pdev object
- *
- * Return: status of pdev_close pass/fail
- */
-QDF_STATUS wlan_cfr_pdev_close(struct wlan_objmgr_pdev *pdev);
-
-/**
- * count_set_bits() - function to count set bits in a bitmap
- * @value: input bitmap
- *
- * Return: No. of set bits
- */
-uint8_t count_set_bits(uint32_t value);
-
-#ifdef WLAN_ENH_CFR_ENABLE
-/**
- * wlan_cfr_rx_tlv_process() - Process PPDU status TLVs and store info in
- * lookup table
- * @pdev_obj: PDEV object
- * @nbuf: ppdu info
- *
- * Return: none
- */
-void wlan_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf);
-#endif
-#endif
diff --git a/umac/cfr/dispatcher/src/wlan_cfr_tgt_api.c b/umac/cfr/dispatcher/src/wlan_cfr_tgt_api.c
deleted file mode 100644
index 93b6075..0000000
--- a/umac/cfr/dispatcher/src/wlan_cfr_tgt_api.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Layer b/w umac and target_if (ol) txops
- * It contains wrapers for txops
- */
-
-#include <wlan_cfr_tgt_api.h>
-#include <wlan_cfr_utils_api.h>
-#include <target_type.h>
-#include <cfr_defs_i.h>
-
-uint32_t tgt_cfr_info_send(struct wlan_objmgr_pdev *pdev, void *head,
- size_t hlen, void *data, size_t dlen, void *tail,
- size_t tlen)
-{
- struct pdev_cfr *pa;
- uint32_t status;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
-
- if (pa == NULL) {
- cfr_err("pdev_cfr is NULL\n");
- return -1;
- }
-
- if (head)
- status = cfr_streamfs_write(pa, (const void *)head, hlen);
-
- if (data)
- status = cfr_streamfs_write(pa, (const void *)data, dlen);
-
- if (tail)
- status = cfr_streamfs_write(pa, (const void *)tail, tlen);
-
-
- /* finalise the write */
- status = cfr_streamfs_flush(pa);
-
- return status;
-}
-
-void tgt_cfr_support_set(struct wlan_objmgr_psoc *psoc, uint32_t value)
-{
- struct psoc_cfr *cfr_sc;
-
- if (psoc == NULL)
- return;
-
- cfr_sc = wlan_objmgr_psoc_get_comp_private_obj(psoc,
- WLAN_UMAC_COMP_CFR);
- if (cfr_sc == NULL)
- return;
-
- cfr_sc->is_cfr_capable = !!value;
- cfr_debug("CFR:%s FW support advert=%d\n", __func__,
- cfr_sc->is_cfr_capable);
-}
-
-static inline struct wlan_lmac_if_cfr_tx_ops *
- wlan_psoc_get_cfr_txops(struct wlan_objmgr_psoc *psoc)
-{
- return &((psoc->soc_cb.tx_ops.cfr_tx_ops));
-}
-
-int tgt_cfr_get_target_type(struct wlan_objmgr_psoc *psoc)
-{
- uint32_t target_type = 0;
- struct wlan_lmac_if_target_tx_ops *target_type_tx_ops;
-
- target_type_tx_ops = &psoc->soc_cb.tx_ops.target_tx_ops;
-
- if (target_type_tx_ops->tgt_get_tgt_type)
- target_type = target_type_tx_ops->tgt_get_tgt_type(psoc);
-
- return target_type;
-}
-
-int tgt_cfr_init_pdev(struct wlan_objmgr_pdev *pdev)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- int status = 0;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_init_pdev)
- status = cfr_tx_ops->cfr_init_pdev(psoc, pdev);
-
- if (status != 0)
- cfr_err("Error occurred with exit code %d\n", status);
-
- return status;
-}
-
-int tgt_cfr_deinit_pdev(struct wlan_objmgr_pdev *pdev)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- int status = 0;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_deinit_pdev)
- status = cfr_tx_ops->cfr_deinit_pdev(psoc, pdev);
-
- if (status != 0)
- cfr_err("Error occurred with exit code %d\n", status);
-
- return status;
-}
-
-int tgt_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer,
- struct cfr_capture_params *cfr_params)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- int status = 0;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_start_capture)
- status = cfr_tx_ops->cfr_start_capture(pdev, peer, cfr_params);
-
- if (status != 0)
- cfr_err("Error occurred with exit code %d\n", status);
-
- return status;
-}
-
-int tgt_cfr_stop_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- int status = 0;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_stop_capture)
- status = cfr_tx_ops->cfr_stop_capture(pdev, peer);
-
- if (status != 0)
- cfr_err("Error occurred with exit code %d\n", status);
-
- return status;
-}
-
-int
-tgt_cfr_enable_cfr_timer(struct wlan_objmgr_pdev *pdev, uint32_t cfr_timer)
-{
- int status = 0;
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_enable_cfr_timer)
- status = cfr_tx_ops->cfr_enable_cfr_timer(pdev, cfr_timer);
-
- if (status != 0)
- cfr_err("Error occurred with exit code %d\n", status);
-
- return status;
-}
-
-#ifdef WLAN_ENH_CFR_ENABLE
-QDF_STATUS
-tgt_cfr_config_rcc(struct wlan_objmgr_pdev *pdev,
- struct cfr_rcc_param *rcc_param)
-{
- QDF_STATUS status = QDF_STATUS_SUCCESS;
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_config_rcc)
- status = cfr_tx_ops->cfr_config_rcc(pdev, rcc_param);
-
- if (status != QDF_STATUS_SUCCESS)
- cfr_err("Error occurred with exit code %d\n", status);
-
- return status;
-}
-
-void tgt_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- if (!psoc) {
- cfr_err("Invalid PSOC: Flush LUT Timer cannot be started\n");
- return;
- }
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_start_lut_timer)
- cfr_tx_ops->cfr_start_lut_timer(pdev);
-}
-
-void tgt_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- if (!psoc) {
- cfr_err("Invalid PSOC: Flush LUT Timer cannot be stopped\n");
- return;
- }
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_stop_lut_timer)
- cfr_tx_ops->cfr_stop_lut_timer(pdev);
-}
-
-void tgt_cfr_default_ta_ra_cfg(struct wlan_objmgr_pdev *pdev,
- struct cfr_rcc_param *rcc_param,
- bool allvalid, uint16_t reset_cfg)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_default_ta_ra_cfg)
- cfr_tx_ops->cfr_default_ta_ra_cfg(rcc_param,
- allvalid, reset_cfg);
-}
-
-void tgt_cfr_dump_lut_enh(struct wlan_objmgr_pdev *pdev)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_dump_lut_enh)
- cfr_tx_ops->cfr_dump_lut_enh(pdev);
-}
-
-void tgt_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_rx_tlv_process)
- cfr_tx_ops->cfr_rx_tlv_process(pdev, nbuf);
-}
-
-void tgt_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev)
-{
- struct wlan_lmac_if_cfr_tx_ops *cfr_tx_ops = NULL;
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- if (!psoc) {
- cfr_err("Invalid PSOC:Cannot update global config.\n");
- return;
- }
-
- cfr_tx_ops = wlan_psoc_get_cfr_txops(psoc);
-
- if (cfr_tx_ops->cfr_update_global_cfg)
- cfr_tx_ops->cfr_update_global_cfg(pdev);
-}
-#endif
diff --git a/umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c b/umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c
deleted file mode 100644
index f7638a9..0000000
--- a/umac/cfr/dispatcher/src/wlan_cfr_ucfg_api.c
+++ /dev/null
@@ -1,1130 +0,0 @@
-/*
- * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <wlan_cfr_ucfg_api.h>
-#include "../../core/inc/cfr_defs_i.h"
-#include <wlan_cfr_utils_api.h>
-#include <wlan_cfr_tgt_api.h>
-#include <wlan_objmgr_peer_obj.h>
-#include <wlan_objmgr_pdev_obj.h>
-#ifdef WLAN_ENH_CFR_ENABLE
-#include "cdp_txrx_ctrl.h"
-#endif
-
-#ifdef WLAN_ENH_CFR_ENABLE
-static bool cfr_is_filter_enabled(struct cfr_rcc_param *rcc_param)
-{
- if (rcc_param->m_directed_ftm ||
- rcc_param->m_all_ftm_ack ||
- rcc_param->m_ndpa_ndp_directed ||
- rcc_param->m_ndpa_ndp_all ||
- rcc_param->m_ta_ra_filter ||
- rcc_param->m_all_packet)
- return true;
- else
- return false;
-}
-#endif
-
-int ucfg_cfr_start_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer,
- struct cfr_capture_params *params)
-{
- int status;
- struct pdev_cfr *pa;
- struct peer_cfr *pe;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (NULL == pa) {
- cfr_err("PDEV cfr object is NULL!\n");
- return -EINVAL;
- }
-
- if (!(pa->is_cfr_capable)) {
- qdf_info("cfr is not supported on this chip\n");
- return -EINVAL;
- }
-
- /* Get peer private object */
- pe = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_CFR);
- if (NULL == pe) {
- cfr_err("PEER cfr object is NULL!\n");
- return -EINVAL;
- }
-
- if ((params->period < 0) || (params->period > MAX_CFR_PRD) ||
- (params->period % 10)) {
- cfr_err("Invalid period value: %d\n", params->period);
- return -EINVAL;
- }
-
- if (!(params->period) && (pa->cfr_timer_enable)) {
- cfr_err("Single shot capture is not allowed during periodic capture\n");
- return -EINVAL;
- }
-
- if ((params->period) && !(pa->cfr_timer_enable)) {
- cfr_err("Global periodic timer is not enabled, configure global cfr timer\n");
- }
-
- if (params->period) {
- if (pa->cfr_current_sta_count == pa->cfr_max_sta_count) {
- cfr_err("max periodic cfr clients reached");
- return -EINVAL;
- }
- if (!(pe->request))
- pa->cfr_current_sta_count++;
- }
-
-#ifdef WLAN_ENH_CFR_ENABLE
- if (pa->is_cfr_rcc_capable && cfr_is_filter_enabled(&pa->rcc_param)) {
- cfr_err("This is not allowed since RCC is enabled");
- pa->cfr_timer_enable = 0;
- return -EINVAL;
- }
-#endif
-
- status = tgt_cfr_start_capture(pdev, peer, params);
-
- if (status == 0) {
- pe->bandwidth = params->bandwidth;
- pe->period = params->period;
- pe->capture_method = params->method;
- pe->request = PEER_CFR_CAPTURE_ENABLE;
- } else
- pa->cfr_current_sta_count--;
-
- return status;
-}
-
-int ucfg_cfr_start_capture_probe_req(struct wlan_objmgr_pdev *pdev,
- struct qdf_mac_addr *unassoc_mac,
- struct cfr_capture_params *params)
-{
- int idx, idx_to_insert = -1;
- struct pdev_cfr *pa;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (!pa) {
- cfr_err("Pdev cfr object is null!");
- return -EINVAL;
- }
-
- if (!(pa->is_cfr_capable)) {
- cfr_err("CFR is not supported on this chip");
- return -EINVAL;
- }
-
- if (pa->cfr_current_sta_count == pa->cfr_max_sta_count) {
- cfr_err("max cfr cleint reached");
- return -EINVAL;
- }
-
- for (idx = 0; idx < MAX_CFR_ENABLED_CLIENTS; idx++) {
- /* Store first invalid entry's index, to add mac entry if not
- * already present.
- */
- if (idx_to_insert < 0) {
- if (pa->unassoc_pool[idx].is_valid != true)
- idx_to_insert = idx;
- }
-
- /* Add new mac entry only if it is not present. If already
- * present, update the capture parameters
- */
- if (qdf_mem_cmp(&pa->unassoc_pool[idx].mac, unassoc_mac,
- sizeof(struct qdf_mac_addr)) == 0) {
- cfr_info("Node already present. Updating params");
- qdf_mem_copy(&pa->unassoc_pool[idx].cfr_params,
- params,
- sizeof(struct cfr_capture_params));
- pa->unassoc_pool[idx].is_valid = true;
- return 0;
- }
- }
-
- if (idx_to_insert < 0) {
- /* All the entries in the table are valid. So we have reached
- * max client capacity. To add a new client, capture on one of
- * the clients in table has to be stopped.
- */
- cfr_err("Maximum client capacity reached");
- return -EINVAL;
- }
-
- /* If control reaches here, we did not find mac in the table
- * and we have atleast one free entry in table.
- * Add the entry at index = idx_to_insert
- */
- qdf_mem_copy(&pa->unassoc_pool[idx_to_insert].mac,
- unassoc_mac, sizeof(struct qdf_mac_addr));
- qdf_mem_copy(&pa->unassoc_pool[idx_to_insert].cfr_params,
- params, sizeof(struct cfr_capture_params));
- pa->unassoc_pool[idx_to_insert].is_valid = true;
- pa->cfr_current_sta_count++;
-
- return 0;
-}
-
-int ucfg_cfr_stop_capture_probe_req(struct wlan_objmgr_pdev *pdev,
- struct qdf_mac_addr *unassoc_mac)
-{
- struct pdev_cfr *pa;
- int idx;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (!pa) {
- cfr_err("Pdev cfr object is NULL!\n");
- return -EINVAL;
- }
-
- if (!(pa->is_cfr_capable)) {
- cfr_err("CFR is not supported on this chip\n");
- return -EINVAL;
- }
-
- for (idx = 0; idx < MAX_CFR_ENABLED_CLIENTS; idx++) {
- /* Remove mac only if it is present */
- if (qdf_mem_cmp(&pa->unassoc_pool[idx].mac, unassoc_mac,
- sizeof(struct qdf_mac_addr)) == 0) {
- qdf_mem_zero(&pa->unassoc_pool[idx],
- sizeof(struct unassoc_pool_entry));
- pa->cfr_current_sta_count--;
- return 0;
- }
- }
-
- /* If mac was present in pool it would have been deleted in the
- * above loop and returned from there.
- * If control reached here, mac was not found. So, ignore the request.
- */
- cfr_err("Trying to delete mac not present in pool. Ignoring request.");
- return 0;
-}
-
-int ucfg_cfr_set_timer(struct wlan_objmgr_pdev *pdev, uint32_t value)
-{
- struct pdev_cfr *pa;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (pa == NULL) {
- cfr_err("PDEV cfr object is NULL!\n");
- return -EINVAL;
- }
-
- if (!(pa->is_cfr_capable)) {
- qdf_info("cfr is not supported on this chip\n");
- return -EINVAL;
- }
-
- return tgt_cfr_enable_cfr_timer(pdev, value);
-}
-qdf_export_symbol(ucfg_cfr_set_timer);
-
-int ucfg_cfr_get_timer(struct wlan_objmgr_pdev *pdev)
-{
- struct pdev_cfr *pa;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (pa == NULL) {
- cfr_err("PDEV cfr object is NULL!\n");
- return -EINVAL;
- }
-
- if (!(pa->is_cfr_capable)) {
- qdf_info("cfr is not supported on this chip\n");
- return -EINVAL;
- }
-
- return pa->cfr_timer_enable;
-}
-qdf_export_symbol(ucfg_cfr_get_timer);
-
-int ucfg_cfr_stop_capture(struct wlan_objmgr_pdev *pdev,
- struct wlan_objmgr_peer *peer)
-{
- int status;
- struct peer_cfr *pe;
- struct pdev_cfr *pa;
-
- pa = wlan_objmgr_pdev_get_comp_private_obj(pdev, WLAN_UMAC_COMP_CFR);
- if (pa == NULL) {
- cfr_err("PDEV cfr object is NULL!\n");
- return -EINVAL;
- }
-
- if (!(pa->is_cfr_capable)) {
- qdf_info("cfr is not supported on this chip\n");
- return -EINVAL;
- }
-
- pe = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_CFR);
- if (pe == NULL) {
- cfr_err("PEER cfr object is NULL!\n");
- return -EINVAL;
- }
-
- if ((pe->period) && (pe->request))
- status = tgt_cfr_stop_capture(pdev, peer);
- else {
- qdf_info("periodic cfr not started for the client\n");
- return -EINVAL;
- }
-
- if (status == 0) {
- pe->request = PEER_CFR_CAPTURE_DISABLE;
- pa->cfr_current_sta_count--;
- }
-
- return status;
-}
-
-int ucfg_cfr_list_peers(struct wlan_objmgr_pdev *pdev)
-{
- return 0;
-}
-
-#ifdef WLAN_ENH_CFR_ENABLE
-
-static inline
-QDF_STATUS dev_sanity_check(struct wlan_objmgr_vdev *vdev,
- struct wlan_objmgr_pdev **ppdev,
- struct pdev_cfr **ppcfr)
-{
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- if (!vdev) {
- cfr_err("vdev is NULL\n");
- return QDF_STATUS_E_NULL_VALUE;
- }
-
- *ppdev = wlan_vdev_get_pdev(vdev);
-
- if (!*ppdev) {
- cfr_err("pdev is NULL\n");
- return QDF_STATUS_E_NULL_VALUE;
- }
-
- status = wlan_objmgr_pdev_try_get_ref(*ppdev, WLAN_CFR_ID);
- if (status != QDF_STATUS_SUCCESS) {
- cfr_err("Failed to get pdev reference\n");
- return status;
- }
-
- *ppcfr = wlan_objmgr_pdev_get_comp_private_obj(*ppdev,
- WLAN_UMAC_COMP_CFR);
-
- if (!(*ppcfr)) {
- cfr_err("pdev object for CFR is null");
- wlan_objmgr_pdev_release_ref(*ppdev, WLAN_CFR_ID);
- return QDF_STATUS_E_NULL_VALUE;
- }
-
- if (!(*ppcfr)->is_cfr_rcc_capable) {
- cfr_err("cfr is not supported on this chip\n");
- wlan_objmgr_pdev_release_ref(*ppdev, WLAN_CFR_ID);
- return QDF_STATUS_E_NOSUPPORT;
- }
-
- return status;
-}
-
-/*
- * This is needed only in case of m_ta_ra_filter mode.
- * If user wants to reset the group configurations to default values,
- * then this handler will come into action.
- *
- * If user wants to reset the configurations of 0th, 1st and 3rd group,
- * then the input should be :
- *
- * wlanconfig ath0 cfr reset_cfg 0xb
- *
- */
-
-QDF_STATUS ucfg_cfr_set_reset_bitmap(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- pcfr->rcc_param.modified_in_curr_session |= params->reset_cfg;
- tgt_cfr_default_ta_ra_cfg(pdev, &pcfr->rcc_param,
- true, params->reset_cfg);
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * This is needed only in case of m_ta_ra_filter mode.
- * After providing all the group configurations, user should provide
- * the information about which groups need to be enabled.
- * Based on that FW will enable the configurations for CFR groups.
- * If user has to enable only 0th group, then input should be :
- *
- * wlanconfig ath0 cfr en_cfg 0x1
- *
- * Enable the bitmap from user provided configuration into cfr_rcc_param.
- */
-
-QDF_STATUS ucfg_cfr_set_en_bitmap(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- pcfr->rcc_param.filter_group_bitmap = params->en_cfg;
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * Copy user provided input for ul_mu_user_mask into cfr_rcc_param.
- */
-
-QDF_STATUS
-ucfg_cfr_set_ul_mu_user_mask(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- pcfr->rcc_param.ul_mu_user_mask_lower = params->ul_mu_user_mask_lower;
- pcfr->rcc_param.ul_mu_user_mask_upper = params->ul_mu_user_mask_upper;
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * FREEZE_TLV_DELAY_CNT_* registers are used for FREEZE TLV timeout mechanism
- * in MAC side. In case MAC send FREEZE TLV to PHY too late due to
- * long AST delay, PHY ucode may not handle it well or it will impact
- * next frame’s normal processing, then MAC needs to drop FREEZE TLV
- * sending process after reaching the threshold.
- *
- * This handler will copy user provided input for freeze_tlv_delay_cnt
- * into cfr_rcc_param.
- */
-
-QDF_STATUS
-ucfg_cfr_set_freeze_tlv_delay_cnt(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- pcfr->rcc_param.freeze_tlv_delay_cnt_en =
- params->freeze_tlv_delay_cnt_en;
-
- pcfr->rcc_param.freeze_tlv_delay_cnt_thr =
- params->freeze_tlv_delay_cnt_thr;
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * Set capture interval from the provided configuration into cfr_rcc_param.
- * All fixed parameters are needed to be stored into cfr_rcc_param.
- */
-
-QDF_STATUS
-ucfg_cfr_set_capture_interval(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- if (pcfr->rcc_param.capture_duration > params->cap_intvl) {
- cfr_err("Capture intval should be more than capture duration");
- status = QDF_STATUS_E_INVAL;
- } else
- pcfr->rcc_param.capture_interval = params->cap_intvl;
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * Set capture duration from the provided configuration into cfr_rcc_param.
- * All fixed parameters are needed to be stored into cfr_rcc_param.
- */
-
-QDF_STATUS
-ucfg_cfr_set_capture_duration(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- if (pcfr->rcc_param.capture_interval
- && (params->cap_dur > pcfr->rcc_param.capture_interval)) {
- cfr_err("Capture duration is exceeding capture interval");
- status = QDF_STATUS_E_INVAL;
- } else
- pcfr->rcc_param.capture_duration = params->cap_dur;
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * Copy user provided group parameters( type/ subtype of mgmt, ctrl, data )
- * into curr_cfg instance of ta_ra_cfr_cfg.
- * Set valid mask for the provided configuration.
- * Set modified_in_this_session for the particular group.
- */
-
-QDF_STATUS
-ucfg_cfr_set_frame_type_subtype(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct ta_ra_cfr_cfg *curr_cfg = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- /* Populating current config based on user's input */
- curr_cfg = &pcfr->rcc_param.curr[params->grp_id];
- curr_cfg->mgmt_subtype_filter = params->expected_mgmt_subtype;
- curr_cfg->ctrl_subtype_filter = params->expected_ctrl_subtype;
- curr_cfg->data_subtype_filter = params->expected_data_subtype;
-
- curr_cfg->valid_mgmt_subtype = 1;
- curr_cfg->valid_ctrl_subtype = 1;
- curr_cfg->valid_data_subtype = 1;
-
- qdf_set_bit(params->grp_id,
- (unsigned long *)
- &pcfr->rcc_param.modified_in_curr_session);
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * Copy user provided group parameters( BW and NSS )
- * into curr_cfg instance of ta_ra_cfr_cfg.
- * Set valid mask for the provided configuration.
- * Set modified_in_this_session for the particular group.
- */
-
-QDF_STATUS ucfg_cfr_set_bw_nss(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct ta_ra_cfr_cfg *curr_cfg = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- /* Populating current config based on user's input */
- curr_cfg = &pcfr->rcc_param.curr[params->grp_id];
- curr_cfg->bw = params->bw;
- curr_cfg->nss = params->nss;
-
- curr_cfg->valid_bw_mask = 1;
- curr_cfg->valid_nss_mask = 1;
-
- qdf_set_bit(params->grp_id,
- (unsigned long *)&pcfr->rcc_param.modified_in_curr_session);
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * Copy user provided group parameters( TA, RA, TA_MASK, RA_MASK )
- * into curr_cfg instance of ta_ra_cfr_cfg.
- * Set valid mask for the provided configuration.
- * Set modified_in_this_session for the particular group.
- */
-
-QDF_STATUS ucfg_cfr_set_tara_config(struct wlan_objmgr_vdev *vdev,
- struct ieee80211_wlanconfig_cfr *params)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct ta_ra_cfr_cfg *curr_cfg = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- curr_cfg = &pcfr->rcc_param.curr[params->grp_id];
- qdf_mem_copy(curr_cfg->tx_addr, params->ta, QDF_MAC_ADDR_SIZE);
- qdf_mem_copy(curr_cfg->rx_addr, params->ra, QDF_MAC_ADDR_SIZE);
- qdf_mem_copy(curr_cfg->tx_addr_mask,
- params->ta_mask, QDF_MAC_ADDR_SIZE);
- qdf_mem_copy(curr_cfg->rx_addr_mask,
- params->ra_mask, QDF_MAC_ADDR_SIZE);
-
- curr_cfg->valid_ta = 1;
- curr_cfg->valid_ta_mask = 1;
- curr_cfg->valid_ra = 1;
- curr_cfg->valid_ra_mask = 1;
-
- qdf_set_bit(params->grp_id,
- (unsigned long *)
- &pcfr->rcc_param.modified_in_curr_session);
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct ta_ra_cfr_cfg *glbl_cfg = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
- uint8_t grp_id;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
- if (!cfr_is_filter_enabled(&pcfr->rcc_param)) {
- cfr_err(" All RCC modes are disabled");
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
- return status;
- }
-
- cfr_err("CAPTURE MODE:\n");
-
- cfr_err("m_directed_ftm is : %s\n",
- pcfr->rcc_param.m_directed_ftm ?
- "enabled" : "disabled");
- cfr_err("m_all_ftm_ack is : %s\n",
- pcfr->rcc_param.m_all_ftm_ack ?
- "enabled" : "disabled");
- cfr_err("m_ndpa_ndp_directed is: %s\n",
- pcfr->rcc_param.m_ndpa_ndp_directed ?
- "enabled" : "disabled");
- cfr_err("m_ndpa_ndp_all is : %s\n",
- pcfr->rcc_param.m_ndpa_ndp_all ?
- "enabled" : "disabled");
- cfr_err("m_ta_ra_filter is : %s\n",
- pcfr->rcc_param.m_ta_ra_filter ?
- "enabled" : "disabled");
- cfr_err("m_all_packet is : %s\n",
- pcfr->rcc_param.m_all_packet ?
- "enabled" : "disabled");
-
- cfr_err("capture duration : %u usec\n",
- pcfr->rcc_param.capture_duration);
- cfr_err("capture interval : %u usec\n",
- pcfr->rcc_param.capture_interval);
- cfr_err("UL MU User mask lower : %u\n",
- pcfr->rcc_param.ul_mu_user_mask_lower);
- cfr_err("UL MU User mask upper : %u\n",
- pcfr->rcc_param.ul_mu_user_mask_upper);
- cfr_err("Freeze TLV delay count is : %s\n",
- pcfr->rcc_param.freeze_tlv_delay_cnt_en ?
- "enabled" : "disabled");
- cfr_err("Freeze TLV delay count threshold : %u\n",
- pcfr->rcc_param.freeze_tlv_delay_cnt_thr);
- cfr_err("Enabled CFG id bitmap : 0x%x\n",
- pcfr->rcc_param.filter_group_bitmap);
- cfr_err(" Modified cfg id bitmap : 0x%x\n",
- pcfr->rcc_param.modified_in_curr_session);
-
- cfr_err("TARA_CONFIG details:\n");
-
- for (grp_id = 0; grp_id < MAX_TA_RA_ENTRIES; grp_id++) {
- glbl_cfg = &pcfr->global[grp_id];
-
- cfr_err("Config ID: %d\n", grp_id);
- cfr_err("Bandwidth :0x%x\n", glbl_cfg->bw);
- cfr_err("NSS : 0x%x\n", glbl_cfg->nss);
- cfr_err("valid_ta: %d\n", glbl_cfg->valid_ta);
- cfr_err("valid_ta_mask: %d\n", glbl_cfg->valid_ta_mask);
- cfr_err("valid_ra: %d\n", glbl_cfg->valid_ra);
- cfr_err("valid_ra_mask: %d\n", glbl_cfg->valid_ra_mask);
- cfr_err("valid_bw_mask: %d\n", glbl_cfg->valid_bw_mask);
- cfr_err("valid_nss_mask: %d\n", glbl_cfg->valid_nss_mask);
- cfr_err("valid_mgmt_subtype: %d\n",
- glbl_cfg->valid_mgmt_subtype);
- cfr_err("valid_ctrl_subtype: %d\n",
- glbl_cfg->valid_ctrl_subtype);
- cfr_err("valid_data_subtype: %d\n",
- glbl_cfg->valid_data_subtype);
- cfr_err("Mgmt subtype : 0x%x\n",
- glbl_cfg->mgmt_subtype_filter);
- cfr_err("CTRL subtype : 0x%x\n",
- glbl_cfg->ctrl_subtype_filter);
- cfr_err("Data subtype : 0x%x\n",
- glbl_cfg->data_subtype_filter);
- cfr_err("TX Addr : %s\n",
- ether_sprintf(glbl_cfg->tx_addr));
- cfr_err("TX Addr Mask : %s\n",
- ether_sprintf(glbl_cfg->tx_addr_mask));
- cfr_err("RX Addr : %s\n",
- ether_sprintf(glbl_cfg->rx_addr));
- cfr_err("RX Addr Mask: %s\n",
- ether_sprintf(glbl_cfg->rx_addr_mask));
- }
-
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-static const char *chan_capture_status_to_str(enum chan_capture_status type)
-{
- switch (type) {
- case CAPTURE_IDLE:
- return "CAPTURE_IDLE";
- case CAPTURE_BUSY:
- return "CAPTURE_BUSY";
- case CAPTURE_ACTIVE:
- return "CAPTURE_ACTIVE";
- case CAPTURE_NO_BUFFER:
- return "CAPTURE_NO_BUFFER";
- default:
- return "INVALID";
- }
-}
-
-static const
-char *mac_freeze_reason_to_str(enum mac_freeze_capture_reason type)
-{
- switch (type) {
- case FREEZE_REASON_TM:
- return "FREEZE_REASON_TM";
- case FREEZE_REASON_FTM:
- return "FREEZE_REASON_FTM";
- case FREEZE_REASON_ACK_RESP_TO_TM_FTM:
- return "FREEZE_REASON_ACK_RESP_TO_TM_FTM";
- case FREEZE_REASON_TA_RA_TYPE_FILTER:
- return "FREEZE_REASON_TA_RA_TYPE_FILTER";
- case FREEZE_REASON_NDPA_NDP:
- return "FREEZE_REASON_NDPA_NDP";
- case FREEZE_REASON_ALL_PACKET:
- return "FREEZE_REASON_ALL_PACKET";
- default:
- return "INVALID";
- }
-}
-
-QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct wlan_objmgr_psoc *psoc = NULL;
- struct cdp_cfr_rcc_stats *cfr_rcc_stats = NULL;
- uint8_t stats_cnt;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- psoc = wlan_pdev_get_psoc(pdev);
- if (!psoc) {
- cfr_err("psoc is null!");
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
- return QDF_STATUS_E_NULL_VALUE;
- }
-
- cfr_err("total_tx_evt_cnt = %llu\n",
- pcfr->total_tx_evt_cnt);
- cfr_err("dbr_evt_cnt = %llu\n",
- pcfr->dbr_evt_cnt);
- cfr_err("rx_tlv_evt_cnt = %llu\n",
- pcfr->rx_tlv_evt_cnt);
- cfr_err("release_cnt = %llu\n",
- pcfr->release_cnt);
- cfr_err("Error cnt:\n");
- cfr_err("flush_dbr_cnt = %llu\n",
- pcfr->flush_dbr_cnt);
- cfr_err("invalid_dma_length_cnt = %llu\n",
- pcfr->invalid_dma_length_cnt);
- cfr_err("flush_timeout_dbr_cnt = %llu\n",
- pcfr->flush_timeout_dbr_cnt);
- cfr_err("PPDU id mismatch for same cookie:\n");
- cfr_err("clear_txrx_event = %llu\n",
- pcfr->clear_txrx_event);
- cfr_err("cfr_dma_aborts = %llu\n",
- pcfr->cfr_dma_aborts);
-
- cfr_rcc_stats = qdf_mem_malloc(sizeof(struct cdp_cfr_rcc_stats));
- if (!cfr_rcc_stats) {
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
- return QDF_STATUS_E_NOMEM;
- }
-
- cdp_get_cfr_dbg_stats(wlan_psoc_get_dp_handle(psoc),
- wlan_objmgr_pdev_get_pdev_id(pdev),
- cfr_rcc_stats);
-
- cfr_err("bb_captured_channel_cnt: %llu\n",
- cfr_rcc_stats->bb_captured_channel_cnt);
- cfr_err("bb_captured_timeout_cnt: %llu\n",
- cfr_rcc_stats->bb_captured_timeout_cnt);
- cfr_err("rx_loc_info_valid_cnt: %llu\n",
- cfr_rcc_stats->rx_loc_info_valid_cnt);
-
- cfr_err("Channel capture status:\n");
- for (stats_cnt = 0; stats_cnt < CAPTURE_MAX; stats_cnt++) {
- cfr_err("%s = %llu\n",
- chan_capture_status_to_str(stats_cnt),
- cfr_rcc_stats->chan_capture_status[stats_cnt]);
- }
-
- cfr_err("Freeze reason:\n");
- for (stats_cnt = 0; stats_cnt < FREEZE_REASON_MAX; stats_cnt++) {
- cfr_err("%s = %llu\n",
- mac_freeze_reason_to_str(stats_cnt),
- cfr_rcc_stats->reason_cnt[stats_cnt]);
- }
-
- qdf_mem_free(cfr_rcc_stats);
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-QDF_STATUS ucfg_cfr_rcc_clr_dbg_counters(struct wlan_objmgr_vdev *vdev)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct wlan_objmgr_psoc *psoc = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- psoc = wlan_pdev_get_psoc(pdev);
- if (!psoc) {
- cfr_err("psoc is null!");
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
- return QDF_STATUS_E_NULL_VALUE;
- }
- cdp_cfr_clr_dbg_stats(wlan_psoc_get_dp_handle(psoc),
- wlan_objmgr_pdev_get_pdev_id(pdev));
-
- pcfr->dbr_evt_cnt = 0;
- pcfr->release_cnt = 0;
- pcfr->total_tx_evt_cnt = 0;
- pcfr->rx_tlv_evt_cnt = 0;
- pcfr->flush_dbr_cnt = 0;
- pcfr->flush_timeout_dbr_cnt = 0;
- pcfr->invalid_dma_length_cnt = 0;
- pcfr->clear_txrx_event = 0;
- pcfr->cfr_dma_aborts = 0;
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-QDF_STATUS ucfg_cfr_rcc_dump_lut(struct wlan_objmgr_vdev *vdev)
-{
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- if (!vdev) {
- cfr_err("vdev is NULL\n");
- return QDF_STATUS_E_INVAL;
- }
-
- pdev = wlan_vdev_get_pdev(vdev);
- if (!pdev) {
- cfr_err("pdev is NULL\n");
- return QDF_STATUS_E_INVAL;
- }
-
- if (wlan_objmgr_pdev_try_get_ref(pdev, WLAN_CFR_ID) !=
- QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_INVAL;
- }
-
- cfr_err("LUT table:\n");
- tgt_cfr_dump_lut_enh(pdev);
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-void cfr_set_filter(struct wlan_objmgr_pdev *pdev,
- bool enable, struct cdp_monitor_filter *filter_val)
-{
- struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
-
- cfr_info("pdev_id=%d\n", wlan_objmgr_pdev_get_pdev_id(pdev));
-
- cdp_cfr_filter(wlan_psoc_get_dp_handle(psoc),
- wlan_objmgr_pdev_get_pdev_id(pdev),
- enable,
- filter_val);
-}
-
-/*
- * With the initiation of commit command, this handler will be triggered.
- *
- * Starts the procedure of forming the TLVs.
- * If Host succeeds to send WMI command to FW, after TLV processing, then it
- * will save the previous CFR configurations into one instance ta_ra_cfr_cfg,
- * called glbl_cfg and update the current config to default state for the
- * next commit session.
- *
- * Finally, reset the counter (modified_in_this_session) to 0 before moving to
- * next commit session.
- *
- */
-
-QDF_STATUS ucfg_cfr_committed_rcc_config(struct wlan_objmgr_vdev *vdev)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- struct wlan_objmgr_psoc *psoc = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
- struct cdp_monitor_filter filter_val = {0};
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- psoc = wlan_pdev_get_psoc(pdev);
-
- if (!psoc) {
- cfr_err("psoc is null!");
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
- return QDF_STATUS_E_NULL_VALUE;
- }
- /*
- * If capture mode is valid, then Host:
- * Subscribes for PPDU status TLVs in monitor status ring.
- * Sets filter type to either FP or MO, based on the capture mode.
- * Starts the LUT_AGE_TIMER of 1sec.
- *
- * If capture mode is disabled, then Host:
- * unsubscribes for PPDU status TLVs in monitor status ring.
- * Sets filter type to 0.
- * Stops the LUT_AGE_TIMER.
- *
- */
-
- if (cfr_is_filter_enabled(&pcfr->rcc_param)) {
- if (pcfr->cfr_timer_enable) {
- cfr_err("Not allowed: Periodic capture is enabled.\n");
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
- return QDF_STATUS_E_NOSUPPORT;
- }
-
- if (pcfr->rcc_param.m_all_ftm_ack) {
- filter_val.mode |= MON_FILTER_PASS |
- MON_FILTER_OTHER;
- filter_val.fp_mgmt |= FILTER_MGMT_ACTION;
- filter_val.mo_mgmt |= FILTER_MGMT_ACTION;
- }
-
- if (pcfr->rcc_param.m_ndpa_ndp_all) {
- filter_val.mode |= MON_FILTER_PASS |
- MON_FILTER_OTHER;
- filter_val.fp_ctrl |= FILTER_CTRL_VHT_NDP;
- filter_val.mo_ctrl |= FILTER_CTRL_VHT_NDP;
- }
-
- if (pcfr->rcc_param.m_all_packet) {
- filter_val.mode |= MON_FILTER_PASS |
- MON_FILTER_OTHER;
- filter_val.fp_mgmt |= FILTER_MGMT_ALL;
- filter_val.mo_mgmt |= FILTER_MGMT_ALL;
- filter_val.fp_ctrl |= FILTER_CTRL_ALL;
- filter_val.mo_ctrl |= FILTER_CTRL_ALL;
- filter_val.fp_data |= FILTER_DATA_ALL;
- filter_val.mo_data |= FILTER_DATA_ALL;
- }
-
- /*
- * M_TA_RA in monitor other is as intensive as M_ALL pkt
- * Support only FP in M_TA_RA mode
- */
- if (pcfr->rcc_param.m_ta_ra_filter) {
- filter_val.mode |= MON_FILTER_PASS |
- MON_FILTER_OTHER;
- filter_val.fp_mgmt |= FILTER_MGMT_ALL;
- filter_val.mo_mgmt |= FILTER_MGMT_ALL;
- filter_val.fp_ctrl |= FILTER_CTRL_ALL;
- filter_val.mo_ctrl |= FILTER_CTRL_ALL;
- filter_val.fp_data |= FILTER_DATA_ALL;
- filter_val.mo_data |= FILTER_DATA_ALL;
- }
-
- if (pcfr->rcc_param.m_directed_ftm) {
- filter_val.mode |= MON_FILTER_PASS;
- filter_val.fp_mgmt |= FILTER_MGMT_ACTION;
- }
-
- if (pcfr->rcc_param.m_ndpa_ndp_directed) {
- filter_val.mode |= MON_FILTER_PASS;
- filter_val.fp_ctrl |= FILTER_CTRL_VHT_NDP;
- }
-
- if (!cdp_get_cfr_rcc(wlan_psoc_get_dp_handle(psoc),
- wlan_objmgr_pdev_get_pdev_id(pdev)))
- tgt_cfr_start_lut_age_timer(pdev);
- cfr_set_filter(pdev, 1, &filter_val);
- } else {
- if (cdp_get_cfr_rcc(wlan_psoc_get_dp_handle(psoc),
- wlan_objmgr_pdev_get_pdev_id(pdev)))
- tgt_cfr_stop_lut_age_timer(pdev);
- cfr_set_filter(pdev, 0, &filter_val);
- }
-
- /* Trigger wmi to start the TLV processing. */
- status = tgt_cfr_config_rcc(pdev, &pcfr->rcc_param);
- if (status == QDF_STATUS_SUCCESS) {
- cfr_info("CFR commit done\n");
- /* Update global config */
- tgt_cfr_update_global_cfg(pdev);
-
- /* Bring curr_cfg to default state for next commit session */
- tgt_cfr_default_ta_ra_cfg(pdev, &pcfr->rcc_param,
- false, MAX_RESET_CFG_ENTRY);
- } else {
- cfr_err("CFR commit failed\n");
- }
-
- pcfr->rcc_param.num_grp_tlvs = 0;
- pcfr->rcc_param.modified_in_curr_session = 0;
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-/*
- * This handler is used to enable / disable the capture mode.
- *
- */
-QDF_STATUS ucfg_cfr_set_rcc_mode(struct wlan_objmgr_vdev *vdev,
- enum capture_type mode, uint8_t value)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return status;
-
- switch (mode) {
- case RCC_DIRECTED_FTM_FILTER:
- pcfr->rcc_param.m_directed_ftm = value;
- break;
- case RCC_ALL_FTM_ACK_FILTER:
- pcfr->rcc_param.m_all_ftm_ack = value;
- break;
- case RCC_DIRECTED_NDPA_NDP_FILTER:
- pcfr->rcc_param.m_ndpa_ndp_directed = value;
- break;
- case RCC_NDPA_NDP_ALL_FILTER:
- pcfr->rcc_param.m_ndpa_ndp_all = value;
- break;
- case RCC_TA_RA_FILTER:
- pcfr->rcc_param.m_ta_ra_filter = value;
- break;
- case RCC_ALL_PACKET_FILTER:
- pcfr->rcc_param.m_all_packet = value;
- break;
- case RCC_DIS_ALL_MODE:
- pcfr->rcc_param.m_directed_ftm = value;
- pcfr->rcc_param.m_all_ftm_ack = value;
- pcfr->rcc_param.m_ndpa_ndp_directed = value;
- pcfr->rcc_param.m_ndpa_ndp_all = value;
- pcfr->rcc_param.m_ta_ra_filter = value;
- pcfr->rcc_param.m_all_packet = value;
- break;
-
- default:
- break;
- }
-
- cfr_debug("<CFR_UMAC> Capture mode set by user: 0x%x\n", value);
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return status;
-}
-
-bool ucfg_cfr_get_rcc_enabled(struct wlan_objmgr_vdev *vdev)
-{
- struct pdev_cfr *pcfr = NULL;
- struct wlan_objmgr_pdev *pdev = NULL;
- QDF_STATUS status = QDF_STATUS_SUCCESS;
- bool rcc_enabled = false;
-
- status = dev_sanity_check(vdev, &pdev, &pcfr);
- if (status != QDF_STATUS_SUCCESS)
- return false;
-
- rcc_enabled = cfr_is_filter_enabled(&pcfr->rcc_param);
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
-
- return rcc_enabled;
-}
-#endif
diff --git a/umac/cfr/dispatcher/src/wlan_cfr_utils_api.c b/umac/cfr/dispatcher/src/wlan_cfr_utils_api.c
deleted file mode 100644
index 4cb8ea2..0000000
--- a/umac/cfr/dispatcher/src/wlan_cfr_utils_api.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 2019 The Linux Foundation. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <wlan_cfr_utils_api.h>
-#include <wlan_cfr_tgt_api.h>
-#include <qdf_module.h>
-#include "../../core/inc/cfr_defs_i.h"
-#include <wlan_objmgr_global_obj.h>
-#include <wlan_objmgr_pdev_obj.h>
-
-QDF_STATUS wlan_cfr_init(void)
-{
- if (wlan_objmgr_register_psoc_create_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_psoc_obj_create_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_register_psoc_destroy_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_psoc_obj_destroy_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_register_pdev_create_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_pdev_obj_create_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_register_pdev_destroy_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_pdev_obj_destroy_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_register_peer_create_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_peer_obj_create_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_register_peer_destroy_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_peer_obj_destroy_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS wlan_cfr_deinit(void)
-{
- if (wlan_objmgr_unregister_psoc_create_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_psoc_obj_create_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_unregister_psoc_destroy_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_psoc_obj_destroy_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_unregister_pdev_create_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_pdev_obj_create_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_unregister_pdev_destroy_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_pdev_obj_destroy_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_unregister_peer_create_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_peer_obj_create_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- if (wlan_objmgr_unregister_peer_destroy_handler(WLAN_UMAC_COMP_CFR,
- wlan_cfr_peer_obj_destroy_handler, NULL)
- != QDF_STATUS_SUCCESS) {
- return QDF_STATUS_E_FAILURE;
- }
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS wlan_cfr_pdev_open(struct wlan_objmgr_pdev *pdev)
-{
- int status;
-
- /* chip specific init */
- status = tgt_cfr_init_pdev(pdev);
-
- if (status != QDF_STATUS_SUCCESS) {
- cfr_err("tgt_cfr_init_pdev failed with %d\n", status);
- return QDF_STATUS_SUCCESS;
- }
-
- /* RealyFS init */
- status = cfr_streamfs_init(pdev);
-
- if (status != QDF_STATUS_SUCCESS) {
- cfr_err("cfr_streamfs_init failed with %d\n", status);
- return QDF_STATUS_SUCCESS;
- }
-
- return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS wlan_cfr_pdev_close(struct wlan_objmgr_pdev *pdev)
-{
- int status = QDF_STATUS_SUCCESS;
- /*
- * DBR does not have close as of now;
- * but this is getting added as part for new gerrit
- * Once we have that support we will add it.
- */
- status = cfr_streamfs_remove(pdev);
-
- return status;
-}
-
-QDF_STATUS cfr_initialize_pdev(struct wlan_objmgr_pdev *pdev)
-{
- int status = QDF_STATUS_SUCCESS;
-
- /* chip specific init */
-
- status = tgt_cfr_init_pdev(pdev);
-
- if (status != QDF_STATUS_SUCCESS)
- cfr_err("cfr_initialize_pdev status=%d\n", status);
-
- return status;
-}
-qdf_export_symbol(cfr_initialize_pdev);
-
-QDF_STATUS cfr_deinitialize_pdev(struct wlan_objmgr_pdev *pdev)
-{
- int status = QDF_STATUS_SUCCESS;
-
- /* chip specific deinit */
-
- status = tgt_cfr_deinit_pdev(pdev);
-
- if (status != QDF_STATUS_SUCCESS)
- cfr_err("cfr_deinitialize_pdev status=%d\n", status);
-
- return status;
-}
-qdf_export_symbol(cfr_deinitialize_pdev);
-
-uint8_t count_set_bits(uint32_t value)
-{
- uint8_t count = 0;
-
- while (value) {
- value &= (value - 1);
- count++;
- }
-
- return count;
-}
-
-qdf_export_symbol(count_set_bits);
-
-#ifdef WLAN_ENH_CFR_ENABLE
-void wlan_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
-{
- tgt_cfr_rx_tlv_process(pdev, nbuf);
-}
-
-qdf_export_symbol(wlan_cfr_rx_tlv_process);
-#endif
diff --git a/umac/dfs/core/src/misc/dfs_zero_cac.c b/umac/dfs/core/src/misc/dfs_zero_cac.c
index c42223c..b2a42ab 100644
--- a/umac/dfs/core/src/misc/dfs_zero_cac.c
+++ b/umac/dfs/core/src/misc/dfs_zero_cac.c
@@ -261,6 +261,14 @@
/* Given a bandwidth, find the number of subchannels in that bandwidth */
#define N_SUBCHS_FOR_BANDWIDTH(_bw) ((_bw) / MIN_DFS_SUBCHAN_BW)
+#ifdef CONFIG_CHAN_FREQ_API
+#define DFS_160MHZ_SECSEG_CHAN_OFFSET 40
+#else
+#ifdef CONFIG_CHAN_NUM_API
+#define DFS_160MHZ_SECSEG_CHAN_OFFSET 8
+#endif
+#endif
+
/*dfs_zero_cac_reset() - Reset zero cac variables.
*@dfs: Pointer to wlan_dfs
*/
@@ -315,10 +323,12 @@
return dfs->dfs_legacy_precac_ucfg;
}
+#ifdef QCA_SUPPORT_AGILE_DFS
bool dfs_is_agile_precac_enabled(struct wlan_dfs *dfs)
{
return (dfs->dfs_agile_precac_ucfg && dfs->dfs_fw_adfs_support_non_160);
}
+#endif
/* dfs_descend_precac_tree() - Descend into the precac BSTree based on the
* channel provided. If the channel is less than
@@ -569,8 +579,9 @@
* @chan_freq: Channel frequency in MHZ.
*/
#ifdef CONFIG_CHAN_FREQ_API
-bool dfs_is_precac_done_on_ht20_40_80_chan_for_freq(struct wlan_dfs *dfs,
- uint16_t chan_freq)
+bool
+dfs_is_precac_done_on_ht20_40_80_160_165_chan_for_freq(struct wlan_dfs *dfs,
+ uint16_t chan_freq)
{
struct dfs_precac_entry *precac_entry;
bool ret_val = 0;
@@ -584,10 +595,12 @@
TAILQ_FOREACH(precac_entry,
&dfs->dfs_precac_list,
pe_list) {
- /* Find if the VHT80 ieee_chan is in this precac_list */
+ /* Find if the channel frequency is
+ * in this precac_list.
+ */
if (IS_WITHIN_RANGE(chan_freq,
- precac_entry->vht80_ch_freq,
- VHT80_FREQ_OFFSET)) {
+ precac_entry->center_ch_freq,
+ VHT160_FREQ_OFFSET)) {
ret_val = dfs_find_cac_status_for_chan_for_freq(
precac_entry, chan_freq);
break;
@@ -603,42 +616,36 @@
#endif
/*
- * dfs_is_precac_done_on_ht8080_ht160_chan - Find if preCAC is done
+ * dfs_is_precac_done_on_ht8080_chan - Find if preCAC is done
* for the given frequency.
* @dfs: Pointer to wlan_dfs.
* @chan: Pointer to dfs_channel.
*/
#ifdef CONFIG_CHAN_FREQ_API
-bool dfs_is_precac_done_on_ht8080_ht160_chan(struct wlan_dfs *dfs,
- struct dfs_channel *chan)
+bool dfs_is_precac_done_on_ht8080_chan(struct wlan_dfs *dfs,
+ struct dfs_channel *chan)
{
bool ret_val = 0, primary_found = 0;
uint16_t cfreq1, cfreq2 = 0;
cfreq1 = chan->dfs_ch_mhz_freq_seg1;
- if (WLAN_IS_CHAN_MODE_160(chan)) {
- if (chan->dfs_ch_freq < chan->dfs_ch_mhz_freq_seg2)
- cfreq2 = chan->dfs_ch_mhz_freq_seg1 +
- VHT160_FREQ_DIFF;
- else
- cfreq2 = chan->dfs_ch_mhz_freq_seg1 -
- VHT160_FREQ_DIFF;
- } else {
- cfreq2 = chan->dfs_ch_mhz_freq_seg2;
- }
+ cfreq2 = chan->dfs_ch_mhz_freq_seg2;
+
/* Check if primary is DFS then search */
if (WLAN_IS_CHAN_DFS(chan))
primary_found =
- dfs_is_precac_done_on_ht20_40_80_chan_for_freq(dfs,
- cfreq1);
+ dfs_is_precac_done_on_ht20_40_80_160_165_chan_for_freq(
+ dfs,
+ cfreq1);
else
primary_found = 1;
/* Check if secondary DFS then search */
if (WLAN_IS_CHAN_DFS_CFREQ2(chan) && primary_found) {
ret_val =
- dfs_is_precac_done_on_ht20_40_80_chan_for_freq(dfs,
- cfreq2);
+ dfs_is_precac_done_on_ht20_40_80_160_165_chan_for_freq(
+ dfs,
+ cfreq2);
} else {
if (primary_found)
@@ -705,16 +712,29 @@
bool dfs_is_precac_done(struct wlan_dfs *dfs, struct dfs_channel *chan)
{
bool ret_val = 0;
- uint16_t cfreq = chan->dfs_ch_mhz_freq_seg1;
+ uint16_t cfreq;
+
+ if (WLAN_IS_CHAN_MODE_160(chan))
+ cfreq = chan->dfs_ch_mhz_freq_seg2;
+ else if (WLAN_IS_CHAN_MODE_165(dfs, chan))
+ cfreq = RESTRICTED_80P80_CHAN_CENTER_FREQ;
+ else
+ /* Center frequency of 20/40/80MHz is given
+ * by dfs_ch_mhz_freq_seg1.
+ */
+ cfreq = chan->dfs_ch_mhz_freq_seg1;
if (WLAN_IS_CHAN_MODE_20(chan) ||
WLAN_IS_CHAN_MODE_40(chan) ||
- WLAN_IS_CHAN_MODE_80(chan)) {
- ret_val = dfs_is_precac_done_on_ht20_40_80_chan_for_freq(dfs,
- cfreq);
- } else if (WLAN_IS_CHAN_MODE_80_80(chan) ||
- WLAN_IS_CHAN_MODE_160(chan)) {
- ret_val = dfs_is_precac_done_on_ht8080_ht160_chan(dfs, chan);
+ WLAN_IS_CHAN_MODE_80(chan) ||
+ WLAN_IS_CHAN_MODE_160(chan) ||
+ WLAN_IS_CHAN_MODE_165(dfs, chan)) {
+ ret_val =
+ dfs_is_precac_done_on_ht20_40_80_160_165_chan_for_freq(
+ dfs,
+ cfreq);
+ } else if (WLAN_IS_CHAN_MODE_80_80(chan)) {
+ ret_val = dfs_is_precac_done_on_ht8080_chan(dfs, chan);
}
dfs_debug(dfs, WLAN_DEBUG_DFS, "precac_done_status = %d", ret_val);
@@ -765,7 +785,6 @@
* @dfs: Pointer to wlan_dfs.
*/
#ifdef CONFIG_CHAN_FREQ_API
-#define DFS_160MHZ_SECSEG_CHAN_OFFSET 40
void dfs_prepare_agile_precac_chan(struct wlan_dfs *dfs)
{
struct wlan_objmgr_psoc *psoc;
@@ -848,7 +867,6 @@
}
#else
#ifdef CONFIG_CHAN_NUM_API
-#define DFS_160MHZ_SECSEG_CHAN_OFFSET 8
void dfs_prepare_agile_precac_chan(struct wlan_dfs *dfs)
{
struct wlan_objmgr_psoc *psoc;
@@ -1520,8 +1538,8 @@
TAILQ_FOREACH_SAFE(pcac_entry, &dfs->dfs_precac_list,
pe_list, tmp_precac_entry) {
if (IS_WITHIN_RANGE(chan_freq,
- pcac_entry->vht80_ch_freq,
- VHT80_FREQ_OFFSET)) {
+ pcac_entry->center_ch_freq,
+ VHT160_FREQ_OFFSET)) {
dfs_unmark_tree_node_as_nol_for_freq(dfs,
pcac_entry,
chan_freq);
@@ -3705,6 +3723,19 @@
first_subch = precac_freq - DFS_5GHZ_2ND_CHAN_FREQ_OFFSET;
last_subch = precac_freq + DFS_5GHZ_2ND_CHAN_FREQ_OFFSET;
break;
+ case CH_WIDTH_160MHZ:
+ first_subch = precac_freq - DFS_5GHZ_4TH_CHAN_FREQ_OFFSET;
+ last_subch = precac_freq + DFS_5GHZ_4TH_CHAN_FREQ_OFFSET;
+ break;
+ case CH_WIDTH_80P80MHZ:
+ /* The restricted 80P80MHz channel or the 165MHz channel
+ * does not include any of the weather radar channels.
+ * Even though other 80P80 channels might include the weather
+ * radar channels, it is not currently possible for Agile
+ * detector to operate in a 80P80MHz channel except in the
+ * restricted 80P80MHz channel.
+ */
+ return false;
default:
dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,
"Precac channel width invalid!");
diff --git a/wmi/inc/wmi_unified_ap_api.h b/wmi/inc/wmi_unified_ap_api.h
index a39dd7e..e957517 100644
--- a/wmi/inc/wmi_unified_ap_api.h
+++ b/wmi/inc/wmi_unified_ap_api.h
@@ -639,7 +639,7 @@
*/
QDF_STATUS wmi_extract_vdev_delete_resp(
wmi_unified_t wmi_handle, void *evt_buf,
- struct wmi_host_vdev_delete_resp *delele_rsp);
+ struct vdev_delete_response *delele_rsp);
/**
* wmi_extract_vdev_stopped_param() - extract vdev stop param from event
diff --git a/wmi/src/wmi_unified_non_tlv.c b/wmi/src/wmi_unified_non_tlv.c
index 94ebb69..d85ac8d 100644
--- a/wmi/src/wmi_unified_non_tlv.c
+++ b/wmi/src/wmi_unified_non_tlv.c
@@ -712,7 +712,6 @@
/* length depends on ieee key length */
int len = sizeof(wmi_vdev_install_key_cmd) + param->key_len;
uint8_t wmi_cipher_type;
- int i;
wmi_cipher_type = param->key_cipher;
@@ -755,7 +754,7 @@
#ifdef ATH_SUPPORT_WAPI
if (wmi_cipher_type == WMI_CIPHER_WAPI) {
- int j;
+ int i, j;
/* For WAPI, TSC and RSC has to be initialized with predefined
* value.Here, Indicating TSC, RSC to target as part of set
* key message
@@ -2027,13 +2026,15 @@
cmd = (WMI_DBGLOG_CFG_CMD *)(wmi_buf_data(osbuf));
- WMI_LOGD("wmi_dbg_cfg_send: mod[0]%08x dbgcfg%08x cfgvalid[0] %08x cfgvalid[1] %08x",
+ WMI_LOGD("wmi_dbg_cfg_send: mod[0]%08x dbgcfg%08x cfgvalid[0] %08x cfgvalid[1] %08x \
+ cfgvalid[2] %08x",
dbglog_param->module_id_bitmap[0],
dbglog_param->val, dbglog_param->cfgvalid[0],
- dbglog_param->cfgvalid[1]);
+ dbglog_param->cfgvalid[1], dbglog_param->cfgvalid[2]);
cmd->config.cfgvalid[0] = dbglog_param->cfgvalid[0];
cmd->config.cfgvalid[1] = dbglog_param->cfgvalid[1];
+ cmd->config.cfgvalid[2] = dbglog_param->cfgvalid[2];
qdf_mem_copy(&cmd->config.config.mod_id[0],
dbglog_param->module_id_bitmap,
sizeof(cmd->config.config.mod_id));
@@ -3424,7 +3425,7 @@
WMI_LOGE("%s:wmi_buf_alloc failed", __func__);
return QDF_STATUS_E_FAILURE;
}
- if (!wmi_unified_cmd_send(wmi_handle, buf, len,
+ if (wmi_unified_cmd_send(wmi_handle, buf, len,
WMI_PDEV_PKTLOG_DISABLE_CMDID)) {
wmi_buf_free(buf);
return QDF_STATUS_E_FAILURE;
@@ -7469,7 +7470,7 @@
static QDF_STATUS extract_vdev_peer_delete_all_response_event_non_tlv(
wmi_unified_t wmi_hdl,
void *evt_buf,
- struct wmi_host_vdev_peer_delete_all_response_event *param)
+ struct peer_delete_all_response *param)
{
wmi_vdev_delete_all_peer_resp_event *ev;