mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 14:19:09 -04:00
qcacmn: Fix issues in monitor mode initialization
Current monitor mode implementation does not catch initialization failures causing it to believe successful monitor mode initialization. Change-Id: I5c30ac22e3084871b86cf5e2f0627988ebbb7b5d CRs-Fixed: 2071602
This commit is contained in:
parent
8851f4eb1c
commit
a9ebe0a7ca
3 changed files with 76 additions and 25 deletions
|
|
@ -97,7 +97,6 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||
* if desc_list is NULL, allocate the descs from freelist
|
||||
*/
|
||||
if (!(*desc_list)) {
|
||||
|
||||
num_alloc_desc = dp_rx_get_free_desc_list(dp_soc, mac_id,
|
||||
rx_desc_pool,
|
||||
num_req_buffers,
|
||||
|
|
@ -123,8 +122,8 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||
sync_hw_ptr);
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"no of availble entries in rxdma ring: %d",
|
||||
num_entries_avail);
|
||||
"no of availble entries in rxdma ring: %d",
|
||||
num_entries_avail);
|
||||
|
||||
if (num_entries_avail < num_req_buffers) {
|
||||
num_desc_to_free = num_req_buffers - num_entries_avail;
|
||||
|
|
@ -201,7 +200,6 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
|
|||
/*
|
||||
* add any available free desc back to the free list
|
||||
*/
|
||||
|
||||
if (*desc_list)
|
||||
dp_rx_add_desc_list_to_free_list(dp_soc, desc_list, tail,
|
||||
mac_id, rx_desc_pool);
|
||||
|
|
|
|||
|
|
@ -760,6 +760,7 @@ dp_rx_pdev_mon_buf_attach(struct dp_pdev *pdev) {
|
|||
struct dp_srng *rxdma_srng;
|
||||
uint32_t rxdma_entries;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
QDF_STATUS status;
|
||||
|
||||
rxdma_srng = &pdev->rxdma_mon_buf_ring;
|
||||
|
||||
|
|
@ -773,14 +774,26 @@ dp_rx_pdev_mon_buf_attach(struct dp_pdev *pdev) {
|
|||
"%s: Mon RX Desc Pool[%d] allocation size=%d\n"
|
||||
, __func__, pdev_id, rxdma_entries*3);
|
||||
|
||||
dp_rx_desc_pool_alloc(soc, pdev_id, rxdma_entries*3, rx_desc_pool);
|
||||
status = dp_rx_desc_pool_alloc(soc, pdev_id,
|
||||
rxdma_entries*3, rx_desc_pool);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: dp_rx_desc_pool_alloc() failed \n", __func__);
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_WARN,
|
||||
"%s: Mon RX Buffers Replenish pdev_id=%d\n",
|
||||
__func__, pdev_id);
|
||||
|
||||
dp_rx_buffers_replenish(soc, pdev_id, rxdma_srng, rx_desc_pool,
|
||||
rxdma_entries, &desc_list, &tail, HAL_RX_BUF_RBM_SW3_BM);
|
||||
status = dp_rx_buffers_replenish(soc, pdev_id, rxdma_srng, rx_desc_pool,
|
||||
rxdma_entries, &desc_list, &tail,
|
||||
HAL_RX_BUF_RBM_SW3_BM);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: dp_rx_buffers_replenish() failed \n", __func__);
|
||||
return status;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
@ -846,14 +859,22 @@ static int dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
|
|||
|
||||
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_WARN,
|
||||
"%s: total_mem_size: %d, num_link_desc_banks: %u, \
|
||||
max_alloc_size: %d\n",
|
||||
__func__, total_mem_size, num_link_desc_banks, max_alloc_size);
|
||||
max_alloc_size: %d last_bank_size: %d\n",
|
||||
__func__, total_mem_size, num_link_desc_banks, max_alloc_size,
|
||||
last_bank_size);
|
||||
|
||||
for (i = 0; i < num_link_desc_banks; i++) {
|
||||
dp_pdev->link_desc_banks[i].base_vaddr_unaligned =
|
||||
qdf_mem_alloc_consistent(soc->osdev, NULL,
|
||||
qdf_mem_alloc_consistent(soc->osdev, soc->osdev->dev,
|
||||
max_alloc_size,
|
||||
&(dp_pdev->link_desc_banks[i].base_paddr_unaligned));
|
||||
|
||||
if (!dp_pdev->link_desc_banks[i].base_vaddr_unaligned) {
|
||||
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Link desc memory allocation failed\n",
|
||||
__func__);
|
||||
goto fail;
|
||||
}
|
||||
dp_pdev->link_desc_banks[i].size = max_alloc_size;
|
||||
|
||||
dp_pdev->link_desc_banks[i].base_vaddr =
|
||||
|
|
@ -870,13 +891,6 @@ static int dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
|
|||
(dp_pdev->link_desc_banks[i].base_vaddr) -
|
||||
(unsigned long)
|
||||
(dp_pdev->link_desc_banks[i].base_vaddr_unaligned));
|
||||
|
||||
if (!dp_pdev->link_desc_banks[i].base_vaddr_unaligned) {
|
||||
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Link desc memory allocation failed\n",
|
||||
__func__);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
if (last_bank_size) {
|
||||
|
|
@ -885,8 +899,15 @@ static int dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
|
|||
*/
|
||||
dp_pdev->link_desc_banks[i].base_vaddr_unaligned =
|
||||
qdf_mem_alloc_consistent(soc->osdev,
|
||||
NULL, last_bank_size,
|
||||
soc->osdev->dev, last_bank_size,
|
||||
&(dp_pdev->link_desc_banks[i].base_paddr_unaligned));
|
||||
|
||||
if (dp_pdev->link_desc_banks[i].base_vaddr_unaligned == NULL) {
|
||||
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: allocation failed for mon link desc pool\n",
|
||||
__func__);
|
||||
goto fail;
|
||||
}
|
||||
dp_pdev->link_desc_banks[i].size = last_bank_size;
|
||||
|
||||
dp_pdev->link_desc_banks[i].base_vaddr =
|
||||
|
|
@ -1002,13 +1023,33 @@ QDF_STATUS
|
|||
dp_rx_pdev_mon_attach(struct dp_pdev *pdev) {
|
||||
uint8_t pdev_id = pdev->pdev_id;
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
QDF_STATUS status;
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_WARN,
|
||||
"%s: pdev attach id=%d\n", __func__, pdev_id);
|
||||
|
||||
dp_rx_pdev_mon_buf_attach(pdev);
|
||||
dp_rx_pdev_mon_status_attach(pdev);
|
||||
dp_mon_link_desc_pool_setup(soc, pdev_id);
|
||||
status = dp_rx_pdev_mon_buf_attach(pdev);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: dp_rx_pdev_mon_buf_attach() failed \n", __func__);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = dp_rx_pdev_mon_status_attach(pdev);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: dp_rx_pdev_mon_status_attach() failed \n",
|
||||
__func__);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = dp_mon_link_desc_pool_setup(soc, pdev_id);
|
||||
if (!QDF_IS_STATUS_SUCCESS(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: dp_mon_link_desc_pool_setup() failed \n",
|
||||
__func__);
|
||||
return status;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -454,6 +454,7 @@ dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev) {
|
|||
struct dp_srng *rxdma_srng;
|
||||
uint32_t rxdma_entries;
|
||||
struct rx_desc_pool *rx_desc_pool;
|
||||
QDF_STATUS status;
|
||||
|
||||
rxdma_srng = &pdev->rxdma_mon_status_ring;
|
||||
|
||||
|
|
@ -466,15 +467,26 @@ dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev) {
|
|||
"%s: Mon RX Status Pool[%d] allocation size=%d\n",
|
||||
__func__, pdev_id, rxdma_entries);
|
||||
|
||||
dp_rx_desc_pool_alloc(soc, pdev_id, rxdma_entries+1, rx_desc_pool);
|
||||
status = dp_rx_desc_pool_alloc(soc, pdev_id, rxdma_entries+1,
|
||||
rx_desc_pool);
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: dp_rx_desc_pool_alloc() failed \n", __func__);
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_WARN,
|
||||
"%s: Mon RX Status Buffers Replenish pdev_id=%d\n",
|
||||
__func__, pdev_id);
|
||||
|
||||
dp_rx_mon_status_buffers_replenish(soc, pdev_id, rxdma_srng,
|
||||
rx_desc_pool, rxdma_entries, &desc_list, &tail,
|
||||
HAL_RX_BUF_RBM_SW3_BM);
|
||||
status = dp_rx_mon_status_buffers_replenish(soc, pdev_id, rxdma_srng,
|
||||
rx_desc_pool, rxdma_entries, &desc_list, &tail,
|
||||
HAL_RX_BUF_RBM_SW3_BM);
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: dp_rx_buffers_replenish() failed \n", __func__);
|
||||
return status;
|
||||
}
|
||||
|
||||
qdf_nbuf_queue_init(&pdev->rx_status_q);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue