1*5c1def83SBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2*5c1def83SBjoern A. Zeeb /* 3*5c1def83SBjoern A. Zeeb * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved. 4*5c1def83SBjoern A. Zeeb * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. 5*5c1def83SBjoern A. Zeeb */ 6*5c1def83SBjoern A. Zeeb #ifndef ATH12K_RX_DESC_H 7*5c1def83SBjoern A. Zeeb #define ATH12K_RX_DESC_H 8*5c1def83SBjoern A. Zeeb 9*5c1def83SBjoern A. Zeeb enum rx_desc_decap_type { 10*5c1def83SBjoern A. Zeeb RX_DESC_DECAP_TYPE_RAW, 11*5c1def83SBjoern A. Zeeb RX_DESC_DECAP_TYPE_NATIVE_WIFI, 12*5c1def83SBjoern A. Zeeb RX_DESC_DECAP_TYPE_ETHERNET2_DIX, 13*5c1def83SBjoern A. Zeeb RX_DESC_DECAP_TYPE_8023, 14*5c1def83SBjoern A. Zeeb }; 15*5c1def83SBjoern A. Zeeb 16*5c1def83SBjoern A. Zeeb enum rx_desc_decrypt_status_code { 17*5c1def83SBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_OK, 18*5c1def83SBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_UNPROTECTED_FRAME, 19*5c1def83SBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_DATA_ERR, 20*5c1def83SBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_KEY_INVALID, 21*5c1def83SBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_PEER_ENTRY_INVALID, 22*5c1def83SBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_OTHER, 23*5c1def83SBjoern A. Zeeb }; 24*5c1def83SBjoern A. Zeeb 25*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_REO_DEST_IND GENMASK(4, 0) 26*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_LMAC_PEER_ID_MSB GENMASK(6, 5) 27*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_FLOW_ID_TOEPLITZ BIT(7) 28*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_PKT_SEL_FP_UCAST_DATA BIT(8) 29*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_PKT_SEL_FP_MCAST_DATA BIT(9) 30*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_PKT_SEL_FP_CTRL_BAR BIT(10) 31*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_RXDMA0_SRC_RING_SEL GENMASK(13, 11) 32*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_RXDMA0_DST_RING_SEL GENMASK(16, 14) 33*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_MCAST_ECHO_DROP_EN BIT(17) 34*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_WDS_LEARN_DETECT_EN BIT(18) 35*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_INTRA_BSS_CHECK_EN BIT(19) 36*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_USE_PPE BIT(20) 37*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO0_PPE_ROUTING_EN BIT(21) 38*5c1def83SBjoern A. Zeeb 39*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO1_REO_QUEUE_DESC_HI GENMASK(7, 0) 40*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO1_RECV_QUEUE_NUM GENMASK(23, 8) 41*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO1_PRE_DELIM_ERR_WARN BIT(24) 42*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO1_FIRST_DELIM_ERR BIT(25) 43*5c1def83SBjoern A. Zeeb 44*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO2_EPD_EN BIT(0) 45*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO2_ALL_FRAME_ENCPD BIT(1) 46*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO2_ENC_TYPE GENMASK(5, 2) 47*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO2_VAR_WEP_KEY_WIDTH GENMASK(7, 6) 48*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO2_MESH_STA GENMASK(9, 8) 49*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO2_BSSID_HIT BIT(10) 50*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO2_BSSID_NUM GENMASK(14, 11) 51*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO2_TID GENMASK(18, 15) 52*5c1def83SBjoern A. Zeeb 53*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO3_RXPCU_MPDU_FLTR GENMASK(1, 0) 54*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO3_SW_FRAME_GRP_ID GENMASK(8, 2) 55*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO3_NDP_FRAME BIT(9) 56*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO3_PHY_ERR BIT(10) 57*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO3_PHY_ERR_MPDU_HDR BIT(11) 58*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO3_PROTO_VER_ERR BIT(12) 59*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO3_AST_LOOKUP_VALID BIT(13) 60*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO3_RANGING BIT(14) 61*5c1def83SBjoern A. Zeeb 62*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MPDU_FCTRL_VALID BIT(0) 63*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MPDU_DUR_VALID BIT(1) 64*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MAC_ADDR1_VALID BIT(2) 65*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MAC_ADDR2_VALID BIT(3) 66*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MAC_ADDR3_VALID BIT(4) 67*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MAC_ADDR4_VALID BIT(5) 68*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MPDU_SEQ_CTRL_VALID BIT(6) 69*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MPDU_QOS_CTRL_VALID BIT(7) 70*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MPDU_HT_CTRL_VALID BIT(8) 71*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_ENCRYPT_INFO_VALID BIT(9) 72*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MPDU_FRAG_NUMBER GENMASK(13, 10) 73*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MORE_FRAG_FLAG BIT(14) 74*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_FROM_DS BIT(16) 75*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_TO_DS BIT(17) 76*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_ENCRYPTED BIT(18) 77*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MPDU_RETRY BIT(19) 78*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO4_MPDU_SEQ_NUM GENMASK(31, 20) 79*5c1def83SBjoern A. Zeeb 80*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_KEY_ID GENMASK(7, 0) 81*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_NEW_PEER_ENTRY BIT(8) 82*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_DECRYPT_NEEDED BIT(9) 83*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_DECAP_TYPE GENMASK(11, 10) 84*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_VLAN_TAG_C_PADDING BIT(12) 85*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_VLAN_TAG_S_PADDING BIT(13) 86*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_STRIP_VLAN_TAG_C BIT(14) 87*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_STRIP_VLAN_TAG_S BIT(15) 88*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_PRE_DELIM_COUNT GENMASK(27, 16) 89*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_AMPDU_FLAG BIT(28) 90*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_BAR_FRAME BIT(29) 91*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO5_RAW_MPDU BIT(30) 92*5c1def83SBjoern A. Zeeb 93*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_MPDU_LEN GENMASK(13, 0) 94*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_FIRST_MPDU BIT(14) 95*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_MCAST_BCAST BIT(15) 96*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_AST_IDX_NOT_FOUND BIT(16) 97*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_AST_IDX_TIMEOUT BIT(17) 98*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_POWER_MGMT BIT(18) 99*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_NON_QOS BIT(19) 100*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_NULL_DATA BIT(20) 101*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_MGMT_TYPE BIT(21) 102*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_CTRL_TYPE BIT(22) 103*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_MORE_DATA BIT(23) 104*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_EOSP BIT(24) 105*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_FRAGMENT BIT(25) 106*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_ORDER BIT(26) 107*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_UAPSD_TRIGGER BIT(27) 108*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_ENCRYPT_REQUIRED BIT(28) 109*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_DIRECTED BIT(29) 110*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO6_AMSDU_PRESENT BIT(30) 111*5c1def83SBjoern A. Zeeb 112*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO7_VDEV_ID GENMASK(7, 0) 113*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO7_SERVICE_CODE GENMASK(16, 8) 114*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO7_PRIORITY_VALID BIT(17) 115*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO7_SRC_INFO GENMASK(29, 18) 116*5c1def83SBjoern A. Zeeb 117*5c1def83SBjoern A. Zeeb #define RX_MPDU_START_INFO8_AUTH_TO_SEND_WDS BIT(0) 118*5c1def83SBjoern A. Zeeb 119*5c1def83SBjoern A. Zeeb struct rx_mpdu_start_qcn9274 { 120*5c1def83SBjoern A. Zeeb __le32 info0; 121*5c1def83SBjoern A. Zeeb __le32 reo_queue_desc_lo; 122*5c1def83SBjoern A. Zeeb __le32 info1; 123*5c1def83SBjoern A. Zeeb __le32 pn[4]; 124*5c1def83SBjoern A. Zeeb __le32 info2; 125*5c1def83SBjoern A. Zeeb __le32 peer_meta_data; 126*5c1def83SBjoern A. Zeeb __le16 info3; 127*5c1def83SBjoern A. Zeeb __le16 phy_ppdu_id; 128*5c1def83SBjoern A. Zeeb __le16 ast_index; 129*5c1def83SBjoern A. Zeeb __le16 sw_peer_id; 130*5c1def83SBjoern A. Zeeb __le32 info4; 131*5c1def83SBjoern A. Zeeb __le32 info5; 132*5c1def83SBjoern A. Zeeb __le32 info6; 133*5c1def83SBjoern A. Zeeb __le16 frame_ctrl; 134*5c1def83SBjoern A. Zeeb __le16 duration; 135*5c1def83SBjoern A. Zeeb u8 addr1[ETH_ALEN]; 136*5c1def83SBjoern A. Zeeb u8 addr2[ETH_ALEN]; 137*5c1def83SBjoern A. Zeeb u8 addr3[ETH_ALEN]; 138*5c1def83SBjoern A. Zeeb __le16 seq_ctrl; 139*5c1def83SBjoern A. Zeeb u8 addr4[ETH_ALEN]; 140*5c1def83SBjoern A. Zeeb __le16 qos_ctrl; 141*5c1def83SBjoern A. Zeeb __le32 ht_ctrl; 142*5c1def83SBjoern A. Zeeb __le32 info7; 143*5c1def83SBjoern A. Zeeb u8 multi_link_addr1[ETH_ALEN]; 144*5c1def83SBjoern A. Zeeb u8 multi_link_addr2[ETH_ALEN]; 145*5c1def83SBjoern A. Zeeb __le32 info8; 146*5c1def83SBjoern A. Zeeb __le32 res0; 147*5c1def83SBjoern A. Zeeb __le32 res1; 148*5c1def83SBjoern A. Zeeb } __packed; 149*5c1def83SBjoern A. Zeeb 150*5c1def83SBjoern A. Zeeb /* rx_mpdu_start 151*5c1def83SBjoern A. Zeeb * 152*5c1def83SBjoern A. Zeeb * reo_destination_indication 153*5c1def83SBjoern A. Zeeb * The id of the reo exit ring where the msdu frame shall push 154*5c1def83SBjoern A. Zeeb * after (MPDU level) reordering has finished. Values are defined 155*5c1def83SBjoern A. Zeeb * in enum %HAL_RX_MSDU_DESC_REO_DEST_IND_. 156*5c1def83SBjoern A. Zeeb * 157*5c1def83SBjoern A. Zeeb * lmac_peer_id_msb 158*5c1def83SBjoern A. Zeeb * 159*5c1def83SBjoern A. Zeeb * If use_flow_id_toeplitz_clfy is set and lmac_peer_id_'sb 160*5c1def83SBjoern A. Zeeb * is 2'b00, Rx OLE uses a REO destination indicati'n of {1'b1, 161*5c1def83SBjoern A. Zeeb * hash[3:0]} using the chosen Toeplitz hash from Common Parser 162*5c1def83SBjoern A. Zeeb * if flow search fails. 163*5c1def83SBjoern A. Zeeb * If use_flow_id_toeplitz_clfy is set and lmac_peer_id_msb 164*5c1def83SBjoern A. Zeeb * 's not 2'b00, Rx OLE uses a REO destination indication of 165*5c1def83SBjoern A. Zeeb * {lmac_peer_id_msb, hash[2:0]} using the chosen Toeplitz 166*5c1def83SBjoern A. Zeeb * hash from Common Parser if flow search fails. 167*5c1def83SBjoern A. Zeeb * 168*5c1def83SBjoern A. Zeeb * use_flow_id_toeplitz_clfy 169*5c1def83SBjoern A. Zeeb * Indication to Rx OLE to enable REO destination routing based 170*5c1def83SBjoern A. Zeeb * on the chosen Toeplitz hash from Common Parser, in case 171*5c1def83SBjoern A. Zeeb * flow search fails 172*5c1def83SBjoern A. Zeeb * 173*5c1def83SBjoern A. Zeeb * pkt_selection_fp_ucast_data 174*5c1def83SBjoern A. Zeeb * Filter pass Unicast data frame (matching rxpcu_filter_pass 175*5c1def83SBjoern A. Zeeb * and sw_frame_group_Unicast_data) routing selection 176*5c1def83SBjoern A. Zeeb * 177*5c1def83SBjoern A. Zeeb * pkt_selection_fp_mcast_data 178*5c1def83SBjoern A. Zeeb * Filter pass Multicast data frame (matching rxpcu_filter_pass 179*5c1def83SBjoern A. Zeeb * and sw_frame_group_Multicast_data) routing selection 180*5c1def83SBjoern A. Zeeb * 181*5c1def83SBjoern A. Zeeb * pkt_selection_fp_ctrl_bar 182*5c1def83SBjoern A. Zeeb * Filter pass BAR frame (matching rxpcu_filter_pass 183*5c1def83SBjoern A. Zeeb * and sw_frame_group_ctrl_1000) routing selection 184*5c1def83SBjoern A. Zeeb * 185*5c1def83SBjoern A. Zeeb * rxdma0_src_ring_selection 186*5c1def83SBjoern A. Zeeb * Field only valid when for the received frame type the corresponding 187*5c1def83SBjoern A. Zeeb * pkt_selection_fp_... bit is set 188*5c1def83SBjoern A. Zeeb * 189*5c1def83SBjoern A. Zeeb * rxdma0_dst_ring_selection 190*5c1def83SBjoern A. Zeeb * Field only valid when for the received frame type the corresponding 191*5c1def83SBjoern A. Zeeb * pkt_selection_fp_... bit is set 192*5c1def83SBjoern A. Zeeb * 193*5c1def83SBjoern A. Zeeb * mcast_echo_drop_enable 194*5c1def83SBjoern A. Zeeb * If set, for multicast packets, multicast echo check (i.e. 195*5c1def83SBjoern A. Zeeb * SA search with mcast_echo_check = 1) shall be performed 196*5c1def83SBjoern A. Zeeb * by RXOLE, and any multicast echo packets should be indicated 197*5c1def83SBjoern A. Zeeb * to RXDMA for release to WBM 198*5c1def83SBjoern A. Zeeb * 199*5c1def83SBjoern A. Zeeb * wds_learning_detect_en 200*5c1def83SBjoern A. Zeeb * If set, WDS learning detection based on SA search and notification 201*5c1def83SBjoern A. Zeeb * to FW (using RXDMA0 status ring) is enabled and the "timestamp" 202*5c1def83SBjoern A. Zeeb * field in address search failure cache-only entry should 203*5c1def83SBjoern A. Zeeb * be used to avoid multiple WDS learning notifications. 204*5c1def83SBjoern A. Zeeb * 205*5c1def83SBjoern A. Zeeb * intrabss_check_en 206*5c1def83SBjoern A. Zeeb * If set, intra-BSS routing detection is enabled 207*5c1def83SBjoern A. Zeeb * 208*5c1def83SBjoern A. Zeeb * use_ppe 209*5c1def83SBjoern A. Zeeb * Indicates to RXDMA to ignore the REO_destination_indication 210*5c1def83SBjoern A. Zeeb * and use a programmed value corresponding to the REO2PPE 211*5c1def83SBjoern A. Zeeb * ring 212*5c1def83SBjoern A. Zeeb * This override to REO2PPE for packets requiring multiple 213*5c1def83SBjoern A. Zeeb * buffers shall be disabled based on an RXDMA configuration, 214*5c1def83SBjoern A. Zeeb * as PPE may not support such packets. 215*5c1def83SBjoern A. Zeeb * 216*5c1def83SBjoern A. Zeeb * Supported only in full AP chips, not in client/soft 217*5c1def83SBjoern A. Zeeb * chips 218*5c1def83SBjoern A. Zeeb * 219*5c1def83SBjoern A. Zeeb * ppe_routing_enable 220*5c1def83SBjoern A. Zeeb * Global enable/disable bit for routing to PPE, used to disable 221*5c1def83SBjoern A. Zeeb * PPE routing even if RXOLE CCE or flow search indicate 'Use_PPE' 222*5c1def83SBjoern A. Zeeb * This is set by SW for peers which are being handled by a 223*5c1def83SBjoern A. Zeeb * host SW/accelerator subsystem that also handles packet 224*5c1def83SBjoern A. Zeeb * uffer management for WiFi-to-PPE routing. 225*5c1def83SBjoern A. Zeeb * 226*5c1def83SBjoern A. Zeeb * This is cleared by SW for peers which are being handled 227*5c1def83SBjoern A. Zeeb * by a different subsystem, completely disabling WiFi-to-PPE 228*5c1def83SBjoern A. Zeeb * routing for such peers. 229*5c1def83SBjoern A. Zeeb * 230*5c1def83SBjoern A. Zeeb * rx_reo_queue_desc_addr_lo 231*5c1def83SBjoern A. Zeeb * Address (lower 32 bits) of the REO queue descriptor. 232*5c1def83SBjoern A. Zeeb * 233*5c1def83SBjoern A. Zeeb * rx_reo_queue_desc_addr_hi 234*5c1def83SBjoern A. Zeeb * Address (upper 8 bits) of the REO queue descriptor. 235*5c1def83SBjoern A. Zeeb * 236*5c1def83SBjoern A. Zeeb * receive_queue_number 237*5c1def83SBjoern A. Zeeb * Indicates the MPDU queue ID to which this MPDU link 238*5c1def83SBjoern A. Zeeb * descriptor belongs. 239*5c1def83SBjoern A. Zeeb * 240*5c1def83SBjoern A. Zeeb * pre_delim_err_warning 241*5c1def83SBjoern A. Zeeb * Indicates that a delimiter FCS error was found in between the 242*5c1def83SBjoern A. Zeeb * previous MPDU and this MPDU. Note that this is just a warning, 243*5c1def83SBjoern A. Zeeb * and does not mean that this MPDU is corrupted in any way. If 244*5c1def83SBjoern A. Zeeb * it is, there will be other errors indicated such as FCS or 245*5c1def83SBjoern A. Zeeb * decrypt errors. 246*5c1def83SBjoern A. Zeeb * 247*5c1def83SBjoern A. Zeeb * first_delim_err 248*5c1def83SBjoern A. Zeeb * Indicates that the first delimiter had a FCS failure. 249*5c1def83SBjoern A. Zeeb * 250*5c1def83SBjoern A. Zeeb * pn 251*5c1def83SBjoern A. Zeeb * The PN number. 252*5c1def83SBjoern A. Zeeb * 253*5c1def83SBjoern A. Zeeb * epd_en 254*5c1def83SBjoern A. Zeeb * Field only valid when AST_based_lookup_valid == 1. 255*5c1def83SBjoern A. Zeeb * In case of ndp or phy_err or AST_based_lookup_valid == 0, 256*5c1def83SBjoern A. Zeeb * this field will be set to 0 257*5c1def83SBjoern A. Zeeb * If set to one use EPD instead of LPD 258*5c1def83SBjoern A. Zeeb * In case of ndp or phy_err, this field will never be set. 259*5c1def83SBjoern A. Zeeb * 260*5c1def83SBjoern A. Zeeb * all_frames_shall_be_encrypted 261*5c1def83SBjoern A. Zeeb * In case of ndp or phy_err or AST_based_lookup_valid == 0, 262*5c1def83SBjoern A. Zeeb * this field will be set to 0 263*5c1def83SBjoern A. Zeeb * 264*5c1def83SBjoern A. Zeeb * When set, all frames (data only ?) shall be encrypted. If 265*5c1def83SBjoern A. Zeeb * not, RX CRYPTO shall set an error flag. 266*5c1def83SBjoern A. Zeeb * 267*5c1def83SBjoern A. Zeeb * 268*5c1def83SBjoern A. Zeeb * encrypt_type 269*5c1def83SBjoern A. Zeeb * In case of ndp or phy_err or AST_based_lookup_valid == 0, 270*5c1def83SBjoern A. Zeeb * this field will be set to 0 271*5c1def83SBjoern A. Zeeb * 272*5c1def83SBjoern A. Zeeb * Indicates type of decrypt cipher used (as defined in the 273*5c1def83SBjoern A. Zeeb * peer entry) 274*5c1def83SBjoern A. Zeeb * 275*5c1def83SBjoern A. Zeeb * wep_key_width_for_variable_key 276*5c1def83SBjoern A. Zeeb * 277*5c1def83SBjoern A. Zeeb * Field only valid when key_type is set to wep_varied_width. 278*5c1def83SBjoern A. Zeeb * 279*5c1def83SBjoern A. Zeeb * mesh_sta 280*5c1def83SBjoern A. Zeeb * 281*5c1def83SBjoern A. Zeeb * bssid_hit 282*5c1def83SBjoern A. Zeeb * When set, the BSSID of the incoming frame matched one of 283*5c1def83SBjoern A. Zeeb * the 8 BSSID register values 284*5c1def83SBjoern A. Zeeb * bssid_number 285*5c1def83SBjoern A. Zeeb * Field only valid when bssid_hit is set. 286*5c1def83SBjoern A. Zeeb * This number indicates which one out of the 8 BSSID register 287*5c1def83SBjoern A. Zeeb * values matched the incoming frame 288*5c1def83SBjoern A. Zeeb * 289*5c1def83SBjoern A. Zeeb * tid 290*5c1def83SBjoern A. Zeeb * Field only valid when mpdu_qos_control_valid is set 291*5c1def83SBjoern A. Zeeb * The TID field in the QoS control field 292*5c1def83SBjoern A. Zeeb * 293*5c1def83SBjoern A. Zeeb * peer_meta_data 294*5c1def83SBjoern A. Zeeb * Meta data that SW has programmed in the Peer table entry 295*5c1def83SBjoern A. Zeeb * of the transmitting STA. 296*5c1def83SBjoern A. Zeeb * 297*5c1def83SBjoern A. Zeeb * rxpcu_mpdu_filter_in_category 298*5c1def83SBjoern A. Zeeb * Field indicates what the reason was that this mpdu frame 299*5c1def83SBjoern A. Zeeb * was allowed to come into the receive path by rxpcu. Values 300*5c1def83SBjoern A. Zeeb * are defined in enum %RX_DESC_RXPCU_FILTER_*. 301*5c1def83SBjoern A. Zeeb * 302*5c1def83SBjoern A. Zeeb * sw_frame_group_id 303*5c1def83SBjoern A. Zeeb * SW processes frames based on certain classifications. Values 304*5c1def83SBjoern A. Zeeb * are defined in enum %RX_DESC_SW_FRAME_GRP_ID_*. 305*5c1def83SBjoern A. Zeeb * 306*5c1def83SBjoern A. Zeeb * ndp_frame 307*5c1def83SBjoern A. Zeeb * When set, the received frame was an NDP frame, and thus 308*5c1def83SBjoern A. Zeeb * there will be no MPDU data. 309*5c1def83SBjoern A. Zeeb * phy_err 310*5c1def83SBjoern A. Zeeb * When set, a PHY error was received before MAC received any 311*5c1def83SBjoern A. Zeeb * data, and thus there will be no MPDU data. 312*5c1def83SBjoern A. Zeeb * 313*5c1def83SBjoern A. Zeeb * phy_err_during_mpdu_header 314*5c1def83SBjoern A. Zeeb * When set, a PHY error was received before MAC received the 315*5c1def83SBjoern A. Zeeb * complete MPDU header which was needed for proper decoding 316*5c1def83SBjoern A. Zeeb * 317*5c1def83SBjoern A. Zeeb * protocol_version_err 318*5c1def83SBjoern A. Zeeb * Set when RXPCU detected a version error in the Frame control 319*5c1def83SBjoern A. Zeeb * field 320*5c1def83SBjoern A. Zeeb * 321*5c1def83SBjoern A. Zeeb * ast_based_lookup_valid 322*5c1def83SBjoern A. Zeeb * When set, AST based lookup for this frame has found a valid 323*5c1def83SBjoern A. Zeeb * result. 324*5c1def83SBjoern A. Zeeb * 325*5c1def83SBjoern A. Zeeb * ranging 326*5c1def83SBjoern A. Zeeb * When set, a ranging NDPA or a ranging NDP was received. 327*5c1def83SBjoern A. Zeeb * 328*5c1def83SBjoern A. Zeeb * phy_ppdu_id 329*5c1def83SBjoern A. Zeeb * A ppdu counter value that PHY increments for every PPDU 330*5c1def83SBjoern A. Zeeb * received. The counter value wraps around. 331*5c1def83SBjoern A. Zeeb * 332*5c1def83SBjoern A. Zeeb * ast_index 333*5c1def83SBjoern A. Zeeb * 334*5c1def83SBjoern A. Zeeb * This field indicates the index of the AST entry corresponding 335*5c1def83SBjoern A. Zeeb * to this MPDU. It is provided by the GSE module instantiated 336*5c1def83SBjoern A. Zeeb * in RXPCU. 337*5c1def83SBjoern A. Zeeb * A value of 0xFFFF indicates an invalid AST index, meaning 338*5c1def83SBjoern A. Zeeb * that No AST entry was found or NO AST search was performed 339*5c1def83SBjoern A. Zeeb * 340*5c1def83SBjoern A. Zeeb * sw_peer_id 341*5c1def83SBjoern A. Zeeb * In case of ndp or phy_err or AST_based_lookup_valid == 0, 342*5c1def83SBjoern A. Zeeb * this field will be set to 0 343*5c1def83SBjoern A. Zeeb * This field indicates a unique peer identifier. It is set 344*5c1def83SBjoern A. Zeeb * equal to field 'sw_peer_id' from the AST entry 345*5c1def83SBjoern A. Zeeb * 346*5c1def83SBjoern A. Zeeb * frame_control_valid 347*5c1def83SBjoern A. Zeeb * When set, the field Mpdu_Frame_control_field has valid information 348*5c1def83SBjoern A. Zeeb * 349*5c1def83SBjoern A. Zeeb * frame_duration_valid 350*5c1def83SBjoern A. Zeeb * When set, the field Mpdu_duration_field has valid information 351*5c1def83SBjoern A. Zeeb * 352*5c1def83SBjoern A. Zeeb * mac_addr_ad1..4_valid 353*5c1def83SBjoern A. Zeeb * When set, the fields mac_addr_adx_..... have valid information 354*5c1def83SBjoern A. Zeeb * 355*5c1def83SBjoern A. Zeeb * mpdu_seq_ctrl_valid 356*5c1def83SBjoern A. Zeeb * 357*5c1def83SBjoern A. Zeeb * When set, the fields mpdu_sequence_control_field and mpdu_sequence_number 358*5c1def83SBjoern A. Zeeb * have valid information as well as field 359*5c1def83SBjoern A. Zeeb * For MPDUs without a sequence control field, this field will 360*5c1def83SBjoern A. Zeeb * not be set. 361*5c1def83SBjoern A. Zeeb * 362*5c1def83SBjoern A. Zeeb * mpdu_qos_ctrl_valid, mpdu_ht_ctrl_valid 363*5c1def83SBjoern A. Zeeb * 364*5c1def83SBjoern A. Zeeb * When set, the field mpdu_qos_control_field, mpdu_ht_control has valid 365*5c1def83SBjoern A. Zeeb * information, For MPDUs without a QoS,HT control field, this field 366*5c1def83SBjoern A. Zeeb * will not be set. 367*5c1def83SBjoern A. Zeeb * 368*5c1def83SBjoern A. Zeeb * frame_encryption_info_valid 369*5c1def83SBjoern A. Zeeb * 370*5c1def83SBjoern A. Zeeb * When set, the encryption related info fields, like IV and 371*5c1def83SBjoern A. Zeeb * PN are valid 372*5c1def83SBjoern A. Zeeb * For MPDUs that are not encrypted, this will not be set. 373*5c1def83SBjoern A. Zeeb * 374*5c1def83SBjoern A. Zeeb * mpdu_fragment_number 375*5c1def83SBjoern A. Zeeb * 376*5c1def83SBjoern A. Zeeb * Field only valid when Mpdu_sequence_control_valid is set 377*5c1def83SBjoern A. Zeeb * AND Fragment_flag is set. The fragment number from the 802.11 header 378*5c1def83SBjoern A. Zeeb * 379*5c1def83SBjoern A. Zeeb * more_fragment_flag 380*5c1def83SBjoern A. Zeeb * 381*5c1def83SBjoern A. Zeeb * The More Fragment bit setting from the MPDU header of the 382*5c1def83SBjoern A. Zeeb * received frame 383*5c1def83SBjoern A. Zeeb * 384*5c1def83SBjoern A. Zeeb * fr_ds 385*5c1def83SBjoern A. Zeeb * 386*5c1def83SBjoern A. Zeeb * Field only valid when Mpdu_frame_control_valid is set 387*5c1def83SBjoern A. Zeeb * Set if the from DS bit is set in the frame control. 388*5c1def83SBjoern A. Zeeb * 389*5c1def83SBjoern A. Zeeb * to_ds 390*5c1def83SBjoern A. Zeeb * 391*5c1def83SBjoern A. Zeeb * Field only valid when Mpdu_frame_control_valid is set 392*5c1def83SBjoern A. Zeeb * Set if the to DS bit is set in the frame control. 393*5c1def83SBjoern A. Zeeb * 394*5c1def83SBjoern A. Zeeb * encrypted 395*5c1def83SBjoern A. Zeeb * 396*5c1def83SBjoern A. Zeeb * Field only valid when Mpdu_frame_control_valid is set. 397*5c1def83SBjoern A. Zeeb * Protected bit from the frame control. 398*5c1def83SBjoern A. Zeeb * 399*5c1def83SBjoern A. Zeeb * mpdu_retry 400*5c1def83SBjoern A. Zeeb * Field only valid when Mpdu_frame_control_valid is set. 401*5c1def83SBjoern A. Zeeb * Retry bit from the frame control. Only valid when first_msdu is set 402*5c1def83SBjoern A. Zeeb * 403*5c1def83SBjoern A. Zeeb * mpdu_sequence_number 404*5c1def83SBjoern A. Zeeb * Field only valid when Mpdu_sequence_control_valid is set. 405*5c1def83SBjoern A. Zeeb * 406*5c1def83SBjoern A. Zeeb * The sequence number from the 802.11 header. 407*5c1def83SBjoern A. Zeeb * key_id 408*5c1def83SBjoern A. Zeeb * The key ID octet from the IV. 409*5c1def83SBjoern A. Zeeb * Field only valid when Frame_encryption_info_valid is set 410*5c1def83SBjoern A. Zeeb * 411*5c1def83SBjoern A. Zeeb * new_peer_entry 412*5c1def83SBjoern A. Zeeb * Set if new RX_PEER_ENTRY TLV follows. If clear, RX_PEER_ENTRY 413*5c1def83SBjoern A. Zeeb * doesn't follow so RX DECRYPTION module either uses old peer 414*5c1def83SBjoern A. Zeeb * entry or not decrypt. 415*5c1def83SBjoern A. Zeeb * 416*5c1def83SBjoern A. Zeeb * decrypt_needed 417*5c1def83SBjoern A. Zeeb * When RXPCU sets bit 'ast_index_not_found or ast_index_timeout', 418*5c1def83SBjoern A. Zeeb * RXPCU will also ensure that this bit is NOT set. CRYPTO for that 419*5c1def83SBjoern A. Zeeb * reason only needs to evaluate this bit and non of the other ones 420*5c1def83SBjoern A. Zeeb * 421*5c1def83SBjoern A. Zeeb * decap_type 422*5c1def83SBjoern A. Zeeb * Used by the OLE during decapsulation. Values are defined in 423*5c1def83SBjoern A. Zeeb * enum %MPDU_START_DECAP_TYPE_*. 424*5c1def83SBjoern A. Zeeb * 425*5c1def83SBjoern A. Zeeb * rx_insert_vlan_c_tag_padding 426*5c1def83SBjoern A. Zeeb * rx_insert_vlan_s_tag_padding 427*5c1def83SBjoern A. Zeeb * Insert 4 byte of all zeros as VLAN tag or double VLAN tag if 428*5c1def83SBjoern A. Zeeb * the rx payload does not have VLAN. 429*5c1def83SBjoern A. Zeeb * 430*5c1def83SBjoern A. Zeeb * strip_vlan_c_tag_decap 431*5c1def83SBjoern A. Zeeb * strip_vlan_s_tag_decap 432*5c1def83SBjoern A. Zeeb * Strip VLAN or double VLAN during decapsulation. 433*5c1def83SBjoern A. Zeeb * 434*5c1def83SBjoern A. Zeeb * pre_delim_count 435*5c1def83SBjoern A. Zeeb * The number of delimiters before this MPDU. Note that this 436*5c1def83SBjoern A. Zeeb * number is cleared at PPDU start. If this MPDU is the first 437*5c1def83SBjoern A. Zeeb * received MPDU in the PPDU and this MPDU gets filtered-in, 438*5c1def83SBjoern A. Zeeb * this field will indicate the number of delimiters located 439*5c1def83SBjoern A. Zeeb * after the last MPDU in the previous PPDU. 440*5c1def83SBjoern A. Zeeb * 441*5c1def83SBjoern A. Zeeb * If this MPDU is located after the first received MPDU in 442*5c1def83SBjoern A. Zeeb * an PPDU, this field will indicate the number of delimiters 443*5c1def83SBjoern A. Zeeb * located between the previous MPDU and this MPDU. 444*5c1def83SBjoern A. Zeeb * 445*5c1def83SBjoern A. Zeeb * ampdu_flag 446*5c1def83SBjoern A. Zeeb * Received frame was part of an A-MPDU. 447*5c1def83SBjoern A. Zeeb * 448*5c1def83SBjoern A. Zeeb * bar_frame 449*5c1def83SBjoern A. Zeeb * Received frame is a BAR frame 450*5c1def83SBjoern A. Zeeb * 451*5c1def83SBjoern A. Zeeb * raw_mpdu 452*5c1def83SBjoern A. Zeeb * Set when no 802.11 to nwifi/ethernet hdr conversion is done 453*5c1def83SBjoern A. Zeeb * 454*5c1def83SBjoern A. Zeeb * mpdu_length 455*5c1def83SBjoern A. Zeeb * MPDU length before decapsulation. 456*5c1def83SBjoern A. Zeeb * 457*5c1def83SBjoern A. Zeeb * first_mpdu 458*5c1def83SBjoern A. Zeeb * Indicates the first MSDU of the PPDU. If both first_mpdu 459*5c1def83SBjoern A. Zeeb * and last_mpdu are set in the MSDU then this is a not an 460*5c1def83SBjoern A. Zeeb * A-MPDU frame but a stand alone MPDU. Interior MPDU in an 461*5c1def83SBjoern A. Zeeb * A-MPDU shall have both first_mpdu and last_mpdu bits set to 462*5c1def83SBjoern A. Zeeb * 0. The PPDU start status will only be valid when this bit 463*5c1def83SBjoern A. Zeeb * is set. 464*5c1def83SBjoern A. Zeeb * 465*5c1def83SBjoern A. Zeeb * mcast_bcast 466*5c1def83SBjoern A. Zeeb * Multicast / broadcast indicator. Only set when the MAC 467*5c1def83SBjoern A. Zeeb * address 1 bit 0 is set indicating mcast/bcast and the BSSID 468*5c1def83SBjoern A. Zeeb * matches one of the 4 BSSID registers. Only set when 469*5c1def83SBjoern A. Zeeb * first_msdu is set. 470*5c1def83SBjoern A. Zeeb * 471*5c1def83SBjoern A. Zeeb * ast_index_not_found 472*5c1def83SBjoern A. Zeeb * Only valid when first_msdu is set. Indicates no AST matching 473*5c1def83SBjoern A. Zeeb * entries within the max search count. 474*5c1def83SBjoern A. Zeeb * 475*5c1def83SBjoern A. Zeeb * ast_index_timeout 476*5c1def83SBjoern A. Zeeb * Only valid when first_msdu is set. Indicates an unsuccessful 477*5c1def83SBjoern A. Zeeb * search in the address search table due to timeout. 478*5c1def83SBjoern A. Zeeb * 479*5c1def83SBjoern A. Zeeb * power_mgmt 480*5c1def83SBjoern A. Zeeb * Power management bit set in the 802.11 header. Only set 481*5c1def83SBjoern A. Zeeb * when first_msdu is set. 482*5c1def83SBjoern A. Zeeb * 483*5c1def83SBjoern A. Zeeb * non_qos 484*5c1def83SBjoern A. Zeeb * Set if packet is not a non-QoS data frame. Only set when 485*5c1def83SBjoern A. Zeeb * first_msdu is set. 486*5c1def83SBjoern A. Zeeb * 487*5c1def83SBjoern A. Zeeb * null_data 488*5c1def83SBjoern A. Zeeb * Set if frame type indicates either null data or QoS null 489*5c1def83SBjoern A. Zeeb * data format. Only set when first_msdu is set. 490*5c1def83SBjoern A. Zeeb * 491*5c1def83SBjoern A. Zeeb * mgmt_type 492*5c1def83SBjoern A. Zeeb * Set if packet is a management packet. Only set when 493*5c1def83SBjoern A. Zeeb * first_msdu is set. 494*5c1def83SBjoern A. Zeeb * 495*5c1def83SBjoern A. Zeeb * ctrl_type 496*5c1def83SBjoern A. Zeeb * Set if packet is a control packet. Only set when first_msdu 497*5c1def83SBjoern A. Zeeb * is set. 498*5c1def83SBjoern A. Zeeb * 499*5c1def83SBjoern A. Zeeb * more_data 500*5c1def83SBjoern A. Zeeb * Set if more bit in frame control is set. Only set when 501*5c1def83SBjoern A. Zeeb * first_msdu is set. 502*5c1def83SBjoern A. Zeeb * 503*5c1def83SBjoern A. Zeeb * eosp 504*5c1def83SBjoern A. Zeeb * Set if the EOSP (end of service period) bit in the QoS 505*5c1def83SBjoern A. Zeeb * control field is set. Only set when first_msdu is set. 506*5c1def83SBjoern A. Zeeb * 507*5c1def83SBjoern A. Zeeb * 508*5c1def83SBjoern A. Zeeb * fragment_flag 509*5c1def83SBjoern A. Zeeb * Fragment indication 510*5c1def83SBjoern A. Zeeb * 511*5c1def83SBjoern A. Zeeb * order 512*5c1def83SBjoern A. Zeeb * Set if the order bit in the frame control is set. Only 513*5c1def83SBjoern A. Zeeb * set when first_msdu is set. 514*5c1def83SBjoern A. Zeeb * 515*5c1def83SBjoern A. Zeeb * u_apsd_trigger 516*5c1def83SBjoern A. Zeeb * U-APSD trigger frame 517*5c1def83SBjoern A. Zeeb * 518*5c1def83SBjoern A. Zeeb * encrypt_required 519*5c1def83SBjoern A. Zeeb * Indicates that this data type frame is not encrypted even if 520*5c1def83SBjoern A. Zeeb * the policy for this MPDU requires encryption as indicated in 521*5c1def83SBjoern A. Zeeb * the peer table key type. 522*5c1def83SBjoern A. Zeeb * 523*5c1def83SBjoern A. Zeeb * directed 524*5c1def83SBjoern A. Zeeb * MPDU is a directed packet which means that the RA matched 525*5c1def83SBjoern A. Zeeb * our STA addresses. In proxySTA it means that the TA matched 526*5c1def83SBjoern A. Zeeb * an entry in our address search table with the corresponding 527*5c1def83SBjoern A. Zeeb * 'no_ack' bit is the address search entry cleared. 528*5c1def83SBjoern A. Zeeb * amsdu_present 529*5c1def83SBjoern A. Zeeb * AMSDU present 530*5c1def83SBjoern A. Zeeb * 531*5c1def83SBjoern A. Zeeb * mpdu_frame_control_field 532*5c1def83SBjoern A. Zeeb * Frame control field in header. Only valid when the field is marked valid. 533*5c1def83SBjoern A. Zeeb * 534*5c1def83SBjoern A. Zeeb * mpdu_duration_field 535*5c1def83SBjoern A. Zeeb * Duration field in header. Only valid when the field is marked valid. 536*5c1def83SBjoern A. Zeeb * 537*5c1def83SBjoern A. Zeeb * mac_addr_adx 538*5c1def83SBjoern A. Zeeb * MAC addresses in the received frame. Only valid when corresponding 539*5c1def83SBjoern A. Zeeb * address valid bit is set 540*5c1def83SBjoern A. Zeeb * 541*5c1def83SBjoern A. Zeeb * mpdu_qos_control_field, mpdu_ht_control_field 542*5c1def83SBjoern A. Zeeb * QoS/HT control fields from header. Valid only when corresponding fields 543*5c1def83SBjoern A. Zeeb * are marked valid 544*5c1def83SBjoern A. Zeeb * 545*5c1def83SBjoern A. Zeeb * vdev_id 546*5c1def83SBjoern A. Zeeb * Virtual device associated with this peer 547*5c1def83SBjoern A. Zeeb * RXOLE uses this to determine intra-BSS routing. 548*5c1def83SBjoern A. Zeeb * 549*5c1def83SBjoern A. Zeeb * service_code 550*5c1def83SBjoern A. Zeeb * Opaque service code between PPE and Wi-Fi 551*5c1def83SBjoern A. Zeeb * This field gets passed on by REO to PPE in the EDMA descriptor 552*5c1def83SBjoern A. Zeeb * ('REO_TO_PPE_RING'). 553*5c1def83SBjoern A. Zeeb * 554*5c1def83SBjoern A. Zeeb * priority_valid 555*5c1def83SBjoern A. Zeeb * This field gets passed on by REO to PPE in the EDMA descriptor 556*5c1def83SBjoern A. Zeeb * ('REO_TO_PPE_RING'). 557*5c1def83SBjoern A. Zeeb * 558*5c1def83SBjoern A. Zeeb * src_info 559*5c1def83SBjoern A. Zeeb * Source (virtual) device/interface info. associated with 560*5c1def83SBjoern A. Zeeb * this peer 561*5c1def83SBjoern A. Zeeb * This field gets passed on by REO to PPE in the EDMA descriptor 562*5c1def83SBjoern A. Zeeb * ('REO_TO_PPE_RING'). 563*5c1def83SBjoern A. Zeeb * 564*5c1def83SBjoern A. Zeeb * multi_link_addr_ad1_ad2_valid 565*5c1def83SBjoern A. Zeeb * If set, Rx OLE shall convert Address1 and Address2 of received 566*5c1def83SBjoern A. Zeeb * data frames to multi-link addresses during decapsulation to eth/nwifi 567*5c1def83SBjoern A. Zeeb * 568*5c1def83SBjoern A. Zeeb * multi_link_addr_ad1,ad2 569*5c1def83SBjoern A. Zeeb * Multi-link receiver address1,2. Only valid when corresponding 570*5c1def83SBjoern A. Zeeb * valid bit is set 571*5c1def83SBjoern A. Zeeb * 572*5c1def83SBjoern A. Zeeb * authorize_to_send_wds 573*5c1def83SBjoern A. Zeeb * If not set, RXDMA shall perform error-routing for WDS packets 574*5c1def83SBjoern A. Zeeb * as the sender is not authorized and might misuse WDS frame 575*5c1def83SBjoern A. Zeeb * format to inject packets with arbitrary DA/SA. 576*5c1def83SBjoern A. Zeeb * 577*5c1def83SBjoern A. Zeeb */ 578*5c1def83SBjoern A. Zeeb 579*5c1def83SBjoern A. Zeeb enum rx_msdu_start_pkt_type { 580*5c1def83SBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11A, 581*5c1def83SBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11B, 582*5c1def83SBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11N, 583*5c1def83SBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11AC, 584*5c1def83SBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11AX, 585*5c1def83SBjoern A. Zeeb }; 586*5c1def83SBjoern A. Zeeb 587*5c1def83SBjoern A. Zeeb enum rx_msdu_start_sgi { 588*5c1def83SBjoern A. Zeeb RX_MSDU_START_SGI_0_8_US, 589*5c1def83SBjoern A. Zeeb RX_MSDU_START_SGI_0_4_US, 590*5c1def83SBjoern A. Zeeb RX_MSDU_START_SGI_1_6_US, 591*5c1def83SBjoern A. Zeeb RX_MSDU_START_SGI_3_2_US, 592*5c1def83SBjoern A. Zeeb }; 593*5c1def83SBjoern A. Zeeb 594*5c1def83SBjoern A. Zeeb enum rx_msdu_start_recv_bw { 595*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECV_BW_20MHZ, 596*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECV_BW_40MHZ, 597*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECV_BW_80MHZ, 598*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECV_BW_160MHZ, 599*5c1def83SBjoern A. Zeeb }; 600*5c1def83SBjoern A. Zeeb 601*5c1def83SBjoern A. Zeeb enum rx_msdu_start_reception_type { 602*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_SU, 603*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_DL_MU_MIMO, 604*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_DL_MU_OFDMA, 605*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_DL_MU_OFDMA_MIMO, 606*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_UL_MU_MIMO, 607*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_UL_MU_OFDMA, 608*5c1def83SBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_UL_MU_OFDMA_MIMO, 609*5c1def83SBjoern A. Zeeb }; 610*5c1def83SBjoern A. Zeeb 611*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO0_RXPCU_MPDU_FITLER GENMASK(1, 0) 612*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO0_SW_FRAME_GRP_ID GENMASK(8, 2) 613*5c1def83SBjoern A. Zeeb 614*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO1_REPORTED_MPDU_LENGTH GENMASK(13, 0) 615*5c1def83SBjoern A. Zeeb 616*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO2_CCE_SUPER_RULE GENMASK(13, 8) 617*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO2_CCND_TRUNCATE BIT(14) 618*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO2_CCND_CCE_DIS BIT(15) 619*5c1def83SBjoern A. Zeeb 620*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO3_DA_OFFSET GENMASK(5, 0) 621*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO3_SA_OFFSET GENMASK(11, 6) 622*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO3_DA_OFFSET_VALID BIT(12) 623*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO3_SA_OFFSET_VALID BIT(13) 624*5c1def83SBjoern A. Zeeb 625*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO4_TCP_FLAG GENMASK(8, 0) 626*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO4_LRO_ELIGIBLE BIT(9) 627*5c1def83SBjoern A. Zeeb 628*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_SA_IDX_TIMEOUT BIT(0) 629*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_DA_IDX_TIMEOUT BIT(1) 630*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_TO_DS BIT(2) 631*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_TID GENMASK(6, 3) 632*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_SA_IS_VALID BIT(7) 633*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_DA_IS_VALID BIT(8) 634*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_DA_IS_MCBC BIT(9) 635*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_L3_HDR_PADDING GENMASK(11, 10) 636*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_FIRST_MSDU BIT(12) 637*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_LAST_MSDU BIT(13) 638*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_FROM_DS BIT(14) 639*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO5_IP_CHKSUM_FAIL_COPY BIT(15) 640*5c1def83SBjoern A. Zeeb 641*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO6_MSDU_DROP BIT(0) 642*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO6_REO_DEST_IND GENMASK(5, 1) 643*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO6_FLOW_IDX GENMASK(25, 6) 644*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO6_USE_PPE BIT(26) 645*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO6_MESH_STA GENMASK(28, 27) 646*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO6_VLAN_CTAG_STRIPPED BIT(29) 647*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO6_VLAN_STAG_STRIPPED BIT(30) 648*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO6_FRAGMENT_FLAG BIT(31) 649*5c1def83SBjoern A. Zeeb 650*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_AGGR_COUNT GENMASK(7, 0) 651*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_FLOW_AGGR_CONTN BIT(8) 652*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_FISA_TIMEOUT BIT(9) 653*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_TCPUDP_CSUM_FAIL_CPY BIT(10) 654*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_MSDU_LIMIT_ERROR BIT(11) 655*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_FLOW_IDX_TIMEOUT BIT(12) 656*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_FLOW_IDX_INVALID BIT(13) 657*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_CCE_MATCH BIT(14) 658*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO7_AMSDU_PARSER_ERR BIT(15) 659*5c1def83SBjoern A. Zeeb 660*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO8_KEY_ID GENMASK(7, 0) 661*5c1def83SBjoern A. Zeeb 662*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO9_SERVICE_CODE GENMASK(14, 6) 663*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO9_PRIORITY_VALID BIT(15) 664*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO9_INRA_BSS BIT(16) 665*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO9_DEST_CHIP_ID GENMASK(18, 17) 666*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO9_MCAST_ECHO BIT(19) 667*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO9_WDS_LEARN_EVENT BIT(20) 668*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO9_WDS_ROAM_EVENT BIT(21) 669*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO9_WDS_KEEP_ALIVE_EVENT BIT(22) 670*5c1def83SBjoern A. Zeeb 671*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO10_MSDU_LENGTH GENMASK(13, 0) 672*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO10_STBC BIT(14) 673*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO10_IPSEC_ESP BIT(15) 674*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO10_L3_OFFSET GENMASK(22, 16) 675*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO10_IPSEC_AH BIT(23) 676*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO10_L4_OFFSET GENMASK(31, 24) 677*5c1def83SBjoern A. Zeeb 678*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_MSDU_NUMBER GENMASK(7, 0) 679*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_DECAP_FORMAT GENMASK(9, 8) 680*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_IPV4 BIT(10) 681*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_IPV6 BIT(11) 682*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_TCP BIT(12) 683*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_UDP BIT(13) 684*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_IP_FRAG BIT(14) 685*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_TCP_ONLY_ACK BIT(15) 686*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_DA_IS_BCAST_MCAST BIT(16) 687*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_SEL_TOEPLITZ_HASH GENMASK(18, 17) 688*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_IP_FIXED_HDR_VALID BIT(19) 689*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_IP_EXTN_HDR_VALID BIT(20) 690*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_IP_TCP_UDP_HDR_VALID BIT(21) 691*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_MESH_CTRL_PRESENT BIT(22) 692*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_LDPC BIT(23) 693*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO11_IP4_IP6_NXT_HDR GENMASK(31, 24) 694*5c1def83SBjoern A. Zeeb 695*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO12_USER_RSSI GENMASK(7, 0) 696*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO12_PKT_TYPE GENMASK(11, 8) 697*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO12_SGI GENMASK(13, 12) 698*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO12_RATE_MCS GENMASK(17, 14) 699*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO12_RECV_BW GENMASK(20, 18) 700*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO12_RECEPTION_TYPE GENMASK(23, 21) 701*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO12_MIMO_SS_BITMAP GENMASK(30, 24) 702*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO12_MIMO_DONE_COPY BIT(31) 703*5c1def83SBjoern A. Zeeb 704*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_FIRST_MPDU BIT(0) 705*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_MCAST_BCAST BIT(2) 706*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_AST_IDX_NOT_FOUND BIT(3) 707*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_AST_IDX_TIMEDOUT BIT(4) 708*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_POWER_MGMT BIT(5) 709*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_NON_QOS BIT(6) 710*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_NULL_DATA BIT(7) 711*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_MGMT_TYPE BIT(8) 712*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_CTRL_TYPE BIT(9) 713*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_MORE_DATA BIT(10) 714*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_EOSP BIT(11) 715*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_A_MSDU_ERROR BIT(12) 716*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_ORDER BIT(14) 717*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_WIFI_PARSER_ERR BIT(15) 718*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_OVERFLOW_ERR BIT(16) 719*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_MSDU_LEN_ERR BIT(17) 720*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_TCP_UDP_CKSUM_FAIL BIT(18) 721*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_IP_CKSUM_FAIL BIT(19) 722*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_SA_IDX_INVALID BIT(20) 723*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_DA_IDX_INVALID BIT(21) 724*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_AMSDU_ADDR_MISMATCH BIT(22) 725*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_RX_IN_TX_DECRYPT_BYP BIT(23) 726*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_ENCRYPT_REQUIRED BIT(24) 727*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_DIRECTED BIT(25) 728*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_BUFFER_FRAGMENT BIT(26) 729*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_MPDU_LEN_ERR BIT(27) 730*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_TKIP_MIC_ERR BIT(28) 731*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_DECRYPT_ERR BIT(29) 732*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_UNDECRYPT_FRAME_ERR BIT(30) 733*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO13_FCS_ERR BIT(31) 734*5c1def83SBjoern A. Zeeb 735*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO14_DECRYPT_STATUS_CODE GENMASK(12, 10) 736*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO14_RX_BITMAP_NOT_UPDED BIT(13) 737*5c1def83SBjoern A. Zeeb #define RX_MSDU_END_INFO14_MSDU_DONE BIT(31) 738*5c1def83SBjoern A. Zeeb 739*5c1def83SBjoern A. Zeeb struct rx_msdu_end_qcn9274 { 740*5c1def83SBjoern A. Zeeb __le16 info0; 741*5c1def83SBjoern A. Zeeb __le16 phy_ppdu_id; 742*5c1def83SBjoern A. Zeeb __le16 ip_hdr_cksum; 743*5c1def83SBjoern A. Zeeb __le16 info1; 744*5c1def83SBjoern A. Zeeb __le16 info2; 745*5c1def83SBjoern A. Zeeb __le16 cumulative_l3_checksum; 746*5c1def83SBjoern A. Zeeb __le32 rule_indication0; 747*5c1def83SBjoern A. Zeeb __le32 ipv6_options_crc; 748*5c1def83SBjoern A. Zeeb __le16 info3; 749*5c1def83SBjoern A. Zeeb __le16 l3_type; 750*5c1def83SBjoern A. Zeeb __le32 rule_indication1; 751*5c1def83SBjoern A. Zeeb __le32 tcp_seq_num; 752*5c1def83SBjoern A. Zeeb __le32 tcp_ack_num; 753*5c1def83SBjoern A. Zeeb __le16 info4; 754*5c1def83SBjoern A. Zeeb __le16 window_size; 755*5c1def83SBjoern A. Zeeb __le16 sa_sw_peer_id; 756*5c1def83SBjoern A. Zeeb __le16 info5; 757*5c1def83SBjoern A. Zeeb __le16 sa_idx; 758*5c1def83SBjoern A. Zeeb __le16 da_idx_or_sw_peer_id; 759*5c1def83SBjoern A. Zeeb __le32 info6; 760*5c1def83SBjoern A. Zeeb __le32 fse_metadata; 761*5c1def83SBjoern A. Zeeb __le16 cce_metadata; 762*5c1def83SBjoern A. Zeeb __le16 tcp_udp_cksum; 763*5c1def83SBjoern A. Zeeb __le16 info7; 764*5c1def83SBjoern A. Zeeb __le16 cumulative_ip_length; 765*5c1def83SBjoern A. Zeeb __le32 info8; 766*5c1def83SBjoern A. Zeeb __le32 info9; 767*5c1def83SBjoern A. Zeeb __le32 info10; 768*5c1def83SBjoern A. Zeeb __le32 info11; 769*5c1def83SBjoern A. Zeeb __le16 vlan_ctag_ci; 770*5c1def83SBjoern A. Zeeb __le16 vlan_stag_ci; 771*5c1def83SBjoern A. Zeeb __le32 peer_meta_data; 772*5c1def83SBjoern A. Zeeb __le32 info12; 773*5c1def83SBjoern A. Zeeb __le32 flow_id_toeplitz; 774*5c1def83SBjoern A. Zeeb __le32 ppdu_start_timestamp_63_32; 775*5c1def83SBjoern A. Zeeb __le32 phy_meta_data; 776*5c1def83SBjoern A. Zeeb __le32 ppdu_start_timestamp_31_0; 777*5c1def83SBjoern A. Zeeb __le32 toeplitz_hash_2_or_4; 778*5c1def83SBjoern A. Zeeb __le16 res0; 779*5c1def83SBjoern A. Zeeb __le16 sa_15_0; 780*5c1def83SBjoern A. Zeeb __le32 sa_47_16; 781*5c1def83SBjoern A. Zeeb __le32 info13; 782*5c1def83SBjoern A. Zeeb __le32 info14; 783*5c1def83SBjoern A. Zeeb } __packed; 784*5c1def83SBjoern A. Zeeb 785*5c1def83SBjoern A. Zeeb /* rx_msdu_end 786*5c1def83SBjoern A. Zeeb * 787*5c1def83SBjoern A. Zeeb * rxpcu_mpdu_filter_in_category 788*5c1def83SBjoern A. Zeeb * Field indicates what the reason was that this mpdu frame 789*5c1def83SBjoern A. Zeeb * was allowed to come into the receive path by rxpcu. Values 790*5c1def83SBjoern A. Zeeb * are defined in enum %RX_DESC_RXPCU_FILTER_*. 791*5c1def83SBjoern A. Zeeb * 792*5c1def83SBjoern A. Zeeb * sw_frame_group_id 793*5c1def83SBjoern A. Zeeb * SW processes frames based on certain classifications. Values 794*5c1def83SBjoern A. Zeeb * are defined in enum %RX_DESC_SW_FRAME_GRP_ID_*. 795*5c1def83SBjoern A. Zeeb * 796*5c1def83SBjoern A. Zeeb * phy_ppdu_id 797*5c1def83SBjoern A. Zeeb * A ppdu counter value that PHY increments for every PPDU 798*5c1def83SBjoern A. Zeeb * received. The counter value wraps around. 799*5c1def83SBjoern A. Zeeb * 800*5c1def83SBjoern A. Zeeb * ip_hdr_cksum 801*5c1def83SBjoern A. Zeeb * This can include the IP header checksum or the pseudo 802*5c1def83SBjoern A. Zeeb * header checksum used by TCP/UDP checksum. 803*5c1def83SBjoern A. Zeeb * 804*5c1def83SBjoern A. Zeeb * reported_mpdu_length 805*5c1def83SBjoern A. Zeeb * MPDU length before decapsulation. Only valid when first_msdu is 806*5c1def83SBjoern A. Zeeb * set. This field is taken directly from the length field of the 807*5c1def83SBjoern A. Zeeb * A-MPDU delimiter or the preamble length field for non-A-MPDU 808*5c1def83SBjoern A. Zeeb * frames. 809*5c1def83SBjoern A. Zeeb * 810*5c1def83SBjoern A. Zeeb * cce_super_rule 811*5c1def83SBjoern A. Zeeb * Indicates the super filter rule. 812*5c1def83SBjoern A. Zeeb * 813*5c1def83SBjoern A. Zeeb * cce_classify_not_done_truncate 814*5c1def83SBjoern A. Zeeb * Classification failed due to truncated frame. 815*5c1def83SBjoern A. Zeeb * 816*5c1def83SBjoern A. Zeeb * cce_classify_not_done_cce_dis 817*5c1def83SBjoern A. Zeeb * Classification failed due to CCE global disable 818*5c1def83SBjoern A. Zeeb * 819*5c1def83SBjoern A. Zeeb * cumulative_l3_checksum 820*5c1def83SBjoern A. Zeeb * FISA: IP header checksum including the total MSDU length 821*5c1def83SBjoern A. Zeeb * that is part of this flow aggregated so far, reported if 822*5c1def83SBjoern A. Zeeb * 'RXOLE_R0_FISA_CTRL. CHKSUM_CUM_IP_LEN_EN' is set 823*5c1def83SBjoern A. Zeeb * 824*5c1def83SBjoern A. Zeeb * rule_indication 825*5c1def83SBjoern A. Zeeb * Bitmap indicating which of rules have matched. 826*5c1def83SBjoern A. Zeeb * 827*5c1def83SBjoern A. Zeeb * ipv6_options_crc 828*5c1def83SBjoern A. Zeeb * 32 bit CRC computed out of IP v6 extension headers. 829*5c1def83SBjoern A. Zeeb * 830*5c1def83SBjoern A. Zeeb * da_offset 831*5c1def83SBjoern A. Zeeb * Offset into MSDU buffer for DA. 832*5c1def83SBjoern A. Zeeb * 833*5c1def83SBjoern A. Zeeb * sa_offset 834*5c1def83SBjoern A. Zeeb * Offset into MSDU buffer for SA. 835*5c1def83SBjoern A. Zeeb * 836*5c1def83SBjoern A. Zeeb * da_offset_valid 837*5c1def83SBjoern A. Zeeb * da_offset field is valid. This will be set to 0 in case 838*5c1def83SBjoern A. Zeeb * of a dynamic A-MSDU when DA is compressed. 839*5c1def83SBjoern A. Zeeb * 840*5c1def83SBjoern A. Zeeb * sa_offset_valid 841*5c1def83SBjoern A. Zeeb * sa_offset field is valid. This will be set to 0 in case 842*5c1def83SBjoern A. Zeeb * of a dynamic A-MSDU when SA is compressed. 843*5c1def83SBjoern A. Zeeb * 844*5c1def83SBjoern A. Zeeb * l3_type 845*5c1def83SBjoern A. Zeeb * The 16-bit type value indicating the type of L3 later 846*5c1def83SBjoern A. Zeeb * extracted from LLC/SNAP, set to zero if SNAP is not 847*5c1def83SBjoern A. Zeeb * available. 848*5c1def83SBjoern A. Zeeb * 849*5c1def83SBjoern A. Zeeb * tcp_seq_number 850*5c1def83SBjoern A. Zeeb * TCP sequence number. 851*5c1def83SBjoern A. Zeeb * 852*5c1def83SBjoern A. Zeeb * tcp_ack_number 853*5c1def83SBjoern A. Zeeb * TCP acknowledge number. 854*5c1def83SBjoern A. Zeeb * 855*5c1def83SBjoern A. Zeeb * tcp_flag 856*5c1def83SBjoern A. Zeeb * TCP flags {NS, CWR, ECE, URG, ACK, PSH, RST, SYN, FIN}. 857*5c1def83SBjoern A. Zeeb * 858*5c1def83SBjoern A. Zeeb * lro_eligible 859*5c1def83SBjoern A. Zeeb * Computed out of TCP and IP fields to indicate that this 860*5c1def83SBjoern A. Zeeb * MSDU is eligible for LRO. 861*5c1def83SBjoern A. Zeeb * 862*5c1def83SBjoern A. Zeeb * window_size 863*5c1def83SBjoern A. Zeeb * TCP receive window size. 864*5c1def83SBjoern A. Zeeb * 865*5c1def83SBjoern A. Zeeb * sa_sw_peer_id 866*5c1def83SBjoern A. Zeeb * sw_peer_id from the address search entry corresponding to the 867*5c1def83SBjoern A. Zeeb * source address of the MSDU. 868*5c1def83SBjoern A. Zeeb * 869*5c1def83SBjoern A. Zeeb * sa_idx_timeout 870*5c1def83SBjoern A. Zeeb * Indicates an unsuccessful MAC source address search due to the 871*5c1def83SBjoern A. Zeeb * expiring of the search timer. 872*5c1def83SBjoern A. Zeeb * 873*5c1def83SBjoern A. Zeeb * da_idx_timeout 874*5c1def83SBjoern A. Zeeb * Indicates an unsuccessful MAC destination address search due to 875*5c1def83SBjoern A. Zeeb * the expiring of the search timer. 876*5c1def83SBjoern A. Zeeb * 877*5c1def83SBjoern A. Zeeb * to_ds 878*5c1def83SBjoern A. Zeeb * Set if the to DS bit is set in the frame control. 879*5c1def83SBjoern A. Zeeb * 880*5c1def83SBjoern A. Zeeb * tid 881*5c1def83SBjoern A. Zeeb * TID field in the QoS control field 882*5c1def83SBjoern A. Zeeb * 883*5c1def83SBjoern A. Zeeb * sa_is_valid 884*5c1def83SBjoern A. Zeeb * Indicates that OLE found a valid SA entry. 885*5c1def83SBjoern A. Zeeb * 886*5c1def83SBjoern A. Zeeb * da_is_valid 887*5c1def83SBjoern A. Zeeb * Indicates that OLE found a valid DA entry. 888*5c1def83SBjoern A. Zeeb * 889*5c1def83SBjoern A. Zeeb * da_is_mcbc 890*5c1def83SBjoern A. Zeeb * Field Only valid if da_is_valid is set. Indicates the DA address 891*5c1def83SBjoern A. Zeeb * was a Multicast of Broadcast address. 892*5c1def83SBjoern A. Zeeb * 893*5c1def83SBjoern A. Zeeb * l3_header_padding 894*5c1def83SBjoern A. Zeeb * Number of bytes padded to make sure that the L3 header will 895*5c1def83SBjoern A. Zeeb * always start of a Dword boundary. 896*5c1def83SBjoern A. Zeeb * 897*5c1def83SBjoern A. Zeeb * first_msdu 898*5c1def83SBjoern A. Zeeb * Indicates the first MSDU of A-MSDU. If both first_msdu and 899*5c1def83SBjoern A. Zeeb * last_msdu are set in the MSDU then this is a non-aggregated MSDU 900*5c1def83SBjoern A. Zeeb * frame: normal MPDU. Interior MSDU in an A-MSDU shall have both 901*5c1def83SBjoern A. Zeeb * first_mpdu and last_mpdu bits set to 0. 902*5c1def83SBjoern A. Zeeb * 903*5c1def83SBjoern A. Zeeb * last_msdu 904*5c1def83SBjoern A. Zeeb * Indicates the last MSDU of the A-MSDU. MPDU end status is only 905*5c1def83SBjoern A. Zeeb * valid when last_msdu is set. 906*5c1def83SBjoern A. Zeeb * 907*5c1def83SBjoern A. Zeeb * fr_ds 908*5c1def83SBjoern A. Zeeb * Set if the from DS bit is set in the frame control. 909*5c1def83SBjoern A. Zeeb * 910*5c1def83SBjoern A. Zeeb * ip_chksum_fail_copy 911*5c1def83SBjoern A. Zeeb * Indicates that the computed checksum did not match the 912*5c1def83SBjoern A. Zeeb * checksum in the IP header. 913*5c1def83SBjoern A. Zeeb * 914*5c1def83SBjoern A. Zeeb * sa_idx 915*5c1def83SBjoern A. Zeeb * The offset in the address table which matches the MAC source 916*5c1def83SBjoern A. Zeeb * address. 917*5c1def83SBjoern A. Zeeb * 918*5c1def83SBjoern A. Zeeb * da_idx_or_sw_peer_id 919*5c1def83SBjoern A. Zeeb * Based on a register configuration in RXOLE, this field will 920*5c1def83SBjoern A. Zeeb * contain: 921*5c1def83SBjoern A. Zeeb * The offset in the address table which matches the MAC destination 922*5c1def83SBjoern A. Zeeb * address 923*5c1def83SBjoern A. Zeeb * OR: 924*5c1def83SBjoern A. Zeeb * sw_peer_id from the address search entry corresponding to 925*5c1def83SBjoern A. Zeeb * the destination address of the MSDU 926*5c1def83SBjoern A. Zeeb * 927*5c1def83SBjoern A. Zeeb * msdu_drop 928*5c1def83SBjoern A. Zeeb * REO shall drop this MSDU and not forward it to any other ring. 929*5c1def83SBjoern A. Zeeb * 930*5c1def83SBjoern A. Zeeb * The id of the reo exit ring where the msdu frame shall push 931*5c1def83SBjoern A. Zeeb * after (MPDU level) reordering has finished. Values are defined 932*5c1def83SBjoern A. Zeeb * in enum %HAL_RX_MSDU_DESC_REO_DEST_IND_. 933*5c1def83SBjoern A. Zeeb * 934*5c1def83SBjoern A. Zeeb * flow_idx 935*5c1def83SBjoern A. Zeeb * Flow table index. 936*5c1def83SBjoern A. Zeeb * 937*5c1def83SBjoern A. Zeeb * use_ppe 938*5c1def83SBjoern A. Zeeb * Indicates to RXDMA to ignore the REO_destination_indication 939*5c1def83SBjoern A. Zeeb * and use a programmed value corresponding to the REO2PPE 940*5c1def83SBjoern A. Zeeb * ring 941*5c1def83SBjoern A. Zeeb * 942*5c1def83SBjoern A. Zeeb * mesh_sta 943*5c1def83SBjoern A. Zeeb * When set, this is a Mesh (11s) STA. 944*5c1def83SBjoern A. Zeeb * 945*5c1def83SBjoern A. Zeeb * vlan_ctag_stripped 946*5c1def83SBjoern A. Zeeb * Set by RXOLE if it stripped 4-bytes of C-VLAN Tag from the 947*5c1def83SBjoern A. Zeeb * packet 948*5c1def83SBjoern A. Zeeb * 949*5c1def83SBjoern A. Zeeb * vlan_stag_stripped 950*5c1def83SBjoern A. Zeeb * Set by RXOLE if it stripped 4-bytes of S-VLAN Tag from the 951*5c1def83SBjoern A. Zeeb * packet 952*5c1def83SBjoern A. Zeeb * 953*5c1def83SBjoern A. Zeeb * fragment_flag 954*5c1def83SBjoern A. Zeeb * Indicates that this is an 802.11 fragment frame. This is 955*5c1def83SBjoern A. Zeeb * set when either the more_frag bit is set in the frame control 956*5c1def83SBjoern A. Zeeb * or the fragment number is not zero. Only set when first_msdu 957*5c1def83SBjoern A. Zeeb * is set. 958*5c1def83SBjoern A. Zeeb * 959*5c1def83SBjoern A. Zeeb * fse_metadata 960*5c1def83SBjoern A. Zeeb * FSE related meta data. 961*5c1def83SBjoern A. Zeeb * 962*5c1def83SBjoern A. Zeeb * cce_metadata 963*5c1def83SBjoern A. Zeeb * CCE related meta data. 964*5c1def83SBjoern A. Zeeb * 965*5c1def83SBjoern A. Zeeb * tcp_udp_chksum 966*5c1def83SBjoern A. Zeeb * The value of the computed TCP/UDP checksum. A mode bit 967*5c1def83SBjoern A. Zeeb * selects whether this checksum is the full checksum or the 968*5c1def83SBjoern A. Zeeb * partial checksum which does not include the pseudo header. 969*5c1def83SBjoern A. Zeeb * 970*5c1def83SBjoern A. Zeeb * aggregation_count 971*5c1def83SBjoern A. Zeeb * Number of MSDU's aggregated so far 972*5c1def83SBjoern A. Zeeb * 973*5c1def83SBjoern A. Zeeb * flow_aggregation_continuation 974*5c1def83SBjoern A. Zeeb * To indicate that this MSDU can be aggregated with 975*5c1def83SBjoern A. Zeeb * the previous packet with the same flow id 976*5c1def83SBjoern A. Zeeb * 977*5c1def83SBjoern A. Zeeb * fisa_timeout 978*5c1def83SBjoern A. Zeeb * To indicate that the aggregation has restarted for 979*5c1def83SBjoern A. Zeeb * this flow due to timeout 980*5c1def83SBjoern A. Zeeb * 981*5c1def83SBjoern A. Zeeb * tcp_udp_chksum_fail 982*5c1def83SBjoern A. Zeeb * Indicates that the computed checksum (tcp_udp_chksum) did 983*5c1def83SBjoern A. Zeeb * not match the checksum in the TCP/UDP header. 984*5c1def83SBjoern A. Zeeb * 985*5c1def83SBjoern A. Zeeb * msdu_limit_error 986*5c1def83SBjoern A. Zeeb * Indicates that the MSDU threshold was exceeded and thus all the 987*5c1def83SBjoern A. Zeeb * rest of the MSDUs will not be scattered and will not be 988*5c1def83SBjoern A. Zeeb * decapsulated but will be DMA'ed in RAW format as a single MSDU. 989*5c1def83SBjoern A. Zeeb * 990*5c1def83SBjoern A. Zeeb * flow_idx_timeout 991*5c1def83SBjoern A. Zeeb * Indicates an unsuccessful flow search due to the expiring of 992*5c1def83SBjoern A. Zeeb * the search timer. 993*5c1def83SBjoern A. Zeeb * 994*5c1def83SBjoern A. Zeeb * flow_idx_invalid 995*5c1def83SBjoern A. Zeeb * flow id is not valid. 996*5c1def83SBjoern A. Zeeb * 997*5c1def83SBjoern A. Zeeb * cce_match 998*5c1def83SBjoern A. Zeeb * Indicates that this status has a corresponding MSDU that 999*5c1def83SBjoern A. Zeeb * requires FW processing. The OLE will have classification 1000*5c1def83SBjoern A. Zeeb * ring mask registers which will indicate the ring(s) for 1001*5c1def83SBjoern A. Zeeb * packets and descriptors which need FW attention. 1002*5c1def83SBjoern A. Zeeb * 1003*5c1def83SBjoern A. Zeeb * amsdu_parser_error 1004*5c1def83SBjoern A. Zeeb * A-MSDU could not be properly de-agregated. 1005*5c1def83SBjoern A. Zeeb * 1006*5c1def83SBjoern A. Zeeb * cumulative_ip_length 1007*5c1def83SBjoern A. Zeeb * Total MSDU length that is part of this flow aggregated 1008*5c1def83SBjoern A. Zeeb * so far 1009*5c1def83SBjoern A. Zeeb * 1010*5c1def83SBjoern A. Zeeb * key_id 1011*5c1def83SBjoern A. Zeeb * The key ID octet from the IV. Only valid when first_msdu is set. 1012*5c1def83SBjoern A. Zeeb * 1013*5c1def83SBjoern A. Zeeb * service_code 1014*5c1def83SBjoern A. Zeeb * Opaque service code between PPE and Wi-Fi 1015*5c1def83SBjoern A. Zeeb * 1016*5c1def83SBjoern A. Zeeb * priority_valid 1017*5c1def83SBjoern A. Zeeb * This field gets passed on by REO to PPE in the EDMA descriptor 1018*5c1def83SBjoern A. Zeeb * 1019*5c1def83SBjoern A. Zeeb * intra_bss 1020*5c1def83SBjoern A. Zeeb * This packet needs intra-BSS routing by SW as the 'vdev_id' 1021*5c1def83SBjoern A. Zeeb * for the destination is the same as 'vdev_id' (from 'RX_MPDU_PCU_START') 1022*5c1def83SBjoern A. Zeeb * that this MSDU was got in. 1023*5c1def83SBjoern A. Zeeb * 1024*5c1def83SBjoern A. Zeeb * dest_chip_id 1025*5c1def83SBjoern A. Zeeb * If intra_bss is set, copied by RXOLE from 'ADDR_SEARCH_ENTRY' 1026*5c1def83SBjoern A. Zeeb * to support intra-BSS routing with multi-chip multi-link 1027*5c1def83SBjoern A. Zeeb * operation. This indicates into which chip's TCL the packet should be 1028*5c1def83SBjoern A. Zeeb * queueued 1029*5c1def83SBjoern A. Zeeb * 1030*5c1def83SBjoern A. Zeeb * multicast_echo 1031*5c1def83SBjoern A. Zeeb * If set, this packet is a multicast echo, i.e. the DA is 1032*5c1def83SBjoern A. Zeeb * multicast and Rx OLE SA search with mcast_echo_check = 1 1033*5c1def83SBjoern A. Zeeb * passed. RXDMA should release such packets to WBM. 1034*5c1def83SBjoern A. Zeeb * 1035*5c1def83SBjoern A. Zeeb * wds_learning_event 1036*5c1def83SBjoern A. Zeeb * If set, this packet has an SA search failure with WDS learning 1037*5c1def83SBjoern A. Zeeb * enabled for the peer. RXOLE should route this TLV to the 1038*5c1def83SBjoern A. Zeeb * RXDMA0 status ring to notify FW. 1039*5c1def83SBjoern A. Zeeb * 1040*5c1def83SBjoern A. Zeeb * wds_roaming_event 1041*5c1def83SBjoern A. Zeeb * If set, this packet's SA 'Sw_peer_id' mismatches the 'Sw_peer_id' 1042*5c1def83SBjoern A. Zeeb * of the peer through which the packet was got, indicating 1043*5c1def83SBjoern A. Zeeb * the SA node has roamed. RXOLE should route this TLV to 1044*5c1def83SBjoern A. Zeeb * the RXDMA0 status ring to notify FW. 1045*5c1def83SBjoern A. Zeeb * 1046*5c1def83SBjoern A. Zeeb * wds_keep_alive_event 1047*5c1def83SBjoern A. Zeeb * If set, the AST timestamp for this packet's SA is older 1048*5c1def83SBjoern A. Zeeb * than the current timestamp by more than a threshold programmed 1049*5c1def83SBjoern A. Zeeb * in RXOLE. RXOLE should route this TLV to the RXDMA0 status 1050*5c1def83SBjoern A. Zeeb * ring to notify FW to keep the AST entry for the SA alive. 1051*5c1def83SBjoern A. Zeeb * 1052*5c1def83SBjoern A. Zeeb * msdu_length 1053*5c1def83SBjoern A. Zeeb * MSDU length in bytes after decapsulation. 1054*5c1def83SBjoern A. Zeeb * This field is still valid for MPDU frames without A-MSDU. 1055*5c1def83SBjoern A. Zeeb * It still represents MSDU length after decapsulation 1056*5c1def83SBjoern A. Zeeb * 1057*5c1def83SBjoern A. Zeeb * stbc 1058*5c1def83SBjoern A. Zeeb * When set, use STBC transmission rates. 1059*5c1def83SBjoern A. Zeeb * 1060*5c1def83SBjoern A. Zeeb * ipsec_esp 1061*5c1def83SBjoern A. Zeeb * Set if IPv4/v6 packet is using IPsec ESP. 1062*5c1def83SBjoern A. Zeeb * 1063*5c1def83SBjoern A. Zeeb * l3_offset 1064*5c1def83SBjoern A. Zeeb * Depending upon mode bit, this field either indicates the 1065*5c1def83SBjoern A. Zeeb * L3 offset in bytes from the start of the RX_HEADER or the IP 1066*5c1def83SBjoern A. Zeeb * offset in bytes from the start of the packet after 1067*5c1def83SBjoern A. Zeeb * decapsulation. The latter is only valid if ipv4_proto or 1068*5c1def83SBjoern A. Zeeb * ipv6_proto is set. 1069*5c1def83SBjoern A. Zeeb * 1070*5c1def83SBjoern A. Zeeb * ipsec_ah 1071*5c1def83SBjoern A. Zeeb * Set if IPv4/v6 packet is using IPsec AH 1072*5c1def83SBjoern A. Zeeb * 1073*5c1def83SBjoern A. Zeeb * l4_offset 1074*5c1def83SBjoern A. Zeeb * Depending upon mode bit, this field either indicates the 1075*5c1def83SBjoern A. Zeeb * L4 offset in bytes from the start of RX_HEADER (only valid 1076*5c1def83SBjoern A. Zeeb * if either ipv4_proto or ipv6_proto is set to 1) or indicates 1077*5c1def83SBjoern A. Zeeb * the offset in bytes to the start of TCP or UDP header from 1078*5c1def83SBjoern A. Zeeb * the start of the IP header after decapsulation (Only valid if 1079*5c1def83SBjoern A. Zeeb * tcp_proto or udp_proto is set). The value 0 indicates that 1080*5c1def83SBjoern A. Zeeb * the offset is longer than 127 bytes. 1081*5c1def83SBjoern A. Zeeb * 1082*5c1def83SBjoern A. Zeeb * msdu_number 1083*5c1def83SBjoern A. Zeeb * Indicates the MSDU number within a MPDU. This value is 1084*5c1def83SBjoern A. Zeeb * reset to zero at the start of each MPDU. If the number of 1085*5c1def83SBjoern A. Zeeb * MSDU exceeds 255 this number will wrap using modulo 256. 1086*5c1def83SBjoern A. Zeeb * 1087*5c1def83SBjoern A. Zeeb * decap_type 1088*5c1def83SBjoern A. Zeeb * Indicates the format after decapsulation. Values are defined in 1089*5c1def83SBjoern A. Zeeb * enum %MPDU_START_DECAP_TYPE_*. 1090*5c1def83SBjoern A. Zeeb * 1091*5c1def83SBjoern A. Zeeb * ipv4_proto 1092*5c1def83SBjoern A. Zeeb * Set if L2 layer indicates IPv4 protocol. 1093*5c1def83SBjoern A. Zeeb * 1094*5c1def83SBjoern A. Zeeb * ipv6_proto 1095*5c1def83SBjoern A. Zeeb * Set if L2 layer indicates IPv6 protocol. 1096*5c1def83SBjoern A. Zeeb * 1097*5c1def83SBjoern A. Zeeb * tcp_proto 1098*5c1def83SBjoern A. Zeeb * Set if the ipv4_proto or ipv6_proto are set and the IP protocol 1099*5c1def83SBjoern A. Zeeb * indicates TCP. 1100*5c1def83SBjoern A. Zeeb * 1101*5c1def83SBjoern A. Zeeb * udp_proto 1102*5c1def83SBjoern A. Zeeb * Set if the ipv4_proto or ipv6_proto are set and the IP protocol 1103*5c1def83SBjoern A. Zeeb * indicates UDP. 1104*5c1def83SBjoern A. Zeeb * 1105*5c1def83SBjoern A. Zeeb * ip_frag 1106*5c1def83SBjoern A. Zeeb * Indicates that either the IP More frag bit is set or IP frag 1107*5c1def83SBjoern A. Zeeb * number is non-zero. If set indicates that this is a fragmented 1108*5c1def83SBjoern A. Zeeb * IP packet. 1109*5c1def83SBjoern A. Zeeb * 1110*5c1def83SBjoern A. Zeeb * tcp_only_ack 1111*5c1def83SBjoern A. Zeeb * Set if only the TCP Ack bit is set in the TCP flags and if 1112*5c1def83SBjoern A. Zeeb * the TCP payload is 0. 1113*5c1def83SBjoern A. Zeeb * 1114*5c1def83SBjoern A. Zeeb * da_is_bcast_mcast 1115*5c1def83SBjoern A. Zeeb * The destination address is broadcast or multicast. 1116*5c1def83SBjoern A. Zeeb * 1117*5c1def83SBjoern A. Zeeb * toeplitz_hash 1118*5c1def83SBjoern A. Zeeb * Actual chosen Hash. 1119*5c1def83SBjoern A. Zeeb * 0 - Toeplitz hash of 2-tuple (IP source address, IP 1120*5c1def83SBjoern A. Zeeb * destination address) 1121*5c1def83SBjoern A. Zeeb * 1 - Toeplitz hash of 4-tuple (IP source address, 1122*5c1def83SBjoern A. Zeeb * IP destination address, L4 (TCP/UDP) source port, 1123*5c1def83SBjoern A. Zeeb * L4 (TCP/UDP) destination port) 1124*5c1def83SBjoern A. Zeeb * 2 - Toeplitz of flow_id 1125*5c1def83SBjoern A. Zeeb * 3 - Zero is used 1126*5c1def83SBjoern A. Zeeb * 1127*5c1def83SBjoern A. Zeeb * ip_fixed_header_valid 1128*5c1def83SBjoern A. Zeeb * Fixed 20-byte IPv4 header or 40-byte IPv6 header parsed 1129*5c1def83SBjoern A. Zeeb * fully within first 256 bytes of the packet 1130*5c1def83SBjoern A. Zeeb * 1131*5c1def83SBjoern A. Zeeb * ip_extn_header_valid 1132*5c1def83SBjoern A. Zeeb * IPv6/IPv6 header, including IPv4 options and 1133*5c1def83SBjoern A. Zeeb * recognizable extension headers parsed fully within first 256 1134*5c1def83SBjoern A. Zeeb * bytes of the packet 1135*5c1def83SBjoern A. Zeeb * 1136*5c1def83SBjoern A. Zeeb * tcp_udp_header_valid 1137*5c1def83SBjoern A. Zeeb * Fixed 20-byte TCP (excluding TCP options) or 8-byte UDP 1138*5c1def83SBjoern A. Zeeb * header parsed fully within first 256 bytes of the packet 1139*5c1def83SBjoern A. Zeeb * 1140*5c1def83SBjoern A. Zeeb * mesh_control_present 1141*5c1def83SBjoern A. Zeeb * When set, this MSDU includes the 'Mesh Control' field 1142*5c1def83SBjoern A. Zeeb * 1143*5c1def83SBjoern A. Zeeb * ldpc 1144*5c1def83SBjoern A. Zeeb * 1145*5c1def83SBjoern A. Zeeb * ip4_protocol_ip6_next_header 1146*5c1def83SBjoern A. Zeeb * For IPv4, this is the 8 bit protocol field set). For IPv6 this 1147*5c1def83SBjoern A. Zeeb * is the 8 bit next_header field. 1148*5c1def83SBjoern A. Zeeb * 1149*5c1def83SBjoern A. Zeeb * 1150*5c1def83SBjoern A. Zeeb * vlan_ctag_ci 1151*5c1def83SBjoern A. Zeeb * 2 bytes of C-VLAN Tag Control Information from WHO_L2_LLC 1152*5c1def83SBjoern A. Zeeb * 1153*5c1def83SBjoern A. Zeeb * vlan_stag_ci 1154*5c1def83SBjoern A. Zeeb * 2 bytes of S-VLAN Tag Control Information from WHO_L2_LLC 1155*5c1def83SBjoern A. Zeeb * in case of double VLAN 1156*5c1def83SBjoern A. Zeeb * 1157*5c1def83SBjoern A. Zeeb * peer_meta_data 1158*5c1def83SBjoern A. Zeeb * Meta data that SW has programmed in the Peer table entry 1159*5c1def83SBjoern A. Zeeb * of the transmitting STA. 1160*5c1def83SBjoern A. Zeeb * 1161*5c1def83SBjoern A. Zeeb * user_rssi 1162*5c1def83SBjoern A. Zeeb * RSSI for this user 1163*5c1def83SBjoern A. Zeeb * 1164*5c1def83SBjoern A. Zeeb * pkt_type 1165*5c1def83SBjoern A. Zeeb * Values are defined in enum %RX_MSDU_START_PKT_TYPE_*. 1166*5c1def83SBjoern A. Zeeb * 1167*5c1def83SBjoern A. Zeeb * sgi 1168*5c1def83SBjoern A. Zeeb * Field only valid when pkt type is HT, VHT or HE. Values are 1169*5c1def83SBjoern A. Zeeb * defined in enum %RX_MSDU_START_SGI_*. 1170*5c1def83SBjoern A. Zeeb * 1171*5c1def83SBjoern A. Zeeb * rate_mcs 1172*5c1def83SBjoern A. Zeeb * MCS Rate used. 1173*5c1def83SBjoern A. Zeeb * 1174*5c1def83SBjoern A. Zeeb * receive_bandwidth 1175*5c1def83SBjoern A. Zeeb * Full receive Bandwidth. Values are defined in enum 1176*5c1def83SBjoern A. Zeeb * %RX_MSDU_START_RECV_*. 1177*5c1def83SBjoern A. Zeeb * 1178*5c1def83SBjoern A. Zeeb * reception_type 1179*5c1def83SBjoern A. Zeeb * Indicates what type of reception this is and defined in enum 1180*5c1def83SBjoern A. Zeeb * %RX_MSDU_START_RECEPTION_TYPE_*. 1181*5c1def83SBjoern A. Zeeb * 1182*5c1def83SBjoern A. Zeeb * mimo_ss_bitmap 1183*5c1def83SBjoern A. Zeeb * Field only valid when 1184*5c1def83SBjoern A. Zeeb * Reception_type is RX_MSDU_START_RECEPTION_TYPE_DL_MU_MIMO or 1185*5c1def83SBjoern A. Zeeb * RX_MSDU_START_RECEPTION_TYPE_DL_MU_OFDMA_MIMO. 1186*5c1def83SBjoern A. Zeeb * 1187*5c1def83SBjoern A. Zeeb * Bitmap, with each bit indicating if the related spatial 1188*5c1def83SBjoern A. Zeeb * stream is used for this STA 1189*5c1def83SBjoern A. Zeeb * 1190*5c1def83SBjoern A. Zeeb * LSB related to SS 0 1191*5c1def83SBjoern A. Zeeb * 1192*5c1def83SBjoern A. Zeeb * 0 - spatial stream not used for this reception 1193*5c1def83SBjoern A. Zeeb * 1 - spatial stream used for this reception 1194*5c1def83SBjoern A. Zeeb * 1195*5c1def83SBjoern A. Zeeb * msdu_done_copy 1196*5c1def83SBjoern A. Zeeb * If set indicates that the RX packet data, RX header data, 1197*5c1def83SBjoern A. Zeeb * RX PPDU start descriptor, RX MPDU start/end descriptor, 1198*5c1def83SBjoern A. Zeeb * RX MSDU start/end descriptors and RX Attention descriptor 1199*5c1def83SBjoern A. Zeeb * are all valid. This bit is in the last 64-bit of the descriptor 1200*5c1def83SBjoern A. Zeeb * expected to be subscribed in future hardware. 1201*5c1def83SBjoern A. Zeeb * 1202*5c1def83SBjoern A. Zeeb * flow_id_toeplitz 1203*5c1def83SBjoern A. Zeeb * Toeplitz hash of 5-tuple 1204*5c1def83SBjoern A. Zeeb * {IP source address, IP destination address, IP source port, IP 1205*5c1def83SBjoern A. Zeeb * destination port, L4 protocol} in case of non-IPSec. 1206*5c1def83SBjoern A. Zeeb * 1207*5c1def83SBjoern A. Zeeb * In case of IPSec - Toeplitz hash of 4-tuple 1208*5c1def83SBjoern A. Zeeb * {IP source address, IP destination address, SPI, L4 protocol} 1209*5c1def83SBjoern A. Zeeb * 1210*5c1def83SBjoern A. Zeeb * The relevant Toeplitz key registers are provided in RxOLE's 1211*5c1def83SBjoern A. Zeeb * instance of common parser module. These registers are separate 1212*5c1def83SBjoern A. Zeeb * from the Toeplitz keys used by ASE/FSE modules inside RxOLE. 1213*5c1def83SBjoern A. Zeeb * The actual value will be passed on from common parser module 1214*5c1def83SBjoern A. Zeeb * to RxOLE in one of the WHO_* TLVs. 1215*5c1def83SBjoern A. Zeeb * 1216*5c1def83SBjoern A. Zeeb * ppdu_start_timestamp 1217*5c1def83SBjoern A. Zeeb * Timestamp that indicates when the PPDU that contained this MPDU 1218*5c1def83SBjoern A. Zeeb * started on the medium. 1219*5c1def83SBjoern A. Zeeb * 1220*5c1def83SBjoern A. Zeeb * phy_meta_data 1221*5c1def83SBjoern A. Zeeb * SW programmed Meta data provided by the PHY. Can be used for SW 1222*5c1def83SBjoern A. Zeeb * to indicate the channel the device is on. 1223*5c1def83SBjoern A. Zeeb * 1224*5c1def83SBjoern A. Zeeb * toeplitz_hash_2_or_4 1225*5c1def83SBjoern A. Zeeb * Controlled by multiple RxOLE registers for TCP/UDP over 1226*5c1def83SBjoern A. Zeeb * IPv4/IPv6 - Either, Toeplitz hash computed over 2-tuple 1227*5c1def83SBjoern A. Zeeb * IPv4 or IPv6 src/dest addresses is reported; or, Toeplitz 1228*5c1def83SBjoern A. Zeeb * hash computed over 4-tuple IPv4 or IPv6 src/dest addresses 1229*5c1def83SBjoern A. Zeeb * and src/dest ports is reported. The Flow_id_toeplitz hash 1230*5c1def83SBjoern A. Zeeb * can also be reported here. Usually the hash reported here 1231*5c1def83SBjoern A. Zeeb * is the one used for hash-based REO routing (see use_flow_id_toeplitz_clfy 1232*5c1def83SBjoern A. Zeeb * in 'RXPT_CLASSIFY_INFO'). 1233*5c1def83SBjoern A. Zeeb * 1234*5c1def83SBjoern A. Zeeb * sa 1235*5c1def83SBjoern A. Zeeb * Source MAC address 1236*5c1def83SBjoern A. Zeeb * 1237*5c1def83SBjoern A. Zeeb * first_mpdu 1238*5c1def83SBjoern A. Zeeb * Indicates the first MSDU of the PPDU. If both first_mpdu 1239*5c1def83SBjoern A. Zeeb * and last_mpdu are set in the MSDU then this is a not an 1240*5c1def83SBjoern A. Zeeb * A-MPDU frame but a stand alone MPDU. Interior MPDU in an 1241*5c1def83SBjoern A. Zeeb * A-MPDU shall have both first_mpdu and last_mpdu bits set to 1242*5c1def83SBjoern A. Zeeb * 0. The PPDU start status will only be valid when this bit 1243*5c1def83SBjoern A. Zeeb * is set. 1244*5c1def83SBjoern A. Zeeb * 1245*5c1def83SBjoern A. Zeeb * mcast_bcast 1246*5c1def83SBjoern A. Zeeb * Multicast / broadcast indicator. Only set when the MAC 1247*5c1def83SBjoern A. Zeeb * address 1 bit 0 is set indicating mcast/bcast and the BSSID 1248*5c1def83SBjoern A. Zeeb * matches one of the 4 BSSID registers. Only set when 1249*5c1def83SBjoern A. Zeeb * first_msdu is set. 1250*5c1def83SBjoern A. Zeeb * 1251*5c1def83SBjoern A. Zeeb * ast_index_not_found 1252*5c1def83SBjoern A. Zeeb * Only valid when first_msdu is set. Indicates no AST matching 1253*5c1def83SBjoern A. Zeeb * entries within the max search count. 1254*5c1def83SBjoern A. Zeeb * 1255*5c1def83SBjoern A. Zeeb * ast_index_timeout 1256*5c1def83SBjoern A. Zeeb * Only valid when first_msdu is set. Indicates an unsuccessful 1257*5c1def83SBjoern A. Zeeb * search in the address search table due to timeout. 1258*5c1def83SBjoern A. Zeeb * 1259*5c1def83SBjoern A. Zeeb * power_mgmt 1260*5c1def83SBjoern A. Zeeb * Power management bit set in the 802.11 header. Only set 1261*5c1def83SBjoern A. Zeeb * when first_msdu is set. 1262*5c1def83SBjoern A. Zeeb * 1263*5c1def83SBjoern A. Zeeb * non_qos 1264*5c1def83SBjoern A. Zeeb * Set if packet is not a non-QoS data frame. Only set when 1265*5c1def83SBjoern A. Zeeb * first_msdu is set. 1266*5c1def83SBjoern A. Zeeb * 1267*5c1def83SBjoern A. Zeeb * null_data 1268*5c1def83SBjoern A. Zeeb * Set if frame type indicates either null data or QoS null 1269*5c1def83SBjoern A. Zeeb * data format. Only set when first_msdu is set. 1270*5c1def83SBjoern A. Zeeb * 1271*5c1def83SBjoern A. Zeeb * mgmt_type 1272*5c1def83SBjoern A. Zeeb * Set if packet is a management packet. Only set when 1273*5c1def83SBjoern A. Zeeb * first_msdu is set. 1274*5c1def83SBjoern A. Zeeb * 1275*5c1def83SBjoern A. Zeeb * ctrl_type 1276*5c1def83SBjoern A. Zeeb * Set if packet is a control packet. Only set when first_msdu 1277*5c1def83SBjoern A. Zeeb * is set. 1278*5c1def83SBjoern A. Zeeb * 1279*5c1def83SBjoern A. Zeeb * more_data 1280*5c1def83SBjoern A. Zeeb * Set if more bit in frame control is set. Only set when 1281*5c1def83SBjoern A. Zeeb * first_msdu is set. 1282*5c1def83SBjoern A. Zeeb * 1283*5c1def83SBjoern A. Zeeb * eosp 1284*5c1def83SBjoern A. Zeeb * Set if the EOSP (end of service period) bit in the QoS 1285*5c1def83SBjoern A. Zeeb * control field is set. Only set when first_msdu is set. 1286*5c1def83SBjoern A. Zeeb * 1287*5c1def83SBjoern A. Zeeb * a_msdu_error 1288*5c1def83SBjoern A. Zeeb * Set if number of MSDUs in A-MSDU is above a threshold or if the 1289*5c1def83SBjoern A. Zeeb * size of the MSDU is invalid. This receive buffer will contain 1290*5c1def83SBjoern A. Zeeb * all of the remainder of MSDUs in this MPDU w/o decapsulation. 1291*5c1def83SBjoern A. Zeeb * 1292*5c1def83SBjoern A. Zeeb * order 1293*5c1def83SBjoern A. Zeeb * Set if the order bit in the frame control is set. Only 1294*5c1def83SBjoern A. Zeeb * set when first_msdu is set. 1295*5c1def83SBjoern A. Zeeb * 1296*5c1def83SBjoern A. Zeeb * wifi_parser_error 1297*5c1def83SBjoern A. Zeeb * Indicates that the WiFi frame has one of the following errors 1298*5c1def83SBjoern A. Zeeb * 1299*5c1def83SBjoern A. Zeeb * overflow_err 1300*5c1def83SBjoern A. Zeeb * RXPCU Receive FIFO ran out of space to receive the full MPDU. 1301*5c1def83SBjoern A. Zeeb * Therefore this MPDU is terminated early and is thus corrupted. 1302*5c1def83SBjoern A. Zeeb * 1303*5c1def83SBjoern A. Zeeb * This MPDU will not be ACKed. 1304*5c1def83SBjoern A. Zeeb * 1305*5c1def83SBjoern A. Zeeb * RXPCU might still be able to correctly receive the following 1306*5c1def83SBjoern A. Zeeb * MPDUs in the PPDU if enough fifo space became available in time. 1307*5c1def83SBjoern A. Zeeb * 1308*5c1def83SBjoern A. Zeeb * mpdu_length_err 1309*5c1def83SBjoern A. Zeeb * Set by RXPCU if the expected MPDU length does not correspond 1310*5c1def83SBjoern A. Zeeb * with the actually received number of bytes in the MPDU. 1311*5c1def83SBjoern A. Zeeb * 1312*5c1def83SBjoern A. Zeeb * tcp_udp_chksum_fail 1313*5c1def83SBjoern A. Zeeb * Indicates that the computed checksum (tcp_udp_chksum) did 1314*5c1def83SBjoern A. Zeeb * not match the checksum in the TCP/UDP header. 1315*5c1def83SBjoern A. Zeeb * 1316*5c1def83SBjoern A. Zeeb * ip_chksum_fail 1317*5c1def83SBjoern A. Zeeb * Indicates that the computed checksum did not match the 1318*5c1def83SBjoern A. Zeeb * checksum in the IP header. 1319*5c1def83SBjoern A. Zeeb * 1320*5c1def83SBjoern A. Zeeb * sa_idx_invalid 1321*5c1def83SBjoern A. Zeeb * Indicates no matching entry was found in the address search 1322*5c1def83SBjoern A. Zeeb * table for the source MAC address. 1323*5c1def83SBjoern A. Zeeb * 1324*5c1def83SBjoern A. Zeeb * da_idx_invalid 1325*5c1def83SBjoern A. Zeeb * Indicates no matching entry was found in the address search 1326*5c1def83SBjoern A. Zeeb * table for the destination MAC address. 1327*5c1def83SBjoern A. Zeeb * 1328*5c1def83SBjoern A. Zeeb * amsdu_addr_mismatch 1329*5c1def83SBjoern A. Zeeb * Indicates that an A-MSDU with 'from DS = 0' had an SA mismatching 1330*5c1def83SBjoern A. Zeeb * TA or an A-MDU with 'to DS = 0' had a DA mismatching RA 1331*5c1def83SBjoern A. Zeeb * 1332*5c1def83SBjoern A. Zeeb * rx_in_tx_decrypt_byp 1333*5c1def83SBjoern A. Zeeb * Indicates that RX packet is not decrypted as Crypto is busy 1334*5c1def83SBjoern A. Zeeb * with TX packet processing. 1335*5c1def83SBjoern A. Zeeb * 1336*5c1def83SBjoern A. Zeeb * encrypt_required 1337*5c1def83SBjoern A. Zeeb * Indicates that this data type frame is not encrypted even if 1338*5c1def83SBjoern A. Zeeb * the policy for this MPDU requires encryption as indicated in 1339*5c1def83SBjoern A. Zeeb * the peer table key type. 1340*5c1def83SBjoern A. Zeeb * 1341*5c1def83SBjoern A. Zeeb * directed 1342*5c1def83SBjoern A. Zeeb * MPDU is a directed packet which means that the RA matched 1343*5c1def83SBjoern A. Zeeb * our STA addresses. In proxySTA it means that the TA matched 1344*5c1def83SBjoern A. Zeeb * an entry in our address search table with the corresponding 1345*5c1def83SBjoern A. Zeeb * 'no_ack' bit is the address search entry cleared. 1346*5c1def83SBjoern A. Zeeb * 1347*5c1def83SBjoern A. Zeeb * buffer_fragment 1348*5c1def83SBjoern A. Zeeb * Indicates that at least one of the rx buffers has been 1349*5c1def83SBjoern A. Zeeb * fragmented. If set the FW should look at the rx_frag_info 1350*5c1def83SBjoern A. Zeeb * descriptor described below. 1351*5c1def83SBjoern A. Zeeb * 1352*5c1def83SBjoern A. Zeeb * mpdu_length_err 1353*5c1def83SBjoern A. Zeeb * Indicates that the MPDU was pre-maturely terminated 1354*5c1def83SBjoern A. Zeeb * resulting in a truncated MPDU. Don't trust the MPDU length 1355*5c1def83SBjoern A. Zeeb * field. 1356*5c1def83SBjoern A. Zeeb * 1357*5c1def83SBjoern A. Zeeb * tkip_mic_err 1358*5c1def83SBjoern A. Zeeb * Indicates that the MPDU Michael integrity check failed 1359*5c1def83SBjoern A. Zeeb * 1360*5c1def83SBjoern A. Zeeb * decrypt_err 1361*5c1def83SBjoern A. Zeeb * Indicates that the MPDU decrypt integrity check failed 1362*5c1def83SBjoern A. Zeeb * 1363*5c1def83SBjoern A. Zeeb * fcs_err 1364*5c1def83SBjoern A. Zeeb * Indicates that the MPDU FCS check failed 1365*5c1def83SBjoern A. Zeeb * 1366*5c1def83SBjoern A. Zeeb * flow_idx_timeout 1367*5c1def83SBjoern A. Zeeb * Indicates an unsuccessful flow search due to the expiring of 1368*5c1def83SBjoern A. Zeeb * the search timer. 1369*5c1def83SBjoern A. Zeeb * 1370*5c1def83SBjoern A. Zeeb * flow_idx_invalid 1371*5c1def83SBjoern A. Zeeb * flow id is not valid. 1372*5c1def83SBjoern A. Zeeb * 1373*5c1def83SBjoern A. Zeeb * decrypt_status_code 1374*5c1def83SBjoern A. Zeeb * Field provides insight into the decryption performed. Values 1375*5c1def83SBjoern A. Zeeb * are defined in enum %RX_DESC_DECRYPT_STATUS_CODE_*. 1376*5c1def83SBjoern A. Zeeb * 1377*5c1def83SBjoern A. Zeeb * rx_bitmap_not_updated 1378*5c1def83SBjoern A. Zeeb * Frame is received, but RXPCU could not update the receive bitmap 1379*5c1def83SBjoern A. Zeeb * due to (temporary) fifo constraints. 1380*5c1def83SBjoern A. Zeeb * 1381*5c1def83SBjoern A. Zeeb * msdu_done 1382*5c1def83SBjoern A. Zeeb * If set indicates that the RX packet data, RX header data, RX 1383*5c1def83SBjoern A. Zeeb * PPDU start descriptor, RX MPDU start/end descriptor, RX MSDU 1384*5c1def83SBjoern A. Zeeb * start/end descriptors and RX Attention descriptor are all 1385*5c1def83SBjoern A. Zeeb * valid. This bit must be in the last octet of the 1386*5c1def83SBjoern A. Zeeb * descriptor. 1387*5c1def83SBjoern A. Zeeb * 1388*5c1def83SBjoern A. Zeeb */ 1389*5c1def83SBjoern A. Zeeb 1390*5c1def83SBjoern A. Zeeb /* TODO: Move to compact TLV approach 1391*5c1def83SBjoern A. Zeeb * By default these tlv's are not aligned to 128b boundary 1392*5c1def83SBjoern A. Zeeb * Need to remove unused qwords and make them compact/aligned 1393*5c1def83SBjoern A. Zeeb */ 1394*5c1def83SBjoern A. Zeeb struct hal_rx_desc_qcn9274 { 1395*5c1def83SBjoern A. Zeeb struct rx_msdu_end_qcn9274 msdu_end; 1396*5c1def83SBjoern A. Zeeb struct rx_mpdu_start_qcn9274 mpdu_start; 1397*5c1def83SBjoern A. Zeeb u8 msdu_payload[]; 1398*5c1def83SBjoern A. Zeeb } __packed; 1399*5c1def83SBjoern A. Zeeb 1400*5c1def83SBjoern A. Zeeb #define RX_BE_PADDING0_BYTES 8 1401*5c1def83SBjoern A. Zeeb #define RX_BE_PADDING1_BYTES 8 1402*5c1def83SBjoern A. Zeeb 1403*5c1def83SBjoern A. Zeeb #define HAL_RX_BE_PKT_HDR_TLV_LEN 112 1404*5c1def83SBjoern A. Zeeb 1405*5c1def83SBjoern A. Zeeb struct rx_pkt_hdr_tlv { 1406*5c1def83SBjoern A. Zeeb __le64 tag; 1407*5c1def83SBjoern A. Zeeb __le64 phy_ppdu_id; 1408*5c1def83SBjoern A. Zeeb u8 rx_pkt_hdr[HAL_RX_BE_PKT_HDR_TLV_LEN]; 1409*5c1def83SBjoern A. Zeeb }; 1410*5c1def83SBjoern A. Zeeb 1411*5c1def83SBjoern A. Zeeb struct hal_rx_desc_wcn7850 { 1412*5c1def83SBjoern A. Zeeb __le64 msdu_end_tag; 1413*5c1def83SBjoern A. Zeeb struct rx_msdu_end_qcn9274 msdu_end; 1414*5c1def83SBjoern A. Zeeb u8 rx_padding0[RX_BE_PADDING0_BYTES]; 1415*5c1def83SBjoern A. Zeeb __le64 mpdu_start_tag; 1416*5c1def83SBjoern A. Zeeb struct rx_mpdu_start_qcn9274 mpdu_start; 1417*5c1def83SBjoern A. Zeeb struct rx_pkt_hdr_tlv pkt_hdr_tlv; 1418*5c1def83SBjoern A. Zeeb u8 msdu_payload[]; 1419*5c1def83SBjoern A. Zeeb }; 1420*5c1def83SBjoern A. Zeeb 1421*5c1def83SBjoern A. Zeeb struct hal_rx_desc { 1422*5c1def83SBjoern A. Zeeb union { 1423*5c1def83SBjoern A. Zeeb struct hal_rx_desc_qcn9274 qcn9274; 1424*5c1def83SBjoern A. Zeeb struct hal_rx_desc_wcn7850 wcn7850; 1425*5c1def83SBjoern A. Zeeb } u; 1426*5c1def83SBjoern A. Zeeb } __packed; 1427*5c1def83SBjoern A. Zeeb 1428*5c1def83SBjoern A. Zeeb #define MAX_USER_POS 8 1429*5c1def83SBjoern A. Zeeb #define MAX_MU_GROUP_ID 64 1430*5c1def83SBjoern A. Zeeb #define MAX_MU_GROUP_SHOW 16 1431*5c1def83SBjoern A. Zeeb #define MAX_MU_GROUP_LENGTH (6 * MAX_MU_GROUP_SHOW) 1432*5c1def83SBjoern A. Zeeb 1433*5c1def83SBjoern A. Zeeb #define HAL_RX_RU_ALLOC_TYPE_MAX 6 1434*5c1def83SBjoern A. Zeeb #define RU_26 1 1435*5c1def83SBjoern A. Zeeb #define RU_52 2 1436*5c1def83SBjoern A. Zeeb #define RU_106 4 1437*5c1def83SBjoern A. Zeeb #define RU_242 9 1438*5c1def83SBjoern A. Zeeb #define RU_484 18 1439*5c1def83SBjoern A. Zeeb #define RU_996 37 1440*5c1def83SBjoern A. Zeeb 1441*5c1def83SBjoern A. Zeeb #endif /* ATH12K_RX_DESC_H */ 1442