1
0

qca-wifi: CFR: Update RCC specific debug counters

RCC specific debug counters has been moved to DP layer.

Update capture BW from RXTLV instead of VDEV
Capture BW is the bandwidth at which Station operates.

Error handling for pdev referencce count.
Add support to clear CFR ppdu counters
Use same event ENUM for HKV2 and Cypress.

Change-Id: Ic1f5da16c5c1ac5893dce1023eb57f96d78d4cfa
Este cometimento está contido em:
Adwait Nayak
2020-01-27 00:18:01 +05:30
ascendente 862792aa58
cometimento 412cc0e7e1
5 ficheiros modificados com 95 adições e 104 eliminações

Ver ficheiro

@@ -248,6 +248,14 @@ QDF_STATUS ucfg_cfr_get_cfg(struct wlan_objmgr_vdev *vdev);
*/
QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_cfr_rcc_clr_dbg_counters() - function to clear CFR PPDU counters
* @vdev: pointer to vdev object
*
* Return: status
*/
QDF_STATUS ucfg_cfr_rcc_clr_dbg_counters(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_cfr_rcc_dump_lut() - function to display lookup table
* @vdev: pointer to vdev object

Ver ficheiro

@@ -116,24 +116,6 @@ enum cfr_capture_type {
CFR_TYPE_METHOD_MAX,
};
enum mac_freeze_capture_reason {
FREEZE_REASON_TM = 0,
FREEZE_REASON_FTM = 1,
FREEZE_REASON_ACK_RESP_TO_TM_FTM = 2,
FREEZE_REASON_TA_RA_TYPE_FILTER = 3,
FREEZE_REASON_NDPA_NDP = 4,
FREEZE_REASON_ALL_PACKET = 5,
FREEZE_REASON_MAX,
};
enum chan_capture_status {
CAPTURE_IDLE = 0,
CAPTURE_BUSY,
CAPTURE_ACTIVE,
CAPTURE_NO_BUFFER,
CAPTURE_MAX,
};
struct cfr_metadata_version_1 {
u_int8_t peer_addr[QDF_MAC_ADDR_SIZE];
u_int8_t status;
@@ -464,24 +446,6 @@ struct cfr_rcc_param {
* lut_age_timer: Timer to flush pending TXRX/DBR events in lookup table
* lut_timer_init: flag to determine if lut_age_timer is initialized or not
* is_cfr_rcc_capable: Flag to determine if RCC is enabled or not.
* bb_captured_channel_cnt: No. of PPDUs for which MAC sent Freeze TLV to PHY
* bb_captured_timeout_cnt: No. of PPDUs for which CFR filter criteria matched
* but MAC did not send Freeze TLV to PHY as time exceeded freeze tlv delay
* count threshold
* rx_loc_info_valid_cnt: No. of PPDUs for which PHY could find a valid buffer
in ucode IPC ring
* chan_capture_status[]: capture status counters
* [0] - No. of PPDUs with capture status CAPTURE_IDLE
* [1] - No. of PPDUs with capture status CAPTURE_BUSY
* [2] - No. of PPDUs with capture status CAPTURE_ACTIVE
* [3] - No. of PPDUs with capture status CAPTURE_NO_BUFFER
* bb_captured_reason_cnt[]: capture reason counters
* [0] - No. PPDUs filtered due to freeze_reason_TM
* [1] - No. PPDUs filtered due to freeze_reason_FTM
* [2] - No. PPDUs filtered due to freeze_reason_ACK_resp_to_TM_FTM
* [3] - No. PPDUs filtered due to freeze_reason_TA_RA_TYPE_FILTER
* [4] - No. PPDUs filtered due to freeze_reason_NDPA_NDP
* [5] - No. PPDUs filtered due to freeze_reason_ALL_PACKET
* flush_dbr_cnt: No. of un-correlated DBR completions flushed when a newer PPDU
* is correlated successfully with newer DBR completion
* invalid_dma_length_cnt: No. of buffers for which CFR DMA header length (or)
@@ -523,11 +487,6 @@ struct pdev_cfr {
qdf_timer_t lut_age_timer;
uint8_t lut_timer_init;
uint8_t is_cfr_rcc_capable;
uint64_t bb_captured_channel_cnt;
uint64_t bb_captured_timeout_cnt;
uint64_t rx_loc_info_valid_cnt;
uint64_t chan_capture_status[CAPTURE_MAX];
uint64_t bb_captured_reason_cnt[FREEZE_REASON_MAX];
uint64_t flush_dbr_cnt;
uint64_t invalid_dma_length_cnt;
uint64_t flush_timeout_dbr_cnt;

Ver ficheiro

@@ -726,7 +726,7 @@ static const char *chan_capture_status_to_str(enum chan_capture_status type)
case CAPTURE_NO_BUFFER:
return "CAPTURE_NO_BUFFER";
default:
return "NONE";
return "INVALID";
}
}
@@ -747,7 +747,7 @@ char *mac_freeze_reason_to_str(enum mac_freeze_capture_reason type)
case FREEZE_REASON_ALL_PACKET:
return "FREEZE_REASON_ALL_PACKET";
default:
return "NONE";
return "INVALID";
}
}
@@ -755,19 +755,22 @@ QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev)
{
struct pdev_cfr *pcfr = NULL;
struct wlan_objmgr_pdev *pdev = NULL;
int counter;
struct wlan_objmgr_psoc *psoc = NULL;
struct cdp_cfr_rcc_stats *cfr_rcc_stats = NULL;
uint8_t stats_cnt;
QDF_STATUS status = QDF_STATUS_SUCCESS;
status = dev_sanity_check(vdev, &pdev, &pcfr);
if (status != QDF_STATUS_SUCCESS)
return status;
cfr_err("bb_captured_channel_cnt = %llu\n",
pcfr->bb_captured_channel_cnt);
cfr_err("bb_captured_timeout_cnt = %llu\n",
pcfr->bb_captured_timeout_cnt);
cfr_err("rx_loc_info_valid_cnt = %llu\n",
pcfr->rx_loc_info_valid_cnt);
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc) {
cfr_err("psoc is null!");
wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
return QDF_STATUS_E_NULL_VALUE;
}
cfr_err("total_tx_evt_cnt = %llu\n",
pcfr->total_tx_evt_cnt);
cfr_err("dbr_evt_cnt = %llu\n",
@@ -789,20 +792,72 @@ QDF_STATUS ucfg_cfr_rcc_dump_dbg_counters(struct wlan_objmgr_vdev *vdev)
cfr_err("cfr_dma_aborts = %llu\n",
pcfr->cfr_dma_aborts);
cfr_rcc_stats = qdf_mem_malloc(sizeof(struct cdp_cfr_rcc_stats));
if (!cfr_rcc_stats) {
wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
return QDF_STATUS_E_NOMEM;
}
cdp_get_cfr_dbg_stats(wlan_psoc_get_dp_handle(psoc),
wlan_objmgr_pdev_get_pdev_id(pdev),
cfr_rcc_stats);
cfr_err("bb_captured_channel_cnt: %llu\n",
cfr_rcc_stats->bb_captured_channel_cnt);
cfr_err("bb_captured_timeout_cnt: %llu\n",
cfr_rcc_stats->bb_captured_timeout_cnt);
cfr_err("rx_loc_info_valid_cnt: %llu\n",
cfr_rcc_stats->rx_loc_info_valid_cnt);
cfr_err("Channel capture status:\n");
for (counter = 0; counter < CAPTURE_MAX; counter++) {
for (stats_cnt = 0; stats_cnt < CAPTURE_MAX; stats_cnt++) {
cfr_err("%s = %llu\n",
chan_capture_status_to_str(counter),
pcfr->chan_capture_status[counter]);
chan_capture_status_to_str(stats_cnt),
cfr_rcc_stats->chan_capture_status[stats_cnt]);
}
cfr_err("Freeze reason:\n");
for (counter = 0; counter < FREEZE_REASON_MAX; counter++) {
for (stats_cnt = 0; stats_cnt < FREEZE_REASON_MAX; stats_cnt++) {
cfr_err("%s = %llu\n",
mac_freeze_reason_to_str(counter),
pcfr->bb_captured_reason_cnt[counter]);
mac_freeze_reason_to_str(stats_cnt),
cfr_rcc_stats->reason_cnt[stats_cnt]);
}
qdf_mem_free(cfr_rcc_stats);
wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
return status;
}
QDF_STATUS ucfg_cfr_rcc_clr_dbg_counters(struct wlan_objmgr_vdev *vdev)
{
struct pdev_cfr *pcfr = NULL;
struct wlan_objmgr_pdev *pdev = NULL;
struct wlan_objmgr_psoc *psoc = NULL;
QDF_STATUS status = QDF_STATUS_SUCCESS;
status = dev_sanity_check(vdev, &pdev, &pcfr);
if (status != QDF_STATUS_SUCCESS)
return status;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc) {
cfr_err("psoc is null!");
wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
return QDF_STATUS_E_NULL_VALUE;
}
cdp_cfr_clr_dbg_stats(wlan_psoc_get_dp_handle(psoc),
wlan_objmgr_pdev_get_pdev_id(pdev));
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_timeout_dbr_cnt = 0;
pcfr->invalid_dma_length_cnt = 0;
pcfr->clear_txrx_event = 0;
pcfr->cfr_dma_aborts = 0;
wlan_objmgr_pdev_release_ref(pdev, WLAN_CFR_ID);
return status;