qcacmn: Support enhanced Rx capture
Support Rx capture mode to deliver first 128 bytes of each MSDU, along with some meta data. Change-Id: I1ffa8b1a029d46f68aa78520bacc019de8af7a82
This commit is contained in:
@@ -39,6 +39,9 @@
|
|||||||
#endif /* CONFIG_WIN */
|
#endif /* CONFIG_WIN */
|
||||||
#include <cdp_txrx_handle.h>
|
#include <cdp_txrx_handle.h>
|
||||||
#include <cdp_txrx_stats_struct.h>
|
#include <cdp_txrx_stats_struct.h>
|
||||||
|
#ifdef WLAN_RX_PKT_CAPTURE_ENH
|
||||||
|
#include "cdp_txrx_extd_struct.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef OL_TXRX_NUM_LOCAL_PEER_IDS
|
#ifndef OL_TXRX_NUM_LOCAL_PEER_IDS
|
||||||
/*
|
/*
|
||||||
@@ -825,6 +828,7 @@ struct cdp_soc_t {
|
|||||||
* @CDP_CONFIG_CAPTURE_LATENCY: Capture time latency
|
* @CDP_CONFIG_CAPTURE_LATENCY: Capture time latency
|
||||||
* @CDP_INGRESS_STATS: Accumulate ingress statistics
|
* @CDP_INGRESS_STATS: Accumulate ingress statistics
|
||||||
* @CDP_OSIF_DROP: Accumulate drops in OSIF layer
|
* @CDP_OSIF_DROP: Accumulate drops in OSIF layer
|
||||||
|
* @CDP_CONFIG_ENH_RX_CAPTURE: Enable enhanced RX capture
|
||||||
*/
|
*/
|
||||||
enum cdp_pdev_param_type {
|
enum cdp_pdev_param_type {
|
||||||
CDP_CONFIG_DEBUG_SNIFFER,
|
CDP_CONFIG_DEBUG_SNIFFER,
|
||||||
@@ -837,6 +841,19 @@ enum cdp_pdev_param_type {
|
|||||||
CDP_CONFIG_CAPTURE_LATENCY,
|
CDP_CONFIG_CAPTURE_LATENCY,
|
||||||
CDP_INGRESS_STATS,
|
CDP_INGRESS_STATS,
|
||||||
CDP_OSIF_DROP,
|
CDP_OSIF_DROP,
|
||||||
|
CDP_CONFIG_ENH_RX_CAPTURE,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cdp_rx_enh_capture_mode - Rx enhanced capture modes
|
||||||
|
* @CDP_RX_ENH_CAPTURE_DISABLED: Disable Rx enhance capture
|
||||||
|
* @CDP_RX_ENH_CAPTURE_MPDU: Enable capture of 128 bytes of each MPDU
|
||||||
|
* @CDP_RX_ENH_CAPTURE_MPDU_MSDU: Enable capture of 128 bytes of each MSDU
|
||||||
|
*/
|
||||||
|
enum cdp_rx_enh_capture_mode {
|
||||||
|
CDP_RX_ENH_CAPTURE_DISABLED = 0,
|
||||||
|
CDP_RX_ENH_CAPTURE_MPDU,
|
||||||
|
CDP_RX_ENH_CAPTURE_MPDU_MSDU,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1730,6 +1730,8 @@ enum _ol_ath_param_t {
|
|||||||
OL_ATH_PARAM_PERIODIC_CFR_CAPTURE = 404,
|
OL_ATH_PARAM_PERIODIC_CFR_CAPTURE = 404,
|
||||||
OL_ATH_PARAM_FLUSH_PEER_RATE_STATS = 405,
|
OL_ATH_PARAM_FLUSH_PEER_RATE_STATS = 405,
|
||||||
OL_ATH_PARAM_DCS_RE_ENABLE_TIMER = 406,
|
OL_ATH_PARAM_DCS_RE_ENABLE_TIMER = 406,
|
||||||
|
/* Enable/disable Rx lite monitor mode */
|
||||||
|
OL_ATH_PARAM_RX_MON_LITE = 407,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Enumeration of PDEV Configuration parameter */
|
/* Enumeration of PDEV Configuration parameter */
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
#include "dp_tx.h"
|
#include "dp_tx.h"
|
||||||
#include "dp_tx_desc.h"
|
#include "dp_tx_desc.h"
|
||||||
#include "dp_rx.h"
|
#include "dp_rx.h"
|
||||||
|
#include "dp_rx_mon.h"
|
||||||
#ifdef DP_RATETABLE_SUPPORT
|
#ifdef DP_RATETABLE_SUPPORT
|
||||||
#include "dp_ratetable.h"
|
#include "dp_ratetable.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -65,6 +66,24 @@ extern int con_mode_monitor;
|
|||||||
#include <pktlog_ac.h>
|
#include <pktlog_ac.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_RX_PKT_CAPTURE_ENH
|
||||||
|
#include "dp_rx_mon_feature.h"
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* dp_config_enh_rx_capture()- API to enable/disable enhanced rx capture
|
||||||
|
* @pdev_handle: DP_PDEV handle
|
||||||
|
* @val: user provided value
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static QDF_STATUS
|
||||||
|
dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, int val)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void *dp_soc_init(void *dpsoc, HTC_HANDLE htc_handle, void *hif_handle);
|
void *dp_soc_init(void *dpsoc, HTC_HANDLE htc_handle, void *hif_handle);
|
||||||
static void dp_pdev_detach(struct cdp_pdev *txrx_pdev, int force);
|
static void dp_pdev_detach(struct cdp_pdev *txrx_pdev, int force);
|
||||||
static struct dp_soc *
|
static struct dp_soc *
|
||||||
@@ -5822,9 +5841,9 @@ QDF_STATUS dp_monitor_mode_ring_config(struct dp_soc *soc, uint8_t mac_for_pdev,
|
|||||||
* dp_reset_monitor_mode() - Disable monitor mode
|
* dp_reset_monitor_mode() - Disable monitor mode
|
||||||
* @pdev_handle: Datapath PDEV handle
|
* @pdev_handle: Datapath PDEV handle
|
||||||
*
|
*
|
||||||
* Return: 0 on success, not 0 on failure
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
static QDF_STATUS dp_reset_monitor_mode(struct cdp_pdev *pdev_handle)
|
QDF_STATUS dp_reset_monitor_mode(struct cdp_pdev *pdev_handle)
|
||||||
{
|
{
|
||||||
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
struct dp_pdev *pdev = (struct dp_pdev *)pdev_handle;
|
||||||
struct htt_rx_ring_tlv_filter htt_tlv_filter;
|
struct htt_rx_ring_tlv_filter htt_tlv_filter;
|
||||||
@@ -5921,9 +5940,9 @@ static void dp_get_peer_mac_from_peer_id(struct cdp_pdev *pdev_handle,
|
|||||||
* dp_pdev_configure_monitor_rings() - configure monitor rings
|
* dp_pdev_configure_monitor_rings() - configure monitor rings
|
||||||
* @vdev_handle: Datapath VDEV handle
|
* @vdev_handle: Datapath VDEV handle
|
||||||
*
|
*
|
||||||
* Return: void
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
static QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev)
|
QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev)
|
||||||
{
|
{
|
||||||
struct htt_rx_ring_tlv_filter htt_tlv_filter;
|
struct htt_rx_ring_tlv_filter htt_tlv_filter;
|
||||||
struct dp_soc *soc;
|
struct dp_soc *soc;
|
||||||
@@ -5975,6 +5994,16 @@ static QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev)
|
|||||||
htt_tlv_filter.mo_ctrl_filter = pdev->mo_ctrl_filter;
|
htt_tlv_filter.mo_ctrl_filter = pdev->mo_ctrl_filter;
|
||||||
htt_tlv_filter.offset_valid = false;
|
htt_tlv_filter.offset_valid = false;
|
||||||
|
|
||||||
|
if ((pdev->rx_enh_capture_mode == CDP_RX_ENH_CAPTURE_MPDU) ||
|
||||||
|
(pdev->rx_enh_capture_mode == CDP_RX_ENH_CAPTURE_MPDU_MSDU)) {
|
||||||
|
htt_tlv_filter.fp_mgmt_filter = 0;
|
||||||
|
htt_tlv_filter.fp_ctrl_filter = 0;
|
||||||
|
htt_tlv_filter.fp_data_filter = 0;
|
||||||
|
htt_tlv_filter.mo_mgmt_filter = 0;
|
||||||
|
htt_tlv_filter.mo_ctrl_filter = 0;
|
||||||
|
htt_tlv_filter.mo_data_filter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
|
for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
|
||||||
int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
|
int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
|
||||||
|
|
||||||
@@ -5995,6 +6024,10 @@ static QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev)
|
|||||||
htt_tlv_filter.packet = 0;
|
htt_tlv_filter.packet = 0;
|
||||||
htt_tlv_filter.msdu_end = 0;
|
htt_tlv_filter.msdu_end = 0;
|
||||||
htt_tlv_filter.mpdu_end = 0;
|
htt_tlv_filter.mpdu_end = 0;
|
||||||
|
if ((pdev->rx_enh_capture_mode == CDP_RX_ENH_CAPTURE_MPDU) ||
|
||||||
|
(pdev->rx_enh_capture_mode == CDP_RX_ENH_CAPTURE_MPDU_MSDU)) {
|
||||||
|
htt_tlv_filter.mpdu_end = 1;
|
||||||
|
}
|
||||||
htt_tlv_filter.attention = 0;
|
htt_tlv_filter.attention = 0;
|
||||||
htt_tlv_filter.ppdu_start = 1;
|
htt_tlv_filter.ppdu_start = 1;
|
||||||
htt_tlv_filter.ppdu_end = 1;
|
htt_tlv_filter.ppdu_end = 1;
|
||||||
@@ -6004,9 +6037,19 @@ static QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev)
|
|||||||
htt_tlv_filter.enable_fp = 1;
|
htt_tlv_filter.enable_fp = 1;
|
||||||
htt_tlv_filter.enable_md = 0;
|
htt_tlv_filter.enable_md = 0;
|
||||||
htt_tlv_filter.enable_mo = 1;
|
htt_tlv_filter.enable_mo = 1;
|
||||||
if (pdev->mcopy_mode) {
|
if (pdev->mcopy_mode ||
|
||||||
|
(pdev->rx_enh_capture_mode != CDP_RX_ENH_CAPTURE_DISABLED)) {
|
||||||
htt_tlv_filter.packet_header = 1;
|
htt_tlv_filter.packet_header = 1;
|
||||||
|
if (pdev->rx_enh_capture_mode == CDP_RX_ENH_CAPTURE_MPDU) {
|
||||||
|
htt_tlv_filter.header_per_msdu = 0;
|
||||||
|
htt_tlv_filter.enable_mo = 0;
|
||||||
|
} else if (pdev->rx_enh_capture_mode ==
|
||||||
|
CDP_RX_ENH_CAPTURE_MPDU_MSDU) {
|
||||||
|
htt_tlv_filter.header_per_msdu = 1;
|
||||||
|
htt_tlv_filter.enable_mo = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
htt_tlv_filter.fp_mgmt_filter = FILTER_MGMT_ALL;
|
htt_tlv_filter.fp_mgmt_filter = FILTER_MGMT_ALL;
|
||||||
htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_ALL;
|
htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_ALL;
|
||||||
htt_tlv_filter.fp_data_filter = FILTER_DATA_ALL;
|
htt_tlv_filter.fp_data_filter = FILTER_DATA_ALL;
|
||||||
@@ -8188,6 +8231,7 @@ dp_config_debug_sniffer(struct cdp_pdev *pdev_handle, int val)
|
|||||||
dp_h2t_cfg_stats_msg_send(pdev,
|
dp_h2t_cfg_stats_msg_send(pdev,
|
||||||
DP_PPDU_STATS_CFG_SNIFFER, pdev->pdev_id);
|
DP_PPDU_STATS_CFG_SNIFFER, pdev->pdev_id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||||
"Invalid value");
|
"Invalid value");
|
||||||
@@ -8376,6 +8420,8 @@ static QDF_STATUS dp_set_pdev_param(struct cdp_pdev *pdev_handle,
|
|||||||
case CDP_OSIF_DROP:
|
case CDP_OSIF_DROP:
|
||||||
dp_pdev_tid_stats_osif_drop(pdev_handle, val);
|
dp_pdev_tid_stats_osif_drop(pdev_handle, val);
|
||||||
break;
|
break;
|
||||||
|
case CDP_CONFIG_ENH_RX_CAPTURE:
|
||||||
|
return dp_config_enh_rx_capture(pdev_handle, val);
|
||||||
default:
|
default:
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
|
@@ -39,6 +39,22 @@ QDF_STATUS dp_rx_pdev_mon_detach(struct dp_pdev *pdev);
|
|||||||
QDF_STATUS dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev, int mac_id);
|
QDF_STATUS dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev, int mac_id);
|
||||||
QDF_STATUS dp_rx_pdev_mon_status_detach(struct dp_pdev *pdev, int mac_id);
|
QDF_STATUS dp_rx_pdev_mon_status_detach(struct dp_pdev *pdev, int mac_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_reset_monitor_mode() - Disable monitor mode
|
||||||
|
* @pdev_handle: Datapath PDEV handle
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS dp_reset_monitor_mode(struct cdp_pdev *pdev_handle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_pdev_configure_monitor_rings() - configure monitor rings
|
||||||
|
* @vdev_handle: Datapath VDEV handle
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_mon_link_free() - free monitor link desc pool
|
* dp_mon_link_free() - free monitor link desc pool
|
||||||
* @pdev: core txrx pdev context
|
* @pdev: core txrx pdev context
|
||||||
|
@@ -32,6 +32,26 @@
|
|||||||
#include "dp_ratetable.h"
|
#include "dp_ratetable.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_RX_PKT_CAPTURE_ENH
|
||||||
|
#include "dp_rx_mon_feature.h"
|
||||||
|
#else
|
||||||
|
static QDF_STATUS
|
||||||
|
dp_rx_handle_enh_capture(struct dp_soc *soc, struct dp_pdev *pdev,
|
||||||
|
struct hal_rx_ppdu_info *ppdu_info)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dp_rx_mon_enh_capture_process(struct dp_pdev *pdev, uint32_t tlv_status,
|
||||||
|
qdf_nbuf_t status_nbuf,
|
||||||
|
struct hal_rx_ppdu_info *ppdu_info,
|
||||||
|
bool *nbuf_used,
|
||||||
|
uint32_t rx_enh_capture_mode)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_rx_populate_cdp_indication_ppdu() - Populate cdp rx indication structure
|
* dp_rx_populate_cdp_indication_ppdu() - Populate cdp rx indication structure
|
||||||
* @pdev: pdev ctx
|
* @pdev: pdev ctx
|
||||||
@@ -531,9 +551,13 @@ dp_rx_mon_status_process_tlv(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
uint8_t *rx_tlv_start;
|
uint8_t *rx_tlv_start;
|
||||||
uint32_t tlv_status = HAL_TLV_STATUS_BUF_DONE;
|
uint32_t tlv_status = HAL_TLV_STATUS_BUF_DONE;
|
||||||
QDF_STATUS m_copy_status = QDF_STATUS_SUCCESS;
|
QDF_STATUS m_copy_status = QDF_STATUS_SUCCESS;
|
||||||
|
QDF_STATUS enh_log_status = QDF_STATUS_SUCCESS;
|
||||||
struct cdp_pdev_mon_stats *rx_mon_stats;
|
struct cdp_pdev_mon_stats *rx_mon_stats;
|
||||||
int smart_mesh_status;
|
int smart_mesh_status;
|
||||||
enum WDI_EVENT pktlog_mode = WDI_NO_VAL;
|
enum WDI_EVENT pktlog_mode = WDI_NO_VAL;
|
||||||
|
bool nbuf_used;
|
||||||
|
uint32_t rx_enh_capture_mode;
|
||||||
|
|
||||||
|
|
||||||
ppdu_info = &pdev->ppdu_info;
|
ppdu_info = &pdev->ppdu_info;
|
||||||
rx_mon_stats = &pdev->rx_mon_stats;
|
rx_mon_stats = &pdev->rx_mon_stats;
|
||||||
@@ -541,16 +565,19 @@ dp_rx_mon_status_process_tlv(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
if (pdev->mon_ppdu_status != DP_PPDU_STATUS_START)
|
if (pdev->mon_ppdu_status != DP_PPDU_STATUS_START)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
rx_enh_capture_mode = pdev->rx_enh_capture_mode;
|
||||||
|
|
||||||
while (!qdf_nbuf_is_queue_empty(&pdev->rx_status_q)) {
|
while (!qdf_nbuf_is_queue_empty(&pdev->rx_status_q)) {
|
||||||
|
|
||||||
status_nbuf = qdf_nbuf_queue_remove(&pdev->rx_status_q);
|
status_nbuf = qdf_nbuf_queue_remove(&pdev->rx_status_q);
|
||||||
|
|
||||||
rx_tlv = qdf_nbuf_data(status_nbuf);
|
rx_tlv = qdf_nbuf_data(status_nbuf);
|
||||||
rx_tlv_start = rx_tlv;
|
rx_tlv_start = rx_tlv;
|
||||||
|
nbuf_used = false;
|
||||||
|
|
||||||
if ((pdev->monitor_vdev) || (pdev->enhanced_stats_en) ||
|
if ((pdev->monitor_vdev) || (pdev->enhanced_stats_en) ||
|
||||||
pdev->mcopy_mode) {
|
pdev->mcopy_mode ||
|
||||||
|
(rx_enh_capture_mode != CDP_RX_ENH_CAPTURE_DISABLED)) {
|
||||||
do {
|
do {
|
||||||
tlv_status = hal_rx_status_get_tlv_info(rx_tlv,
|
tlv_status = hal_rx_status_get_tlv_info(rx_tlv,
|
||||||
ppdu_info, pdev->soc->hal_soc);
|
ppdu_info, pdev->soc->hal_soc);
|
||||||
@@ -558,12 +585,18 @@ dp_rx_mon_status_process_tlv(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
dp_rx_mon_update_dbg_ppdu_stats(ppdu_info,
|
dp_rx_mon_update_dbg_ppdu_stats(ppdu_info,
|
||||||
rx_mon_stats);
|
rx_mon_stats);
|
||||||
|
|
||||||
|
dp_rx_mon_enh_capture_process(pdev, tlv_status,
|
||||||
|
status_nbuf, ppdu_info,
|
||||||
|
&nbuf_used, rx_enh_capture_mode);
|
||||||
|
|
||||||
rx_tlv = hal_rx_status_get_next_tlv(rx_tlv);
|
rx_tlv = hal_rx_status_get_next_tlv(rx_tlv);
|
||||||
|
|
||||||
if ((rx_tlv - rx_tlv_start) >= RX_BUFFER_SIZE)
|
if ((rx_tlv - rx_tlv_start) >= RX_BUFFER_SIZE)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} while (tlv_status == HAL_TLV_STATUS_PPDU_NOT_DONE);
|
} while ((tlv_status == HAL_TLV_STATUS_PPDU_NOT_DONE) ||
|
||||||
|
(tlv_status == HAL_TLV_STATUS_HEADER) ||
|
||||||
|
(tlv_status == HAL_TLV_STATUS_MPDU_END));
|
||||||
}
|
}
|
||||||
if (pdev->dp_peer_based_pktlog) {
|
if (pdev->dp_peer_based_pktlog) {
|
||||||
dp_rx_process_peer_based_pktlog(soc, ppdu_info,
|
dp_rx_process_peer_based_pktlog(soc, ppdu_info,
|
||||||
@@ -593,6 +626,14 @@ dp_rx_mon_status_process_tlv(struct dp_soc *soc, uint32_t mac_id,
|
|||||||
pdev, ppdu_info, status_nbuf);
|
pdev, ppdu_info, status_nbuf);
|
||||||
if (m_copy_status == QDF_STATUS_SUCCESS)
|
if (m_copy_status == QDF_STATUS_SUCCESS)
|
||||||
qdf_nbuf_free(status_nbuf);
|
qdf_nbuf_free(status_nbuf);
|
||||||
|
} else if (rx_enh_capture_mode != CDP_RX_ENH_CAPTURE_DISABLED) {
|
||||||
|
if (!nbuf_used)
|
||||||
|
qdf_nbuf_free(status_nbuf);
|
||||||
|
|
||||||
|
if (tlv_status == HAL_TLV_STATUS_PPDU_DONE)
|
||||||
|
enh_log_status =
|
||||||
|
dp_rx_handle_enh_capture(soc,
|
||||||
|
pdev, ppdu_info);
|
||||||
} else {
|
} else {
|
||||||
qdf_nbuf_free(status_nbuf);
|
qdf_nbuf_free(status_nbuf);
|
||||||
}
|
}
|
||||||
@@ -1022,6 +1063,7 @@ dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev, int ring_id) {
|
|||||||
union dp_rx_desc_list_elem_t *tail = NULL;
|
union dp_rx_desc_list_elem_t *tail = NULL;
|
||||||
struct dp_srng *mon_status_ring;
|
struct dp_srng *mon_status_ring;
|
||||||
uint32_t num_entries;
|
uint32_t num_entries;
|
||||||
|
uint32_t i;
|
||||||
struct rx_desc_pool *rx_desc_pool;
|
struct rx_desc_pool *rx_desc_pool;
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
int mac_for_pdev = dp_get_mac_id_for_mac(soc, ring_id);
|
int mac_for_pdev = dp_get_mac_id_for_mac(soc, ring_id);
|
||||||
@@ -1065,5 +1107,13 @@ dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev, int ring_id) {
|
|||||||
dp_rx_mon_init_dbg_ppdu_stats(&pdev->ppdu_info,
|
dp_rx_mon_init_dbg_ppdu_stats(&pdev->ppdu_info,
|
||||||
&pdev->rx_mon_stats);
|
&pdev->rx_mon_stats);
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_MU_USERS; i++) {
|
||||||
|
qdf_nbuf_queue_init(&pdev->mpdu_q[i]);
|
||||||
|
pdev->is_mpdu_hdr[i] = true;
|
||||||
|
}
|
||||||
|
qdf_mem_zero(pdev->msdu_list, sizeof(pdev->msdu_list[MAX_MU_USERS]));
|
||||||
|
|
||||||
|
pdev->rx_enh_capture_mode = CDP_RX_ENH_CAPTURE_DISABLED;
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -92,6 +92,7 @@
|
|||||||
#define DP_MAX_DELBA_RETRY 3
|
#define DP_MAX_DELBA_RETRY 3
|
||||||
|
|
||||||
#define PCP_TID_MAP_MAX 8
|
#define PCP_TID_MAP_MAX 8
|
||||||
|
#define MAX_MU_USERS 37
|
||||||
|
|
||||||
#ifndef REMOVE_PKT_LOG
|
#ifndef REMOVE_PKT_LOG
|
||||||
enum rx_pktlog_mode {
|
enum rx_pktlog_mode {
|
||||||
@@ -101,6 +102,12 @@ enum rx_pktlog_mode {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct msdu_list {
|
||||||
|
qdf_nbuf_t head;
|
||||||
|
qdf_nbuf_t tail;
|
||||||
|
uint32 sum_len;
|
||||||
|
};
|
||||||
|
|
||||||
struct dp_soc_cmn;
|
struct dp_soc_cmn;
|
||||||
struct dp_pdev;
|
struct dp_pdev;
|
||||||
struct dp_vdev;
|
struct dp_vdev;
|
||||||
@@ -1291,7 +1298,18 @@ struct dp_pdev {
|
|||||||
uint64_t mon_last_linkdesc_paddr;
|
uint64_t mon_last_linkdesc_paddr;
|
||||||
/* to track duplicate buffer indications by HW for a WAR */
|
/* to track duplicate buffer indications by HW for a WAR */
|
||||||
uint32_t mon_last_buf_cookie;
|
uint32_t mon_last_buf_cookie;
|
||||||
|
/* 128 bytes mpdu header queue per user for ppdu */
|
||||||
|
qdf_nbuf_queue_t mpdu_q[MAX_MU_USERS];
|
||||||
|
/* is this a mpdu header TLV and not msdu header TLV */
|
||||||
|
bool is_mpdu_hdr[MAX_MU_USERS];
|
||||||
|
/* per user 128 bytes msdu header list for MPDU */
|
||||||
|
struct msdu_list msdu_list[MAX_MU_USERS];
|
||||||
|
/* RX enhanced capture mode */
|
||||||
|
uint32_t rx_enh_capture_mode;
|
||||||
|
#ifdef WLAN_RX_PKT_CAPTURE_ENH
|
||||||
|
/* RX per MPDU/PPDU information */
|
||||||
|
struct cdp_rx_indication_mpdu mpdu_ind[MAX_MU_USERS];
|
||||||
|
#endif
|
||||||
/* pool addr for mcast enhance buff */
|
/* pool addr for mcast enhance buff */
|
||||||
struct {
|
struct {
|
||||||
int size;
|
int size;
|
||||||
|
@@ -65,7 +65,11 @@
|
|||||||
#define HAL_TLV_STATUS_PPDU_DONE 1
|
#define HAL_TLV_STATUS_PPDU_DONE 1
|
||||||
#define HAL_TLV_STATUS_BUF_DONE 2
|
#define HAL_TLV_STATUS_BUF_DONE 2
|
||||||
#define HAL_TLV_STATUS_PPDU_NON_STD_DONE 3
|
#define HAL_TLV_STATUS_PPDU_NON_STD_DONE 3
|
||||||
|
#define HAL_TLV_STATUS_PPDU_START 4
|
||||||
|
#define HAL_TLV_STATUS_HEADER 5
|
||||||
|
#define HAL_TLV_STATUS_MPDU_END 6
|
||||||
|
#define HAL_TLV_STATUS_MSDU_START 7
|
||||||
|
#define HAL_TLV_STATUS_MSDU_END 8
|
||||||
|
|
||||||
#define HAL_MAX_UL_MU_USERS 8
|
#define HAL_MAX_UL_MU_USERS 8
|
||||||
|
|
||||||
@@ -386,10 +390,6 @@ enum {
|
|||||||
HAL_RX_MON_PPDU_END,
|
HAL_RX_MON_PPDU_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hal_rx_ppdu_user_info {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
struct hal_rx_ppdu_common_info {
|
struct hal_rx_ppdu_common_info {
|
||||||
uint32_t ppdu_id;
|
uint32_t ppdu_id;
|
||||||
uint32_t ppdu_timestamp;
|
uint32_t ppdu_timestamp;
|
||||||
@@ -418,12 +418,20 @@ struct hal_rx_nac_info {
|
|||||||
|
|
||||||
struct hal_rx_ppdu_info {
|
struct hal_rx_ppdu_info {
|
||||||
struct hal_rx_ppdu_common_info com_info;
|
struct hal_rx_ppdu_common_info com_info;
|
||||||
struct hal_rx_ppdu_user_info user_info[HAL_MAX_UL_MU_USERS];
|
|
||||||
struct mon_rx_status rx_status;
|
struct mon_rx_status rx_status;
|
||||||
|
struct mon_rx_user_status rx_user_status[HAL_MAX_UL_MU_USERS];
|
||||||
struct hal_rx_msdu_payload_info msdu_info;
|
struct hal_rx_msdu_payload_info msdu_info;
|
||||||
struct hal_rx_nac_info nac_info;
|
struct hal_rx_nac_info nac_info;
|
||||||
/* status ring PPDU start and end state */
|
/* status ring PPDU start and end state */
|
||||||
uint32_t rx_state;
|
uint32_t rx_state;
|
||||||
|
/* MU user id for status ring TLV */
|
||||||
|
uint32_t user_id;
|
||||||
|
/* MPDU/MSDU truncated to 128 bytes header start addr in status skb */
|
||||||
|
unsigned char *data;
|
||||||
|
/* MPDU/MSDU truncated to 128 bytes header real length */
|
||||||
|
uint32_t hdr_len;
|
||||||
|
/* MPDU FCS error */
|
||||||
|
bool fcs_err;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline uint32_t
|
static inline uint32_t
|
||||||
|
@@ -263,6 +263,30 @@ hal_rx_handle_other_tlvs(uint32_t tlv_tag, void *rx_tlv,
|
|||||||
}
|
}
|
||||||
#endif /* CONFIG_MCL && QCA_WIFI_QCA6290_11AX */
|
#endif /* CONFIG_MCL && QCA_WIFI_QCA6290_11AX */
|
||||||
|
|
||||||
|
#if defined(RX_PPDU_END_USER_STATS_1_OFDMA_INFO_VALID_OFFSET)
|
||||||
|
static inline void
|
||||||
|
hal_rx_handle_ofdma_info(
|
||||||
|
void *rx_tlv,
|
||||||
|
struct mon_rx_user_status *mon_rx_user_status)
|
||||||
|
{
|
||||||
|
mon_rx_user_status->ofdma_info_valid =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_1,
|
||||||
|
OFDMA_INFO_VALID);
|
||||||
|
mon_rx_user_status->dl_ofdma_ru_start_index =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_1,
|
||||||
|
DL_OFDMA_RU_START_INDEX);
|
||||||
|
mon_rx_user_status->dl_ofdma_ru_width =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_2,
|
||||||
|
DL_OFDMA_RU_WIDTH);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void
|
||||||
|
hal_rx_handle_ofdma_info(void *rx_tlv,
|
||||||
|
struct mon_rx_user_status *mon_rx_user_status)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hal_rx_status_get_tlv_info() - process receive info TLV
|
* hal_rx_status_get_tlv_info() - process receive info TLV
|
||||||
* @rx_tlv_hdr: pointer to TLV header
|
* @rx_tlv_hdr: pointer to TLV header
|
||||||
@@ -283,6 +307,7 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
uint16_t he_ltf = 0;
|
uint16_t he_ltf = 0;
|
||||||
void *rx_tlv;
|
void *rx_tlv;
|
||||||
bool unhandled = false;
|
bool unhandled = false;
|
||||||
|
struct mon_rx_user_status *mon_rx_user_status;
|
||||||
struct hal_rx_ppdu_info *ppdu_info =
|
struct hal_rx_ppdu_info *ppdu_info =
|
||||||
(struct hal_rx_ppdu_info *)ppduinfo;
|
(struct hal_rx_ppdu_info *)ppduinfo;
|
||||||
|
|
||||||
@@ -291,6 +316,10 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv_hdr);
|
tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv_hdr);
|
||||||
|
|
||||||
rx_tlv = (uint8_t *)rx_tlv_hdr + HAL_RX_TLV32_HDR_SIZE;
|
rx_tlv = (uint8_t *)rx_tlv_hdr + HAL_RX_TLV32_HDR_SIZE;
|
||||||
|
|
||||||
|
qdf_trace_hex_dump(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
|
rx_tlv, tlv_len);
|
||||||
|
|
||||||
switch (tlv_tag) {
|
switch (tlv_tag) {
|
||||||
|
|
||||||
case WIFIRX_PPDU_START_E:
|
case WIFIRX_PPDU_START_E:
|
||||||
@@ -396,6 +425,17 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mon_rx_user_status = &ppdu_info->rx_user_status[user_id];
|
||||||
|
|
||||||
|
mon_rx_user_status->mcs =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_1,
|
||||||
|
MCS);
|
||||||
|
mon_rx_user_status->nss =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_1,
|
||||||
|
NSS);
|
||||||
|
|
||||||
|
hal_rx_handle_ofdma_info(rx_tlv, mon_rx_user_status);
|
||||||
|
|
||||||
ppdu_info->com_info.mpdu_cnt_fcs_ok =
|
ppdu_info->com_info.mpdu_cnt_fcs_ok =
|
||||||
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3,
|
HAL_RX_GET(rx_tlv, RX_PPDU_END_USER_STATS_3,
|
||||||
MPDU_CNT_FCS_OK);
|
MPDU_CNT_FCS_OK);
|
||||||
@@ -1061,8 +1101,8 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
{
|
{
|
||||||
uint8_t reception_type;
|
uint8_t reception_type;
|
||||||
uint8_t *rssi_info_tlv = (uint8_t *)rx_tlv +
|
uint8_t *rssi_info_tlv = (uint8_t *)rx_tlv +
|
||||||
HAL_RX_OFFSET(UNIFIED_PHYRX_RSSI_LEGACY_3,
|
HAL_RX_OFFSET(UNIFIED_PHYRX_RSSI_LEGACY_19,
|
||||||
RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS);
|
RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS);
|
||||||
|
|
||||||
ppdu_info->rx_status.rssi_comb = HAL_RX_GET(rx_tlv,
|
ppdu_info->rx_status.rssi_comb = HAL_RX_GET(rx_tlv,
|
||||||
PHYRX_RSSI_LEGACY_35, RSSI_COMB);
|
PHYRX_RSSI_LEGACY_35, RSSI_COMB);
|
||||||
@@ -1087,44 +1127,51 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
}
|
}
|
||||||
value = HAL_RX_GET(rssi_info_tlv,
|
value = HAL_RX_GET(rssi_info_tlv,
|
||||||
RECEIVE_RSSI_INFO_0, RSSI_PRI20_CHAIN0);
|
RECEIVE_RSSI_INFO_0, RSSI_PRI20_CHAIN0);
|
||||||
|
ppdu_info->rx_status.rssi[0] = value;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"RSSI_PRI20_CHAIN0: %d\n", value);
|
"RSSI_PRI20_CHAIN0: %d\n", value);
|
||||||
|
|
||||||
value = HAL_RX_GET(rssi_info_tlv,
|
value = HAL_RX_GET(rssi_info_tlv,
|
||||||
RECEIVE_RSSI_INFO_0, RSSI_EXT20_CHAIN0);
|
RECEIVE_RSSI_INFO_2, RSSI_PRI20_CHAIN1);
|
||||||
|
ppdu_info->rx_status.rssi[1] = value;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"RSSI_EXT20_CHAIN0: %d\n", value);
|
"RSSI_PRI20_CHAIN1: %d\n", value);
|
||||||
|
|
||||||
value = HAL_RX_GET(rssi_info_tlv,
|
value = HAL_RX_GET(rssi_info_tlv,
|
||||||
RECEIVE_RSSI_INFO_0, RSSI_EXT40_LOW20_CHAIN0);
|
RECEIVE_RSSI_INFO_4, RSSI_PRI20_CHAIN2);
|
||||||
|
ppdu_info->rx_status.rssi[2] = value;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"RSSI_EXT40_LOW20_CHAIN0: %d\n", value);
|
"RSSI_PRI20_CHAIN2: %d\n", value);
|
||||||
|
|
||||||
value = HAL_RX_GET(rssi_info_tlv,
|
value = HAL_RX_GET(rssi_info_tlv,
|
||||||
RECEIVE_RSSI_INFO_0, RSSI_EXT40_HIGH20_CHAIN0);
|
RECEIVE_RSSI_INFO_6, RSSI_PRI20_CHAIN3);
|
||||||
|
ppdu_info->rx_status.rssi[3] = value;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"RSSI_EXT40_HIGH20_CHAIN0: %d\n", value);
|
"RSSI_PRI20_CHAIN3: %d\n", value);
|
||||||
|
|
||||||
value = HAL_RX_GET(rssi_info_tlv,
|
value = HAL_RX_GET(rssi_info_tlv,
|
||||||
RECEIVE_RSSI_INFO_1, RSSI_EXT80_LOW20_CHAIN0);
|
RECEIVE_RSSI_INFO_8, RSSI_PRI20_CHAIN4);
|
||||||
|
ppdu_info->rx_status.rssi[4] = value;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"RSSI_EXT80_LOW20_CHAIN0: %d\n", value);
|
"RSSI_PRI20_CHAIN4: %d\n", value);
|
||||||
|
|
||||||
value = HAL_RX_GET(rssi_info_tlv,
|
value = HAL_RX_GET(rssi_info_tlv,
|
||||||
RECEIVE_RSSI_INFO_1, RSSI_EXT80_LOW_HIGH20_CHAIN0);
|
RECEIVE_RSSI_INFO_10, RSSI_PRI20_CHAIN5);
|
||||||
|
ppdu_info->rx_status.rssi[5] = value;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"RSSI_EXT80_LOW_HIGH20_CHAIN0: %d\n", value);
|
"RSSI_PRI20_CHAIN5: %d\n", value);
|
||||||
|
|
||||||
value = HAL_RX_GET(rssi_info_tlv,
|
value = HAL_RX_GET(rssi_info_tlv,
|
||||||
RECEIVE_RSSI_INFO_1, RSSI_EXT80_HIGH_LOW20_CHAIN0);
|
RECEIVE_RSSI_INFO_12, RSSI_PRI20_CHAIN6);
|
||||||
|
ppdu_info->rx_status.rssi[6] = value;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"RSSI_EXT80_HIGH_LOW20_CHAIN0: %d\n", value);
|
"RSSI_PRI20_CHAIN1: %d\n", value);
|
||||||
|
|
||||||
value = HAL_RX_GET(rssi_info_tlv,
|
value = HAL_RX_GET(rssi_info_tlv,
|
||||||
RECEIVE_RSSI_INFO_1,
|
RECEIVE_RSSI_INFO_14, RSSI_PRI20_CHAIN7);
|
||||||
RSSI_EXT80_HIGH20_CHAIN0);
|
ppdu_info->rx_status.rssi[7] = value;
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"RSSI_EXT80_HIGH20_CHAIN0: %d\n", value);
|
"RSSI_PRI20_CHAIN7: %d\n", value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WIFIPHYRX_OTHER_RECEIVE_INFO_E:
|
case WIFIPHYRX_OTHER_RECEIVE_INFO_E:
|
||||||
@@ -1134,7 +1181,11 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
case WIFIRX_HEADER_E:
|
case WIFIRX_HEADER_E:
|
||||||
ppdu_info->msdu_info.first_msdu_payload = rx_tlv;
|
ppdu_info->msdu_info.first_msdu_payload = rx_tlv;
|
||||||
ppdu_info->msdu_info.payload_len = tlv_len;
|
ppdu_info->msdu_info.payload_len = tlv_len;
|
||||||
break;
|
ppdu_info->user_id = user_id;
|
||||||
|
ppdu_info->hdr_len = tlv_len;
|
||||||
|
ppdu_info->data = rx_tlv;
|
||||||
|
ppdu_info->data += 4;
|
||||||
|
return HAL_TLV_STATUS_HEADER;
|
||||||
case WIFIRX_MPDU_START_E:
|
case WIFIRX_MPDU_START_E:
|
||||||
{
|
{
|
||||||
uint8_t *rx_mpdu_start =
|
uint8_t *rx_mpdu_start =
|
||||||
@@ -1186,6 +1237,12 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
|||||||
ppdu_info->rx_status.monitor_direct_used = 1;
|
ppdu_info->rx_status.monitor_direct_used = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case WIFIRX_MPDU_END_E:
|
||||||
|
ppdu_info->user_id = user_id;
|
||||||
|
ppdu_info->fcs_err =
|
||||||
|
HAL_RX_GET(rx_tlv, RX_MPDU_END_1,
|
||||||
|
FCS_ERR);
|
||||||
|
return HAL_TLV_STATUS_MPDU_END;
|
||||||
case 0:
|
case 0:
|
||||||
return HAL_TLV_STATUS_PPDU_DONE;
|
return HAL_TLV_STATUS_PPDU_DONE;
|
||||||
|
|
||||||
|
@@ -48,6 +48,8 @@
|
|||||||
PHYRX_HE_SIG_B2_OFDMA_0_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_STA_ID_OFFSET
|
PHYRX_HE_SIG_B2_OFDMA_0_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_STA_ID_OFFSET
|
||||||
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
PHYRX_RSSI_LEGACY_3_PRE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
|
PHYRX_RSSI_LEGACY_3_PRE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
|
||||||
|
#define UNIFIED_PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
|
PHYRX_RSSI_LEGACY_19_PREAMBLE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
|
||||||
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
||||||
RX_MPDU_START_0_RX_MPDU_INFO_DETAILS_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET
|
RX_MPDU_START_0_RX_MPDU_INFO_DETAILS_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET
|
||||||
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
||||||
|
@@ -54,6 +54,8 @@
|
|||||||
PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET
|
PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET
|
PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET
|
||||||
|
#define UNIFIED_PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
|
PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
||||||
RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET
|
RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
||||||
|
@@ -54,6 +54,8 @@
|
|||||||
PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET
|
PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET
|
PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET
|
||||||
|
#define UNIFIED_PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
|
PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
||||||
RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET
|
RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
||||||
|
@@ -48,6 +48,8 @@
|
|||||||
PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET
|
PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET
|
PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET
|
||||||
|
#define UNIFIED_PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
|
PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
||||||
RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET
|
RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET
|
||||||
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
||||||
|
@@ -48,6 +48,8 @@
|
|||||||
PHYRX_HE_SIG_B2_OFDMA_0_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_STA_ID_OFFSET
|
PHYRX_HE_SIG_B2_OFDMA_0_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_STA_ID_OFFSET
|
||||||
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
#define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
PHYRX_RSSI_LEGACY_3_PRE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
|
PHYRX_RSSI_LEGACY_3_PRE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
|
||||||
|
#define UNIFIED_PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET \
|
||||||
|
PHYRX_RSSI_LEGACY_19_PREAMBLE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
|
||||||
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
#define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
|
||||||
RX_MPDU_START_0_RX_MPDU_INFO_DETAILS_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET
|
RX_MPDU_START_0_RX_MPDU_INFO_DETAILS_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET
|
||||||
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
#define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
|
||||||
|
@@ -154,6 +154,8 @@
|
|||||||
#define IEEE80211_AMSDU_FLAG 0x02
|
#define IEEE80211_AMSDU_FLAG 0x02
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MAX_CHAIN 8
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct mon_rx_status - This will have monitor mode rx_status extracted from
|
* struct mon_rx_status - This will have monitor mode rx_status extracted from
|
||||||
* htt_rx_desc used later to update radiotap information.
|
* htt_rx_desc used later to update radiotap information.
|
||||||
@@ -191,6 +193,7 @@
|
|||||||
* @beamformed: Is frame beamformed.
|
* @beamformed: Is frame beamformed.
|
||||||
* @he_sig_b_common_RU[4]: HE (11ax) common RU assignment index
|
* @he_sig_b_common_RU[4]: HE (11ax) common RU assignment index
|
||||||
* @rssi_comb: Combined RSSI
|
* @rssi_comb: Combined RSSI
|
||||||
|
* @rssi[MAX_CHAIN]: 8 bits RSSI per 20Mhz per chain
|
||||||
* @duration: 802.11 Duration
|
* @duration: 802.11 Duration
|
||||||
* @frame_control_info_valid: field indicates if fc value is valid
|
* @frame_control_info_valid: field indicates if fc value is valid
|
||||||
* @frame_control: frame control field
|
* @frame_control: frame control field
|
||||||
@@ -266,6 +269,7 @@ struct mon_rx_status {
|
|||||||
uint8_t beamformed;
|
uint8_t beamformed;
|
||||||
uint8_t he_sig_b_common_RU[4];
|
uint8_t he_sig_b_common_RU[4];
|
||||||
int8_t rssi_comb;
|
int8_t rssi_comb;
|
||||||
|
uint64_t rssi[MAX_CHAIN];
|
||||||
uint8_t reception_type;
|
uint8_t reception_type;
|
||||||
uint16_t duration;
|
uint16_t duration;
|
||||||
uint8_t frame_control_info_valid;
|
uint8_t frame_control_info_valid;
|
||||||
@@ -302,6 +306,23 @@ struct mon_rx_status {
|
|||||||
uint8_t ltf_size;
|
uint8_t ltf_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct mon_rx_status - This will have monitor mode per user rx_status
|
||||||
|
* extracted from hardware TLV.
|
||||||
|
* @mcs: MCS index of Rx frame
|
||||||
|
* @nss: Number of spatial streams
|
||||||
|
* @ofdma_info_valid: OFDMA info below is valid
|
||||||
|
* @dl_ofdma_ru_start_index: OFDMA RU start index
|
||||||
|
* @dl_ofdma_ru_width: OFDMA total RU width
|
||||||
|
*/
|
||||||
|
struct mon_rx_user_status {
|
||||||
|
uint32_t mcs:4,
|
||||||
|
nss:3,
|
||||||
|
ofdma_info_valid:1,
|
||||||
|
dl_ofdma_ru_start_index:7,
|
||||||
|
dl_ofdma_ru_width:7;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct qdf_radiotap_vendor_ns - Vendor Namespace header as per
|
* struct qdf_radiotap_vendor_ns - Vendor Namespace header as per
|
||||||
* Radiotap spec: https://www.radiotap.org/fields/Vendor%20Namespace.html
|
* Radiotap spec: https://www.radiotap.org/fields/Vendor%20Namespace.html
|
||||||
@@ -1706,6 +1727,41 @@ static inline void qdf_nbuf_reserve(qdf_nbuf_t buf, qdf_size_t size)
|
|||||||
__qdf_nbuf_reserve(buf, size);
|
__qdf_nbuf_reserve(buf, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdf_nbuf_set_data_pointer() - set data pointer
|
||||||
|
* @buf: Network buf instance
|
||||||
|
* @data: data pointer
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void qdf_nbuf_set_data_pointer(qdf_nbuf_t buf, uint8_t *data)
|
||||||
|
{
|
||||||
|
__qdf_nbuf_set_data_pointer(buf, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdf_nbuf_set_len() - set data length
|
||||||
|
* @buf: Network buf instance
|
||||||
|
* @len: data length
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void qdf_nbuf_set_len(qdf_nbuf_t buf, uint32_t len)
|
||||||
|
{
|
||||||
|
__qdf_nbuf_set_len(buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdf_nbuf_set_tail_pointer() - set data tail pointer
|
||||||
|
* @buf: Network buf instance
|
||||||
|
* @len: length of data
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void qdf_nbuf_set_tail_pointer(qdf_nbuf_t buf, int len)
|
||||||
|
{
|
||||||
|
__qdf_nbuf_set_tail_pointer(buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qdf_nbuf_reset() - reset the buffer data and pointer
|
* qdf_nbuf_reset() - reset the buffer data and pointer
|
||||||
* @buf: Network buf instance
|
* @buf: Network buf instance
|
||||||
@@ -1870,6 +1926,12 @@ qdf_nbuf_queue_first(qdf_nbuf_queue_t *head)
|
|||||||
return __qdf_nbuf_queue_first(head);
|
return __qdf_nbuf_queue_first(head);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline qdf_nbuf_t
|
||||||
|
qdf_nbuf_queue_last(qdf_nbuf_queue_t *head)
|
||||||
|
{
|
||||||
|
return __qdf_nbuf_queue_last(head);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qdf_nbuf_get_protocol() - return the protocol value of the skb
|
* qdf_nbuf_get_protocol() - return the protocol value of the skb
|
||||||
* @skb: Pointer to network buffer
|
* @skb: Pointer to network buffer
|
||||||
|
@@ -147,6 +147,7 @@ typedef union {
|
|||||||
*
|
*
|
||||||
* @rx.ftype: mcast2ucast, TSO, SG, MESH
|
* @rx.ftype: mcast2ucast, TSO, SG, MESH
|
||||||
* @rx.is_raw_frame: RAW frame
|
* @rx.is_raw_frame: RAW frame
|
||||||
|
* @rx.fcs_err: FCS error
|
||||||
* @rx.reserved: reserved
|
* @rx.reserved: reserved
|
||||||
*
|
*
|
||||||
* @tx.dev.priv_cb_w.fctx: ctx to handle special pkts defined by ftype
|
* @tx.dev.priv_cb_w.fctx: ctx to handle special pkts defined by ftype
|
||||||
@@ -259,7 +260,8 @@ struct qdf_nbuf_cb {
|
|||||||
} trace;
|
} trace;
|
||||||
uint8_t ftype;
|
uint8_t ftype;
|
||||||
uint8_t is_raw_frame:1,
|
uint8_t is_raw_frame:1,
|
||||||
reserved:7;
|
fcs_err:1,
|
||||||
|
reserved:6;
|
||||||
} rx;
|
} rx;
|
||||||
|
|
||||||
/* Note: MAX: 40 bytes */
|
/* Note: MAX: 40 bytes */
|
||||||
@@ -406,6 +408,10 @@ QDF_COMPILE_TIME_ASSERT(qdf_nbuf_cb_size,
|
|||||||
(((struct qdf_nbuf_cb *) \
|
(((struct qdf_nbuf_cb *) \
|
||||||
((skb)->cb))->u.rx.flag_is_frag)
|
((skb)->cb))->u.rx.flag_is_frag)
|
||||||
|
|
||||||
|
#define QDF_NBUF_CB_RX_FCS_ERR(skb) \
|
||||||
|
(((struct qdf_nbuf_cb *) \
|
||||||
|
((skb)->cb))->u.rx.fcs_err)
|
||||||
|
|
||||||
#define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \
|
#define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \
|
||||||
qdf_nbuf_set_state(skb, PACKET_STATE)
|
qdf_nbuf_set_state(skb, PACKET_STATE)
|
||||||
|
|
||||||
@@ -1012,6 +1018,45 @@ static inline struct sk_buff *__qdf_nbuf_copy(struct sk_buff *skb)
|
|||||||
|
|
||||||
#define __qdf_nbuf_reserve skb_reserve
|
#define __qdf_nbuf_reserve skb_reserve
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __qdf_nbuf_set_data_pointer() - set buffer data pointer
|
||||||
|
* @skb: Pointer to network buffer
|
||||||
|
* @data: data pointer
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
__qdf_nbuf_set_data_pointer(struct sk_buff *skb, uint8_t *data)
|
||||||
|
{
|
||||||
|
skb->data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __qdf_nbuf_set_len() - set buffer data length
|
||||||
|
* @skb: Pointer to network buffer
|
||||||
|
* @len: data length
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
__qdf_nbuf_set_len(struct sk_buff *skb, uint32_t len)
|
||||||
|
{
|
||||||
|
skb->len = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __qdf_nbuf_set_tail_pointer() - set buffer data tail pointer
|
||||||
|
* @skb: Pointer to network buffer
|
||||||
|
* @len: skb data length
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
__qdf_nbuf_set_tail_pointer(struct sk_buff *skb, int len)
|
||||||
|
{
|
||||||
|
skb_set_tail_pointer(skb, len);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __qdf_nbuf_reset() - reset the buffer data and pointer
|
* __qdf_nbuf_reset() - reset the buffer data and pointer
|
||||||
* @buf: Network buf instance
|
* @buf: Network buf instance
|
||||||
@@ -1622,6 +1667,18 @@ __qdf_nbuf_queue_first(__qdf_nbuf_queue_t *qhead)
|
|||||||
return qhead->head;
|
return qhead->head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __qdf_nbuf_queue_last() - returns the last skb in the queue
|
||||||
|
* @qhead: head of queue
|
||||||
|
*
|
||||||
|
* Return: NULL if the queue is empty
|
||||||
|
*/
|
||||||
|
static inline struct sk_buff *
|
||||||
|
__qdf_nbuf_queue_last(__qdf_nbuf_queue_t *qhead)
|
||||||
|
{
|
||||||
|
return qhead->tail;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __qdf_nbuf_queue_len() - return the queue length
|
* __qdf_nbuf_queue_len() - return the queue length
|
||||||
* @qhead: Queue head
|
* @qhead: Queue head
|
||||||
|
@@ -34,6 +34,7 @@ INCS += -I$(obj)/$(DEPTH)/cmn_dev/cfg/inc
|
|||||||
INCS += -I$(obj)/$(DEPTH)/ini_cfg/inc/
|
INCS += -I$(obj)/$(DEPTH)/ini_cfg/inc/
|
||||||
INCS += -I$(obj)/$(DEPTH)/component_dev/wmi/inc
|
INCS += -I$(obj)/$(DEPTH)/component_dev/wmi/inc
|
||||||
INCS += -I$(obj)/$(DEPTH)/pld/inc
|
INCS += -I$(obj)/$(DEPTH)/pld/inc
|
||||||
|
INCS += -I$(obj)/$(DEPTH)/component_dev/dp/inc
|
||||||
|
|
||||||
ifeq ($(WLAN_CONV_CRYPTO_SUPPORTED), 1)
|
ifeq ($(WLAN_CONV_CRYPTO_SUPPORTED), 1)
|
||||||
INCS += -I$(obj)/$(DEPTH)/cmn_dev/umac/cmn_services/crypto/inc
|
INCS += -I$(obj)/$(DEPTH)/cmn_dev/umac/cmn_services/crypto/inc
|
||||||
|
Reference in New Issue
Block a user