1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. 3*5113495bSYour Name * 4*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for any 5*5113495bSYour Name * purpose with or without fee is hereby granted, provided that the above 6*5113495bSYour Name * copyright notice and this permission notice appear in all copies. 7*5113495bSYour Name * 8*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9*5113495bSYour Name * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10*5113495bSYour Name * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11*5113495bSYour Name * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12*5113495bSYour Name * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13*5113495bSYour Name * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14*5113495bSYour Name * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15*5113495bSYour Name */ 16*5113495bSYour Name 17*5113495bSYour Name #include "hal_hw_headers.h" 18*5113495bSYour Name #include "hal_internal.h" 19*5113495bSYour Name #include "cdp_txrx_mon_struct.h" 20*5113495bSYour Name #include "qdf_trace.h" 21*5113495bSYour Name #include "sw_monitor_ring.h" 22*5113495bSYour Name #include "hal_rx.h" 23*5113495bSYour Name #include "hal_api_mon.h" 24*5113495bSYour Name 25*5113495bSYour Name #define HAL_RX_MSDU0_BUFFER_ADDR_LSB(link_desc_va) \ 26*5113495bSYour Name ((uint8_t *)(link_desc_va) + \ 27*5113495bSYour Name RX_MSDU_LINK_8_MSDU_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0_OFFSET) 28*5113495bSYour Name 29*5113495bSYour Name #define HAL_RX_MSDU_DESC_INFO_PTR_GET(msdu0) \ 30*5113495bSYour Name ((uint8_t *)(msdu0) + \ 31*5113495bSYour Name RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_OFFSET) 32*5113495bSYour Name 33*5113495bSYour Name #define HAL_ENT_MPDU_DESC_INFO(ent_ring_desc) \ 34*5113495bSYour Name ((uint8_t *)(ent_ring_desc) + \ 35*5113495bSYour Name RX_MPDU_DETAILS_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET) 36*5113495bSYour Name 37*5113495bSYour Name #define HAL_DST_MPDU_DESC_INFO(dst_ring_desc) \ 38*5113495bSYour Name ((uint8_t *)(dst_ring_desc) + \ 39*5113495bSYour Name REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET) 40*5113495bSYour Name 41*5113495bSYour Name #define HAL_RX_GET_FC_VALID(rx_mpdu_start) \ 42*5113495bSYour Name HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_11, MPDU_FRAME_CONTROL_VALID) 43*5113495bSYour Name 44*5113495bSYour Name #define HAL_RX_GET_TO_DS_FLAG(rx_mpdu_start) \ 45*5113495bSYour Name HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_11, TO_DS) 46*5113495bSYour Name 47*5113495bSYour Name #define HAL_RX_GET_MAC_ADDR1_VALID(rx_mpdu_start) \ 48*5113495bSYour Name HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_11, MAC_ADDR_AD1_VALID) 49*5113495bSYour Name 50*5113495bSYour Name #define HAL_RX_GET_MAC_ADDR2_VALID(rx_mpdu_start) \ 51*5113495bSYour Name HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_11, MAC_ADDR_AD2_VALID) 52*5113495bSYour Name 53*5113495bSYour Name #define HAL_RX_GET_FILTER_CATEGORY(rx_mpdu_start) \ 54*5113495bSYour Name HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, RXPCU_MPDU_FILTER_IN_CATEGORY) 55*5113495bSYour Name 56*5113495bSYour Name #define HAL_RX_GET_PPDU_ID(rx_mpdu_start) \ 57*5113495bSYour Name HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, PHY_PPDU_ID) 58*5113495bSYour Name 59*5113495bSYour Name #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ 60*5113495bSYour Name HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, SW_FRAME_GROUP_ID) 61*5113495bSYour Name 62*5113495bSYour Name #define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ 63*5113495bSYour Name HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_10, SW_PEER_ID) 64*5113495bSYour Name 65*5113495bSYour Name #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ 66*5113495bSYour Name do { \ 67*5113495bSYour Name (reg_val) &= \ 68*5113495bSYour Name ~(HWIO_REO_R0_GENERAL_ENABLE_AGING_LIST_ENABLE_BMSK | \ 69*5113495bSYour Name HWIO_REO_R0_GENERAL_ENABLE_AGING_FLUSH_ENABLE_BMSK); \ 70*5113495bSYour Name (reg_val) |= \ 71*5113495bSYour Name HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, \ 72*5113495bSYour Name AGING_LIST_ENABLE, 1) |\ 73*5113495bSYour Name HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, \ 74*5113495bSYour Name AGING_FLUSH_ENABLE, 1);\ 75*5113495bSYour Name HAL_REG_WRITE((soc), \ 76*5113495bSYour Name HWIO_REO_R0_GENERAL_ENABLE_ADDR( \ 77*5113495bSYour Name SEQ_WCSS_UMAC_REO_REG_OFFSET), \ 78*5113495bSYour Name (reg_val)); \ 79*5113495bSYour Name (reg_val) = \ 80*5113495bSYour Name HAL_REG_READ((soc), \ 81*5113495bSYour Name HWIO_REO_R0_MISC_CTL_ADDR( \ 82*5113495bSYour Name SEQ_WCSS_UMAC_REO_REG_OFFSET)); \ 83*5113495bSYour Name (reg_val) &= \ 84*5113495bSYour Name ~(HWIO_REO_R0_MISC_CTL_FRAGMENT_DEST_RING_BMSK); \ 85*5113495bSYour Name (reg_val) |= \ 86*5113495bSYour Name HAL_SM(HWIO_REO_R0_MISC_CTL, \ 87*5113495bSYour Name FRAGMENT_DEST_RING, \ 88*5113495bSYour Name (reo_params)->frag_dst_ring); \ 89*5113495bSYour Name HAL_REG_WRITE((soc), \ 90*5113495bSYour Name HWIO_REO_R0_MISC_CTL_ADDR( \ 91*5113495bSYour Name SEQ_WCSS_UMAC_REO_REG_OFFSET), \ 92*5113495bSYour Name (reg_val)); \ 93*5113495bSYour Name (reg_val) = \ 94*5113495bSYour Name HAL_REG_READ((soc), \ 95*5113495bSYour Name HWIO_REO_R0_DESTINATION_RING_ALT_CTRL_IX_0_ADDR( \ 96*5113495bSYour Name SEQ_WCSS_UMAC_REO_REG_OFFSET)); \ 97*5113495bSYour Name (reg_val) &= \ 98*5113495bSYour Name ~(HWIO_REO_R0_DESTINATION_RING_ALT_CTRL_IX_0_DEST_RING_ALT_MAPPING_0_BMSK); \ 99*5113495bSYour Name (reg_val) |= \ 100*5113495bSYour Name HAL_SM(HWIO_REO_R0_DESTINATION_RING_ALT_CTRL_IX_0, \ 101*5113495bSYour Name DEST_RING_ALT_MAPPING_0, \ 102*5113495bSYour Name (reo_params)->alt_dst_ind_0); \ 103*5113495bSYour Name HAL_REG_WRITE((soc), \ 104*5113495bSYour Name HWIO_REO_R0_DESTINATION_RING_ALT_CTRL_IX_0_ADDR( \ 105*5113495bSYour Name SEQ_WCSS_UMAC_REO_REG_OFFSET), \ 106*5113495bSYour Name (reg_val)); \ 107*5113495bSYour Name } while (0) 108*5113495bSYour Name 109*5113495bSYour Name #define HAL_RX_MSDU_DESC_INFO_GET(msdu_details_ptr) \ 110*5113495bSYour Name ((struct rx_msdu_desc_info *) \ 111*5113495bSYour Name _OFFSET_TO_BYTE_PTR((msdu_details_ptr), \ 112*5113495bSYour Name UNIFIED_RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET)) 113*5113495bSYour Name 114*5113495bSYour Name #define HAL_RX_LINK_DESC_MSDU0_PTR(link_desc) \ 115*5113495bSYour Name ((struct rx_msdu_details *) \ 116*5113495bSYour Name _OFFSET_TO_BYTE_PTR((link_desc),\ 117*5113495bSYour Name UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET)) 118*5113495bSYour Name 119*5113495bSYour Name #define HAL_RX_TLV_GET_TCP_CHKSUM(buf) \ 120*5113495bSYour Name (_HAL_MS( \ 121*5113495bSYour Name (*_OFFSET_TO_WORD_PTR(&(((struct rx_pkt_tlvs *)(buf))->\ 122*5113495bSYour Name msdu_end_tlv.rx_msdu_end), \ 123*5113495bSYour Name RX_MSDU_END_10_TCP_UDP_CHKSUM_OFFSET)), \ 124*5113495bSYour Name RX_MSDU_END_10_TCP_UDP_CHKSUM_MASK, \ 125*5113495bSYour Name RX_MSDU_END_10_TCP_UDP_CHKSUM_LSB)) 126*5113495bSYour Name 127*5113495bSYour Name #define HAL_RX_MSDU_END_FIRST_MSDU_GET(_rx_msdu_end) \ 128*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 129*5113495bSYour Name RX_MSDU_END_10_FIRST_MSDU_OFFSET)), \ 130*5113495bSYour Name RX_MSDU_END_10_FIRST_MSDU_MASK, \ 131*5113495bSYour Name RX_MSDU_END_10_FIRST_MSDU_LSB)) 132*5113495bSYour Name 133*5113495bSYour Name #define HAL_RX_MSDU_END_LAST_MSDU_GET(_rx_msdu_end) \ 134*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 135*5113495bSYour Name RX_MSDU_END_10_LAST_MSDU_OFFSET)), \ 136*5113495bSYour Name RX_MSDU_END_10_LAST_MSDU_MASK, \ 137*5113495bSYour Name RX_MSDU_END_10_LAST_MSDU_LSB)) 138*5113495bSYour Name 139*5113495bSYour Name #define HAL_RX_MSDU_END_SA_IS_VALID_GET(_rx_msdu_end) \ 140*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 141*5113495bSYour Name RX_MSDU_END_10_SA_IS_VALID_OFFSET)), \ 142*5113495bSYour Name RX_MSDU_END_10_SA_IS_VALID_MASK, \ 143*5113495bSYour Name RX_MSDU_END_10_SA_IS_VALID_LSB)) 144*5113495bSYour Name 145*5113495bSYour Name #define HAL_RX_MSDU_END_DA_IS_VALID_GET(_rx_msdu_end) \ 146*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 147*5113495bSYour Name RX_MSDU_END_10_DA_IS_VALID_OFFSET)), \ 148*5113495bSYour Name RX_MSDU_END_10_DA_IS_VALID_MASK, \ 149*5113495bSYour Name RX_MSDU_END_10_DA_IS_VALID_LSB)) 150*5113495bSYour Name 151*5113495bSYour Name #define HAL_RX_MSDU_END_DA_IS_MCBC_GET(_rx_msdu_end) \ 152*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 153*5113495bSYour Name RX_MSDU_END_10_DA_IS_MCBC_OFFSET)), \ 154*5113495bSYour Name RX_MSDU_END_10_DA_IS_MCBC_MASK, \ 155*5113495bSYour Name RX_MSDU_END_10_DA_IS_MCBC_LSB)) 156*5113495bSYour Name 157*5113495bSYour Name #define HAL_RX_MSDU_END_L3_HEADER_PADDING_GET(_rx_msdu_end) \ 158*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 159*5113495bSYour Name RX_MSDU_END_10_L3_HEADER_PADDING_OFFSET)), \ 160*5113495bSYour Name RX_MSDU_END_10_L3_HEADER_PADDING_MASK, \ 161*5113495bSYour Name RX_MSDU_END_10_L3_HEADER_PADDING_LSB)) 162*5113495bSYour Name 163*5113495bSYour Name #define HAL_RX_MSDU_END_SA_IDX_GET(_rx_msdu_end) \ 164*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 165*5113495bSYour Name RX_MSDU_END_11_SA_IDX_OFFSET)), \ 166*5113495bSYour Name RX_MSDU_END_11_SA_IDX_MASK, \ 167*5113495bSYour Name RX_MSDU_END_11_SA_IDX_LSB)) 168*5113495bSYour Name 169*5113495bSYour Name #define HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(_rx_msdu_end) \ 170*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 171*5113495bSYour Name RX_MSDU_END_14_SA_SW_PEER_ID_OFFSET)), \ 172*5113495bSYour Name RX_MSDU_END_14_SA_SW_PEER_ID_MASK, \ 173*5113495bSYour Name RX_MSDU_END_14_SA_SW_PEER_ID_LSB)) 174*5113495bSYour Name 175*5113495bSYour Name #define HAL_RX_MSDU_END_CCE_METADATA_GET(_rx_msdu_end) \ 176*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 177*5113495bSYour Name RX_MSDU_END_14_CCE_METADATA_OFFSET)), \ 178*5113495bSYour Name RX_MSDU_END_14_CCE_METADATA_MASK, \ 179*5113495bSYour Name RX_MSDU_END_14_CCE_METADATA_LSB)) 180*5113495bSYour Name 181*5113495bSYour Name #define HAL_RX_MSDU_END_DA_IDX_GET(_rx_msdu_end) \ 182*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 183*5113495bSYour Name RX_MSDU_END_11_DA_IDX_OR_SW_PEER_ID_OFFSET)), \ 184*5113495bSYour Name RX_MSDU_END_11_DA_IDX_OR_SW_PEER_ID_MASK, \ 185*5113495bSYour Name RX_MSDU_END_11_DA_IDX_OR_SW_PEER_ID_LSB)) 186*5113495bSYour Name 187*5113495bSYour Name #define HAL_RX_MPDU_SW_FRAME_GROUP_ID_GET(_rx_mpdu_info) \ 188*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_mpdu_info), \ 189*5113495bSYour Name RX_MPDU_INFO_9_SW_FRAME_GROUP_ID_OFFSET)), \ 190*5113495bSYour Name RX_MPDU_INFO_9_SW_FRAME_GROUP_ID_MASK, \ 191*5113495bSYour Name RX_MPDU_INFO_9_SW_FRAME_GROUP_ID_LSB)) \ 192*5113495bSYour Name 193*5113495bSYour Name #define HAL_RX_MPDU_INFO_SW_PEER_ID_GET(_rx_mpdu_info) \ 194*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_mpdu_info), \ 195*5113495bSYour Name RX_MPDU_INFO_10_SW_PEER_ID_OFFSET)), \ 196*5113495bSYour Name RX_MPDU_INFO_10_SW_PEER_ID_MASK, \ 197*5113495bSYour Name RX_MPDU_INFO_10_SW_PEER_ID_LSB)) 198*5113495bSYour Name 199*5113495bSYour Name #define HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(_rx_mpdu_info) \ 200*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 201*5113495bSYour Name RX_MPDU_INFO_11_MPDU_FRAME_CONTROL_VALID_OFFSET)), \ 202*5113495bSYour Name RX_MPDU_INFO_11_MPDU_FRAME_CONTROL_VALID_MASK, \ 203*5113495bSYour Name RX_MPDU_INFO_11_MPDU_FRAME_CONTROL_VALID_LSB)) 204*5113495bSYour Name 205*5113495bSYour Name #define HAL_RX_MPDU_MAC_ADDR_AD1_VALID_GET(_rx_mpdu_info) \ 206*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 207*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD1_VALID_OFFSET)), \ 208*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD1_VALID_MASK, \ 209*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD1_VALID_LSB)) 210*5113495bSYour Name 211*5113495bSYour Name #define HAL_RX_MPDU_AD1_31_0_GET(_rx_mpdu_info) \ 212*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 213*5113495bSYour Name RX_MPDU_INFO_15_MAC_ADDR_AD1_31_0_OFFSET)), \ 214*5113495bSYour Name RX_MPDU_INFO_15_MAC_ADDR_AD1_31_0_MASK, \ 215*5113495bSYour Name RX_MPDU_INFO_15_MAC_ADDR_AD1_31_0_LSB)) 216*5113495bSYour Name 217*5113495bSYour Name #define HAL_RX_MPDU_AD1_47_32_GET(_rx_mpdu_info) \ 218*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 219*5113495bSYour Name RX_MPDU_INFO_16_MAC_ADDR_AD1_47_32_OFFSET)), \ 220*5113495bSYour Name RX_MPDU_INFO_16_MAC_ADDR_AD1_47_32_MASK, \ 221*5113495bSYour Name RX_MPDU_INFO_16_MAC_ADDR_AD1_47_32_LSB)) 222*5113495bSYour Name 223*5113495bSYour Name #define HAL_RX_MPDU_MAC_ADDR_AD2_VALID_GET(_rx_mpdu_info) \ 224*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 225*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD2_VALID_OFFSET)), \ 226*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD2_VALID_MASK, \ 227*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD2_VALID_LSB)) 228*5113495bSYour Name 229*5113495bSYour Name #define HAL_RX_MPDU_AD2_15_0_GET(_rx_mpdu_info) \ 230*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 231*5113495bSYour Name RX_MPDU_INFO_16_MAC_ADDR_AD2_15_0_OFFSET)), \ 232*5113495bSYour Name RX_MPDU_INFO_16_MAC_ADDR_AD2_15_0_MASK, \ 233*5113495bSYour Name RX_MPDU_INFO_16_MAC_ADDR_AD2_15_0_LSB)) 234*5113495bSYour Name 235*5113495bSYour Name #define HAL_RX_MPDU_AD2_47_16_GET(_rx_mpdu_info) \ 236*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 237*5113495bSYour Name RX_MPDU_INFO_17_MAC_ADDR_AD2_47_16_OFFSET)), \ 238*5113495bSYour Name RX_MPDU_INFO_17_MAC_ADDR_AD2_47_16_MASK, \ 239*5113495bSYour Name RX_MPDU_INFO_17_MAC_ADDR_AD2_47_16_LSB)) 240*5113495bSYour Name 241*5113495bSYour Name #define HAL_RX_MPDU_MAC_ADDR_AD3_VALID_GET(_rx_mpdu_info) \ 242*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 243*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD3_VALID_OFFSET)), \ 244*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD3_VALID_MASK, \ 245*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD3_VALID_LSB)) 246*5113495bSYour Name 247*5113495bSYour Name #define HAL_RX_MPDU_AD3_31_0_GET(_rx_mpdu_info) \ 248*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 249*5113495bSYour Name RX_MPDU_INFO_18_MAC_ADDR_AD3_31_0_OFFSET)), \ 250*5113495bSYour Name RX_MPDU_INFO_18_MAC_ADDR_AD3_31_0_MASK, \ 251*5113495bSYour Name RX_MPDU_INFO_18_MAC_ADDR_AD3_31_0_LSB)) 252*5113495bSYour Name 253*5113495bSYour Name #define HAL_RX_MPDU_AD3_47_32_GET(_rx_mpdu_info) \ 254*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 255*5113495bSYour Name RX_MPDU_INFO_19_MAC_ADDR_AD3_47_32_OFFSET)), \ 256*5113495bSYour Name RX_MPDU_INFO_19_MAC_ADDR_AD3_47_32_MASK, \ 257*5113495bSYour Name RX_MPDU_INFO_19_MAC_ADDR_AD3_47_32_LSB)) 258*5113495bSYour Name 259*5113495bSYour Name #define HAL_RX_MPDU_MAC_ADDR_AD4_VALID_GET(_rx_mpdu_info) \ 260*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 261*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD4_VALID_OFFSET)), \ 262*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD4_VALID_MASK, \ 263*5113495bSYour Name RX_MPDU_INFO_11_MAC_ADDR_AD4_VALID_LSB)) 264*5113495bSYour Name 265*5113495bSYour Name #define HAL_RX_MPDU_AD4_31_0_GET(_rx_mpdu_info) \ 266*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 267*5113495bSYour Name RX_MPDU_INFO_20_MAC_ADDR_AD4_31_0_OFFSET)), \ 268*5113495bSYour Name RX_MPDU_INFO_20_MAC_ADDR_AD4_31_0_MASK, \ 269*5113495bSYour Name RX_MPDU_INFO_20_MAC_ADDR_AD4_31_0_LSB)) 270*5113495bSYour Name 271*5113495bSYour Name #define HAL_RX_MPDU_AD4_47_32_GET(_rx_mpdu_info) \ 272*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 273*5113495bSYour Name RX_MPDU_INFO_21_MAC_ADDR_AD4_47_32_OFFSET)), \ 274*5113495bSYour Name RX_MPDU_INFO_21_MAC_ADDR_AD4_47_32_MASK, \ 275*5113495bSYour Name RX_MPDU_INFO_21_MAC_ADDR_AD4_47_32_LSB)) 276*5113495bSYour Name 277*5113495bSYour Name #define HAL_RX_MPDU_GET_SEQUENCE_CONTROL_VALID(_rx_mpdu_info) \ 278*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 279*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_CONTROL_VALID_OFFSET)), \ 280*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_CONTROL_VALID_MASK, \ 281*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_CONTROL_VALID_LSB)) 282*5113495bSYour Name 283*5113495bSYour Name #define HAL_RX_MPDU_INFO_QOS_CONTROL_VALID_GET(_rx_mpdu_info) \ 284*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_mpdu_info), \ 285*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_CONTROL_VALID_OFFSET)), \ 286*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_CONTROL_VALID_MASK, \ 287*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_CONTROL_VALID_LSB)) 288*5113495bSYour Name 289*5113495bSYour Name #define HAL_RX_MPDU_ENCRYPTION_INFO_VALID(_rx_mpdu_info) \ 290*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 291*5113495bSYour Name RX_MPDU_INFO_11_FRAME_ENCRYPTION_INFO_VALID_OFFSET)), \ 292*5113495bSYour Name RX_MPDU_INFO_11_FRAME_ENCRYPTION_INFO_VALID_MASK, \ 293*5113495bSYour Name RX_MPDU_INFO_11_FRAME_ENCRYPTION_INFO_VALID_LSB)) 294*5113495bSYour Name 295*5113495bSYour Name #define HAL_RX_MPDU_GET_FROMDS(_rx_mpdu_info) \ 296*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 297*5113495bSYour Name RX_MPDU_INFO_11_FR_DS_OFFSET)), \ 298*5113495bSYour Name RX_MPDU_INFO_11_FR_DS_MASK, \ 299*5113495bSYour Name RX_MPDU_INFO_11_FR_DS_LSB)) 300*5113495bSYour Name 301*5113495bSYour Name #define HAL_RX_MPDU_GET_TODS(_rx_mpdu_info) \ 302*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 303*5113495bSYour Name RX_MPDU_INFO_11_TO_DS_OFFSET)), \ 304*5113495bSYour Name RX_MPDU_INFO_11_TO_DS_MASK, \ 305*5113495bSYour Name RX_MPDU_INFO_11_TO_DS_LSB)) 306*5113495bSYour Name 307*5113495bSYour Name #define HAL_RX_MPDU_GET_SEQUENCE_NUMBER(_rx_mpdu_info) \ 308*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 309*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_NUMBER_OFFSET)), \ 310*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_NUMBER_MASK, \ 311*5113495bSYour Name RX_MPDU_INFO_11_MPDU_SEQUENCE_NUMBER_LSB)) 312*5113495bSYour Name 313*5113495bSYour Name #define HAL_RX_MPDU_PN_31_0_GET(_rx_mpdu_info) \ 314*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 315*5113495bSYour Name RX_MPDU_INFO_3_PN_31_0_OFFSET)), \ 316*5113495bSYour Name RX_MPDU_INFO_3_PN_31_0_MASK, \ 317*5113495bSYour Name RX_MPDU_INFO_3_PN_31_0_LSB)) 318*5113495bSYour Name 319*5113495bSYour Name #define HAL_RX_MPDU_PN_63_32_GET(_rx_mpdu_info) \ 320*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 321*5113495bSYour Name RX_MPDU_INFO_4_PN_63_32_OFFSET)), \ 322*5113495bSYour Name RX_MPDU_INFO_4_PN_63_32_MASK, \ 323*5113495bSYour Name RX_MPDU_INFO_4_PN_63_32_LSB)) 324*5113495bSYour Name 325*5113495bSYour Name #define HAL_RX_MPDU_PN_95_64_GET(_rx_mpdu_info) \ 326*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 327*5113495bSYour Name RX_MPDU_INFO_5_PN_95_64_OFFSET)), \ 328*5113495bSYour Name RX_MPDU_INFO_5_PN_95_64_MASK, \ 329*5113495bSYour Name RX_MPDU_INFO_5_PN_95_64_LSB)) 330*5113495bSYour Name 331*5113495bSYour Name #define HAL_RX_MPDU_PN_127_96_GET(_rx_mpdu_info) \ 332*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info, \ 333*5113495bSYour Name RX_MPDU_INFO_6_PN_127_96_OFFSET)), \ 334*5113495bSYour Name RX_MPDU_INFO_6_PN_127_96_MASK, \ 335*5113495bSYour Name RX_MPDU_INFO_6_PN_127_96_LSB)) 336*5113495bSYour Name 337*5113495bSYour Name #define HAL_RX_MSDU_END_FLOW_IDX_TIMEOUT_GET(_rx_msdu_end) \ 338*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 339*5113495bSYour Name RX_MSDU_END_10_FLOW_IDX_TIMEOUT_OFFSET)), \ 340*5113495bSYour Name RX_MSDU_END_10_FLOW_IDX_TIMEOUT_MASK, \ 341*5113495bSYour Name RX_MSDU_END_10_FLOW_IDX_TIMEOUT_LSB)) 342*5113495bSYour Name 343*5113495bSYour Name #define HAL_RX_MSDU_END_FLOW_IDX_INVALID_GET(_rx_msdu_end) \ 344*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 345*5113495bSYour Name RX_MSDU_END_10_FLOW_IDX_INVALID_OFFSET)), \ 346*5113495bSYour Name RX_MSDU_END_10_FLOW_IDX_INVALID_MASK, \ 347*5113495bSYour Name RX_MSDU_END_10_FLOW_IDX_INVALID_LSB)) 348*5113495bSYour Name 349*5113495bSYour Name #define HAL_RX_MSDU_END_FLOW_IDX_GET(_rx_msdu_end) \ 350*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 351*5113495bSYour Name RX_MSDU_END_12_FLOW_IDX_OFFSET)), \ 352*5113495bSYour Name RX_MSDU_END_12_FLOW_IDX_MASK, \ 353*5113495bSYour Name RX_MSDU_END_12_FLOW_IDX_LSB)) 354*5113495bSYour Name 355*5113495bSYour Name #define HAL_RX_MSDU_END_FSE_METADATA_GET(_rx_msdu_end) \ 356*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_msdu_end, \ 357*5113495bSYour Name RX_MSDU_END_13_FSE_METADATA_OFFSET)), \ 358*5113495bSYour Name RX_MSDU_END_13_FSE_METADATA_MASK, \ 359*5113495bSYour Name RX_MSDU_END_13_FSE_METADATA_LSB)) 360*5113495bSYour Name 361*5113495bSYour Name #define HAL_RX_MPDU_GET_PHY_PPDU_ID(_rx_mpdu_info) \ 362*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_mpdu_info), \ 363*5113495bSYour Name RX_MPDU_INFO_9_PHY_PPDU_ID_OFFSET)), \ 364*5113495bSYour Name RX_MPDU_INFO_9_PHY_PPDU_ID_MASK, \ 365*5113495bSYour Name RX_MPDU_INFO_9_PHY_PPDU_ID_LSB)) \ 366*5113495bSYour Name 367*5113495bSYour Name #define HAL_RX_MSDU_START_MIMO_SS_BITMAP(_rx_msdu_start)\ 368*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_msdu_start),\ 369*5113495bSYour Name RX_MSDU_START_5_MIMO_SS_BITMAP_OFFSET)), \ 370*5113495bSYour Name RX_MSDU_START_5_MIMO_SS_BITMAP_MASK, \ 371*5113495bSYour Name RX_MSDU_START_5_MIMO_SS_BITMAP_LSB)) 372*5113495bSYour Name 373*5113495bSYour Name #ifdef GET_MSDU_AGGREGATION 374*5113495bSYour Name #define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)\ 375*5113495bSYour Name {\ 376*5113495bSYour Name struct rx_msdu_end *rx_msdu_end;\ 377*5113495bSYour Name bool first_msdu, last_msdu; \ 378*5113495bSYour Name rx_msdu_end = &rx_desc->msdu_end_tlv.rx_msdu_end;\ 379*5113495bSYour Name first_msdu = HAL_RX_GET(rx_msdu_end, RX_MSDU_END_10, FIRST_MSDU);\ 380*5113495bSYour Name last_msdu = HAL_RX_GET(rx_msdu_end, RX_MSDU_END_10, LAST_MSDU);\ 381*5113495bSYour Name if (first_msdu && last_msdu)\ 382*5113495bSYour Name rs->rs_flags &= (~IEEE80211_AMSDU_FLAG);\ 383*5113495bSYour Name else\ 384*5113495bSYour Name rs->rs_flags |= (IEEE80211_AMSDU_FLAG); \ 385*5113495bSYour Name } \ 386*5113495bSYour Name 387*5113495bSYour Name #else 388*5113495bSYour Name #define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs) 389*5113495bSYour Name #endif 390*5113495bSYour Name 391*5113495bSYour Name #define HAL_RX_MPDU_INFO_TID_GET(_rx_mpdu_info) \ 392*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_mpdu_info), \ 393*5113495bSYour Name RX_MPDU_INFO_7_TID_OFFSET)), \ 394*5113495bSYour Name RX_MPDU_INFO_7_TID_MASK, \ 395*5113495bSYour Name RX_MPDU_INFO_7_TID_LSB)) 396*5113495bSYour Name 397*5113495bSYour Name #define HAL_RX_MSDU_START_RECEPTION_TYPE_GET(_rx_msdu_start) \ 398*5113495bSYour Name (_HAL_MS((*_OFFSET_TO_WORD_PTR((_rx_msdu_start), \ 399*5113495bSYour Name RX_MSDU_START_5_RECEPTION_TYPE_OFFSET)), \ 400*5113495bSYour Name RX_MSDU_START_5_RECEPTION_TYPE_MASK, \ 401*5113495bSYour Name RX_MSDU_START_5_RECEPTION_TYPE_LSB)) 402