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,
|
uint32_t vdev_id,
|
||||||
struct ocb_config *config)
|
struct ocb_config *config)
|
||||||
{
|
{
|
||||||
struct cdp_vdev *dp_vdev;
|
|
||||||
struct ol_txrx_ocb_set_chan ocb_set_chan;
|
struct ol_txrx_ocb_set_chan ocb_set_chan;
|
||||||
struct ol_txrx_ocb_chan_info *ocb_channel_info;
|
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;
|
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;
|
ocb_set_chan.ocb_channel_count = config->channel_count;
|
||||||
|
|
||||||
/* release old settings */
|
/* release old settings */
|
||||||
|
@@ -250,24 +250,6 @@ pmo_register_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc,
|
|||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
pmo_unregister_get_beacon_interval_callback(struct wlan_objmgr_psoc *psoc);
|
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
|
* pmo_register_is_device_in_low_pwr_mode(): API to get register device power
|
||||||
* save check notifier.
|
* save check notifier.
|
||||||
@@ -401,19 +383,6 @@ pmo_unregister_get_pause_bitmap(struct wlan_objmgr_psoc *psoc)
|
|||||||
return QDF_STATUS_SUCCESS;
|
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
|
static inline QDF_STATUS
|
||||||
pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
|
pmo_register_is_device_in_low_pwr_mode(struct wlan_objmgr_psoc *psoc,
|
||||||
pmo_is_device_in_low_pwr_mode handler)
|
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;
|
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,
|
QDF_STATUS pmo_register_get_dtim_period_callback(struct wlan_objmgr_psoc *psoc,
|
||||||
pmo_get_dtim_period handler)
|
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);
|
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);
|
void *cds_get_global_context(void);
|
||||||
|
|
||||||
QDF_STATUS cds_alloc_context(QDF_MODULE_ID module_id, void **module_context,
|
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)
|
static bool cds_is_drv_connected(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@@ -705,12 +672,12 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
|||||||
TARGET_TYPE_QCA6390 == hdd_ctx->target_type ||
|
TARGET_TYPE_QCA6390 == hdd_ctx->target_type ||
|
||||||
TARGET_TYPE_QCA6490 == hdd_ctx->target_type)
|
TARGET_TYPE_QCA6490 == hdd_ctx->target_type)
|
||||||
gp_cds_context->dp_soc = cdp_soc_attach(LITHIUM_DP,
|
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,
|
gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
|
||||||
&dp_ol_if_ops);
|
&dp_ol_if_ops);
|
||||||
else
|
else
|
||||||
gp_cds_context->dp_soc = cdp_soc_attach(MOB_DRV_LEGACY_DP,
|
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,
|
gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
|
||||||
&dp_ol_if_ops);
|
&dp_ol_if_ops);
|
||||||
|
|
||||||
@@ -849,7 +816,7 @@ intr_close:
|
|||||||
|
|
||||||
pdev_detach:
|
pdev_detach:
|
||||||
cdp_pdev_detach(gp_cds_context->dp_soc,
|
cdp_pdev_detach(gp_cds_context->dp_soc,
|
||||||
cds_get_context(QDF_MODULE_ID_TXRX), false);
|
OL_TXRX_PDEV_ID, false);
|
||||||
|
|
||||||
close:
|
close:
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
@@ -917,7 +884,7 @@ QDF_STATUS cds_pre_enable(void)
|
|||||||
goto stop_wmi;
|
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) {
|
if (errno) {
|
||||||
cds_err("Failed to attach pdev");
|
cds_err("Failed to attach pdev");
|
||||||
status = qdf_status_from_os_return(errno);
|
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),
|
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) {
|
if (errno) {
|
||||||
cds_err("Failed to attach pdev target; errno:%d", errno);
|
cds_err("Failed to attach pdev target; errno:%d", errno);
|
||||||
goto err_soc_target_detach;
|
goto err_soc_target_detach;
|
||||||
@@ -1121,7 +1088,6 @@ QDF_STATUS cds_post_disable(void)
|
|||||||
{
|
{
|
||||||
tp_wma_handle wma_handle;
|
tp_wma_handle wma_handle;
|
||||||
struct hif_opaque_softc *hif_ctx;
|
struct hif_opaque_softc *hif_ctx;
|
||||||
struct cdp_pdev *txrx_pdev;
|
|
||||||
struct scheduler_ctx *sched_ctx;
|
struct scheduler_ctx *sched_ctx;
|
||||||
QDF_STATUS qdf_status;
|
QDF_STATUS qdf_status;
|
||||||
|
|
||||||
@@ -1137,12 +1103,6 @@ QDF_STATUS cds_post_disable(void)
|
|||||||
return QDF_STATUS_E_INVAL;
|
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 */
|
/* flush any unprocessed scheduler messages */
|
||||||
sched_ctx = scheduler_get_context();
|
sched_ctx = scheduler_get_context();
|
||||||
if (sched_ctx)
|
if (sched_ctx)
|
||||||
@@ -1175,7 +1135,7 @@ QDF_STATUS cds_post_disable(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cdp_pdev_pre_detach(cds_get_context(QDF_MODULE_ID_SOC),
|
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;
|
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));
|
dp_txrx_deinit(cds_get_context(QDF_MODULE_ID_SOC));
|
||||||
|
|
||||||
cdp_pdev_detach(cds_get_context(QDF_MODULE_ID_SOC),
|
cdp_pdev_detach(cds_get_context(QDF_MODULE_ID_SOC), OL_TXRX_PDEV_ID, 1);
|
||||||
(struct cdp_pdev *)ctx, 1);
|
|
||||||
|
|
||||||
cds_set_context(QDF_MODULE_ID_TXRX, NULL);
|
cds_set_context(QDF_MODULE_ID_TXRX, NULL);
|
||||||
ucfg_pmo_psoc_set_txrx_pdev_id(psoc, OL_TXRX_INVALID_PDEV_ID);
|
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
|
* to the target has to be done in the separate pdev_attach_target call
|
||||||
* that is invoked after HTC setup is complete.
|
* 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
|
* @return 0 for success or error code
|
||||||
*/
|
*/
|
||||||
int
|
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
|
* @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
|
* when transmission completes. Rather, these specially-marked frames
|
||||||
* are provided to the callback registered with this function.
|
* 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.)
|
* (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"
|
* @param callback - the function to call when tx frames marked as "no free"
|
||||||
* are done being transmitted
|
* are done being transmitted
|
||||||
* @param ctxt - the context argument provided to the callback function
|
* @param ctxt - the context argument provided to the callback function
|
||||||
*/
|
*/
|
||||||
void
|
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);
|
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
|
#endif
|
||||||
|
|
||||||
void
|
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)
|
ol_txrx_data_tx_cb callback, void *ctxt)
|
||||||
{
|
{
|
||||||
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);
|
||||||
struct ol_txrx_pdev_t *pdev = vdev->pdev;
|
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.func = callback;
|
||||||
pdev->tx_data_callback.ctxt = ctxt;
|
pdev->tx_data_callback.ctxt = ctxt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
QDF_STATUS
|
||||||
ol_txrx_mgmt_tx_cb_set(struct cdp_pdev *ppdev, uint8_t type,
|
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 download_cb,
|
||||||
ol_txrx_mgmt_tx_cb ota_ack_cb, void *ctxt)
|
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);
|
TXRX_ASSERT1(type < OL_TXRX_MGMT_NUM_TYPES);
|
||||||
pdev->tx_mgmt_cb.download_cb = download_cb;
|
pdev->tx_mgmt_cb.download_cb = download_cb;
|
||||||
pdev->tx_mgmt_cb.ota_ack_cb = ota_ack_cb;
|
pdev->tx_mgmt_cb.ota_ack_cb = ota_ack_cb;
|
||||||
pdev->tx_mgmt_cb.ctxt = ctxt;
|
pdev->tx_mgmt_cb.ctxt = ctxt;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ol_txrx_mgmt_send_ext(struct cdp_vdev *pvdev,
|
ol_txrx_mgmt_send_ext(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||||
qdf_nbuf_t tx_mgmt_frm,
|
qdf_nbuf_t tx_mgmt_frm, uint8_t type,
|
||||||
uint8_t type, uint8_t use_6mbps, uint16_t chanfreq)
|
uint8_t use_6mbps, uint16_t chanfreq)
|
||||||
{
|
{
|
||||||
struct ol_txrx_vdev_t *vdev =
|
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||||
(struct ol_txrx_vdev_t *)pvdev;
|
ol_txrx_vdev_handle vdev = ol_txrx_get_vdev_from_soc_vdev_id(soc,
|
||||||
struct ol_txrx_pdev_t *pdev = vdev->pdev;
|
vdev_id);
|
||||||
|
struct ol_txrx_pdev_t *pdev;
|
||||||
struct ol_tx_desc_t *tx_desc;
|
struct ol_tx_desc_t *tx_desc;
|
||||||
struct ol_txrx_msdu_info_t tx_msdu_info;
|
struct ol_txrx_msdu_info_t tx_msdu_info;
|
||||||
int result = 0;
|
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.tso_info.is_tso = 0;
|
||||||
|
|
||||||
tx_msdu_info.htt.action.use_6mbps = use_6mbps;
|
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
|
* ol_txrx_mgmt_tx_cb_set() - Store a callback for delivery
|
||||||
* notifications for management frames.
|
* 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
|
* @type: the type of mgmt frame the callback is used for
|
||||||
* @download_cb: the callback for notification of delivery to the target
|
* @download_cb: the callback for notification of delivery to the target
|
||||||
* @ota_ack_cb: the callback for notification of delivery to the peer
|
* @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
|
* This function is used by the control SW to store a callback pointer
|
||||||
* for a given type of management frame.
|
* for a given type of management frame.
|
||||||
*/
|
*/
|
||||||
void
|
QDF_STATUS
|
||||||
ol_txrx_mgmt_tx_cb_set(struct cdp_pdev *ppdev, uint8_t type,
|
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 download_cb,
|
||||||
ol_txrx_mgmt_tx_cb ota_ack_cb, void *ctxt);
|
ol_txrx_mgmt_tx_cb ota_ack_cb, void *ctxt);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ol_txrx_mgmt_send_ext() - Transmit a management frame
|
* 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
|
* @tx_mgmt_frm: management frame to transmit
|
||||||
* @type: the type of management frame (determines what callback to use)
|
* @type: the type of management frame (determines what callback to use)
|
||||||
* @use_6mbps: specify whether management frame to transmit should
|
* @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
|
* 1 - the frame was not accepted
|
||||||
*/
|
*/
|
||||||
int
|
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,
|
qdf_nbuf_t tx_mgmt_frm,
|
||||||
uint8_t type, uint8_t use_6mbps, uint16_t chanfreq);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!vdev)
|
||||||
|
return;
|
||||||
|
|
||||||
ol_tx_queue_vdev_flush(vdev->pdev, vdev);
|
ol_tx_queue_vdev_flush(vdev->pdev, vdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -76,6 +76,7 @@
|
|||||||
#include "epping_main.h"
|
#include "epping_main.h"
|
||||||
#include <a_types.h>
|
#include <a_types.h>
|
||||||
#include <cdp_txrx_handle.h>
|
#include <cdp_txrx_handle.h>
|
||||||
|
#include <cdp_txrx_cmn_reg.h>
|
||||||
#include "wlan_qct_sys.h"
|
#include "wlan_qct_sys.h"
|
||||||
|
|
||||||
#include <htt_internal.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,
|
QDF_STATUS ol_txrx_peer_state_update(struct cdp_pdev *pdev,
|
||||||
uint8_t *peer_mac,
|
uint8_t *peer_mac,
|
||||||
enum ol_txrx_peer_state state);
|
enum ol_txrx_peer_state state);
|
||||||
static void ol_vdev_rx_set_intrabss_fwd(struct cdp_vdev *vdev,
|
static void ol_vdev_rx_set_intrabss_fwd(struct cdp_soc_t *soc_hdl,
|
||||||
bool val);
|
uint8_t vdev_id, bool val);
|
||||||
int ol_txrx_get_tx_pending(struct cdp_pdev *pdev_handle);
|
int ol_txrx_get_tx_pending(struct cdp_pdev *pdev_handle);
|
||||||
extern void
|
extern void
|
||||||
ol_txrx_set_wmm_param(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
|
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
|
* ol_txrx_pdev_attach() - allocate txrx pdev
|
||||||
* @soc: datapath soc handle
|
* @soc_hdl: datapath soc handle
|
||||||
* @htc_pdev: HTC pdev
|
* @htc_pdev: HTC pdev
|
||||||
* @osdev: os dev
|
* @osdev: os dev
|
||||||
* @pdev_id: pdev identifier for pdev attach
|
* @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
|
* 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
|
* Return: 0 for success
|
||||||
*/
|
*/
|
||||||
int
|
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 i;
|
||||||
uint16_t fail_idx = 0;
|
uint16_t fail_idx = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
uint16_t desc_pool_size;
|
uint16_t desc_pool_size;
|
||||||
struct hif_opaque_softc *osc = cds_get_context(QDF_MODULE_ID_HIF);
|
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);
|
uint16_t desc_element_size = sizeof(union ol_tx_desc_list_elem_t);
|
||||||
union ol_tx_desc_list_elem_t *c_element;
|
union ol_tx_desc_list_elem_t *c_element;
|
||||||
unsigned int sig_bit;
|
unsigned int sig_bit;
|
||||||
uint16_t desc_per_page;
|
uint16_t desc_per_page;
|
||||||
|
|
||||||
if (!osc) {
|
if (!osc || !pdev) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto ol_attach_fail;
|
goto ol_attach_fail;
|
||||||
}
|
}
|
||||||
@@ -1382,7 +1385,8 @@ ol_attach_fail:
|
|||||||
/**
|
/**
|
||||||
* ol_txrx_pdev_attach_target() - send target configuration
|
* 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
|
* The majority of the data SW setup are done by the pdev_attach
|
||||||
* functions, but this function completes the data SW setup by
|
* functions, but this function completes the data SW setup by
|
||||||
@@ -1390,9 +1394,14 @@ ol_attach_fail:
|
|||||||
*
|
*
|
||||||
* Return: 0 - success 1 - failure
|
* 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;
|
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
|
* 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
|
* @force - delete the pdev (and its vdevs and peers) even if
|
||||||
* there are outstanding references by the target to the vdevs
|
* there are outstanding references by the target to the vdevs
|
||||||
* and peers within the pdev
|
* 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
|
* This function is used when the WLAN driver is being removed to
|
||||||
* detach the host data component within the driver.
|
* 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 */
|
/* preconditions */
|
||||||
TXRX_ASSERT2(pdev);
|
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
|
#ifdef QCA_COMPUTE_TX_DELAY
|
||||||
qdf_spinlock_destroy(&pdev->tx_delay.mutex);
|
qdf_spinlock_destroy(&pdev->tx_delay.mutex);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ol_txrx_pdev_detach() - delete the data SW state
|
* 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
|
* @force - delete the pdev (and its vdevs and peers) even if
|
||||||
* there are outstanding references by the target to the vdevs
|
* there are outstanding references by the target to the vdevs
|
||||||
* and peers within the pdev
|
* 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
|
* All virtual devices within the physical device need to be deleted
|
||||||
* (ol_txrx_vdev_detach) before the physical device itself is 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_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
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;
|
struct ol_txrx_stats_req_internal *req, *temp_req;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
if (!soc) {
|
if (!soc) {
|
||||||
ol_txrx_err("soc is NULL");
|
ol_txrx_err("soc is NULL");
|
||||||
return;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*checking to ensure txrx pdev structure is not NULL */
|
/*checking to ensure txrx pdev structure is not NULL */
|
||||||
if (!pdev) {
|
if (!pdev) {
|
||||||
ol_txrx_err("pdev is NULL");
|
ol_txrx_err("pdev is NULL");
|
||||||
return;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
qdf_spin_lock_bh(&pdev->req_list_spinlock);
|
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;
|
soc->pdev_list[pdev->id] = NULL;
|
||||||
qdf_mem_free(pdev);
|
qdf_mem_free(pdev);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(QCA_HL_NETDEV_FLOW_CONTROL)
|
#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
|
* ol_txrx_vdev_attach - Allocate and initialize the data object
|
||||||
* for a new virtual device.
|
* 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_mac_addr - the MAC address of the virtual device
|
||||||
* @vdev_id - the ID used to identify the virtual device to the target
|
* @vdev_id - the ID used to identify the virtual device to the target
|
||||||
* @op_mode - whether this virtual device is operating as an AP,
|
* @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
|
* Return: success: handle to new data vdev object, failure: NULL
|
||||||
*/
|
*/
|
||||||
static struct cdp_vdev *
|
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_mac_addr,
|
||||||
uint8_t vdev_id, enum wlan_op_mode op_mode,
|
uint8_t vdev_id, enum wlan_op_mode op_mode,
|
||||||
enum wlan_op_subtype subtype)
|
enum wlan_op_subtype subtype)
|
||||||
{
|
{
|
||||||
struct ol_txrx_soc_t *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||||
struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev;
|
struct ol_txrx_pdev_t *pdev = ol_txrx_get_pdev_from_pdev_id(soc,
|
||||||
|
pdev_id);
|
||||||
|
|
||||||
struct ol_txrx_vdev_t *vdev;
|
struct ol_txrx_vdev_t *vdev;
|
||||||
QDF_STATUS qdf_status;
|
QDF_STATUS qdf_status;
|
||||||
|
|
||||||
@@ -1711,8 +1734,7 @@ ol_txrx_vdev_attach(struct cdp_pdev *ppdev,
|
|||||||
TAILQ_INIT(&vdev->peer_list);
|
TAILQ_INIT(&vdev->peer_list);
|
||||||
vdev->last_real_peer = NULL;
|
vdev->last_real_peer = NULL;
|
||||||
|
|
||||||
ol_txrx_hl_tdls_flag_reset(ol_txrx_soc_t_to_cdp_soc_t(soc),
|
ol_txrx_hl_tdls_flag_reset(soc_hdl, vdev_id, false);
|
||||||
vdev_id, false);
|
|
||||||
|
|
||||||
#ifdef QCA_IBSS_SUPPORT
|
#ifdef QCA_IBSS_SUPPORT
|
||||||
vdev->ibss_peer_num = 0;
|
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
|
* ol_txrx_vdev_register - Link a vdev's data object with the
|
||||||
* matching OS shim vdev object.
|
* 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
|
* @osif_vdev: the virtual device's OS shim object
|
||||||
* @txrx_ops: (pointers to)functions used for tx and rx data xfer
|
* @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
|
* 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.
|
* 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_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)) {
|
if (qdf_unlikely(!vdev) || qdf_unlikely(!txrx_ops)) {
|
||||||
qdf_print("vdev/txrx_ops is NULL!");
|
qdf_print("vdev/txrx_ops is NULL!");
|
||||||
qdf_assert(0);
|
qdf_assert(0);
|
||||||
return;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev->osif_dev = osif_vdev;
|
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->stats_rx = txrx_ops->rx.stats_rx;
|
||||||
vdev->tx_comp = txrx_ops->tx.tx_comp;
|
vdev->tx_comp = txrx_ops->tx.tx_comp;
|
||||||
txrx_ops->tx.tx = ol_tx_data;
|
txrx_ops->tx.tx = ol_tx_data;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ol_txrx_set_safemode(ol_txrx_vdev_handle vdev, uint32_t val)
|
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
|
* ol_txrx_vdev_detach - Deallocate the specified data virtual
|
||||||
* device object.
|
* 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
|
* @callback: function to call (if non-NULL) once the vdev has
|
||||||
* been wholly deleted
|
* been wholly deleted
|
||||||
* @callback_context: context to provide in the callback
|
* @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
|
* vdev_detach call, or if it's deferred until all in-progress peer
|
||||||
* deletions have completed.
|
* deletions have completed.
|
||||||
*/
|
*/
|
||||||
static void
|
static QDF_STATUS
|
||||||
ol_txrx_vdev_detach(struct cdp_vdev *pvdev,
|
ol_txrx_vdev_detach(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||||
ol_txrx_vdev_delete_cb callback, void *context)
|
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;
|
struct ol_txrx_pdev_t *pdev;
|
||||||
|
|
||||||
|
if (qdf_unlikely(!vdev))
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
/* preconditions */
|
/* preconditions */
|
||||||
TXRX_ASSERT2(vdev);
|
TXRX_ASSERT2(vdev);
|
||||||
pdev = vdev->pdev;
|
pdev = vdev->pdev;
|
||||||
@@ -1988,7 +2023,7 @@ ol_txrx_vdev_detach(struct cdp_vdev *pvdev,
|
|||||||
vdev->delete.callback = callback;
|
vdev->delete.callback = callback;
|
||||||
vdev->delete.context = context;
|
vdev->delete.context = context;
|
||||||
qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
|
qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
|
||||||
return;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
|
qdf_spin_unlock_bh(&pdev->peer_ref_mutex);
|
||||||
qdf_event_destroy(&vdev->wait_delete_comp);
|
qdf_event_destroy(&vdev->wait_delete_comp);
|
||||||
@@ -2020,6 +2055,8 @@ ol_txrx_vdev_detach(struct cdp_vdev *pvdev,
|
|||||||
qdf_mem_free(vdev);
|
qdf_mem_free(vdev);
|
||||||
if (callback)
|
if (callback)
|
||||||
callback(context);
|
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
|
* ol_txrx_peer_attach - Allocate and set up references for a
|
||||||
* data peer object.
|
* data peer object.
|
||||||
* @pvdev - data virtual device object that will directly
|
* @soc_hdl - data path soc handle
|
||||||
* own the data_peer object
|
* @vdev_id - virtual device instance id
|
||||||
* @peer_mac_addr - MAC address of the new peer
|
* @peer_mac_addr - MAC address of the new peer
|
||||||
*
|
*
|
||||||
* When an association with a peer starts, the host's control SW
|
* 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
|
* so a reference within the control peer object can be set to the
|
||||||
* data peer object.
|
* data peer object.
|
||||||
*
|
*
|
||||||
* Return: handle to new data peer object, or NULL if the attach
|
* Return: 0 on success, -1 on failure
|
||||||
* fails
|
|
||||||
*/
|
*/
|
||||||
static void *
|
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 *peer;
|
||||||
struct ol_txrx_peer_t *temp_peer;
|
struct ol_txrx_peer_t *temp_peer;
|
||||||
uint8_t i;
|
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));
|
peer = qdf_mem_malloc(sizeof(*peer));
|
||||||
if (!peer)
|
if (!peer)
|
||||||
return NULL; /* failure */
|
return NULL;
|
||||||
|
|
||||||
/* store provided params */
|
/* store provided params */
|
||||||
peer->vdev = vdev;
|
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.
|
* No Tx in monitor mode, otherwise results in target assert.
|
||||||
* Setting disable_intrabss_fwd to true
|
* 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);
|
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
|
* 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
|
* Return: vdev mac address
|
||||||
*/
|
*/
|
||||||
static uint8_t *
|
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)
|
if (!vdev)
|
||||||
return NULL;
|
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
|
* 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
|
* Return: Handle to control pdev
|
||||||
*/
|
*/
|
||||||
static struct cdp_cfg *
|
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;
|
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.
|
* 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.
|
* @bitmap - bitmap indicating special handling of request.
|
||||||
*
|
|
||||||
* When the host's control SW disassociates a peer, it calls
|
* When the host's control SW disassociates a peer, it calls
|
||||||
* this function to detach and delete the peer. The reference
|
* this function to detach and delete the peer. The reference
|
||||||
* stored in the control peer object to the data peer
|
* stored in the control peer object to the data peer
|
||||||
* object (set up by a call to ol_peer_store()) is provided.
|
* 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;
|
ol_txrx_peer_handle peer;
|
||||||
struct ol_txrx_vdev_t *vdev = peer->vdev;
|
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 */
|
/* redirect peer's rx delivery function to point to a discard func */
|
||||||
peer->rx_opt_proc = ol_rx_discard;
|
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.
|
* reference, added by the PEER_MAP message.
|
||||||
*/
|
*/
|
||||||
ol_txrx_peer_release_ref(peer, PEER_DEBUG_ID_OL_PEER_ATTACH);
|
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)
|
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_peer_handle peer = ppeer;
|
||||||
ol_txrx_pdev_handle pdev = peer->vdev->pdev;
|
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 */
|
/* Clear the peer_id_to_obj map entries */
|
||||||
ol_txrx_peer_remove_obj_map_entries(pdev, peer);
|
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
|
* 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,
|
ol_txrx_peer_unmap_sync_cb peer_unmap_sync,
|
||||||
uint32_t bitmap)
|
uint32_t bitmap)
|
||||||
{
|
{
|
||||||
ol_txrx_peer_handle peer = ppeer;
|
struct ol_txrx_pdev_t *pdev;
|
||||||
ol_txrx_pdev_handle pdev = peer->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);
|
||||||
|
|
||||||
ol_txrx_info_high("%s peer %pK, peer->ref_cnt %d", __func__,
|
if (!vdev || !vdev->pdev)
|
||||||
peer, qdf_atomic_read(&peer->ref_cnt));
|
return;
|
||||||
|
|
||||||
|
pdev = vdev->pdev;
|
||||||
if (!pdev->peer_unmap_sync_cb)
|
if (!pdev->peer_unmap_sync_cb)
|
||||||
pdev->peer_unmap_sync_cb = peer_unmap_sync;
|
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
|
* 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
|
* @peer_unmap_sync - peer unmap sync callback
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
static void ol_txrx_peer_unmap_sync_cb_set(
|
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)
|
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)
|
if (!pdev->peer_unmap_sync_cb)
|
||||||
pdev->peer_unmap_sync_cb = peer_unmap_sync;
|
pdev->peer_unmap_sync_cb = peer_unmap_sync;
|
||||||
@@ -3750,21 +3830,39 @@ struct ol_txrx_stats_req_internal
|
|||||||
return req;
|
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
|
static A_STATUS
|
||||||
ol_txrx_fw_stats_get(struct cdp_vdev *pvdev, struct ol_txrx_stats_req *req,
|
ol_txrx_fw_stats_get(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
||||||
bool per_vdev, bool response_expected)
|
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_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
||||||
struct ol_txrx_pdev_t *pdev = vdev->pdev;
|
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;
|
uint8_t cookie = FW_STATS_DESC_POOL_SIZE;
|
||||||
struct ol_txrx_stats_req_internal *non_volatile_req;
|
struct ol_txrx_stats_req_internal *non_volatile_req;
|
||||||
struct ol_txrx_fw_stats_desc_t *desc = NULL;
|
struct ol_txrx_fw_stats_desc_t *desc = NULL;
|
||||||
struct ol_txrx_fw_stats_desc_elem_t *elem = NULL;
|
struct ol_txrx_fw_stats_desc_elem_t *elem = NULL;
|
||||||
|
|
||||||
|
if (!vdev)
|
||||||
|
return A_EINVAL;
|
||||||
|
|
||||||
|
pdev = vdev->pdev;
|
||||||
if (!pdev ||
|
if (!pdev ||
|
||||||
req->stats_type_upload_mask >= 1 << HTT_DBG_NUM_STATS ||
|
req->stats_type_upload_mask >= 1 << HTT_DBG_NUM_STATS ||
|
||||||
req->stats_type_reset_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);
|
desc = ol_txrx_fw_stats_desc_alloc(pdev);
|
||||||
if (!desc) {
|
if (!desc) {
|
||||||
qdf_mem_free(non_volatile_req);
|
qdf_mem_free(non_volatile_req);
|
||||||
return A_ERROR;
|
return A_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* use the desc id as the cookie */
|
/* 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 */
|
#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)
|
if (!vdev)
|
||||||
return;
|
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
|
* ol_txrx_display_stats() - Display OL TXRX display stats
|
||||||
|
* @soc_hdl: Datapath soc handle
|
||||||
* @value: Module id for which stats needs to be displayed
|
* @value: Module id for which stats needs to be displayed
|
||||||
|
* @verb_level: verbose level of stats to be displayed
|
||||||
*
|
*
|
||||||
* Return: status
|
* Return: status
|
||||||
*/
|
*/
|
||||||
static QDF_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)
|
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;
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
|
||||||
if (!pdev) {
|
if (!pdev) {
|
||||||
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
||||||
"%s: pdev is NULL", __func__);
|
"%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)
|
if (verb_level == QDF_STATS_VERBOSITY_LEVEL_LOW)
|
||||||
ol_tx_dump_flow_pool_info_compact((void *)pdev);
|
ol_tx_dump_flow_pool_info_compact((void *)pdev);
|
||||||
else
|
else
|
||||||
ol_tx_dump_flow_pool_info(soc);
|
ol_tx_dump_flow_pool_info(soc_hdl);
|
||||||
break;
|
break;
|
||||||
case CDP_TXRX_DESC_STATS:
|
case CDP_TXRX_DESC_STATS:
|
||||||
qdf_nbuf_tx_desc_count_display();
|
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
|
* 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
|
* Return: vdev id
|
||||||
* NULL if not found.
|
* 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))
|
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
|
* 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);
|
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_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
|
* ol_txrx_wrapper_register_peer() - register peer
|
||||||
* @pdev: pdev handle
|
* @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
|
* ol_txrx_get_cfg() - get ini/cgf values in legacy dp
|
||||||
* @soc: soc context
|
* @soc_hdl: soc context
|
||||||
* @cfg_param: cfg parameters
|
* @cfg_param: cfg parameters
|
||||||
*
|
*
|
||||||
* Return: none
|
* 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;
|
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;
|
uint32_t value = 0;
|
||||||
|
|
||||||
if (!pdev) {
|
if (!pdev) {
|
||||||
@@ -5770,7 +5876,6 @@ static struct cdp_cmn_ops ol_ops_cmn = {
|
|||||||
.txrx_vdev_register = ol_txrx_vdev_register,
|
.txrx_vdev_register = ol_txrx_vdev_register,
|
||||||
.txrx_soc_detach = ol_txrx_soc_detach,
|
.txrx_soc_detach = ol_txrx_soc_detach,
|
||||||
.txrx_get_vdev_mac_addr = ol_txrx_get_vdev_mac_addr,
|
.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_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_get_mon_vdev_from_pdev = ol_txrx_get_mon_vdev_from_pdev,
|
||||||
.txrx_mgmt_send_ext = ol_txrx_mgmt_send_ext,
|
.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
|
* 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
|
* Return: vdev id
|
||||||
* NULL if not found.
|
* 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
|
* 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;
|
int max_to_accept;
|
||||||
|
|
||||||
|
if (!vdev)
|
||||||
|
return;
|
||||||
|
|
||||||
qdf_spin_lock_bh(&vdev->ll_pause.mutex);
|
qdf_spin_lock_bh(&vdev->ll_pause.mutex);
|
||||||
if (vdev->ll_pause.paused_reason) {
|
if (vdev->ll_pause.paused_reason) {
|
||||||
qdf_spin_unlock_bh(&vdev->ll_pause.mutex);
|
qdf_spin_unlock_bh(&vdev->ll_pause.mutex);
|
||||||
|
@@ -17,6 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dp_txrx.h>
|
#include <dp_txrx.h>
|
||||||
|
#include "dp_peer.h"
|
||||||
|
#include "dp_internal.h"
|
||||||
#include <cdp_txrx_cmn_struct.h>
|
#include <cdp_txrx_cmn_struct.h>
|
||||||
#include <cdp_txrx_peer_ops.h>
|
#include <cdp_txrx_peer_ops.h>
|
||||||
#include <cds_sched.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;
|
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
|
* dp_rx_thread_process_nbufq() - process nbuf queue of a thread
|
||||||
* @rx_thread - rx_thread whose nbuf queue needs to be processed
|
* @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)
|
static int dp_rx_thread_process_nbufq(struct dp_rx_thread *rx_thread)
|
||||||
{
|
{
|
||||||
qdf_nbuf_t nbuf_list;
|
qdf_nbuf_t nbuf_list;
|
||||||
struct cdp_vdev *vdev;
|
uint8_t vdev_id;
|
||||||
ol_txrx_rx_fp stack_fn;
|
ol_txrx_rx_fp stack_fn;
|
||||||
ol_osif_vdev_handle osif_vdev;
|
ol_osif_vdev_handle osif_vdev;
|
||||||
ol_txrx_soc_handle soc;
|
ol_txrx_soc_handle soc;
|
||||||
uint32_t num_list_elements = 0;
|
uint32_t num_list_elements = 0;
|
||||||
struct cdp_pdev *pdev;
|
|
||||||
|
|
||||||
struct dp_txrx_handle_cmn *txrx_handle_cmn;
|
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);
|
dp_rx_thread_get_txrx_handle(rx_thread->rtm_handle_cmn);
|
||||||
|
|
||||||
soc = dp_txrx_get_soc_from_ext_handle(txrx_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) {
|
||||||
|
dp_err("invalid soc!");
|
||||||
if (!soc || !pdev) {
|
|
||||||
dp_err("invalid soc or pdev!");
|
|
||||||
QDF_BUG(0);
|
QDF_BUG(0);
|
||||||
return -EFAULT;
|
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);
|
QDF_NBUF_CB_RX_NUM_ELEMENTS_IN_LIST(nbuf_list);
|
||||||
rx_thread->stats.nbuf_dequeued += num_list_elements;
|
rx_thread->stats.nbuf_dequeued += num_list_elements;
|
||||||
|
|
||||||
vdev = dp_rx_thread_get_nbuf_vdev_handle(soc, pdev, rx_thread,
|
vdev_id = QDF_NBUF_CB_RX_VDEV_ID(nbuf_list);
|
||||||
nbuf_list);
|
cdp_get_os_rx_handles_from_vdev(soc, vdev_id, &stack_fn,
|
||||||
if (!vdev) {
|
|
||||||
qdf_nbuf_list_free(nbuf_list);
|
|
||||||
goto dequeue_rx_thread;
|
|
||||||
}
|
|
||||||
cdp_get_os_rx_handles_from_vdev(soc, vdev, &stack_fn,
|
|
||||||
&osif_vdev);
|
&osif_vdev);
|
||||||
if (!stack_fn || !osif_vdev) {
|
if (!stack_fn || !osif_vdev) {
|
||||||
rx_thread->stats.dropped_invalid_os_rx_handles +=
|
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;
|
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) {
|
if (!txrx_ops.tx.tx) {
|
||||||
hdd_err("%s vdev register fail", __func__);
|
hdd_err("%s vdev register fail", __func__);
|
||||||
return QDF_STATUS_E_FAILURE;
|
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;
|
struct ol_txrx_ops txrx_ops;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
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
|
* 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_stack = NULL;
|
||||||
txrx_ops.rx.rx_flush = NULL;
|
txrx_ops.rx.rx_flush = NULL;
|
||||||
}
|
}
|
||||||
txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
cdp_vdev_register(soc, adapter->vdev_id, (ol_osif_vdev_handle)adapter,
|
||||||
(struct cdp_pdev *)pdev,
|
|
||||||
adapter->vdev_id);
|
|
||||||
if (!txrx_vdev)
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
|
|
||||||
cdp_vdev_register(soc, txrx_vdev,
|
|
||||||
adapter,
|
|
||||||
&txrx_ops);
|
&txrx_ops);
|
||||||
adapter->tx_fn = txrx_ops.tx.tx;
|
adapter->tx_fn = txrx_ops.tx.tx;
|
||||||
txrx_ops.rx.stats_rx = hdd_tx_rx_collect_connectivity_stats_info;
|
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;
|
true;
|
||||||
hdd_info("tx blocked for vdev: %d",
|
hdd_info("tx blocked for vdev: %d",
|
||||||
adapter->vdev_id);
|
adapter->vdev_id);
|
||||||
if (adapter->txrx_vdev)
|
if (adapter->vdev_id != WLAN_UMAC_VDEV_ID_MAX)
|
||||||
cdp_fc_vdev_flush(
|
cdp_fc_vdev_flush(
|
||||||
cds_get_context(QDF_MODULE_ID_SOC),
|
cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
adapter->vdev_id);
|
adapter->vdev_id);
|
||||||
@@ -8078,7 +8078,6 @@ static void hdd_display_periodic_stats(struct hdd_context *hdd_ctx,
|
|||||||
{
|
{
|
||||||
static uint32_t counter;
|
static uint32_t counter;
|
||||||
static bool data_in_time_period;
|
static bool data_in_time_period;
|
||||||
ol_txrx_pdev_handle pdev;
|
|
||||||
ol_txrx_soc_handle soc;
|
ol_txrx_soc_handle soc;
|
||||||
uint32_t periodic_stats_disp_time = 0;
|
uint32_t periodic_stats_disp_time = 0;
|
||||||
|
|
||||||
@@ -8093,12 +8092,6 @@ static void hdd_display_periodic_stats(struct hdd_context *hdd_ctx,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
|
||||||
if (!pdev) {
|
|
||||||
hdd_err("pdev is NULL");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
counter++;
|
counter++;
|
||||||
if (data_in_interval)
|
if (data_in_interval)
|
||||||
data_in_time_period = 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 hdd_station_ctx *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||||
struct ol_txrx_ops txrx_ops;
|
struct ol_txrx_ops txrx_ops;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
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,
|
qdf_status = cdp_peer_register_ocb_peer(soc,
|
||||||
adapter->mac_addr.bytes);
|
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 */
|
/* Register the vdev transmit and receive functions */
|
||||||
qdf_mem_zero(&txrx_ops, sizeof(txrx_ops));
|
qdf_mem_zero(&txrx_ops, sizeof(txrx_ops));
|
||||||
txrx_ops.rx.rx = hdd_rx_packet_cbk;
|
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);
|
||||||
txrx_ops.rx.stats_rx = hdd_tx_rx_collect_connectivity_stats_info;
|
txrx_ops.rx.stats_rx = hdd_tx_rx_collect_connectivity_stats_info;
|
||||||
adapter->tx_fn = txrx_ops.tx.tx;
|
adapter->tx_fn = txrx_ops.tx.tx;
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
#include <cds_sched.h>
|
#include <cds_sched.h>
|
||||||
#include <cds_utils.h>
|
#include <cds_utils.h>
|
||||||
#include "wlan_hdd_rx_monitor.h"
|
#include "wlan_hdd_rx_monitor.h"
|
||||||
|
#include "ol_txrx.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hdd_rx_monitor_callback(): Callback function for receive monitor mode
|
* 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)
|
int hdd_enable_monitor_mode(struct net_device *dev)
|
||||||
{
|
{
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
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);
|
hdd_enter_dev(dev);
|
||||||
|
|
||||||
return cdp_set_monitor_mode(soc,
|
vdev_id = cdp_get_mon_vdev_from_pdev(soc, OL_TXRX_PDEV_ID);
|
||||||
(struct cdp_vdev *)cdp_get_mon_vdev_from_pdev(soc,
|
if (vdev_id < 0)
|
||||||
(struct cdp_pdev *)pdev), false);
|
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;
|
struct ol_txrx_ops txrx_ops;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||||
struct cdp_vdev *txrx_vdev = NULL;
|
|
||||||
struct hdd_ap_ctx *ap_ctx;
|
struct hdd_ap_ctx *ap_ctx;
|
||||||
struct hdd_station_info *sta_info;
|
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_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,
|
cdp_vdev_register(soc,
|
||||||
txrx_vdev,
|
adapter->vdev_id,
|
||||||
adapter,
|
(ol_osif_vdev_handle)adapter,
|
||||||
&txrx_ops);
|
&txrx_ops);
|
||||||
adapter->txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
adapter->txrx_vdev = cdp_get_vdev_from_vdev_id(soc,
|
||||||
(struct cdp_pdev *)pdev,
|
(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));
|
qdf_mem_zero(&txrx_ops, sizeof(txrx_ops));
|
||||||
txrx_ops.rx.rx = hdd_mon_rx_packet_cbk;
|
txrx_ops.rx.rx = hdd_mon_rx_packet_cbk;
|
||||||
hdd_monitor_set_rx_monitor_cb(&txrx_ops, hdd_rx_monitor_callback);
|
hdd_monitor_set_rx_monitor_cb(&txrx_ops, hdd_rx_monitor_callback);
|
||||||
cdp_vdev_register(soc,
|
cdp_vdev_register(soc, adapter->vdev_id,
|
||||||
cdp_get_mon_vdev_from_pdev(soc, pdev),
|
(ol_osif_vdev_handle)adapter,
|
||||||
adapter, &txrx_ops);
|
&txrx_ops);
|
||||||
/* peer is created wma_vdev_attach->wma_create_peer */
|
/* peer is created wma_vdev_attach->wma_create_peer */
|
||||||
qdf_status = cdp_peer_register(soc,
|
qdf_status = cdp_peer_register(soc,
|
||||||
(struct cdp_pdev *)pdev, &sta_desc);
|
(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;
|
uint32_t frame_len, status;
|
||||||
QDF_STATUS qdf_status;
|
QDF_STATUS qdf_status;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
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);
|
mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
|
||||||
body_ptr = WMA_GET_RX_MPDU_DATA(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);
|
status, frame_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
peer = cdp_peer_get_ref_by_addr(soc, pdev, mac_hdr->sa,
|
qdf_status = cdp_addba_requestprocess(
|
||||||
PEER_DEBUG_ID_WMA_ADDBA_REQ);
|
soc, mac_hdr->sa,
|
||||||
if (!peer) {
|
session->vdev_id,
|
||||||
pe_err("PEER [%pM] not found", mac_hdr->sa);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
qdf_status = cdp_addba_requestprocess(soc, peer,
|
|
||||||
addba_req->DialogToken.token,
|
addba_req->DialogToken.token,
|
||||||
addba_req->addba_param_set.tid,
|
addba_req->addba_param_set.tid,
|
||||||
addba_req->ba_timeout.timeout,
|
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);
|
addba_req->addba_param_set.amsdu_supp);
|
||||||
if (qdf_status != QDF_STATUS_SUCCESS) {
|
if (qdf_status != QDF_STATUS_SUCCESS) {
|
||||||
pe_err("Failed to send addba response frame");
|
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,
|
addba_req->addba_param_set.tid,
|
||||||
WMI_MGMT_TX_COMP_TYPE_DISCARD);
|
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");
|
pe_err_rl("Failed to process addba request");
|
||||||
}
|
}
|
||||||
|
|
||||||
cdp_peer_release_ref(soc, peer, PEER_DEBUG_ID_WMA_ADDBA_REQ);
|
|
||||||
|
|
||||||
error:
|
error:
|
||||||
qdf_mem_free(addba_req);
|
qdf_mem_free(addba_req);
|
||||||
return;
|
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;
|
uint32_t frame_len, status;
|
||||||
QDF_STATUS qdf_status;
|
QDF_STATUS qdf_status;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
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);
|
mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info);
|
||||||
body_ptr = WMA_GET_RX_MPDU_DATA(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);
|
status, frame_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
peer = cdp_peer_get_ref_by_addr(soc, pdev, mac_hdr->sa,
|
qdf_status = cdp_delba_process(soc, mac_hdr->sa, session->vdev_id,
|
||||||
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,
|
|
||||||
delba_req->delba_param_set.tid, delba_req->Reason.code);
|
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)
|
if (QDF_STATUS_SUCCESS != qdf_status)
|
||||||
pe_err("Failed to process delba request");
|
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;
|
tSirMacMgmtHdr *mac_hdr;
|
||||||
tDot11faddba_rsp rsp;
|
tDot11faddba_rsp rsp;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
void *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
|
||||||
void *peer;
|
|
||||||
uint32_t frame_len;
|
uint32_t frame_len;
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
|
struct wmi_mgmt_params *mgmt_params = (struct wmi_mgmt_params *)params;
|
||||||
|
|
||||||
if (tx_complete == WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK)
|
if (tx_complete == WMI_MGMT_TX_COMP_TYPE_COMPLETE_OK)
|
||||||
pe_debug("Add ba response successfully sent");
|
pe_debug("Add ba response successfully sent");
|
||||||
@@ -2518,15 +2517,8 @@ static QDF_STATUS lim_addba_rsp_tx_complete_cnf(void *context,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
peer = cdp_peer_get_ref_by_addr(soc, pdev, mac_hdr->da,
|
cdp_addba_resp_tx_completion(soc, mac_hdr->da, mgmt_params->vdev_id,
|
||||||
PEER_DEBUG_ID_WMA_ADDBA_REQ);
|
rsp.addba_param_set.tid, tx_complete);
|
||||||
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);
|
|
||||||
error:
|
error:
|
||||||
if (buf)
|
if (buf)
|
||||||
qdf_nbuf_free(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;
|
uint16_t buff_size, status_code, batimeout;
|
||||||
uint8_t dialog_token;
|
uint8_t dialog_token;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
void *peer, *pdev;
|
|
||||||
uint8_t he_frag = 0;
|
uint8_t he_frag = 0;
|
||||||
tpDphHashNode sta_ds;
|
tpDphHashNode sta_ds;
|
||||||
uint16_t aid;
|
uint16_t aid;
|
||||||
@@ -5004,23 +4995,10 @@ QDF_STATUS lim_send_addba_response_frame(struct mac_context *mac_ctx,
|
|||||||
|
|
||||||
vdev_id = session->vdev_id;
|
vdev_id = session->vdev_id;
|
||||||
|
|
||||||
pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
cdp_addba_responsesetup(soc, peer_mac, vdev_id, tid,
|
||||||
if (!pdev) {
|
&dialog_token, &status_code, &buff_size,
|
||||||
pe_err("pdev is NULL");
|
&batimeout);
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
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));
|
qdf_mem_zero((uint8_t *) &frm, sizeof(frm));
|
||||||
frm.Category.category = ACTION_CATEGORY_BACK;
|
frm.Category.category = ACTION_CATEGORY_BACK;
|
||||||
frm.Action.action = ADDBA_RESPONSE;
|
frm.Action.action = ADDBA_RESPONSE;
|
||||||
|
@@ -1952,36 +1952,6 @@ uint16_t wma_vdev_get_pause_bitmap(uint8_t vdev_id)
|
|||||||
return iface->pause_bitmap;
|
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
|
* wma_vdev_is_device_in_low_pwr_mode - is device in power save mode
|
||||||
* @vdev_id: the Id of the vdev to configure
|
* @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_EVENTID_param_tlvs *param_buf;
|
||||||
wmi_peer_state_event_fixed_param *event;
|
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;
|
tp_wma_handle wma_handle = (tp_wma_handle) handle;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!event_buff) {
|
if (!event_buff) {
|
||||||
WMA_LOGE("%s: Received NULL event ptr from FW", __func__);
|
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;
|
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),
|
if ((cdp_get_opmode(cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
event->vdev_id) == wlan_op_mode_sta) &&
|
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;
|
tp_wma_handle wma_handle = (tp_wma_handle) wma_context;
|
||||||
struct wlan_objmgr_pdev *pdev = (struct wlan_objmgr_pdev *)
|
struct wlan_objmgr_pdev *pdev = (struct wlan_objmgr_pdev *)
|
||||||
wma_handle->pdev;
|
wma_handle->pdev;
|
||||||
|
struct wmi_mgmt_params mgmt_params = {};
|
||||||
uint16_t desc_id;
|
uint16_t desc_id;
|
||||||
|
uint8_t vdev_id;
|
||||||
|
|
||||||
desc_id = QDF_NBUF_CB_MGMT_TXRX_DESC_ID(netbuf);
|
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 *cds_handle =
|
||||||
(struct cds_context *) (wma_handle->cds_context);
|
(struct cds_context *) (wma_handle->cds_context);
|
||||||
|
|
||||||
/* Get the txRx Pdev handle */
|
/* Get the txRx Pdev ID */
|
||||||
struct cdp_pdev *txrx_pdev = cds_handle->pdev_txrx_ctx;
|
uint8_t pdev_id = WMI_PDEV_ID_SOC;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
|
|
||||||
/* Register for Tx Management Frames */
|
/* 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_dload_comp_hldr,
|
||||||
wma_mgmt_tx_ack_comp_hdlr, wma_handle);
|
wma_mgmt_tx_ack_comp_hdlr, wma_handle);
|
||||||
|
|
||||||
/* Register callback to send PEER_UNMAP_RESPONSE cmd*/
|
/* Register callback to send PEER_UNMAP_RESPONSE cmd*/
|
||||||
if (cdp_cfg_get_peer_unmap_conf_support(soc))
|
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);
|
wma_peer_unmap_conf_cb);
|
||||||
|
|
||||||
/* Store the Mac Context */
|
/* 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);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
|
|
||||||
/* Get the Vos Context */
|
/* Get the txRx Pdev ID */
|
||||||
struct cds_context *cds_handle =
|
uint8_t pdev_id = WMI_PDEV_ID_SOC;
|
||||||
(struct cds_context *) (wma_handle->cds_context);
|
|
||||||
|
|
||||||
/* Get the txRx Pdev handle */
|
|
||||||
struct cdp_pdev *txrx_pdev = cds_handle->pdev_txrx_ctx;
|
|
||||||
|
|
||||||
if (!soc) {
|
if (!soc) {
|
||||||
WMA_LOGE("%s:SOC context is NULL", __func__);
|
WMA_LOGE("%s:SOC context is NULL", __func__);
|
||||||
return QDF_STATUS_E_FAILURE;
|
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 */
|
/* 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 */
|
/* 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;
|
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||||
int32_t is_high_latency;
|
int32_t is_high_latency;
|
||||||
bool is_wmi_mgmt_tx = false;
|
bool is_wmi_mgmt_tx = false;
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
enum frame_index tx_frm_index = GENERIC_NODOWNLD_NOACK_COMP_INDEX;
|
enum frame_index tx_frm_index = GENERIC_NODOWNLD_NOACK_COMP_INDEX;
|
||||||
tpSirMacFrameCtl pFc = (tpSirMacFrameCtl) (qdf_nbuf_data(tx_frame));
|
tpSirMacFrameCtl pFc = (tpSirMacFrameCtl) (qdf_nbuf_data(tx_frame));
|
||||||
uint8_t use_6mbps = 0;
|
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;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
iface = &wma_handle->interfaces[vdev_id];
|
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) {
|
if (!soc) {
|
||||||
WMA_LOGE("%s:SOC context is NULL", __func__);
|
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) {
|
if (frmType == TXRX_FRM_802_11_DATA) {
|
||||||
qdf_nbuf_t ret;
|
qdf_nbuf_t ret;
|
||||||
qdf_nbuf_t skb = (qdf_nbuf_t) tx_frame;
|
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 wma_decap_info_t decap_info;
|
||||||
struct ieee80211_frame *wh =
|
struct ieee80211_frame *wh =
|
||||||
(struct ieee80211_frame *)qdf_nbuf_data(skb);
|
(struct ieee80211_frame *)qdf_nbuf_data(skb);
|
||||||
unsigned long curr_timestamp = qdf_mc_timer_get_system_ticks();
|
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
|
* 1) TxRx Module expects data input to be 802.3 format
|
||||||
* So Decapsulation has to be done.
|
* 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;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctrl_pdev = cdp_get_ctrl_pdev_from_vdev(soc,
|
ctrl_pdev = cdp_get_ctrl_pdev_from_vdev(soc, vdev_id);
|
||||||
txrx_vdev);
|
|
||||||
if (!ctrl_pdev) {
|
if (!ctrl_pdev) {
|
||||||
WMA_LOGE("ol_pdev_handle is NULL\n");
|
WMA_LOGE("ol_pdev_handle is NULL\n");
|
||||||
cds_packet_free((void *)tx_frame);
|
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 wma_txrx_node *iface = &wma_handle->interfaces[vdev_id];
|
||||||
struct wlan_objmgr_vdev *vdev = iface->vdev;
|
struct wlan_objmgr_vdev *vdev = iface->vdev;
|
||||||
struct cdp_vdev *cdp_vdev;
|
|
||||||
|
|
||||||
if (!vdev) {
|
if (!vdev) {
|
||||||
WMA_LOGE(FL("vdev is NULL"));
|
WMA_LOGE(FL("vdev is NULL"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cdp_vdev = wlan_vdev_get_dp_handle(vdev);
|
if (soc && wlan_vdev_get_id(vdev) != WLAN_INVALID_VDEV_ID) {
|
||||||
if (soc && cdp_vdev) {
|
|
||||||
wlan_vdev_set_dp_handle(vdev, NULL);
|
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;
|
vdev = iface->vdev;
|
||||||
|
|
||||||
|
iface->vdev_active = false;
|
||||||
iface->vdev = NULL;
|
iface->vdev = NULL;
|
||||||
if (vdev)
|
if (vdev)
|
||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
|
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};
|
struct peer_flush_params param = {0};
|
||||||
uint8_t *peer_mac_addr;
|
uint8_t *peer_mac_addr;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
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;
|
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||||
uint32_t bitmap = 1 << CDP_PEER_DELETE_NO_SPECIAL;
|
uint32_t bitmap = 1 << CDP_PEER_DELETE_NO_SPECIAL;
|
||||||
bool peer_unmap_conf_support_enabled;
|
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);
|
QDF_BUG(0);
|
||||||
return QDF_STATUS_E_INVAL;
|
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)
|
if (roam_synch_in_progress)
|
||||||
goto peer_detach;
|
goto peer_detach;
|
||||||
@@ -1575,8 +1562,8 @@ QDF_STATUS wma_remove_peer(tp_wma_handle wma, uint8_t *bssid,
|
|||||||
}
|
}
|
||||||
|
|
||||||
peer_detach:
|
peer_detach:
|
||||||
WMA_LOGD("%s: vdev %pK is detaching %pK with peer_addr %pM vdevid %d peer_count %d",
|
WMA_LOGD("%s: vdevid %d is detaching with peer_addr %pM peer_count %d",
|
||||||
__func__, vdev, peer, peer_mac_addr, vdev_id,
|
__func__, vdev_id, peer_mac_addr,
|
||||||
wma->interfaces[vdev_id].peer_count);
|
wma->interfaces[vdev_id].peer_count);
|
||||||
/* Copy peer mac to find and delete objmgr peer */
|
/* Copy peer mac to find and delete objmgr peer */
|
||||||
qdf_mem_copy(peer_mac, peer_mac_addr, QDF_MAC_ADDR_SIZE);
|
qdf_mem_copy(peer_mac, peer_mac_addr, QDF_MAC_ADDR_SIZE);
|
||||||
@@ -1587,7 +1574,7 @@ peer_detach:
|
|||||||
__func__, peer_mac_addr);
|
__func__, peer_mac_addr);
|
||||||
cdp_peer_detach_force_delete(soc, peer);
|
cdp_peer_detach_force_delete(soc, peer);
|
||||||
} else {
|
} else {
|
||||||
cdp_peer_delete_sync(soc, peer,
|
cdp_peer_delete_sync(soc, vdev_id, peer_mac_addr,
|
||||||
wma_peer_unmap_conf_cb,
|
wma_peer_unmap_conf_cb,
|
||||||
bitmap);
|
bitmap);
|
||||||
}
|
}
|
||||||
@@ -1597,11 +1584,11 @@ peer_detach:
|
|||||||
__func__, peer_mac_addr);
|
__func__, peer_mac_addr);
|
||||||
}
|
}
|
||||||
if (peer_unmap_conf_support_enabled)
|
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,
|
wma_peer_unmap_conf_cb,
|
||||||
bitmap);
|
bitmap);
|
||||||
else
|
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);
|
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
|
* where the HTT peer map event is received before the peer object
|
||||||
* is created in the data path
|
* 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) {
|
if (!peer) {
|
||||||
WMA_LOGE("%s : Unable to attach peer %pM", __func__, peer_addr);
|
WMA_LOGE("%s : Unable to attach peer %pM", __func__, peer_addr);
|
||||||
wlan_objmgr_peer_obj_delete(obj_peer);
|
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",
|
WMA_LOGD("%s: LFR3: Created peer %pK with peer_addr %pM vdev_id %d, peer_count - %d",
|
||||||
__func__, peer, peer_addr, vdev_id,
|
__func__, peer, peer_addr, vdev_id,
|
||||||
wma->interfaces[vdev_id].peer_count);
|
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;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
param.peer_addr = peer_addr;
|
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__);
|
WMA_LOGE("%s : Unable to create peer in Target", __func__);
|
||||||
if (cdp_cfg_get_peer_unmap_conf_support(dp_soc))
|
if (cdp_cfg_get_peer_unmap_conf_support(dp_soc))
|
||||||
cdp_peer_delete_sync(
|
cdp_peer_delete_sync(
|
||||||
dp_soc, peer,
|
dp_soc, vdev_id, peer_addr,
|
||||||
wma_peer_unmap_conf_cb,
|
wma_peer_unmap_conf_cb,
|
||||||
1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
|
1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
|
||||||
else
|
else
|
||||||
cdp_peer_delete(
|
cdp_peer_delete(
|
||||||
dp_soc, peer,
|
dp_soc, vdev_id, peer_addr,
|
||||||
1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
|
1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
|
||||||
wlan_objmgr_peer_obj_delete(obj_peer);
|
wlan_objmgr_peer_obj_delete(obj_peer);
|
||||||
goto err;
|
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,
|
wlan_roam_debug_log(vdev_id, DEBUG_PEER_CREATE_SEND,
|
||||||
DEBUG_INVALID_PEER_ID, peer_addr, peer, 0, 0);
|
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",
|
WMA_LOGD("%s: Initialized peer with peer_addr %pM vdev_id %d",
|
||||||
__func__, peer_addr, vdev_id);
|
__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) {
|
if (!mac_addr_raw) {
|
||||||
WMA_LOGE("%s: peer mac addr is NULL", __func__);
|
WMA_LOGE("%s: peer mac addr is NULL", __func__);
|
||||||
return QDF_STATUS_E_FAULT;
|
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,
|
struct del_bss_resp *vdev_stop_resp,
|
||||||
uint8_t type)
|
uint8_t type)
|
||||||
{
|
{
|
||||||
void *peer, *vdev;
|
void *peer;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
uint8_t *mac_addr = NULL;
|
uint8_t *mac_addr = NULL;
|
||||||
struct wma_target_req *del_req;
|
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;
|
QDF_STATUS qdf_status;
|
||||||
struct qdf_mac_addr bssid;
|
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) ||
|
if (wma_is_vdev_in_ibss_mode(wma, vdev_id) ||
|
||||||
WMA_IS_VDEV_IN_NDI_MODE(wma->interfaces, 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) {
|
if (!mac_addr) {
|
||||||
WMA_LOGE(FL("mac_addr is NULL for vdev_id = %d"),
|
WMA_LOGE(FL("mac_addr is NULL for vdev_id = %d"),
|
||||||
vdev_id);
|
vdev_id);
|
||||||
@@ -2293,11 +2274,13 @@ __wma_handle_vdev_stop_rsp(struct vdev_stop_response *resp_event)
|
|||||||
__func__, peer, bssid.bytes,
|
__func__, peer, bssid.bytes,
|
||||||
resp_event->vdev_id, iface->peer_count);
|
resp_event->vdev_id, iface->peer_count);
|
||||||
if (cdp_cfg_get_peer_unmap_conf_support(soc))
|
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,
|
wma_peer_unmap_conf_cb,
|
||||||
1 << CDP_PEER_DELETE_NO_SPECIAL);
|
1 << CDP_PEER_DELETE_NO_SPECIAL);
|
||||||
else
|
else
|
||||||
cdp_peer_delete(soc, peer,
|
cdp_peer_delete(soc, resp_event->vdev_id,
|
||||||
|
bssid.bytes,
|
||||||
1 << CDP_PEER_DELETE_NO_SPECIAL);
|
1 << CDP_PEER_DELETE_NO_SPECIAL);
|
||||||
wma_remove_objmgr_peer(wma, resp_event->vdev_id,
|
wma_remove_objmgr_peer(wma, resp_event->vdev_id,
|
||||||
bssid.bytes);
|
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");
|
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_data_tx_ack_comp_hdlr,
|
||||||
wma_handle);
|
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,
|
void wma_set_vdev_intrabss_fwd(tp_wma_handle wma_handle,
|
||||||
tpDisableIntraBssFwd pdis_intra_fwd)
|
tpDisableIntraBssFwd pdis_intra_fwd)
|
||||||
{
|
{
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
struct wlan_objmgr_vdev *vdev;
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
|
||||||
WMA_LOGD("%s:intra_fwd:vdev(%d) intrabss_dis=%s",
|
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"));
|
(pdis_intra_fwd->disableintrabssfwd ? "true" : "false"));
|
||||||
|
|
||||||
vdev = wma_handle->interfaces[pdis_intra_fwd->sessionId].vdev;
|
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),
|
cdp_cfg_vdev_rx_set_intrabss_fwd(cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
txrx_vdev,
|
pdis_intra_fwd->sessionId,
|
||||||
pdis_intra_fwd->disableintrabssfwd);
|
pdis_intra_fwd->disableintrabssfwd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -915,17 +915,10 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
|
|||||||
break;
|
break;
|
||||||
case GEN_CMD:
|
case GEN_CMD:
|
||||||
{
|
{
|
||||||
struct cdp_vdev *vdev = NULL;
|
|
||||||
struct wma_txrx_node *intr = wma->interfaces;
|
struct wma_txrx_node *intr = wma->interfaces;
|
||||||
wmi_vdev_custom_aggr_type_t aggr_type =
|
wmi_vdev_custom_aggr_type_t aggr_type =
|
||||||
WMI_VDEV_CUSTOM_AGGR_TYPE_AMSDU;
|
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,
|
WMA_LOGD("gen pid %d pval %d", privcmd->param_id,
|
||||||
privcmd->param_value);
|
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) {
|
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);
|
privcmd->param_value, 0);
|
||||||
if (ret)
|
if (ret)
|
||||||
WMA_LOGE("cdp_aggr_cfg set ampdu failed ret %d",
|
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;
|
vdev->beacon = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vdev->vdev_active == true)
|
||||||
|
vdev->vdev_active = false;
|
||||||
|
|
||||||
if (vdev->addBssStaContext) {
|
if (vdev->addBssStaContext) {
|
||||||
qdf_mem_free(vdev->addBssStaContext);
|
qdf_mem_free(vdev->addBssStaContext);
|
||||||
vdev->addBssStaContext = NULL;
|
vdev->addBssStaContext = NULL;
|
||||||
@@ -3320,8 +3316,6 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
|
|||||||
wma_vdev_update_pause_bitmap);
|
wma_vdev_update_pause_bitmap);
|
||||||
pmo_register_get_pause_bitmap(wma_handle->psoc,
|
pmo_register_get_pause_bitmap(wma_handle->psoc,
|
||||||
wma_vdev_get_pause_bitmap);
|
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,
|
pmo_register_is_device_in_low_pwr_mode(wma_handle->psoc,
|
||||||
wma_vdev_is_device_in_low_pwr_mode);
|
wma_vdev_is_device_in_low_pwr_mode);
|
||||||
pmo_register_get_dtim_period_callback(wma_handle->psoc,
|
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_is_device_in_low_pwr_mode(wma_handle->psoc);
|
||||||
pmo_unregister_get_pause_bitmap(wma_handle->psoc);
|
pmo_unregister_get_pause_bitmap(wma_handle->psoc);
|
||||||
pmo_unregister_pause_bitmap_notifier(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);
|
tgt_psoc_info = wlan_psoc_get_tgt_if_handle(wma_handle->psoc);
|
||||||
init_deinit_free_num_units(wma_handle->psoc, tgt_psoc_info);
|
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;
|
struct wma_txrx_node *iface = NULL;
|
||||||
enum cdp_sec_type sec_type = cdp_sec_type_none;
|
enum cdp_sec_type sec_type = cdp_sec_type_none;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
struct cdp_pdev *txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
void *txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX);
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
uint32_t pn[4] = {0, 0, 0, 0};
|
uint32_t pn[4] = {0, 0, 0, 0};
|
||||||
struct cdp_peer *peer;
|
struct cdp_peer *peer;
|
||||||
bool skip_set_key;
|
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;
|
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);
|
peer = cdp_peer_find_by_addr(soc, txrx_pdev, key_params->peer_mac);
|
||||||
iface = &wma_handle->interfaces[key_params->vdev_id];
|
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->unicast) ? "unicast" : "group",
|
||||||
key_params->key_rsc[3], key_params->key_rsc[2],
|
key_params->key_rsc[3], key_params->key_rsc[2],
|
||||||
key_params->key_rsc[1], key_params->key_rsc[0]);
|
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,
|
cdp_set_key(soc, peer, key_params->unicast,
|
||||||
(uint32_t *)(key_params->key_data +
|
(uint32_t *)(key_params->key_data +
|
||||||
WMA_IV_KEY_LEN +
|
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;
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
uint32_t def_key_idx = 0;
|
uint32_t def_key_idx = 0;
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
int opmode;
|
int opmode;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
struct wlan_objmgr_vdev *vdev;
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
|
||||||
WMA_LOGD("BSS key setup for peer");
|
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));
|
qdf_mem_zero(&key_params, sizeof(key_params));
|
||||||
opmode = cdp_get_opmode(soc, key_info->vdev_id);
|
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 i;
|
||||||
uint32_t def_key_idx = 0;
|
uint32_t def_key_idx = 0;
|
||||||
uint32_t wlan_opmode;
|
uint32_t wlan_opmode;
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
uint8_t *mac_addr, *bssid;
|
uint8_t *mac_addr, *bssid;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
struct wlan_objmgr_vdev *vdev;
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
|
||||||
WMA_LOGD("BSS key setup");
|
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);
|
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);
|
qdf_mem_copy(key_params.peer_mac, bssid, QDF_MAC_ADDR_SIZE);
|
||||||
} else {
|
} 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) {
|
if (!mac_addr) {
|
||||||
WMA_LOGE("%s: mac_addr is NULL for vdev with id %d",
|
WMA_LOGE("%s: mac_addr is NULL for vdev with id %d",
|
||||||
__func__, key_info->vdev_id);
|
__func__, key_info->vdev_id);
|
||||||
@@ -2649,7 +2634,6 @@ void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info)
|
|||||||
int32_t i;
|
int32_t i;
|
||||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
struct cdp_pdev *txrx_pdev;
|
struct cdp_pdev *txrx_pdev;
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
void *peer;
|
void *peer;
|
||||||
uint8_t num_keys = 0;
|
uint8_t num_keys = 0;
|
||||||
struct wma_set_key_params key_params;
|
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;
|
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);
|
opmode = cdp_get_opmode(soc, key_info->vdev_id);
|
||||||
|
|
||||||
if (key_info->defWEPIdx == WMA_INVALID_KEY_IDX &&
|
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;
|
QDF_STATUS ret;
|
||||||
#if !defined(REMOVE_PKT_LOG)
|
#if !defined(REMOVE_PKT_LOG)
|
||||||
uint8_t vdev_id = 0;
|
uint8_t vdev_id = 0;
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
ol_txrx_pktdump_cb packetdump_cb;
|
ol_txrx_pktdump_cb packetdump_cb;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
enum tx_status pktdump_status;
|
enum tx_status pktdump_status;
|
||||||
#endif
|
#endif
|
||||||
|
struct wmi_mgmt_params mgmt_params = {};
|
||||||
|
|
||||||
if (!wma_handle) {
|
if (!wma_handle) {
|
||||||
WMA_LOGE("%s: wma handle is NULL", __func__);
|
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)
|
#if !defined(REMOVE_PKT_LOG)
|
||||||
vdev_id = mgmt_txrx_get_vdev_id(pdev, desc_id);
|
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;
|
packetdump_cb = wma_handle->wma_mgmt_tx_packetdump_cb;
|
||||||
pktdump_status = wma_mgmt_pktdump_status_map(status);
|
pktdump_status = wma_mgmt_pktdump_status_map(status);
|
||||||
if (packetdump_cb)
|
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);
|
buf, pktdump_status, TX_MGMT_PKT);
|
||||||
#endif
|
#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) {
|
if (ret != QDF_STATUS_SUCCESS) {
|
||||||
WMA_LOGE("%s: Failed to process mgmt tx completion", __func__);
|
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)
|
#if !defined(REMOVE_PKT_LOG)
|
||||||
ol_txrx_pktdump_cb packetdump_cb;
|
ol_txrx_pktdump_cb packetdump_cb;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
#endif
|
#endif
|
||||||
static uint8_t limit_prints_invalid_len = RATE_LIMIT - 1;
|
static uint8_t limit_prints_invalid_len = RATE_LIMIT - 1;
|
||||||
static uint8_t limit_prints_load_unload = 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)
|
#if !defined(REMOVE_PKT_LOG)
|
||||||
packetdump_cb = wma_handle->wma_mgmt_rx_packetdump_cb;
|
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 &&
|
if ((mgt_type == IEEE80211_FC0_TYPE_MGT &&
|
||||||
mgt_subtype != MGMT_SUBTYPE_BEACON) &&
|
mgt_subtype != MGMT_SUBTYPE_BEACON) &&
|
||||||
packetdump_cb)
|
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_params =
|
||||||
(struct wmi_mgmt_params *)mgmt_tx_params;
|
(struct wmi_mgmt_params *)mgmt_tx_params;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
struct cdp_vdev *txrx_vdev;
|
|
||||||
|
|
||||||
if (!mgmt_params) {
|
if (!mgmt_params) {
|
||||||
WMA_LOGE("%s: mgmt_params ptr passed is NULL", __func__);
|
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;
|
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,
|
if (wmi_service_enabled(wma_handle->wmi_handle,
|
||||||
wmi_service_mgmt_tx_wmi)) {
|
wmi_service_mgmt_tx_wmi)) {
|
||||||
status = wmi_mgmt_unified_cmd_send(wma_handle->wmi_handle,
|
status = wmi_mgmt_unified_cmd_send(wma_handle->wmi_handle,
|
||||||
mgmt_params);
|
mgmt_params);
|
||||||
} else if (txrx_vdev) {
|
} else {
|
||||||
QDF_NBUF_CB_MGMT_TXRX_DESC_ID(buf)
|
QDF_NBUF_CB_MGMT_TXRX_DESC_ID(buf)
|
||||||
= mgmt_params->desc_id;
|
= 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->tx_type,
|
||||||
mgmt_params->use_6mbps,
|
mgmt_params->use_6mbps,
|
||||||
mgmt_params->chanfreq);
|
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)
|
uint8_t vdev_id, uint32_t value)
|
||||||
{
|
{
|
||||||
struct ol_txrx_stats_req req;
|
struct ol_txrx_stats_req req;
|
||||||
struct cdp_vdev *vdev;
|
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
|
|
||||||
if (!soc) {
|
if (!soc) {
|
||||||
@@ -3281,14 +3280,9 @@ int32_t wma_txrx_fw_stats_reset(tp_wma_handle wma_handle,
|
|||||||
return -EINVAL;
|
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));
|
qdf_mem_zero(&req, sizeof(req));
|
||||||
req.stats_type_reset_mask = value;
|
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;
|
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)
|
uint8_t vdev_id, uint32_t value)
|
||||||
{
|
{
|
||||||
struct ol_txrx_stats_req req;
|
struct ol_txrx_stats_req req;
|
||||||
struct cdp_vdev *vdev;
|
|
||||||
uint32_t l_up_mask;
|
uint32_t l_up_mask;
|
||||||
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
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;
|
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)
|
if (wma_is_valid_fw_stats_cmd(value) == false)
|
||||||
return -EINVAL;
|
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);
|
l_up_mask = 1 << (value - 1);
|
||||||
req.stats_type_upload_mask = l_up_mask;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user