diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 61c5463604..f001937583 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -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; diff --git a/dp/wifi3.0/dp_rx_mon_dest.c b/dp/wifi3.0/dp_rx_mon_dest.c index 409e1f6b62..9226f83f1c 100644 --- a/dp/wifi3.0/dp_rx_mon_dest.c +++ b/dp/wifi3.0/dp_rx_mon_dest.c @@ -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)); diff --git a/hal/wifi3.0/hal_internal.h b/hal/wifi3.0/hal_internal.h index aa786d5a42..63192059c6 100644 --- a/hal/wifi3.0/hal_internal.h +++ b/hal/wifi3.0/hal_internal.h @@ -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); }; /** diff --git a/hal/wifi3.0/hal_rx.h b/hal/wifi3.0/hal_rx.h index 7ecfcd2b52..ce835c9f62 100644 --- a/hal/wifi3.0/hal_rx.h +++ b/hal/wifi3.0/hal_rx.h @@ -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; } diff --git a/hal/wifi3.0/qca6290/hal_6290.c b/hal/wifi3.0/qca6290/hal_6290.c index 6cf7841664..f6b90c5c49 100644 --- a/hal/wifi3.0/qca6290/hal_6290.c +++ b/hal/wifi3.0/qca6290/hal_6290.c @@ -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[] = { diff --git a/hal/wifi3.0/qca6390/hal_6390.c b/hal/wifi3.0/qca6390/hal_6390.c index 2cce376635..a79a281d21 100644 --- a/hal/wifi3.0/qca6390/hal_6390.c +++ b/hal/wifi3.0/qca6390/hal_6390.c @@ -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[] = { diff --git a/hal/wifi3.0/qca6490/hal_6490.c b/hal/wifi3.0/qca6490/hal_6490.c index b4d843e1b2..f19265a8fe 100644 --- a/hal/wifi3.0/qca6490/hal_6490.c +++ b/hal/wifi3.0/qca6490/hal_6490.c @@ -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, }; diff --git a/hal/wifi3.0/qca8074v1/hal_8074v1.c b/hal/wifi3.0/qca8074v1/hal_8074v1.c index 3820e93baf..914fdb2cdf 100644 --- a/hal/wifi3.0/qca8074v1/hal_8074v1.c +++ b/hal/wifi3.0/qca8074v1/hal_8074v1.c @@ -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[] = { diff --git a/hal/wifi3.0/qca8074v2/hal_8074v2.c b/hal/wifi3.0/qca8074v2/hal_8074v2.c index 9394ee269a..7b7b80af5a 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2.c +++ b/hal/wifi3.0/qca8074v2/hal_8074v2.c @@ -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[] = { diff --git a/hal/wifi3.0/qcn9000/hal_9000.c b/hal/wifi3.0/qcn9000/hal_9000.c index f3701fcd46..f0fc8b7eb4 100644 --- a/hal/wifi3.0/qcn9000/hal_9000.c +++ b/hal/wifi3.0/qcn9000/hal_9000.c @@ -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[] = {