qcacmn: add tlv format to buffer along with debug mechanism
use msdu_count and index to occupy buffer headroom within mpdu. new mechanism to debug buffer while using pf tags enabled Change-Id: I1b7d8a1d7ec93f51869119294d2f0b14e3909fe9 CRs-Fixed: 3217284
此提交包含在:
@@ -2677,9 +2677,7 @@ struct cdp_flow_stats {
|
|||||||
*/
|
*/
|
||||||
struct cdp_flow_stats {
|
struct cdp_flow_stats {
|
||||||
uint32_t msdu_count;
|
uint32_t msdu_count;
|
||||||
#ifdef QCA_TEST_MON_PF_TAGS_STATS
|
|
||||||
uint32_t mon_msdu_count;
|
uint32_t mon_msdu_count;
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -3049,6 +3049,16 @@ void dp_rx_fst_detach(struct dp_soc *soc, struct dp_pdev *pdev);
|
|||||||
*/
|
*/
|
||||||
QDF_STATUS dp_rx_flow_send_fst_fw_setup(struct dp_soc *soc,
|
QDF_STATUS dp_rx_flow_send_fst_fw_setup(struct dp_soc *soc,
|
||||||
struct dp_pdev *pdev);
|
struct dp_pdev *pdev);
|
||||||
|
|
||||||
|
/** dp_mon_rx_update_rx_flow_tag_stats() - Update a mon flow's statistics
|
||||||
|
* @pdev: pdev handle
|
||||||
|
* @flow_id: flow index (truncated hash) in the Rx FST
|
||||||
|
*
|
||||||
|
* Return: Success when flow statistcs is updated, error on failure
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
dp_mon_rx_update_rx_flow_tag_stats(struct dp_pdev *pdev, uint32_t flow_id);
|
||||||
|
|
||||||
#else /* !((WLAN_SUPPORT_RX_FLOW_TAG) || defined(WLAN_SUPPORT_RX_FISA)) */
|
#else /* !((WLAN_SUPPORT_RX_FLOW_TAG) || defined(WLAN_SUPPORT_RX_FISA)) */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2656,9 +2656,6 @@ struct rx_protocol_tag_map {
|
|||||||
#ifdef WLAN_SUPPORT_RX_TAG_STATISTICS
|
#ifdef WLAN_SUPPORT_RX_TAG_STATISTICS
|
||||||
struct rx_protocol_tag_stats {
|
struct rx_protocol_tag_stats {
|
||||||
uint32_t tag_ctr;
|
uint32_t tag_ctr;
|
||||||
#ifdef QCA_TEST_MON_PF_TAGS_STATS
|
|
||||||
uint32_t mon_tag_ctr;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
#endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
|
||||||
|
|
||||||
@@ -2978,6 +2975,8 @@ struct dp_pdev {
|
|||||||
/* Track msdus received from expection ring separately */
|
/* Track msdus received from expection ring separately */
|
||||||
struct rx_protocol_tag_stats
|
struct rx_protocol_tag_stats
|
||||||
rx_err_proto_tag_stats[RX_PROTOCOL_TAG_MAX];
|
rx_err_proto_tag_stats[RX_PROTOCOL_TAG_MAX];
|
||||||
|
struct rx_protocol_tag_stats
|
||||||
|
mon_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 */
|
||||||
|
|
||||||
|
@@ -1548,3 +1548,27 @@ void dp_mon_cdp_ops_register_2_0(struct cdp_ops *ops)
|
|||||||
ops->mon_ops = &dp_ops_mon_2_0;
|
ops->mon_ops = &dp_ops_mon_2_0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) ||\
|
||||||
|
defined(WLAN_SUPPORT_RX_FLOW_TAG)
|
||||||
|
#if QCA_TEST_MON_PF_TAGS_STATS
|
||||||
|
/** dp_mon_rx_update_rx_protocol_tag_stats() - Update mon protocols's
|
||||||
|
* statistics
|
||||||
|
* @pdev: pdev handle
|
||||||
|
* @protocol_index: Protocol index for which the stats should be incremented
|
||||||
|
* @ring_index: REO ring number from which this tag was received.
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void dp_mon_rx_update_rx_protocol_tag_stats(struct dp_pdev *pdev,
|
||||||
|
uint16_t protocol_index)
|
||||||
|
{
|
||||||
|
pdev->mon_proto_tag_stats[protocol_index].tag_ctr++;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void dp_mon_rx_update_rx_protocol_tag_stats(struct dp_pdev *pdev,
|
||||||
|
uint16_t protocol_index)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
@@ -406,4 +406,19 @@ dp_rx_mon_add_frag_to_skb(struct hal_rx_ppdu_info *ppdu_info,
|
|||||||
qdf_assert_always(0);
|
qdf_assert_always(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) ||\
|
||||||
|
defined(WLAN_SUPPORT_RX_FLOW_TAG)
|
||||||
|
/** dp_mon_rx_update_rx_err_protocol_tag_stats() - Update mon protocols's
|
||||||
|
* statistics from given protocol
|
||||||
|
* type
|
||||||
|
* @pdev: pdev handle
|
||||||
|
* @protocol_index: Protocol index for which the stats should be incremented
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void dp_mon_rx_update_rx_protocol_tag_stats(struct dp_pdev *pdev,
|
||||||
|
uint16_t protocol_index);
|
||||||
|
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
|
||||||
|
|
||||||
#endif /* _DP_MON_2_0_H_ */
|
#endif /* _DP_MON_2_0_H_ */
|
||||||
|
@@ -38,36 +38,55 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define F_MASK 0xFFFF
|
#define F_MASK 0xFFFF
|
||||||
|
#define TEST_MASK 0xCBF
|
||||||
|
|
||||||
|
#if defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) ||\
|
||||||
|
defined(WLAN_SUPPORT_RX_FLOW_TAG)
|
||||||
|
|
||||||
#ifdef QCA_TEST_MON_PF_TAGS_STATS
|
#ifdef QCA_TEST_MON_PF_TAGS_STATS
|
||||||
|
|
||||||
/**
|
static
|
||||||
* dp_mon_rx_pf_update_stats() - update protocol flow tags stats
|
void dp_rx_mon_print_tag_buf(uint8_t *buf, uint16_t test, uint16_t room)
|
||||||
*
|
|
||||||
* @pdev: pdev
|
|
||||||
* @flow_idx: Protocol index for which the stats should be incremented
|
|
||||||
* @cce_metadata: Cached CCE metadata value received from MSDU_END TLV
|
|
||||||
*
|
|
||||||
* Return: void
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
dp_rx_mon_pf_update_stats(struct dp_pdev *dp_pdev, uint32_t flow_idx,
|
|
||||||
uint16_t cce_metadata)
|
|
||||||
{
|
{
|
||||||
dp_mon_rx_update_rx_flow_tag_stats(pdev, flow_idx);
|
if (test != TEST_MASK)
|
||||||
dp_mon_rx_update_rx_err_protocol_tag_stats(pdev, cce_metadata);
|
return;
|
||||||
dp_mon_rx_update_rx_protocol_tag_stats(pdev, cce_metada,
|
print_hex_dump(KERN_ERR, "TLV BUFFER: ", DUMP_PREFIX_NONE,
|
||||||
MAX_REO_DEST_RINGS);
|
32, 2, buf, room, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void dp_rx_mon_enable_pf_test(uint16_t **nbuf)
|
||||||
|
{
|
||||||
|
uint16_t *nbuf_head = *nbuf;
|
||||||
|
|
||||||
|
*((uint16_t *)nbuf_head) = TEST_MASK;
|
||||||
|
nbuf_head += sizeof(uint16_t);
|
||||||
|
|
||||||
|
*nbuf = nbuf_head;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static void
|
static
|
||||||
dp_rx_mon_pf_update_stats(struct dp_pdev *dp_pdev, uint32_t flow_idx,
|
void dp_rx_mon_print_tag_buf(uint8_t *buf, uint16_t test, uint16_t room)
|
||||||
uint16_t cce_metadata)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void dp_rx_mon_enable_pf_test(uint8_t **nbuf)
|
||||||
|
{
|
||||||
|
uint8_t *nbuf_head = *nbuf;
|
||||||
|
|
||||||
|
nbuf_head += sizeof(uint16_t);
|
||||||
|
*nbuf = nbuf_head;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static
|
||||||
|
void dp_rx_mon_set_zero(qdf_nbuf_t nbuf)
|
||||||
|
{
|
||||||
|
qdf_mem_zero(qdf_nbuf_head(nbuf), DP_RX_MON_TLV_ROOM);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_rx_mon_nbuf_add_rx_frag () - Add frag to SKB
|
* dp_rx_mon_nbuf_add_rx_frag () - Add frag to SKB
|
||||||
*
|
*
|
||||||
@@ -116,8 +135,17 @@ dp_mon_free_parent_nbuf(struct dp_mon_pdev *mon_pdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dp_rx_mon_shift_pf_tag_in_headroom(qdf_nbuf_t nbuf, struct dp_soc *soc)
|
dp_rx_mon_shift_pf_tag_in_headroom(qdf_nbuf_t nbuf, struct dp_soc *soc,
|
||||||
|
struct hal_rx_ppdu_info *ppdu_info)
|
||||||
{
|
{
|
||||||
|
uint32_t test = 0;
|
||||||
|
uint32_t room = 0;
|
||||||
|
uint16_t msdu_count = 0;
|
||||||
|
uint16_t *dp = NULL;
|
||||||
|
uint16_t *hp = NULL;
|
||||||
|
uint16_t tlv_data_len, total_tlv_len;
|
||||||
|
uint32_t bytes = 0;
|
||||||
|
|
||||||
if (qdf_unlikely(!soc)) {
|
if (qdf_unlikely(!soc)) {
|
||||||
dp_mon_err("Soc[%pK] Null. Can't update pftag to nbuf headroom",
|
dp_mon_err("Soc[%pK] Null. Can't update pftag to nbuf headroom",
|
||||||
soc);
|
soc);
|
||||||
@@ -130,17 +158,48 @@ dp_rx_mon_shift_pf_tag_in_headroom(qdf_nbuf_t nbuf, struct dp_soc *soc)
|
|||||||
if (qdf_unlikely(!nbuf))
|
if (qdf_unlikely(!nbuf))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (qdf_unlikely(qdf_nbuf_headroom(nbuf) <
|
/* Headroom must be have enough space for tlv to be added*/
|
||||||
(DP_RX_MON_TOT_PF_TAG_LEN * 2))) {
|
if (qdf_unlikely(qdf_nbuf_headroom(nbuf) < DP_RX_MON_TLV_ROOM)) {
|
||||||
dp_mon_err("Headroom[%d] < 2 *DP_RX_MON_PF_TAG_TOT_LEN[%lu]",
|
dp_mon_err("Headroom[%d] < DP_RX_MON_TLV_ROOM[%d]",
|
||||||
qdf_nbuf_headroom(nbuf), DP_RX_MON_TOT_PF_TAG_LEN);
|
qdf_nbuf_headroom(nbuf), DP_RX_MON_TLV_ROOM);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qdf_nbuf_push_head(nbuf, DP_RX_MON_TOT_PF_TAG_LEN);
|
hp = (uint16_t *)qdf_nbuf_head(nbuf);
|
||||||
qdf_mem_copy(qdf_nbuf_data(nbuf), qdf_nbuf_head(nbuf),
|
test = *hp & F_MASK;
|
||||||
DP_RX_MON_TOT_PF_TAG_LEN);
|
hp += sizeof(uint16_t);
|
||||||
qdf_nbuf_pull_head(nbuf, DP_RX_MON_TOT_PF_TAG_LEN);
|
msdu_count = *hp;
|
||||||
|
|
||||||
|
if (qdf_unlikely(!msdu_count))
|
||||||
|
return;
|
||||||
|
|
||||||
|
dp_mon_debug("msdu_count: %d", msdu_count);
|
||||||
|
|
||||||
|
room = DP_RX_MON_PF_TAG_LEN_PER_FRAG * msdu_count;
|
||||||
|
tlv_data_len = DP_RX_MON_TLV_MSDU_CNT + (room);
|
||||||
|
total_tlv_len = DP_RX_MON_TLV_HDR_LEN + tlv_data_len;
|
||||||
|
|
||||||
|
//1. store space for MARKER
|
||||||
|
dp = (uint16_t *)qdf_nbuf_push_head(nbuf, sizeof(uint16_t));
|
||||||
|
if (qdf_likely(dp)) {
|
||||||
|
*(uint16_t *)dp = DP_RX_MON_TLV_HDR_MARKER;
|
||||||
|
bytes += sizeof(uint16_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
//2. store space for total size
|
||||||
|
dp = (uint16_t *)qdf_nbuf_push_head(nbuf, sizeof(uint16_t));
|
||||||
|
if (qdf_likely(dp)) {
|
||||||
|
*(uint16_t *)dp = total_tlv_len;
|
||||||
|
bytes += sizeof(uint16_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
//create TLV
|
||||||
|
bytes += dp_mon_rx_add_tlv(DP_RX_MON_TLV_PF_ID, tlv_data_len, hp, nbuf);
|
||||||
|
|
||||||
|
dp_rx_mon_print_tag_buf(qdf_nbuf_data(nbuf), test, total_tlv_len);
|
||||||
|
|
||||||
|
qdf_nbuf_pull_head(nbuf, bytes);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -153,8 +212,9 @@ dp_rx_mon_pf_tag_to_buf_headroom_2_0(void *nbuf,
|
|||||||
struct hal_rx_mon_msdu_info *msdu_info;
|
struct hal_rx_mon_msdu_info *msdu_info;
|
||||||
uint16_t flow_id;
|
uint16_t flow_id;
|
||||||
uint16_t cce_metadata;
|
uint16_t cce_metadata;
|
||||||
uint16_t protocol_tag;
|
uint16_t protocol_tag = 0;
|
||||||
uint32_t flow_tag;
|
uint32_t flow_tag;
|
||||||
|
uint8_t invalid_cce = 0, invalid_fse = 0;
|
||||||
|
|
||||||
if (qdf_unlikely(!soc)) {
|
if (qdf_unlikely(!soc)) {
|
||||||
dp_mon_err("Soc[%pK] Null. Can't update pftag to nbuf headroom",
|
dp_mon_err("Soc[%pK] Null. Can't update pftag to nbuf headroom",
|
||||||
@@ -168,11 +228,10 @@ dp_rx_mon_pf_tag_to_buf_headroom_2_0(void *nbuf,
|
|||||||
if (qdf_unlikely(!nbuf))
|
if (qdf_unlikely(!nbuf))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Headroom must be double of PF_TAG_SIZE as we copy it 1stly to head */
|
/* Headroom must be have enough space for tlv to be added*/
|
||||||
if (qdf_unlikely(qdf_nbuf_headroom(nbuf) <
|
if (qdf_unlikely(qdf_nbuf_headroom(nbuf) < DP_RX_MON_TLV_ROOM)) {
|
||||||
(DP_RX_MON_TOT_PF_TAG_LEN * 2))) {
|
dp_mon_err("Headroom[%d] < DP_RX_MON_TLV_ROOM[%d]",
|
||||||
dp_mon_err("Headroom[%d] < 2 * DP_RX_MON_PF_TAG_TOT_LEN[%lu]",
|
qdf_nbuf_headroom(nbuf), DP_RX_MON_TLV_ROOM);
|
||||||
qdf_nbuf_headroom(nbuf), DP_RX_MON_TOT_PF_TAG_LEN);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,28 +246,76 @@ dp_rx_mon_pf_tag_to_buf_headroom_2_0(void *nbuf,
|
|||||||
cce_metadata = ppdu_info->rx_msdu_info[user_id].cce_metadata -
|
cce_metadata = ppdu_info->rx_msdu_info[user_id].cce_metadata -
|
||||||
RX_PROTOCOL_TAG_START_OFFSET;
|
RX_PROTOCOL_TAG_START_OFFSET;
|
||||||
|
|
||||||
if (qdf_unlikely(cce_metadata > RX_PROTOCOL_TAG_MAX - 1)) {
|
|
||||||
dp_mon_debug("Invalid user_id cce_metadata: %d pdev: %pK", cce_metadata, pdev);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
protocol_tag = pdev->rx_proto_tag_map[cce_metadata].tag;
|
|
||||||
flow_tag = ppdu_info->rx_msdu_info[user_id].fse_metadata & F_MASK;
|
flow_tag = ppdu_info->rx_msdu_info[user_id].fse_metadata & F_MASK;
|
||||||
|
|
||||||
if (msdu_info->msdu_index >= QDF_NBUF_MAX_FRAGS) {
|
if (qdf_unlikely((cce_metadata > RX_PROTOCOL_TAG_MAX - 1) ||
|
||||||
|
(cce_metadata > 0 && cce_metadata < 4))) {
|
||||||
|
dp_mon_debug("Invalid user_id cce_metadata: %d pdev: %pK", cce_metadata, pdev);
|
||||||
|
invalid_cce = 1;
|
||||||
|
protocol_tag = cce_metadata;
|
||||||
|
} else {
|
||||||
|
protocol_tag = pdev->rx_proto_tag_map[cce_metadata].tag;
|
||||||
|
dp_mon_rx_update_rx_protocol_tag_stats(pdev, cce_metadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flow_tag > 0) {
|
||||||
|
dp_mon_rx_update_rx_flow_tag_stats(pdev, flow_id);
|
||||||
|
} else {
|
||||||
|
dp_mon_debug("Invalid flow_tag: %d pdev: %pK ", flow_tag, pdev);
|
||||||
|
invalid_fse = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (invalid_cce && invalid_fse)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (msdu_info->msdu_index >= DP_RX_MON_MAX_MSDU) {
|
||||||
dp_mon_err("msdu_index causes overflow in headroom");
|
dp_mon_err("msdu_index causes overflow in headroom");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dp_rx_mon_pf_update_stats(pdev, flow_id, cce_metadata);
|
dp_mon_debug("protocol_tag: %d, cce_metadata: %d, flow_tag: %d",
|
||||||
|
protocol_tag, cce_metadata, flow_tag);
|
||||||
|
|
||||||
|
dp_mon_debug("msdu_index: %d", msdu_info->msdu_index);
|
||||||
|
|
||||||
|
|
||||||
nbuf_head = qdf_nbuf_head(nbuf);
|
nbuf_head = qdf_nbuf_head(nbuf);
|
||||||
nbuf_head += (msdu_info->msdu_index * DP_RX_MON_PF_TAG_SIZE);
|
dp_rx_mon_enable_pf_test(&nbuf_head);
|
||||||
*((uint16_t *)nbuf_head) = protocol_tag;
|
|
||||||
|
*((uint16_t *)nbuf_head) = msdu_info->msdu_index + 1;
|
||||||
|
nbuf_head += DP_RX_MON_TLV_MSDU_CNT;
|
||||||
|
|
||||||
|
nbuf_head += ((msdu_info->msdu_index) * DP_RX_MON_PF_TAG_SIZE);
|
||||||
|
if (!invalid_cce)
|
||||||
|
*((uint16_t *)nbuf_head) = protocol_tag;
|
||||||
nbuf_head += sizeof(uint16_t);
|
nbuf_head += sizeof(uint16_t);
|
||||||
*((uint16_t *)nbuf_head) = flow_tag;
|
if (!invalid_fse)
|
||||||
|
*((uint16_t *)nbuf_head) = flow_tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static
|
||||||
|
void dp_rx_mon_set_zero(qdf_nbuf_t nbuf)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void dp_rx_mon_shift_pf_tag_in_headroom(qdf_nbuf_t nbuf, struct dp_soc *soc,
|
||||||
|
struct hal_rx_ppdu_info *ppdu_info)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void dp_rx_mon_pf_tag_to_buf_headroom_2_0(void *nbuf,
|
||||||
|
struct hal_rx_ppdu_info *ppdu_info,
|
||||||
|
struct dp_pdev *pdev,
|
||||||
|
struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_rx_mon_free_ppdu_info () - Free PPDU info
|
* dp_rx_mon_free_ppdu_info () - Free PPDU info
|
||||||
* @pdev: DP pdev
|
* @pdev: DP pdev
|
||||||
@@ -374,7 +481,8 @@ dp_rx_mon_process_ppdu_info(struct dp_pdev *pdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dp_rx_mon_shift_pf_tag_in_headroom(mpdu,
|
dp_rx_mon_shift_pf_tag_in_headroom(mpdu,
|
||||||
pdev->soc);
|
pdev->soc,
|
||||||
|
ppdu_info);
|
||||||
|
|
||||||
/* Deliver MPDU to osif layer */
|
/* Deliver MPDU to osif layer */
|
||||||
status = dp_rx_mon_deliver_mpdu(mon_pdev,
|
status = dp_rx_mon_deliver_mpdu(mon_pdev,
|
||||||
@@ -913,8 +1021,10 @@ uint8_t dp_rx_mon_process_tlv_status(struct dp_pdev *pdev,
|
|||||||
if (!ppdu_info->mpdu_info[user_id].mpdu_start_received) {
|
if (!ppdu_info->mpdu_info[user_id].mpdu_start_received) {
|
||||||
|
|
||||||
nbuf = qdf_nbuf_alloc(pdev->soc->osdev,
|
nbuf = qdf_nbuf_alloc(pdev->soc->osdev,
|
||||||
DP_RX_MON_MAX_MONITOR_HEADER,
|
DP_RX_MON_TLV_ROOM +
|
||||||
DP_RX_MON_MAX_MONITOR_HEADER,
|
DP_RX_MON_MAX_RADIO_TAP_HDR,
|
||||||
|
DP_RX_MON_TLV_ROOM +
|
||||||
|
DP_RX_MON_MAX_RADIO_TAP_HDR,
|
||||||
4, FALSE);
|
4, FALSE);
|
||||||
|
|
||||||
/* Set *head_msdu->next as NULL as all msdus are
|
/* Set *head_msdu->next as NULL as all msdus are
|
||||||
@@ -926,6 +1036,9 @@ uint8_t dp_rx_mon_process_tlv_status(struct dp_pdev *pdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
mon_pdev->rx_mon_stats.parent_buf_alloc++;
|
mon_pdev->rx_mon_stats.parent_buf_alloc++;
|
||||||
|
|
||||||
|
dp_rx_mon_set_zero(nbuf);
|
||||||
|
|
||||||
qdf_nbuf_set_next(nbuf, NULL);
|
qdf_nbuf_set_next(nbuf, NULL);
|
||||||
|
|
||||||
ppdu_info->mpdu_q[user_id][mpdu_idx] = nbuf;
|
ppdu_info->mpdu_q[user_id][mpdu_idx] = nbuf;
|
||||||
|
@@ -24,6 +24,23 @@
|
|||||||
#define DP_RX_MON_PACKET_OFFSET 8
|
#define DP_RX_MON_PACKET_OFFSET 8
|
||||||
#define DP_RX_MON_RX_HDR_OFFSET 8
|
#define DP_RX_MON_RX_HDR_OFFSET 8
|
||||||
#define DP_GET_NUM_QWORDS(num) ((num) >> 3)
|
#define DP_GET_NUM_QWORDS(num) ((num) >> 3)
|
||||||
|
#define DP_RX_MON_TLV_HDR_MARKER 0xFEED
|
||||||
|
#define DP_RX_MON_TLV_HDR_MARKER_LEN 2
|
||||||
|
#define DP_RX_MON_TLV_HDR_LEN 3
|
||||||
|
#define DP_RX_MON_TLV_TOTAL_LEN 2
|
||||||
|
#define DP_RX_MON_TLV_PF_ID 1
|
||||||
|
#define DP_RX_MON_TLV_MSDU_CNT 2
|
||||||
|
#define DP_RX_MON_MAX_MSDU 16
|
||||||
|
#define DP_RX_MON_MAX_TLVS 1
|
||||||
|
#define DP_RX_MON_PF_TLV_LEN (((DP_RX_MON_PF_TAG_LEN_PER_FRAG)\
|
||||||
|
* (DP_RX_MON_MAX_MSDU) * 2)\
|
||||||
|
+ (DP_RX_MON_TLV_MSDU_CNT))
|
||||||
|
#define DP_RX_MON_INDIV_TLV_LEN (DP_RX_MON_PF_TLV_LEN)
|
||||||
|
#define DP_RX_MON_TLV_ROOM ((DP_RX_MON_INDIV_TLV_LEN)\
|
||||||
|
+ ((DP_RX_MON_TLV_HDR_LEN) * (DP_RX_MON_MAX_TLVS))\
|
||||||
|
+ (DP_RX_MON_TLV_HDR_MARKER_LEN)\
|
||||||
|
+ (DP_RX_MON_TLV_TOTAL_LEN))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_rx_mon_buffers_alloc() - allocate rx monitor buffers
|
* dp_rx_mon_buffers_alloc() - allocate rx monitor buffers
|
||||||
* @soc: DP soc handle
|
* @soc: DP soc handle
|
||||||
@@ -194,4 +211,17 @@ void dp_rx_mon_drain_wq(struct dp_pdev *pdev);
|
|||||||
void
|
void
|
||||||
dp_mon_free_parent_nbuf(struct dp_mon_pdev *mon_pdev,
|
dp_mon_free_parent_nbuf(struct dp_mon_pdev *mon_pdev,
|
||||||
qdf_nbuf_t nbuf);
|
qdf_nbuf_t nbuf);
|
||||||
|
#if !defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) &&\
|
||||||
|
!defined(WLAN_SUPPORT_RX_FLOW_TAG)
|
||||||
|
void
|
||||||
|
dp_rx_mon_pf_tag_to_buf_headroom_2_0(void *nbuf,
|
||||||
|
struct hal_rx_ppdu_info *ppdu_info,
|
||||||
|
struct dp_pdev *pdev, struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void dp_rx_mon_shift_pf_tag_in_headroom(qdf_nbuf_t nbuf, struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
|
||||||
#endif /* _DP_RX_MON_2_0_H_ */
|
#endif /* _DP_RX_MON_2_0_H_ */
|
||||||
|
@@ -1992,3 +1992,33 @@ dp_rx_process_peer_based_pktlog(struct dp_soc *soc,
|
|||||||
dp_peer_unref_delete(peer,
|
dp_peer_unref_delete(peer,
|
||||||
DP_MOD_ID_RX_PPDU_STATS);
|
DP_MOD_ID_RX_PPDU_STATS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
dp_mon_rx_add_tlv(uint8_t id, uint16_t len, void *value, qdf_nbuf_t mpdu_nbuf)
|
||||||
|
{
|
||||||
|
uint8_t *dest = NULL;
|
||||||
|
uint32_t num_bytes_pushed = 0;
|
||||||
|
|
||||||
|
/* Add tlv id field */
|
||||||
|
dest = qdf_nbuf_push_head(mpdu_nbuf, sizeof(uint8_t));
|
||||||
|
if (qdf_likely(dest)) {
|
||||||
|
*((uint8_t *)dest) = id;
|
||||||
|
num_bytes_pushed += sizeof(uint8_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add tlv len field */
|
||||||
|
dest = qdf_nbuf_push_head(mpdu_nbuf, sizeof(uint16_t));
|
||||||
|
if (qdf_likely(dest)) {
|
||||||
|
*((uint16_t *)dest) = len;
|
||||||
|
num_bytes_pushed += sizeof(uint16_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add tlv value field */
|
||||||
|
dest = qdf_nbuf_push_head(mpdu_nbuf, len);
|
||||||
|
if (qdf_likely(dest)) {
|
||||||
|
qdf_mem_copy(dest, value, len);
|
||||||
|
num_bytes_pushed += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
return num_bytes_pushed;
|
||||||
|
}
|
||||||
|
@@ -769,4 +769,7 @@ void
|
|||||||
dp_rx_process_peer_based_pktlog(struct dp_soc *soc,
|
dp_rx_process_peer_based_pktlog(struct dp_soc *soc,
|
||||||
struct hal_rx_ppdu_info *ppdu_info,
|
struct hal_rx_ppdu_info *ppdu_info,
|
||||||
qdf_nbuf_t status_nbuf, uint32_t pdev_id);
|
qdf_nbuf_t status_nbuf, uint32_t pdev_id);
|
||||||
|
|
||||||
|
uint32_t dp_mon_rx_add_tlv(uint8_t id, uint16_t len, void *value,
|
||||||
|
qdf_nbuf_t mpdu_nbuf);
|
||||||
#endif /* _DP_RX_MON_H_ */
|
#endif /* _DP_RX_MON_H_ */
|
||||||
|
新增問題並參考
封鎖使用者