qcacld-3.0: cdp: Converge cdp_cmn_ops
Currently cdp ops are given pdev/vdev/peer handle as its arguments which is directly accessed in those APIs. This can cause a race-condition in access of the respective handles if it has been deleted in parallel. Hence as a part of cdp convergence, pass only the pdev_id or vdev_id or peer mac address, which will be used to get the respective handles, and hence avoiding the unwanted access of the handles if it has been deleted. - txrx_data_tx_cb_set - txrx_mgmt_tx_cb_set - txrx_mgmt_send_ext - txrx_pdev_attach_target - txrx_pdev_detach - txrx_vdev_attach - txrx_vdev_register - txrx_vdev_detach - txrx_peer_create - txrx_peer_delete - txrx_peer_delete_sync - txrx_fw_stats_get - txrx_get_vdev_from_vdev_id - txrx_pdev_set_ctrl_pdev - txrx_pdev_attach - txrx_get_vdev_mac_addr - txrx_pdev_post_attach - txrx_pdev_pre_detach - txrx_get_ctrl_pdev_from_vdev - txrx_get_mon_vdev_from_pdev Change-Id: Ib8b0b1edd63e7c3f8813b11ca26b50ec121fe255 CRs-Fixed: 2541459
This commit is contained in:

committed by
nshrivas

