diff --git a/components/ocb/core/src/wlan_ocb_main.c b/components/ocb/core/src/wlan_ocb_main.c index c5fc09c428..09664b008f 100644 --- a/components/ocb/core/src/wlan_ocb_main.c +++ b/components/ocb/core/src/wlan_ocb_main.c @@ -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 */ diff --git a/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h b/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h index 228d7a8e6a..2ff6c1f000 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_obj_mgmt_api.h @@ -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) diff --git a/components/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c b/components/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c index d167d336ad..bdc84887a2 100644 --- a/components/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c +++ b/components/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c @@ -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) { diff --git a/core/cds/inc/cds_api.h b/core/cds/inc/cds_api.h index d11907fdd3..3f5f089f2f 100644 --- a/core/cds/inc/cds_api.h +++ b/core/cds/inc/cds_api.h @@ -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, diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index d6e5ae4aeb..319790fd45 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -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); diff --git a/core/dp/ol/inc/ol_txrx_ctrl_api.h b/core/dp/ol/inc/ol_txrx_ctrl_api.h index 37f1840ac3..7d70216a71 100644 --- a/core/dp/ol/inc/ol_txrx_ctrl_api.h +++ b/core/dp/ol/inc/ol_txrx_ctrl_api.h @@ -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); /** diff --git a/core/dp/txrx/ol_tx.c b/core/dp/txrx/ol_tx.c index 67ada286f7..7a7a6657a1 100644 --- a/core/dp/txrx/ol_tx.c +++ b/core/dp/txrx/ol_tx.c @@ -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; diff --git a/core/dp/txrx/ol_tx.h b/core/dp/txrx/ol_tx.h index e28bb0cda6..ba2aeea64b 100644 --- a/core/dp/txrx/ol_tx.h +++ b/core/dp/txrx/ol_tx.h @@ -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); diff --git a/core/dp/txrx/ol_tx_queue.c b/core/dp/txrx/ol_tx_queue.c index efd3b09918..e53419ac6a 100644 --- a/core/dp/txrx/ol_tx_queue.c +++ b/core/dp/txrx/ol_tx_queue.c @@ -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); } diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index b80a3e065d..0f3af63399 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -76,6 +76,7 @@ #include "epping_main.h" #include #include +#include #include "wlan_qct_sys.h" #include @@ -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, - struct ol_txrx_ops *txrx_ops) +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, diff --git a/core/dp/txrx/ol_txrx.h b/core/dp/txrx/ol_txrx.h index f2da3adfad..ee41e1e397 100644 --- a/core/dp/txrx/ol_txrx.h +++ b/core/dp/txrx/ol_txrx.h @@ -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 diff --git a/core/dp/txrx/ol_txrx_legacy_flow_control.c b/core/dp/txrx/ol_txrx_legacy_flow_control.c index 5b0b7ca1f7..b49955e835 100644 --- a/core/dp/txrx/ol_txrx_legacy_flow_control.c +++ b/core/dp/txrx/ol_txrx_legacy_flow_control.c @@ -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); diff --git a/core/dp/txrx3.0/dp_rx_thread.c b/core/dp/txrx3.0/dp_rx_thread.c index 121aa77a14..fa51b8b1e6 100644 --- a/core/dp/txrx3.0/dp_rx_thread.c +++ b/core/dp/txrx3.0/dp_rx_thread.c @@ -17,6 +17,8 @@ */ #include +#include "dp_peer.h" +#include "dp_internal.h" #include #include #include @@ -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 += diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 828a200207..48e2540907 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -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; diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 73d0773f8d..fef9d8dda3 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -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; diff --git a/core/hdd/src/wlan_hdd_ocb.c b/core/hdd/src/wlan_hdd_ocb.c index 523ca6a060..872b215c0f 100644 --- a/core/hdd/src/wlan_hdd_ocb.c +++ b/core/hdd/src/wlan_hdd_ocb.c @@ -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; diff --git a/core/hdd/src/wlan_hdd_rx_monitor.c b/core/hdd/src/wlan_hdd_rx_monitor.c index fc1b479186..082134e59c 100644 --- a/core/hdd/src/wlan_hdd_rx_monitor.c +++ b/core/hdd/src/wlan_hdd_rx_monitor.c @@ -24,6 +24,7 @@ #include #include #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); } diff --git a/core/hdd/src/wlan_hdd_softap_tx_rx.c b/core/hdd/src/wlan_hdd_softap_tx_rx.c index 3f6894bcaa..ffe1661b08 100644 --- a/core/hdd/src/wlan_hdd_softap_tx_rx.c +++ b/core/hdd/src/wlan_hdd_softap_tx_rx.c @@ -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, diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index 089fb3e668..284e95326e 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -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); diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c index d235261b95..929473e1ee 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/core/mac/src/pe/lim/lim_process_action_frame.c @@ -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,19 +1661,14 @@ 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, - addba_req->DialogToken.token, - addba_req->addba_param_set.tid, - addba_req->ba_timeout.timeout, - addba_req->addba_param_set.buff_size, - addba_req->ba_start_seq_ctrl.ssn); + 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, + addba_req->addba_param_set.buff_size, + addba_req->ba_start_seq_ctrl.ssn); if (QDF_STATUS_SUCCESS == qdf_status) { qdf_status = lim_send_addba_response_frame(mac_ctx, @@ -1691,16 +1679,15 @@ 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, - addba_req->addba_param_set.tid, - WMI_MGMT_TX_COMP_TYPE_DISCARD); + cdp_addba_resp_tx_completion( + soc, mac_hdr->sa, session->vdev_id, + addba_req->addba_param_set.tid, + WMI_MGMT_TX_COMP_TYPE_DISCARD); } } else { 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"); diff --git a/core/mac/src/pe/lim/lim_send_management_frames.c b/core/mac/src/pe/lim/lim_send_management_frames.c index aabfc137f6..16ec52e990 100644 --- a/core/mac/src/pe/lim/lim_send_management_frames.c +++ b/core/mac/src/pe/lim/lim_send_management_frames.c @@ -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; diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 20f1265586..a5e771919e 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -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 diff --git a/core/wma/src/wma_data.c b/core/wma/src/wma_data.c index d252f9f166..6c7234fee8 100644 --- a/core/wma/src/wma_data.c +++ b/core/wma/src/wma_data.c @@ -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, - wma_mgmt_tx_dload_comp_hldr, - wma_mgmt_tx_ack_comp_hdlr, wma_handle); + 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); diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 69a63c6cb1..eb081666ba 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -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,10 +5194,9 @@ 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->disableintrabssfwd); + pdis_intra_fwd->sessionId, + pdis_intra_fwd->disableintrabssfwd); } void wma_store_pdev(void *wma_ctx, struct wlan_objmgr_pdev *pdev) diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 195767c244..1c0a03c812 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -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,8 +931,8 @@ 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, - privcmd->param_value, 0); + 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", ret); @@ -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); diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index c9c299a6b9..cc3debb64e 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -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); diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index 60f11ddd95..41286260fe 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -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; }