qcacmn: support enhance TX capture

support TX capture mode to deliver msdu along with meta data.

Change-Id: Ic84416cc4892e37bfb831dada136a4ff6b615a61
This commit is contained in:
nobelj
2019-04-23 11:18:47 -07:00
committed by nshrivas
parent c2dac1c92b
commit debe2b3b9c
12 changed files with 577 additions and 128 deletions

View File

@@ -843,6 +843,7 @@ enum cdp_pdev_param_type {
CDP_INGRESS_STATS,
CDP_OSIF_DROP,
CDP_CONFIG_ENH_RX_CAPTURE,
CDP_CONFIG_TX_CAPTURE,
};
/**
@@ -1210,6 +1211,81 @@ struct cdp_tx_completion_ppdu_user {
struct cdp_stats_cookie *cookie;
};
/**
* struct cdp_tx_indication_mpdu_info - Tx MPDU completion information
* @ppdu_id: PPDU id
* @duration: user duration in ppdu
* @frame_type: frame type MGMT/CTRL/DATA/BAR
* @frame_ctrl: frame control field in 802.11 header
* @qos_ctrl: QoS control field in 802.11 header
* @tid: TID number
* @num_msdu: number of msdu in MPDU
* @seq_no: Sequence number of first MPDU
* @ltf_size: ltf_size
* @stbc: stbc
* @he_re: he_re (range extension)
* @txbf: txbf
* @bw: Transmission bandwidth
* <enum 2 transmit_bw_20_MHz>
* <enum 3 transmit_bw_40_MHz>
* <enum 4 transmit_bw_80_MHz>
* <enum 5 transmit_bw_160_MHz>
* @nss: NSS 1,2, ...8
* @mcs: MCS index
* @preamble: preamble
* @gi: guard interval 800/400/1600/3200 ns
* @channel: frequency
* @channel_num: channel number
* @ack_rssi: ack rssi
* @ldpc: ldpc
* @tx_rate: Transmission Rate
* @mac_address: peer mac address
* @bss_mac_address: bss mac address
* @ppdu_start_timestamp: TSF at PPDU start
* @ppdu_end_timestamp: TSF at PPDU end
* @ba_start_seq: Block Ack sequence number
* @ba_bitmap: Block Ack bitmap
*/
struct cdp_tx_indication_mpdu_info {
uint32_t ppdu_id;
uint32_t tx_duration;
uint16_t frame_type;
uint16_t frame_ctrl;
uint16_t qos_ctrl;
uint8_t tid;
uint32_t num_msdu;
uint32_t seq_no;
uint32_t ltf_size:2,
he_re:1,
txbf:4,
bw:4,
nss:4,
mcs:4,
preamble:4,
gi:4;
uint32_t channel;
uint8_t channel_num;
uint32_t ack_rssi;
uint32_t ldpc;
uint32_t tx_rate;
uint8_t mac_address[QDF_MAC_ADDR_SIZE];
uint8_t bss_mac_address[QDF_MAC_ADDR_SIZE];
uint32_t ppdu_start_timestamp;
uint32_t ppdu_end_timestamp;
uint32_t ba_start_seq;
uint32_t ba_bitmap[CDP_BA_256_BIT_MAP_SIZE_DWORDS];
};
/**
* struct cdp_tx_indication_info - Tx capture information
* @mpdu_info: Tx MPDU completion information
* @mpdu_nbuf: reconstructed mpdu packet
*/
struct cdp_tx_indication_info {
struct cdp_tx_indication_mpdu_info mpdu_info;
qdf_nbuf_t mpdu_nbuf;
};
/**
* struct cdp_tx_completion_ppdu - Tx PPDU completion information
* @completion_status: completion status - OK/Filter/Abort/Timeout
@@ -1228,6 +1304,7 @@ struct cdp_tx_completion_ppdu_user {
* @ppdu_end_timestamp: TSF at PPDU end
* @ack_timestamp: TSF at the reception of ACK
* @user: per-User stats (array of per-user structures)
* @mpdu_q: queue of mpdu in a ppdu
*/
struct cdp_tx_completion_ppdu {
uint32_t ppdu_id;
@@ -1247,6 +1324,7 @@ struct cdp_tx_completion_ppdu {
uint32_t ppdu_end_timestamp;
uint32_t ack_timestamp;
struct cdp_tx_completion_ppdu_user user[CDP_MU_MAX_USERS];
qdf_nbuf_queue_t mpdu_q;
};
/**

View File

@@ -1751,6 +1751,7 @@ enum _ol_ath_param_t {
OL_ATH_PARAM_RX_MON_LITE = 407,
/* wifi down indication used in MBSS feature */
OL_ATH_PARAM_WIFI_DOWN_IND = 408,
OL_ATH_PARAM_TX_CAPTURE = 409,
};
/* Enumeration of PDEV Configuration parameter */

View File

