qcacmn: Add compile time macro to disable rx_pkt_hdr_tlv
Do not process RX packet header TLV for low memory config profile. Also, drop decapped frames in invalid peer processing function. Change-Id: Ifc7721bb25d85c7e277bebf4b962d2f1bfea150c CRs-Fixed: 2395508
This commit is contained in:

committed by
nshrivas

parent
dddd95f2e9
commit
e11412df5c
@@ -742,6 +742,12 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu)
|
||||
uint8_t *rx_tlv_hdr = qdf_nbuf_data(mpdu);
|
||||
uint8_t *rx_pkt_hdr = hal_rx_pkt_hdr_get(rx_tlv_hdr);
|
||||
|
||||
if (!HAL_IS_DECAP_FORMAT_RAW(rx_tlv_hdr)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"Drop decapped frames");
|
||||
goto free;
|
||||
}
|
||||
|
||||
wh = (struct ieee80211_frame *)rx_pkt_hdr;
|
||||
|
||||
if (!DP_FRAME_IS_DATA(wh)) {
|
||||
|
@@ -25,7 +25,11 @@
|
||||
#include "dp_internal.h"
|
||||
|
||||
#ifdef RXDMA_OPTIMIZATION
|
||||
#ifdef NO_RX_PKT_HDR_TLV
|
||||
#define RX_BUFFER_ALIGNMENT 0
|
||||
#else
|
||||
#define RX_BUFFER_ALIGNMENT 128
|
||||
#endif /* NO_RX_PKT_HDR_TLV */
|
||||
#else /* RXDMA_OPTIMIZATION */
|
||||
#define RX_BUFFER_ALIGNMENT 4
|
||||
#endif /* RXDMA_OPTIMIZATION */
|
||||
@@ -51,7 +55,6 @@
|
||||
#define DP_RX_DESC_ALLOC_MULTIPLIER 3
|
||||
#endif /* QCA_HOST2FW_RXBUF_RING */
|
||||
|
||||
#define RX_BUFFER_SIZE 2048
|
||||
#define RX_BUFFER_RESERVATION 0
|
||||
|
||||
#define DP_PEER_METADATA_PEER_ID_MASK 0x0000ffff
|
||||
|
@@ -23,15 +23,6 @@
|
||||
#include "hal_internal.h"
|
||||
#include <target_type.h>
|
||||
|
||||
#define HAL_RX_OFFSET(block, field) block##_##field##_OFFSET
|
||||
#define HAL_RX_LSB(block, field) block##_##field##_LSB
|
||||
#define HAL_RX_MASk(block, field) block##_##field##_MASK
|
||||
|
||||
#define HAL_RX_GET(_ptr, block, field) \
|
||||
(((*((volatile uint32_t *)_ptr + (HAL_RX_OFFSET(block, field)>>2))) & \
|
||||
HAL_RX_MASk(block, field)) >> \
|
||||
HAL_RX_LSB(block, field))
|
||||
|
||||
#define HAL_RX_PHY_DATA_RADAR 0x01
|
||||
#define HAL_SU_MU_CODING_LDPC 0x01
|
||||
|
||||
@@ -155,13 +146,6 @@
|
||||
|
||||
#define HAL_MAC_ADDR_LEN 6
|
||||
|
||||
enum {
|
||||
HAL_HW_RX_DECAP_FORMAT_RAW = 0,
|
||||
HAL_HW_RX_DECAP_FORMAT_NWIFI,
|
||||
HAL_HW_RX_DECAP_FORMAT_ETH2,
|
||||
HAL_HW_RX_DECAP_FORMAT_8023,
|
||||
};
|
||||
|
||||
enum {
|
||||
DP_PPDU_STATUS_START,
|
||||
DP_PPDU_STATUS_DONE,
|
||||
@@ -202,28 +186,6 @@ uint32_t HAL_RX_DESC_GET_MPDU_FCS_ERR(void *hw_desc_addr)
|
||||
return HAL_RX_GET(rx_attn, RX_ATTENTION_1, FCS_ERR);
|
||||
}
|
||||
|
||||
static inline
|
||||
uint32_t
|
||||
HAL_RX_DESC_GET_DECAP_FORMAT(void *hw_desc_addr) {
|
||||
struct rx_msdu_start *rx_msdu_start;
|
||||
struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)hw_desc_addr;
|
||||
|
||||
rx_msdu_start = &rx_desc->msdu_start_tlv.rx_msdu_start;
|
||||
|
||||
return HAL_RX_GET(rx_msdu_start, RX_MSDU_START_2, DECAP_FORMAT);
|
||||
}
|
||||
|
||||
static inline
|
||||
uint8_t *
|
||||
HAL_RX_DESC_GET_80211_HDR(void *hw_desc_addr) {
|
||||
uint8_t *rx_pkt_hdr;
|
||||
struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)hw_desc_addr;
|
||||
|
||||
rx_pkt_hdr = &rx_desc->pkt_hdr_tlv.rx_pkt_hdr[0];
|
||||
|
||||
return rx_pkt_hdr;
|
||||
}
|
||||
|
||||
/*
|
||||
* HAL_RX_HW_DESC_MPDU_VALID() - check MPDU start TLV tag in MPDU
|
||||
* start TLV of Hardware TLV descriptor
|
||||
@@ -256,14 +218,6 @@ uint32_t HAL_RX_HW_DESC_GET_PPDUID_GET(void *hw_desc_addr)
|
||||
}
|
||||
|
||||
/* TODO: Move all Rx descriptor functions to hal_rx.h to avoid duplication */
|
||||
static inline
|
||||
uint32_t hal_rx_desc_is_first_msdu(void *hw_desc_addr)
|
||||
{
|
||||
struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
|
||||
struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
|
||||
|
||||
return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
|
||||
}
|
||||
|
||||
#define HAL_RX_BUFFER_ADDR_31_0_GET(buff_addr_info) \
|
||||
(_HAL_MS((*_OFFSET_TO_WORD_PTR(buff_addr_info, \
|
||||
|
@@ -21,6 +21,32 @@
|
||||
|
||||
#include <hal_internal.h>
|
||||
|
||||
#define HAL_RX_OFFSET(block, field) block##_##field##_OFFSET
|
||||
#define HAL_RX_LSB(block, field) block##_##field##_LSB
|
||||
#define HAL_RX_MASk(block, field) block##_##field##_MASK
|
||||
|
||||
#define HAL_RX_GET(_ptr, block, field) \
|
||||
(((*((volatile uint32_t *)_ptr + (HAL_RX_OFFSET(block, field)>>2))) & \
|
||||
HAL_RX_MASk(block, field)) >> \
|
||||
HAL_RX_LSB(block, field))
|
||||
|
||||
#ifdef NO_RX_PKT_HDR_TLV
|
||||
/* RX_BUFFER_SIZE = 1536 data bytes + 256 RX TLV bytes. We are avoiding
|
||||
* 128 bytes of RX_PKT_HEADER_TLV.
|
||||
*/
|
||||
#define RX_BUFFER_SIZE 1792
|
||||
#else
|
||||
/* RX_BUFFER_SIZE = 1536 data bytes + 384 RX TLV bytes + some spare bytes */
|
||||
#define RX_BUFFER_SIZE 2048
|
||||
#endif
|
||||
|
||||
enum {
|
||||
HAL_HW_RX_DECAP_FORMAT_RAW = 0,
|
||||
HAL_HW_RX_DECAP_FORMAT_NWIFI,
|
||||
HAL_HW_RX_DECAP_FORMAT_ETH2,
|
||||
HAL_HW_RX_DECAP_FORMAT_8023,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct hal_wbm_err_desc_info: structure to hold wbm error codes and reasons
|
||||
*
|
||||
@@ -611,7 +637,9 @@ struct rx_pkt_tlvs {
|
||||
struct rx_mpdu_start_tlv mpdu_start_tlv;/* 96 bytes */
|
||||
struct rx_mpdu_end_tlv mpdu_end_tlv; /* 12 bytes */
|
||||
uint8_t rx_padding1[RX_PADDING1_BYTES]; /* 16 bytes */
|
||||
#ifndef NO_RX_PKT_HDR_TLV
|
||||
struct rx_pkt_hdr_tlv pkt_hdr_tlv; /* 128 bytes */
|
||||
#endif
|
||||
};
|
||||
#else /* RXDMA_OPTIMIZATION */
|
||||
struct rx_pkt_tlvs {
|
||||
@@ -626,6 +654,13 @@ struct rx_pkt_tlvs {
|
||||
|
||||
#define RX_PKT_TLVS_LEN (sizeof(struct rx_pkt_tlvs))
|
||||
|
||||
#ifdef NO_RX_PKT_HDR_TLV
|
||||
static inline uint8_t
|
||||
*hal_rx_pkt_hdr_get(uint8_t *buf)
|
||||
{
|
||||
return buf + RX_PKT_TLVS_LEN;
|
||||
}
|
||||
#else
|
||||
static inline uint8_t
|
||||
*hal_rx_pkt_hdr_get(uint8_t *buf)
|
||||
{
|
||||
@@ -634,6 +669,7 @@ static inline uint8_t
|
||||
return pkt_tlvs->pkt_hdr_tlv.rx_pkt_hdr;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline uint8_t
|
||||
*hal_rx_padding0_get(uint8_t *buf)
|
||||
@@ -2558,6 +2594,12 @@ static inline void hal_rx_dump_mpdu_end_tlv(struct rx_mpdu_end *mpdu_end,
|
||||
mpdu_end->rx_bitmap_not_updated);
|
||||
}
|
||||
|
||||
#ifdef NO_RX_PKT_HDR_TLV
|
||||
static inline void hal_rx_dump_pkt_hdr_tlv(struct rx_pkt_tlvs *pkt_tlvs,
|
||||
uint8_t dbg_level)
|
||||
{
|
||||
}
|
||||
#else
|
||||
/**
|
||||
* hal_rx_dump_pkt_hdr_tlv: dump RX pkt header TLV in hex format
|
||||
* @ pkt_hdr_tlv: pointer the pkt_hdr_tlv in pkt.
|
||||
@@ -2565,9 +2607,11 @@ static inline void hal_rx_dump_mpdu_end_tlv(struct rx_mpdu_end *mpdu_end,
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void hal_rx_dump_pkt_hdr_tlv(struct rx_pkt_hdr_tlv *pkt_hdr_tlv,
|
||||
static inline void hal_rx_dump_pkt_hdr_tlv(struct rx_pkt_tlvs *pkt_tlvs,
|
||||
uint8_t dbg_level)
|
||||
{
|
||||
struct rx_pkt_hdr_tlv *pkt_hdr_tlv = &pkt_tlvs->pkt_hdr_tlv;
|
||||
|
||||
hal_verbose_debug(
|
||||
"\n---------------\n"
|
||||
"rx_pkt_hdr_tlv \n"
|
||||
@@ -2577,6 +2621,7 @@ static inline void hal_rx_dump_pkt_hdr_tlv(struct rx_pkt_hdr_tlv *pkt_hdr_tlv,
|
||||
|
||||
hal_verbose_hex_dump(pkt_hdr_tlv->rx_pkt_hdr, 128);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* hal_srng_ring_id_get: API to retrieve ring id from hal ring
|
||||
@@ -3186,14 +3231,13 @@ static inline void hal_rx_dump_pkt_tlvs(struct hal_soc *hal_soc,
|
||||
&pkt_tlvs->msdu_start_tlv.rx_msdu_start;
|
||||
struct rx_mpdu_end *mpdu_end = &pkt_tlvs->mpdu_end_tlv.rx_mpdu_end;
|
||||
struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
|
||||
struct rx_pkt_hdr_tlv *pkt_hdr_tlv = &pkt_tlvs->pkt_hdr_tlv;
|
||||
|
||||
hal_rx_dump_rx_attention_tlv(rx_attn, dbg_level);
|
||||
hal_rx_dump_mpdu_start_tlv(mpdu_start, dbg_level, hal_soc);
|
||||
hal_rx_dump_msdu_start_tlv(hal_soc, msdu_start, dbg_level);
|
||||
hal_rx_dump_mpdu_end_tlv(mpdu_end, dbg_level);
|
||||
hal_rx_dump_msdu_end_tlv(hal_soc, msdu_end, dbg_level);
|
||||
hal_rx_dump_pkt_hdr_tlv(pkt_hdr_tlv, dbg_level);
|
||||
hal_rx_dump_pkt_hdr_tlv(pkt_tlvs, dbg_level);
|
||||
}
|
||||
|
||||
|
||||
@@ -3214,4 +3258,67 @@ static inline void hal_reo_status_get_header(uint32_t *d, int b,
|
||||
hal_soc->ops->hal_reo_status_get_header(d, b, h);
|
||||
}
|
||||
|
||||
static inline
|
||||
uint32_t hal_rx_desc_is_first_msdu(void *hw_desc_addr)
|
||||
{
|
||||
struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
|
||||
struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
|
||||
|
||||
return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
|
||||
}
|
||||
|
||||
static inline
|
||||
uint32_t
|
||||
HAL_RX_DESC_GET_DECAP_FORMAT(void *hw_desc_addr) {
|
||||
struct rx_msdu_start *rx_msdu_start;
|
||||
struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)hw_desc_addr;
|
||||
|
||||
rx_msdu_start = &rx_desc->msdu_start_tlv.rx_msdu_start;
|
||||
|
||||
return HAL_RX_GET(rx_msdu_start, RX_MSDU_START_2, DECAP_FORMAT);
|
||||
}
|
||||
|
||||
#ifdef NO_RX_PKT_HDR_TLV
|
||||
static inline
|
||||
uint8_t *
|
||||
HAL_RX_DESC_GET_80211_HDR(void *hw_desc_addr) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"[%s][%d] decap format not raw", __func__, __LINE__);
|
||||
QDF_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static inline
|
||||
uint8_t *
|
||||
HAL_RX_DESC_GET_80211_HDR(void *hw_desc_addr) {
|
||||
uint8_t *rx_pkt_hdr;
|
||||
struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)hw_desc_addr;
|
||||
|
||||
rx_pkt_hdr = &rx_desc->pkt_hdr_tlv.rx_pkt_hdr[0];
|
||||
|
||||
return rx_pkt_hdr;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NO_RX_PKT_HDR_TLV
|
||||
static inline
|
||||
bool HAL_IS_DECAP_FORMAT_RAW(uint8_t *rx_tlv_hdr)
|
||||
{
|
||||
uint8_t decap_format;
|
||||
|
||||
if (hal_rx_desc_is_first_msdu(rx_tlv_hdr)) {
|
||||
decap_format = HAL_RX_DESC_GET_DECAP_FORMAT(rx_tlv_hdr);
|
||||
if (decap_format == HAL_HW_RX_DECAP_FORMAT_RAW)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
static inline
|
||||
bool HAL_IS_DECAP_FORMAT_RAW(uint8_t *rx_tlv_hdr)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
#endif /* _HAL_RX_H */
|
||||
|
Reference in New Issue
Block a user