qcacmn: Add hal_rx_desc_is_first_msdu API

Implement hal_rx_desc_is_first_msdu API
based on the chipset as the macro to
retrieve first_msdu bit value is chipset
dependent.

Change-Id: I8e8a3aceb225b591b96e6f8453ffbebf1f78e529
CRs-Fixed: 2522133
This commit is contained in:
Venkata Sharath Chandra Manchala
2019-09-20 16:51:48 -07:00
committed by nshrivas
parent 5bf1e5a1da
commit 43d563277d
10 changed files with 123 additions and 9 deletions

View File

@@ -731,7 +731,7 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
rx_pkt_hdr = hal_rx_pkt_hdr_get(rx_tlv_hdr);
if (!HAL_IS_DECAP_FORMAT_RAW(rx_tlv_hdr)) {
if (!HAL_IS_DECAP_FORMAT_RAW(soc->hal_soc, rx_tlv_hdr)) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"Drop decapped frames");
goto free;

View File

@@ -415,7 +415,8 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
buf_info.paddr;
}
if (hal_rx_desc_is_first_msdu(rx_desc_tlv))
if (hal_rx_desc_is_first_msdu(soc->hal_soc,
rx_desc_tlv))
hal_rx_mon_hw_desc_get_mpdu_status(soc->hal_soc,
rx_desc_tlv,
&(dp_pdev->ppdu_info.rx_status));

View File