parent
f1cab52a92
commit
0ac759fc1c
@@ -74,7 +74,6 @@ static QDF_STATUS ocb_set_chan_info(void *dp_soc,
|
||||
uint32_t vdev_id,
|
||||
struct ocb_config *config)
|
||||
{
|
||||
struct cdp_vdev *dp_vdev;
|
||||
struct ol_txrx_ocb_set_chan ocb_set_chan;
|
||||
struct ol_txrx_ocb_chan_info *ocb_channel_info;
|
||||
|
||||
@@ -83,12 +82,6 @@ static QDF_STATUS ocb_set_chan_info(void *dp_soc,
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
dp_vdev = cdp_get_vdev_from_vdev_id(dp_soc, dp_pdev, vdev_id);
|
||||
if (!dp_vdev) {
|
||||
ocb_err("DP vdev handle is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
ocb_set_chan.ocb_channel_count = config->channel_count;
|
||||
|
||||
/* release old settings */
|
||||
|
@@ -250,24 +250,6 @@ pmo_register_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS
|
||||
pmo_unregister_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* pmo_register_get_vdev_dp_handle(): API to register get vdev datapath handle
|
||||
* @psoc: objmgr psoc handle
|
||||
* @handler: get vdev datapath handle callback
|
||||
*
|
||||
* Return QDF_STATUS status - in case of success else return error
|
||||
*/
|
||||
QDF_STATUS pmo_register_get_vdev_dp_handle(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_get_vdev_dp_handle handler);
|
||||
|
||||
/**
|
||||
* pmo_unregister_get_vdev_dp_handle(): API to unregister get vdev dp handle
|
||||
* @psoc: objmgr psoc handle
|
||||
*
|
||||
* Return QDF_STATUS status - in case of success else return error
|
||||
*/
|
||||
QDF_STATUS pmo_unregister_get_vdev_dp_handle(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* pmo_register_is_device_in_low_pwr_mode(): API to get register device power
|
||||
* save check notifier.
|
||||
@@ -401,19 +383,6 @@ pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static inline QDF_STATUS
|
||||
pmo_register_get_vdev_dp_handle(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_get_vdev_dp_handle handler)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static inline QDF_STATUS
|
||||
QDF_STATUS pmo_unregister_get_vdev_dp_handle(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static inline QDF_STATUS
|
||||
pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_is_device_in_low_pwr_mode handler)
|
||||
|
@@ -740,47 +740,6 @@ pmo_unregister_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS pmo_register_get_vdev_dp_handle(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_get_vdev_dp_handle handler)
|
||||
{
|
||||
struct pmo_psoc_priv_obj *psoc_ctx;
|
||||
|
||||
if (!psoc) {
|
||||
QDF_BUG(psoc);
|
||||
pmo_err("psoc is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
if (!handler) {
|
||||
QDF_BUG(handler);
|
||||
pmo_err("pmo_get_vdev_dp_handle is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
pmo_psoc_with_ctx(psoc, psoc_ctx) {
|
||||
psoc_ctx->get_vdev_dp_handle = handler;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS pmo_unregister_get_vdev_dp_handle(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct pmo_psoc_priv_obj *psoc_ctx;
|
||||
|
||||
if (!psoc) {
|
||||
QDF_BUG(psoc);
|
||||
pmo_err("psoc is null");
|
||||
return QDF_STATUS_E_NULL_VALUE;
|
||||
}
|
||||
|
||||
pmo_psoc_with_ctx(psoc, psoc_ctx) {
|
||||
psoc_ctx->get_vdev_dp_handle = NULL;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS pmo_register_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc,
|
||||
pmo_get_dtim_period handler)
|
||||
{
|
||||
|
@@ -327,8 +327,6 @@ QDF_STATUS cds_dp_close(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
void *cds_get_context(QDF_MODULE_ID module_id);
|
||||
|
||||
uint8_t cds_get_datapath_handles(void **soc, struct cdp_pdev **pdev,
|
||||
struct cdp_vdev **vdev, uint8_t sessionId);
|
||||
void *cds_get_global_context(void);
|
||||
|
||||
QDF_STATUS cds_alloc_context(QDF_MODULE_ID module_id, void **module_context,
|
||||
|
@@ -146,39 +146,6 @@ static void cds_recovery_work_deinit(void)
|
||||
}
|
||||
}
|
||||
|
||||
/** cds_get_datapath_handles - Initialize pdev, vdev and soc
|
||||
* @soc - soc handle
|
||||
* @vdev - virtual handle
|
||||
* @pdev - physical handle
|
||||
*/
|
||||
uint8_t cds_get_datapath_handles(void **soc, struct cdp_pdev **pdev,
|
||||
struct cdp_vdev **vdev, uint8_t sessionId)
|
||||
{
|
||||
|
||||
(*soc) = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
|
||||
if (!(*soc)) {
|
||||
cds_err("soc handle is invalid");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
(*pdev) = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
|
||||
if (!(*pdev)) {
|
||||
cds_err("pdev handle is invalid");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
(*vdev) = cdp_get_vdev_from_vdev_id((*soc), (*pdev),
|
||||
sessionId);
|
||||
|
||||
if (!(*vdev)) {
|
||||
cds_err("vdev handle is invalid");
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool cds_is_drv_connected(void)
|
||||
{
|
||||
int ret;
|
||||
@@ -705,12 +672,12 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
TARGET_TYPE_QCA6390 == hdd_ctx->target_type ||
|
||||
TARGET_TYPE_QCA6490 == hdd_ctx->target_type)
|
||||
gp_cds_context->dp_soc = cdp_soc_attach(LITHIUM_DP,
|
||||
gp_cds_context->hif_context, psoc,
|
||||
gp_cds_context->hif_context, htcInfo.target_psoc,
|
||||
gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
|
||||
&dp_ol_if_ops);
|
||||
else
|
||||
gp_cds_context->dp_soc = cdp_soc_attach(MOB_DRV_LEGACY_DP,
|
||||
gp_cds_context->hif_context, psoc,
|
||||
gp_cds_context->hif_context, htcInfo.target_psoc,
|
||||
gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
|
||||
&dp_ol_if_ops);
|
||||
|
||||
@@ -849,7 +816,7 @@ intr_close:
|
||||
|
||||
pdev_detach:
|
||||
cdp_pdev_detach(gp_cds_context->dp_soc,
|
||||
cds_get_context(QDF_MODULE_ID_TXRX), false);
|
||||
OL_TXRX_PDEV_ID, false);
|
||||
|
||||
close:
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
@@ -917,7 +884,7 @@ QDF_STATUS cds_pre_enable(void)
|
||||
goto stop_wmi;
|
||||
}
|
||||
|
||||
errno = cdp_pdev_post_attach(soc, gp_cds_context->pdev_txrx_ctx);
|
||||
errno = cdp_pdev_post_attach(soc, OL_TXRX_PDEV_ID);
|
||||
if (errno) {
|
||||
cds_err("Failed to attach pdev");
|
||||
status = qdf_status_from_os_return(errno);
|
||||
@@ -998,7 +965,7 @@ QDF_STATUS cds_enable(struct wlan_objmgr_psoc *psoc)
|
||||
}
|
||||
|
||||
errno = cdp_pdev_attach_target(cds_get_context(QDF_MODULE_ID_SOC),
|
||||
cds_get_context(QDF_MODULE_ID_TXRX));
|
||||
OL_TXRX_PDEV_ID);
|
||||
if (errno) {
|
||||
cds_err("Failed to attach pdev target; errno:%d", errno);
|
||||
goto err_soc_target_detach;
|
||||
@@ -1121,7 +1088,6 @@ QDF_STATUS cds_post_disable(void)
|
||||
{
|
||||
tp_wma_handle wma_handle;
|
||||
struct hif_opaque_softc *hif_ctx;
|
||||
struct cdp_pdev *txrx_pdev;
|
||||
struct scheduler_ctx *sched_ctx;
|
||||
QDF_STATUS qdf_status;
|
||||
|
||||
@@ -1137,12 +1103,6 @@ QDF_STATUS cds_post_disable(void)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
if (!txrx_pdev) {
|
||||
cds_err("Failed to get txrx pdev!");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
/* flush any unprocessed scheduler messages */
|
||||
sched_ctx = scheduler_get_context();
|
||||
if (sched_ctx)
|
||||
@@ -1175,7 +1135,7 @@ QDF_STATUS cds_post_disable(void)
|
||||
}
|
||||
|
||||
cdp_pdev_pre_detach(cds_get_context(QDF_MODULE_ID_SOC),
|
||||
(struct cdp_pdev *)txrx_pdev, 1);
|
||||
OL_TXRX_PDEV_ID, 1);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
@@ -1278,8 +1238,7 @@ QDF_STATUS cds_dp_close(struct wlan_objmgr_psoc *psoc)
|
||||
|
||||
dp_txrx_deinit(cds_get_context(QDF_MODULE_ID_SOC));
|
||||
|
||||
cdp_pdev_detach(cds_get_context(QDF_MODULE_ID_SOC),
|
||||
(struct cdp_pdev *)ctx, 1);
|
||||
cdp_pdev_detach(cds_get_context(QDF_MODULE_ID_SOC), OL_TXRX_PDEV_ID, 1);
|
||||
|
||||
cds_set_context(QDF_MODULE_ID_TXRX, NULL);
|
||||
ucfg_pmo_psoc_set_txrx_pdev_id(psoc, OL_TXRX_INVALID_PDEV_ID);
|
||||
|
@@ -54,11 +54,12 @@
|
||||
* to the target has to be done in the separate pdev_attach_target call
|
||||
* that is invoked after HTC setup is complete.
|
||||
*
|
||||
* @param pdev - txrx_pdev handle
|
||||
* @param soc - datapath soc handle
|
||||
* @param pdev_id - physical device instance id
|
||||
* @return 0 for success or error code
|
||||
*/
|
||||
int
|
||||
ol_txrx_pdev_post_attach(struct cdp_pdev *pdev);
|
||||
ol_txrx_pdev_post_attach(struct cdp_soc_t *soc, uint8_t pdev_id);
|
||||
|
||||
/**
|
||||
* @brief Parameter type to be input to ol_txrx_peer_update
|
||||
@@ -280,14 +281,15 @@ void ol_txrx_tx_sync(ol_txrx_pdev_handle data_pdev, uint8_t sync_cnt);
|
||||
* when transmission completes. Rather, these specially-marked frames
|
||||
* are provided to the callback registered with this function.
|
||||
*
|
||||
* @param data_vdev - which vdev the callback is being registered with
|
||||
* @param soc - datapath soc handle
|
||||
* @param vdev_id - id of which vdev the callback is being registered with
|
||||
* (Currently the callback is stored in the pdev rather than the vdev.)
|
||||
* @param callback - the function to call when tx frames marked as "no free"
|
||||
* are done being transmitted
|
||||
* @param ctxt - the context argument provided to the callback function
|
||||
*/
|
||||
void
|
||||
ol_txrx_data_tx_cb_set(struct cdp_vdev *data_vdev,
|
||||
ol_txrx_data_tx_cb_set(struct cdp_soc_t *soc, uint8_t vdev_id,
|
||||
ol_txrx_data_tx_cb callback, void *ctxt);
|
||||
|
||||
/**
|
||||
|
@@ -129,41 +129,59 @@ qdf_nbuf_t ol_tx_send_ipa_data_frame(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
#endif
|
||||
|
||||
void
|
||||
ol_txrx_data_tx_cb_set(struct cdp_vdev *pvdev,
|
||||
ol_txrx_data_tx_cb_set(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
ol_txrx_data_tx_cb callback, void *ctxt)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev = (struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_pdev_t *pdev = vdev->pdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
struct ol_txrx_pdev_t *pdev;
|
||||
|
||||
if (!vdev || !vdev->pdev)
|
||||
return;
|
||||
|
||||
pdev = vdev->pdev;
|
||||
pdev->tx_data_callback.func = callback;
|
||||
pdev->tx_data_callback.ctxt = ctxt;
|
||||
}
|
||||
|
||||
void
|
||||
ol_txrx_mgmt_tx_cb_set(struct cdp_pdev *ppdev, uint8_t type,
|
||||
QDF_STATUS
|
||||
ol_txrx_mgmt_tx_cb_set(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, uint8_t type,
|
||||
ol_txrx_mgmt_tx_cb download_cb,
|
||||
ol_txrx_mgmt_tx_cb ota_ack_cb, void *ctxt)
|
||||
{
|
||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
struct ol_txrx_pdev_t *pdev = ol_txrx_get_pdev_from_pdev_id(soc,
|
||||
pdev_id);
|
||||
|
||||
if (!pdev)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
TXRX_ASSERT1(type < OL_TXRX_MGMT_NUM_TYPES);
|
||||
pdev->tx_mgmt_cb.download_cb = download_cb;
|
||||
pdev->tx_mgmt_cb.ota_ack_cb = ota_ack_cb;
|
||||
pdev->tx_mgmt_cb.ctxt = ctxt;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
int
|
||||
ol_txrx_mgmt_send_ext(struct cdp_vdev *pvdev,
|
||||
qdf_nbuf_t tx_mgmt_frm,
|
||||
uint8_t type, uint8_t use_6mbps, uint16_t chanfreq)
|
||||
ol_txrx_mgmt_send_ext(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
qdf_nbuf_t tx_mgmt_frm, uint8_t type,
|
||||
uint8_t use_6mbps, uint16_t chanfreq)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev =
|
||||
(struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_pdev_t *pdev = vdev->pdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
struct ol_txrx_pdev_t *pdev;
|
||||
struct ol_tx_desc_t *tx_desc;
|
||||
struct ol_txrx_msdu_info_t tx_msdu_info;
|
||||
int result = 0;
|
||||
|
||||
if (!vdev || !vdev->pdev)
|
||||
return QDF_STATUS_E_FAULT;
|
||||
|
||||
pdev = vdev->pdev;
|
||||
tx_msdu_info.tso_info.is_tso = 0;
|
||||
|
||||
tx_msdu_info.htt.action.use_6mbps = use_6mbps;
|
||||
|
@@ -208,7 +208,8 @@ void ol_txrx_mgmt_tx_complete(void *ctxt, qdf_nbuf_t netbuf, int err);
|
||||
/**
|
||||
* ol_txrx_mgmt_tx_cb_set() - Store a callback for delivery
|
||||
* notifications for management frames.
|
||||
* @ppdev: the data physical device object
|
||||
* @soc: Datapath soc handle
|
||||
* @pdev_id: Physical device instance id
|
||||
* @type: the type of mgmt frame the callback is used for
|
||||
* @download_cb: the callback for notification of delivery to the target
|
||||
* @ota_ack_cb: the callback for notification of delivery to the peer
|
||||
@@ -224,14 +225,15 @@ void ol_txrx_mgmt_tx_complete(void *ctxt, qdf_nbuf_t netbuf, int err);
|
||||
* This function is used by the control SW to store a callback pointer
|
||||
* for a given type of management frame.
|
||||
*/
|
||||
void
|
||||
ol_txrx_mgmt_tx_cb_set(struct cdp_pdev *ppdev, uint8_t type,
|
||||
QDF_STATUS
|
||||
ol_txrx_mgmt_tx_cb_set(struct cdp_soc_t *soc, uint8_t pdev_id, uint8_t type,
|
||||
ol_txrx_mgmt_tx_cb download_cb,
|
||||
ol_txrx_mgmt_tx_cb ota_ack_cb, void *ctxt);
|
||||
|
||||
/**
|
||||
* ol_txrx_mgmt_send_ext() - Transmit a management frame
|
||||
* @pvdev: virtual device transmitting the frame
|
||||
* @soc: Datapath soc handle
|
||||
* @vdev_id: virtual interface id
|
||||
* @tx_mgmt_frm: management frame to transmit
|
||||
* @type: the type of management frame (determines what callback to use)
|
||||
* @use_6mbps: specify whether management frame to transmit should
|
||||
@@ -247,7 +249,7 @@ ol_txrx_mgmt_tx_cb_set(struct cdp_pdev *ppdev, uint8_t type,
|
||||
* 1 - the frame was not accepted
|
||||
*/
|
||||
int
|
||||
ol_txrx_mgmt_send_ext(struct cdp_vdev *pvdev,
|
||||
ol_txrx_mgmt_send_ext(struct cdp_soc_t *soc, uint8_t vdev_id,
|
||||
qdf_nbuf_t tx_mgmt_frm,
|
||||
uint8_t type, uint8_t use_6mbps, uint16_t chanfreq);
|
||||
|
||||
|
@@ -673,6 +673,9 @@ void ol_txrx_vdev_flush(struct cdp_soc_t *soc_hdl, uint8_t vdev_id)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!vdev)
|
||||
return;
|
||||
|
||||
ol_tx_queue_vdev_flush(vdev->pdev, vdev);
|
||||
}
|
||||
|
||||
|
@@ -76,6 +76,7 @@
|
||||
#include "epping_main.h"
|
||||
#include <a_types.h>
|
||||
#include <cdp_txrx_handle.h>
|
||||
#include <cdp_txrx_cmn_reg.h>
|
||||
#include "wlan_qct_sys.h"
|
||||
|
||||
#include <htt_internal.h>
|
||||
@@ -107,8 +108,8 @@ enum dpt_set_param_debugfs {
|
||||
QDF_STATUS ol_txrx_peer_state_update(struct cdp_pdev *pdev,
|
||||
uint8_t *peer_mac,
|
||||
enum ol_txrx_peer_state state);
|
||||
static void ol_vdev_rx_set_intrabss_fwd(struct cdp_vdev *vdev,
|
||||
bool val);
|
||||
static void ol_vdev_rx_set_intrabss_fwd(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t vdev_id, bool val);
|
||||
int ol_txrx_get_tx_pending(struct cdp_pdev *pdev_handle);
|
||||
extern void
|
||||
ol_txrx_set_wmm_param(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
||||
@@ -673,7 +674,7 @@ static inline void ol_txrx_debugfs_exit(ol_txrx_pdev_handle pdev)
|
||||
|
||||
/**
|
||||
* ol_txrx_pdev_attach() - allocate txrx pdev
|
||||
* @soc: datapath soc handle
|
||||
* @soc_hdl: datapath soc handle
|
||||
* @htc_pdev: HTC pdev
|
||||
* @osdev: os dev
|
||||
* @pdev_id: pdev identifier for pdev attach
|
||||
@@ -898,26 +899,28 @@ static inline void ol_txrx_pdev_set_threshold(struct ol_txrx_pdev_t *pdev)
|
||||
|
||||
/**
|
||||
* ol_txrx_pdev_post_attach() - attach txrx pdev
|
||||
* @pdev: txrx pdev
|
||||
* @soc_hdl: datapath soc handle
|
||||
* @pdev_id: physical device instance id
|
||||
*
|
||||
* Return: 0 for success
|
||||
*/
|
||||
int
|
||||
ol_txrx_pdev_post_attach(struct cdp_pdev *ppdev)
|
||||
ol_txrx_pdev_post_attach(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
|
||||
{
|
||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
||||
uint16_t i;
|
||||
uint16_t fail_idx = 0;
|
||||
int ret = 0;
|
||||
uint16_t desc_pool_size;
|
||||
struct hif_opaque_softc *osc = cds_get_context(QDF_MODULE_ID_HIF);
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_pdev_handle pdev = ol_txrx_get_pdev_from_pdev_id(soc, pdev_id);
|
||||
|
||||
uint16_t desc_element_size = sizeof(union ol_tx_desc_list_elem_t);
|
||||
union ol_tx_desc_list_elem_t *c_element;
|
||||
unsigned int sig_bit;
|
||||
uint16_t desc_per_page;
|
||||
|
||||
if (!osc) {
|
||||
if (!osc || !pdev) {
|
||||
ret = -EINVAL;
|
||||
goto ol_attach_fail;
|
||||
}
|
||||
@@ -1382,7 +1385,8 @@ ol_attach_fail:
|
||||
/**
|
||||
* ol_txrx_pdev_attach_target() - send target configuration
|
||||
*
|
||||
* @pdev - the physical device being initialized
|
||||
* @soc_hdl - data path soc handle
|
||||
* @pdev_id - device instance id
|
||||
*
|
||||
* The majority of the data SW setup are done by the pdev_attach
|
||||
* functions, but this function completes the data SW setup by
|
||||
@@ -1390,9 +1394,14 @@ ol_attach_fail:
|
||||
*
|
||||
* Return: 0 - success 1 - failure
|
||||
*/
|
||||
static int ol_txrx_pdev_attach_target(struct cdp_pdev *ppdev)
|
||||
static int ol_txrx_pdev_attach_target(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id)
|
||||
{
|
||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_pdev_handle pdev = ol_txrx_get_pdev_from_pdev_id(soc, pdev_id);
|
||||
|
||||
if (!pdev)
|
||||
return QDF_STATUS_E_FAULT;
|
||||
|
||||
return htt_attach_target(pdev->htt_pdev) == QDF_STATUS_SUCCESS ? 0:1;
|
||||
}
|
||||
@@ -1443,7 +1452,8 @@ static void ol_tx_free_descs_inuse(ol_txrx_pdev_handle pdev)
|
||||
|
||||
/**
|
||||
* ol_txrx_pdev_pre_detach() - detach the data SW state
|
||||
* @pdev - the data physical device object being removed
|
||||
* @soc_hdl - datapath soc handle
|
||||
* @pdev_id - the data physical device id being removed
|
||||
* @force - delete the pdev (and its vdevs and peers) even if
|
||||
* there are outstanding references by the target to the vdevs
|
||||
* and peers within the pdev
|
||||
@@ -1451,11 +1461,14 @@ static void ol_tx_free_descs_inuse(ol_txrx_pdev_handle pdev)
|
||||
* This function is used when the WLAN driver is being removed to
|
||||
* detach the host data component within the driver.
|
||||
*
|
||||
* Return: None
|
||||
* Return: none
|
||||
*/
|
||||
static void ol_txrx_pdev_pre_detach(struct cdp_pdev *ppdev, int force)
|
||||
static void ol_txrx_pdev_pre_detach(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
||||
int force)
|
||||
{
|
||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
struct ol_txrx_pdev_t *pdev = ol_txrx_get_pdev_from_pdev_id(soc,
|
||||
pdev_id);
|
||||
|
||||
/* preconditions */
|
||||
TXRX_ASSERT2(pdev);
|
||||
@@ -1547,11 +1560,14 @@ static void ol_txrx_pdev_pre_detach(struct cdp_pdev *ppdev, int force)
|
||||
#ifdef QCA_COMPUTE_TX_DELAY
|
||||
qdf_spinlock_destroy(&pdev->tx_delay.mutex);
|
||||
#endif
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_pdev_detach() - delete the data SW state
|
||||
* @ppdev - the data physical device object being removed
|
||||
* @soc_hdl - data path soc handle
|
||||
* @pdev_id - device instance id
|
||||
* @force - delete the pdev (and its vdevs and peers) even if
|
||||
* there are outstanding references by the target to the vdevs
|
||||
* and peers within the pdev
|
||||
@@ -1561,24 +1577,26 @@ static void ol_txrx_pdev_pre_detach(struct cdp_pdev *ppdev, int force)
|
||||
* All virtual devices within the physical device need to be deleted
|
||||
* (ol_txrx_vdev_detach) before the physical device itself is deleted.
|
||||
*
|
||||
* Return: None
|
||||
* Return: Success or Failure
|
||||
*/
|
||||
static void ol_txrx_pdev_detach(struct cdp_pdev *ppdev, int force)
|
||||
static QDF_STATUS ol_txrx_pdev_detach(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
||||
int force)
|
||||
{
|
||||
struct ol_txrx_soc_t *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
struct ol_txrx_pdev_t *pdev = ol_txrx_get_pdev_from_pdev_id(soc,
|
||||
pdev_id);
|
||||
struct ol_txrx_stats_req_internal *req, *temp_req;
|
||||
int i = 0;
|
||||
|
||||
if (!soc) {
|
||||
ol_txrx_err("soc is NULL");
|
||||
return;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/*checking to ensure txrx pdev structure is not NULL */
|
||||
if (!pdev) {
|
||||
ol_txrx_err("pdev is NULL");
|
||||
return;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
qdf_spin_lock_bh(&pdev->req_list_spinlock);
|
||||
@@ -1625,6 +1643,8 @@ static void ol_txrx_pdev_detach(struct cdp_pdev *ppdev, int force)
|
||||
|
||||
soc->pdev_list[pdev->id] = NULL;
|
||||
qdf_mem_free(pdev);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#if defined(QCA_HL_NETDEV_FLOW_CONTROL)
|
||||
@@ -1657,7 +1677,8 @@ ol_txrx_vdev_per_vdev_tx_desc_init(struct ol_txrx_vdev_t *vdev)
|
||||
* ol_txrx_vdev_attach - Allocate and initialize the data object
|
||||
* for a new virtual device.
|
||||
*
|
||||
* @data_pdev - the physical device the virtual device belongs to
|
||||
* @@soc_hdl - data path soc handle
|
||||
* @pdev_id - physical device instance id
|
||||
* @vdev_mac_addr - the MAC address of the virtual device
|
||||
* @vdev_id - the ID used to identify the virtual device to the target
|
||||
* @op_mode - whether this virtual device is operating as an AP,
|
||||
@@ -1667,13 +1688,15 @@ ol_txrx_vdev_per_vdev_tx_desc_init(struct ol_txrx_vdev_t *vdev)
|
||||
* Return: success: handle to new data vdev object, failure: NULL
|
||||
*/
|
||||
static struct cdp_vdev *
|
||||
ol_txrx_vdev_attach(struct cdp_pdev *ppdev,
|
||||
ol_txrx_vdev_attach(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
||||
uint8_t *vdev_mac_addr,
|
||||
uint8_t vdev_id, enum wlan_op_mode op_mode,
|
||||
enum wlan_op_subtype subtype)
|
||||
{
|
||||
struct ol_txrx_soc_t *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
struct ol_txrx_pdev_t *pdev = ol_txrx_get_pdev_from_pdev_id(soc,
|
||||
pdev_id);
|
||||
|
||||
struct ol_txrx_vdev_t *vdev;
|
||||
QDF_STATUS qdf_status;
|
||||
|
||||
@@ -1711,8 +1734,7 @@ ol_txrx_vdev_attach(struct cdp_pdev *ppdev,
|
||||
TAILQ_INIT(&vdev->peer_list);
|
||||
vdev->last_real_peer = NULL;
|
||||
|
||||
ol_txrx_hl_tdls_flag_reset(ol_txrx_soc_t_to_cdp_soc_t(soc),
|
||||
vdev_id, false);
|
||||
ol_txrx_hl_tdls_flag_reset(soc_hdl, vdev_id, false);
|
||||
|
||||
#ifdef QCA_IBSS_SUPPORT
|
||||
vdev->ibss_peer_num = 0;
|
||||
@@ -1787,7 +1809,8 @@ ol_txrx_vdev_attach(struct cdp_pdev *ppdev,
|
||||
* ol_txrx_vdev_register - Link a vdev's data object with the
|
||||
* matching OS shim vdev object.
|
||||
*
|
||||
* @pvdev: the virtual device's data object
|
||||
* @soc_hdl: datapath soc handle
|
||||
* @vdev_id: the virtual device's id
|
||||
* @osif_vdev: the virtual device's OS shim object
|
||||
* @txrx_ops: (pointers to)functions used for tx and rx data xfer
|
||||
*
|
||||
@@ -1802,15 +1825,19 @@ ol_txrx_vdev_attach(struct cdp_pdev *ppdev,
|
||||
* vdev objects, so the data SW can use the OS shim vdev handle
|
||||
* when passing rx data received by a vdev up to the OS shim.
|
||||
*/
|
||||
static void ol_txrx_vdev_register(struct cdp_vdev *pvdev, void *osif_vdev,
|
||||
static QDF_STATUS ol_txrx_vdev_register(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t vdev_id,
|
||||
ol_osif_vdev_handle osif_vdev,
|
||||
struct ol_txrx_ops *txrx_ops)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev = (struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
|
||||
if (qdf_unlikely(!vdev) || qdf_unlikely(!txrx_ops)) {
|
||||
qdf_print("vdev/txrx_ops is NULL!");
|
||||
qdf_assert(0);
|
||||
return;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev->osif_dev = osif_vdev;
|
||||
@@ -1818,6 +1845,8 @@ static void ol_txrx_vdev_register(struct cdp_vdev *pvdev, void *osif_vdev,
|
||||
vdev->stats_rx = txrx_ops->rx.stats_rx;
|
||||
vdev->tx_comp = txrx_ops->tx.tx_comp;
|
||||
txrx_ops->tx.tx = ol_tx_data;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void ol_txrx_set_safemode(ol_txrx_vdev_handle vdev, uint32_t val)
|
||||
@@ -1903,7 +1932,8 @@ ol_txrx_tx_desc_reset_vdev(ol_txrx_vdev_handle vdev)
|
||||
/**
|
||||
* ol_txrx_vdev_detach - Deallocate the specified data virtual
|
||||
* device object.
|
||||
* @data_vdev: data object for the virtual device in question
|
||||
* @soc_hdl - data path soc handle
|
||||
* @vdev_id: vdev id
|
||||
* @callback: function to call (if non-NULL) once the vdev has
|
||||
* been wholly deleted
|
||||
* @callback_context: context to provide in the callback
|
||||
@@ -1923,13 +1953,18 @@ ol_txrx_tx_desc_reset_vdev(ol_txrx_vdev_handle vdev)
|
||||
* vdev_detach call, or if it's deferred until all in-progress peer
|
||||
* deletions have completed.
|
||||
*/
|
||||
static void
|
||||
ol_txrx_vdev_detach(struct cdp_vdev *pvdev,
|
||||
static QDF_STATUS
|
||||
ol_txrx_vdev_detach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
ol_txrx_vdev_delete_cb callback, void *context)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev = (struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
struct ol_txrx_pdev_t *pdev;
|
||||
|
||||
if (qdf_unlikely(!vdev))
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
/* preconditions */
|
||||
TXRX_ASSERT2(vdev);
|
||||
pdev = vdev->pdev;
|
||||
@@ -1988,7 +2023,7 @@ ol_txrx_vdev_detach(struct cdp_vdev *pvdev,
|
||||
vdev->delete.callback = callback;
|
||||
vdev->delete.context = context;
|
||||
qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
|
||||
return;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
|
||||
qdf_event_destroy(&vdev->wait_delete_comp);
|
||||
@@ -2020,6 +2055,8 @@ ol_txrx_vdev_detach(struct cdp_vdev *pvdev,
|
||||
qdf_mem_free(vdev);
|
||||
if (callback)
|
||||
callback(context);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2128,8 +2165,8 @@ static void ol_txrx_dump_peer_access_list(ol_txrx_peer_handle peer)
|
||||
/**
|
||||
* ol_txrx_peer_attach - Allocate and set up references for a
|
||||
* data peer object.
|
||||
* @pvdev - data virtual device object that will directly
|
||||
* own the data_peer object
|
||||
* @soc_hdl - data path soc handle
|
||||
* @vdev_id - virtual device instance id
|
||||
* @peer_mac_addr - MAC address of the new peer
|
||||
*
|
||||
* When an association with a peer starts, the host's control SW
|
||||
@@ -2143,13 +2180,15 @@ static void ol_txrx_dump_peer_access_list(ol_txrx_peer_handle peer)
|
||||
* so a reference within the control peer object can be set to the
|
||||
* data peer object.
|
||||
*
|
||||
* Return: handle to new data peer object, or NULL if the attach
|
||||
* fails
|
||||
* Return: 0 on success, -1 on failure
|
||||
*/
|
||||
static void *
|
||||
ol_txrx_peer_attach(struct cdp_vdev *pvdev, uint8_t *peer_mac_addr)
|
||||
ol_txrx_peer_attach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
uint8_t *peer_mac_addr)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev = (struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
struct ol_txrx_peer_t *peer;
|
||||
struct ol_txrx_peer_t *temp_peer;
|
||||
uint8_t i;
|
||||
@@ -2237,7 +2276,7 @@ ol_txrx_peer_attach(struct cdp_vdev *pvdev, uint8_t *peer_mac_addr)
|
||||
|
||||
peer = qdf_mem_malloc(sizeof(*peer));
|
||||
if (!peer)
|
||||
return NULL; /* failure */
|
||||
return NULL;
|
||||
|
||||
/* store provided params */
|
||||
peer->vdev = vdev;
|
||||
@@ -2323,7 +2362,7 @@ ol_txrx_peer_attach(struct cdp_vdev *pvdev, uint8_t *peer_mac_addr)
|
||||
* No Tx in monitor mode, otherwise results in target assert.
|
||||
* Setting disable_intrabss_fwd to true
|
||||
*/
|
||||
ol_vdev_rx_set_intrabss_fwd((struct cdp_vdev *)vdev, true);
|
||||
ol_vdev_rx_set_intrabss_fwd(soc_hdl, vdev_id, true);
|
||||
}
|
||||
|
||||
ol_txrx_local_peer_id_alloc(pdev, peer);
|
||||
@@ -2475,14 +2514,17 @@ static struct cdp_vdev *ol_txrx_get_vdev_for_peer(void *ppeer)
|
||||
|
||||
/**
|
||||
* ol_txrx_get_vdev_mac_addr() - Return mac addr of vdev
|
||||
* @vdev: vdev handle
|
||||
* @soc_hdl: datapath soc handle
|
||||
x @vdev_id: virtual interface id
|
||||
*
|
||||
* Return: vdev mac address
|
||||
*/
|
||||
static uint8_t *
|
||||
ol_txrx_get_vdev_mac_addr(struct cdp_vdev *pvdev)
|
||||
ol_txrx_get_vdev_mac_addr(struct cdp_soc_t *soc_hdl, uint8_t vdev_id)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev = (struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
|
||||
if (!vdev)
|
||||
return NULL;
|
||||
@@ -2520,14 +2562,20 @@ ol_txrx_pdev_handle ol_txrx_get_pdev_from_vdev(ol_txrx_vdev_handle vdev)
|
||||
|
||||
/**
|
||||
* ol_txrx_get_ctrl_pdev_from_vdev() - Return control pdev of vdev
|
||||
* @vdev: vdev handle
|
||||
* @soc_hdl: datapath soc handle
|
||||
* @vdev_id: virtual interface id
|
||||
*
|
||||
* Return: Handle to control pdev
|
||||
*/
|
||||
static struct cdp_cfg *
|
||||
ol_txrx_get_ctrl_pdev_from_vdev(struct cdp_vdev *pvdev)
|
||||
ol_txrx_get_ctrl_pdev_from_vdev(struct cdp_soc_t *soc_hdl, uint8_t vdev_id)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev = (struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
|
||||
if (!vdev)
|
||||
return NULL;
|
||||
|
||||
return vdev->pdev->ctrl_pdev;
|
||||
}
|
||||
@@ -3274,20 +3322,36 @@ void peer_unmap_timer_handler(void *data)
|
||||
|
||||
/**
|
||||
* ol_txrx_peer_detach() - Delete a peer's data object.
|
||||
* @peer - the object to detach
|
||||
|
||||
* @soc_hdl: datapath soc handle
|
||||
* @vdev_id: virtual interface id
|
||||
* @peer_mac: peer MAC address
|
||||
* @bitmap - bitmap indicating special handling of request.
|
||||
*
|
||||
* When the host's control SW disassociates a peer, it calls
|
||||
* this function to detach and delete the peer. The reference
|
||||
* stored in the control peer object to the data peer
|
||||
* object (set up by a call to ol_peer_store()) is provided.
|
||||
*
|
||||
* Return: None
|
||||
* Return: SUCCESS or Failure
|
||||
*/
|
||||
static void ol_txrx_peer_detach(void *ppeer, uint32_t bitmap)
|
||||
static QDF_STATUS ol_txrx_peer_detach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
uint8_t *peer_mac, uint32_t bitmap)
|
||||
{
|
||||
ol_txrx_peer_handle peer = ppeer;
|
||||
struct ol_txrx_vdev_t *vdev = peer->vdev;
|
||||
ol_txrx_peer_handle peer;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
|
||||
if (!vdev)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
peer = ol_txrx_find_peer_by_addr((struct cdp_pdev *)vdev->pdev,
|
||||
peer_mac);
|
||||
if (!peer)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
ol_txrx_info_high("%s peer %pK, peer->ref_cnt %d", __func__,
|
||||
peer, qdf_atomic_read(&peer->ref_cnt));
|
||||
|
||||
/* redirect peer's rx delivery function to point to a discard func */
|
||||
peer->rx_opt_proc = ol_rx_discard;
|
||||
@@ -3342,6 +3406,8 @@ static void ol_txrx_peer_detach(void *ppeer, uint32_t bitmap)
|
||||
* reference, added by the PEER_MAP message.
|
||||
*/
|
||||
ol_txrx_peer_release_ref(peer, PEER_DEBUG_ID_OL_PEER_ATTACH);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3357,6 +3423,7 @@ static void ol_txrx_peer_detach(void *ppeer, uint32_t bitmap)
|
||||
*/
|
||||
static void ol_txrx_peer_detach_force_delete(void *ppeer)
|
||||
{
|
||||
struct ol_txrx_soc_t *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
ol_txrx_peer_handle peer = ppeer;
|
||||
ol_txrx_pdev_handle pdev = peer->vdev->pdev;
|
||||
|
||||
@@ -3365,7 +3432,9 @@ static void ol_txrx_peer_detach_force_delete(void *ppeer)
|
||||
|
||||
/* Clear the peer_id_to_obj map entries */
|
||||
ol_txrx_peer_remove_obj_map_entries(pdev, peer);
|
||||
ol_txrx_peer_detach(peer, 1 << CDP_PEER_DELETE_NO_SPECIAL);
|
||||
ol_txrx_peer_detach((struct cdp_soc_t *)soc, peer->vdev->vdev_id,
|
||||
peer->mac_addr.raw,
|
||||
1 << CDP_PEER_DELETE_NO_SPECIAL);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3376,34 +3445,45 @@ static void ol_txrx_peer_detach_force_delete(void *ppeer)
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void ol_txrx_peer_detach_sync(void *ppeer,
|
||||
static void ol_txrx_peer_detach_sync(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
uint8_t *peer_mac,
|
||||
ol_txrx_peer_unmap_sync_cb peer_unmap_sync,
|
||||
uint32_t bitmap)
|
||||
{
|
||||
ol_txrx_peer_handle peer = ppeer;
|
||||
ol_txrx_pdev_handle pdev = peer->vdev->pdev;
|
||||
struct ol_txrx_pdev_t *pdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
|
||||
ol_txrx_info_high("%s peer %pK, peer->ref_cnt %d", __func__,
|
||||
peer, qdf_atomic_read(&peer->ref_cnt));
|
||||
if (!vdev || !vdev->pdev)
|
||||
return;
|
||||
|
||||
pdev = vdev->pdev;
|
||||
if (!pdev->peer_unmap_sync_cb)
|
||||
pdev->peer_unmap_sync_cb = peer_unmap_sync;
|
||||
|
||||
ol_txrx_peer_detach(peer, bitmap);
|
||||
ol_txrx_peer_detach(soc_hdl, vdev_id, peer_mac, bitmap);
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_peer_unmap_sync_cb_set() - set peer unmap sync callback
|
||||
* @ppdev - TXRX pdev context
|
||||
* @soc_hdl - datapath soc handle
|
||||
* pdev_id - physical device instance id
|
||||
* @peer_unmap_sync - peer unmap sync callback
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void ol_txrx_peer_unmap_sync_cb_set(
|
||||
struct cdp_pdev *ppdev,
|
||||
struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id,
|
||||
ol_txrx_peer_unmap_sync_cb peer_unmap_sync)
|
||||
{
|
||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
struct ol_txrx_pdev_t *pdev = ol_txrx_get_pdev_from_pdev_id(soc,
|
||||
pdev_id);
|
||||
|
||||
if (!pdev)
|
||||
return;
|
||||
|
||||
if (!pdev->peer_unmap_sync_cb)
|
||||
pdev->peer_unmap_sync_cb = peer_unmap_sync;
|
||||
@@ -3750,21 +3830,39 @@ struct ol_txrx_stats_req_internal
|
||||
return req;
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_fw_stats_get() - Get fw stats
|
||||
*
|
||||
* @soc_hdl: datapath soc handle
|
||||
* @vdev_id: virtual interface id
|
||||
* @req: specifications of stats request
|
||||
* @per_vdev: bool input whether stats requested per vdev or not
|
||||
* @response_expected: bool input whether expecting response or not
|
||||
*
|
||||
* Return: success or failure
|
||||
*/
|
||||
static A_STATUS
|
||||
ol_txrx_fw_stats_get(struct cdp_vdev *pvdev, struct ol_txrx_stats_req *req,
|
||||
bool per_vdev, bool response_expected)
|
||||
ol_txrx_fw_stats_get(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||
struct ol_txrx_stats_req *req, bool per_vdev,
|
||||
bool response_expected)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev = (struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_pdev_t *pdev = vdev->pdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
struct ol_txrx_pdev_t *pdev;
|
||||
uint8_t cookie = FW_STATS_DESC_POOL_SIZE;
|
||||
struct ol_txrx_stats_req_internal *non_volatile_req;
|
||||
struct ol_txrx_fw_stats_desc_t *desc = NULL;
|
||||
struct ol_txrx_fw_stats_desc_elem_t *elem = NULL;
|
||||
|
||||
if (!vdev)
|
||||
return A_EINVAL;
|
||||
|
||||
pdev = vdev->pdev;
|
||||
if (!pdev ||
|
||||
req->stats_type_upload_mask >= 1 << HTT_DBG_NUM_STATS ||
|
||||
req->stats_type_reset_mask >= 1 << HTT_DBG_NUM_STATS) {
|
||||
return A_ERROR;
|
||||
return A_EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3783,7 +3881,7 @@ ol_txrx_fw_stats_get(struct cdp_vdev *pvdev, struct ol_txrx_stats_req *req,
|
||||
desc = ol_txrx_fw_stats_desc_alloc(pdev);
|
||||
if (!desc) {
|
||||
qdf_mem_free(non_volatile_req);
|
||||
return A_ERROR;
|
||||
return A_NO_MEMORY;
|
||||
}
|
||||
|
||||
/* use the desc id as the cookie */
|
||||
@@ -4423,9 +4521,21 @@ ol_txrx_peer_stats_copy(ol_txrx_pdev_handle pdev,
|
||||
}
|
||||
#endif /* QCA_ENABLE_OL_TXRX_PEER_STATS */
|
||||
|
||||
static void ol_vdev_rx_set_intrabss_fwd(struct cdp_vdev *pvdev, bool val)
|
||||
/**
|
||||
* ol_vdev_rx_set_intrabss_fwd() - Get fw stats
|
||||
*
|
||||
* @soc_hdl: datapath soc handle
|
||||
* @vdev_id: virtual interface id
|
||||
* @val: enable or disable
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static void ol_vdev_rx_set_intrabss_fwd(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t vdev_id, bool val)
|
||||
{
|
||||
struct ol_txrx_vdev_t *vdev = (struct ol_txrx_vdev_t *)pvdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||
vdev_id);
|
||||
|
||||
if (!vdev)
|
||||
return;
|
||||
@@ -4480,18 +4590,22 @@ static uint32_t ol_txrx_get_tx_ack_stats(struct cdp_soc_t *soc_hdl,
|
||||
|
||||
/**
|
||||
* ol_txrx_display_stats() - Display OL TXRX display stats
|
||||
* @soc_hdl: Datapath soc handle
|
||||
* @value: Module id for which stats needs to be displayed
|
||||
* @verb_level: verbose level of stats to be displayed
|
||||
*
|
||||
* Return: status
|
||||
*/
|
||||
static QDF_STATUS
|
||||
ol_txrx_display_stats(void *soc, uint16_t value,
|
||||
ol_txrx_display_stats(struct cdp_soc_t *soc_hdl, uint16_t value,
|
||||
enum qdf_stats_verbosity_level verb_level)
|
||||
{
|
||||
ol_txrx_pdev_handle pdev;
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_pdev_handle pdev = ol_txrx_get_pdev_from_pdev_id(
|
||||
soc,
|
||||
OL_TXRX_PDEV_ID);
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
if (!pdev) {
|
||||
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: pdev is NULL", __func__);
|
||||
@@ -4509,7 +4623,7 @@ ol_txrx_display_stats(void *soc, uint16_t value,
|
||||
if (verb_level == QDF_STATS_VERBOSITY_LEVEL_LOW)
|
||||
ol_tx_dump_flow_pool_info_compact((void *)pdev);
|
||||
else
|
||||
ol_tx_dump_flow_pool_info(soc);
|
||||
ol_tx_dump_flow_pool_info(soc_hdl);
|
||||
break;
|
||||
case CDP_TXRX_DESC_STATS:
|
||||
qdf_nbuf_tx_desc_count_display();
|
||||
@@ -5353,19 +5467,22 @@ struct ol_txrx_vdev_t *ol_txrx_get_vdev_from_soc_vdev_id(
|
||||
|
||||
/**
|
||||
* ol_txrx_get_mon_vdev_from_pdev() - get monitor mode vdev from pdev
|
||||
* @ppdev: the physical device the virtual device belongs to
|
||||
* @soc_hdl: datapath soc handle
|
||||
* @pdev_id: the physical device id the virtual device belongs to
|
||||
*
|
||||
* Return: vdev handle
|
||||
* NULL if not found.
|
||||
* Return: vdev id
|
||||
* error if not found.
|
||||
*/
|
||||
struct cdp_vdev *ol_txrx_get_mon_vdev_from_pdev(struct cdp_pdev *ppdev)
|
||||
uint8_t ol_txrx_get_mon_vdev_from_pdev(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id)
|
||||
{
|
||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
||||
struct ol_txrx_soc_t *soc = (struct ol_txrx_soc_t *)soc_hdl;
|
||||
ol_txrx_pdev_handle pdev = ol_txrx_get_pdev_from_pdev_id(soc, pdev_id);
|
||||
|
||||
if (qdf_unlikely(!pdev))
|
||||
return NULL;
|
||||
return -EINVAL;
|
||||
|
||||
return (struct cdp_vdev *)pdev->monitor_vdev;
|
||||
return pdev->monitor_vdev->vdev_id;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -5422,9 +5539,9 @@ static QDF_STATUS ol_txrx_soc_attach_target(ol_txrx_soc_handle soc)
|
||||
*
|
||||
* MCL legacy OL do nothing here
|
||||
*
|
||||
* Return: noe
|
||||
* Return: none
|
||||
*/
|
||||
static void ol_txrx_soc_detach(void *soc)
|
||||
static void ol_txrx_soc_detach(struct cdp_soc_t *soc)
|
||||
{
|
||||
qdf_mem_free(soc);
|
||||
}
|
||||
@@ -5484,20 +5601,6 @@ static void ol_txrx_wrapper_flush_rx_frames(struct cdp_soc_t *soc_hdl,
|
||||
ol_txrx_flush_rx_frames(peer, drop);
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_wrapper_get_vdev_from_vdev_id() - get vdev instance from vdev id
|
||||
* @ppdev: pdev handle
|
||||
* @vdev_id: interface id
|
||||
*
|
||||
* Return: virtual interface instance
|
||||
*/
|
||||
static
|
||||
struct cdp_vdev *ol_txrx_wrapper_get_vdev_from_vdev_id(struct cdp_pdev *ppdev,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
return ol_txrx_get_vdev_from_vdev_id(vdev_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* ol_txrx_wrapper_register_peer() - register peer
|
||||
* @pdev: pdev handle
|
||||
@@ -5609,15 +5712,18 @@ ol_txrx_wrapper_set_flow_control_parameters(struct cdp_cfg *cfg_pdev,
|
||||
|
||||
/**
|
||||
* ol_txrx_get_cfg() - get ini/cgf values in legacy dp
|
||||
* @soc: soc context
|
||||
* @soc_hdl: soc context
|
||||
* @cfg_param: cfg parameters
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static uint32_t ol_txrx_get_cfg(void *soc, enum cdp_dp_cfg cfg)
|
||||
static uint32_t ol_txrx_get_cfg(struct cdp_soc_t *soc_hdl, enum cdp_dp_cfg cfg)
|
||||
{
|
||||
struct txrx_pdev_cfg_t *cfg_ctx;
|
||||
ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||
ol_txrx_pdev_handle pdev = ol_txrx_get_pdev_from_pdev_id(
|
||||
soc,
|
||||
OL_TXRX_PDEV_ID);
|
||||
uint32_t value = 0;
|
||||
|
||||
if (!pdev) {
|
||||
@@ -5770,7 +5876,6 @@ static struct cdp_cmn_ops ol_ops_cmn = {
|
||||
.txrx_vdev_register = ol_txrx_vdev_register,
|
||||
.txrx_soc_detach = ol_txrx_soc_detach,
|
||||
.txrx_get_vdev_mac_addr = ol_txrx_get_vdev_mac_addr,
|
||||
.txrx_get_vdev_from_vdev_id = ol_txrx_wrapper_get_vdev_from_vdev_id,
|
||||
.txrx_get_ctrl_pdev_from_vdev = ol_txrx_get_ctrl_pdev_from_vdev,
|
||||
.txrx_get_mon_vdev_from_pdev = ol_txrx_get_mon_vdev_from_pdev,
|
||||
.txrx_mgmt_send_ext = ol_txrx_mgmt_send_ext,
|
||||
|
@@ -195,12 +195,14 @@ struct ol_txrx_vdev_t *ol_txrx_get_vdev_from_soc_vdev_id(
|
||||
|
||||
/**
|
||||
* ol_txrx_get_mon_vdev_from_pdev() - get monitor mode vdev from pdev
|
||||
* @ppdev: the physical device the virtual device belongs to
|
||||
* @soc: datapath soc handle
|
||||
* @pdev_id: the physical device id the virtual device belongs to
|
||||
*
|
||||
* Return: vdev handle
|
||||
* NULL if not found.
|
||||
* Return: vdev id
|
||||
* error if not found.
|
||||
*/
|
||||
struct cdp_vdev *ol_txrx_get_mon_vdev_from_pdev(struct cdp_pdev *ppdev);
|
||||
uint8_t ol_txrx_get_mon_vdev_from_pdev(struct cdp_soc_t *soc,
|
||||
uint8_t pdev_id);
|
||||
|
||||
/**
|
||||
* ol_txrx_get_vdev_by_peer_addr() - Get vdev handle by peer mac address
|
||||
|
@@ -133,6 +133,9 @@ static void ol_tx_vdev_ll_pause_queue_send_base(struct ol_txrx_vdev_t *vdev)
|
||||
{
|
||||
int max_to_accept;
|
||||
|
||||
if (!vdev)
|
||||
return;
|
||||
|
||||
qdf_spin_lock_bh(&vdev->ll_pause.mutex);
|
||||
if (vdev->ll_pause.paused_reason) {
|
||||
qdf_spin_unlock_bh(&vdev->ll_pause.mutex);
|
||||
|
@@ -17,6 +17,8 @@
|
||||
*/
|
||||
|
||||
#include <dp_txrx.h>
|
||||
#include "dp_peer.h"
|
||||
#include "dp_internal.h"
|
||||
#include <cdp_txrx_cmn_struct.h>
|
||||
#include <cdp_txrx_peer_ops.h>
|
||||
#include <cds_sched.h>
|
||||
@@ -275,41 +277,6 @@ static qdf_nbuf_t dp_rx_tm_thread_dequeue(struct dp_rx_thread *rx_thread)
|
||||
return head;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_rx_thread_get_nbuf_vdev_handle() - get vdev handle from nbuf
|
||||
* dequeued from rx thread
|
||||
* @soc: soc handle
|
||||
* @pdev: pdev handle
|
||||
* @rx_thread: rx_thread whose nbuf was dequeued
|
||||
* @nbuf_list: nbuf list dequeued from rx_thread
|
||||
*
|
||||
* Returns: vdev handle on Success, NULL on failure
|
||||
*/
|
||||
static struct cdp_vdev *
|
||||
dp_rx_thread_get_nbuf_vdev_handle(ol_txrx_soc_handle soc,
|
||||
struct cdp_pdev *pdev,
|
||||
struct dp_rx_thread *rx_thread,
|
||||
qdf_nbuf_t nbuf_list)
|
||||
{
|
||||
uint32_t num_list_elements = 0;
|
||||
struct cdp_vdev *vdev;
|
||||
uint8_t vdev_id;
|
||||
|
||||
vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf_list);
|
||||
vdev = cdp_get_vdev_from_vdev_id(soc, pdev, vdev_id);
|
||||
if (!vdev) {
|
||||
num_list_elements =
|
||||
QDF_NBUF_CB_RX_NUM_ELEMENTS_IN_LIST(nbuf_list);
|
||||
rx_thread->stats.dropped_invalid_vdev +=
|
||||
num_list_elements;
|
||||
dp_err("vdev not found for vdev_id %u!, pkt dropped",
|
||||
vdev_id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return vdev;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_rx_thread_process_nbufq() - process nbuf queue of a thread
|
||||
* @rx_thread - rx_thread whose nbuf queue needs to be processed
|
||||
@@ -319,12 +286,11 @@ dp_rx_thread_get_nbuf_vdev_handle(ol_txrx_soc_handle soc,
|
||||
static int dp_rx_thread_process_nbufq(struct dp_rx_thread *rx_thread)
|
||||
{
|
||||
qdf_nbuf_t nbuf_list;
|
||||
struct cdp_vdev *vdev;
|
||||
uint8_t vdev_id;
|
||||
ol_txrx_rx_fp stack_fn;
|
||||
ol_osif_vdev_handle osif_vdev;
|
||||
ol_txrx_soc_handle soc;
|
||||
uint32_t num_list_elements = 0;
|
||||
struct cdp_pdev *pdev;
|
||||
|
||||
struct dp_txrx_handle_cmn *txrx_handle_cmn;
|
||||
|
||||
@@ -332,10 +298,8 @@ static int dp_rx_thread_process_nbufq(struct dp_rx_thread *rx_thread)
|
||||
dp_rx_thread_get_txrx_handle(rx_thread->rtm_handle_cmn);
|
||||
|
||||
soc = dp_txrx_get_soc_from_ext_handle(txrx_handle_cmn);
|
||||
pdev = dp_txrx_get_pdev_from_ext_handle(txrx_handle_cmn);
|
||||
|
||||
if (!soc || !pdev) {
|
||||
dp_err("invalid soc or pdev!");
|
||||
if (!soc) {
|
||||
dp_err("invalid soc!");
|
||||
QDF_BUG(0);
|
||||
return -EFAULT;
|
||||
}
|
||||
@@ -349,13 +313,8 @@ static int dp_rx_thread_process_nbufq(struct dp_rx_thread *rx_thread)
|
||||
QDF_NBUF_CB_RX_NUM_ELEMENTS_IN_LIST(nbuf_list);
|
||||
rx_thread->stats.nbuf_dequeued += num_list_elements;
|
||||
|
||||
vdev = dp_rx_thread_get_nbuf_vdev_handle(soc, pdev, rx_thread,
|
||||
nbuf_list);
|
||||
if (!vdev) {
|
||||
qdf_nbuf_list_free(nbuf_list);
|
||||
goto dequeue_rx_thread;
|
||||
}
|
||||
cdp_get_os_rx_handles_from_vdev(soc, vdev, &stack_fn,
|
||||
vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf_list);
|
||||
cdp_get_os_rx_handles_from_vdev(soc, vdev_id, &stack_fn,
|
||||
&osif_vdev);
|
||||
if (!stack_fn || !osif_vdev) {
|
||||
rx_thread->stats.dropped_invalid_os_rx_handles +=
|
||||
|
@@ -2152,7 +2152,8 @@ QDF_STATUS hdd_roam_register_sta(struct hdd_adapter *adapter,
|
||||
}
|
||||
|
||||
txrx_ops.tx.tx = NULL;
|
||||
cdp_vdev_register(soc, adapter->txrx_vdev, adapter, &txrx_ops);
|
||||
cdp_vdev_register(soc, adapter->vdev_id, (ol_osif_vdev_handle)adapter,
|
||||
&txrx_ops);
|
||||
if (!txrx_ops.tx.tx) {
|
||||
hdd_err("%s vdev register fail", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
@@ -4079,7 +4080,6 @@ QDF_STATUS hdd_roam_register_tdlssta(struct hdd_adapter *adapter,
|
||||
struct ol_txrx_ops txrx_ops;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
|
||||
/*
|
||||
* TDLS sta in BSS should be set as STA type TDLS and STA MAC should
|
||||
@@ -4102,14 +4102,7 @@ QDF_STATUS hdd_roam_register_tdlssta(struct hdd_adapter *adapter,
|
||||
txrx_ops.rx.rx_stack = NULL;
|
||||
txrx_ops.rx.rx_flush = NULL;
|
||||
}
|
||||
txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
if (!txrx_vdev)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
cdp_vdev_register(soc, txrx_vdev,
|
||||
adapter,
|
||||
cdp_vdev_register(soc, adapter->vdev_id, (ol_osif_vdev_handle)adapter,
|
||||
&txrx_ops);
|
||||
adapter->tx_fn = txrx_ops.tx.tx;
|
||||
txrx_ops.rx.stats_rx = hdd_tx_rx_collect_connectivity_stats_info;
|
||||
|
@@ -2348,7 +2348,7 @@ bool hdd_dfs_indicate_radar(struct hdd_context *hdd_ctx)
|
||||
true;
|
||||
hdd_info("tx blocked for vdev: %d",
|
||||
adapter->vdev_id);
|
||||
if (adapter->txrx_vdev)
|
||||
if (adapter->vdev_id != WLAN_UMAC_VDEV_ID_MAX)
|
||||
cdp_fc_vdev_flush(
|
||||
cds_get_context(QDF_MODULE_ID_SOC),
|
||||
adapter->vdev_id);
|
||||
@@ -8078,7 +8078,6 @@ static void hdd_display_periodic_stats(struct hdd_context *hdd_ctx,
|
||||
{
|
||||
static uint32_t counter;
|
||||
static bool data_in_time_period;
|
||||
ol_txrx_pdev_handle pdev;
|
||||
ol_txrx_soc_handle soc;
|
||||
uint32_t periodic_stats_disp_time = 0;
|
||||
|
||||
@@ -8093,12 +8092,6 @@ static void hdd_display_periodic_stats(struct hdd_context *hdd_ctx,
|
||||
return;
|
||||
}
|
||||
|
||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
if (!pdev) {
|
||||
hdd_err("pdev is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
counter++;
|
||||
if (data_in_interval)
|
||||
data_in_time_period = data_in_interval;
|
||||
|
@@ -220,8 +220,6 @@ static int hdd_ocb_register_sta(struct hdd_adapter *adapter)
|
||||
struct hdd_station_ctx *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
struct ol_txrx_ops txrx_ops;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
struct cdp_vdev *vdev;
|
||||
|
||||
qdf_status = cdp_peer_register_ocb_peer(soc,
|
||||
adapter->mac_addr.bytes);
|
||||
@@ -236,13 +234,8 @@ static int hdd_ocb_register_sta(struct hdd_adapter *adapter)
|
||||
/* Register the vdev transmit and receive functions */
|
||||
qdf_mem_zero(&txrx_ops, sizeof(txrx_ops));
|
||||
txrx_ops.rx.rx = hdd_rx_packet_cbk;
|
||||
vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
if (!vdev)
|
||||
return -EINVAL;
|
||||
|
||||
cdp_vdev_register(soc, vdev, adapter,
|
||||
cdp_vdev_register(soc, adapter->vdev_id, (ol_osif_vdev_handle)adapter,
|
||||
&txrx_ops);
|
||||
txrx_ops.rx.stats_rx = hdd_tx_rx_collect_connectivity_stats_info;
|
||||
adapter->tx_fn = txrx_ops.tx.tx;
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include <cds_sched.h>
|
||||
#include <cds_utils.h>
|
||||
#include "wlan_hdd_rx_monitor.h"
|
||||
#include "ol_txrx.h"
|
||||
|
||||
/**
|
||||
* hdd_rx_monitor_callback(): Callback function for receive monitor mode
|
||||
@@ -120,11 +121,13 @@ void hdd_monitor_set_rx_monitor_cb(struct ol_txrx_ops *txrx,
|
||||
int hdd_enable_monitor_mode(struct net_device *dev)
|
||||
{
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
uint8_t vdev_id;
|
||||
|
||||
hdd_enter_dev(dev);
|
||||
|
||||
return cdp_set_monitor_mode(soc,
|
||||
(struct cdp_vdev *)cdp_get_mon_vdev_from_pdev(soc,
|
||||
(struct cdp_pdev *)pdev), false);
|
||||
vdev_id = cdp_get_mon_vdev_from_pdev(soc, OL_TXRX_PDEV_ID);
|
||||
if (vdev_id < 0)
|
||||
return -EINVAL;
|
||||
|
||||
return cdp_set_monitor_mode(soc, vdev_id, false);
|
||||
}
|
||||
|
@@ -1020,7 +1020,6 @@ QDF_STATUS hdd_softap_register_sta(struct hdd_adapter *adapter,
|
||||
struct ol_txrx_ops txrx_ops;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
struct cdp_vdev *txrx_vdev = NULL;
|
||||
struct hdd_ap_ctx *ap_ctx;
|
||||
struct hdd_station_info *sta_info;
|
||||
|
||||
@@ -1076,15 +1075,9 @@ QDF_STATUS hdd_softap_register_sta(struct hdd_adapter *adapter,
|
||||
txrx_ops.rx.rx_flush = NULL;
|
||||
}
|
||||
|
||||
txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
adapter->vdev_id);
|
||||
if (!txrx_vdev)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
cdp_vdev_register(soc,
|
||||
txrx_vdev,
|
||||
adapter,
|
||||
adapter->vdev_id,
|
||||
(ol_osif_vdev_handle)adapter,
|
||||
&txrx_ops);
|
||||
adapter->txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||
(struct cdp_pdev *)pdev,
|
||||
|
@@ -2733,9 +2733,9 @@ int hdd_set_mon_rx_cb(struct net_device *dev)
|
||||
qdf_mem_zero(&txrx_ops, sizeof(txrx_ops));
|
||||
txrx_ops.rx.rx = hdd_mon_rx_packet_cbk;
|
||||
hdd_monitor_set_rx_monitor_cb(&txrx_ops, hdd_rx_monitor_callback);
|
||||
cdp_vdev_register(soc,
|
||||
cdp_get_mon_vdev_from_pdev(soc, pdev),
|
||||
adapter, &txrx_ops);
|
||||
cdp_vdev_register(soc, adapter->vdev_id,
|
||||
(ol_osif_vdev_handle)adapter,
|
||||
&txrx_ops);
|
||||
/* peer is created wma_vdev_attach->wma_create_peer */
|
||||
qdf_status = cdp_peer_register(soc,
|
||||
(struct cdp_pdev *)pdev, &sta_desc);
|
||||
|
@@ -1636,13 +1636,6 @@ static void lim_process_addba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
|
||||
uint32_t frame_len, status;
|
||||
QDF_STATUS qdf_status;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *peer, *pdev;
|
||||
|
||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
if (!pdev) {
|
||||
pe_err("pdev is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
|
||||
body_ptr = WMA_GET_RX_MPDU_DATA(rx_pkt_info);
|
||||
@@ -1668,14 +1661,9 @@ static void lim_process_addba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
|
||||
status, frame_len);
|
||||
}
|
||||
|
||||
peer = cdp_peer_get_ref_by_addr(soc, pdev, mac_hdr->sa,
|
||||
PEER_DEBUG_ID_WMA_ADDBA_REQ);
|
||||
if (!peer) {
|
||||
pe_err("PEER [%pM] not found", mac_hdr->sa);
|
||||
goto error;
|
||||
}
|
||||
|
||||
qdf_status = cdp_addba_requestprocess(soc, peer,
|
||||
qdf_status = cdp_addba_requestprocess(
|
||||
soc, mac_hdr->sa,
|
||||
session->vdev_id,
|
||||
addba_req->DialogToken.token,
|
||||
addba_req->addba_param_set.tid,
|
||||
addba_req->ba_timeout.timeout,
|
||||
@@ -1691,7 +1679,8 @@ static void lim_process_addba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
|
||||
addba_req->addba_param_set.amsdu_supp);
|
||||
if (qdf_status != QDF_STATUS_SUCCESS) {
|
||||
pe_err("Failed to send addba response frame");
|
||||
cdp_addba_resp_tx_completion(soc, peer,
|
||||
cdp_addba_resp_tx_completion(
|
||||
soc, mac_hdr->sa, session->vdev_id,
|
||||
addba_req->addba_param_set.tid,
|
||||
WMI_MGMT_TX_COMP_TYPE_DISCARD);
|
||||
}
|
||||
@@ -1699,8 +1688,6 @@ static void lim_process_addba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
|
||||
pe_err_rl("Failed to process addba request");
|
||||
}
|
||||
|
||||
cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_WMA_ADDBA_REQ);
|
||||
|
||||
error:
|
||||
qdf_mem_free(addba_req);
|
||||
return;
|
||||
@@ -1725,13 +1712,6 @@ static void lim_process_delba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
|
||||
uint32_t frame_len, status;
|
||||
QDF_STATUS qdf_status;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *peer, *pdev;
|
||||
|
||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
if (!pdev) {
|
||||
pe_err("pdev is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
|
||||
body_ptr = WMA_GET_RX_MPDU_DATA(rx_pkt_info);
|
||||
@@ -1757,18 +1737,9 @@ static void lim_process_delba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
|
||||
status, frame_len);
|
||||
}
|
||||
|
||||
peer = cdp_peer_get_ref_by_addr(soc, pdev, mac_hdr->sa,
|
||||
PEER_DEBUG_ID_WMA_DELBA_REQ);
|
||||
if (!peer) {
|
||||
pe_err("PEER [%pM] not found", mac_hdr->sa);
|
||||
goto error;
|
||||
}
|
||||
|
||||
qdf_status = cdp_delba_process(soc, peer,
|
||||
qdf_status = cdp_delba_process(soc, mac_hdr->sa, session->vdev_id,
|
||||
delba_req->delba_param_set.tid, delba_req->Reason.code);
|
||||
|
||||
cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_WMA_DELBA_REQ);
|
||||
|
||||
if (QDF_STATUS_SUCCESS != qdf_status)
|
||||
pe_err("Failed to process delba request");
|
||||
|
||||
|
@@ -2482,11 +2482,10 @@ static QDF_STATUS lim_addba_rsp_tx_complete_cnf(void *context,
|
||||
tSirMacMgmtHdr *mac_hdr;
|
||||
tDot11faddba_rsp rsp;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
void *peer;
|
||||
uint32_t frame_len;
|
||||
QDF_STATUS status;
|
||||
uint8_t *data;
|
||||
struct wmi_mgmt_params *mgmt_params = (struct wmi_mgmt_params *)params;
|
||||
|
||||
if (tx_complete == WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK)
|
||||
pe_debug("Add ba response successfully sent");
|
||||
@@ -2518,15 +2517,8 @@ static QDF_STATUS lim_addba_rsp_tx_complete_cnf(void *context,
|
||||
goto error;
|
||||
}
|
||||
|
||||
peer = cdp_peer_get_ref_by_addr(soc, pdev, mac_hdr->da,
|
||||
PEER_DEBUG_ID_WMA_ADDBA_REQ);
|
||||
if (!peer) {
|
||||
pe_debug("no PEER found for mac_addr:%pM", mac_hdr->da);
|
||||
goto error;
|
||||
}
|
||||
cdp_addba_resp_tx_completion(soc, peer, rsp.addba_param_set.tid,
|
||||
tx_complete);
|
||||
cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_WMA_ADDBA_REQ);
|
||||
cdp_addba_resp_tx_completion(soc, mac_hdr->da, mgmt_params->vdev_id,
|
||||
rsp.addba_param_set.tid, tx_complete);
|
||||
error:
|
||||
if (buf)
|
||||
qdf_nbuf_free(buf);
|
||||
@@ -4996,7 +4988,6 @@ QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx,
|
||||
uint16_t buff_size, status_code, batimeout;
|
||||
uint8_t dialog_token;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *peer, *pdev;
|
||||
uint8_t he_frag = 0;
|
||||
tpDphHashNode sta_ds;
|
||||
uint16_t aid;
|
||||
@@ -5004,23 +4995,10 @@ QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx,
|
||||
|
||||
vdev_id = session->vdev_id;
|
||||
|
||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
if (!pdev) {
|
||||
pe_err("pdev is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
cdp_addba_responsesetup(soc, peer_mac, vdev_id, tid,
|
||||
&dialog_token, &status_code, &buff_size,
|
||||
&batimeout);
|
||||
|
||||
peer = cdp_peer_get_ref_by_addr(soc, pdev, peer_mac,
|
||||
PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP);
|
||||
if (!peer) {
|
||||
pe_err("PEER [%pM] not found", peer_mac);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
cdp_addba_responsesetup(soc, peer, tid, &dialog_token,
|
||||
&status_code, &buff_size, &batimeout);
|
||||
|
||||
cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP);
|
||||
qdf_mem_zero((uint8_t *) &frm, sizeof(frm));
|
||||
frm.Category.category = ACTION_CATEGORY_BACK;
|
||||
frm.Action.action = ADDBA_RESPONSE;
|
||||
|
@@ -1952,36 +1952,6 @@ uint16_t wma_vdev_get_pause_bitmap(uint8_t vdev_id)
|
||||
return iface->pause_bitmap;
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_vdev_get_dp_handle() - Get vdev datapth handle
|
||||
* @vdev_id: the Id of the vdev to configure
|
||||
*
|
||||
* Return: Vdev datapath handle else NULL on error
|
||||
*/
|
||||
static inline
|
||||
struct cdp_vdev *wma_vdev_get_vdev_dp_handle(uint8_t vdev_id)
|
||||
{
|
||||
tp_wma_handle wma = (tp_wma_handle)cds_get_context(QDF_MODULE_ID_WMA);
|
||||
struct wma_txrx_node *iface;
|
||||
|
||||
if (!wma) {
|
||||
WMA_LOGE("%s: WMA context is invald!", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (vdev_id >= wma->max_bssid)
|
||||
return NULL;
|
||||
|
||||
iface = &wma->interfaces[vdev_id];
|
||||
|
||||
if (!iface || !iface->vdev) {
|
||||
WMA_LOGE("%s: Vdev is NULL", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return wlan_vdev_get_dp_handle(iface->vdev);
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_vdev_is_device_in_low_pwr_mode - is device in power save mode
|
||||
* @vdev_id: the Id of the vdev to configure
|
||||
|
@@ -1031,8 +1031,9 @@ int wma_peer_state_change_event_handler(void *handle,
|
||||
{
|
||||
WMI_PEER_STATE_EVENTID_param_tlvs *param_buf;
|
||||
wmi_peer_state_event_fixed_param *event;
|
||||
struct cdp_vdev *vdev;
|
||||
#ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
|
||||
tp_wma_handle wma_handle = (tp_wma_handle) handle;
|
||||
#endif
|
||||
|
||||
if (!event_buff) {
|
||||
WMA_LOGE("%s: Received NULL event ptr from FW", __func__);
|
||||
@@ -1045,12 +1046,6 @@ int wma_peer_state_change_event_handler(void *handle,
|
||||
}
|
||||
|
||||
event = param_buf->fixed_param;
|
||||
vdev = wma_find_vdev_by_id(wma_handle, event->vdev_id);
|
||||
if (!vdev) {
|
||||
WMA_LOGD("%s: Couldn't find vdev for vdev_id: %d",
|
||||
__func__, event->vdev_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((cdp_get_opmode(cds_get_context(QDF_MODULE_ID_SOC),
|
||||
event->vdev_id) == wlan_op_mode_sta) &&
|
||||
@@ -1335,11 +1330,15 @@ wma_mgmt_tx_ack_comp_hdlr(void *wma_context, qdf_nbuf_t netbuf, int32_t status)
|
||||
tp_wma_handle wma_handle = (tp_wma_handle) wma_context;
|
||||
struct wlan_objmgr_pdev *pdev = (struct wlan_objmgr_pdev *)
|
||||
wma_handle->pdev;
|
||||
struct wmi_mgmt_params mgmt_params = {};
|
||||
uint16_t desc_id;
|
||||
uint8_t vdev_id;
|
||||
|
||||
desc_id = QDF_NBUF_CB_MGMT_TXRX_DESC_ID(netbuf);
|
||||
vdev_id = mgmt_txrx_get_vdev_id(pdev, desc_id);
|
||||
|
||||
mgmt_txrx_tx_completion_handler(pdev, desc_id, status, NULL);
|
||||
mgmt_params.vdev_id = vdev_id;
|
||||
mgmt_txrx_tx_completion_handler(pdev, desc_id, status, &mgmt_params);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1394,18 +1393,18 @@ QDF_STATUS wma_tx_attach(tp_wma_handle wma_handle)
|
||||
struct cds_context *cds_handle =
|
||||
(struct cds_context *) (wma_handle->cds_context);
|
||||
|
||||
/* Get the txRx Pdev handle */
|
||||
struct cdp_pdev *txrx_pdev = cds_handle->pdev_txrx_ctx;
|
||||
/* Get the txRx Pdev ID */
|
||||
uint8_t pdev_id = WMI_PDEV_ID_SOC;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
|
||||
/* Register for Tx Management Frames */
|
||||
cdp_mgmt_tx_cb_set(soc, txrx_pdev, 0,
|
||||
cdp_mgmt_tx_cb_set(soc, pdev_id, 0,
|
||||
wma_mgmt_tx_dload_comp_hldr,
|
||||
wma_mgmt_tx_ack_comp_hdlr, wma_handle);
|
||||
|
||||
/* Register callback to send PEER_UNMAP_RESPONSE cmd*/
|
||||
if (cdp_cfg_get_peer_unmap_conf_support(soc))
|
||||
cdp_peer_unmap_sync_cb_set(soc, txrx_pdev,
|
||||
cdp_peer_unmap_sync_cb_set(soc, pdev_id,
|
||||
wma_peer_unmap_conf_cb);
|
||||
|
||||
/* Store the Mac Context */
|
||||
@@ -1426,21 +1425,17 @@ QDF_STATUS wma_tx_detach(tp_wma_handle wma_handle)
|
||||
{
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
|
||||
/* Get the Vos Context */
|
||||
struct cds_context *cds_handle =
|
||||
(struct cds_context *) (wma_handle->cds_context);
|
||||
|
||||
/* Get the txRx Pdev handle */
|
||||
struct cdp_pdev *txrx_pdev = cds_handle->pdev_txrx_ctx;
|
||||
/* Get the txRx Pdev ID */
|
||||
uint8_t pdev_id = WMI_PDEV_ID_SOC;
|
||||
|
||||
if (!soc) {
|
||||
WMA_LOGE("%s:SOC context is NULL", __func__);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (txrx_pdev) {
|
||||
if (pdev_id != OL_TXRX_INVALID_PDEV_ID) {
|
||||
/* Deregister with TxRx for Tx Mgmt completion call back */
|
||||
cdp_mgmt_tx_cb_set(soc, txrx_pdev, 0, NULL, NULL, txrx_pdev);
|
||||
cdp_mgmt_tx_cb_set(soc, pdev_id, 0, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
/* Reset Tx Frm Callbacks */
|
||||
@@ -2415,7 +2410,6 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
|
||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||
int32_t is_high_latency;
|
||||
bool is_wmi_mgmt_tx = false;
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
enum frame_index tx_frm_index = GENERIC_NODOWNLD_NOACK_COMP_INDEX;
|
||||
tpSirMacFrameCtl pFc = (tpSirMacFrameCtl) (qdf_nbuf_data(tx_frame));
|
||||
uint8_t use_6mbps = 0;
|
||||
@@ -2447,19 +2441,6 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
iface = &wma_handle->interfaces[vdev_id];
|
||||
if (!iface->vdev) {
|
||||
WMA_LOGE("iface->vdev is NULL");
|
||||
cds_packet_free((void *)tx_frame);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
/* Get the vdev handle from vdev id */
|
||||
txrx_vdev = wlan_vdev_get_dp_handle(iface->vdev);
|
||||
|
||||
if (!txrx_vdev) {
|
||||
WMA_LOGE("TxRx Vdev Handle is NULL");
|
||||
cds_packet_free((void *)tx_frame);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (!soc) {
|
||||
WMA_LOGE("%s:SOC context is NULL", __func__);
|
||||
@@ -2622,18 +2603,12 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
|
||||
if (frmType == TXRX_FRM_802_11_DATA) {
|
||||
qdf_nbuf_t ret;
|
||||
qdf_nbuf_t skb = (qdf_nbuf_t) tx_frame;
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
|
||||
struct wma_decap_info_t decap_info;
|
||||
struct ieee80211_frame *wh =
|
||||
(struct ieee80211_frame *)qdf_nbuf_data(skb);
|
||||
unsigned long curr_timestamp = qdf_mc_timer_get_system_ticks();
|
||||
|
||||
if (!pdev) {
|
||||
cds_packet_free((void *)tx_frame);
|
||||
return QDF_STATUS_E_FAULT;
|
||||
}
|
||||
|
||||
/*
|
||||
* 1) TxRx Module expects data input to be 802.3 format
|
||||
* So Decapsulation has to be done.
|
||||
@@ -2721,8 +2696,7 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
ctrl_pdev = cdp_get_ctrl_pdev_from_vdev(soc,
|
||||
txrx_vdev);
|
||||
ctrl_pdev = cdp_get_ctrl_pdev_from_vdev(soc, vdev_id);
|
||||
if (!ctrl_pdev) {
|
||||
WMA_LOGE("ol_pdev_handle is NULL\n");
|
||||
cds_packet_free((void *)tx_frame);
|
||||
|
@@ -495,17 +495,15 @@ wma_cdp_vdev_detach(ol_txrx_soc_handle soc, tp_wma_handle wma_handle,
|
||||
{
|
||||
struct wma_txrx_node *iface = &wma_handle->interfaces[vdev_id];
|
||||
struct wlan_objmgr_vdev *vdev = iface->vdev;
|
||||
struct cdp_vdev *cdp_vdev;
|
||||
|
||||
if (!vdev) {
|
||||
WMA_LOGE(FL("vdev is NULL"));
|
||||
return;
|
||||
}
|
||||
|
||||
cdp_vdev = wlan_vdev_get_dp_handle(vdev);
|
||||
if (soc && cdp_vdev) {
|
||||
if (soc && wlan_vdev_get_id(vdev) != WLAN_INVALID_VDEV_ID) {
|
||||
wlan_vdev_set_dp_handle(vdev, NULL);
|
||||
cdp_vdev_detach(soc, cdp_vdev, NULL, NULL);
|
||||
cdp_vdev_detach(soc, vdev_id, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -525,6 +523,7 @@ wma_release_vdev_ref(struct wma_txrx_node *iface)
|
||||
|
||||
vdev = iface->vdev;
|
||||
|
||||
iface->vdev_active = false;
|
||||
iface->vdev = NULL;
|
||||
if (vdev)
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
|
||||
@@ -1496,8 +1495,6 @@ QDF_STATUS wma_remove_peer(tp_wma_handle wma, uint8_t *bssid,
|
||||
struct peer_flush_params param = {0};
|
||||
uint8_t *peer_mac_addr;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
void *vdev;
|
||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||
uint32_t bitmap = 1 << CDP_PEER_DELETE_NO_SPECIAL;
|
||||
bool peer_unmap_conf_support_enabled;
|
||||
@@ -1532,18 +1529,8 @@ QDF_STATUS wma_remove_peer(tp_wma_handle wma, uint8_t *bssid,
|
||||
QDF_BUG(0);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
if (cds_get_conparam() == QDF_GLOBAL_MONITOR_MODE)
|
||||
vdev = cdp_get_mon_vdev_from_pdev(soc, pdev);
|
||||
else
|
||||
vdev = cdp_get_vdev_from_vdev_id(soc, pdev, vdev_id);
|
||||
if (!vdev) {
|
||||
WMA_LOGE("%s vdev is null for peer peer->mac_addr %pM",
|
||||
__func__, peer_mac_addr);
|
||||
QDF_BUG(0);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
cdp_peer_teardown(soc, vdev, peer);
|
||||
cdp_peer_teardown(soc, vdev_id, peer);
|
||||
|
||||
if (roam_synch_in_progress)
|
||||
goto peer_detach;
|
||||
@@ -1575,8 +1562,8 @@ QDF_STATUS wma_remove_peer(tp_wma_handle wma, uint8_t *bssid,
|
||||
}
|
||||
|
||||
peer_detach:
|
||||
WMA_LOGD("%s: vdev %pK is detaching %pK with peer_addr %pM vdevid %d peer_count %d",
|
||||
__func__, vdev, peer, peer_mac_addr, vdev_id,
|
||||
WMA_LOGD("%s: vdevid %d is detaching with peer_addr %pM peer_count %d",
|
||||
__func__, vdev_id, peer_mac_addr,
|
||||
wma->interfaces[vdev_id].peer_count);
|
||||
/* Copy peer mac to find and delete objmgr peer */
|
||||
qdf_mem_copy(peer_mac, peer_mac_addr, QDF_MAC_ADDR_SIZE);
|
||||
@@ -1587,7 +1574,7 @@ peer_detach:
|
||||
__func__, peer_mac_addr);
|
||||
cdp_peer_detach_force_delete(soc, peer);
|
||||
} else {
|
||||
cdp_peer_delete_sync(soc, peer,
|
||||
cdp_peer_delete_sync(soc, vdev_id, peer_mac_addr,
|
||||
wma_peer_unmap_conf_cb,
|
||||
bitmap);
|
||||
}
|
||||
@@ -1597,11 +1584,11 @@ peer_detach:
|
||||
__func__, peer_mac_addr);
|
||||
}
|
||||
if (peer_unmap_conf_support_enabled)
|
||||
cdp_peer_delete_sync(soc, peer,
|
||||
cdp_peer_delete_sync(soc, vdev_id, peer_mac_addr,
|
||||
wma_peer_unmap_conf_cb,
|
||||
bitmap);
|
||||
else
|
||||
cdp_peer_delete(soc, peer, bitmap);
|
||||
cdp_peer_delete(soc, vdev_id, peer_mac_addr, bitmap);
|
||||
}
|
||||
|
||||
wma_remove_objmgr_peer(wma, vdev_id, peer_mac);
|
||||
@@ -1830,7 +1817,7 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, struct cdp_pdev *pdev,
|
||||
* where the HTT peer map event is received before the peer object
|
||||
* is created in the data path
|
||||
*/
|
||||
peer = cdp_peer_create(dp_soc, vdev, peer_addr);
|
||||
peer = cdp_peer_create(dp_soc, vdev_id, peer_addr);
|
||||
if (!peer) {
|
||||
WMA_LOGE("%s : Unable to attach peer %pM", __func__, peer_addr);
|
||||
wlan_objmgr_peer_obj_delete(obj_peer);
|
||||
@@ -1848,7 +1835,7 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, struct cdp_pdev *pdev,
|
||||
WMA_LOGD("%s: LFR3: Created peer %pK with peer_addr %pM vdev_id %d, peer_count - %d",
|
||||
__func__, peer, peer_addr, vdev_id,
|
||||
wma->interfaces[vdev_id].peer_count);
|
||||
cdp_peer_setup(dp_soc, vdev, peer);
|
||||
cdp_peer_setup(dp_soc, vdev_id, peer_addr);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
param.peer_addr = peer_addr;
|
||||
@@ -1859,12 +1846,12 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, struct cdp_pdev *pdev,
|
||||
WMA_LOGE("%s : Unable to create peer in Target", __func__);
|
||||
if (cdp_cfg_get_peer_unmap_conf_support(dp_soc))
|
||||
cdp_peer_delete_sync(
|
||||
dp_soc, peer,
|
||||
dp_soc, vdev_id, peer_addr,
|
||||
wma_peer_unmap_conf_cb,
|
||||
1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
|
||||
else
|
||||
cdp_peer_delete(
|
||||
dp_soc, peer,
|
||||
dp_soc, vdev_id, peer_addr,
|
||||
1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
|
||||
wlan_objmgr_peer_obj_delete(obj_peer);
|
||||
goto err;
|
||||
@@ -1876,12 +1863,12 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma, struct cdp_pdev *pdev,
|
||||
|
||||
wlan_roam_debug_log(vdev_id, DEBUG_PEER_CREATE_SEND,
|
||||
DEBUG_INVALID_PEER_ID, peer_addr, peer, 0, 0);
|
||||
cdp_peer_setup(dp_soc, vdev, peer);
|
||||
cdp_peer_setup(dp_soc, vdev_id, peer_addr);
|
||||
|
||||
WMA_LOGD("%s: Initialized peer with peer_addr %pM vdev_id %d",
|
||||
__func__, peer_addr, vdev_id);
|
||||
|
||||
mac_addr_raw = cdp_get_vdev_mac_addr(dp_soc, vdev);
|
||||
mac_addr_raw = cdp_get_vdev_mac_addr(dp_soc, vdev_id);
|
||||
if (!mac_addr_raw) {
|
||||
WMA_LOGE("%s: peer mac addr is NULL", __func__);
|
||||
return QDF_STATUS_E_FAULT;
|
||||
@@ -1931,7 +1918,7 @@ static int wma_remove_bss_peer(tp_wma_handle wma, void *pdev, uint32_t vdev_id,
|
||||
struct del_bss_resp *vdev_stop_resp,
|
||||
uint8_t type)
|
||||
{
|
||||
void *peer, *vdev;
|
||||
void *peer;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
uint8_t *mac_addr = NULL;
|
||||
struct wma_target_req *del_req;
|
||||
@@ -1939,15 +1926,9 @@ static int wma_remove_bss_peer(tp_wma_handle wma, void *pdev, uint32_t vdev_id,
|
||||
QDF_STATUS qdf_status;
|
||||
struct qdf_mac_addr bssid;
|
||||
|
||||
vdev = cdp_get_vdev_from_vdev_id(soc, pdev, vdev_id);
|
||||
if (!vdev) {
|
||||
WMA_LOGE(FL("vdev is NULL for vdev_id = %d"), vdev_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (wma_is_vdev_in_ibss_mode(wma, vdev_id) ||
|
||||
WMA_IS_VDEV_IN_NDI_MODE(wma->interfaces, vdev_id)) {
|
||||
mac_addr = cdp_get_vdev_mac_addr(soc, vdev);
|
||||
mac_addr = cdp_get_vdev_mac_addr(soc, vdev_id);
|
||||
if (!mac_addr) {
|
||||
WMA_LOGE(FL("mac_addr is NULL for vdev_id = %d"),
|
||||
vdev_id);
|
||||
@@ -2293,11 +2274,13 @@ __wma_handle_vdev_stop_rsp(struct vdev_stop_response *resp_event)
|
||||
__func__, peer, bssid.bytes,
|
||||
resp_event->vdev_id, iface->peer_count);
|
||||
if (cdp_cfg_get_peer_unmap_conf_support(soc))
|
||||
cdp_peer_delete_sync(soc, peer,
|
||||
cdp_peer_delete_sync(soc, resp_event->vdev_id,
|
||||
bssid.bytes,
|
||||
wma_peer_unmap_conf_cb,
|
||||
1 << CDP_PEER_DELETE_NO_SPECIAL);
|
||||
else
|
||||
cdp_peer_delete(soc, peer,
|
||||
cdp_peer_delete(soc, resp_event->vdev_id,
|
||||
bssid.bytes,
|
||||
1 << CDP_PEER_DELETE_NO_SPECIAL);
|
||||
wma_remove_objmgr_peer(wma, resp_event->vdev_id,
|
||||
bssid.bytes);
|
||||
@@ -2765,7 +2748,7 @@ QDF_STATUS wma_post_vdev_create_setup(struct wlan_objmgr_vdev *vdev)
|
||||
WMA_LOGE("Failed to configure active APF mode");
|
||||
}
|
||||
|
||||
cdp_data_tx_cb_set(soc, txrx_vdev_handle,
|
||||
cdp_data_tx_cb_set(soc, vdev_id,
|
||||
wma_data_tx_ack_comp_hdlr,
|
||||
wma_handle);
|
||||
|
||||
@@ -5204,7 +5187,6 @@ int32_t wma_find_vdev_by_type(tp_wma_handle wma, int32_t type)
|
||||
void wma_set_vdev_intrabss_fwd(tp_wma_handle wma_handle,
|
||||
tpDisableIntraBssFwd pdis_intra_fwd)
|
||||
{
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
WMA_LOGD("%s:intra_fwd:vdev(%d) intrabss_dis=%s",
|
||||
@@ -5212,9 +5194,8 @@ void wma_set_vdev_intrabss_fwd(tp_wma_handle wma_handle,
|
||||
(pdis_intra_fwd->disableintrabssfwd ? "true" : "false"));
|
||||
|
||||
vdev = wma_handle->interfaces[pdis_intra_fwd->sessionId].vdev;
|
||||
txrx_vdev = wlan_vdev_get_dp_handle(vdev);
|
||||
cdp_cfg_vdev_rx_set_intrabss_fwd(cds_get_context(QDF_MODULE_ID_SOC),
|
||||
txrx_vdev,
|
||||
pdis_intra_fwd->sessionId,
|
||||
pdis_intra_fwd->disableintrabssfwd);
|
||||
}
|
||||
|
||||
|
@@ -915,17 +915,10 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
|
||||
break;
|
||||
case GEN_CMD:
|
||||
{
|
||||
struct cdp_vdev *vdev = NULL;
|
||||
struct wma_txrx_node *intr = wma->interfaces;
|
||||
wmi_vdev_custom_aggr_type_t aggr_type =
|
||||
WMI_VDEV_CUSTOM_AGGR_TYPE_AMSDU;
|
||||
|
||||
vdev = wma_find_vdev_by_id(wma, privcmd->param_vdev_id);
|
||||
if (!vdev) {
|
||||
WMA_LOGE("%s:Invalid vdev handle", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
WMA_LOGD("gen pid %d pval %d", privcmd->param_id,
|
||||
privcmd->param_value);
|
||||
|
||||
@@ -938,7 +931,7 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
|
||||
}
|
||||
|
||||
if (privcmd->param_id == GEN_VDEV_PARAM_AMPDU) {
|
||||
ret = cdp_aggr_cfg(soc, vdev,
|
||||
ret = cdp_aggr_cfg(soc, privcmd->param_vdev_id,
|
||||
privcmd->param_value, 0);
|
||||
if (ret)
|
||||
WMA_LOGE("cdp_aggr_cfg set ampdu failed ret %d",
|
||||
@@ -2608,6 +2601,9 @@ void wma_vdev_deinit(struct wma_txrx_node *vdev)
|
||||
vdev->beacon = NULL;
|
||||
}
|
||||
|
||||
if (vdev->vdev_active == true)
|
||||
vdev->vdev_active = false;
|
||||
|
||||
if (vdev->addBssStaContext) {
|
||||
qdf_mem_free(vdev->addBssStaContext);
|
||||
vdev->addBssStaContext = NULL;
|
||||
@@ -3320,8 +3316,6 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
|
||||
wma_vdev_update_pause_bitmap);
|
||||
pmo_register_get_pause_bitmap(wma_handle->psoc,
|
||||
wma_vdev_get_pause_bitmap);
|
||||
pmo_register_get_vdev_dp_handle(wma_handle->psoc,
|
||||
wma_vdev_get_vdev_dp_handle);
|
||||
pmo_register_is_device_in_low_pwr_mode(wma_handle->psoc,
|
||||
wma_vdev_is_device_in_low_pwr_mode);
|
||||
pmo_register_get_dtim_period_callback(wma_handle->psoc,
|
||||
@@ -4467,7 +4461,6 @@ QDF_STATUS wma_close(void)
|
||||
pmo_unregister_is_device_in_low_pwr_mode(wma_handle->psoc);
|
||||
pmo_unregister_get_pause_bitmap(wma_handle->psoc);
|
||||
pmo_unregister_pause_bitmap_notifier(wma_handle->psoc);
|
||||
pmo_unregister_get_vdev_dp_handle(wma_handle->psoc);
|
||||
|
||||
tgt_psoc_info = wlan_psoc_get_tgt_if_handle(wma_handle->psoc);
|
||||
init_deinit_free_num_units(wma_handle->psoc, tgt_psoc_info);
|
||||
|
@@ -2093,8 +2093,7 @@ static QDF_STATUS wma_setup_install_key_cmd(tp_wma_handle wma_handle,
|
||||
struct wma_txrx_node *iface = NULL;
|
||||
enum cdp_sec_type sec_type = cdp_sec_type_none;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct cdp_pdev *txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
void *txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||
uint32_t pn[4] = {0, 0, 0, 0};
|
||||
struct cdp_peer *peer;
|
||||
bool skip_set_key;
|
||||
@@ -2118,7 +2117,6 @@ static QDF_STATUS wma_setup_install_key_cmd(tp_wma_handle wma_handle,
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
txrx_vdev = wma_find_vdev_by_id(wma_handle, key_params->vdev_id);
|
||||
peer = cdp_peer_find_by_addr(soc, txrx_pdev, key_params->peer_mac);
|
||||
iface = &wma_handle->interfaces[key_params->vdev_id];
|
||||
|
||||
@@ -2282,7 +2280,8 @@ static QDF_STATUS wma_setup_install_key_cmd(tp_wma_handle wma_handle,
|
||||
(key_params->unicast) ? "unicast" : "group",
|
||||
key_params->key_rsc[3], key_params->key_rsc[2],
|
||||
key_params->key_rsc[1], key_params->key_rsc[0]);
|
||||
cdp_set_pn_check(soc, txrx_vdev, peer, sec_type, pn);
|
||||
cdp_set_pn_check(soc, key_params->vdev_id, key_params->peer_mac,
|
||||
sec_type, pn);
|
||||
cdp_set_key(soc, peer, key_params->unicast,
|
||||
(uint32_t *)(key_params->key_data +
|
||||
WMA_IV_KEY_LEN +
|
||||
@@ -2423,18 +2422,11 @@ static void wma_set_ibsskey_helper(tp_wma_handle wma_handle,
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
uint32_t i;
|
||||
uint32_t def_key_idx = 0;
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
int opmode;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
WMA_LOGD("BSS key setup for peer");
|
||||
txrx_vdev = wma_find_vdev_by_id(wma_handle, key_info->vdev_id);
|
||||
if (!txrx_vdev) {
|
||||
WMA_LOGE("%s:Invalid vdev handle", __func__);
|
||||
key_info->status = QDF_STATUS_E_FAILURE;
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_mem_zero(&key_params, sizeof(key_params));
|
||||
opmode = cdp_get_opmode(soc, key_info->vdev_id);
|
||||
@@ -2514,18 +2506,11 @@ void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info)
|
||||
uint32_t i;
|
||||
uint32_t def_key_idx = 0;
|
||||
uint32_t wlan_opmode;
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
uint8_t *mac_addr, *bssid;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
WMA_LOGD("BSS key setup");
|
||||
txrx_vdev = wma_find_vdev_by_id(wma_handle, key_info->vdev_id);
|
||||
if (!txrx_vdev) {
|
||||
WMA_LOGE("%s:Invalid vdev handle", __func__);
|
||||
key_info->status = QDF_STATUS_E_FAILURE;
|
||||
goto out;
|
||||
}
|
||||
wlan_opmode = cdp_get_opmode(soc, key_info->vdev_id);
|
||||
|
||||
/*
|
||||
@@ -2558,7 +2543,7 @@ void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info)
|
||||
}
|
||||
qdf_mem_copy(key_params.peer_mac, bssid, QDF_MAC_ADDR_SIZE);
|
||||
} else {
|
||||
mac_addr = cdp_get_vdev_mac_addr(soc, txrx_vdev);
|
||||
mac_addr = cdp_get_vdev_mac_addr(soc, key_params.vdev_id);
|
||||
if (!mac_addr) {
|
||||
WMA_LOGE("%s: mac_addr is NULL for vdev with id %d",
|
||||
__func__, key_info->vdev_id);
|
||||
@@ -2649,7 +2634,6 @@ void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info)
|
||||
int32_t i;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
struct cdp_pdev *txrx_pdev;
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
void *peer;
|
||||
uint8_t num_keys = 0;
|
||||
struct wma_set_key_params key_params;
|
||||
@@ -2676,12 +2660,6 @@ void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info)
|
||||
goto out;
|
||||
}
|
||||
|
||||
txrx_vdev = wma_find_vdev_by_id(wma_handle, key_info->vdev_id);
|
||||
if (!txrx_vdev) {
|
||||
WMA_LOGE("%s:TxRx Vdev Handle is NULL", __func__);
|
||||
key_info->status = QDF_STATUS_E_FAILURE;
|
||||
goto out;
|
||||
}
|
||||
opmode = cdp_get_opmode(soc, key_info->vdev_id);
|
||||
|
||||
if (key_info->defWEPIdx == WMA_INVALID_KEY_IDX &&
|
||||
@@ -3396,11 +3374,11 @@ static int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle,
|
||||
QDF_STATUS ret;
|
||||
#if !defined(REMOVE_PKT_LOG)
|
||||
uint8_t vdev_id = 0;
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
ol_txrx_pktdump_cb packetdump_cb;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
enum tx_status pktdump_status;
|
||||
#endif
|
||||
struct wmi_mgmt_params mgmt_params = {};
|
||||
|
||||
if (!wma_handle) {
|
||||
WMA_LOGE("%s: wma handle is NULL", __func__);
|
||||
@@ -3424,7 +3402,7 @@ static int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle,
|
||||
|
||||
#if !defined(REMOVE_PKT_LOG)
|
||||
vdev_id = mgmt_txrx_get_vdev_id(pdev, desc_id);
|
||||
txrx_vdev = wma_find_vdev_by_id(wma_handle, vdev_id);
|
||||
mgmt_params.vdev_id = vdev_id;
|
||||
packetdump_cb = wma_handle->wma_mgmt_tx_packetdump_cb;
|
||||
pktdump_status = wma_mgmt_pktdump_status_map(status);
|
||||
if (packetdump_cb)
|
||||
@@ -3432,7 +3410,8 @@ static int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle,
|
||||
buf, pktdump_status, TX_MGMT_PKT);
|
||||
#endif
|
||||
|
||||
ret = mgmt_txrx_tx_completion_handler(pdev, desc_id, status, NULL);
|
||||
ret = mgmt_txrx_tx_completion_handler(pdev, desc_id, status,
|
||||
&mgmt_params);
|
||||
|
||||
if (ret != QDF_STATUS_SUCCESS) {
|
||||
WMA_LOGE("%s: Failed to process mgmt tx completion", __func__);
|
||||
@@ -4198,7 +4177,6 @@ int wma_form_rx_packet(qdf_nbuf_t buf,
|
||||
#if !defined(REMOVE_PKT_LOG)
|
||||
ol_txrx_pktdump_cb packetdump_cb;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
#endif
|
||||
static uint8_t limit_prints_invalid_len = RATE_LIMIT - 1;
|
||||
static uint8_t limit_prints_load_unload = RATE_LIMIT - 1;
|
||||
@@ -4366,8 +4344,6 @@ int wma_form_rx_packet(qdf_nbuf_t buf,
|
||||
|
||||
#if !defined(REMOVE_PKT_LOG)
|
||||
packetdump_cb = wma_handle->wma_mgmt_rx_packetdump_cb;
|
||||
txrx_vdev = wma_find_vdev_by_id(wma_handle,
|
||||
rx_pkt->pkt_meta.session_id);
|
||||
if ((mgt_type == IEEE80211_FC0_TYPE_MGT &&
|
||||
mgt_subtype != MGMT_SUBTYPE_BEACON) &&
|
||||
packetdump_cb)
|
||||
@@ -4701,7 +4677,6 @@ QDF_STATUS wma_mgmt_unified_cmd_send(struct wlan_objmgr_vdev *vdev,
|
||||
struct wmi_mgmt_params *mgmt_params =
|
||||
(struct wmi_mgmt_params *)mgmt_tx_params;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
struct cdp_vdev *txrx_vdev;
|
||||
|
||||
if (!mgmt_params) {
|
||||
WMA_LOGE("%s: mgmt_params ptr passed is NULL", __func__);
|
||||
@@ -4720,23 +4695,15 @@ QDF_STATUS wma_mgmt_unified_cmd_send(struct wlan_objmgr_vdev *vdev,
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
if (!wma_handle->interfaces[mgmt_params->vdev_id].vdev) {
|
||||
WMA_LOGE("%s: vdev is NULL for vdev_%d",
|
||||
__func__, mgmt_params->vdev_id);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
txrx_vdev = wlan_vdev_get_dp_handle
|
||||
(wma_handle->interfaces[mgmt_params->vdev_id].vdev);
|
||||
|
||||
if (wmi_service_enabled(wma_handle->wmi_handle,
|
||||
wmi_service_mgmt_tx_wmi)) {
|
||||
status = wmi_mgmt_unified_cmd_send(wma_handle->wmi_handle,
|
||||
mgmt_params);
|
||||
} else if (txrx_vdev) {
|
||||
} else {
|
||||
QDF_NBUF_CB_MGMT_TXRX_DESC_ID(buf)
|
||||
= mgmt_params->desc_id;
|
||||
|
||||
ret = cdp_mgmt_send_ext(soc, txrx_vdev, buf,
|
||||
ret = cdp_mgmt_send_ext(soc, mgmt_params->vdev_id, buf,
|
||||
mgmt_params->tx_type,
|
||||
mgmt_params->use_6mbps,
|
||||
mgmt_params->chanfreq);
|
||||
|
@@ -3273,7 +3273,6 @@ int32_t wma_txrx_fw_stats_reset(tp_wma_handle wma_handle,
|
||||
uint8_t vdev_id, uint32_t value)
|
||||
{
|
||||
struct ol_txrx_stats_req req;
|
||||
struct cdp_vdev *vdev;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
|
||||
if (!soc) {
|
||||
@@ -3281,14 +3280,9 @@ int32_t wma_txrx_fw_stats_reset(tp_wma_handle wma_handle,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vdev = wma_find_vdev_by_id(wma_handle, vdev_id);
|
||||
if (!vdev) {
|
||||
WMA_LOGE("%s:Invalid vdev handle", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
qdf_mem_zero(&req, sizeof(req));
|
||||
req.stats_type_reset_mask = value;
|
||||
cdp_fw_stats_get(soc, vdev, &req, false, false);
|
||||
cdp_fw_stats_get(soc, vdev_id, &req, false, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -3339,7 +3333,6 @@ int32_t wma_set_txrx_fw_stats_level(tp_wma_handle wma_handle,
|
||||
uint8_t vdev_id, uint32_t value)
|
||||
{
|
||||
struct ol_txrx_stats_req req;
|
||||
struct cdp_vdev *vdev;
|
||||
uint32_t l_up_mask;
|
||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||
|
||||
@@ -3348,12 +3341,6 @@ int32_t wma_set_txrx_fw_stats_level(tp_wma_handle wma_handle,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vdev = wma_find_vdev_by_id(wma_handle, vdev_id);
|
||||
if (!vdev) {
|
||||
WMA_LOGE("%s:Invalid vdev handle", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (wma_is_valid_fw_stats_cmd(value) == false)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -3364,7 +3351,7 @@ int32_t wma_set_txrx_fw_stats_level(tp_wma_handle wma_handle,
|
||||
l_up_mask = 1 << (value - 1);
|
||||
req.stats_type_upload_mask = l_up_mask;
|
||||
|
||||
cdp_fw_stats_get(soc, vdev, &req, false, true);
|
||||
cdp_fw_stats_get(soc, vdev_id, &req, false, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user