@@ -19,13 +19,13 @@
#include <htt.h>
#include <hal_hw_headers.h>
#include <hal_api.h>
#include "dp_htt.h"
#include "dp_peer.h"
#include "dp_types.h"
#include "dp_internal.h"
#include "dp_rx_mon.h"
#include "htt_stats.h"
#include "htt_ppdu_stats.h"
#include "dp_htt.h"
#include "qdf_mem.h" /* qdf_mem_malloc,free */
#include "cdp_txrx_cmn_struct.h"
@@ -53,47 +53,6 @@ do { \
#define HTT_MGMT_CTRL_TLV_HDR_RESERVERD_LEN 16
/**
* Bitmap of HTT PPDU TLV types for Default mode
*/
#define HTT_PPDU_DEFAULT_TLV_BITMAP \
(1 << HTT_PPDU_STATS_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_RATE_TLV) | \
(1 << HTT_PPDU_STATS_SCH_CMD_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV)
/**
* Bitmap of HTT PPDU TLV types for Sniffer mode bitmap 64
*/
#define HTT_PPDU_SNIFFER_AMPDU_TLV_BITMAP_64 \
((1 << HTT_PPDU_STATS_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_RATE_TLV) | \
(1 << HTT_PPDU_STATS_SCH_CMD_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_BA_BITMAP_64_TLV) | \
(1 << HTT_PPDU_STATS_USR_MPDU_ENQ_BITMAP_64_TLV))
/**
* Bitmap of HTT PPDU TLV types for Sniffer mode bitmap 256
*/
#define HTT_PPDU_SNIFFER_AMPDU_TLV_BITMAP_256 \
((1 << HTT_PPDU_STATS_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_RATE_TLV) | \
(1 << HTT_PPDU_STATS_SCH_CMD_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_BA_BITMAP_256_TLV) | \
(1 << HTT_PPDU_STATS_USR_MPDU_ENQ_BITMAP_256_TLV))
#define HTT_FRAMECTRL_DATATYPE 0x08
#define HTT_PPDU_DESC_MAX_DEPTH 16
#define DP_SCAN_PEER_ID 0xFFFF
/*
* dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap() - Get ppdu stats tlv
* bitmap for sniffer mode
@@ -102,8 +61,7 @@ do { \
* Return: expected bitmap value, returns zero if doesn't match with
* either 64-bit Tx window or 256-bit window tlv bitmap
*/
static inline int
int
dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap(uint32_t bitmap)
{
if (bitmap == (HTT_PPDU_SNIFFER_AMPDU_TLV_BITMAP_64))
@@ -114,17 +72,15 @@ dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap(uint32_t bitmap)
return 0;
}
#ifdef FEATURE_PERPKT_INFO
/*
* dp_tx_stats_update() - Update per-peer statistics
* @soc: Datapath soc handle
* dp_tx_rate_stats_update() - Update rate per-peer statistics
* @peer: Datapath peer handle
* @ppdu: PPDU Descriptor
* @ack_rssi: RSSI of last ack received
*
* Return: None
*/
#ifdef FEATURE_PERPKT_INFO
static inline void
static void
dp_tx_rate_stats_update(struct dp_peer *peer,
struct cdp_tx_completion_ppdu_user *ppdu)
{
@@ -135,7 +91,6 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
if (!peer || !ppdu)
return;
ratekbps = dp_getrateindex(ppdu->gi,
ppdu->mcs,
ppdu->nss,
@@ -166,8 +121,19 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
}
}
static void dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
struct cdp_tx_completion_ppdu_user *ppdu, uint32_t ack_rssi)
/*
* dp_tx_stats_update() - Update per-peer statistics
* @soc: Datapath soc handle
* @peer: Datapath peer handle
* @ppdu: PPDU Descriptor
* @ack_rssi: RSSI of last ack received
*
* Return: None
*/
static void
dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
struct cdp_tx_completion_ppdu_user *ppdu,
uint32_t ack_rssi)
{
struct dp_pdev *pdev = peer->vdev->pdev;
uint8_t preamble, mcs;
@@ -283,6 +249,18 @@ static void dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
}
#endif
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#include "dp_tx_capture.h"
#else
static inline void
dp_process_ppdu_stats_update_failed_bitmap(struct dp_pdev *pdev,
void *data,
uint32_t ppdu_id,
uint32_t size)
{
}
#endif
/*
* htt_htc_pkt_alloc() - Allocate HTC packet buffer
* @htt_soc: HTT SOC handle
@@ -1848,19 +1826,33 @@ static void dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev,
ppdu_desc = (struct cdp_tx_completion_ppdu *)qdf_nbuf_data(ppdu_info->nbuf);
tag_buf += 2;
ppdu_info->sched_cmdid =
HTT_PPDU_STATS_COMMON_TLV_SCH_CMDID_GET(*tag_buf);
ppdu_desc->num_users =
HTT_PPDU_STATS_COMMON_TLV_NUM_USERS_GET(*tag_buf);
tag_buf++;
frame_type = HTT_PPDU_STATS_COMMON_TLV_FRM_TYPE_GET(*tag_buf);
if ((frame_type == HTT_STATS_FTYPE_TIDQ_DATA_SU) ||
(frame_type == HTT_STATS_FTYPE_TIDQ_DATA_MU))
ppdu_desc->frame_type = CDP_PPDU_FTYPE_DATA;
else if ((frame_type == HTT_STATS_FTYPE_SGEN_MU_BAR) ||
(frame_type == HTT_STATS_FTYPE_SGEN_BAR))
ppdu_desc->frame_type = CDP_PPDU_FTYPE_BAR;
else
switch (frame_type) {
case HTT_STATS_FTYPE_TIDQ_DATA_SU:
case HTT_STATS_FTYPE_TIDQ_DATA_MU:
/*
* for management packet, frame type come as DATA_SU
* need to check frame_ctrl before setting frame_type
*/
if (HTT_GET_FRAME_CTRL_TYPE(frame_type) <= FRAME_CTRL_TYPE_CTRL)
ppdu_desc->frame_type = CDP_PPDU_FTYPE_CTRL;
else
ppdu_desc->frame_type = CDP_PPDU_FTYPE_DATA;
break;
case HTT_STATS_FTYPE_SGEN_MU_BAR:
case HTT_STATS_FTYPE_SGEN_BAR:
ppdu_desc->frame_type = CDP_PPDU_FTYPE_BAR;
break;
default:
ppdu_desc->frame_type = CDP_PPDU_FTYPE_CTRL;
break;
}
tag_buf += 2;
ppdu_desc->tx_duration = *tag_buf;
@@ -2067,6 +2059,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_64_tlv(
struct cdp_tx_completion_ppdu_user *ppdu_user_desc;
uint8_t curr_user_index = 0;
uint16_t peer_id;
uint32_t size = CDP_BA_64_BIT_MAP_SIZE_DWORDS;
ppdu_desc = (struct cdp_tx_completion_ppdu *)qdf_nbuf_data(ppdu_info->nbuf);
@@ -2085,7 +2078,12 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_64_tlv(
ppdu_user_desc->start_seq = dp_stats_buf->start_seq;
qdf_mem_copy(&ppdu_user_desc->enq_bitmap, &dp_stats_buf->enq_bitmap,
CDP_BA_64_BIT_MAP_SIZE_DWORDS);
sizeof(uint32_t) * CDP_BA_64_BIT_MAP_SIZE_DWORDS);
dp_process_ppdu_stats_update_failed_bitmap(pdev,
(void *)ppdu_user_desc,
ppdu_info->ppdu_id,
size);
}
/*
@@ -2108,6 +2106,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_256_tlv(
struct cdp_tx_completion_ppdu_user *ppdu_user_desc;
uint8_t curr_user_index = 0;
uint16_t peer_id;
uint32_t size = CDP_BA_256_BIT_MAP_SIZE_DWORDS;
ppdu_desc = (struct cdp_tx_completion_ppdu *)qdf_nbuf_data(ppdu_info->nbuf);
@@ -2126,7 +2125,12 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_256_tlv(
ppdu_user_desc->start_seq = dp_stats_buf->start_seq;
qdf_mem_copy(&ppdu_user_desc->enq_bitmap, &dp_stats_buf->enq_bitmap,
CDP_BA_256_BIT_MAP_SIZE_DWORDS);
sizeof(uint32_t) * CDP_BA_256_BIT_MAP_SIZE_DWORDS);
dp_process_ppdu_stats_update_failed_bitmap(pdev,
(void *)ppdu_user_desc,
ppdu_info->ppdu_id,
size);
}
/*
@@ -2238,7 +2242,7 @@ static void dp_process_ppdu_stats_user_compltn_ba_bitmap_64_tlv(
ppdu_user_desc->ba_seq_no = dp_stats_buf->ba_seq_no;
qdf_mem_copy(&ppdu_user_desc->ba_bitmap, &dp_stats_buf->ba_bitmap,
CDP_BA_64_BIT_MAP_SIZE_DWORDS);
sizeof(uint32_t) * CDP_BA_64_BIT_MAP_SIZE_DWORDS);
}
/*
@@ -2278,7 +2282,7 @@ static void dp_process_ppdu_stats_user_compltn_ba_bitmap_256_tlv(
ppdu_user_desc->ba_seq_no = dp_stats_buf->ba_seq_no;
qdf_mem_copy(&ppdu_user_desc->ba_bitmap, &dp_stats_buf->ba_bitmap,
CDP_BA_256_BIT_MAP_SIZE_DWORDS);
sizeof(uint32_t) * CDP_BA_256_BIT_MAP_SIZE_DWORDS);
}
/*
@@ -2421,6 +2425,24 @@ static void dp_process_ppdu_stats_user_compltn_flush_tlv(struct dp_pdev *pdev,
dp_peer_unref_del_find_by_id(peer);
}
#ifndef WLAN_TX_PKT_CAPTURE_ENH
/*
* dp_deliver_mgmt_frm: Process
* @pdev: DP PDEV handle
* @nbuf: buffer containing the htt_ppdu_stats_tx_mgmtctrl_payload_tlv
*
* return: void
*/
static void dp_deliver_mgmt_frm(struct dp_pdev *pdev, qdf_nbuf_t nbuf)
{
if (pdev->tx_sniffer_enable || pdev->mcopy_mode) {
dp_wdi_event_handler(WDI_EVENT_TX_MGMT_CTRL, pdev->soc,
nbuf, HTT_INVALID_PEER,
WDI_NO_VAL, pdev->pdev_id);
}
}
#endif
/*
* dp_process_ppdu_stats_tx_mgmtctrl_payload_tlv: Process
* htt_ppdu_stats_tx_mgmtctrl_payload_tlv
@@ -2439,7 +2461,7 @@ dp_process_ppdu_stats_tx_mgmtctrl_payload_tlv(struct dp_pdev *pdev,
uint8_t trim_size;
if ((!pdev->tx_sniffer_enable) && (!pdev->mcopy_mode) &&
(!pdev->bpr_enable))
(!pdev->bpr_enable) && (!pdev->tx_capture_enabled))
return QDF_STATUS_SUCCESS;
trim_size = ((pdev->mgmtctrl_frm_info.mgmt_buf +
@@ -2461,11 +2483,8 @@ dp_process_ppdu_stats_tx_mgmtctrl_payload_tlv(struct dp_pdev *pdev,
tag_buf, HTT_INVALID_PEER,
WDI_NO_VAL, pdev->pdev_id);
}
if (pdev->tx_sniffer_enable || pdev->mcopy_mode) {
dp_wdi_event_handler(WDI_EVENT_TX_MGMT_CTRL, pdev->soc,
tag_buf, HTT_INVALID_PEER,
WDI_NO_VAL, pdev->pdev_id);
}
dp_deliver_mgmt_frm(pdev, tag_buf);
return QDF_STATUS_E_ALREADY;
}
@@ -2555,23 +2574,21 @@ static void dp_process_ppdu_tag(struct dp_pdev *pdev, uint32_t *tag_buf,
}
/**
* dp_ppdu_desc_deliver(): Function to deliver Tx PPDU status descriptor
* to upper layer
* dp_ppdu_desc_user_stats_update(): Function to update TX user stats
* @pdev: DP pdev handle
* @ppdu_info: per PPDU TLV descriptor
*
* return: void
*/
static
void dp_ppdu_desc_deliver(struct dp_pdev *pdev,
void
dp_ppdu_desc_user_stats_update(struct dp_pdev *pdev,
struct ppdu_info *ppdu_info)
{
struct cdp_tx_completion_ppdu *ppdu_desc = NULL;
struct dp_peer *peer = NULL;
qdf_nbuf_t nbuf;
uint16_t i;
uint32_t tlv_bitmap_expected;
uint32_t tlv_bitmap_default;
uint16_t i;
ppdu_desc = (struct cdp_tx_completion_ppdu *)
qdf_nbuf_data(ppdu_info->nbuf);
@@ -2589,7 +2606,6 @@ void dp_ppdu_desc_deliver(struct dp_pdev *pdev,
tlv_bitmap_default = tlv_bitmap_expected;
for (i = 0; i < ppdu_desc->num_users; i++) {
ppdu_desc->num_mpdu += ppdu_desc->user[i].num_mpdu;
ppdu_desc->num_msdu += ppdu_desc->user[i].num_msdu;
@@ -2628,6 +2644,29 @@ void dp_ppdu_desc_deliver(struct dp_pdev *pdev,
dp_peer_unref_del_find_by_id(peer);
tlv_bitmap_expected = tlv_bitmap_default;
}
}
#ifndef WLAN_TX_PKT_CAPTURE_ENH
/**
* dp_ppdu_desc_deliver(): Function to deliver Tx PPDU status descriptor
* to upper layer
* @pdev: DP pdev handle
* @ppdu_info: per PPDU TLV descriptor
*
* return: void
*/
static
void dp_ppdu_desc_deliver(struct dp_pdev *pdev,
struct ppdu_info *ppdu_info)
{
struct cdp_tx_completion_ppdu *ppdu_desc = NULL;
qdf_nbuf_t nbuf;
ppdu_desc = (struct cdp_tx_completion_ppdu *)
qdf_nbuf_data(ppdu_info->nbuf);
dp_ppdu_desc_user_stats_update(pdev, ppdu_info);
/*
* Remove from the list
@@ -2665,6 +2704,8 @@ void dp_ppdu_desc_deliver(struct dp_pdev *pdev,
return;
}
#endif
/**
* dp_get_ppdu_desc(): Function to allocate new PPDU status
* desc for new ppdu id
@@ -2898,10 +2939,12 @@ static bool dp_txrx_ppdu_stats_handler(struct dp_soc *soc,
QDF_STATUS_SUCCESS)
free_buf = false;
if (free_buf) {
pdev->mgmtctrl_frm_info.mgmt_buf = NULL;
pdev->mgmtctrl_frm_info.mgmt_buf_len = 0;
pdev->mgmtctrl_frm_info.ppdu_id = 0;
}
}
if (ppdu_info)
dp_ppdu_desc_deliver(pdev, ppdu_info);

View File

@@ -24,6 +24,9 @@
#include <qdf_nbuf.h>
#include <htc_api.h>
#include "cdp_txrx_cmn_struct.h"
#include "dp_types.h"
#define HTT_TX_MUTEX_TYPE qdf_spinlock_t
#define HTT_TX_MUTEX_INIT(_mutex) \
@@ -40,6 +43,22 @@
#define DP_HTT_MAX_SEND_QUEUE_DEPTH 64
#ifndef HTT_MAC_ADDR_LEN
#define HTT_MAC_ADDR_LEN 6
#endif
#define HTT_FRAMECTRL_TYPE_MASK 0x0C
#define HTT_GET_FRAME_CTRL_TYPE(_val) \
(((_val) & HTT_FRAMECTRL_TYPE_MASK) >> 2)
#define FRAME_CTRL_TYPE_MGMT 0x0
#define FRAME_CTRL_TYPE_CTRL 0x1
#define FRAME_CTRL_TYPE_DATA 0x2
#define FRAME_CTRL_TYPE_RESV 0x3
#define HTT_FRAMECTRL_DATATYPE 0x08
#define HTT_PPDU_DESC_MAX_DEPTH 16
#define DP_SCAN_PEER_ID 0xFFFF
#define DP_HTT_HTC_PKT_MISCLIST_SIZE 256
#define HTT_T2H_EXT_STATS_TLV_START_OFFSET 3
@@ -223,4 +242,18 @@ struct htt_stats_context {
uint32_t msg_len;
};
int
dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap(uint32_t bitmap);
/**
* dp_ppdu_desc_user_stats_update(): Function to update TX user stats
* @pdev: DP pdev handle
* @ppdu_info: per PPDU TLV descriptor
*
* return: void
*/
void
dp_ppdu_desc_user_stats_update(struct dp_pdev *pdev,
struct ppdu_info *ppdu_info);
#endif /* _DP_HTT_H_ */

View File

@@ -35,6 +35,64 @@
/* Macro For NYSM value received in VHT TLV */
#define VHT_SGI_NYSM 3
/* PPDU STATS CFG */
#define DP_PPDU_STATS_CFG_ALL 0xFFFF
/* PPDU stats mask sent to FW to enable enhanced stats */
#define DP_PPDU_STATS_CFG_ENH_STATS 0xE67
/* PPDU stats mask sent to FW to support debug sniffer feature */
#define DP_PPDU_STATS_CFG_SNIFFER 0x2FFF
/* PPDU stats mask sent to FW to support BPR feature*/
#define DP_PPDU_STATS_CFG_BPR 0x2000
/* PPDU stats mask sent to FW to support BPR and enhanced stats feature */
#define DP_PPDU_STATS_CFG_BPR_ENH (DP_PPDU_STATS_CFG_BPR | \
DP_PPDU_STATS_CFG_ENH_STATS)
/* PPDU stats mask sent to FW to support BPR and pcktlog stats feature */
#define DP_PPDU_STATS_CFG_BPR_PKTLOG (DP_PPDU_STATS_CFG_BPR | \
DP_PPDU_TXLITE_STATS_BITMASK_CFG)
/**
* Bitmap of HTT PPDU TLV types for Default mode
*/
#define HTT_PPDU_DEFAULT_TLV_BITMAP \
(1 << HTT_PPDU_STATS_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_RATE_TLV) | \
(1 << HTT_PPDU_STATS_SCH_CMD_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV)
/**
* Bitmap of HTT PPDU TLV types for Sniffer mode bitmap 64
*/
#define HTT_PPDU_SNIFFER_AMPDU_TLV_BITMAP_64 \
((1 << HTT_PPDU_STATS_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_RATE_TLV) | \
(1 << HTT_PPDU_STATS_SCH_CMD_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_BA_BITMAP_64_TLV) | \
(1 << HTT_PPDU_STATS_USR_MPDU_ENQ_BITMAP_64_TLV))
/**
* Bitmap of HTT PPDU TLV types for Sniffer mode bitmap 256
*/
#define HTT_PPDU_SNIFFER_AMPDU_TLV_BITMAP_256 \
((1 << HTT_PPDU_STATS_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_RATE_TLV) | \
(1 << HTT_PPDU_STATS_SCH_CMD_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_COMMON_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_ACK_BA_STATUS_TLV) | \
(1 << HTT_PPDU_STATS_USR_COMPLTN_BA_BITMAP_256_TLV) | \
(1 << HTT_PPDU_STATS_USR_MPDU_ENQ_BITMAP_256_TLV))
#ifdef WLAN_TX_PKT_CAPTURE_ENH
extern uint8_t
dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS];
#endif
#if DP_PRINT_ENABLE
#include <stdarg.h> /* va_list */
#include <qdf_types.h> /* qdf_vprint */
@@ -676,6 +734,7 @@ extern void dp_peer_find_hash_add(struct dp_soc *soc, struct dp_peer *peer);
extern void dp_peer_find_hash_remove(struct dp_soc *soc, struct dp_peer *peer);
extern void dp_peer_find_hash_erase(struct dp_soc *soc);
extern void dp_peer_rx_init(struct dp_pdev *pdev, struct dp_peer *peer);
void dp_peer_tx_init(struct dp_pdev *pdev, struct dp_peer *peer);
extern void dp_peer_cleanup(struct dp_vdev *vdev, struct dp_peer *peer);
extern void dp_peer_rx_cleanup(struct dp_vdev *vdev, struct dp_peer *peer);
extern void dp_peer_unref_delete(void *peer_handle);
@@ -1006,4 +1065,57 @@ void dp_pdev_print_delay_stats(struct dp_pdev *pdev);
*/
void dp_pdev_print_tid_stats(struct dp_pdev *pdev);
#endif /* CONFIG_WIN */
void dp_soc_set_txrx_ring_map(struct dp_soc *soc);
#ifndef WLAN_TX_PKT_CAPTURE_ENH
/**
* dp_tx_ppdu_stats_attach - Initialize Tx PPDU stats and enhanced capture
* @pdev: DP PDEV
*
* Return: none
*/
static inline void dp_tx_ppdu_stats_attach(struct dp_pdev *pdev)
{
}
/**
* dp_tx_ppdu_stats_detach - Cleanup Tx PPDU stats and enhanced capture
* @pdev: DP PDEV
*
* Return: none
*/
static inline void dp_tx_ppdu_stats_detach(struct dp_pdev *pdev)
{
}
/**
* dp_tx_ppdu_stats_process - Deferred PPDU stats handler
* @context: Opaque work context (PDEV)
*
* Return: none
*/
static inline void dp_tx_ppdu_stats_process(void *context)
{
}
/**
* dp_tx_add_to_comp_queue() - add completion msdu to queue
* @soc: DP Soc handle
* @tx_desc: software Tx descriptor
* @ts : Tx completion status from HAL/HTT descriptor
* @peer: DP peer
*
* Return: none
*/
static inline
QDF_STATUS dp_tx_add_to_comp_queue(struct dp_soc *soc,
struct dp_tx_desc_s *desc,
struct hal_tx_completion_status *ts,
struct dp_peer *peer)
{
return QDF_STATUS_E_FAILURE;
}
#endif
#endif /* #ifndef _DP_INTERNAL_H_ */

View File

@@ -27,7 +27,6 @@
#include <htt.h>
#include <wdi_event.h>
#include <queue.h>
#include "dp_htt.h"
#include "dp_types.h"
#include "dp_internal.h"
#include "dp_tx.h"
@@ -46,6 +45,8 @@
#include "dp_peer.h"
#include "dp_rx_mon.h"
#include "htt_stats.h"
#include "htt_ppdu_stats.h"
#include "dp_htt.h"
#include "qdf_mem.h" /* qdf_mem_malloc,free */
#include "cfg_ucfg_api.h"
#ifdef QCA_LL_TX_FLOW_CONTROL_V2
@@ -84,6 +85,23 @@ dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, int val)
}
#endif
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#include "dp_tx_capture.h"
#else
/*
* dp_config_enh_tx_capture()- API to enable/disable enhanced tx capture
* @pdev_handle: DP_PDEV handle
* @val: user provided value
*
* Return: QDF_STATUS
*/
static QDF_STATUS
dp_config_enh_tx_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);
static void dp_pdev_detach(struct cdp_pdev *txrx_pdev, int force);
static struct dp_soc *
@@ -136,21 +154,6 @@ bool is_dp_verbose_debug_enabled;
#define STR_MAXLEN 64
#define DP_PPDU_STATS_CFG_ALL 0xFFFF
/* PPDU stats mask sent to FW to enable enhanced stats */
#define DP_PPDU_STATS_CFG_ENH_STATS 0xE67
/* PPDU stats mask sent to FW to support debug sniffer feature */
#define DP_PPDU_STATS_CFG_SNIFFER 0x2FFF
/* PPDU stats mask sent to FW to support BPR feature*/
#define DP_PPDU_STATS_CFG_BPR 0x2000
/* PPDU stats mask sent to FW to support BPR and enhanced stats feature */
#define DP_PPDU_STATS_CFG_BPR_ENH (DP_PPDU_STATS_CFG_BPR | \
DP_PPDU_STATS_CFG_ENH_STATS)
/* PPDU stats mask sent to FW to support BPR and pcktlog stats feature */
#define DP_PPDU_STATS_CFG_BPR_PKTLOG (DP_PPDU_STATS_CFG_BPR | \
DP_PPDU_TXLITE_STATS_BITMASK_CFG)
#define RNG_ERR "SRNG setup failed for"
/* Threshold for peer's cached buf queue beyond which frames are dropped */
@@ -289,28 +292,21 @@ static const struct dp_rate_debug dp_rate_string[DOT11_MAX][MAX_MCS] = {
}
};
/**
* dp_cpu_ring_map_type - dp tx cpu ring map
* @DP_NSS_DEFAULT_MAP: Default mode with no NSS offloaded
* @DP_NSS_FIRST_RADIO_OFFLOADED_MAP: Only First Radio is offloaded
* @DP_NSS_SECOND_RADIO_OFFLOADED_MAP: Only second radio is offloaded
* @DP_NSS_DBDC_OFFLOADED_MAP: Both radios are offloaded
* @DP_NSS_DBTC_OFFLOADED_MAP: All three radios are offloaded
* @DP_NSS_CPU_RING_MAP_MAX: Max cpu ring map val
*/
enum dp_cpu_ring_map_types {
DP_NSS_DEFAULT_MAP,
DP_NSS_FIRST_RADIO_OFFLOADED_MAP,
DP_NSS_SECOND_RADIO_OFFLOADED_MAP,
DP_NSS_DBDC_OFFLOADED_MAP,
DP_NSS_DBTC_OFFLOADED_MAP,
DP_NSS_CPU_RING_MAP_MAX
};
/**
* @brief Cpu to tx ring map
*/
#ifdef CONFIG_WIN
#ifdef WLAN_TX_PKT_CAPTURE_ENH
uint8_t
dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS] = {
{0x0, 0x1, 0x2, 0x0, 0x0, 0x1, 0x2, 0x0, 0x0, 0x1, 0x2},
{0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1},
{0x0, 0x2, 0x0, 0x2, 0x0, 0x2, 0x0, 0x2, 0x0, 0x2, 0x0},
{0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2},
{0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3},
{0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}
};
#else
static uint8_t
dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS] = {
{0x0, 0x1, 0x2, 0x0, 0x0, 0x1, 0x2, 0x0, 0x0, 0x1, 0x2},
@@ -319,6 +315,7 @@ dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS] = {
{0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2},
{0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}
};
#endif
#else
static uint8_t
dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS] = {
@@ -3484,6 +3481,7 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc,
qdf_event_create(&pdev->fw_peer_stats_event);
pdev->num_tx_allowed = wlan_cfg_get_num_tx_desc(soc->wlan_cfg_ctx);
dp_tx_ppdu_stats_attach(pdev);
return (struct cdp_pdev *)pdev;
@@ -3769,6 +3767,8 @@ static void dp_pdev_detach(struct cdp_pdev *txrx_pdev, int force)
dp_mon_link_free(pdev);
dp_tx_ppdu_stats_detach(pdev);
/* Cleanup per PDEV REO rings if configured */
if (wlan_cfg_per_pdev_rx_ring(soc->wlan_cfg_ctx)) {
dp_srng_cleanup(soc, &soc->reo_dest_ring[pdev->pdev_id],
@@ -5200,6 +5200,8 @@ static void dp_peer_setup_wifi3(struct cdp_vdev *vdev_hdl, void *peer_hdl)
qdf_atomic_set(&peer->is_default_route_set, 1);
dp_peer_rx_init(pdev, peer);
dp_peer_tx_init(pdev, peer);
return;
}
@@ -6825,6 +6827,8 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev)
DP_PRINT_STATS(" Tag[%d] = %llu", index,
pdev->stats.ppdu_stats_counter[index]);
}
DP_PRINT_STATS("tx_ppdu_proc: %llu\n",
pdev->tx_ppdu_proc);
for (i = 0; i < CDP_WDI_NUM_EVENTS; i++) {
if (!pdev->stats.wdi_event[i])
@@ -8100,6 +8104,8 @@ static QDF_STATUS dp_set_pdev_param(struct cdp_pdev *pdev_handle,
break;
case CDP_CONFIG_ENH_RX_CAPTURE:
return dp_config_enh_rx_capture(pdev_handle, val);
case CDP_CONFIG_TX_CAPTURE:
return dp_config_enh_tx_capture(pdev_handle, val);
default:
return QDF_STATUS_E_INVAL;
}
@@ -10137,7 +10143,7 @@ static struct cdp_ops dp_txrx_ops = {
*
* Return: Void
*/
static void dp_soc_set_txrx_ring_map(struct dp_soc *soc)
void dp_soc_set_txrx_ring_map(struct dp_soc *soc)
{
uint32_t i;
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {

View File

@@ -34,6 +34,10 @@
#include <cdp_txrx_handle.h>
#include <wlan_cfg.h>
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#include "dp_tx_capture.h"
#endif
#ifdef DP_LFR
static inline void
dp_set_ssn_valid_flag(struct hal_reo_cmd_params *params,
@@ -2061,6 +2065,62 @@ static void dp_peer_setup_remaining_tids(struct dp_peer *peer)
#else
static void dp_peer_setup_remaining_tids(struct dp_peer *peer) {};
#endif
#ifndef WLAN_TX_PKT_CAPTURE_ENH
/*
* dp_peer_tid_queue_init() Initialize ppdu stats queue per TID
* @peer: Datapath peer
*
*/
static inline void dp_peer_tid_queue_init(struct dp_peer *peer)
{
}
/*
* dp_peer_tid_queue_cleanup() remove ppdu stats queue per TID
* @peer: Datapath peer
*
*/
static inline void dp_peer_tid_queue_cleanup(struct dp_peer *peer)
{
}
/*
* dp_peer_update_80211_hdr() dp peer update 80211 hdr
* @vdev: Datapath vdev
* @peer: Datapath peer
*
*/
static inline void
dp_peer_update_80211_hdr(struct dp_vdev *vdev, struct dp_peer *peer)
{
}
#endif
/*
* dp_peer_tx_init() Initialize receive TID state
* @pdev: Datapath pdev
* @peer: Datapath peer
*
*/
void dp_peer_tx_init(struct dp_pdev *pdev, struct dp_peer *peer)
{
dp_peer_tid_queue_init(peer);
dp_peer_update_80211_hdr(peer->vdev, peer);
}
/*
* dp_peer_tx_cleanup() Deinitialize receive TID state
* @vdev: Datapath vdev
* @peer: Datapath peer
*
*/
static inline void
dp_peer_tx_cleanup(struct dp_vdev *vdev, struct dp_peer *peer)
{
dp_peer_tid_queue_cleanup(peer);
}
/*
* dp_peer_rx_init() Initialize receive TID state
* @pdev: Datapath pdev
@@ -2162,6 +2222,8 @@ void dp_peer_cleanup(struct dp_vdev *vdev, struct dp_peer *peer)
peer->last_disassoc_rcvd = 0;
peer->last_deauth_rcvd = 0;
dp_peer_tx_cleanup(vdev, peer);
/* cleanup the Rx reorder queues for this peer */
dp_peer_rx_cleanup(vdev, peer);
}

View File

@@ -16,9 +16,12 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
#include "qdf_types.h"
#include "htt_stats.h"
#include "dp_peer.h"
#include "dp_types.h"
#include "dp_internal.h"
#include "htt_stats.h"
#include "htt_ppdu_stats.h"
#include "dp_htt.h"
#define DP_MAX_STRING_LEN 500
@@ -80,6 +83,10 @@ const char *intfrm_delay_bucket[CDP_DELAY_BUCKET_MAX + 1] = {
};
#endif
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#include "dp_tx_capture.h"
#endif
/*
* dp_print_stats_string_tlv: display htt_stats_string_tlv
* @tag_buf: buffer containing the tlv htt_stats_string_tlv

View File

@@ -31,6 +31,7 @@
#include "if_meta_hdr.h"
#endif
#include "enet.h"
#include "dp_internal.h"
#define DP_TX_QUEUE_MASK 0x3
@@ -59,6 +60,10 @@ static const uint8_t sec_type_map[MAX_CDP_SEC_TYPE] = {
HAL_TX_ENCRYPT_TYPE_AES_GCMP_256,
HAL_TX_ENCRYPT_TYPE_WAPI_GCM_SM4};
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#include "dp_tx_capture.h"
#endif
/**
* dp_tx_get_queue() - Returns Tx queue IDs to be used for this Tx frame
* @vdev: DP Virtual device handle
@@ -3041,19 +3046,30 @@ dp_tx_comp_process_desc(struct dp_soc *soc,
time_latency = (qdf_ktime_to_ms(qdf_ktime_get()) -
desc->timestamp);
}
if (!(desc->msdu_ext_desc) &&
(dp_get_completion_indication_for_stack(soc, desc->pdev,
peer, ts, desc->nbuf,
time_latency)
== QDF_STATUS_SUCCESS)) {
if (!(desc->msdu_ext_desc)) {
if (QDF_STATUS_SUCCESS ==
dp_tx_add_to_comp_queue(soc, desc, ts, peer)) {
return;
}
if (QDF_STATUS_SUCCESS ==
dp_get_completion_indication_for_stack(soc,
desc->pdev,
peer, ts,
desc->nbuf,
time_latency)) {
qdf_nbuf_unmap(soc->osdev, desc->nbuf,
QDF_DMA_TO_DEVICE);
dp_send_completion_to_stack(soc, desc->pdev, ts->peer_id,
ts->ppdu_id, desc->nbuf);
} else {
dp_tx_comp_free_buf(soc, desc);
dp_send_completion_to_stack(soc,
desc->pdev,
ts->peer_id,
ts->ppdu_id,
desc->nbuf);
return;
}
}
dp_tx_comp_free_buf(soc, desc);
}
/**

View File

@@ -57,6 +57,10 @@
#include <pktlog.h>
#endif
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#include "dp_tx_capture.h"
#endif
#define REPT_MU_MIMO 1
#define REPT_MU_OFDMA_MIMO 3
#define DP_VO_TID 6
@@ -240,6 +244,32 @@ enum dp_nss_cfg {
dp_nss_cfg_max
};
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#define DP_CPU_RING_MAP_1 1
#endif
/**
* dp_cpu_ring_map_type - dp tx cpu ring map
* @DP_NSS_DEFAULT_MAP: Default mode with no NSS offloaded
* @DP_NSS_FIRST_RADIO_OFFLOADED_MAP: Only First Radio is offloaded
* @DP_NSS_SECOND_RADIO_OFFLOADED_MAP: Only second radio is offloaded
* @DP_NSS_DBDC_OFFLOADED_MAP: Both radios are offloaded
* @DP_NSS_DBTC_OFFLOADED_MAP: All three radios are offloaded
* @DP_SINGLE_TX_RING_MAP: to avoid out of order all cpu mapped to single ring
* @DP_NSS_CPU_RING_MAP_MAX: Max cpu ring map val
*/
enum dp_cpu_ring_map_types {
DP_NSS_DEFAULT_MAP,
DP_NSS_FIRST_RADIO_OFFLOADED_MAP,
DP_NSS_SECOND_RADIO_OFFLOADED_MAP,
DP_NSS_DBDC_OFFLOADED_MAP,
DP_NSS_DBTC_OFFLOADED_MAP,
#ifdef WLAN_TX_PKT_CAPTURE_ENH
DP_SINGLE_TX_RING_MAP,
#endif
DP_NSS_CPU_RING_MAP_MAX
};
/**
* struct rx_desc_pool
* @pool_size: number of RX descriptor in the pool
@@ -1113,9 +1143,16 @@ struct dp_neighbour_peer {
TAILQ_ENTRY(dp_neighbour_peer) neighbour_peer_list_elem;
};
#ifdef WLAN_TX_PKT_CAPTURE_ENH
#define WLAN_TX_PKT_CAPTURE_ENH 1
#define DP_TX_PPDU_PROC_THRESHOLD 8
#define DP_TX_PPDU_PROC_TIMEOUT 10
#endif
/**
* struct ppdu_info - PPDU Status info descriptor
* @ppdu_id - Unique ppduid assigned by firmware for every tx packet
* @sched_cmdid - schedule command id, which will be same in a burst
* @max_ppdu_id - wrap around for ppdu id
* @last_tlv_cnt - Keep track for missing ppdu tlvs
* @last_user - last ppdu processed for user
@@ -1123,9 +1160,11 @@ struct dp_neighbour_peer {
* @nbuf - ppdu descriptor payload
* @ppdu_desc - ppdu descriptor
* @ppdu_info_list_elem - linked list of ppdu tlvs
* @ppdu_info_queue_elem - Singly linked list (queue) of ppdu tlvs
*/
struct ppdu_info {
uint32_t ppdu_id;
uint32_t sched_cmdid;
uint32_t max_ppdu_id;
uint16_t tlv_bitmap;
uint16_t last_tlv_cnt;
@@ -1133,7 +1172,38 @@ struct ppdu_info {
is_ampdu:1;
qdf_nbuf_t nbuf;
struct cdp_tx_completion_ppdu *ppdu_desc;
#ifdef WLAN_TX_PKT_CAPTURE_ENH
union {
TAILQ_ENTRY(ppdu_info) ppdu_info_dlist_elem;
STAILQ_ENTRY(ppdu_info) ppdu_info_slist_elem;
} ulist;
#define ppdu_info_list_elem ulist.ppdu_info_dlist_elem
#define ppdu_info_queue_elem ulist.ppdu_info_slist_elem
#else
TAILQ_ENTRY(ppdu_info) ppdu_info_list_elem;
#endif
};
/**
* struct msdu_completion_info - wbm msdu completion info
* @ppdu_id - Unique ppduid assigned by firmware for every tx packet
* @peer_id - peer_id
* @tid - tid which used during transmit
* @first_msdu - first msdu indication
* @last_msdu - last msdu indication
* @msdu_part_of_amsdu - msdu part of amsdu
* @transmit_cnt - retried count
* @tsf - timestamp which it transmitted
*/
struct msdu_completion_info {
uint32_t ppdu_id;
uint16_t peer_id;
uint8_t tid;
uint8_t first_msdu:1,
last_msdu:1,
msdu_part_of_amsdu:1;
uint8_t transmit_cnt;
uint32_t tsf;
};
#ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
@@ -1150,6 +1220,14 @@ struct rx_protocol_tag_stats {
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
#ifndef WLAN_TX_PKT_CAPTURE_ENH
struct dp_pdev_tx_capture {
};
struct dp_peer_tx_capture {
};
#endif
/* PDEV level structure for data path */
struct dp_pdev {
/**
@@ -1401,6 +1479,7 @@ struct dp_pdev {
uint32_t ppdu_id;
bool first_nbuf;
struct {
qdf_nbuf_t last_nbuf; /*Ptr to mgmt last buf */
uint8_t *mgmt_buf; /* Ptr to mgmt. payload in HTT ppdu stats */
uint32_t mgmt_buf_len; /* Len of mgmt. payload in ppdu stats */
uint32_t ppdu_id;
@@ -1471,6 +1550,12 @@ struct dp_pdev {
rx_err_proto_tag_stats[RX_PROTOCOL_TAG_MAX];
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
/* tx packet capture enhancement */
bool tx_capture_enabled;
struct dp_pdev_tx_capture tx_capture;
/* stats counter for tx ppdu processed */
uint64_t tx_ppdu_proc;
};
struct dp_peer;
@@ -1702,6 +1787,8 @@ struct dp_peer {
/* TID structures */
struct dp_rx_tid rx_tid[DP_MAX_TIDS];
struct dp_peer_tx_capture tx_capture;
/* TBD: No transmit TID state required? */

View File

@@ -363,6 +363,7 @@ typedef bool (*qdf_irqlocked_func_t)(void *);
* @QDF_MODULE_ID_SM_ENGINE: SM engine module ID
* @QDF_MODULE_ID_CMN_MLME: CMN MLME module ID
* @QDF_MODULE_ID_CFR: CFR module ID
* @QDF_MODULE_ID_TX_CAPTURE: Tx capture enhancement feature ID
* @QDF_MODULE_ID_ANY: anything
* @QDF_MODULE_ID_MAX: Max place holder module ID
*/
@@ -475,6 +476,7 @@ typedef enum {
QDF_MODULE_ID_CMN_MLME,
QDF_MODULE_ID_BSSCOLOR,
QDF_MODULE_ID_CFR,
QDF_MODULE_ID_TX_CAPTURE,
QDF_MODULE_ID_ANY,
QDF_MODULE_ID_MAX,
} QDF_MODULE_ID;

View File

@@ -2892,6 +2892,7 @@ struct category_name_info g_qdf_category_name[MAX_SUPPORTED_CATEGORY] = {
[QDF_MODULE_ID_CMN_MLME] = {"CMN_MLME"},
[QDF_MODULE_ID_BSSCOLOR] = {"BSSCOLOR"},
[QDF_MODULE_ID_CFR] = {"CFR"},
[QDF_MODULE_ID_TX_CAPTURE] = {"TX_CAPTURE_ENHANCE"},
[QDF_MODULE_ID_ANY] = {"ANY"},
};
qdf_export_symbol(g_qdf_category_name);
@@ -3347,6 +3348,7 @@ static void set_default_trace_levels(struct category_info *cinfo)
[QDF_MODULE_ID_CMN_MLME] = QDF_TRACE_LEVEL_INFO,
[QDF_MODULE_ID_BSSCOLOR] = QDF_TRACE_LEVEL_ERROR,
[QDF_MODULE_ID_CFR] = QDF_TRACE_LEVEL_ERROR,
[QDF_MODULE_ID_TX_CAPTURE] = QDF_TRACE_LEVEL_NONE,
[QDF_MODULE_ID_ANY] = QDF_TRACE_LEVEL_INFO,
};