@@ -384,6 +384,7 @@ struct hal_hw_txrx_ops {
uint8_t (*hal_rx_msdu_end_da_is_mcbc_get)(uint8_t *buf);
uint8_t (*hal_rx_msdu_end_sa_is_valid_get)(uint8_t *buf);
uint16_t (*hal_rx_msdu_end_sa_idx_get)(uint8_t *buf);
uint32_t (*hal_rx_desc_is_first_msdu)(void *hw_desc_addr);
};
/**

View File

@@ -3389,13 +3389,21 @@ void hal_reo_status_get_header(uint32_t *d, int b,
hal_soc->ops->hal_reo_status_get_header(d, b, h);
}
/**
* hal_rx_desc_is_first_msdu() - Check if first msdu
*
* @hal_soc_hdl: hal_soc handle
* @hw_desc_addr: hardware descriptor address
*
* Return: 0 - success/ non-zero failure
*/
static inline
uint32_t hal_rx_desc_is_first_msdu(void *hw_desc_addr)
uint32_t hal_rx_desc_is_first_msdu(hal_soc_handle_t hal_soc_hdl,
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;
struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
return hal_soc->ops->hal_rx_desc_is_first_msdu(hw_desc_addr);
}
static inline
@@ -3433,11 +3441,12 @@ HAL_RX_DESC_GET_80211_HDR(void *hw_desc_addr) {
#ifdef NO_RX_PKT_HDR_TLV
static inline
bool HAL_IS_DECAP_FORMAT_RAW(uint8_t *rx_tlv_hdr)
bool HAL_IS_DECAP_FORMAT_RAW(hal_soc_handle_t hal_soc_hdl,
uint8_t *rx_tlv_hdr)
{
uint8_t decap_format;
if (hal_rx_desc_is_first_msdu(rx_tlv_hdr)) {
if (hal_rx_desc_is_first_msdu(hal_soc_hdl, 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;
@@ -3447,7 +3456,8 @@ bool HAL_IS_DECAP_FORMAT_RAW(uint8_t *rx_tlv_hdr)
}
#else
static inline
bool HAL_IS_DECAP_FORMAT_RAW(uint8_t *rx_tlv_hdr)
bool HAL_IS_DECAP_FORMAT_RAW(hal_soc_handle_t hal_soc_hdl,
uint8_t *rx_tlv_hdr)
{
return true;
}

View File

@@ -181,6 +181,22 @@ uint16_t hal_rx_msdu_end_sa_idx_get_6290(uint8_t *buf)
return sa_idx;
}
/**
* hal_rx_desc_is_first_msdu_6290() - Check if first msdu
*
* @hal_soc_hdl: hal_soc handle
* @hw_desc_addr: hardware descriptor address
*
* Return: 0 - success/ non-zero failure
*/
static uint32_t hal_rx_desc_is_first_msdu_6290(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);
}
struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = {
/* init and setup */
hal_srng_dst_hw_init_generic,
@@ -226,6 +242,7 @@ struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = {
hal_rx_msdu_end_da_is_mcbc_get_6290,
hal_rx_msdu_end_sa_is_valid_get_6290,
hal_rx_msdu_end_sa_idx_get_6290,
hal_rx_desc_is_first_msdu_6290,
};
struct hal_hw_srng_config hw_srng_table_6290[] = {

View File

@@ -180,6 +180,23 @@ uint16_t hal_rx_msdu_end_sa_idx_get_6390(uint8_t *buf)
return sa_idx;
}
/**
* hal_rx_desc_is_first_msdu_6390() - Check if first msdu
*
* @hal_soc_hdl: hal_soc handle
* @hw_desc_addr: hardware descriptor address
*
* Return: 0 - success/ non-zero failure
*/
static uint32_t hal_rx_desc_is_first_msdu_6390(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);
}
struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = {
/* init and setup */
hal_srng_dst_hw_init_generic,
@@ -225,6 +242,7 @@ struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = {
hal_rx_msdu_end_da_is_mcbc_get_6390,
hal_rx_msdu_end_sa_is_valid_get_6390,
hal_rx_msdu_end_sa_idx_get_6390,
hal_rx_desc_is_first_msdu_6390,
};
struct hal_hw_srng_config hw_srng_table_6390[] = {

View File

@@ -87,9 +87,26 @@ uint16_t hal_rx_msdu_end_sa_idx_get_6490(uint8_t *buf)
return sa_idx;
}
/**
* hal_rx_desc_is_first_msdu_6490() - Check if first msdu
*
* @hal_soc_hdl: hal_soc handle
* @hw_desc_addr: hardware descriptor address
*
* Return: 0 - success/ non-zero failure
*/
static uint32_t hal_rx_desc_is_first_msdu_6490(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_10, FIRST_MSDU);
}
struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = {
/* rx */
hal_rx_get_rx_fragment_number_6490,
hal_rx_msdu_end_da_is_mcbc_get_6490,
hal_rx_msdu_end_sa_is_valid_get_6490,
hal_rx_desc_is_first_msdu_6490,
};

View File

@@ -176,6 +176,21 @@ static uint16_t hal_rx_msdu_end_sa_idx_get_8074v1(uint8_t *buf)
return sa_idx;
}
/**
* hal_rx_desc_is_first_msdu_8074v1() - Check if first msdu
*
* @hal_soc_hdl: hal_soc handle
* @hw_desc_addr: hardware descriptor address
*
* Return: 0 - success/ non-zero failure
*/
static uint32_t hal_rx_desc_is_first_msdu_8074v1(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);
}
struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = {
/* init and setup */
@@ -222,6 +237,7 @@ struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = {
hal_rx_msdu_end_da_is_mcbc_get_8074v1,
hal_rx_msdu_end_sa_is_valid_get_8074v1,
hal_rx_msdu_end_sa_idx_get_8074v1,
hal_rx_desc_is_first_msdu_8074v1,
};
struct hal_hw_srng_config hw_srng_table_8074[] = {

View File

@@ -176,6 +176,22 @@ static uint16_t hal_rx_msdu_end_sa_idx_get_8074v2(uint8_t *buf)
return sa_idx;
}
/**
* hal_rx_desc_is_first_msdu_8074v2() - Check if first msdu
*
* @hal_soc_hdl: hal_soc handle
* @hw_desc_addr: hardware descriptor address
*
* Return: 0 - success/ non-zero failure
*/
static uint32_t hal_rx_desc_is_first_msdu_8074v2(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);
}
struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = {
/* init and setup */
@@ -222,6 +238,7 @@ struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = {
hal_rx_msdu_end_da_is_mcbc_get_8074v2,
hal_rx_msdu_end_sa_is_valid_get_8074v2,
hal_rx_msdu_end_sa_idx_get_8074v2,
hal_rx_desc_is_first_msdu_8074v2,
};
struct hal_hw_srng_config hw_srng_table_8074v2[] = {

View File

@@ -185,6 +185,22 @@ static uint16_t hal_rx_msdu_end_sa_idx_get_9000(uint8_t *buf)
return sa_idx;
}
/**
* hal_rx_desc_is_first_msdu_9000() - Check if first msdu
*
* @hal_soc_hdl: hal_soc handle
* @hw_desc_addr: hardware descriptor address
*
* Return: 0 - success/ non-zero failure
*/
static uint32_t hal_rx_desc_is_first_msdu_9000(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);
}
struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = {
/* init and setup */
@@ -231,6 +247,7 @@ struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = {
hal_rx_msdu_end_da_is_mcbc_get_9000,
hal_rx_msdu_end_sa_is_valid_get_9000,
hal_rx_msdu_end_sa_idx_get_9000,
hal_rx_desc_is_first_msdu_9000,
};
struct hal_hw_srng_config hw_srng_table_9000[] = {