From 25ba7b8c4fcf83496b701e937486a265c76dc354 Mon Sep 17 00:00:00 2001 From: Venkata Sharath Chandra Manchala Date: Sat, 21 Sep 2019 13:31:30 -0700 Subject: [PATCH] qcacmn: Add hal_rx_get_mpdu_frame_control_valid API Implement hal_rx_get_mpdu_frame_control_valid API based on the chipset as the macro to retrieve frame control valid value is chipset dependent. Change-Id: I49d16ae44b2e9567ff746d2088058f0c1025ea40 CRs-Fixed: 2522133 --- dp/wifi3.0/dp_rx_defrag.c | 16 +++++++++++----- hal/wifi3.0/hal_internal.h | 1 + hal/wifi3.0/hal_rx.h | 20 ++++++-------------- hal/wifi3.0/qca6290/hal_6290.c | 16 ++++++++++++++++ hal/wifi3.0/qca6290/hal_6290_rx.h | 6 ++++++ hal/wifi3.0/qca6390/hal_6390.c | 15 +++++++++++++++ hal/wifi3.0/qca6390/hal_6390_rx.h | 6 ++++++ hal/wifi3.0/qca6490/hal_6490.c | 16 ++++++++++++++++ hal/wifi3.0/qca6490/hal_6490_rx.h | 6 ++++++ hal/wifi3.0/qca8074v1/hal_8074v1.c | 16 ++++++++++++++++ hal/wifi3.0/qca8074v1/hal_8074v1_rx.h | 6 ++++++ hal/wifi3.0/qca8074v2/hal_8074v2.c | 16 ++++++++++++++++ hal/wifi3.0/qca8074v2/hal_8074v2_rx.h | 6 ++++++ hal/wifi3.0/qcn9000/hal_9000.c | 16 ++++++++++++++++ 14 files changed, 143 insertions(+), 19 deletions(-) diff --git a/dp/wifi3.0/dp_rx_defrag.c b/dp/wifi3.0/dp_rx_defrag.c index 742f0e628f..b9b150d667 100644 --- a/dp/wifi3.0/dp_rx_defrag.c +++ b/dp/wifi3.0/dp_rx_defrag.c @@ -533,7 +533,9 @@ static uint16_t dp_rx_defrag_hdrsize(struct dp_soc *soc, qdf_nbuf_t nbuf) to_ds = hal_rx_mpdu_get_to_ds(soc->hal_soc, rx_tlv_hdr); fr_ds = hal_rx_mpdu_get_fr_ds(soc->hal_soc, rx_tlv_hdr); - frm_ctrl_valid = hal_rx_get_mpdu_frame_control_valid(rx_tlv_hdr); + frm_ctrl_valid = + hal_rx_get_mpdu_frame_control_valid(soc->hal_soc, + rx_tlv_hdr); frm_ctrl_field = hal_rx_get_frame_ctrl_field(rx_tlv_hdr); if (to_ds && fr_ds) @@ -894,6 +896,7 @@ static void dp_rx_defrag_err(struct dp_vdev *vdev, qdf_nbuf_t nbuf) /* * dp_rx_defrag_nwifi_to_8023(): Transcap 802.11 to 802.3 + * @soc: dp soc handle * @nbuf: Pointer to the fragment buffer * @hdrsize: Size of headers * @@ -902,7 +905,8 @@ static void dp_rx_defrag_err(struct dp_vdev *vdev, qdf_nbuf_t nbuf) * Returns: None */ static void -dp_rx_defrag_nwifi_to_8023(qdf_nbuf_t nbuf, uint16_t hdrsize) +dp_rx_defrag_nwifi_to_8023(struct dp_soc *soc, + qdf_nbuf_t nbuf, uint16_t hdrsize) { struct llc_snap_hdr_t *llchdr; struct ethernet_hdr_t *eth_hdr; @@ -930,7 +934,8 @@ dp_rx_defrag_nwifi_to_8023(qdf_nbuf_t nbuf, uint16_t hdrsize) eth_hdr = (struct ethernet_hdr_t *)(qdf_nbuf_data(nbuf)); - if (hal_rx_get_mpdu_frame_control_valid(rx_desc_info)) + if (hal_rx_get_mpdu_frame_control_valid(soc->hal_soc, + rx_desc_info)) fc = hal_rx_get_frame_ctrl_field(rx_desc_info); dp_debug("%s: frame control type: 0x%x", __func__, fc); @@ -1309,7 +1314,7 @@ static QDF_STATUS dp_rx_defrag(struct dp_peer *peer, unsigned tid, } /* Convert the header to 802.3 header */ - dp_rx_defrag_nwifi_to_8023(frag_list_head, hdr_space); + dp_rx_defrag_nwifi_to_8023(soc, frag_list_head, hdr_space); dp_rx_construct_fraglist(peer, frag_list_head, hdr_space); return QDF_STATUS_SUCCESS; @@ -1453,7 +1458,8 @@ dp_rx_defrag_store_fragment(struct dp_soc *soc, } mpdu_frame_control_valid = - hal_rx_get_mpdu_frame_control_valid(rx_desc->rx_buf_start); + hal_rx_get_mpdu_frame_control_valid(soc->hal_soc, + rx_desc->rx_buf_start); /* Invalid frame control field */ if (!mpdu_frame_control_valid) { diff --git a/hal/wifi3.0/hal_internal.h b/hal/wifi3.0/hal_internal.h index 98dbad0c43..6e043db60e 100644 --- a/hal/wifi3.0/hal_internal.h +++ b/hal/wifi3.0/hal_internal.h @@ -395,6 +395,7 @@ struct hal_hw_txrx_ops { uint32_t (*hal_rx_mpdu_start_sw_peer_id_get)(uint8_t *buf); uint32_t (*hal_rx_mpdu_get_to_ds)(uint8_t *buf); uint32_t (*hal_rx_mpdu_get_fr_ds)(uint8_t *buf); + uint8_t (*hal_rx_get_mpdu_frame_control_valid)(uint8_t *buf); }; /** diff --git a/hal/wifi3.0/hal_rx.h b/hal/wifi3.0/hal_rx.h index 7a3214d793..e64a4b66e5 100644 --- a/hal/wifi3.0/hal_rx.h +++ b/hal/wifi3.0/hal_rx.h @@ -2822,28 +2822,20 @@ uint8_t hal_rx_get_mpdu_sequence_control_valid(uint8_t *buf) return seq_ctrl_valid; } -#define HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(_rx_mpdu_info) \ - (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ - RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_OFFSET)), \ - RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_MASK, \ - RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_LSB)) /* * hal_rx_get_mpdu_frame_control_valid(): Retrieves mpdu frame control valid - * + * @hal_soc_hdl: hal soc handle * @nbuf: Network buffer + * * Returns: value of frame control valid field */ static inline -uint8_t hal_rx_get_mpdu_frame_control_valid(uint8_t *buf) +uint8_t hal_rx_get_mpdu_frame_control_valid(hal_soc_handle_t hal_soc_hdl, + uint8_t *buf) { - struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf); - struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs); - uint8_t frm_ctrl_valid = 0; + struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl; - frm_ctrl_valid = - HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info); - - return frm_ctrl_valid; + return hal_soc->ops->hal_rx_get_mpdu_frame_control_valid(buf); } /** diff --git a/hal/wifi3.0/qca6290/hal_6290.c b/hal/wifi3.0/qca6290/hal_6290.c index b97f0cbd8c..c835c7af3a 100644 --- a/hal/wifi3.0/qca6290/hal_6290.c +++ b/hal/wifi3.0/qca6290/hal_6290.c @@ -378,6 +378,21 @@ static uint32_t hal_rx_mpdu_get_fr_ds_6290(uint8_t *buf) return HAL_RX_MPDU_GET_FROMDS(mpdu_info); } + +/* + * hal_rx_get_mpdu_frame_control_valid_6290(): Retrieves mpdu frame + * control valid + * + * @nbuf: Network buffer + * Returns: value of frame control valid field + */ +static uint8_t hal_rx_get_mpdu_frame_control_valid_6290(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf); + struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs); + + return HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info); +} struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = { /* init and setup */ hal_srng_dst_hw_init_generic, @@ -434,6 +449,7 @@ struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = { hal_rx_mpdu_start_sw_peer_id_get_6290, hal_rx_mpdu_get_to_ds_6290, hal_rx_mpdu_get_fr_ds_6290, + hal_rx_get_mpdu_frame_control_valid_6290, }; struct hal_hw_srng_config hw_srng_table_6290[] = { diff --git a/hal/wifi3.0/qca6290/hal_6290_rx.h b/hal/wifi3.0/qca6290/hal_6290_rx.h index 2fe8132c43..54a7cd9399 100644 --- a/hal/wifi3.0/qca6290/hal_6290_rx.h +++ b/hal/wifi3.0/qca6290/hal_6290_rx.h @@ -137,6 +137,12 @@ RX_MPDU_INFO_2_FR_DS_MASK, \ RX_MPDU_INFO_2_FR_DS_LSB)) +#define HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_OFFSET)), \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_MASK, \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_LSB)) + #if defined(QCA_WIFI_QCA6290_11AX) #define HAL_RX_MSDU_START_MIMO_SS_BITMAP(_rx_msdu_start)\ (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_msdu_start),\ diff --git a/hal/wifi3.0/qca6390/hal_6390.c b/hal/wifi3.0/qca6390/hal_6390.c index 1c36a888dc..f98aafccaf 100644 --- a/hal/wifi3.0/qca6390/hal_6390.c +++ b/hal/wifi3.0/qca6390/hal_6390.c @@ -377,6 +377,20 @@ static uint32_t hal_rx_mpdu_get_fr_ds_6390(uint8_t *buf) return HAL_RX_MPDU_GET_FROMDS(mpdu_info); } +/* + * hal_rx_get_mpdu_frame_control_valid_6390(): Retrieves mpdu + * frame control valid + * + * @nbuf: Network buffer + * Returns: value of frame control valid field + */ +static uint8_t hal_rx_get_mpdu_frame_control_valid_6390(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf); + struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs); + + return HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info); +} struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = { /* init and setup */ hal_srng_dst_hw_init_generic, @@ -433,6 +447,7 @@ struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = { hal_rx_mpdu_start_sw_peer_id_get_6390, hal_rx_mpdu_get_to_ds_6390, hal_rx_mpdu_get_fr_ds_6390, + hal_rx_get_mpdu_frame_control_valid_6390, }; struct hal_hw_srng_config hw_srng_table_6390[] = { diff --git a/hal/wifi3.0/qca6390/hal_6390_rx.h b/hal/wifi3.0/qca6390/hal_6390_rx.h index 4c5269b4bf..3cc5a48b5a 100644 --- a/hal/wifi3.0/qca6390/hal_6390_rx.h +++ b/hal/wifi3.0/qca6390/hal_6390_rx.h @@ -137,6 +137,12 @@ RX_MPDU_INFO_2_FR_DS_MASK, \ RX_MPDU_INFO_2_FR_DS_LSB)) +#define HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_OFFSET)), \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_MASK, \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_LSB)) + #define HAL_RX_MSDU_START_MIMO_SS_BITMAP(_rx_msdu_start)\ (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_msdu_start),\ RX_MSDU_START_5_MIMO_SS_BITMAP_OFFSET)), \ diff --git a/hal/wifi3.0/qca6490/hal_6490.c b/hal/wifi3.0/qca6490/hal_6490.c index aeb91df2c5..ab039d0286 100644 --- a/hal/wifi3.0/qca6490/hal_6490.c +++ b/hal/wifi3.0/qca6490/hal_6490.c @@ -283,6 +283,21 @@ static uint32_t hal_rx_mpdu_get_fr_ds_6490(uint8_t *buf) return HAL_RX_MPDU_GET_FROMDS(mpdu_info); } +/* + * hal_rx_get_mpdu_frame_control_valid_6490(): Retrieves mpdu + * frame control valid + * + * @nbuf: Network buffer + * Returns: value of frame control valid field + */ +static uint8_t hal_rx_get_mpdu_frame_control_valid_6490(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf); + struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs); + + return HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info); +} + struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = { /* rx */ hal_rx_get_rx_fragment_number_6490, @@ -299,4 +314,5 @@ struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = { hal_rx_mpdu_start_sw_peer_id_get_6490, hal_rx_mpdu_get_to_ds_6490, hal_rx_mpdu_get_fr_ds_6490, + hal_rx_get_mpdu_frame_control_valid_6490, }; diff --git a/hal/wifi3.0/qca6490/hal_6490_rx.h b/hal/wifi3.0/qca6490/hal_6490_rx.h index bb056a208e..a164c6e7e3 100644 --- a/hal/wifi3.0/qca6490/hal_6490_rx.h +++ b/hal/wifi3.0/qca6490/hal_6490_rx.h @@ -117,3 +117,9 @@ RX_MPDU_INFO_11_FR_DS_OFFSET)), \ RX_MPDU_INFO_11_FR_DS_MASK, \ RX_MPDU_INFO_11_FR_DS_LSB)) + +#define HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_11_MPDU_FRAME_CONTROL_VALID_OFFSET)), \ + RX_MPDU_INFO_11_MPDU_FRAME_CONTROL_VALID_MASK, \ + RX_MPDU_INFO_11_MPDU_FRAME_CONTROL_VALID_LSB)) diff --git a/hal/wifi3.0/qca8074v1/hal_8074v1.c b/hal/wifi3.0/qca8074v1/hal_8074v1.c index 91cdaa1b71..6ac6af5c60 100644 --- a/hal/wifi3.0/qca8074v1/hal_8074v1.c +++ b/hal/wifi3.0/qca8074v1/hal_8074v1.c @@ -373,6 +373,21 @@ static uint32_t hal_rx_mpdu_get_fr_ds_8074v1(uint8_t *buf) return HAL_RX_MPDU_GET_FROMDS(mpdu_info); } + +/* + * hal_rx_get_mpdu_frame_control_valid_8074v1(): Retrieves mpdu + * frame control valid + * + * @nbuf: Network buffer + * Returns: value of frame control valid field + */ +static uint8_t hal_rx_get_mpdu_frame_control_valid_8074v1(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf); + struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs); + + return HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info); +} struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = { /* init and setup */ @@ -430,6 +445,7 @@ struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = { hal_rx_mpdu_start_sw_peer_id_get_8074v1, hal_rx_mpdu_get_to_ds_8074v1, hal_rx_mpdu_get_fr_ds_8074v1, + hal_rx_get_mpdu_frame_control_valid_8074v1, }; struct hal_hw_srng_config hw_srng_table_8074[] = { diff --git a/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h b/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h index 9aae7d9eb9..c2c6167ad1 100644 --- a/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h +++ b/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h @@ -125,6 +125,12 @@ RX_MPDU_INFO_2_FR_DS_OFFSET)), \ RX_MPDU_INFO_2_FR_DS_MASK, \ RX_MPDU_INFO_2_FR_DS_LSB)) + +#define HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_OFFSET)), \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_MASK, \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_LSB)) /* * hal_rx_msdu_start_nss_get_8074(): API to get the NSS * Interval from rx_msdu_start diff --git a/hal/wifi3.0/qca8074v2/hal_8074v2.c b/hal/wifi3.0/qca8074v2/hal_8074v2.c index fe410c76f8..1c14bbddbb 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2.c +++ b/hal/wifi3.0/qca8074v2/hal_8074v2.c @@ -371,6 +371,21 @@ static uint32_t hal_rx_mpdu_get_fr_ds_8074v2(uint8_t *buf) return HAL_RX_MPDU_GET_FROMDS(mpdu_info); } + +/* + * hal_rx_get_mpdu_frame_control_valid_8074v2(): Retrieves mpdu + * frame control valid + * + * @nbuf: Network buffer + * Returns: value of frame control valid field + */ +static uint8_t hal_rx_get_mpdu_frame_control_valid_8074v2(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf); + struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs); + + return HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info); +} struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = { /* init and setup */ @@ -428,6 +443,7 @@ struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = { hal_rx_mpdu_start_sw_peer_id_get_8074v2, hal_rx_mpdu_get_to_ds_8074v2, hal_rx_mpdu_get_fr_ds_8074v2, + hal_rx_get_mpdu_frame_control_valid_8074v2, }; struct hal_hw_srng_config hw_srng_table_8074v2[] = { diff --git a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h index 2e1d225783..c142a94609 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h +++ b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h @@ -134,6 +134,12 @@ RX_MPDU_INFO_2_FR_DS_OFFSET)), \ RX_MPDU_INFO_2_FR_DS_MASK, \ RX_MPDU_INFO_2_FR_DS_LSB)) + +#define HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_OFFSET)), \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_MASK, \ + RX_MPDU_INFO_2_MPDU_FRAME_CONTROL_VALID_LSB)) /* * hal_rx_msdu_start_nss_get_8074v2(): API to get the NSS * Interval from rx_msdu_start diff --git a/hal/wifi3.0/qcn9000/hal_9000.c b/hal/wifi3.0/qcn9000/hal_9000.c index 80767dfd68..d5f382a68b 100644 --- a/hal/wifi3.0/qcn9000/hal_9000.c +++ b/hal/wifi3.0/qcn9000/hal_9000.c @@ -381,6 +381,21 @@ static uint32_t hal_rx_mpdu_get_fr_ds_9000(uint8_t *buf) return HAL_RX_MPDU_GET_FROMDS(mpdu_info); } +/* + * hal_rx_get_mpdu_frame_control_valid_9000(): Retrieves mpdu + * frame control valid + * + * @nbuf: Network buffer + * Returns: value of frame control valid field + */ +static uint8_t hal_rx_get_mpdu_frame_control_valid_9000(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf); + struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs); + + return HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info); +} + struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = { /* init and setup */ @@ -438,6 +453,7 @@ struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = { hal_rx_mpdu_start_sw_peer_id_get_9000, hal_rx_mpdu_get_to_ds_9000, hal_rx_mpdu_get_fr_ds_9000, + hal_rx_get_mpdu_frame_control_valid_9000, }; struct hal_hw_srng_config hw_srng_table_9000[] = {