From c1a4c8b4fc6acdf2613269b487d8c0f4f26f61d3 Mon Sep 17 00:00:00 2001 From: Venkata Sharath Chandra Manchala Date: Fri, 20 Sep 2019 17:42:07 -0700 Subject: [PATCH] qcacmn: Add hal_rx_encryption_info_valid API Implement hal_rx_encryption_info API based on the chipset as the macro to retrieve sa_idx value is chipset dependent. Change-Id: I0c48800dfa5628898c53f7a9271e517b6bfa3da7 CRs-Fixed: 2522133 --- dp/wifi3.0/dp_rx_err.c | 2 +- hal/wifi3.0/hal_internal.h | 1 + hal/wifi3.0/hal_rx.h | 25 +++++++++---------------- hal/wifi3.0/qca6290/hal_6290.c | 18 ++++++++++++++++++ hal/wifi3.0/qca6290/hal_6290_rx.h | 6 ++++++ hal/wifi3.0/qca6390/hal_6390.c | 18 ++++++++++++++++++ hal/wifi3.0/qca6390/hal_6390_rx.h | 6 ++++++ hal/wifi3.0/qca6490/hal_6490.c | 18 ++++++++++++++++++ hal/wifi3.0/qca6490/hal_6490_rx.h | 6 ++++++ hal/wifi3.0/qca8074v1/hal_8074v1.c | 18 ++++++++++++++++++ hal/wifi3.0/qca8074v1/hal_8074v1_rx.h | 6 ++++++ hal/wifi3.0/qca8074v2/hal_8074v2.c | 18 ++++++++++++++++++ hal/wifi3.0/qca8074v2/hal_8074v2_rx.h | 6 ++++++ hal/wifi3.0/qcn9000/hal_9000.c | 18 ++++++++++++++++++ 14 files changed, 149 insertions(+), 17 deletions(-) diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index f7d097bfed..d48d10002c 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -299,7 +299,7 @@ dp_rx_msdus_drop(struct dp_soc *soc, hal_ring_desc_t ring_desc, "Packet received with PN error for tid :%d", tid); rx_tlv_hdr = qdf_nbuf_data(rx_desc->nbuf); - if (hal_rx_encryption_info_valid(rx_tlv_hdr)) + if (hal_rx_encryption_info_valid(soc->hal_soc, rx_tlv_hdr)) hal_rx_print_pn(rx_tlv_hdr); /* Just free the buffers */ diff --git a/hal/wifi3.0/hal_internal.h b/hal/wifi3.0/hal_internal.h index 976b178ef3..60d4709601 100644 --- a/hal/wifi3.0/hal_internal.h +++ b/hal/wifi3.0/hal_internal.h @@ -386,6 +386,7 @@ struct hal_hw_txrx_ops { uint16_t (*hal_rx_msdu_end_sa_idx_get)(uint8_t *buf); uint32_t (*hal_rx_desc_is_first_msdu)(void *hw_desc_addr); uint32_t (*hal_rx_msdu_end_l3_hdr_padding_get)(uint8_t *buf); + uint32_t (*hal_rx_encryption_info_valid)(uint8_t *buf); }; /** diff --git a/hal/wifi3.0/hal_rx.h b/hal/wifi3.0/hal_rx.h index c07b36a81a..708a6ab970 100644 --- a/hal/wifi3.0/hal_rx.h +++ b/hal/wifi3.0/hal_rx.h @@ -441,12 +441,6 @@ enum hal_rx_ret_buf_manager { RX_MPDU_INFO_3_ENCRYPT_TYPE_MASK, \ RX_MPDU_INFO_3_ENCRYPT_TYPE_LSB)) -#define HAL_RX_MPDU_ENCRYPTION_INFO_VALID(_rx_mpdu_info) \ - (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ - RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_OFFSET)), \ - RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_MASK, \ - RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_LSB)) - #define HAL_RX_FLD_SET(_ptr, _wrd, _field, _val) \ (*(uint32_t *)(((uint8_t *)_ptr) + \ _wrd ## _ ## _field ## _OFFSET) |= \ @@ -681,21 +675,20 @@ static inline uint8_t } /* - * @ hal_rx_encryption_info_valid: Returns encryption type. + * hal_rx_encryption_info_valid(): Returns encryption type. * - * @ buf: rx_tlv_hdr of the received packet - * @ Return: encryption type + * @hal_soc_hdl: hal soc handle + * @buf: rx_tlv_hdr of the received packet + * + * Return: encryption type */ static inline uint32_t -hal_rx_encryption_info_valid(uint8_t *buf) +hal_rx_encryption_info_valid(hal_soc_handle_t hal_soc_hdl, uint8_t *buf) { - struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; - struct rx_mpdu_start *mpdu_start = - &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start; - struct rx_mpdu_info *mpdu_info = &(mpdu_start->rx_mpdu_info_details); - uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info); + struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl; + + return hal_soc->ops->hal_rx_encryption_info_valid(buf); - return encryption_info; } /* diff --git a/hal/wifi3.0/qca6290/hal_6290.c b/hal/wifi3.0/qca6290/hal_6290.c index 5b6a069862..e68e73fa50 100644 --- a/hal/wifi3.0/qca6290/hal_6290.c +++ b/hal/wifi3.0/qca6290/hal_6290.c @@ -215,6 +215,23 @@ static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_6290(uint8_t *buf) return l3_header_padding; } +/* + * @ hal_rx_encryption_info_valid_6290: Returns encryption type. + * + * @ buf: rx_tlv_hdr of the received packet + * @ Return: encryption type + */ +static uint32_t hal_rx_encryption_info_valid_6290(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + struct rx_mpdu_start *mpdu_start = + &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start; + struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details; + uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info); + + return encryption_info; +} + struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = { /* init and setup */ hal_srng_dst_hw_init_generic, @@ -262,6 +279,7 @@ struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = { hal_rx_msdu_end_sa_idx_get_6290, hal_rx_desc_is_first_msdu_6290, hal_rx_msdu_end_l3_hdr_padding_get_6290, + hal_rx_encryption_info_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 beda69a9f3..ff38a72b38 100644 --- a/hal/wifi3.0/qca6290/hal_6290_rx.h +++ b/hal/wifi3.0/qca6290/hal_6290_rx.h @@ -65,6 +65,12 @@ RX_MSDU_END_5_L3_HEADER_PADDING_MASK, \ RX_MSDU_END_5_L3_HEADER_PADDING_LSB)) +#define HAL_RX_MPDU_ENCRYPTION_INFO_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_OFFSET)), \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_MASK, \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_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 64bbf61bdf..71309d15a0 100644 --- a/hal/wifi3.0/qca6390/hal_6390.c +++ b/hal/wifi3.0/qca6390/hal_6390.c @@ -215,6 +215,23 @@ static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_6390(uint8_t *buf) return l3_header_padding; } +/* + * @ hal_rx_encryption_info_valid_6390: Returns encryption type. + * + * @ buf: rx_tlv_hdr of the received packet + * @ Return: encryption type + */ +static uint32_t hal_rx_encryption_info_valid_6390(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + struct rx_mpdu_start *mpdu_start = + &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start; + struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details; + uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info); + + return encryption_info; +} + struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = { /* init and setup */ hal_srng_dst_hw_init_generic, @@ -262,6 +279,7 @@ struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = { hal_rx_msdu_end_sa_idx_get_6390, hal_rx_desc_is_first_msdu_6390, hal_rx_msdu_end_l3_hdr_padding_get_6390, + hal_rx_encryption_info_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 2d0a564f6a..cd8fb0a4cc 100644 --- a/hal/wifi3.0/qca6390/hal_6390_rx.h +++ b/hal/wifi3.0/qca6390/hal_6390_rx.h @@ -65,6 +65,12 @@ RX_MSDU_END_5_L3_HEADER_PADDING_MASK, \ RX_MSDU_END_5_L3_HEADER_PADDING_LSB)) +#define HAL_RX_MPDU_ENCRYPTION_INFO_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_OFFSET)), \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_MASK, \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_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 16bfc583da..e096d51c6f 100644 --- a/hal/wifi3.0/qca6490/hal_6490.c +++ b/hal/wifi3.0/qca6490/hal_6490.c @@ -121,6 +121,23 @@ static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_6490(uint8_t *buf) return l3_header_padding; } +/* + * @ hal_rx_encryption_info_valid_6490: Returns encryption type. + * + * @ buf: rx_tlv_hdr of the received packet + * @ Return: encryption type + */ +static uint32_t hal_rx_encryption_info_valid_6490(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + struct rx_mpdu_start *mpdu_start = + &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start; + struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details; + uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info); + + return encryption_info; +} + struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = { /* rx */ hal_rx_get_rx_fragment_number_6490, @@ -128,4 +145,5 @@ struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = { hal_rx_msdu_end_sa_is_valid_get_6490, hal_rx_desc_is_first_msdu_6490, hal_rx_msdu_end_l3_hdr_padding_get_6490, + hal_rx_encryption_info_valid_6490, }; diff --git a/hal/wifi3.0/qca6490/hal_6490_rx.h b/hal/wifi3.0/qca6490/hal_6490_rx.h index d638e98545..498a2a5b99 100644 --- a/hal/wifi3.0/qca6490/hal_6490_rx.h +++ b/hal/wifi3.0/qca6490/hal_6490_rx.h @@ -45,3 +45,9 @@ RX_MSDU_END_10_L3_HEADER_PADDING_OFFSET)), \ RX_MSDU_END_10_L3_HEADER_PADDING_MASK, \ RX_MSDU_END_10_L3_HEADER_PADDING_LSB)) + +#define HAL_RX_MPDU_ENCRYPTION_INFO_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_11_FRAME_ENCRYPTION_INFO_VALID_OFFSET)), \ + RX_MPDU_INFO_11_FRAME_ENCRYPTION_INFO_VALID_MASK, \ + RX_MPDU_INFO_11_FRAME_ENCRYPTION_INFO_VALID_LSB)) diff --git a/hal/wifi3.0/qca8074v1/hal_8074v1.c b/hal/wifi3.0/qca8074v1/hal_8074v1.c index 5eb39271f7..c22b555c15 100644 --- a/hal/wifi3.0/qca8074v1/hal_8074v1.c +++ b/hal/wifi3.0/qca8074v1/hal_8074v1.c @@ -210,6 +210,23 @@ static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_8074v1(uint8_t *buf) return l3_header_padding; } +/* + * @ hal_rx_encryption_info_valid_8074v1: Returns encryption type. + * + * @ buf: rx_tlv_hdr of the received packet + * @ Return: encryption type + */ +static uint32_t hal_rx_encryption_info_valid_8074v1(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + struct rx_mpdu_start *mpdu_start = + &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start; + struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details; + uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info); + + return encryption_info; +} + struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = { /* init and setup */ @@ -258,6 +275,7 @@ struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = { hal_rx_msdu_end_sa_idx_get_8074v1, hal_rx_desc_is_first_msdu_8074v1, hal_rx_msdu_end_l3_hdr_padding_get_8074v1, + hal_rx_encryption_info_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 164a51b937..e7f2084ade 100644 --- a/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h +++ b/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h @@ -53,6 +53,12 @@ RX_MSDU_END_5_L3_HEADER_PADDING_OFFSET)), \ RX_MSDU_END_5_L3_HEADER_PADDING_MASK, \ RX_MSDU_END_5_L3_HEADER_PADDING_LSB)) + +#define HAL_RX_MPDU_ENCRYPTION_INFO_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_OFFSET)), \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_MASK, \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_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 6e273cd89e..77268c1d7e 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2.c +++ b/hal/wifi3.0/qca8074v2/hal_8074v2.c @@ -210,6 +210,23 @@ static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_8074v2(uint8_t *buf) return l3_header_padding; } +/* + * @ hal_rx_encryption_info_valid_8074v2: Returns encryption type. + * + * @ buf: rx_tlv_hdr of the received packet + * @ Return: encryption type + */ +static uint32_t hal_rx_encryption_info_valid_8074v2(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + struct rx_mpdu_start *mpdu_start = + &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start; + struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details; + uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info); + + return encryption_info; +} + struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = { /* init and setup */ @@ -258,6 +275,7 @@ struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = { hal_rx_msdu_end_sa_idx_get_8074v2, hal_rx_desc_is_first_msdu_8074v2, hal_rx_msdu_end_l3_hdr_padding_get_8074v2, + hal_rx_encryption_info_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 9dd99b4d82..c9c5a52ff3 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h +++ b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h @@ -57,6 +57,12 @@ RX_MSDU_END_5_L3_HEADER_PADDING_MASK, \ RX_MSDU_END_5_L3_HEADER_PADDING_LSB)) +#define HAL_RX_MPDU_ENCRYPTION_INFO_VALID(_rx_mpdu_info) \ + (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_OFFSET)), \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_VALID_MASK, \ + RX_MPDU_INFO_2_FRAME_ENCRYPTION_INFO_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/qcn9000/hal_9000.c b/hal/wifi3.0/qcn9000/hal_9000.c index 3db883d6c8..dcaa8e1e3a 100644 --- a/hal/wifi3.0/qcn9000/hal_9000.c +++ b/hal/wifi3.0/qcn9000/hal_9000.c @@ -219,6 +219,23 @@ static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_9000(uint8_t *buf) return l3_header_padding; } +/** + * @ hal_rx_encryption_info_valid_9000: Returns encryption type. + * + * @ buf: rx_tlv_hdr of the received packet + * @ Return: encryption type + */ +inline uint32_t hal_rx_encryption_info_valid_9000(uint8_t *buf) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + struct rx_mpdu_start *mpdu_start = + &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start; + struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details; + uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info); + + return encryption_info; +} + struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = { /* init and setup */ @@ -267,6 +284,7 @@ struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = { hal_rx_msdu_end_sa_idx_get_9000, hal_rx_desc_is_first_msdu_9000, hal_rx_msdu_end_l3_hdr_padding_get_9000, + hal_rx_encryption_info_valid_9000, }; struct hal_hw_srng_config hw_srng_table_9000[] = {