1dd4f32aeSBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2dd4f32aeSBjoern A. Zeeb /* 3dd4f32aeSBjoern A. Zeeb * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. 4dd4f32aeSBjoern A. Zeeb */ 5dd4f32aeSBjoern A. Zeeb #ifndef ATH11K_RX_DESC_H 6dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_DESC_H 7dd4f32aeSBjoern A. Zeeb 8dd4f32aeSBjoern A. Zeeb enum rx_desc_rxpcu_filter { 9dd4f32aeSBjoern A. Zeeb RX_DESC_RXPCU_FILTER_PASS, 10dd4f32aeSBjoern A. Zeeb RX_DESC_RXPCU_FILTER_MONITOR_CLIENT, 11dd4f32aeSBjoern A. Zeeb RX_DESC_RXPCU_FILTER_MONITOR_OTHER, 12dd4f32aeSBjoern A. Zeeb }; 13dd4f32aeSBjoern A. Zeeb 14dd4f32aeSBjoern A. Zeeb /* rxpcu_filter_pass 15dd4f32aeSBjoern A. Zeeb * This MPDU passed the normal frame filter programming of rxpcu. 16dd4f32aeSBjoern A. Zeeb * 17dd4f32aeSBjoern A. Zeeb * rxpcu_filter_monitor_client 18dd4f32aeSBjoern A. Zeeb * This MPDU did not pass the regular frame filter and would 19dd4f32aeSBjoern A. Zeeb * have been dropped, were it not for the frame fitting into the 20dd4f32aeSBjoern A. Zeeb * 'monitor_client' category. 21dd4f32aeSBjoern A. Zeeb * 22dd4f32aeSBjoern A. Zeeb * rxpcu_filter_monitor_other 23dd4f32aeSBjoern A. Zeeb * This MPDU did not pass the regular frame filter and also did 24dd4f32aeSBjoern A. Zeeb * not pass the rxpcu_monitor_client filter. It would have been 25dd4f32aeSBjoern A. Zeeb * dropped accept that it did pass the 'monitor_other' category. 26dd4f32aeSBjoern A. Zeeb */ 27dd4f32aeSBjoern A. Zeeb 28dd4f32aeSBjoern A. Zeeb #define RX_DESC_INFO0_RXPCU_MPDU_FITLER GENMASK(1, 0) 29dd4f32aeSBjoern A. Zeeb #define RX_DESC_INFO0_SW_FRAME_GRP_ID GENMASK(8, 2) 30dd4f32aeSBjoern A. Zeeb 31dd4f32aeSBjoern A. Zeeb enum rx_desc_sw_frame_grp_id { 32dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_NDP_FRAME, 33dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MCAST_DATA, 34dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_UCAST_DATA, 35dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_NULL_DATA, 36dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_0000, 37dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_0001, 38dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_0010, 39dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_0011, 40dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_0100, 41dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_0101, 42dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_0110, 43dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_0111, 44dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_1000, 45dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_1001, 46dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_1010, 47dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_1011, 48dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_1100, 49dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_1101, 50dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_1110, 51dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_MGMT_1111, 52dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_0000, 53dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_0001, 54dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_0010, 55dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_0011, 56dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_0100, 57dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_0101, 58dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_0110, 59dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_0111, 60dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_1000, 61dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_1001, 62dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_1010, 63dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_1011, 64dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_1100, 65dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_1101, 66dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_1110, 67dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_CTRL_1111, 68dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_UNSUPPORTED, 69dd4f32aeSBjoern A. Zeeb RX_DESC_SW_FRAME_GRP_ID_PHY_ERR, 70dd4f32aeSBjoern A. Zeeb }; 71dd4f32aeSBjoern A. Zeeb 72dd4f32aeSBjoern A. Zeeb enum rx_desc_decap_type { 73dd4f32aeSBjoern A. Zeeb RX_DESC_DECAP_TYPE_RAW, 74dd4f32aeSBjoern A. Zeeb RX_DESC_DECAP_TYPE_NATIVE_WIFI, 75dd4f32aeSBjoern A. Zeeb RX_DESC_DECAP_TYPE_ETHERNET2_DIX, 76dd4f32aeSBjoern A. Zeeb RX_DESC_DECAP_TYPE_8023, 77dd4f32aeSBjoern A. Zeeb }; 78dd4f32aeSBjoern A. Zeeb 79dd4f32aeSBjoern A. Zeeb enum rx_desc_decrypt_status_code { 80dd4f32aeSBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_OK, 81dd4f32aeSBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_UNPROTECTED_FRAME, 82dd4f32aeSBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_DATA_ERR, 83dd4f32aeSBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_KEY_INVALID, 84dd4f32aeSBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_PEER_ENTRY_INVALID, 85dd4f32aeSBjoern A. Zeeb RX_DESC_DECRYPT_STATUS_CODE_OTHER, 86dd4f32aeSBjoern A. Zeeb }; 87dd4f32aeSBjoern A. Zeeb 88dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_FIRST_MPDU BIT(0) 89dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_RSVD_1A BIT(1) 90dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_MCAST_BCAST BIT(2) 91dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_AST_IDX_NOT_FOUND BIT(3) 92dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_AST_IDX_TIMEDOUT BIT(4) 93dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_POWER_MGMT BIT(5) 94dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_NON_QOS BIT(6) 95dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_NULL_DATA BIT(7) 96dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_MGMT_TYPE BIT(8) 97dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_CTRL_TYPE BIT(9) 98dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_MORE_DATA BIT(10) 99dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_EOSP BIT(11) 100dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_A_MSDU_ERROR BIT(12) 101dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_FRAGMENT BIT(13) 102dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_ORDER BIT(14) 103dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_CCE_MATCH BIT(15) 104dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_OVERFLOW_ERR BIT(16) 105dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_MSDU_LEN_ERR BIT(17) 106dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_TCP_UDP_CKSUM_FAIL BIT(18) 107dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_IP_CKSUM_FAIL BIT(19) 108dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_SA_IDX_INVALID BIT(20) 109dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_DA_IDX_INVALID BIT(21) 110dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_RSVD_1B BIT(22) 111dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_RX_IN_TX_DECRYPT_BYP BIT(23) 112dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_ENCRYPT_REQUIRED BIT(24) 113dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_DIRECTED BIT(25) 114dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_BUFFER_FRAGMENT BIT(26) 115dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_MPDU_LEN_ERR BIT(27) 116dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_TKIP_MIC_ERR BIT(28) 117dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_DECRYPT_ERR BIT(29) 118dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_UNDECRYPT_FRAME_ERR BIT(30) 119dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO1_FCS_ERR BIT(31) 120dd4f32aeSBjoern A. Zeeb 121dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_FLOW_IDX_TIMEOUT BIT(0) 122dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_FLOW_IDX_INVALID BIT(1) 123dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_WIFI_PARSER_ERR BIT(2) 124dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_AMSDU_PARSER_ERR BIT(3) 125dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_SA_IDX_TIMEOUT BIT(4) 126dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_DA_IDX_TIMEOUT BIT(5) 127dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_MSDU_LIMIT_ERR BIT(6) 128dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_DA_IS_VALID BIT(7) 129dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_DA_IS_MCBC BIT(8) 130dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_SA_IS_VALID BIT(9) 131dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_DCRYPT_STATUS_CODE GENMASK(12, 10) 132dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_RX_BITMAP_NOT_UPDED BIT(13) 133dd4f32aeSBjoern A. Zeeb #define RX_ATTENTION_INFO2_MSDU_DONE BIT(31) 134dd4f32aeSBjoern A. Zeeb 135dd4f32aeSBjoern A. Zeeb struct rx_attention { 136dd4f32aeSBjoern A. Zeeb __le16 info0; 137dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 138dd4f32aeSBjoern A. Zeeb __le32 info1; 139dd4f32aeSBjoern A. Zeeb __le32 info2; 140dd4f32aeSBjoern A. Zeeb } __packed; 141dd4f32aeSBjoern A. Zeeb 142dd4f32aeSBjoern A. Zeeb /* rx_attention 143dd4f32aeSBjoern A. Zeeb * 144dd4f32aeSBjoern A. Zeeb * rxpcu_mpdu_filter_in_category 145dd4f32aeSBjoern A. Zeeb * Field indicates what the reason was that this mpdu frame 146dd4f32aeSBjoern A. Zeeb * was allowed to come into the receive path by rxpcu. Values 147dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_RXPCU_FILTER_*. 148dd4f32aeSBjoern A. Zeeb * 149dd4f32aeSBjoern A. Zeeb * sw_frame_group_id 150dd4f32aeSBjoern A. Zeeb * SW processes frames based on certain classifications. Values 151dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_SW_FRAME_GRP_ID_*. 152dd4f32aeSBjoern A. Zeeb * 153dd4f32aeSBjoern A. Zeeb * phy_ppdu_id 154dd4f32aeSBjoern A. Zeeb * A ppdu counter value that PHY increments for every PPDU 155dd4f32aeSBjoern A. Zeeb * received. The counter value wraps around. 156dd4f32aeSBjoern A. Zeeb * 157dd4f32aeSBjoern A. Zeeb * first_mpdu 158dd4f32aeSBjoern A. Zeeb * Indicates the first MSDU of the PPDU. If both first_mpdu 159dd4f32aeSBjoern A. Zeeb * and last_mpdu are set in the MSDU then this is a not an 160dd4f32aeSBjoern A. Zeeb * A-MPDU frame but a stand alone MPDU. Interior MPDU in an 161dd4f32aeSBjoern A. Zeeb * A-MPDU shall have both first_mpdu and last_mpdu bits set to 162dd4f32aeSBjoern A. Zeeb * 0. The PPDU start status will only be valid when this bit 163dd4f32aeSBjoern A. Zeeb * is set. 164dd4f32aeSBjoern A. Zeeb * 165dd4f32aeSBjoern A. Zeeb * mcast_bcast 166dd4f32aeSBjoern A. Zeeb * Multicast / broadcast indicator. Only set when the MAC 167dd4f32aeSBjoern A. Zeeb * address 1 bit 0 is set indicating mcast/bcast and the BSSID 168dd4f32aeSBjoern A. Zeeb * matches one of the 4 BSSID registers. Only set when 169dd4f32aeSBjoern A. Zeeb * first_msdu is set. 170dd4f32aeSBjoern A. Zeeb * 171dd4f32aeSBjoern A. Zeeb * ast_index_not_found 172dd4f32aeSBjoern A. Zeeb * Only valid when first_msdu is set. Indicates no AST matching 173dd4f32aeSBjoern A. Zeeb * entries within the max search count. 174dd4f32aeSBjoern A. Zeeb * 175dd4f32aeSBjoern A. Zeeb * ast_index_timeout 176dd4f32aeSBjoern A. Zeeb * Only valid when first_msdu is set. Indicates an unsuccessful 177dd4f32aeSBjoern A. Zeeb * search in the address search table due to timeout. 178dd4f32aeSBjoern A. Zeeb * 179dd4f32aeSBjoern A. Zeeb * power_mgmt 180dd4f32aeSBjoern A. Zeeb * Power management bit set in the 802.11 header. Only set 181dd4f32aeSBjoern A. Zeeb * when first_msdu is set. 182dd4f32aeSBjoern A. Zeeb * 183dd4f32aeSBjoern A. Zeeb * non_qos 184dd4f32aeSBjoern A. Zeeb * Set if packet is not a non-QoS data frame. Only set when 185dd4f32aeSBjoern A. Zeeb * first_msdu is set. 186dd4f32aeSBjoern A. Zeeb * 187dd4f32aeSBjoern A. Zeeb * null_data 188dd4f32aeSBjoern A. Zeeb * Set if frame type indicates either null data or QoS null 189dd4f32aeSBjoern A. Zeeb * data format. Only set when first_msdu is set. 190dd4f32aeSBjoern A. Zeeb * 191dd4f32aeSBjoern A. Zeeb * mgmt_type 192dd4f32aeSBjoern A. Zeeb * Set if packet is a management packet. Only set when 193dd4f32aeSBjoern A. Zeeb * first_msdu is set. 194dd4f32aeSBjoern A. Zeeb * 195dd4f32aeSBjoern A. Zeeb * ctrl_type 196dd4f32aeSBjoern A. Zeeb * Set if packet is a control packet. Only set when first_msdu 197dd4f32aeSBjoern A. Zeeb * is set. 198dd4f32aeSBjoern A. Zeeb * 199dd4f32aeSBjoern A. Zeeb * more_data 200dd4f32aeSBjoern A. Zeeb * Set if more bit in frame control is set. Only set when 201dd4f32aeSBjoern A. Zeeb * first_msdu is set. 202dd4f32aeSBjoern A. Zeeb * 203dd4f32aeSBjoern A. Zeeb * eosp 204dd4f32aeSBjoern A. Zeeb * Set if the EOSP (end of service period) bit in the QoS 205dd4f32aeSBjoern A. Zeeb * control field is set. Only set when first_msdu is set. 206dd4f32aeSBjoern A. Zeeb * 207dd4f32aeSBjoern A. Zeeb * a_msdu_error 208dd4f32aeSBjoern A. Zeeb * Set if number of MSDUs in A-MSDU is above a threshold or if the 209dd4f32aeSBjoern A. Zeeb * size of the MSDU is invalid. This receive buffer will contain 210dd4f32aeSBjoern A. Zeeb * all of the remainder of MSDUs in this MPDU w/o decapsulation. 211dd4f32aeSBjoern A. Zeeb * 212dd4f32aeSBjoern A. Zeeb * fragment 213dd4f32aeSBjoern A. Zeeb * Indicates that this is an 802.11 fragment frame. This is 214dd4f32aeSBjoern A. Zeeb * set when either the more_frag bit is set in the frame 215dd4f32aeSBjoern A. Zeeb * control or the fragment number is not zero. Only set when 216dd4f32aeSBjoern A. Zeeb * first_msdu is set. 217dd4f32aeSBjoern A. Zeeb * 218dd4f32aeSBjoern A. Zeeb * order 219dd4f32aeSBjoern A. Zeeb * Set if the order bit in the frame control is set. Only set 220dd4f32aeSBjoern A. Zeeb * when first_msdu is set. 221dd4f32aeSBjoern A. Zeeb * 222dd4f32aeSBjoern A. Zeeb * cce_match 223dd4f32aeSBjoern A. Zeeb * Indicates that this status has a corresponding MSDU that 224dd4f32aeSBjoern A. Zeeb * requires FW processing. The OLE will have classification 225dd4f32aeSBjoern A. Zeeb * ring mask registers which will indicate the ring(s) for 226dd4f32aeSBjoern A. Zeeb * packets and descriptors which need FW attention. 227dd4f32aeSBjoern A. Zeeb * 228dd4f32aeSBjoern A. Zeeb * overflow_err 229dd4f32aeSBjoern A. Zeeb * PCU Receive FIFO does not have enough space to store the 230dd4f32aeSBjoern A. Zeeb * full receive packet. Enough space is reserved in the 231dd4f32aeSBjoern A. Zeeb * receive FIFO for the status is written. This MPDU remaining 232dd4f32aeSBjoern A. Zeeb * packets in the PPDU will be filtered and no Ack response 233dd4f32aeSBjoern A. Zeeb * will be transmitted. 234dd4f32aeSBjoern A. Zeeb * 235dd4f32aeSBjoern A. Zeeb * msdu_length_err 236dd4f32aeSBjoern A. Zeeb * Indicates that the MSDU length from the 802.3 encapsulated 237dd4f32aeSBjoern A. Zeeb * length field extends beyond the MPDU boundary. 238dd4f32aeSBjoern A. Zeeb * 239dd4f32aeSBjoern A. Zeeb * tcp_udp_chksum_fail 240dd4f32aeSBjoern A. Zeeb * Indicates that the computed checksum (tcp_udp_chksum) did 241dd4f32aeSBjoern A. Zeeb * not match the checksum in the TCP/UDP header. 242dd4f32aeSBjoern A. Zeeb * 243dd4f32aeSBjoern A. Zeeb * ip_chksum_fail 244dd4f32aeSBjoern A. Zeeb * Indicates that the computed checksum did not match the 245dd4f32aeSBjoern A. Zeeb * checksum in the IP header. 246dd4f32aeSBjoern A. Zeeb * 247dd4f32aeSBjoern A. Zeeb * sa_idx_invalid 248dd4f32aeSBjoern A. Zeeb * Indicates no matching entry was found in the address search 249dd4f32aeSBjoern A. Zeeb * table for the source MAC address. 250dd4f32aeSBjoern A. Zeeb * 251dd4f32aeSBjoern A. Zeeb * da_idx_invalid 252dd4f32aeSBjoern A. Zeeb * Indicates no matching entry was found in the address search 253dd4f32aeSBjoern A. Zeeb * table for the destination MAC address. 254dd4f32aeSBjoern A. Zeeb * 255dd4f32aeSBjoern A. Zeeb * rx_in_tx_decrypt_byp 256dd4f32aeSBjoern A. Zeeb * Indicates that RX packet is not decrypted as Crypto is busy 257dd4f32aeSBjoern A. Zeeb * with TX packet processing. 258dd4f32aeSBjoern A. Zeeb * 259dd4f32aeSBjoern A. Zeeb * encrypt_required 260dd4f32aeSBjoern A. Zeeb * Indicates that this data type frame is not encrypted even if 261dd4f32aeSBjoern A. Zeeb * the policy for this MPDU requires encryption as indicated in 262dd4f32aeSBjoern A. Zeeb * the peer table key type. 263dd4f32aeSBjoern A. Zeeb * 264dd4f32aeSBjoern A. Zeeb * directed 265dd4f32aeSBjoern A. Zeeb * MPDU is a directed packet which means that the RA matched 266dd4f32aeSBjoern A. Zeeb * our STA addresses. In proxySTA it means that the TA matched 267dd4f32aeSBjoern A. Zeeb * an entry in our address search table with the corresponding 268dd4f32aeSBjoern A. Zeeb * 'no_ack' bit is the address search entry cleared. 269dd4f32aeSBjoern A. Zeeb * 270dd4f32aeSBjoern A. Zeeb * buffer_fragment 271dd4f32aeSBjoern A. Zeeb * Indicates that at least one of the rx buffers has been 272dd4f32aeSBjoern A. Zeeb * fragmented. If set the FW should look at the rx_frag_info 273dd4f32aeSBjoern A. Zeeb * descriptor described below. 274dd4f32aeSBjoern A. Zeeb * 275dd4f32aeSBjoern A. Zeeb * mpdu_length_err 276dd4f32aeSBjoern A. Zeeb * Indicates that the MPDU was pre-maturely terminated 277dd4f32aeSBjoern A. Zeeb * resulting in a truncated MPDU. Don't trust the MPDU length 278dd4f32aeSBjoern A. Zeeb * field. 279dd4f32aeSBjoern A. Zeeb * 280dd4f32aeSBjoern A. Zeeb * tkip_mic_err 281dd4f32aeSBjoern A. Zeeb * Indicates that the MPDU Michael integrity check failed 282dd4f32aeSBjoern A. Zeeb * 283dd4f32aeSBjoern A. Zeeb * decrypt_err 284dd4f32aeSBjoern A. Zeeb * Indicates that the MPDU decrypt integrity check failed 285dd4f32aeSBjoern A. Zeeb * 286dd4f32aeSBjoern A. Zeeb * fcs_err 287dd4f32aeSBjoern A. Zeeb * Indicates that the MPDU FCS check failed 288dd4f32aeSBjoern A. Zeeb * 289dd4f32aeSBjoern A. Zeeb * flow_idx_timeout 290dd4f32aeSBjoern A. Zeeb * Indicates an unsuccessful flow search due to the expiring of 291dd4f32aeSBjoern A. Zeeb * the search timer. 292dd4f32aeSBjoern A. Zeeb * 293dd4f32aeSBjoern A. Zeeb * flow_idx_invalid 294dd4f32aeSBjoern A. Zeeb * flow id is not valid. 295dd4f32aeSBjoern A. Zeeb * 296dd4f32aeSBjoern A. Zeeb * amsdu_parser_error 297dd4f32aeSBjoern A. Zeeb * A-MSDU could not be properly de-agregated. 298dd4f32aeSBjoern A. Zeeb * 299dd4f32aeSBjoern A. Zeeb * sa_idx_timeout 300dd4f32aeSBjoern A. Zeeb * Indicates an unsuccessful search for the source MAC address 301dd4f32aeSBjoern A. Zeeb * due to the expiring of the search timer. 302dd4f32aeSBjoern A. Zeeb * 303dd4f32aeSBjoern A. Zeeb * da_idx_timeout 304dd4f32aeSBjoern A. Zeeb * Indicates an unsuccessful search for the destination MAC 305dd4f32aeSBjoern A. Zeeb * address due to the expiring of the search timer. 306dd4f32aeSBjoern A. Zeeb * 307dd4f32aeSBjoern A. Zeeb * msdu_limit_error 308dd4f32aeSBjoern A. Zeeb * Indicates that the MSDU threshold was exceeded and thus 309dd4f32aeSBjoern A. Zeeb * all the rest of the MSDUs will not be scattered and will not 310dd4f32aeSBjoern A. Zeeb * be decasulated but will be DMA'ed in RAW format as a single 311dd4f32aeSBjoern A. Zeeb * MSDU buffer. 312dd4f32aeSBjoern A. Zeeb * 313dd4f32aeSBjoern A. Zeeb * da_is_valid 314dd4f32aeSBjoern A. Zeeb * Indicates that OLE found a valid DA entry. 315dd4f32aeSBjoern A. Zeeb * 316dd4f32aeSBjoern A. Zeeb * da_is_mcbc 317dd4f32aeSBjoern A. Zeeb * Field Only valid if da_is_valid is set. Indicates the DA address 318dd4f32aeSBjoern A. Zeeb * was a Multicast or Broadcast address. 319dd4f32aeSBjoern A. Zeeb * 320dd4f32aeSBjoern A. Zeeb * sa_is_valid 321dd4f32aeSBjoern A. Zeeb * Indicates that OLE found a valid SA entry. 322dd4f32aeSBjoern A. Zeeb * 323dd4f32aeSBjoern A. Zeeb * decrypt_status_code 324dd4f32aeSBjoern A. Zeeb * Field provides insight into the decryption performed. Values are 325dd4f32aeSBjoern A. Zeeb * defined in enum %RX_DESC_DECRYPT_STATUS_CODE*. 326dd4f32aeSBjoern A. Zeeb * 327dd4f32aeSBjoern A. Zeeb * rx_bitmap_not_updated 328dd4f32aeSBjoern A. Zeeb * Frame is received, but RXPCU could not update the receive bitmap 329dd4f32aeSBjoern A. Zeeb * due to (temporary) fifo constraints. 330dd4f32aeSBjoern A. Zeeb * 331dd4f32aeSBjoern A. Zeeb * msdu_done 332dd4f32aeSBjoern A. Zeeb * If set indicates that the RX packet data, RX header data, RX 333dd4f32aeSBjoern A. Zeeb * PPDU start descriptor, RX MPDU start/end descriptor, RX MSDU 334dd4f32aeSBjoern A. Zeeb * start/end descriptors and RX Attention descriptor are all 335dd4f32aeSBjoern A. Zeeb * valid. This bit must be in the last octet of the 336dd4f32aeSBjoern A. Zeeb * descriptor. 337dd4f32aeSBjoern A. Zeeb */ 338dd4f32aeSBjoern A. Zeeb 339dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO0_NDP_FRAME BIT(9) 340dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO0_PHY_ERR BIT(10) 341dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO0_PHY_ERR_MPDU_HDR BIT(11) 342dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO0_PROTO_VER_ERR BIT(12) 343dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO0_AST_LOOKUP_VALID BIT(13) 344dd4f32aeSBjoern A. Zeeb 345dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MPDU_FCTRL_VALID BIT(0) 346dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MPDU_DUR_VALID BIT(1) 347dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MAC_ADDR1_VALID BIT(2) 348dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MAC_ADDR2_VALID BIT(3) 349dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MAC_ADDR3_VALID BIT(4) 350dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MAC_ADDR4_VALID BIT(5) 351dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MPDU_SEQ_CTRL_VALID BIT(6) 352dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MPDU_QOS_CTRL_VALID BIT(7) 353dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MPDU_HT_CTRL_VALID BIT(8) 354dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_ENCRYPT_INFO_VALID BIT(9) 355dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MPDU_FRAG_NUMBER GENMASK(13, 10) 356dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MORE_FRAG_FLAG BIT(14) 357dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_FROM_DS BIT(16) 358dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_TO_DS BIT(17) 359dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_ENCRYPTED BIT(18) 360dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MPDU_RETRY BIT(19) 361dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO1_MPDU_SEQ_NUM GENMASK(31, 20) 362dd4f32aeSBjoern A. Zeeb 363dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_EPD_EN BIT(0) 364dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_ALL_FRAME_ENCPD BIT(1) 365dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_ENC_TYPE GENMASK(5, 2) 366dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_VAR_WEP_KEY_WIDTH GENMASK(7, 6) 367dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_MESH_STA BIT(8) 368dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_BSSID_HIT BIT(9) 369dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_BSSID_NUM GENMASK(13, 10) 370dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_TID GENMASK(17, 14) 371dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO2_TID_WCN6855 GENMASK(18, 15) 372dd4f32aeSBjoern A. Zeeb 373dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO3_REO_DEST_IND GENMASK(4, 0) 374dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO3_FLOW_ID_TOEPLITZ BIT(7) 375dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO3_PKT_SEL_FP_UCAST_DATA BIT(8) 376dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO3_PKT_SEL_FP_MCAST_DATA BIT(9) 377dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO3_PKT_SEL_FP_CTRL_BAR BIT(10) 378dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO3_RXDMA0_SRC_RING_SEL GENMASK(12, 11) 379dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO3_RXDMA0_DST_RING_SEL GENMASK(14, 13) 380dd4f32aeSBjoern A. Zeeb 381dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO4_REO_QUEUE_DESC_HI GENMASK(7, 0) 382dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO4_RECV_QUEUE_NUM GENMASK(23, 8) 383dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO4_PRE_DELIM_ERR_WARN BIT(24) 384dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO4_FIRST_DELIM_ERR BIT(25) 385dd4f32aeSBjoern A. Zeeb 386dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_KEY_ID GENMASK(7, 0) 387dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_NEW_PEER_ENTRY BIT(8) 388dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_DECRYPT_NEEDED BIT(9) 389dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_DECAP_TYPE GENMASK(11, 10) 390dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_VLAN_TAG_C_PADDING BIT(12) 391dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_VLAN_TAG_S_PADDING BIT(13) 392dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_STRIP_VLAN_TAG_C BIT(14) 393dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_STRIP_VLAN_TAG_S BIT(15) 394dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_PRE_DELIM_COUNT GENMASK(27, 16) 395dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_AMPDU_FLAG BIT(28) 396dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO5_BAR_FRAME BIT(29) 397dd4f32aeSBjoern A. Zeeb 398dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_MPDU_LEN GENMASK(13, 0) 399dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_FIRST_MPDU BIT(14) 400dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_MCAST_BCAST BIT(15) 401dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_AST_IDX_NOT_FOUND BIT(16) 402dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_AST_IDX_TIMEOUT BIT(17) 403dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_POWER_MGMT BIT(18) 404dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_NON_QOS BIT(19) 405dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_NULL_DATA BIT(20) 406dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_MGMT_TYPE BIT(21) 407dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_CTRL_TYPE BIT(22) 408dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_MORE_DATA BIT(23) 409dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_EOSP BIT(24) 410dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_FRAGMENT BIT(25) 411dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_ORDER BIT(26) 412dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_UAPSD_TRIGGER BIT(27) 413dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_ENCRYPT_REQUIRED BIT(28) 414dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO6_DIRECTED BIT(29) 415dd4f32aeSBjoern A. Zeeb 416dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_RAW_MPDU BIT(0) 417dd4f32aeSBjoern A. Zeeb 418dd4f32aeSBjoern A. Zeeb struct rx_mpdu_start_ipq8074 { 419dd4f32aeSBjoern A. Zeeb __le16 info0; 420dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 421dd4f32aeSBjoern A. Zeeb __le16 ast_index; 422dd4f32aeSBjoern A. Zeeb __le16 sw_peer_id; 423dd4f32aeSBjoern A. Zeeb __le32 info1; 424dd4f32aeSBjoern A. Zeeb __le32 info2; 425dd4f32aeSBjoern A. Zeeb __le32 pn[4]; 426dd4f32aeSBjoern A. Zeeb __le32 peer_meta_data; 427dd4f32aeSBjoern A. Zeeb __le32 info3; 428dd4f32aeSBjoern A. Zeeb __le32 reo_queue_desc_lo; 429dd4f32aeSBjoern A. Zeeb __le32 info4; 430dd4f32aeSBjoern A. Zeeb __le32 info5; 431dd4f32aeSBjoern A. Zeeb __le32 info6; 432dd4f32aeSBjoern A. Zeeb __le16 frame_ctrl; 433dd4f32aeSBjoern A. Zeeb __le16 duration; 434dd4f32aeSBjoern A. Zeeb u8 addr1[ETH_ALEN]; 435dd4f32aeSBjoern A. Zeeb u8 addr2[ETH_ALEN]; 436dd4f32aeSBjoern A. Zeeb u8 addr3[ETH_ALEN]; 437dd4f32aeSBjoern A. Zeeb __le16 seq_ctrl; 438dd4f32aeSBjoern A. Zeeb u8 addr4[ETH_ALEN]; 439dd4f32aeSBjoern A. Zeeb __le16 qos_ctrl; 440dd4f32aeSBjoern A. Zeeb __le32 ht_ctrl; 441dd4f32aeSBjoern A. Zeeb __le32 raw; 442dd4f32aeSBjoern A. Zeeb } __packed; 443dd4f32aeSBjoern A. Zeeb 444dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO7_REO_DEST_IND GENMASK(4, 0) 445dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO7_LMAC_PEER_ID_MSB GENMASK(6, 5) 446dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO7_FLOW_ID_TOEPLITZ BIT(7) 447dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO7_PKT_SEL_FP_UCAST_DATA BIT(8) 448dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO7_PKT_SEL_FP_MCAST_DATA BIT(9) 449dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO7_PKT_SEL_FP_CTRL_BAR BIT(10) 450dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO7_RXDMA0_SRC_RING_SEL GENMASK(12, 11) 451dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO7_RXDMA0_DST_RING_SEL GENMASK(14, 13) 452dd4f32aeSBjoern A. Zeeb 453dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO8_REO_QUEUE_DESC_HI GENMASK(7, 0) 454dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO8_RECV_QUEUE_NUM GENMASK(23, 8) 455dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO8_PRE_DELIM_ERR_WARN BIT(24) 456dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO8_FIRST_DELIM_ERR BIT(25) 457dd4f32aeSBjoern A. Zeeb 458dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO9_EPD_EN BIT(0) 459dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO9_ALL_FRAME_ENCPD BIT(1) 460dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO9_ENC_TYPE GENMASK(5, 2) 461dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO9_VAR_WEP_KEY_WIDTH GENMASK(7, 6) 462dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO9_MESH_STA GENMASK(9, 8) 463dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO9_BSSID_HIT BIT(10) 464dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO9_BSSID_NUM GENMASK(14, 11) 465dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO9_TID GENMASK(18, 15) 466dd4f32aeSBjoern A. Zeeb 467dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO10_RXPCU_MPDU_FLTR GENMASK(1, 0) 468dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO10_SW_FRAME_GRP_ID GENMASK(8, 2) 469dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO10_NDP_FRAME BIT(9) 470dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO10_PHY_ERR BIT(10) 471dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO10_PHY_ERR_MPDU_HDR BIT(11) 472dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO10_PROTO_VER_ERR BIT(12) 473dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO10_AST_LOOKUP_VALID BIT(13) 474dd4f32aeSBjoern A. Zeeb 475dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MPDU_FCTRL_VALID BIT(0) 476dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MPDU_DUR_VALID BIT(1) 477dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MAC_ADDR1_VALID BIT(2) 478dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MAC_ADDR2_VALID BIT(3) 479dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MAC_ADDR3_VALID BIT(4) 480dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MAC_ADDR4_VALID BIT(5) 481dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MPDU_SEQ_CTRL_VALID BIT(6) 482dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MPDU_QOS_CTRL_VALID BIT(7) 483dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MPDU_HT_CTRL_VALID BIT(8) 484dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_ENCRYPT_INFO_VALID BIT(9) 485dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MPDU_FRAG_NUMBER GENMASK(13, 10) 486dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MORE_FRAG_FLAG BIT(14) 487dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_FROM_DS BIT(16) 488dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_TO_DS BIT(17) 489dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_ENCRYPTED BIT(18) 490dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MPDU_RETRY BIT(19) 491dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO11_MPDU_SEQ_NUM GENMASK(31, 20) 492dd4f32aeSBjoern A. Zeeb 493dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_KEY_ID GENMASK(7, 0) 494dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_NEW_PEER_ENTRY BIT(8) 495dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_DECRYPT_NEEDED BIT(9) 496dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_DECAP_TYPE GENMASK(11, 10) 497dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_VLAN_TAG_C_PADDING BIT(12) 498dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_VLAN_TAG_S_PADDING BIT(13) 499dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_STRIP_VLAN_TAG_C BIT(14) 500dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_STRIP_VLAN_TAG_S BIT(15) 501dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_PRE_DELIM_COUNT GENMASK(27, 16) 502dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_AMPDU_FLAG BIT(28) 503dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_BAR_FRAME BIT(29) 504dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO12_RAW_MPDU BIT(30) 505dd4f32aeSBjoern A. Zeeb 506dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_MPDU_LEN GENMASK(13, 0) 507dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_FIRST_MPDU BIT(14) 508dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_MCAST_BCAST BIT(15) 509dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_AST_IDX_NOT_FOUND BIT(16) 510dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_AST_IDX_TIMEOUT BIT(17) 511dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_POWER_MGMT BIT(18) 512dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_NON_QOS BIT(19) 513dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_NULL_DATA BIT(20) 514dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_MGMT_TYPE BIT(21) 515dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_CTRL_TYPE BIT(22) 516dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_MORE_DATA BIT(23) 517dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_EOSP BIT(24) 518dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_FRAGMENT BIT(25) 519dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_ORDER BIT(26) 520dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_UAPSD_TRIGGER BIT(27) 521dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_ENCRYPT_REQUIRED BIT(28) 522dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_DIRECTED BIT(29) 523dd4f32aeSBjoern A. Zeeb #define RX_MPDU_START_INFO13_AMSDU_PRESENT BIT(30) 524dd4f32aeSBjoern A. Zeeb 525dd4f32aeSBjoern A. Zeeb struct rx_mpdu_start_qcn9074 { 526dd4f32aeSBjoern A. Zeeb __le32 info7; 527dd4f32aeSBjoern A. Zeeb __le32 reo_queue_desc_lo; 528dd4f32aeSBjoern A. Zeeb __le32 info8; 529dd4f32aeSBjoern A. Zeeb __le32 pn[4]; 530dd4f32aeSBjoern A. Zeeb __le32 info9; 531dd4f32aeSBjoern A. Zeeb __le32 peer_meta_data; 532dd4f32aeSBjoern A. Zeeb __le16 info10; 533dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 534dd4f32aeSBjoern A. Zeeb __le16 ast_index; 535dd4f32aeSBjoern A. Zeeb __le16 sw_peer_id; 536dd4f32aeSBjoern A. Zeeb __le32 info11; 537dd4f32aeSBjoern A. Zeeb __le32 info12; 538dd4f32aeSBjoern A. Zeeb __le32 info13; 539dd4f32aeSBjoern A. Zeeb __le16 frame_ctrl; 540dd4f32aeSBjoern A. Zeeb __le16 duration; 541dd4f32aeSBjoern A. Zeeb u8 addr1[ETH_ALEN]; 542dd4f32aeSBjoern A. Zeeb u8 addr2[ETH_ALEN]; 543dd4f32aeSBjoern A. Zeeb u8 addr3[ETH_ALEN]; 544dd4f32aeSBjoern A. Zeeb __le16 seq_ctrl; 545dd4f32aeSBjoern A. Zeeb u8 addr4[ETH_ALEN]; 546dd4f32aeSBjoern A. Zeeb __le16 qos_ctrl; 547dd4f32aeSBjoern A. Zeeb __le32 ht_ctrl; 548dd4f32aeSBjoern A. Zeeb } __packed; 549dd4f32aeSBjoern A. Zeeb 550dd4f32aeSBjoern A. Zeeb struct rx_mpdu_start_wcn6855 { 551dd4f32aeSBjoern A. Zeeb __le32 info3; 552dd4f32aeSBjoern A. Zeeb __le32 reo_queue_desc_lo; 553dd4f32aeSBjoern A. Zeeb __le32 info4; 554dd4f32aeSBjoern A. Zeeb __le32 pn[4]; 555dd4f32aeSBjoern A. Zeeb __le32 info2; 556dd4f32aeSBjoern A. Zeeb __le32 peer_meta_data; 557dd4f32aeSBjoern A. Zeeb __le16 info0; 558dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 559dd4f32aeSBjoern A. Zeeb __le16 ast_index; 560dd4f32aeSBjoern A. Zeeb __le16 sw_peer_id; 561dd4f32aeSBjoern A. Zeeb __le32 info1; 562dd4f32aeSBjoern A. Zeeb __le32 info5; 563dd4f32aeSBjoern A. Zeeb __le32 info6; 564dd4f32aeSBjoern A. Zeeb __le16 frame_ctrl; 565dd4f32aeSBjoern A. Zeeb __le16 duration; 566dd4f32aeSBjoern A. Zeeb u8 addr1[ETH_ALEN]; 567dd4f32aeSBjoern A. Zeeb u8 addr2[ETH_ALEN]; 568dd4f32aeSBjoern A. Zeeb u8 addr3[ETH_ALEN]; 569dd4f32aeSBjoern A. Zeeb __le16 seq_ctrl; 570dd4f32aeSBjoern A. Zeeb u8 addr4[ETH_ALEN]; 571dd4f32aeSBjoern A. Zeeb __le16 qos_ctrl; 572dd4f32aeSBjoern A. Zeeb __le32 ht_ctrl; 573dd4f32aeSBjoern A. Zeeb } __packed; 574dd4f32aeSBjoern A. Zeeb 575dd4f32aeSBjoern A. Zeeb /* rx_mpdu_start 576dd4f32aeSBjoern A. Zeeb * 577dd4f32aeSBjoern A. Zeeb * rxpcu_mpdu_filter_in_category 578dd4f32aeSBjoern A. Zeeb * Field indicates what the reason was that this mpdu frame 579dd4f32aeSBjoern A. Zeeb * was allowed to come into the receive path by rxpcu. Values 580dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_RXPCU_FILTER_*. 581dd4f32aeSBjoern A. Zeeb * Note: for ndp frame, if it was expected because the preceding 582dd4f32aeSBjoern A. Zeeb * NDPA was filter_pass, the setting rxpcu_filter_pass will be 583dd4f32aeSBjoern A. Zeeb * used. This setting will also be used for every ndp frame in 584dd4f32aeSBjoern A. Zeeb * case Promiscuous mode is enabled. 585dd4f32aeSBjoern A. Zeeb * 586dd4f32aeSBjoern A. Zeeb * sw_frame_group_id 587dd4f32aeSBjoern A. Zeeb * SW processes frames based on certain classifications. Values 588dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_SW_FRAME_GRP_ID_*. 589dd4f32aeSBjoern A. Zeeb * 590dd4f32aeSBjoern A. Zeeb * ndp_frame 591dd4f32aeSBjoern A. Zeeb * Indicates that the received frame was an NDP frame. 592dd4f32aeSBjoern A. Zeeb * 593dd4f32aeSBjoern A. Zeeb * phy_err 594dd4f32aeSBjoern A. Zeeb * Indicates that PHY error was received before MAC received data. 595dd4f32aeSBjoern A. Zeeb * 596dd4f32aeSBjoern A. Zeeb * phy_err_during_mpdu_header 597dd4f32aeSBjoern A. Zeeb * PHY error was received before MAC received the complete MPDU 598dd4f32aeSBjoern A. Zeeb * header which was needed for proper decoding. 599dd4f32aeSBjoern A. Zeeb * 600dd4f32aeSBjoern A. Zeeb * protocol_version_err 601dd4f32aeSBjoern A. Zeeb * RXPCU detected a version error in the frame control field. 602dd4f32aeSBjoern A. Zeeb * 603dd4f32aeSBjoern A. Zeeb * ast_based_lookup_valid 604dd4f32aeSBjoern A. Zeeb * AST based lookup for this frame has found a valid result. 605dd4f32aeSBjoern A. Zeeb * 606dd4f32aeSBjoern A. Zeeb * phy_ppdu_id 607dd4f32aeSBjoern A. Zeeb * A ppdu counter value that PHY increments for every PPDU 608dd4f32aeSBjoern A. Zeeb * received. The counter value wraps around. 609dd4f32aeSBjoern A. Zeeb * 610dd4f32aeSBjoern A. Zeeb * ast_index 611dd4f32aeSBjoern A. Zeeb * This field indicates the index of the AST entry corresponding 612dd4f32aeSBjoern A. Zeeb * to this MPDU. It is provided by the GSE module instantiated in 613dd4f32aeSBjoern A. Zeeb * RXPCU. A value of 0xFFFF indicates an invalid AST index. 614dd4f32aeSBjoern A. Zeeb * 615dd4f32aeSBjoern A. Zeeb * sw_peer_id 616dd4f32aeSBjoern A. Zeeb * This field indicates a unique peer identifier. It is set equal 617dd4f32aeSBjoern A. Zeeb * to field 'sw_peer_id' from the AST entry. 618dd4f32aeSBjoern A. Zeeb * 619dd4f32aeSBjoern A. Zeeb * mpdu_frame_control_valid, mpdu_duration_valid, mpdu_qos_control_valid, 620dd4f32aeSBjoern A. Zeeb * mpdu_ht_control_valid, frame_encryption_info_valid 621dd4f32aeSBjoern A. Zeeb * Indicates that each fields have valid entries. 622dd4f32aeSBjoern A. Zeeb * 623dd4f32aeSBjoern A. Zeeb * mac_addr_adx_valid 624dd4f32aeSBjoern A. Zeeb * Corresponding mac_addr_adx_{lo/hi} has valid entries. 625dd4f32aeSBjoern A. Zeeb * 626dd4f32aeSBjoern A. Zeeb * from_ds, to_ds 627dd4f32aeSBjoern A. Zeeb * Valid only when mpdu_frame_control_valid is set. Indicates that 628dd4f32aeSBjoern A. Zeeb * frame is received from DS and sent to DS. 629dd4f32aeSBjoern A. Zeeb * 630dd4f32aeSBjoern A. Zeeb * encrypted 631dd4f32aeSBjoern A. Zeeb * Protected bit from the frame control. 632dd4f32aeSBjoern A. Zeeb * 633dd4f32aeSBjoern A. Zeeb * mpdu_retry 634dd4f32aeSBjoern A. Zeeb * Retry bit from frame control. Only valid when first_msdu is set. 635dd4f32aeSBjoern A. Zeeb * 636dd4f32aeSBjoern A. Zeeb * mpdu_sequence_number 637dd4f32aeSBjoern A. Zeeb * The sequence number from the 802.11 header. 638dd4f32aeSBjoern A. Zeeb * 639dd4f32aeSBjoern A. Zeeb * epd_en 640dd4f32aeSBjoern A. Zeeb * If set, use EPD instead of LPD. 641dd4f32aeSBjoern A. Zeeb * 642dd4f32aeSBjoern A. Zeeb * all_frames_shall_be_encrypted 643dd4f32aeSBjoern A. Zeeb * If set, all frames (data only?) shall be encrypted. If not, 644dd4f32aeSBjoern A. Zeeb * RX CRYPTO shall set an error flag. 645dd4f32aeSBjoern A. Zeeb * 646dd4f32aeSBjoern A. Zeeb * encrypt_type 647dd4f32aeSBjoern A. Zeeb * Values are defined in enum %HAL_ENCRYPT_TYPE_. 648dd4f32aeSBjoern A. Zeeb * 649dd4f32aeSBjoern A. Zeeb * mesh_sta 650dd4f32aeSBjoern A. Zeeb * Indicates a Mesh (11s) STA. 651dd4f32aeSBjoern A. Zeeb * 652dd4f32aeSBjoern A. Zeeb * bssid_hit 653dd4f32aeSBjoern A. Zeeb * BSSID of the incoming frame matched one of the 8 BSSID 654dd4f32aeSBjoern A. Zeeb * register values. 655dd4f32aeSBjoern A. Zeeb * 656dd4f32aeSBjoern A. Zeeb * bssid_number 657dd4f32aeSBjoern A. Zeeb * This number indicates which one out of the 8 BSSID register 658dd4f32aeSBjoern A. Zeeb * values matched the incoming frame. 659dd4f32aeSBjoern A. Zeeb * 660dd4f32aeSBjoern A. Zeeb * tid 661dd4f32aeSBjoern A. Zeeb * TID field in the QoS control field 662dd4f32aeSBjoern A. Zeeb * 663dd4f32aeSBjoern A. Zeeb * pn 664dd4f32aeSBjoern A. Zeeb * The PN number. 665dd4f32aeSBjoern A. Zeeb * 666dd4f32aeSBjoern A. Zeeb * peer_meta_data 667dd4f32aeSBjoern A. Zeeb * Meta data that SW has programmed in the Peer table entry 668dd4f32aeSBjoern A. Zeeb * of the transmitting STA. 669dd4f32aeSBjoern A. Zeeb * 670dd4f32aeSBjoern A. Zeeb * rx_reo_queue_desc_addr_lo 671dd4f32aeSBjoern A. Zeeb * Address (lower 32 bits) of the REO queue descriptor. 672dd4f32aeSBjoern A. Zeeb * 673dd4f32aeSBjoern A. Zeeb * rx_reo_queue_desc_addr_hi 674dd4f32aeSBjoern A. Zeeb * Address (upper 8 bits) of the REO queue descriptor. 675dd4f32aeSBjoern A. Zeeb * 676dd4f32aeSBjoern A. Zeeb * receive_queue_number 677dd4f32aeSBjoern A. Zeeb * Indicates the MPDU queue ID to which this MPDU link 678dd4f32aeSBjoern A. Zeeb * descriptor belongs. 679dd4f32aeSBjoern A. Zeeb * 680dd4f32aeSBjoern A. Zeeb * pre_delim_err_warning 681dd4f32aeSBjoern A. Zeeb * Indicates that a delimiter FCS error was found in between the 682dd4f32aeSBjoern A. Zeeb * previous MPDU and this MPDU. Note that this is just a warning, 683dd4f32aeSBjoern A. Zeeb * and does not mean that this MPDU is corrupted in any way. If 684dd4f32aeSBjoern A. Zeeb * it is, there will be other errors indicated such as FCS or 685dd4f32aeSBjoern A. Zeeb * decrypt errors. 686dd4f32aeSBjoern A. Zeeb * 687dd4f32aeSBjoern A. Zeeb * first_delim_err 688dd4f32aeSBjoern A. Zeeb * Indicates that the first delimiter had a FCS failure. 689dd4f32aeSBjoern A. Zeeb * 690dd4f32aeSBjoern A. Zeeb * key_id 691dd4f32aeSBjoern A. Zeeb * The key ID octet from the IV. 692dd4f32aeSBjoern A. Zeeb * 693dd4f32aeSBjoern A. Zeeb * new_peer_entry 694dd4f32aeSBjoern A. Zeeb * Set if new RX_PEER_ENTRY TLV follows. If clear, RX_PEER_ENTRY 695dd4f32aeSBjoern A. Zeeb * doesn't follow so RX DECRYPTION module either uses old peer 696dd4f32aeSBjoern A. Zeeb * entry or not decrypt. 697dd4f32aeSBjoern A. Zeeb * 698dd4f32aeSBjoern A. Zeeb * decrypt_needed 699dd4f32aeSBjoern A. Zeeb * When RXPCU sets bit 'ast_index_not_found or ast_index_timeout', 700dd4f32aeSBjoern A. Zeeb * RXPCU will also ensure that this bit is NOT set. CRYPTO for that 701dd4f32aeSBjoern A. Zeeb * reason only needs to evaluate this bit and non of the other ones 702dd4f32aeSBjoern A. Zeeb * 703dd4f32aeSBjoern A. Zeeb * decap_type 704dd4f32aeSBjoern A. Zeeb * Used by the OLE during decapsulation. Values are defined in 705dd4f32aeSBjoern A. Zeeb * enum %MPDU_START_DECAP_TYPE_*. 706dd4f32aeSBjoern A. Zeeb * 707dd4f32aeSBjoern A. Zeeb * rx_insert_vlan_c_tag_padding 708dd4f32aeSBjoern A. Zeeb * rx_insert_vlan_s_tag_padding 709dd4f32aeSBjoern A. Zeeb * Insert 4 byte of all zeros as VLAN tag or double VLAN tag if 710dd4f32aeSBjoern A. Zeeb * the rx payload does not have VLAN. 711dd4f32aeSBjoern A. Zeeb * 712dd4f32aeSBjoern A. Zeeb * strip_vlan_c_tag_decap 713dd4f32aeSBjoern A. Zeeb * strip_vlan_s_tag_decap 714dd4f32aeSBjoern A. Zeeb * Strip VLAN or double VLAN during decapsulation. 715dd4f32aeSBjoern A. Zeeb * 716dd4f32aeSBjoern A. Zeeb * pre_delim_count 717dd4f32aeSBjoern A. Zeeb * The number of delimiters before this MPDU. Note that this 718dd4f32aeSBjoern A. Zeeb * number is cleared at PPDU start. If this MPDU is the first 719dd4f32aeSBjoern A. Zeeb * received MPDU in the PPDU and this MPDU gets filtered-in, 720dd4f32aeSBjoern A. Zeeb * this field will indicate the number of delimiters located 721dd4f32aeSBjoern A. Zeeb * after the last MPDU in the previous PPDU. 722dd4f32aeSBjoern A. Zeeb * 723dd4f32aeSBjoern A. Zeeb * If this MPDU is located after the first received MPDU in 724dd4f32aeSBjoern A. Zeeb * an PPDU, this field will indicate the number of delimiters 725dd4f32aeSBjoern A. Zeeb * located between the previous MPDU and this MPDU. 726dd4f32aeSBjoern A. Zeeb * 727dd4f32aeSBjoern A. Zeeb * ampdu_flag 728dd4f32aeSBjoern A. Zeeb * Received frame was part of an A-MPDU. 729dd4f32aeSBjoern A. Zeeb * 730dd4f32aeSBjoern A. Zeeb * bar_frame 731dd4f32aeSBjoern A. Zeeb * Received frame is a BAR frame 732dd4f32aeSBjoern A. Zeeb * 733dd4f32aeSBjoern A. Zeeb * mpdu_length 734dd4f32aeSBjoern A. Zeeb * MPDU length before decapsulation. 735dd4f32aeSBjoern A. Zeeb * 736dd4f32aeSBjoern A. Zeeb * first_mpdu..directed 737dd4f32aeSBjoern A. Zeeb * See definition in RX attention descriptor 738dd4f32aeSBjoern A. Zeeb * 739dd4f32aeSBjoern A. Zeeb */ 740dd4f32aeSBjoern A. Zeeb 741dd4f32aeSBjoern A. Zeeb enum rx_msdu_start_pkt_type { 742dd4f32aeSBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11A, 743dd4f32aeSBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11B, 744dd4f32aeSBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11N, 745dd4f32aeSBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11AC, 746dd4f32aeSBjoern A. Zeeb RX_MSDU_START_PKT_TYPE_11AX, 747dd4f32aeSBjoern A. Zeeb }; 748dd4f32aeSBjoern A. Zeeb 749dd4f32aeSBjoern A. Zeeb enum rx_msdu_start_sgi { 750dd4f32aeSBjoern A. Zeeb RX_MSDU_START_SGI_0_8_US, 751dd4f32aeSBjoern A. Zeeb RX_MSDU_START_SGI_0_4_US, 752dd4f32aeSBjoern A. Zeeb RX_MSDU_START_SGI_1_6_US, 753dd4f32aeSBjoern A. Zeeb RX_MSDU_START_SGI_3_2_US, 754dd4f32aeSBjoern A. Zeeb }; 755dd4f32aeSBjoern A. Zeeb 756dd4f32aeSBjoern A. Zeeb enum rx_msdu_start_recv_bw { 757dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECV_BW_20MHZ, 758dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECV_BW_40MHZ, 759dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECV_BW_80MHZ, 760dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECV_BW_160MHZ, 761dd4f32aeSBjoern A. Zeeb }; 762dd4f32aeSBjoern A. Zeeb 763dd4f32aeSBjoern A. Zeeb enum rx_msdu_start_reception_type { 764dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_SU, 765dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_DL_MU_MIMO, 766dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_DL_MU_OFDMA, 767dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_DL_MU_OFDMA_MIMO, 768dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_UL_MU_MIMO, 769dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_UL_MU_OFDMA, 770dd4f32aeSBjoern A. Zeeb RX_MSDU_START_RECEPTION_TYPE_UL_MU_OFDMA_MIMO, 771dd4f32aeSBjoern A. Zeeb }; 772dd4f32aeSBjoern A. Zeeb 773dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO1_MSDU_LENGTH GENMASK(13, 0) 774dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO1_RSVD_1A BIT(14) 775dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO1_IPSEC_ESP BIT(15) 776dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO1_L3_OFFSET GENMASK(22, 16) 777dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO1_IPSEC_AH BIT(23) 778dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO1_L4_OFFSET GENMASK(31, 24) 779dd4f32aeSBjoern A. Zeeb 780dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_MSDU_NUMBER GENMASK(7, 0) 781dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_DECAP_TYPE GENMASK(9, 8) 782dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_IPV4 BIT(10) 783dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_IPV6 BIT(11) 784dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_TCP BIT(12) 785dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_UDP BIT(13) 786dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_IP_FRAG BIT(14) 787dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_TCP_ONLY_ACK BIT(15) 788dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_DA_IS_BCAST_MCAST BIT(16) 789dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_SELECTED_TOEPLITZ_HASH GENMASK(18, 17) 790dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_IP_FIXED_HDR_VALID BIT(19) 791dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_IP_EXTN_HDR_VALID BIT(20) 792dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_IP_TCP_UDP_HDR_VALID BIT(21) 793dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_MESH_CTRL_PRESENT BIT(22) 794dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_LDPC BIT(23) 795dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_IP4_IP6_NXT_HDR GENMASK(31, 24) 796dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO2_DECAP_FORMAT GENMASK(9, 8) 797dd4f32aeSBjoern A. Zeeb 798dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO3_USER_RSSI GENMASK(7, 0) 799dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO3_PKT_TYPE GENMASK(11, 8) 800dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO3_STBC BIT(12) 801dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO3_SGI GENMASK(14, 13) 802dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO3_RATE_MCS GENMASK(18, 15) 803dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO3_RECV_BW GENMASK(20, 19) 804dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO3_RECEPTION_TYPE GENMASK(23, 21) 805dd4f32aeSBjoern A. Zeeb #define RX_MSDU_START_INFO3_MIMO_SS_BITMAP GENMASK(31, 24) 806dd4f32aeSBjoern A. Zeeb 807dd4f32aeSBjoern A. Zeeb struct rx_msdu_start_ipq8074 { 808dd4f32aeSBjoern A. Zeeb __le16 info0; 809dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 810dd4f32aeSBjoern A. Zeeb __le32 info1; 811dd4f32aeSBjoern A. Zeeb __le32 info2; 812dd4f32aeSBjoern A. Zeeb __le32 toeplitz_hash; 813dd4f32aeSBjoern A. Zeeb __le32 flow_id_toeplitz; 814dd4f32aeSBjoern A. Zeeb __le32 info3; 815dd4f32aeSBjoern A. Zeeb __le32 ppdu_start_timestamp; 816dd4f32aeSBjoern A. Zeeb __le32 phy_meta_data; 817dd4f32aeSBjoern A. Zeeb } __packed; 818dd4f32aeSBjoern A. Zeeb 819dd4f32aeSBjoern A. Zeeb struct rx_msdu_start_qcn9074 { 820dd4f32aeSBjoern A. Zeeb __le16 info0; 821dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 822dd4f32aeSBjoern A. Zeeb __le32 info1; 823dd4f32aeSBjoern A. Zeeb __le32 info2; 824dd4f32aeSBjoern A. Zeeb __le32 toeplitz_hash; 825dd4f32aeSBjoern A. Zeeb __le32 flow_id_toeplitz; 826dd4f32aeSBjoern A. Zeeb __le32 info3; 827dd4f32aeSBjoern A. Zeeb __le32 ppdu_start_timestamp; 828dd4f32aeSBjoern A. Zeeb __le32 phy_meta_data; 829dd4f32aeSBjoern A. Zeeb __le16 vlan_ctag_c1; 830dd4f32aeSBjoern A. Zeeb __le16 vlan_stag_c1; 831dd4f32aeSBjoern A. Zeeb } __packed; 832dd4f32aeSBjoern A. Zeeb 833dd4f32aeSBjoern A. Zeeb struct rx_msdu_start_wcn6855 { 834dd4f32aeSBjoern A. Zeeb __le16 info0; 835dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 836dd4f32aeSBjoern A. Zeeb __le32 info1; 837dd4f32aeSBjoern A. Zeeb __le32 info2; 838dd4f32aeSBjoern A. Zeeb __le32 toeplitz_hash; 839dd4f32aeSBjoern A. Zeeb __le32 flow_id_toeplitz; 840dd4f32aeSBjoern A. Zeeb __le32 info3; 841dd4f32aeSBjoern A. Zeeb __le32 ppdu_start_timestamp; 842dd4f32aeSBjoern A. Zeeb __le32 phy_meta_data; 843dd4f32aeSBjoern A. Zeeb __le16 vlan_ctag_ci; 844dd4f32aeSBjoern A. Zeeb __le16 vlan_stag_ci; 845dd4f32aeSBjoern A. Zeeb } __packed; 846dd4f32aeSBjoern A. Zeeb 847dd4f32aeSBjoern A. Zeeb /* rx_msdu_start 848dd4f32aeSBjoern A. Zeeb * 849dd4f32aeSBjoern A. Zeeb * rxpcu_mpdu_filter_in_category 850dd4f32aeSBjoern A. Zeeb * Field indicates what the reason was that this mpdu frame 851dd4f32aeSBjoern A. Zeeb * was allowed to come into the receive path by rxpcu. Values 852dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_RXPCU_FILTER_*. 853dd4f32aeSBjoern A. Zeeb * 854dd4f32aeSBjoern A. Zeeb * sw_frame_group_id 855dd4f32aeSBjoern A. Zeeb * SW processes frames based on certain classifications. Values 856dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_SW_FRAME_GRP_ID_*. 857dd4f32aeSBjoern A. Zeeb * 858dd4f32aeSBjoern A. Zeeb * phy_ppdu_id 859dd4f32aeSBjoern A. Zeeb * A ppdu counter value that PHY increments for every PPDU 860dd4f32aeSBjoern A. Zeeb * received. The counter value wraps around. 861dd4f32aeSBjoern A. Zeeb * 862dd4f32aeSBjoern A. Zeeb * msdu_length 863dd4f32aeSBjoern A. Zeeb * MSDU length in bytes after decapsulation. 864dd4f32aeSBjoern A. Zeeb * 865dd4f32aeSBjoern A. Zeeb * ipsec_esp 866dd4f32aeSBjoern A. Zeeb * Set if IPv4/v6 packet is using IPsec ESP. 867dd4f32aeSBjoern A. Zeeb * 868dd4f32aeSBjoern A. Zeeb * l3_offset 869dd4f32aeSBjoern A. Zeeb * Depending upon mode bit, this field either indicates the 870dd4f32aeSBjoern A. Zeeb * L3 offset in bytes from the start of the RX_HEADER or the IP 871dd4f32aeSBjoern A. Zeeb * offset in bytes from the start of the packet after 872dd4f32aeSBjoern A. Zeeb * decapsulation. The latter is only valid if ipv4_proto or 873dd4f32aeSBjoern A. Zeeb * ipv6_proto is set. 874dd4f32aeSBjoern A. Zeeb * 875dd4f32aeSBjoern A. Zeeb * ipsec_ah 876dd4f32aeSBjoern A. Zeeb * Set if IPv4/v6 packet is using IPsec AH 877dd4f32aeSBjoern A. Zeeb * 878dd4f32aeSBjoern A. Zeeb * l4_offset 879dd4f32aeSBjoern A. Zeeb * Depending upon mode bit, this field either indicates the 880*28348caeSBjoern A. Zeeb * L4 offset in bytes from the start of RX_HEADER (only valid 881dd4f32aeSBjoern A. Zeeb * if either ipv4_proto or ipv6_proto is set to 1) or indicates 882dd4f32aeSBjoern A. Zeeb * the offset in bytes to the start of TCP or UDP header from 883dd4f32aeSBjoern A. Zeeb * the start of the IP header after decapsulation (Only valid if 884dd4f32aeSBjoern A. Zeeb * tcp_proto or udp_proto is set). The value 0 indicates that 885dd4f32aeSBjoern A. Zeeb * the offset is longer than 127 bytes. 886dd4f32aeSBjoern A. Zeeb * 887dd4f32aeSBjoern A. Zeeb * msdu_number 888dd4f32aeSBjoern A. Zeeb * Indicates the MSDU number within a MPDU. This value is 889dd4f32aeSBjoern A. Zeeb * reset to zero at the start of each MPDU. If the number of 890dd4f32aeSBjoern A. Zeeb * MSDU exceeds 255 this number will wrap using modulo 256. 891dd4f32aeSBjoern A. Zeeb * 892dd4f32aeSBjoern A. Zeeb * decap_type 893dd4f32aeSBjoern A. Zeeb * Indicates the format after decapsulation. Values are defined in 894dd4f32aeSBjoern A. Zeeb * enum %MPDU_START_DECAP_TYPE_*. 895dd4f32aeSBjoern A. Zeeb * 896dd4f32aeSBjoern A. Zeeb * ipv4_proto 897dd4f32aeSBjoern A. Zeeb * Set if L2 layer indicates IPv4 protocol. 898dd4f32aeSBjoern A. Zeeb * 899dd4f32aeSBjoern A. Zeeb * ipv6_proto 900dd4f32aeSBjoern A. Zeeb * Set if L2 layer indicates IPv6 protocol. 901dd4f32aeSBjoern A. Zeeb * 902dd4f32aeSBjoern A. Zeeb * tcp_proto 903dd4f32aeSBjoern A. Zeeb * Set if the ipv4_proto or ipv6_proto are set and the IP protocol 904dd4f32aeSBjoern A. Zeeb * indicates TCP. 905dd4f32aeSBjoern A. Zeeb * 906dd4f32aeSBjoern A. Zeeb * udp_proto 907dd4f32aeSBjoern A. Zeeb * Set if the ipv4_proto or ipv6_proto are set and the IP protocol 908dd4f32aeSBjoern A. Zeeb * indicates UDP. 909dd4f32aeSBjoern A. Zeeb * 910dd4f32aeSBjoern A. Zeeb * ip_frag 911dd4f32aeSBjoern A. Zeeb * Indicates that either the IP More frag bit is set or IP frag 912dd4f32aeSBjoern A. Zeeb * number is non-zero. If set indicates that this is a fragmented 913dd4f32aeSBjoern A. Zeeb * IP packet. 914dd4f32aeSBjoern A. Zeeb * 915dd4f32aeSBjoern A. Zeeb * tcp_only_ack 916dd4f32aeSBjoern A. Zeeb * Set if only the TCP Ack bit is set in the TCP flags and if 917dd4f32aeSBjoern A. Zeeb * the TCP payload is 0. 918dd4f32aeSBjoern A. Zeeb * 919dd4f32aeSBjoern A. Zeeb * da_is_bcast_mcast 920dd4f32aeSBjoern A. Zeeb * The destination address is broadcast or multicast. 921dd4f32aeSBjoern A. Zeeb * 922dd4f32aeSBjoern A. Zeeb * toeplitz_hash 923dd4f32aeSBjoern A. Zeeb * Actual chosen Hash. 924dd4f32aeSBjoern A. Zeeb * 0 - Toeplitz hash of 2-tuple (IP source address, IP 925dd4f32aeSBjoern A. Zeeb * destination address) 926dd4f32aeSBjoern A. Zeeb * 1 - Toeplitz hash of 4-tuple (IP source address, 927dd4f32aeSBjoern A. Zeeb * IP destination address, L4 (TCP/UDP) source port, 928dd4f32aeSBjoern A. Zeeb * L4 (TCP/UDP) destination port) 929dd4f32aeSBjoern A. Zeeb * 2 - Toeplitz of flow_id 930dd4f32aeSBjoern A. Zeeb * 3 - Zero is used 931dd4f32aeSBjoern A. Zeeb * 932dd4f32aeSBjoern A. Zeeb * ip_fixed_header_valid 933dd4f32aeSBjoern A. Zeeb * Fixed 20-byte IPv4 header or 40-byte IPv6 header parsed 934dd4f32aeSBjoern A. Zeeb * fully within first 256 bytes of the packet 935dd4f32aeSBjoern A. Zeeb * 936dd4f32aeSBjoern A. Zeeb * ip_extn_header_valid 937dd4f32aeSBjoern A. Zeeb * IPv6/IPv6 header, including IPv4 options and 938dd4f32aeSBjoern A. Zeeb * recognizable extension headers parsed fully within first 256 939dd4f32aeSBjoern A. Zeeb * bytes of the packet 940dd4f32aeSBjoern A. Zeeb * 941dd4f32aeSBjoern A. Zeeb * tcp_udp_header_valid 942dd4f32aeSBjoern A. Zeeb * Fixed 20-byte TCP (excluding TCP options) or 8-byte UDP 943dd4f32aeSBjoern A. Zeeb * header parsed fully within first 256 bytes of the packet 944dd4f32aeSBjoern A. Zeeb * 945dd4f32aeSBjoern A. Zeeb * mesh_control_present 946dd4f32aeSBjoern A. Zeeb * When set, this MSDU includes the 'Mesh Control' field 947dd4f32aeSBjoern A. Zeeb * 948dd4f32aeSBjoern A. Zeeb * ldpc 949dd4f32aeSBjoern A. Zeeb * 950dd4f32aeSBjoern A. Zeeb * ip4_protocol_ip6_next_header 951dd4f32aeSBjoern A. Zeeb * For IPv4, this is the 8 bit protocol field set). For IPv6 this 952dd4f32aeSBjoern A. Zeeb * is the 8 bit next_header field. 953dd4f32aeSBjoern A. Zeeb * 954dd4f32aeSBjoern A. Zeeb * toeplitz_hash_2_or_4 955dd4f32aeSBjoern A. Zeeb * Controlled by RxOLE register - If register bit set to 0, 956dd4f32aeSBjoern A. Zeeb * Toeplitz hash is computed over 2-tuple IPv4 or IPv6 src/dest 957dd4f32aeSBjoern A. Zeeb * addresses; otherwise, toeplitz hash is computed over 4-tuple 958dd4f32aeSBjoern A. Zeeb * IPv4 or IPv6 src/dest addresses and src/dest ports. 959dd4f32aeSBjoern A. Zeeb * 960dd4f32aeSBjoern A. Zeeb * flow_id_toeplitz 961dd4f32aeSBjoern A. Zeeb * Toeplitz hash of 5-tuple 962dd4f32aeSBjoern A. Zeeb * {IP source address, IP destination address, IP source port, IP 963dd4f32aeSBjoern A. Zeeb * destination port, L4 protocol} in case of non-IPSec. 964dd4f32aeSBjoern A. Zeeb * 965dd4f32aeSBjoern A. Zeeb * In case of IPSec - Toeplitz hash of 4-tuple 966dd4f32aeSBjoern A. Zeeb * {IP source address, IP destination address, SPI, L4 protocol} 967dd4f32aeSBjoern A. Zeeb * 968dd4f32aeSBjoern A. Zeeb * The relevant Toeplitz key registers are provided in RxOLE's 969dd4f32aeSBjoern A. Zeeb * instance of common parser module. These registers are separate 970dd4f32aeSBjoern A. Zeeb * from the Toeplitz keys used by ASE/FSE modules inside RxOLE. 971dd4f32aeSBjoern A. Zeeb * The actual value will be passed on from common parser module 972dd4f32aeSBjoern A. Zeeb * to RxOLE in one of the WHO_* TLVs. 973dd4f32aeSBjoern A. Zeeb * 974dd4f32aeSBjoern A. Zeeb * user_rssi 975dd4f32aeSBjoern A. Zeeb * RSSI for this user 976dd4f32aeSBjoern A. Zeeb * 977dd4f32aeSBjoern A. Zeeb * pkt_type 978dd4f32aeSBjoern A. Zeeb * Values are defined in enum %RX_MSDU_START_PKT_TYPE_*. 979dd4f32aeSBjoern A. Zeeb * 980dd4f32aeSBjoern A. Zeeb * stbc 981dd4f32aeSBjoern A. Zeeb * When set, use STBC transmission rates. 982dd4f32aeSBjoern A. Zeeb * 983dd4f32aeSBjoern A. Zeeb * sgi 984dd4f32aeSBjoern A. Zeeb * Field only valid when pkt type is HT, VHT or HE. Values are 985dd4f32aeSBjoern A. Zeeb * defined in enum %RX_MSDU_START_SGI_*. 986dd4f32aeSBjoern A. Zeeb * 987dd4f32aeSBjoern A. Zeeb * rate_mcs 988dd4f32aeSBjoern A. Zeeb * MCS Rate used. 989dd4f32aeSBjoern A. Zeeb * 990dd4f32aeSBjoern A. Zeeb * receive_bandwidth 991dd4f32aeSBjoern A. Zeeb * Full receive Bandwidth. Values are defined in enum 992dd4f32aeSBjoern A. Zeeb * %RX_MSDU_START_RECV_*. 993dd4f32aeSBjoern A. Zeeb * 994dd4f32aeSBjoern A. Zeeb * reception_type 995dd4f32aeSBjoern A. Zeeb * Indicates what type of reception this is and defined in enum 996dd4f32aeSBjoern A. Zeeb * %RX_MSDU_START_RECEPTION_TYPE_*. 997dd4f32aeSBjoern A. Zeeb * 998dd4f32aeSBjoern A. Zeeb * mimo_ss_bitmap 999dd4f32aeSBjoern A. Zeeb * Field only valid when 1000dd4f32aeSBjoern A. Zeeb * Reception_type is RX_MSDU_START_RECEPTION_TYPE_DL_MU_MIMO or 1001dd4f32aeSBjoern A. Zeeb * RX_MSDU_START_RECEPTION_TYPE_DL_MU_OFDMA_MIMO. 1002dd4f32aeSBjoern A. Zeeb * 1003dd4f32aeSBjoern A. Zeeb * Bitmap, with each bit indicating if the related spatial 1004dd4f32aeSBjoern A. Zeeb * stream is used for this STA 1005dd4f32aeSBjoern A. Zeeb * 1006dd4f32aeSBjoern A. Zeeb * LSB related to SS 0 1007dd4f32aeSBjoern A. Zeeb * 1008dd4f32aeSBjoern A. Zeeb * 0 - spatial stream not used for this reception 1009dd4f32aeSBjoern A. Zeeb * 1 - spatial stream used for this reception 1010dd4f32aeSBjoern A. Zeeb * 1011dd4f32aeSBjoern A. Zeeb * ppdu_start_timestamp 1012dd4f32aeSBjoern A. Zeeb * Timestamp that indicates when the PPDU that contained this MPDU 1013dd4f32aeSBjoern A. Zeeb * started on the medium. 1014dd4f32aeSBjoern A. Zeeb * 1015dd4f32aeSBjoern A. Zeeb * phy_meta_data 1016dd4f32aeSBjoern A. Zeeb * SW programmed Meta data provided by the PHY. Can be used for SW 1017dd4f32aeSBjoern A. Zeeb * to indicate the channel the device is on. 1018dd4f32aeSBjoern A. Zeeb */ 1019dd4f32aeSBjoern A. Zeeb 1020dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO0_RXPCU_MPDU_FITLER GENMASK(1, 0) 1021dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO0_SW_FRAME_GRP_ID GENMASK(8, 2) 1022dd4f32aeSBjoern A. Zeeb 1023dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO1_KEY_ID GENMASK(7, 0) 1024dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO1_CCE_SUPER_RULE GENMASK(13, 8) 1025dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO1_CCND_TRUNCATE BIT(14) 1026dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO1_CCND_CCE_DIS BIT(15) 1027dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO1_EXT_WAPI_PN GENMASK(31, 16) 1028dd4f32aeSBjoern A. Zeeb 1029dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_REPORTED_MPDU_LEN GENMASK(13, 0) 1030dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_FIRST_MSDU BIT(14) 1031dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_FIRST_MSDU_WCN6855 BIT(28) 1032dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_LAST_MSDU BIT(15) 1033dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_LAST_MSDU_WCN6855 BIT(29) 1034dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_SA_IDX_TIMEOUT BIT(16) 1035dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_DA_IDX_TIMEOUT BIT(17) 1036dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_MSDU_LIMIT_ERR BIT(18) 1037dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_FLOW_IDX_TIMEOUT BIT(19) 1038dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_FLOW_IDX_INVALID BIT(20) 1039dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_WIFI_PARSER_ERR BIT(21) 1040dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_AMSDU_PARSET_ERR BIT(22) 1041dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_SA_IS_VALID BIT(23) 1042dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_DA_IS_VALID BIT(24) 1043dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_DA_IS_MCBC BIT(25) 1044dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_L3_HDR_PADDING GENMASK(27, 26) 1045dd4f32aeSBjoern A. Zeeb 1046dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO3_TCP_FLAG GENMASK(8, 0) 1047dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO3_LRO_ELIGIBLE BIT(9) 1048dd4f32aeSBjoern A. Zeeb 1049dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_DA_OFFSET GENMASK(5, 0) 1050dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_SA_OFFSET GENMASK(11, 6) 1051dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_DA_OFFSET_VALID BIT(12) 1052dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_SA_OFFSET_VALID BIT(13) 1053dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_L3_TYPE GENMASK(31, 16) 1054dd4f32aeSBjoern A. Zeeb 1055dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO5_MSDU_DROP BIT(0) 1056dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO5_REO_DEST_IND GENMASK(5, 1) 1057dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO5_FLOW_IDX GENMASK(25, 6) 1058dd4f32aeSBjoern A. Zeeb 1059dd4f32aeSBjoern A. Zeeb struct rx_msdu_end_ipq8074 { 1060dd4f32aeSBjoern A. Zeeb __le16 info0; 1061dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 1062dd4f32aeSBjoern A. Zeeb __le16 ip_hdr_cksum; 1063dd4f32aeSBjoern A. Zeeb __le16 tcp_udp_cksum; 1064dd4f32aeSBjoern A. Zeeb __le32 info1; 1065dd4f32aeSBjoern A. Zeeb __le32 ext_wapi_pn[2]; 1066dd4f32aeSBjoern A. Zeeb __le32 info2; 1067dd4f32aeSBjoern A. Zeeb __le32 ipv6_options_crc; 1068dd4f32aeSBjoern A. Zeeb __le32 tcp_seq_num; 1069dd4f32aeSBjoern A. Zeeb __le32 tcp_ack_num; 1070dd4f32aeSBjoern A. Zeeb __le16 info3; 1071dd4f32aeSBjoern A. Zeeb __le16 window_size; 1072dd4f32aeSBjoern A. Zeeb __le32 info4; 1073dd4f32aeSBjoern A. Zeeb __le32 rule_indication[2]; 1074dd4f32aeSBjoern A. Zeeb __le16 sa_idx; 1075dd4f32aeSBjoern A. Zeeb __le16 da_idx; 1076dd4f32aeSBjoern A. Zeeb __le32 info5; 1077dd4f32aeSBjoern A. Zeeb __le32 fse_metadata; 1078dd4f32aeSBjoern A. Zeeb __le16 cce_metadata; 1079dd4f32aeSBjoern A. Zeeb __le16 sa_sw_peer_id; 1080dd4f32aeSBjoern A. Zeeb } __packed; 1081dd4f32aeSBjoern A. Zeeb 1082dd4f32aeSBjoern A. Zeeb struct rx_msdu_end_wcn6855 { 1083dd4f32aeSBjoern A. Zeeb __le16 info0; 1084dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 1085dd4f32aeSBjoern A. Zeeb __le16 ip_hdr_cksum; 1086dd4f32aeSBjoern A. Zeeb __le16 reported_mpdu_len; 1087dd4f32aeSBjoern A. Zeeb __le32 info1; 1088dd4f32aeSBjoern A. Zeeb __le32 ext_wapi_pn[2]; 1089dd4f32aeSBjoern A. Zeeb __le32 info4; 1090dd4f32aeSBjoern A. Zeeb __le32 ipv6_options_crc; 1091dd4f32aeSBjoern A. Zeeb __le32 tcp_seq_num; 1092dd4f32aeSBjoern A. Zeeb __le32 tcp_ack_num; 1093dd4f32aeSBjoern A. Zeeb __le16 info3; 1094dd4f32aeSBjoern A. Zeeb __le16 window_size; 1095dd4f32aeSBjoern A. Zeeb __le32 info2; 1096dd4f32aeSBjoern A. Zeeb __le16 sa_idx; 1097dd4f32aeSBjoern A. Zeeb __le16 da_idx; 1098dd4f32aeSBjoern A. Zeeb __le32 info5; 1099dd4f32aeSBjoern A. Zeeb __le32 fse_metadata; 1100dd4f32aeSBjoern A. Zeeb __le16 cce_metadata; 1101dd4f32aeSBjoern A. Zeeb __le16 sa_sw_peer_id; 1102dd4f32aeSBjoern A. Zeeb __le32 rule_indication[2]; 1103dd4f32aeSBjoern A. Zeeb __le32 info6; 1104dd4f32aeSBjoern A. Zeeb __le32 info7; 1105dd4f32aeSBjoern A. Zeeb } __packed; 1106dd4f32aeSBjoern A. Zeeb 1107dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_MPDU_LENGTH_INFO GENMASK(13, 0) 1108dd4f32aeSBjoern A. Zeeb 1109dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_DA_OFFSET GENMASK(5, 0) 1110dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_SA_OFFSET GENMASK(11, 6) 1111dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_DA_OFFSET_VALID BIT(12) 1112dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_SA_OFFSET_VALID BIT(13) 1113dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO2_L3_TYPE GENMASK(31, 16) 1114dd4f32aeSBjoern A. Zeeb 1115dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_SA_IDX_TIMEOUT BIT(0) 1116dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_DA_IDX_TIMEOUT BIT(1) 1117dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_MSDU_LIMIT_ERR BIT(2) 1118dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_FLOW_IDX_TIMEOUT BIT(3) 1119dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_FLOW_IDX_INVALID BIT(4) 1120dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_WIFI_PARSER_ERR BIT(5) 1121dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_AMSDU_PARSER_ERR BIT(6) 1122dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_SA_IS_VALID BIT(7) 1123dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_DA_IS_VALID BIT(8) 1124dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_DA_IS_MCBC BIT(9) 1125dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_L3_HDR_PADDING GENMASK(11, 10) 1126dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_FIRST_MSDU BIT(12) 1127dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO4_LAST_MSDU BIT(13) 1128dd4f32aeSBjoern A. Zeeb 1129dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO6_AGGR_COUNT GENMASK(7, 0) 1130dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO6_FLOW_AGGR_CONTN BIT(8) 1131dd4f32aeSBjoern A. Zeeb #define RX_MSDU_END_INFO6_FISA_TIMEOUT BIT(9) 1132dd4f32aeSBjoern A. Zeeb 1133dd4f32aeSBjoern A. Zeeb struct rx_msdu_end_qcn9074 { 1134dd4f32aeSBjoern A. Zeeb __le16 info0; 1135dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 1136dd4f32aeSBjoern A. Zeeb __le16 ip_hdr_cksum; 1137dd4f32aeSBjoern A. Zeeb __le16 mpdu_length_info; 1138dd4f32aeSBjoern A. Zeeb __le32 info1; 1139dd4f32aeSBjoern A. Zeeb __le32 rule_indication[2]; 1140dd4f32aeSBjoern A. Zeeb __le32 info2; 1141dd4f32aeSBjoern A. Zeeb __le32 ipv6_options_crc; 1142dd4f32aeSBjoern A. Zeeb __le32 tcp_seq_num; 1143dd4f32aeSBjoern A. Zeeb __le32 tcp_ack_num; 1144dd4f32aeSBjoern A. Zeeb __le16 info3; 1145dd4f32aeSBjoern A. Zeeb __le16 window_size; 1146dd4f32aeSBjoern A. Zeeb __le16 tcp_udp_cksum; 1147dd4f32aeSBjoern A. Zeeb __le16 info4; 1148dd4f32aeSBjoern A. Zeeb __le16 sa_idx; 1149dd4f32aeSBjoern A. Zeeb __le16 da_idx; 1150dd4f32aeSBjoern A. Zeeb __le32 info5; 1151dd4f32aeSBjoern A. Zeeb __le32 fse_metadata; 1152dd4f32aeSBjoern A. Zeeb __le16 cce_metadata; 1153dd4f32aeSBjoern A. Zeeb __le16 sa_sw_peer_id; 1154dd4f32aeSBjoern A. Zeeb __le32 info6; 1155dd4f32aeSBjoern A. Zeeb __le16 cum_l4_cksum; 1156dd4f32aeSBjoern A. Zeeb __le16 cum_ip_length; 1157dd4f32aeSBjoern A. Zeeb } __packed; 1158dd4f32aeSBjoern A. Zeeb 1159dd4f32aeSBjoern A. Zeeb /* rx_msdu_end 1160dd4f32aeSBjoern A. Zeeb * 1161dd4f32aeSBjoern A. Zeeb * rxpcu_mpdu_filter_in_category 1162dd4f32aeSBjoern A. Zeeb * Field indicates what the reason was that this mpdu frame 1163dd4f32aeSBjoern A. Zeeb * was allowed to come into the receive path by rxpcu. Values 1164dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_RXPCU_FILTER_*. 1165dd4f32aeSBjoern A. Zeeb * 1166dd4f32aeSBjoern A. Zeeb * sw_frame_group_id 1167dd4f32aeSBjoern A. Zeeb * SW processes frames based on certain classifications. Values 1168dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_SW_FRAME_GRP_ID_*. 1169dd4f32aeSBjoern A. Zeeb * 1170dd4f32aeSBjoern A. Zeeb * phy_ppdu_id 1171dd4f32aeSBjoern A. Zeeb * A ppdu counter value that PHY increments for every PPDU 1172dd4f32aeSBjoern A. Zeeb * received. The counter value wraps around. 1173dd4f32aeSBjoern A. Zeeb * 1174dd4f32aeSBjoern A. Zeeb * ip_hdr_cksum 1175dd4f32aeSBjoern A. Zeeb * This can include the IP header checksum or the pseudo 1176dd4f32aeSBjoern A. Zeeb * header checksum used by TCP/UDP checksum. 1177dd4f32aeSBjoern A. Zeeb * 1178dd4f32aeSBjoern A. Zeeb * tcp_udp_chksum 1179dd4f32aeSBjoern A. Zeeb * The value of the computed TCP/UDP checksum. A mode bit 1180dd4f32aeSBjoern A. Zeeb * selects whether this checksum is the full checksum or the 1181dd4f32aeSBjoern A. Zeeb * partial checksum which does not include the pseudo header. 1182dd4f32aeSBjoern A. Zeeb * 1183dd4f32aeSBjoern A. Zeeb * key_id 1184dd4f32aeSBjoern A. Zeeb * The key ID octet from the IV. Only valid when first_msdu is set. 1185dd4f32aeSBjoern A. Zeeb * 1186dd4f32aeSBjoern A. Zeeb * cce_super_rule 1187dd4f32aeSBjoern A. Zeeb * Indicates the super filter rule. 1188dd4f32aeSBjoern A. Zeeb * 1189dd4f32aeSBjoern A. Zeeb * cce_classify_not_done_truncate 1190dd4f32aeSBjoern A. Zeeb * Classification failed due to truncated frame. 1191dd4f32aeSBjoern A. Zeeb * 1192dd4f32aeSBjoern A. Zeeb * cce_classify_not_done_cce_dis 1193dd4f32aeSBjoern A. Zeeb * Classification failed due to CCE global disable 1194dd4f32aeSBjoern A. Zeeb * 1195dd4f32aeSBjoern A. Zeeb * ext_wapi_pn* 1196dd4f32aeSBjoern A. Zeeb * Extension PN (packet number) which is only used by WAPI. 1197dd4f32aeSBjoern A. Zeeb * 1198dd4f32aeSBjoern A. Zeeb * reported_mpdu_length 1199dd4f32aeSBjoern A. Zeeb * MPDU length before decapsulation. Only valid when first_msdu is 1200dd4f32aeSBjoern A. Zeeb * set. This field is taken directly from the length field of the 1201dd4f32aeSBjoern A. Zeeb * A-MPDU delimiter or the preamble length field for non-A-MPDU 1202dd4f32aeSBjoern A. Zeeb * frames. 1203dd4f32aeSBjoern A. Zeeb * 1204dd4f32aeSBjoern A. Zeeb * first_msdu 1205dd4f32aeSBjoern A. Zeeb * Indicates the first MSDU of A-MSDU. If both first_msdu and 1206dd4f32aeSBjoern A. Zeeb * last_msdu are set in the MSDU then this is a non-aggregated MSDU 1207dd4f32aeSBjoern A. Zeeb * frame: normal MPDU. Interior MSDU in an A-MSDU shall have both 1208dd4f32aeSBjoern A. Zeeb * first_mpdu and last_mpdu bits set to 0. 1209dd4f32aeSBjoern A. Zeeb * 1210dd4f32aeSBjoern A. Zeeb * last_msdu 1211dd4f32aeSBjoern A. Zeeb * Indicates the last MSDU of the A-MSDU. MPDU end status is only 1212dd4f32aeSBjoern A. Zeeb * valid when last_msdu is set. 1213dd4f32aeSBjoern A. Zeeb * 1214dd4f32aeSBjoern A. Zeeb * sa_idx_timeout 1215dd4f32aeSBjoern A. Zeeb * Indicates an unsuccessful MAC source address search due to the 1216dd4f32aeSBjoern A. Zeeb * expiring of the search timer. 1217dd4f32aeSBjoern A. Zeeb * 1218dd4f32aeSBjoern A. Zeeb * da_idx_timeout 1219dd4f32aeSBjoern A. Zeeb * Indicates an unsuccessful MAC destination address search due to 1220dd4f32aeSBjoern A. Zeeb * the expiring of the search timer. 1221dd4f32aeSBjoern A. Zeeb * 1222dd4f32aeSBjoern A. Zeeb * msdu_limit_error 1223dd4f32aeSBjoern A. Zeeb * Indicates that the MSDU threshold was exceeded and thus all the 1224dd4f32aeSBjoern A. Zeeb * rest of the MSDUs will not be scattered and will not be 1225dd4f32aeSBjoern A. Zeeb * decapsulated but will be DMA'ed in RAW format as a single MSDU. 1226dd4f32aeSBjoern A. Zeeb * 1227dd4f32aeSBjoern A. Zeeb * flow_idx_timeout 1228dd4f32aeSBjoern A. Zeeb * Indicates an unsuccessful flow search due to the expiring of 1229dd4f32aeSBjoern A. Zeeb * the search timer. 1230dd4f32aeSBjoern A. Zeeb * 1231dd4f32aeSBjoern A. Zeeb * flow_idx_invalid 1232dd4f32aeSBjoern A. Zeeb * flow id is not valid. 1233dd4f32aeSBjoern A. Zeeb * 1234dd4f32aeSBjoern A. Zeeb * amsdu_parser_error 1235dd4f32aeSBjoern A. Zeeb * A-MSDU could not be properly de-agregated. 1236dd4f32aeSBjoern A. Zeeb * 1237dd4f32aeSBjoern A. Zeeb * sa_is_valid 1238dd4f32aeSBjoern A. Zeeb * Indicates that OLE found a valid SA entry. 1239dd4f32aeSBjoern A. Zeeb * 1240dd4f32aeSBjoern A. Zeeb * da_is_valid 1241dd4f32aeSBjoern A. Zeeb * Indicates that OLE found a valid DA entry. 1242dd4f32aeSBjoern A. Zeeb * 1243dd4f32aeSBjoern A. Zeeb * da_is_mcbc 1244dd4f32aeSBjoern A. Zeeb * Field Only valid if da_is_valid is set. Indicates the DA address 1245dd4f32aeSBjoern A. Zeeb * was a Multicast of Broadcast address. 1246dd4f32aeSBjoern A. Zeeb * 1247dd4f32aeSBjoern A. Zeeb * l3_header_padding 1248dd4f32aeSBjoern A. Zeeb * Number of bytes padded to make sure that the L3 header will 1249dd4f32aeSBjoern A. Zeeb * always start of a Dword boundary. 1250dd4f32aeSBjoern A. Zeeb * 1251dd4f32aeSBjoern A. Zeeb * ipv6_options_crc 1252dd4f32aeSBjoern A. Zeeb * 32 bit CRC computed out of IP v6 extension headers. 1253dd4f32aeSBjoern A. Zeeb * 1254dd4f32aeSBjoern A. Zeeb * tcp_seq_number 1255dd4f32aeSBjoern A. Zeeb * TCP sequence number. 1256dd4f32aeSBjoern A. Zeeb * 1257dd4f32aeSBjoern A. Zeeb * tcp_ack_number 1258dd4f32aeSBjoern A. Zeeb * TCP acknowledge number. 1259dd4f32aeSBjoern A. Zeeb * 1260dd4f32aeSBjoern A. Zeeb * tcp_flag 1261dd4f32aeSBjoern A. Zeeb * TCP flags {NS, CWR, ECE, URG, ACK, PSH, RST, SYN, FIN}. 1262dd4f32aeSBjoern A. Zeeb * 1263dd4f32aeSBjoern A. Zeeb * lro_eligible 1264dd4f32aeSBjoern A. Zeeb * Computed out of TCP and IP fields to indicate that this 1265dd4f32aeSBjoern A. Zeeb * MSDU is eligible for LRO. 1266dd4f32aeSBjoern A. Zeeb * 1267dd4f32aeSBjoern A. Zeeb * window_size 1268dd4f32aeSBjoern A. Zeeb * TCP receive window size. 1269dd4f32aeSBjoern A. Zeeb * 1270dd4f32aeSBjoern A. Zeeb * da_offset 1271dd4f32aeSBjoern A. Zeeb * Offset into MSDU buffer for DA. 1272dd4f32aeSBjoern A. Zeeb * 1273dd4f32aeSBjoern A. Zeeb * sa_offset 1274dd4f32aeSBjoern A. Zeeb * Offset into MSDU buffer for SA. 1275dd4f32aeSBjoern A. Zeeb * 1276dd4f32aeSBjoern A. Zeeb * da_offset_valid 1277dd4f32aeSBjoern A. Zeeb * da_offset field is valid. This will be set to 0 in case 1278dd4f32aeSBjoern A. Zeeb * of a dynamic A-MSDU when DA is compressed. 1279dd4f32aeSBjoern A. Zeeb * 1280dd4f32aeSBjoern A. Zeeb * sa_offset_valid 1281dd4f32aeSBjoern A. Zeeb * sa_offset field is valid. This will be set to 0 in case 1282dd4f32aeSBjoern A. Zeeb * of a dynamic A-MSDU when SA is compressed. 1283dd4f32aeSBjoern A. Zeeb * 1284dd4f32aeSBjoern A. Zeeb * l3_type 1285dd4f32aeSBjoern A. Zeeb * The 16-bit type value indicating the type of L3 later 1286dd4f32aeSBjoern A. Zeeb * extracted from LLC/SNAP, set to zero if SNAP is not 1287dd4f32aeSBjoern A. Zeeb * available. 1288dd4f32aeSBjoern A. Zeeb * 1289dd4f32aeSBjoern A. Zeeb * rule_indication 1290dd4f32aeSBjoern A. Zeeb * Bitmap indicating which of rules have matched. 1291dd4f32aeSBjoern A. Zeeb * 1292dd4f32aeSBjoern A. Zeeb * sa_idx 1293dd4f32aeSBjoern A. Zeeb * The offset in the address table which matches MAC source address 1294dd4f32aeSBjoern A. Zeeb * 1295dd4f32aeSBjoern A. Zeeb * da_idx 1296dd4f32aeSBjoern A. Zeeb * The offset in the address table which matches MAC destination 1297dd4f32aeSBjoern A. Zeeb * address. 1298dd4f32aeSBjoern A. Zeeb * 1299dd4f32aeSBjoern A. Zeeb * msdu_drop 1300dd4f32aeSBjoern A. Zeeb * REO shall drop this MSDU and not forward it to any other ring. 1301dd4f32aeSBjoern A. Zeeb * 1302dd4f32aeSBjoern A. Zeeb * reo_destination_indication 1303dd4f32aeSBjoern A. Zeeb * The id of the reo exit ring where the msdu frame shall push 1304dd4f32aeSBjoern A. Zeeb * after (MPDU level) reordering has finished. Values are defined 1305dd4f32aeSBjoern A. Zeeb * in enum %HAL_RX_MSDU_DESC_REO_DEST_IND_. 1306dd4f32aeSBjoern A. Zeeb * 1307dd4f32aeSBjoern A. Zeeb * flow_idx 1308dd4f32aeSBjoern A. Zeeb * Flow table index. 1309dd4f32aeSBjoern A. Zeeb * 1310dd4f32aeSBjoern A. Zeeb * fse_metadata 1311dd4f32aeSBjoern A. Zeeb * FSE related meta data. 1312dd4f32aeSBjoern A. Zeeb * 1313dd4f32aeSBjoern A. Zeeb * cce_metadata 1314dd4f32aeSBjoern A. Zeeb * CCE related meta data. 1315dd4f32aeSBjoern A. Zeeb * 1316dd4f32aeSBjoern A. Zeeb * sa_sw_peer_id 1317dd4f32aeSBjoern A. Zeeb * sw_peer_id from the address search entry corresponding to the 1318dd4f32aeSBjoern A. Zeeb * source address of the MSDU. 1319dd4f32aeSBjoern A. Zeeb */ 1320dd4f32aeSBjoern A. Zeeb 1321dd4f32aeSBjoern A. Zeeb enum rx_mpdu_end_rxdma_dest_ring { 1322dd4f32aeSBjoern A. Zeeb RX_MPDU_END_RXDMA_DEST_RING_RELEASE, 1323dd4f32aeSBjoern A. Zeeb RX_MPDU_END_RXDMA_DEST_RING_FW, 1324dd4f32aeSBjoern A. Zeeb RX_MPDU_END_RXDMA_DEST_RING_SW, 1325dd4f32aeSBjoern A. Zeeb RX_MPDU_END_RXDMA_DEST_RING_REO, 1326dd4f32aeSBjoern A. Zeeb }; 1327dd4f32aeSBjoern A. Zeeb 1328dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_UNSUP_KTYPE_SHORT_FRAME BIT(11) 1329dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_RX_IN_TX_DECRYPT_BYT BIT(12) 1330dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_OVERFLOW_ERR BIT(13) 1331dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_MPDU_LEN_ERR BIT(14) 1332dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_TKIP_MIC_ERR BIT(15) 1333dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_DECRYPT_ERR BIT(16) 1334dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_UNENCRYPTED_FRAME_ERR BIT(17) 1335dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_PN_FIELDS_VALID BIT(18) 1336dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_FCS_ERR BIT(19) 1337dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_MSDU_LEN_ERR BIT(20) 1338dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_RXDMA0_DEST_RING GENMASK(22, 21) 1339dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_RXDMA1_DEST_RING GENMASK(24, 23) 1340dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_DECRYPT_STATUS_CODE GENMASK(27, 25) 1341dd4f32aeSBjoern A. Zeeb #define RX_MPDU_END_INFO1_RX_BITMAP_NOT_UPD BIT(28) 1342dd4f32aeSBjoern A. Zeeb 1343dd4f32aeSBjoern A. Zeeb struct rx_mpdu_end { 1344dd4f32aeSBjoern A. Zeeb __le16 info0; 1345dd4f32aeSBjoern A. Zeeb __le16 phy_ppdu_id; 1346dd4f32aeSBjoern A. Zeeb __le32 info1; 1347dd4f32aeSBjoern A. Zeeb } __packed; 1348dd4f32aeSBjoern A. Zeeb 1349dd4f32aeSBjoern A. Zeeb /* rx_mpdu_end 1350dd4f32aeSBjoern A. Zeeb * 1351dd4f32aeSBjoern A. Zeeb * rxpcu_mpdu_filter_in_category 1352dd4f32aeSBjoern A. Zeeb * Field indicates what the reason was that this mpdu frame 1353dd4f32aeSBjoern A. Zeeb * was allowed to come into the receive path by rxpcu. Values 1354dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_RXPCU_FILTER_*. 1355dd4f32aeSBjoern A. Zeeb * 1356dd4f32aeSBjoern A. Zeeb * sw_frame_group_id 1357dd4f32aeSBjoern A. Zeeb * SW processes frames based on certain classifications. Values 1358dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_SW_FRAME_GRP_ID_*. 1359dd4f32aeSBjoern A. Zeeb * 1360dd4f32aeSBjoern A. Zeeb * phy_ppdu_id 1361dd4f32aeSBjoern A. Zeeb * A ppdu counter value that PHY increments for every PPDU 1362dd4f32aeSBjoern A. Zeeb * received. The counter value wraps around. 1363dd4f32aeSBjoern A. Zeeb * 1364dd4f32aeSBjoern A. Zeeb * unsup_ktype_short_frame 1365dd4f32aeSBjoern A. Zeeb * This bit will be '1' when WEP or TKIP or WAPI key type is 1366dd4f32aeSBjoern A. Zeeb * received for 11ah short frame. Crypto will bypass the received 1367dd4f32aeSBjoern A. Zeeb * packet without decryption to RxOLE after setting this bit. 1368dd4f32aeSBjoern A. Zeeb * 1369dd4f32aeSBjoern A. Zeeb * rx_in_tx_decrypt_byp 1370dd4f32aeSBjoern A. Zeeb * Indicates that RX packet is not decrypted as Crypto is 1371dd4f32aeSBjoern A. Zeeb * busy with TX packet processing. 1372dd4f32aeSBjoern A. Zeeb * 1373dd4f32aeSBjoern A. Zeeb * overflow_err 1374dd4f32aeSBjoern A. Zeeb * RXPCU Receive FIFO ran out of space to receive the full MPDU. 1375dd4f32aeSBjoern A. Zeeb * Therefore this MPDU is terminated early and is thus corrupted. 1376dd4f32aeSBjoern A. Zeeb * 1377dd4f32aeSBjoern A. Zeeb * This MPDU will not be ACKed. 1378dd4f32aeSBjoern A. Zeeb * 1379dd4f32aeSBjoern A. Zeeb * RXPCU might still be able to correctly receive the following 1380dd4f32aeSBjoern A. Zeeb * MPDUs in the PPDU if enough fifo space became available in time. 1381dd4f32aeSBjoern A. Zeeb * 1382dd4f32aeSBjoern A. Zeeb * mpdu_length_err 1383dd4f32aeSBjoern A. Zeeb * Set by RXPCU if the expected MPDU length does not correspond 1384dd4f32aeSBjoern A. Zeeb * with the actually received number of bytes in the MPDU. 1385dd4f32aeSBjoern A. Zeeb * 1386dd4f32aeSBjoern A. Zeeb * tkip_mic_err 1387dd4f32aeSBjoern A. Zeeb * Set by Rx crypto when crypto detected a TKIP MIC error for 1388dd4f32aeSBjoern A. Zeeb * this MPDU. 1389dd4f32aeSBjoern A. Zeeb * 1390dd4f32aeSBjoern A. Zeeb * decrypt_err 1391dd4f32aeSBjoern A. Zeeb * Set by RX CRYPTO when CRYPTO detected a decrypt error for this 1392dd4f32aeSBjoern A. Zeeb * MPDU or CRYPTO received an encrypted frame, but did not get a 1393dd4f32aeSBjoern A. Zeeb * valid corresponding key id in the peer entry. 1394dd4f32aeSBjoern A. Zeeb * 1395dd4f32aeSBjoern A. Zeeb * unencrypted_frame_err 1396dd4f32aeSBjoern A. Zeeb * Set by RX CRYPTO when CRYPTO detected an unencrypted frame while 1397dd4f32aeSBjoern A. Zeeb * in the peer entry field 'All_frames_shall_be_encrypted' is set. 1398dd4f32aeSBjoern A. Zeeb * 1399dd4f32aeSBjoern A. Zeeb * pn_fields_contain_valid_info 1400dd4f32aeSBjoern A. Zeeb * Set by RX CRYPTO to indicate that there is a valid PN field 1401dd4f32aeSBjoern A. Zeeb * present in this MPDU. 1402dd4f32aeSBjoern A. Zeeb * 1403dd4f32aeSBjoern A. Zeeb * fcs_err 1404dd4f32aeSBjoern A. Zeeb * Set by RXPCU when there is an FCS error detected for this MPDU. 1405dd4f32aeSBjoern A. Zeeb * 1406dd4f32aeSBjoern A. Zeeb * msdu_length_err 1407dd4f32aeSBjoern A. Zeeb * Set by RXOLE when there is an msdu length error detected 1408dd4f32aeSBjoern A. Zeeb * in at least 1 of the MSDUs embedded within the MPDU. 1409dd4f32aeSBjoern A. Zeeb * 1410dd4f32aeSBjoern A. Zeeb * rxdma0_destination_ring 1411dd4f32aeSBjoern A. Zeeb * rxdma1_destination_ring 1412dd4f32aeSBjoern A. Zeeb * The ring to which RXDMA0/1 shall push the frame, assuming 1413dd4f32aeSBjoern A. Zeeb * no MPDU level errors are detected. In case of MPDU level 1414dd4f32aeSBjoern A. Zeeb * errors, RXDMA0/1 might change the RXDMA0/1 destination. Values 1415dd4f32aeSBjoern A. Zeeb * are defined in %enum RX_MPDU_END_RXDMA_DEST_RING_*. 1416dd4f32aeSBjoern A. Zeeb * 1417dd4f32aeSBjoern A. Zeeb * decrypt_status_code 1418dd4f32aeSBjoern A. Zeeb * Field provides insight into the decryption performed. Values 1419dd4f32aeSBjoern A. Zeeb * are defined in enum %RX_DESC_DECRYPT_STATUS_CODE_*. 1420dd4f32aeSBjoern A. Zeeb * 1421dd4f32aeSBjoern A. Zeeb * rx_bitmap_not_updated 1422dd4f32aeSBjoern A. Zeeb * Frame is received, but RXPCU could not update the receive bitmap 1423dd4f32aeSBjoern A. Zeeb * due to (temporary) fifo constraints. 1424dd4f32aeSBjoern A. Zeeb */ 1425dd4f32aeSBjoern A. Zeeb 1426dd4f32aeSBjoern A. Zeeb /* Padding bytes to avoid TLV's spanning across 128 byte boundary */ 1427dd4f32aeSBjoern A. Zeeb #define HAL_RX_DESC_PADDING0_BYTES 4 1428dd4f32aeSBjoern A. Zeeb #define HAL_RX_DESC_PADDING1_BYTES 16 1429dd4f32aeSBjoern A. Zeeb 1430dd4f32aeSBjoern A. Zeeb #define HAL_RX_DESC_HDR_STATUS_LEN 120 1431dd4f32aeSBjoern A. Zeeb 1432dd4f32aeSBjoern A. Zeeb struct hal_rx_desc_ipq8074 { 1433dd4f32aeSBjoern A. Zeeb __le32 msdu_end_tag; 1434dd4f32aeSBjoern A. Zeeb struct rx_msdu_end_ipq8074 msdu_end; 1435dd4f32aeSBjoern A. Zeeb __le32 rx_attn_tag; 1436dd4f32aeSBjoern A. Zeeb struct rx_attention attention; 1437dd4f32aeSBjoern A. Zeeb __le32 msdu_start_tag; 1438dd4f32aeSBjoern A. Zeeb struct rx_msdu_start_ipq8074 msdu_start; 1439dd4f32aeSBjoern A. Zeeb u8 rx_padding0[HAL_RX_DESC_PADDING0_BYTES]; 1440dd4f32aeSBjoern A. Zeeb __le32 mpdu_start_tag; 1441dd4f32aeSBjoern A. Zeeb struct rx_mpdu_start_ipq8074 mpdu_start; 1442dd4f32aeSBjoern A. Zeeb __le32 mpdu_end_tag; 1443dd4f32aeSBjoern A. Zeeb struct rx_mpdu_end mpdu_end; 1444dd4f32aeSBjoern A. Zeeb u8 rx_padding1[HAL_RX_DESC_PADDING1_BYTES]; 1445dd4f32aeSBjoern A. Zeeb __le32 hdr_status_tag; 1446dd4f32aeSBjoern A. Zeeb __le32 phy_ppdu_id; 1447dd4f32aeSBjoern A. Zeeb u8 hdr_status[HAL_RX_DESC_HDR_STATUS_LEN]; 1448*28348caeSBjoern A. Zeeb u8 msdu_payload[]; 1449dd4f32aeSBjoern A. Zeeb } __packed; 1450dd4f32aeSBjoern A. Zeeb 1451dd4f32aeSBjoern A. Zeeb struct hal_rx_desc_qcn9074 { 1452dd4f32aeSBjoern A. Zeeb __le32 msdu_end_tag; 1453dd4f32aeSBjoern A. Zeeb struct rx_msdu_end_qcn9074 msdu_end; 1454dd4f32aeSBjoern A. Zeeb __le32 rx_attn_tag; 1455dd4f32aeSBjoern A. Zeeb struct rx_attention attention; 1456dd4f32aeSBjoern A. Zeeb __le32 msdu_start_tag; 1457dd4f32aeSBjoern A. Zeeb struct rx_msdu_start_qcn9074 msdu_start; 1458dd4f32aeSBjoern A. Zeeb u8 rx_padding0[HAL_RX_DESC_PADDING0_BYTES]; 1459dd4f32aeSBjoern A. Zeeb __le32 mpdu_start_tag; 1460dd4f32aeSBjoern A. Zeeb struct rx_mpdu_start_qcn9074 mpdu_start; 1461dd4f32aeSBjoern A. Zeeb __le32 mpdu_end_tag; 1462dd4f32aeSBjoern A. Zeeb struct rx_mpdu_end mpdu_end; 1463dd4f32aeSBjoern A. Zeeb u8 rx_padding1[HAL_RX_DESC_PADDING1_BYTES]; 1464dd4f32aeSBjoern A. Zeeb __le32 hdr_status_tag; 1465dd4f32aeSBjoern A. Zeeb __le32 phy_ppdu_id; 1466dd4f32aeSBjoern A. Zeeb u8 hdr_status[HAL_RX_DESC_HDR_STATUS_LEN]; 1467*28348caeSBjoern A. Zeeb u8 msdu_payload[]; 1468dd4f32aeSBjoern A. Zeeb } __packed; 1469dd4f32aeSBjoern A. Zeeb 1470dd4f32aeSBjoern A. Zeeb struct hal_rx_desc_wcn6855 { 1471dd4f32aeSBjoern A. Zeeb __le32 msdu_end_tag; 1472dd4f32aeSBjoern A. Zeeb struct rx_msdu_end_wcn6855 msdu_end; 1473dd4f32aeSBjoern A. Zeeb __le32 rx_attn_tag; 1474dd4f32aeSBjoern A. Zeeb struct rx_attention attention; 1475dd4f32aeSBjoern A. Zeeb __le32 msdu_start_tag; 1476dd4f32aeSBjoern A. Zeeb struct rx_msdu_start_wcn6855 msdu_start; 1477dd4f32aeSBjoern A. Zeeb u8 rx_padding0[HAL_RX_DESC_PADDING0_BYTES]; 1478dd4f32aeSBjoern A. Zeeb __le32 mpdu_start_tag; 1479dd4f32aeSBjoern A. Zeeb struct rx_mpdu_start_wcn6855 mpdu_start; 1480dd4f32aeSBjoern A. Zeeb __le32 mpdu_end_tag; 1481dd4f32aeSBjoern A. Zeeb struct rx_mpdu_end mpdu_end; 1482dd4f32aeSBjoern A. Zeeb u8 rx_padding1[HAL_RX_DESC_PADDING1_BYTES]; 1483dd4f32aeSBjoern A. Zeeb __le32 hdr_status_tag; 1484dd4f32aeSBjoern A. Zeeb __le32 phy_ppdu_id; 1485dd4f32aeSBjoern A. Zeeb u8 hdr_status[HAL_RX_DESC_HDR_STATUS_LEN]; 1486*28348caeSBjoern A. Zeeb u8 msdu_payload[]; 1487dd4f32aeSBjoern A. Zeeb } __packed; 1488dd4f32aeSBjoern A. Zeeb 1489dd4f32aeSBjoern A. Zeeb struct hal_rx_desc { 1490dd4f32aeSBjoern A. Zeeb union { 1491dd4f32aeSBjoern A. Zeeb struct hal_rx_desc_ipq8074 ipq8074; 1492dd4f32aeSBjoern A. Zeeb struct hal_rx_desc_qcn9074 qcn9074; 1493dd4f32aeSBjoern A. Zeeb struct hal_rx_desc_wcn6855 wcn6855; 1494dd4f32aeSBjoern A. Zeeb } u; 1495dd4f32aeSBjoern A. Zeeb } __packed; 1496dd4f32aeSBjoern A. Zeeb 1497dd4f32aeSBjoern A. Zeeb #define HAL_RX_RU_ALLOC_TYPE_MAX 6 1498dd4f32aeSBjoern A. Zeeb #define RU_26 1 1499dd4f32aeSBjoern A. Zeeb #define RU_52 2 1500dd4f32aeSBjoern A. Zeeb #define RU_106 4 1501dd4f32aeSBjoern A. Zeeb #define RU_242 9 1502dd4f32aeSBjoern A. Zeeb #define RU_484 18 1503dd4f32aeSBjoern A. Zeeb #define RU_996 37 1504dd4f32aeSBjoern A. Zeeb 1505dd4f32aeSBjoern A. Zeeb #endif /* ATH11K_RX_DESC_H */ 1506