|
@@ -170,60 +170,6 @@ void cfr_free_pending_dbr_events(struct wlan_objmgr_pdev *pdev)
|
|
|
wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * cfr_free_all_lut_entries() - Flush all pending DBR and TXRX events.
|
|
|
- * @pdev: objmgr pdev
|
|
|
- *
|
|
|
- * return: none
|
|
|
- */
|
|
|
-void cfr_free_all_lut_entries(struct wlan_objmgr_pdev *pdev)
|
|
|
-{
|
|
|
- struct pdev_cfr *pcfr;
|
|
|
- struct look_up_table *lut = NULL;
|
|
|
- int i = 0;
|
|
|
- QDF_STATUS retval = 0;
|
|
|
- qdf_dma_addr_t buf_addr = 0, buf_addr_temp = 0;
|
|
|
-
|
|
|
- retval = wlan_objmgr_pdev_try_get_ref(pdev, WLAN_CFR_ID);
|
|
|
- if (retval != QDF_STATUS_SUCCESS) {
|
|
|
- cfr_err("failed to get pdev reference");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
|
|
|
- WLAN_UMAC_COMP_CFR);
|
|
|
- if (!pcfr) {
|
|
|
- cfr_err("pdev object for CFR is null");
|
|
|
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- for (i = 0; i < NUM_LUT_ENTRIES; i++) {
|
|
|
- lut = get_lut_entry(pcfr, i);
|
|
|
- if (!lut)
|
|
|
- continue;
|
|
|
-
|
|
|
- if (lut->dbr_recv && !lut->tx_recv) {
|
|
|
- target_if_dbr_buf_release(pdev, DBR_MODULE_CFR,
|
|
|
- lut->dbr_address,
|
|
|
- i, 0);
|
|
|
- pcfr->flush_all_dbr_cnt++;
|
|
|
- release_lut_entry_enh(pdev, lut);
|
|
|
- } else if (lut->tx_recv && !lut->dbr_recv) {
|
|
|
- buf_addr_temp = (lut->tx_address2 & 0x0f);
|
|
|
- buf_addr = (lut->tx_address1
|
|
|
- | ((uint64_t)buf_addr_temp << 32));
|
|
|
- target_if_dbr_buf_release(pdev,
|
|
|
- DBR_MODULE_CFR,
|
|
|
- buf_addr,
|
|
|
- i, 0);
|
|
|
- pcfr->flush_all_txrx_cnt++;
|
|
|
- release_lut_entry_enh(pdev, lut);
|
|
|
- }
|
|
|
- }
|
|
|
- wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* dump_freeze_tlv() - Dump freeze TLV sent in enhanced DMA header
|
|
|
* @freeze_tlv: Freeze TLV sent from MAC to PHY
|
|
@@ -544,6 +490,8 @@ int correlate_and_relay_enh(struct wlan_objmgr_pdev *pdev, uint32_t cookie,
|
|
|
WLAN_UMAC_COMP_CFR);
|
|
|
|
|
|
if (module_id == CORRELATE_TXRX_EV_MODULE_ID) {
|
|
|
+ if (lut->tx_recv)
|
|
|
+ pcfr->cfr_dma_aborts++;
|
|
|
lut->tx_recv = true;
|
|
|
} else if (module_id == CORRELATE_DBR_MODULE_ID) {
|
|
|
pcfr->dbr_evt_cnt++;
|
|
@@ -584,8 +532,13 @@ int correlate_and_relay_enh(struct wlan_objmgr_pdev *pdev, uint32_t cookie,
|
|
|
pcfr->invalid_dma_length_cnt++;
|
|
|
cfr_err("<CORRELATE><%u>:CFR buffers "
|
|
|
"received with invalid length "
|
|
|
- "length : ppdu_id:0x%04x\n",
|
|
|
- cookie, lut->tx_ppdu_id);
|
|
|
+ "header_length_words = %d "
|
|
|
+ "cfr_payload_length_bytes = %d "
|
|
|
+ "ppdu_id:0x%04x\n",
|
|
|
+ cookie,
|
|
|
+ lut->header_length,
|
|
|
+ lut->payload_length,
|
|
|
+ lut->tx_ppdu_id);
|
|
|
/*
|
|
|
* Assert here as length exceeding the allowed
|
|
|
* limit would anyway manifest as random crash
|
|
@@ -606,6 +559,7 @@ int correlate_and_relay_enh(struct wlan_objmgr_pdev *pdev, uint32_t cookie,
|
|
|
lut->tx_recv = false;
|
|
|
lut->tx_ppdu_id = 0;
|
|
|
pcfr->clear_txrx_event++;
|
|
|
+ pcfr->cfr_dma_aborts++;
|
|
|
status = STATUS_HOLD;
|
|
|
}
|
|
|
} else {
|
|
@@ -739,7 +693,7 @@ void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf)
|
|
|
|
|
|
vdev = wlan_objmgr_pdev_get_first_vdev(pdev, WLAN_CFR_ID);
|
|
|
if (qdf_unlikely(!vdev)) {
|
|
|
- cfr_err("vdev is null\n");
|
|
|
+ cfr_debug("vdev is null\n");
|
|
|
goto done;
|
|
|
}
|
|
|
|
|
@@ -1253,6 +1207,7 @@ target_if_peer_capture_event(ol_scn_t sc, uint8_t *data, uint32_t datalen)
|
|
|
}
|
|
|
|
|
|
pcfr->tx_evt_cnt++;
|
|
|
+ pcfr->total_tx_evt_cnt++;
|
|
|
|
|
|
lut->tx_ppdu_id = (tx_evt_param.correlation_info_2 >> 16);
|
|
|
lut->tx_address1 = tx_evt_param.correlation_info_1;
|
|
@@ -1444,7 +1399,7 @@ static os_timer_func(lut_ageout_timer_task)
|
|
|
if (lut->dbr_recv && !lut->tx_recv) {
|
|
|
diff = cur_tstamp - lut->dbr_tstamp;
|
|
|
if (diff > LUT_AGE_THRESHOLD) {
|
|
|
- cfr_err("<%d>TXRX event not received for "
|
|
|
+ cfr_debug("<%d>TXRX event not received for "
|
|
|
"%llu ms, release lut entry : "
|
|
|
"dma_addr = 0x%pK\n", i, diff,
|
|
|
(void *)((uintptr_t)lut->dbr_address));
|
|
@@ -1457,6 +1412,8 @@ static os_timer_func(lut_ageout_timer_task)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (pcfr->lut_timer_init)
|
|
|
+ qdf_timer_mod(&pcfr->lut_age_timer, LUT_AGE_TIMER);
|
|
|
wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
|
|
|
}
|
|
|
|
|
@@ -1474,7 +1431,9 @@ QDF_STATUS target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev)
|
|
|
pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
|
|
|
WLAN_UMAC_COMP_CFR);
|
|
|
|
|
|
- qdf_timer_mod(&pcfr->lut_age_timer, LUT_AGE_TIMER);
|
|
|
+ if (pcfr->lut_timer_init)
|
|
|
+ qdf_timer_mod(&pcfr->lut_age_timer, LUT_AGE_TIMER);
|
|
|
+
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
@@ -1492,7 +1451,9 @@ QDF_STATUS target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev)
|
|
|
pcfr = wlan_objmgr_pdev_get_comp_private_obj(pdev,
|
|
|
WLAN_UMAC_COMP_CFR);
|
|
|
|
|
|
- qdf_timer_stop(&pcfr->lut_age_timer);
|
|
|
+ if (pcfr->lut_timer_init)
|
|
|
+ qdf_timer_stop(&pcfr->lut_age_timer);
|
|
|
+
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
@@ -1535,6 +1496,7 @@ QDF_STATUS cfr_6018_init_pdev(struct wlan_objmgr_psoc *psoc,
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
+ pcfr->is_cfr_rcc_capable = 1;
|
|
|
pcfr->rcc_param.pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
|
|
|
pcfr->rcc_param.modified_in_curr_session = MAX_RESET_CFG_ENTRY;
|
|
|
pcfr->rcc_param.num_grp_tlvs = MAX_TA_RA_ENTRIES;
|
|
@@ -1561,14 +1523,6 @@ QDF_STATUS cfr_6018_init_pdev(struct wlan_objmgr_psoc *psoc,
|
|
|
pcfr->lut_timer_init = 1;
|
|
|
}
|
|
|
|
|
|
- pcfr->cfr_data_subscriber = (wdi_event_subscribe *)
|
|
|
- qdf_mem_malloc(sizeof(wdi_event_subscribe));
|
|
|
- if (!pcfr->cfr_data_subscriber) {
|
|
|
- cfr_err("Failed to alloc cfr_data_subscriber object\n");
|
|
|
- return QDF_STATUS_E_NULL_VALUE;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
return status;
|
|
|
}
|
|
|
|
|
@@ -1593,6 +1547,7 @@ QDF_STATUS cfr_6018_deinit_pdev(struct wlan_objmgr_psoc *psoc,
|
|
|
}
|
|
|
|
|
|
if (pcfr->lut_timer_init) {
|
|
|
+ qdf_timer_stop(&pcfr->lut_age_timer);
|
|
|
qdf_timer_free(&(pcfr->lut_age_timer));
|
|
|
pcfr->lut_timer_init = 0;
|
|
|
}
|
|
@@ -1600,16 +1555,16 @@ QDF_STATUS cfr_6018_deinit_pdev(struct wlan_objmgr_psoc *psoc,
|
|
|
pcfr->tx_evt_cnt = 0;
|
|
|
pcfr->dbr_evt_cnt = 0;
|
|
|
pcfr->release_cnt = 0;
|
|
|
+ pcfr->total_tx_evt_cnt = 0;
|
|
|
pcfr->rx_tlv_evt_cnt = 0;
|
|
|
pcfr->flush_dbr_cnt = 0;
|
|
|
- pcfr->flush_all_dbr_cnt = 0;
|
|
|
- pcfr->flush_all_txrx_cnt = 0;
|
|
|
pcfr->flush_timeout_dbr_cnt = 0;
|
|
|
pcfr->invalid_dma_length_cnt = 0;
|
|
|
pcfr->clear_txrx_event = 0;
|
|
|
pcfr->bb_captured_channel_cnt = 0;
|
|
|
pcfr->bb_captured_timeout_cnt = 0;
|
|
|
pcfr->rx_loc_info_valid_cnt = 0;
|
|
|
+ pcfr->cfr_dma_aborts = 0;
|
|
|
qdf_mem_zero(&pcfr->chan_capture_status,
|
|
|
sizeof(uint64_t) * NUM_CHAN_CAPTURE_STATUS);
|
|
|
qdf_mem_zero(&pcfr->bb_captured_reason_cnt,
|
|
@@ -1628,11 +1583,5 @@ QDF_STATUS cfr_6018_deinit_pdev(struct wlan_objmgr_psoc *psoc,
|
|
|
if (status != QDF_STATUS_SUCCESS)
|
|
|
cfr_err("Failed to register with dbr");
|
|
|
|
|
|
- if (pcfr->cfr_data_subscriber) {
|
|
|
- qdf_mem_free(pcfr->cfr_data_subscriber);
|
|
|
- pcfr->cfr_data_subscriber = NULL;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
return status;
|
|
|
}
|