qcacmn: support enhance TX capture
support TX capture mode to deliver msdu along with meta data. Change-Id: Ic84416cc4892e37bfb831dada136a4ff6b615a61
This commit is contained in:
@@ -843,6 +843,7 @@ enum cdp_pdev_param_type {
|
|||||||
CDP_INGRESS_STATS,
|
CDP_INGRESS_STATS,
|
||||||
CDP_OSIF_DROP,
|
CDP_OSIF_DROP,
|
||||||
CDP_CONFIG_ENH_RX_CAPTURE,
|
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_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
|
* struct cdp_tx_completion_ppdu - Tx PPDU completion information
|
||||||
* @completion_status: completion status - OK/Filter/Abort/Timeout
|
* @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
|
* @ppdu_end_timestamp: TSF at PPDU end
|
||||||
* @ack_timestamp: TSF at the reception of ACK
|
* @ack_timestamp: TSF at the reception of ACK
|
||||||
* @user: per-User stats (array of per-user structures)
|
* @user: per-User stats (array of per-user structures)
|
||||||
|
* @mpdu_q: queue of mpdu in a ppdu
|
||||||
*/
|
*/
|
||||||
struct cdp_tx_completion_ppdu {
|
struct cdp_tx_completion_ppdu {
|
||||||
uint32_t ppdu_id;
|
uint32_t ppdu_id;
|
||||||
@@ -1247,6 +1324,7 @@ struct cdp_tx_completion_ppdu {
|
|||||||
uint32_t ppdu_end_timestamp;
|
uint32_t ppdu_end_timestamp;
|
||||||
uint32_t ack_timestamp;
|
uint32_t ack_timestamp;
|
||||||
struct cdp_tx_completion_ppdu_user user[CDP_MU_MAX_USERS];
|
struct cdp_tx_completion_ppdu_user user[CDP_MU_MAX_USERS];
|
||||||
|
qdf_nbuf_queue_t mpdu_q;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1751,6 +1751,7 @@ enum _ol_ath_param_t {
|
|||||||
OL_ATH_PARAM_RX_MON_LITE = 407,
|
OL_ATH_PARAM_RX_MON_LITE = 407,
|
||||||
/* wifi down indication used in MBSS feature */
|
/* wifi down indication used in MBSS feature */
|
||||||
OL_ATH_PARAM_WIFI_DOWN_IND = 408,
|
OL_ATH_PARAM_WIFI_DOWN_IND = 408,
|
||||||
|
OL_ATH_PARAM_TX_CAPTURE = 409,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Enumeration of PDEV Configuration parameter */
|
/* Enumeration of PDEV Configuration parameter */
|
||||||
|
@@ -19,13 +19,13 @@
|
|||||||
#include <htt.h>
|
#include <htt.h>
|
||||||
#include <hal_hw_headers.h>
|
#include <hal_hw_headers.h>
|
||||||
#include <hal_api.h>
|
#include <hal_api.h>
|
||||||
#include "dp_htt.h"
|
|
||||||
#include "dp_peer.h"
|
#include "dp_peer.h"
|
||||||
#include "dp_types.h"
|
#include "dp_types.h"
|
||||||
#include "dp_internal.h"
|
#include "dp_internal.h"
|
||||||
#include "dp_rx_mon.h"
|
#include "dp_rx_mon.h"
|
||||||
#include "htt_stats.h"
|
#include "htt_stats.h"
|
||||||
#include "htt_ppdu_stats.h"
|
#include "htt_ppdu_stats.h"
|
||||||
|
#include "dp_htt.h"
|
||||||
#include "qdf_mem.h" /* qdf_mem_malloc,free */
|
#include "qdf_mem.h" /* qdf_mem_malloc,free */
|
||||||
#include "cdp_txrx_cmn_struct.h"
|
#include "cdp_txrx_cmn_struct.h"
|
||||||
|
|
||||||
@@ -53,47 +53,6 @@ do { \
|
|||||||
|
|
||||||
#define HTT_MGMT_CTRL_TLV_HDR_RESERVERD_LEN 16
|
#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
|
* dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap() - Get ppdu stats tlv
|
||||||
* bitmap for sniffer mode
|
* bitmap for sniffer mode
|
||||||
@@ -102,8 +61,7 @@ do { \
|
|||||||
* Return: expected bitmap value, returns zero if doesn't match with
|
* Return: expected bitmap value, returns zero if doesn't match with
|
||||||
* either 64-bit Tx window or 256-bit window tlv bitmap
|
* either 64-bit Tx window or 256-bit window tlv bitmap
|
||||||
*/
|
*/
|
||||||
|
int
|
||||||
static inline int
|
|
||||||
dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap(uint32_t bitmap)
|
dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap(uint32_t bitmap)
|
||||||
{
|
{
|
||||||
if (bitmap == (HTT_PPDU_SNIFFER_AMPDU_TLV_BITMAP_64))
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FEATURE_PERPKT_INFO
|
||||||
/*
|
/*
|
||||||
* dp_tx_stats_update() - Update per-peer statistics
|
* dp_tx_rate_stats_update() - Update rate per-peer statistics
|
||||||
* @soc: Datapath soc handle
|
|
||||||
* @peer: Datapath peer handle
|
* @peer: Datapath peer handle
|
||||||
* @ppdu: PPDU Descriptor
|
* @ppdu: PPDU Descriptor
|
||||||
* @ack_rssi: RSSI of last ack received
|
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
#ifdef FEATURE_PERPKT_INFO
|
static void
|
||||||
static inline void
|
|
||||||
dp_tx_rate_stats_update(struct dp_peer *peer,
|
dp_tx_rate_stats_update(struct dp_peer *peer,
|
||||||
struct cdp_tx_completion_ppdu_user *ppdu)
|
struct cdp_tx_completion_ppdu_user *ppdu)
|
||||||
{
|
{
|
||||||
@@ -135,7 +91,6 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
|
|||||||
if (!peer || !ppdu)
|
if (!peer || !ppdu)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
ratekbps = dp_getrateindex(ppdu->gi,
|
ratekbps = dp_getrateindex(ppdu->gi,
|
||||||
ppdu->mcs,
|
ppdu->mcs,
|
||||||
ppdu->nss,
|
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;
|
struct dp_pdev *pdev = peer->vdev->pdev;
|
||||||
uint8_t preamble, mcs;
|
uint8_t preamble, mcs;
|
||||||
@@ -283,6 +249,18 @@ static void dp_tx_stats_update(struct dp_soc *soc, struct dp_peer *peer,
|
|||||||
}
|
}
|
||||||
#endif
|
#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_htc_pkt_alloc() - Allocate HTC packet buffer
|
||||||
* @htt_soc: HTT SOC handle
|
* @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);
|
ppdu_desc = (struct cdp_tx_completion_ppdu *)qdf_nbuf_data(ppdu_info->nbuf);
|
||||||
|
|
||||||
tag_buf += 2;
|
tag_buf += 2;
|
||||||
|
ppdu_info->sched_cmdid =
|
||||||
|
HTT_PPDU_STATS_COMMON_TLV_SCH_CMDID_GET(*tag_buf);
|
||||||
ppdu_desc->num_users =
|
ppdu_desc->num_users =
|
||||||
HTT_PPDU_STATS_COMMON_TLV_NUM_USERS_GET(*tag_buf);
|
HTT_PPDU_STATS_COMMON_TLV_NUM_USERS_GET(*tag_buf);
|
||||||
tag_buf++;
|
tag_buf++;
|
||||||
frame_type = HTT_PPDU_STATS_COMMON_TLV_FRM_TYPE_GET(*tag_buf);
|
frame_type = HTT_PPDU_STATS_COMMON_TLV_FRM_TYPE_GET(*tag_buf);
|
||||||
|
|
||||||
if ((frame_type == HTT_STATS_FTYPE_TIDQ_DATA_SU) ||
|
switch (frame_type) {
|
||||||
(frame_type == HTT_STATS_FTYPE_TIDQ_DATA_MU))
|
case HTT_STATS_FTYPE_TIDQ_DATA_SU:
|
||||||
ppdu_desc->frame_type = CDP_PPDU_FTYPE_DATA;
|
case HTT_STATS_FTYPE_TIDQ_DATA_MU:
|
||||||
else if ((frame_type == HTT_STATS_FTYPE_SGEN_MU_BAR) ||
|
/*
|
||||||
(frame_type == HTT_STATS_FTYPE_SGEN_BAR))
|
* for management packet, frame type come as DATA_SU
|
||||||
ppdu_desc->frame_type = CDP_PPDU_FTYPE_BAR;
|
* need to check frame_ctrl before setting frame_type
|
||||||
else
|
*/
|
||||||
|
if (HTT_GET_FRAME_CTRL_TYPE(frame_type) <= FRAME_CTRL_TYPE_CTRL)
|
||||||
ppdu_desc->frame_type = CDP_PPDU_FTYPE_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;
|
tag_buf += 2;
|
||||||
ppdu_desc->tx_duration = *tag_buf;
|
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;
|
struct cdp_tx_completion_ppdu_user *ppdu_user_desc;
|
||||||
uint8_t curr_user_index = 0;
|
uint8_t curr_user_index = 0;
|
||||||
uint16_t peer_id;
|
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);
|
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;
|
ppdu_user_desc->start_seq = dp_stats_buf->start_seq;
|
||||||
qdf_mem_copy(&ppdu_user_desc->enq_bitmap, &dp_stats_buf->enq_bitmap,
|
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;
|
struct cdp_tx_completion_ppdu_user *ppdu_user_desc;
|
||||||
uint8_t curr_user_index = 0;
|
uint8_t curr_user_index = 0;
|
||||||
uint16_t peer_id;
|
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);
|
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;
|
ppdu_user_desc->start_seq = dp_stats_buf->start_seq;
|
||||||
qdf_mem_copy(&ppdu_user_desc->enq_bitmap, &dp_stats_buf->enq_bitmap,
|
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;
|
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,
|
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;
|
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,
|
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);
|
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
|
* dp_process_ppdu_stats_tx_mgmtctrl_payload_tlv: Process
|
||||||
* htt_ppdu_stats_tx_mgmtctrl_payload_tlv
|
* 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;
|
uint8_t trim_size;
|
||||||
|
|
||||||
if ((!pdev->tx_sniffer_enable) && (!pdev->mcopy_mode) &&
|
if ((!pdev->tx_sniffer_enable) && (!pdev->mcopy_mode) &&
|
||||||
(!pdev->bpr_enable))
|
(!pdev->bpr_enable) && (!pdev->tx_capture_enabled))
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
trim_size = ((pdev->mgmtctrl_frm_info.mgmt_buf +
|
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,
|
tag_buf, HTT_INVALID_PEER,
|
||||||
WDI_NO_VAL, pdev->pdev_id);
|
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,
|
dp_deliver_mgmt_frm(pdev, tag_buf);
|
||||||
tag_buf, HTT_INVALID_PEER,
|
|
||||||
WDI_NO_VAL, pdev->pdev_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return QDF_STATUS_E_ALREADY;
|
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
|
* dp_ppdu_desc_user_stats_update(): Function to update TX user stats
|
||||||
* to upper layer
|
|
||||||
* @pdev: DP pdev handle
|
* @pdev: DP pdev handle
|
||||||
* @ppdu_info: per PPDU TLV descriptor
|
* @ppdu_info: per PPDU TLV descriptor
|
||||||
*
|
*
|
||||||
* return: void
|
* return: void
|
||||||
*/
|
*/
|
||||||
static
|
void
|
||||||
void dp_ppdu_desc_deliver(struct dp_pdev *pdev,
|
dp_ppdu_desc_user_stats_update(struct dp_pdev *pdev,
|
||||||
struct ppdu_info *ppdu_info)
|
struct ppdu_info *ppdu_info)
|
||||||
{
|
{
|
||||||
struct cdp_tx_completion_ppdu *ppdu_desc = NULL;
|
struct cdp_tx_completion_ppdu *ppdu_desc = NULL;
|
||||||
struct dp_peer *peer = NULL;
|
struct dp_peer *peer = NULL;
|
||||||
qdf_nbuf_t nbuf;
|
|
||||||
uint16_t i;
|
|
||||||
uint32_t tlv_bitmap_expected;
|
uint32_t tlv_bitmap_expected;
|
||||||
uint32_t tlv_bitmap_default;
|
uint32_t tlv_bitmap_default;
|
||||||
|
uint16_t i;
|
||||||
|
|
||||||
ppdu_desc = (struct cdp_tx_completion_ppdu *)
|
ppdu_desc = (struct cdp_tx_completion_ppdu *)
|
||||||
qdf_nbuf_data(ppdu_info->nbuf);
|
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;
|
tlv_bitmap_default = tlv_bitmap_expected;
|
||||||
for (i = 0; i < ppdu_desc->num_users; i++) {
|
for (i = 0; i < ppdu_desc->num_users; i++) {
|
||||||
|
|
||||||
ppdu_desc->num_mpdu += ppdu_desc->user[i].num_mpdu;
|
ppdu_desc->num_mpdu += ppdu_desc->user[i].num_mpdu;
|
||||||
ppdu_desc->num_msdu += ppdu_desc->user[i].num_msdu;
|
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);
|
dp_peer_unref_del_find_by_id(peer);
|
||||||
tlv_bitmap_expected = tlv_bitmap_default;
|
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
|
* Remove from the list
|
||||||
@@ -2665,6 +2704,8 @@ void dp_ppdu_desc_deliver(struct dp_pdev *pdev,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_get_ppdu_desc(): Function to allocate new PPDU status
|
* dp_get_ppdu_desc(): Function to allocate new PPDU status
|
||||||
* desc for new ppdu id
|
* desc for new ppdu id
|
||||||
@@ -2898,10 +2939,12 @@ static bool dp_txrx_ppdu_stats_handler(struct dp_soc *soc,
|
|||||||
QDF_STATUS_SUCCESS)
|
QDF_STATUS_SUCCESS)
|
||||||
free_buf = false;
|
free_buf = false;
|
||||||
|
|
||||||
|
if (free_buf) {
|
||||||
pdev->mgmtctrl_frm_info.mgmt_buf = NULL;
|
pdev->mgmtctrl_frm_info.mgmt_buf = NULL;
|
||||||
pdev->mgmtctrl_frm_info.mgmt_buf_len = 0;
|
pdev->mgmtctrl_frm_info.mgmt_buf_len = 0;
|
||||||
pdev->mgmtctrl_frm_info.ppdu_id = 0;
|
pdev->mgmtctrl_frm_info.ppdu_id = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ppdu_info)
|
if (ppdu_info)
|
||||||
dp_ppdu_desc_deliver(pdev, ppdu_info);
|
dp_ppdu_desc_deliver(pdev, ppdu_info);
|
||||||
|
@@ -24,6 +24,9 @@
|
|||||||
#include <qdf_nbuf.h>
|
#include <qdf_nbuf.h>
|
||||||
#include <htc_api.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_TYPE qdf_spinlock_t
|
||||||
|
|
||||||
#define HTT_TX_MUTEX_INIT(_mutex) \
|
#define HTT_TX_MUTEX_INIT(_mutex) \
|
||||||
@@ -40,6 +43,22 @@
|
|||||||
|
|
||||||
#define DP_HTT_MAX_SEND_QUEUE_DEPTH 64
|
#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 DP_HTT_HTC_PKT_MISCLIST_SIZE 256
|
||||||
|
|
||||||
#define HTT_T2H_EXT_STATS_TLV_START_OFFSET 3
|
#define HTT_T2H_EXT_STATS_TLV_START_OFFSET 3
|
||||||
@@ -223,4 +242,18 @@ struct htt_stats_context {
|
|||||||
uint32_t msg_len;
|
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_ */
|
#endif /* _DP_HTT_H_ */
|
||||||
|
@@ -35,6 +35,64 @@
|
|||||||
/* Macro For NYSM value received in VHT TLV */
|
/* Macro For NYSM value received in VHT TLV */
|
||||||
#define VHT_SGI_NYSM 3
|
#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
|
#if DP_PRINT_ENABLE
|
||||||
#include <stdarg.h> /* va_list */
|
#include <stdarg.h> /* va_list */
|
||||||
#include <qdf_types.h> /* qdf_vprint */
|
#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_remove(struct dp_soc *soc, struct dp_peer *peer);
|
||||||
extern void dp_peer_find_hash_erase(struct dp_soc *soc);
|
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);
|
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_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_rx_cleanup(struct dp_vdev *vdev, struct dp_peer *peer);
|
||||||
extern void dp_peer_unref_delete(void *peer_handle);
|
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);
|
void dp_pdev_print_tid_stats(struct dp_pdev *pdev);
|
||||||
#endif /* CONFIG_WIN */
|
#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_ */
|
#endif /* #ifndef _DP_INTERNAL_H_ */
|
||||||
|
@@ -27,7 +27,6 @@
|
|||||||
#include <htt.h>
|
#include <htt.h>
|
||||||
#include <wdi_event.h>
|
#include <wdi_event.h>
|
||||||
#include <queue.h>
|
#include <queue.h>
|
||||||
#include "dp_htt.h"
|
|
||||||
#include "dp_types.h"
|
#include "dp_types.h"
|
||||||
#include "dp_internal.h"
|
#include "dp_internal.h"
|
||||||
#include "dp_tx.h"
|
#include "dp_tx.h"
|
||||||
@@ -46,6 +45,8 @@
|
|||||||
#include "dp_peer.h"
|
#include "dp_peer.h"
|
||||||
#include "dp_rx_mon.h"
|
#include "dp_rx_mon.h"
|
||||||
#include "htt_stats.h"
|
#include "htt_stats.h"
|
||||||
|
#include "htt_ppdu_stats.h"
|
||||||
|
#include "dp_htt.h"
|
||||||
#include "qdf_mem.h" /* qdf_mem_malloc,free */
|
#include "qdf_mem.h" /* qdf_mem_malloc,free */
|
||||||
#include "cfg_ucfg_api.h"
|
#include "cfg_ucfg_api.h"
|
||||||
#ifdef QCA_LL_TX_FLOW_CONTROL_V2
|
#ifdef QCA_LL_TX_FLOW_CONTROL_V2
|
||||||
@@ -84,6 +85,23 @@ dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, int val)
|
|||||||
}
|
}
|
||||||
#endif
|
#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);
|
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 *
|
||||||
@@ -136,21 +154,6 @@ bool is_dp_verbose_debug_enabled;
|
|||||||
|
|
||||||
#define STR_MAXLEN 64
|
#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"
|
#define RNG_ERR "SRNG setup failed for"
|
||||||
|
|
||||||
/* Threshold for peer's cached buf queue beyond which frames are dropped */
|
/* 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
|
* @brief Cpu to tx ring map
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_WIN
|
#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
|
static uint8_t
|
||||||
dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS] = {
|
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},
|
{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},
|
{0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2},
|
||||||
{0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}
|
{0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
static uint8_t
|
static uint8_t
|
||||||
dp_cpu_ring_map[DP_NSS_CPU_RING_MAP_MAX][WLAN_CFG_INT_NUM_CONTEXTS] = {
|
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);
|
qdf_event_create(&pdev->fw_peer_stats_event);
|
||||||
|
|
||||||
pdev->num_tx_allowed = wlan_cfg_get_num_tx_desc(soc->wlan_cfg_ctx);
|
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;
|
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_mon_link_free(pdev);
|
||||||
|
|
||||||
|
dp_tx_ppdu_stats_detach(pdev);
|
||||||
|
|
||||||
/* Cleanup per PDEV REO rings if configured */
|
/* Cleanup per PDEV REO rings if configured */
|
||||||
if (wlan_cfg_per_pdev_rx_ring(soc->wlan_cfg_ctx)) {
|
if (wlan_cfg_per_pdev_rx_ring(soc->wlan_cfg_ctx)) {
|
||||||
dp_srng_cleanup(soc, &soc->reo_dest_ring[pdev->pdev_id],
|
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);
|
qdf_atomic_set(&peer->is_default_route_set, 1);
|
||||||
|
|
||||||
dp_peer_rx_init(pdev, peer);
|
dp_peer_rx_init(pdev, peer);
|
||||||
|
dp_peer_tx_init(pdev, peer);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6825,6 +6827,8 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev)
|
|||||||
DP_PRINT_STATS(" Tag[%d] = %llu", index,
|
DP_PRINT_STATS(" Tag[%d] = %llu", index,
|
||||||
pdev->stats.ppdu_stats_counter[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++) {
|
for (i = 0; i < CDP_WDI_NUM_EVENTS; i++) {
|
||||||
if (!pdev->stats.wdi_event[i])
|
if (!pdev->stats.wdi_event[i])
|
||||||
@@ -8100,6 +8104,8 @@ static QDF_STATUS dp_set_pdev_param(struct cdp_pdev *pdev_handle,
|
|||||||
break;
|
break;
|
||||||
case CDP_CONFIG_ENH_RX_CAPTURE:
|
case CDP_CONFIG_ENH_RX_CAPTURE:
|
||||||
return dp_config_enh_rx_capture(pdev_handle, val);
|
return dp_config_enh_rx_capture(pdev_handle, val);
|
||||||
|
case CDP_CONFIG_TX_CAPTURE:
|
||||||
|
return dp_config_enh_tx_capture(pdev_handle, val);
|
||||||
default:
|
default:
|
||||||
return QDF_STATUS_E_INVAL;
|
return QDF_STATUS_E_INVAL;
|
||||||
}
|
}
|
||||||
@@ -10137,7 +10143,7 @@ static struct cdp_ops dp_txrx_ops = {
|
|||||||
*
|
*
|
||||||
* Return: Void
|
* 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;
|
uint32_t i;
|
||||||
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
|
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
|
||||||
|
@@ -34,6 +34,10 @@
|
|||||||
#include <cdp_txrx_handle.h>
|
#include <cdp_txrx_handle.h>
|
||||||
#include <wlan_cfg.h>
|
#include <wlan_cfg.h>
|
||||||
|
|
||||||
|
#ifdef WLAN_TX_PKT_CAPTURE_ENH
|
||||||
|
#include "dp_tx_capture.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef DP_LFR
|
#ifdef DP_LFR
|
||||||
static inline void
|
static inline void
|
||||||
dp_set_ssn_valid_flag(struct hal_reo_cmd_params *params,
|
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
|
#else
|
||||||
static void dp_peer_setup_remaining_tids(struct dp_peer *peer) {};
|
static void dp_peer_setup_remaining_tids(struct dp_peer *peer) {};
|
||||||
#endif
|
#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
|
* dp_peer_rx_init() – Initialize receive TID state
|
||||||
* @pdev: Datapath pdev
|
* @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_disassoc_rcvd = 0;
|
||||||
peer->last_deauth_rcvd = 0;
|
peer->last_deauth_rcvd = 0;
|
||||||
|
|
||||||
|
dp_peer_tx_cleanup(vdev, peer);
|
||||||
|
|
||||||
/* cleanup the Rx reorder queues for this peer */
|
/* cleanup the Rx reorder queues for this peer */
|
||||||
dp_peer_rx_cleanup(vdev, peer);
|
dp_peer_rx_cleanup(vdev, peer);
|
||||||
}
|
}
|
||||||
|
@@ -16,9 +16,12 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include "qdf_types.h"
|
#include "qdf_types.h"
|
||||||
#include "htt_stats.h"
|
#include "dp_peer.h"
|
||||||
#include "dp_types.h"
|
#include "dp_types.h"
|
||||||
#include "dp_internal.h"
|
#include "dp_internal.h"
|
||||||
|
#include "htt_stats.h"
|
||||||
|
#include "htt_ppdu_stats.h"
|
||||||
|
#include "dp_htt.h"
|
||||||
|
|
||||||
#define DP_MAX_STRING_LEN 500
|
#define DP_MAX_STRING_LEN 500
|
||||||
|
|
||||||
@@ -80,6 +83,10 @@ const char *intfrm_delay_bucket[CDP_DELAY_BUCKET_MAX + 1] = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_TX_PKT_CAPTURE_ENH
|
||||||
|
#include "dp_tx_capture.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_print_stats_string_tlv: display htt_stats_string_tlv
|
* dp_print_stats_string_tlv: display htt_stats_string_tlv
|
||||||
* @tag_buf: buffer containing the tlv htt_stats_string_tlv
|
* @tag_buf: buffer containing the tlv htt_stats_string_tlv
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include "if_meta_hdr.h"
|
#include "if_meta_hdr.h"
|
||||||
#endif
|
#endif
|
||||||
#include "enet.h"
|
#include "enet.h"
|
||||||
|
#include "dp_internal.h"
|
||||||
|
|
||||||
#define DP_TX_QUEUE_MASK 0x3
|
#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_AES_GCMP_256,
|
||||||
HAL_TX_ENCRYPT_TYPE_WAPI_GCM_SM4};
|
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
|
* dp_tx_get_queue() - Returns Tx queue IDs to be used for this Tx frame
|
||||||
* @vdev: DP Virtual device handle
|
* @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()) -
|
time_latency = (qdf_ktime_to_ms(qdf_ktime_get()) -
|
||||||
desc->timestamp);
|
desc->timestamp);
|
||||||
}
|
}
|
||||||
if (!(desc->msdu_ext_desc) &&
|
if (!(desc->msdu_ext_desc)) {
|
||||||
(dp_get_completion_indication_for_stack(soc, desc->pdev,
|
if (QDF_STATUS_SUCCESS ==
|
||||||
peer, ts, desc->nbuf,
|
dp_tx_add_to_comp_queue(soc, desc, ts, peer)) {
|
||||||
time_latency)
|
return;
|
||||||
== QDF_STATUS_SUCCESS)) {
|
}
|
||||||
|
|
||||||
|
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_nbuf_unmap(soc->osdev, desc->nbuf,
|
||||||
QDF_DMA_TO_DEVICE);
|
QDF_DMA_TO_DEVICE);
|
||||||
|
dp_send_completion_to_stack(soc,
|
||||||
dp_send_completion_to_stack(soc, desc->pdev, ts->peer_id,
|
desc->pdev,
|
||||||
ts->ppdu_id, desc->nbuf);
|
ts->peer_id,
|
||||||
} else {
|
ts->ppdu_id,
|
||||||
dp_tx_comp_free_buf(soc, desc);
|
desc->nbuf);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dp_tx_comp_free_buf(soc, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -57,6 +57,10 @@
|
|||||||
#include <pktlog.h>
|
#include <pktlog.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_TX_PKT_CAPTURE_ENH
|
||||||
|
#include "dp_tx_capture.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define REPT_MU_MIMO 1
|
#define REPT_MU_MIMO 1
|
||||||
#define REPT_MU_OFDMA_MIMO 3
|
#define REPT_MU_OFDMA_MIMO 3
|
||||||
#define DP_VO_TID 6
|
#define DP_VO_TID 6
|
||||||
@@ -240,6 +244,32 @@ enum dp_nss_cfg {
|
|||||||
dp_nss_cfg_max
|
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
|
* struct rx_desc_pool
|
||||||
* @pool_size: number of RX descriptor in the 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;
|
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
|
* struct ppdu_info - PPDU Status info descriptor
|
||||||
* @ppdu_id - Unique ppduid assigned by firmware for every tx packet
|
* @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
|
* @max_ppdu_id - wrap around for ppdu id
|
||||||
* @last_tlv_cnt - Keep track for missing ppdu tlvs
|
* @last_tlv_cnt - Keep track for missing ppdu tlvs
|
||||||
* @last_user - last ppdu processed for user
|
* @last_user - last ppdu processed for user
|
||||||
@@ -1123,9 +1160,11 @@ struct dp_neighbour_peer {
|
|||||||
* @nbuf - ppdu descriptor payload
|
* @nbuf - ppdu descriptor payload
|
||||||
* @ppdu_desc - ppdu descriptor
|
* @ppdu_desc - ppdu descriptor
|
||||||
* @ppdu_info_list_elem - linked list of ppdu tlvs
|
* @ppdu_info_list_elem - linked list of ppdu tlvs
|
||||||
|
* @ppdu_info_queue_elem - Singly linked list (queue) of ppdu tlvs
|
||||||
*/
|
*/
|
||||||
struct ppdu_info {
|
struct ppdu_info {
|
||||||
uint32_t ppdu_id;
|
uint32_t ppdu_id;
|
||||||
|
uint32_t sched_cmdid;
|
||||||
uint32_t max_ppdu_id;
|
uint32_t max_ppdu_id;
|
||||||
uint16_t tlv_bitmap;
|
uint16_t tlv_bitmap;
|
||||||
uint16_t last_tlv_cnt;
|
uint16_t last_tlv_cnt;
|
||||||
@@ -1133,7 +1172,38 @@ struct ppdu_info {
|
|||||||
is_ampdu:1;
|
is_ampdu:1;
|
||||||
qdf_nbuf_t nbuf;
|
qdf_nbuf_t nbuf;
|
||||||
struct cdp_tx_completion_ppdu *ppdu_desc;
|
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;
|
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
|
#ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
|
||||||
@@ -1150,6 +1220,14 @@ struct rx_protocol_tag_stats {
|
|||||||
|
|
||||||
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
|
#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 */
|
/* PDEV level structure for data path */
|
||||||
struct dp_pdev {
|
struct dp_pdev {
|
||||||
/**
|
/**
|
||||||
@@ -1401,6 +1479,7 @@ struct dp_pdev {
|
|||||||
uint32_t ppdu_id;
|
uint32_t ppdu_id;
|
||||||
bool first_nbuf;
|
bool first_nbuf;
|
||||||
struct {
|
struct {
|
||||||
|
qdf_nbuf_t last_nbuf; /*Ptr to mgmt last buf */
|
||||||
uint8_t *mgmt_buf; /* Ptr to mgmt. payload in HTT ppdu stats */
|
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 mgmt_buf_len; /* Len of mgmt. payload in ppdu stats */
|
||||||
uint32_t ppdu_id;
|
uint32_t ppdu_id;
|
||||||
@@ -1471,6 +1550,12 @@ struct dp_pdev {
|
|||||||
rx_err_proto_tag_stats[RX_PROTOCOL_TAG_MAX];
|
rx_err_proto_tag_stats[RX_PROTOCOL_TAG_MAX];
|
||||||
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
||||||
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
|
#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;
|
struct dp_peer;
|
||||||
@@ -1702,6 +1787,8 @@ struct dp_peer {
|
|||||||
|
|
||||||
/* TID structures */
|
/* TID structures */
|
||||||
struct dp_rx_tid rx_tid[DP_MAX_TIDS];
|
struct dp_rx_tid rx_tid[DP_MAX_TIDS];
|
||||||
|
struct dp_peer_tx_capture tx_capture;
|
||||||
|
|
||||||
|
|
||||||
/* TBD: No transmit TID state required? */
|
/* TBD: No transmit TID state required? */
|
||||||
|
|
||||||
|
@@ -363,6 +363,7 @@ typedef bool (*qdf_irqlocked_func_t)(void *);
|
|||||||
* @QDF_MODULE_ID_SM_ENGINE: SM engine module ID
|
* @QDF_MODULE_ID_SM_ENGINE: SM engine module ID
|
||||||
* @QDF_MODULE_ID_CMN_MLME: CMN MLME module ID
|
* @QDF_MODULE_ID_CMN_MLME: CMN MLME module ID
|
||||||
* @QDF_MODULE_ID_CFR: CFR 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_ANY: anything
|
||||||
* @QDF_MODULE_ID_MAX: Max place holder module ID
|
* @QDF_MODULE_ID_MAX: Max place holder module ID
|
||||||
*/
|
*/
|
||||||
@@ -475,6 +476,7 @@ typedef enum {
|
|||||||
QDF_MODULE_ID_CMN_MLME,
|
QDF_MODULE_ID_CMN_MLME,
|
||||||
QDF_MODULE_ID_BSSCOLOR,
|
QDF_MODULE_ID_BSSCOLOR,
|
||||||
QDF_MODULE_ID_CFR,
|
QDF_MODULE_ID_CFR,
|
||||||
|
QDF_MODULE_ID_TX_CAPTURE,
|
||||||
QDF_MODULE_ID_ANY,
|
QDF_MODULE_ID_ANY,
|
||||||
QDF_MODULE_ID_MAX,
|
QDF_MODULE_ID_MAX,
|
||||||
} QDF_MODULE_ID;
|
} QDF_MODULE_ID;
|
||||||
|
@@ -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_CMN_MLME] = {"CMN_MLME"},
|
||||||
[QDF_MODULE_ID_BSSCOLOR] = {"BSSCOLOR"},
|
[QDF_MODULE_ID_BSSCOLOR] = {"BSSCOLOR"},
|
||||||
[QDF_MODULE_ID_CFR] = {"CFR"},
|
[QDF_MODULE_ID_CFR] = {"CFR"},
|
||||||
|
[QDF_MODULE_ID_TX_CAPTURE] = {"TX_CAPTURE_ENHANCE"},
|
||||||
[QDF_MODULE_ID_ANY] = {"ANY"},
|
[QDF_MODULE_ID_ANY] = {"ANY"},
|
||||||
};
|
};
|
||||||
qdf_export_symbol(g_qdf_category_name);
|
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_CMN_MLME] = QDF_TRACE_LEVEL_INFO,
|
||||||
[QDF_MODULE_ID_BSSCOLOR] = QDF_TRACE_LEVEL_ERROR,
|
[QDF_MODULE_ID_BSSCOLOR] = QDF_TRACE_LEVEL_ERROR,
|
||||||
[QDF_MODULE_ID_CFR] = 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,
|
[QDF_MODULE_ID_ANY] = QDF_TRACE_LEVEL_INFO,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user