qcacld-3.0: Do not reserve mgmt descriptors

Do not reserve tx descriptors for management packets
if management over WMI is enabled.

Change-Id: Iafe758d91d11f4875e3152d92538055784490a14
CRs-Fixed: 949917
This commit is contained in:
Nirav Shah 2015-12-10 15:39:48 +05:30 • committed by Satish Singh
commit 600a296834
5 changed files with 47 additions and 2 deletions

View file

@ -1261,6 +1261,9 @@ void ol_txrx_set_ocb_peer(struct ol_txrx_pdev_t *pdev,
bool ol_txrx_get_ocb_peer(struct ol_txrx_pdev_t *pdev,
struct ol_txrx_peer_t **peer);
void ol_tx_set_is_mgmt_over_wmi_enabled(uint8_t value);
uint8_t ol_tx_get_is_mgmt_over_wmi_enabled(void);
/* TX FLOW Control related functions */
#ifdef QCA_LL_TX_FLOW_CONTROL_V2
#define TX_FLOW_MGMT_POOL_ID 0xEF

View file

@ -76,6 +76,40 @@
/*=== function definitions ===*/
/**
* ol_tx_set_is_mgmt_over_wmi_enabled() - set flag to indicate that mgmt over
* wmi is enabled or not.
* @value: 1 for enabled/ 0 for disable
*
* Return: None
*/
void ol_tx_set_is_mgmt_over_wmi_enabled(uint8_t value)
{
struct ol_txrx_pdev_t *pdev = cds_get_context(CDF_MODULE_ID_TXRX);
if (!pdev) {
cdf_print("%s: pdev is NULL\n", __func__);
return;
}
pdev->is_mgmt_over_wmi_enabled = value;
return;
}
/**
* ol_tx_get_is_mgmt_over_wmi_enabled() - get value of is_mgmt_over_wmi_enabled
*
* Return: is_mgmt_over_wmi_enabled
*/
uint8_t ol_tx_get_is_mgmt_over_wmi_enabled(void)
{
struct ol_txrx_pdev_t *pdev = cds_get_context(CDF_MODULE_ID_TXRX);
if (!pdev) {
cdf_print("%s: pdev is NULL\n", __func__);
return 0;
}
return pdev->is_mgmt_over_wmi_enabled;
}
#ifdef QCA_SUPPORT_TXRX_LOCAL_PEER_ID
ol_txrx_peer_handle
ol_txrx_find_peer_by_addr_and_vdev(ol_txrx_pdev_handle pdev,

View file

@ -112,7 +112,8 @@ void ol_tx_register_flow_control(struct ol_txrx_pdev_t *pdev)
cdf_spinlock_init(&pdev->tx_desc.flow_pool_list_lock);
TAILQ_INIT(&pdev->tx_desc.flow_pool_list);
ol_tx_register_global_mgmt_pool(pdev);
if (!ol_tx_get_is_mgmt_over_wmi_enabled())
ol_tx_register_global_mgmt_pool(pdev);
}
/**
@ -123,7 +124,8 @@ void ol_tx_register_flow_control(struct ol_txrx_pdev_t *pdev)
*/
void ol_tx_deregister_flow_control(struct ol_txrx_pdev_t *pdev)
{
ol_tx_deregister_global_mgmt_pool(pdev);
if (!ol_tx_get_is_mgmt_over_wmi_enabled())
ol_tx_deregister_global_mgmt_pool(pdev);
cdf_spinlock_destroy(&pdev->tx_desc.flow_pool_list_lock);
if (!TAILQ_EMPTY(&pdev->tx_desc.flow_pool_list)) {

View file

@ -571,6 +571,7 @@ struct ol_txrx_pdev_t {
struct cdf_mem_multi_page_t desc_pages;
} tx_desc;
uint8_t is_mgmt_over_wmi_enabled;
#if defined(QCA_LL_TX_FLOW_CONTROL_V2)
struct ol_txrx_pool_stats pool_stats;
uint32_t num_msdu_desc;

View file

@ -3806,6 +3806,11 @@ void wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info)
cdf_mem_copy(wma_handle->wmi_service_bitmap,
param_buf->wmi_service_bitmap,
sizeof(wma_handle->wmi_service_bitmap));
ol_tx_set_is_mgmt_over_wmi_enabled(
WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap,
WMI_SERVICE_MGMT_TX_WMI));
/* SWBA event handler for beacon transmission */
status = wmi_unified_register_event_handler(wma_handle->wmi_handle,
WMI_HOST_SWBA_EVENTID,