1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2011-2015, 2017 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * 4*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 5*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 6*5113495bSYour Name * above copyright notice and this permission notice appear in all 7*5113495bSYour Name * copies. 8*5113495bSYour Name * 9*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 17*5113495bSYour Name */ 18*5113495bSYour Name 19*5113495bSYour Name #ifndef _RX_DESC_H_ 20*5113495bSYour Name #define _RX_DESC_H_ 21*5113495bSYour Name 22*5113495bSYour Name /* 23*5113495bSYour Name * REMIND: Copy one of rx_desc related structures here for export, 24*5113495bSYour Name * hopes they are always the same between Peregrine and Rome in future 25*5113495bSYour Name */ 26*5113495bSYour Name struct rx_attention { 27*5113495bSYour Name volatile 28*5113495bSYour Name uint32_t first_mpdu:1, /* [0] */ 29*5113495bSYour Name last_mpdu:1, /* [1] */ 30*5113495bSYour Name mcast_bcast:1, /* [2] */ 31*5113495bSYour Name peer_idx_invalid:1, /* [3] */ 32*5113495bSYour Name peer_idx_timeout:1, /* [4] */ 33*5113495bSYour Name power_mgmt:1, /* [5] */ 34*5113495bSYour Name non_qos:1, /* [6] */ 35*5113495bSYour Name null_data:1, /* [7] */ 36*5113495bSYour Name mgmt_type:1, /* [8] */ 37*5113495bSYour Name ctrl_type:1, /* [9] */ 38*5113495bSYour Name more_data:1, /* [10] */ 39*5113495bSYour Name eosp:1, /* [11] */ 40*5113495bSYour Name u_apsd_trigger:1, /* [12] */ 41*5113495bSYour Name fragment:1, /* [13] */ 42*5113495bSYour Name order:1, /* [14] */ 43*5113495bSYour Name classification:1, /* [15] */ 44*5113495bSYour Name overflow_err:1, /* [16] */ 45*5113495bSYour Name msdu_length_err:1, /* [17] */ 46*5113495bSYour Name tcp_udp_chksum_fail:1, /* [18] */ 47*5113495bSYour Name ip_chksum_fail:1, /* [19] */ 48*5113495bSYour Name sa_idx_invalid:1, /* [20] */ 49*5113495bSYour Name da_idx_invalid:1, /* [21] */ 50*5113495bSYour Name sa_idx_timeout:1, /* [22] */ 51*5113495bSYour Name da_idx_timeout:1, /* [23] */ 52*5113495bSYour Name encrypt_required:1, /* [24] */ 53*5113495bSYour Name directed:1, /* [25] */ 54*5113495bSYour Name buffer_fragment:1, /* [26] */ 55*5113495bSYour Name mpdu_length_err:1, /* [27] */ 56*5113495bSYour Name tkip_mic_err:1, /* [28] */ 57*5113495bSYour Name decrypt_err:1, /* [29] */ 58*5113495bSYour Name fcs_err:1, /* [30] */ 59*5113495bSYour Name msdu_done:1; /* [31] */ 60*5113495bSYour Name }; 61*5113495bSYour Name 62*5113495bSYour Name struct rx_frag_info { 63*5113495bSYour Name volatile 64*5113495bSYour Name uint32_t ring0_more_count:8, /* [7:0] */ 65*5113495bSYour Name ring1_more_count:8, /* [15:8] */ 66*5113495bSYour Name ring2_more_count:8, /* [23:16] */ 67*5113495bSYour Name ring3_more_count:8; /* [31:24] */ 68*5113495bSYour Name volatile 69*5113495bSYour Name uint32_t ring4_more_count:8, /* [7:0] */ 70*5113495bSYour Name ring5_more_count:8, /* [15:8] */ 71*5113495bSYour Name ring6_more_count:8, /* [23:16] */ 72*5113495bSYour Name ring7_more_count:8; /* [31:24] */ 73*5113495bSYour Name }; 74*5113495bSYour Name 75*5113495bSYour Name struct rx_msdu_start { 76*5113495bSYour Name volatile 77*5113495bSYour Name uint32_t msdu_length:14, /* [13:0] */ 78*5113495bSYour Name #if defined(HELIUMPLUS) 79*5113495bSYour Name l3_offset:7, /* [20:14] */ 80*5113495bSYour Name ipsec_ah:1, /* [21] */ 81*5113495bSYour Name reserved_0a:2, /* [23:22] */ 82*5113495bSYour Name l4_offset:7, /* [30:24] */ 83*5113495bSYour Name ipsec_esp:1; /* [31] */ 84*5113495bSYour Name #else 85*5113495bSYour Name ip_offset:6, /* [19:14] */ 86*5113495bSYour Name ring_mask:4, /* [23:20] */ 87*5113495bSYour Name tcp_udp_offset:7, /* [30:24] */ 88*5113495bSYour Name reserved_0c:1; /* [31] */ 89*5113495bSYour Name #endif /* defined(HELIUMPLUS) */ 90*5113495bSYour Name #if defined(HELIUMPLUS) 91*5113495bSYour Name volatile uint32_t flow_id_toeplitz:32; /* [31:0] */ 92*5113495bSYour Name #else 93*5113495bSYour Name volatile uint32_t flow_id_crc:32; /* [31:0] */ 94*5113495bSYour Name #endif /* defined(HELIUMPLUS) */ 95*5113495bSYour Name volatile 96*5113495bSYour Name uint32_t msdu_number:8, /* [7:0] */ 97*5113495bSYour Name decap_format:2, /* [9:8] */ 98*5113495bSYour Name ipv4_proto:1, /* [10] */ 99*5113495bSYour Name ipv6_proto:1, /* [11] */ 100*5113495bSYour Name tcp_proto:1, /* [12] */ 101*5113495bSYour Name udp_proto:1, /* [13] */ 102*5113495bSYour Name ip_frag:1, /* [14] */ 103*5113495bSYour Name tcp_only_ack:1, /* [15] */ 104*5113495bSYour Name sa_idx:11, /* [26:16] */ 105*5113495bSYour Name reserved_2b:5; /* [31:27] */ 106*5113495bSYour Name #if defined(HELIUMPLUS) 107*5113495bSYour Name volatile 108*5113495bSYour Name uint32_t da_idx:11, /* [10:0] */ 109*5113495bSYour Name da_is_bcast_mcast:1, /* [11] */ 110*5113495bSYour Name reserved_3a:4, /* [15:12] */ 111*5113495bSYour Name ip4_protocol_ip6_next_header:8, /* [23:16] */ 112*5113495bSYour Name ring_mask:8; /* [31:24] */ 113*5113495bSYour Name volatile uint32_t toeplitz_hash_2_or_4:32; /* [31:0] */ 114*5113495bSYour Name #endif /* defined(HELIUMPLUS) */ 115*5113495bSYour Name }; 116*5113495bSYour Name 117*5113495bSYour Name struct rx_msdu_end { 118*5113495bSYour Name volatile 119*5113495bSYour Name uint32_t ip_hdr_chksum:16, /* [15:0] */ 120*5113495bSYour Name tcp_udp_chksum:16; /* [31:16] */ 121*5113495bSYour Name volatile 122*5113495bSYour Name uint32_t key_id_octet:8, /* [7:0] */ 123*5113495bSYour Name #if defined(HELIUMPLUS) 124*5113495bSYour Name classification_rule:6, /* [13:8] */ 125*5113495bSYour Name classify_not_done_truncate:1, /* [14] */ 126*5113495bSYour Name classify_not_done_cce_dis:1, /* [15] */ 127*5113495bSYour Name #else 128*5113495bSYour Name classification_filter:8, /* [15:8] */ 129*5113495bSYour Name #endif /* defined(HELIUMPLUS) */ 130*5113495bSYour Name ext_wapi_pn_63_48:16; /* [31:16] */ 131*5113495bSYour Name volatile uint32_t ext_wapi_pn_95_64:32; /* [31:0] */ 132*5113495bSYour Name volatile uint32_t ext_wapi_pn_127_96:32; /* [31:0] */ 133*5113495bSYour Name volatile 134*5113495bSYour Name uint32_t reported_mpdu_length:14, /* [13:0] */ 135*5113495bSYour Name first_msdu:1, /* [14] */ 136*5113495bSYour Name last_msdu:1, /* [15] */ 137*5113495bSYour Name #if defined(HELIUMPLUS) 138*5113495bSYour Name sa_idx_timeout:1, /* [16] */ 139*5113495bSYour Name da_idx_timeout:1, /* [17] */ 140*5113495bSYour Name msdu_limit_error:1, /* [18] */ 141*5113495bSYour Name classify_ring_mask:8, /* [26:19] */ 142*5113495bSYour Name #endif /* defined(HELIUMPLUS) */ 143*5113495bSYour Name reserved_3a:3, /* [29:27] */ 144*5113495bSYour Name pre_delim_err:1, /* [30] */ 145*5113495bSYour Name reserved_3b:1; /* [31] */ 146*5113495bSYour Name #if defined(HELIUMPLUS) 147*5113495bSYour Name volatile uint32_t ipv6_options_crc:32; 148*5113495bSYour Name volatile uint32_t tcp_seq_number:32; 149*5113495bSYour Name volatile uint32_t tcp_ack_number:32; 150*5113495bSYour Name volatile 151*5113495bSYour Name uint32_t tcp_flag:9, /* [8:0] */ 152*5113495bSYour Name lro_eligible:1, /* [9] */ 153*5113495bSYour Name l3_header_padding:3, /* [12:10] */ 154*5113495bSYour Name reserved_8a:3, /* [15:13] */ 155*5113495bSYour Name window_size:16; /* [31:16] */ 156*5113495bSYour Name volatile 157*5113495bSYour Name uint32_t da_offset:6, /* [5:0] */ 158*5113495bSYour Name sa_offset:6, /* [11:6] */ 159*5113495bSYour Name da_offset_valid:1, /* [12] */ 160*5113495bSYour Name sa_offset_valid:1, /* [13] */ 161*5113495bSYour Name type_offset:7, /* [20:14] */ 162*5113495bSYour Name reserved_9a:11; /* [31:21] */ 163*5113495bSYour Name volatile uint32_t rule_indication_31_0:32; 164*5113495bSYour Name volatile uint32_t rule_indication_63_32:32; 165*5113495bSYour Name volatile uint32_t rule_indication_95_64:32; 166*5113495bSYour Name volatile uint32_t rule_indication_127_96:32; 167*5113495bSYour Name #endif /* defined(HELIUMPLUS) */ 168*5113495bSYour Name }; 169*5113495bSYour Name 170*5113495bSYour Name struct rx_mpdu_end { 171*5113495bSYour Name volatile 172*5113495bSYour Name uint32_t reserved_0:13, /* [12:0] */ 173*5113495bSYour Name overflow_err:1, /* [13] */ 174*5113495bSYour Name last_mpdu:1, /* [14] */ 175*5113495bSYour Name post_delim_err:1, /* [15] */ 176*5113495bSYour Name post_delim_cnt:12, /* [27:16] */ 177*5113495bSYour Name mpdu_length_err:1, /* [28] */ 178*5113495bSYour Name tkip_mic_err:1, /* [29] */ 179*5113495bSYour Name decrypt_err:1, /* [30] */ 180*5113495bSYour Name fcs_err:1; /* [31] */ 181*5113495bSYour Name }; 182*5113495bSYour Name 183*5113495bSYour Name 184*5113495bSYour Name #if defined(HELIUMPLUS) 185*5113495bSYour Name 186*5113495bSYour Name struct rx_mpdu_start { 187*5113495bSYour Name volatile 188*5113495bSYour Name uint32_t peer_idx:11, /* [10:0] */ 189*5113495bSYour Name fr_ds:1, /* [11] */ 190*5113495bSYour Name to_ds:1, /* [12] */ 191*5113495bSYour Name encrypted:1, /* [13] */ 192*5113495bSYour Name retry:1, /* [14] */ 193*5113495bSYour Name reserved:1, /* [15] */ 194*5113495bSYour Name seq_num:12, /* [27:16] */ 195*5113495bSYour Name encrypt_type:4; /* [31:28] */ 196*5113495bSYour Name volatile uint32_t pn_31_0:32; /* [31:0] */ 197*5113495bSYour Name volatile 198*5113495bSYour Name uint32_t pn_47_32:16, /* [15:0] */ 199*5113495bSYour Name toeplitz_hash:2, /* [17:16] */ 200*5113495bSYour Name reserved_2:10, /* [27:18] */ 201*5113495bSYour Name tid:4; /* [31:28] */ 202*5113495bSYour Name }; 203*5113495bSYour Name 204*5113495bSYour Name 205*5113495bSYour Name struct rx_ppdu_start { 206*5113495bSYour Name volatile 207*5113495bSYour Name uint32_t rssi_pri_chain0:8, /* [7:0] */ 208*5113495bSYour Name rssi_sec20_chain0:8, /* [15:8] */ 209*5113495bSYour Name rssi_sec40_chain0:8, /* [23:16] */ 210*5113495bSYour Name rssi_sec80_chain0:8; /* [31:24] */ 211*5113495bSYour Name volatile 212*5113495bSYour Name uint32_t rssi_pri_chain1:8, /* [7:0] */ 213*5113495bSYour Name rssi_sec20_chain1:8, /* [15:8] */ 214*5113495bSYour Name rssi_sec40_chain1:8, /* [23:16] */ 215*5113495bSYour Name rssi_sec80_chain1:8; /* [31:24] */ 216*5113495bSYour Name volatile 217*5113495bSYour Name uint32_t rssi_pri_chain2:8, /* [7:0] */ 218*5113495bSYour Name rssi_sec20_chain2:8, /* [15:8] */ 219*5113495bSYour Name rssi_sec40_chain2:8, /* [23:16] */ 220*5113495bSYour Name rssi_sec80_chain2:8; /* [31:24] */ 221*5113495bSYour Name volatile 222*5113495bSYour Name uint32_t rssi_pri_chain3:8, /* [7:0] */ 223*5113495bSYour Name rssi_sec20_chain3:8, /* [15:8] */ 224*5113495bSYour Name rssi_sec40_chain3:8, /* [23:16] */ 225*5113495bSYour Name rssi_sec80_chain3:8; /* [31:24] */ 226*5113495bSYour Name volatile 227*5113495bSYour Name uint32_t rssi_comb:8, /* [7:0] */ 228*5113495bSYour Name bandwidth:3, /* [10:8] */ 229*5113495bSYour Name reserved_4a:5, /* [15:11] */ 230*5113495bSYour Name rssi_comb_ht:8, /* [23:16] */ 231*5113495bSYour Name reserved_4b:8; /* [31:24] */ 232*5113495bSYour Name volatile 233*5113495bSYour Name uint32_t l_sig_rate:4, /*[3:0] */ 234*5113495bSYour Name l_sig_rate_select:1, /* [4] */ 235*5113495bSYour Name l_sig_length:12, /* [16:5] */ 236*5113495bSYour Name l_sig_parity:1, /* [17] */ 237*5113495bSYour Name l_sig_tail:6, /* [23:18] */ 238*5113495bSYour Name preamble_type:8; /* [31:24] */ 239*5113495bSYour Name volatile 240*5113495bSYour Name uint32_t ht_sig_vht_sig_ah_sig_a_1:24, /* [23:0] */ 241*5113495bSYour Name captured_implicit_sounding:1, /* [24] */ 242*5113495bSYour Name reserved_6:7; /* [31:25] */ 243*5113495bSYour Name volatile 244*5113495bSYour Name uint32_t ht_sig_vht_sig_ah_sig_a_2:24, /* [23:0] */ 245*5113495bSYour Name reserved_7:8; /* [31:24] */ 246*5113495bSYour Name volatile uint32_t vht_sig_b:32; /* [31:0] */ 247*5113495bSYour Name volatile 248*5113495bSYour Name uint32_t service:16, /* [15:0] */ 249*5113495bSYour Name reserved_9:16; /* [31:16] */ 250*5113495bSYour Name }; 251*5113495bSYour Name 252*5113495bSYour Name #define VHT_SIG_A_1(rx_desc) ((rx_desc)->ppdu_start.ht_sig_vht_sig_ah_sig_a_1) 253*5113495bSYour Name #define VHT_SIG_A_2(rx_desc) ((rx_desc)->ppdu_start.ht_sig_vht_sig_ah_sig_a_2) 254*5113495bSYour Name #define TSF_TIMESTAMP(rx_desc) \ 255*5113495bSYour Name ((rx_desc)->ppdu_end.rx_pkt_end.phy_timestamp_1_lower_32) 256*5113495bSYour Name 257*5113495bSYour Name struct rx_location_info { 258*5113495bSYour Name volatile 259*5113495bSYour Name uint32_t rtt_fac_legacy:14, /* [13:0] */ 260*5113495bSYour Name rtt_fac_legacy_status:1, /* [14] */ 261*5113495bSYour Name rtt_fac_vht:14, /* [28:15] */ 262*5113495bSYour Name rtt_fac_vht_status:1, /* [29] */ 263*5113495bSYour Name rtt_cfr_status:1, /* [30] */ 264*5113495bSYour Name rtt_cir_status:1; /* [31] */ 265*5113495bSYour Name volatile 266*5113495bSYour Name uint32_t rtt_fac_sifs:10, /* [9:0] */ 267*5113495bSYour Name rtt_fac_sifs_status:2, /* [11:10] */ 268*5113495bSYour Name rtt_channel_dump_size:11, /* [22:12] */ 269*5113495bSYour Name rtt_mac_phy_phase:2, /* [24:23] */ 270*5113495bSYour Name rtt_hw_ifft_mode:1, /* [25] */ 271*5113495bSYour Name rtt_btcf_status:1, /* [26] */ 272*5113495bSYour Name rtt_preamble_type:2, /* [28:27] */ 273*5113495bSYour Name rtt_pkt_bw:2, /* [30:29] */ 274*5113495bSYour Name rtt_gi_type:1; /* [31] */ 275*5113495bSYour Name volatile 276*5113495bSYour Name uint32_t rtt_mcs_rate:4, /* [3:0] */ 277*5113495bSYour Name rtt_strongest_chain:2, /* [5:4] */ 278*5113495bSYour Name rtt_phase_jump:7, /* [12:6] */ 279*5113495bSYour Name rtt_rx_chain_mask:4, /* [16:13] */ 280*5113495bSYour Name rtt_tx_data_start_x_phase:1, /* [17] */ 281*5113495bSYour Name reserved_2:13, /* [30:18] */ 282*5113495bSYour Name rx_location_info_valid:1; /* [31] */ 283*5113495bSYour Name }; 284*5113495bSYour Name 285*5113495bSYour Name struct rx_pkt_end { 286*5113495bSYour Name volatile 287*5113495bSYour Name uint32_t rx_success:1, /* [0] */ 288*5113495bSYour Name reserved_0a:2, /* [2:1] */ 289*5113495bSYour Name error_tx_interrupt_rx:1, /* [3] */ 290*5113495bSYour Name error_ofdm_power_drop:1, /* [4] */ 291*5113495bSYour Name error_ofdm_restart:1, /* [5] */ 292*5113495bSYour Name error_cck_power_drop:1, /* [6] */ 293*5113495bSYour Name error_cck_restart:1, /* [7] */ 294*5113495bSYour Name reserved_0b:24; /* [31:8] */ 295*5113495bSYour Name volatile uint32_t phy_timestamp_1_lower_32:32; /* [31:0] */ 296*5113495bSYour Name volatile uint32_t phy_timestamp_1_upper_32:32; /* [31:0] */ 297*5113495bSYour Name volatile uint32_t phy_timestamp_2_lower_32:32; /* [31:0] */ 298*5113495bSYour Name volatile uint32_t phy_timestamp_2_upper_32:32; /* [31:0] */ 299*5113495bSYour Name struct rx_location_info rx_location_info; 300*5113495bSYour Name }; 301*5113495bSYour Name 302*5113495bSYour Name struct rx_phy_ppdu_end { 303*5113495bSYour Name volatile 304*5113495bSYour Name uint32_t reserved_0a:2, /* [1:0] */ 305*5113495bSYour Name error_radar:1, /* [2] */ 306*5113495bSYour Name error_rx_abort:1, /* [3] */ 307*5113495bSYour Name error_rx_nap:1, /* [4] */ 308*5113495bSYour Name error_ofdm_timing:1, /* [5] */ 309*5113495bSYour Name error_ofdm_signal_parity:1, /* [6] */ 310*5113495bSYour Name error_ofdm_rate_illegal:1, /* [7] */ 311*5113495bSYour Name error_ofdm_length_illegal:1, /* [8] */ 312*5113495bSYour Name error_ppdu_ofdm_restart:1, /* [9] */ 313*5113495bSYour Name error_ofdm_service:1, /* [10] */ 314*5113495bSYour Name error_ppdu_ofdm_power_drop:1, /* [11] */ 315*5113495bSYour Name error_cck_blocker:1, /* [12] */ 316*5113495bSYour Name error_cck_timing:1, /* [13] */ 317*5113495bSYour Name error_cck_header_crc:1, /* [14] */ 318*5113495bSYour Name error_cck_rate_illegal:1, /* [15] */ 319*5113495bSYour Name error_cck_length_illegal:1, /* [16] */ 320*5113495bSYour Name error_ppdu_cck_restart:1, /* [17] */ 321*5113495bSYour Name error_cck_service:1, /* [18] */ 322*5113495bSYour Name error_ppdu_cck_power_drop:1, /* [19] */ 323*5113495bSYour Name error_ht_crc_err:1, /* [20] */ 324*5113495bSYour Name error_ht_length_illegal:1, /* [21] */ 325*5113495bSYour Name error_ht_rate_illegal:1, /* [22] */ 326*5113495bSYour Name error_ht_zlf:1, /* [23] */ 327*5113495bSYour Name error_false_radar_ext:1, /* [24] */ 328*5113495bSYour Name error_green_field:1, /* [25] */ 329*5113495bSYour Name error_spectral_scan:1, /* [26] */ 330*5113495bSYour Name error_rx_bw_gt_dyn_bw:1, /* [27] */ 331*5113495bSYour Name error_leg_ht_mismatch:1, /* [28] */ 332*5113495bSYour Name error_vht_crc_error:1, /* [29] */ 333*5113495bSYour Name error_vht_siga_unsupported:1, /* [30] */ 334*5113495bSYour Name error_vht_lsig_len_invalid:1; /* [31] */ 335*5113495bSYour Name volatile 336*5113495bSYour Name uint32_t error_vht_ndp_or_zlf:1, /* [0] */ 337*5113495bSYour Name error_vht_nsym_lt_zero:1, /* [1] */ 338*5113495bSYour Name error_vht_rx_extra_symbol_mismatch:1, /* [2] */ 339*5113495bSYour Name error_vht_rx_skip_group_id0:1, /* [3] */ 340*5113495bSYour Name error_vht_rx_skip_group_id1to62:1, /* [4] */ 341*5113495bSYour Name error_vht_rx_skip_group_id63:1, /* [5] */ 342*5113495bSYour Name error_ofdm_ldpc_decoder_disabled:1, /* [6] */ 343*5113495bSYour Name error_defer_nap:1, /* [7] */ 344*5113495bSYour Name error_fdomain_timeout:1, /* [8] */ 345*5113495bSYour Name error_lsig_rel_check:1, /* [9] */ 346*5113495bSYour Name error_bt_collision:1, /* [10] */ 347*5113495bSYour Name error_unsupported_mu_feedback:1, /* [11] */ 348*5113495bSYour Name error_ppdu_tx_interrupt_rx:1, /* [12] */ 349*5113495bSYour Name error_rx_unsupported_cbf:1, /* [13] */ 350*5113495bSYour Name reserved_1:18; /* [31:14] */ 351*5113495bSYour Name }; 352*5113495bSYour Name 353*5113495bSYour Name struct rx_timing_offset { 354*5113495bSYour Name volatile 355*5113495bSYour Name uint32_t timing_offset:12, /* [11:0] */ 356*5113495bSYour Name reserved:20; /* [31:12] */ 357*5113495bSYour Name }; 358*5113495bSYour Name 359*5113495bSYour Name struct rx_ppdu_end { 360*5113495bSYour Name volatile uint32_t evm_p0:32; 361*5113495bSYour Name volatile uint32_t evm_p1:32; 362*5113495bSYour Name volatile uint32_t evm_p2:32; 363*5113495bSYour Name volatile uint32_t evm_p3:32; 364*5113495bSYour Name volatile uint32_t evm_p4:32; 365*5113495bSYour Name volatile uint32_t evm_p5:32; 366*5113495bSYour Name volatile uint32_t evm_p6:32; 367*5113495bSYour Name volatile uint32_t evm_p7:32; 368*5113495bSYour Name volatile uint32_t evm_p8:32; 369*5113495bSYour Name volatile uint32_t evm_p9:32; 370*5113495bSYour Name volatile uint32_t evm_p10:32; 371*5113495bSYour Name volatile uint32_t evm_p11:32; 372*5113495bSYour Name volatile uint32_t evm_p12:32; 373*5113495bSYour Name volatile uint32_t evm_p13:32; 374*5113495bSYour Name volatile uint32_t evm_p14:32; 375*5113495bSYour Name volatile uint32_t evm_p15:32; 376*5113495bSYour Name volatile uint32_t reserved_16:32; 377*5113495bSYour Name volatile uint32_t reserved_17:32; 378*5113495bSYour Name volatile uint32_t wb_timestamp_lower_32:32; 379*5113495bSYour Name volatile uint32_t wb_timestamp_upper_32:32; 380*5113495bSYour Name struct rx_pkt_end rx_pkt_end; 381*5113495bSYour Name struct rx_phy_ppdu_end rx_phy_ppdu_end; 382*5113495bSYour Name struct rx_timing_offset rx_timing_offset; 383*5113495bSYour Name volatile 384*5113495bSYour Name uint32_t rx_antenna:24, /* [23:0] */ 385*5113495bSYour Name tx_ht_vht_ack:1, /* [24] */ 386*5113495bSYour Name rx_pkt_end_valid:1, /* [25] */ 387*5113495bSYour Name rx_phy_ppdu_end_valid:1, /* [26] */ 388*5113495bSYour Name rx_timing_offset_valid:1, /* [27] */ 389*5113495bSYour Name bb_captured_channel:1, /* [28] */ 390*5113495bSYour Name unsupported_mu_nc:1, /* [29] */ 391*5113495bSYour Name otp_txbf_disable:1, /* [30] */ 392*5113495bSYour Name reserved_31:1; /* [31] */ 393*5113495bSYour Name volatile 394*5113495bSYour Name uint32_t coex_bt_tx_from_start_of_rx:1, /* [0] */ 395*5113495bSYour Name coex_bt_tx_after_start_of_rx:1, /* [1] */ 396*5113495bSYour Name coex_wan_tx_from_start_of_rx:1, /* [2] */ 397*5113495bSYour Name coex_wan_tx_after_start_of_rx:1, /* [3] */ 398*5113495bSYour Name coex_wlan_tx_from_start_of_rx:1, /* [4] */ 399*5113495bSYour Name coex_wlan_tx_after_start_of_rx:1, /* [5] */ 400*5113495bSYour Name mpdu_delimiter_errors_seen:1, /* [6] */ 401*5113495bSYour Name ftm:1, /* [7] */ 402*5113495bSYour Name ftm_dialog_token:8, /* [15:8] */ 403*5113495bSYour Name ftm_follow_up_dialog_token:8, /* [23:16] */ 404*5113495bSYour Name reserved_32:8; /* [31:24] */ 405*5113495bSYour Name volatile 406*5113495bSYour Name uint32_t before_mpdu_cnt_passing_fcs:8, /* [7:0] */ 407*5113495bSYour Name before_mpdu_cnt_failing_fcs:8, /* [15:8] */ 408*5113495bSYour Name after_mpdu_cnt_passing_fcs:8, /* [23:16] */ 409*5113495bSYour Name after_mpdu_cnt_failing_fcs:8; /* [31:24] */ 410*5113495bSYour Name volatile uint32_t phy_timestamp_tx_lower_32:32; /* [31:0] */ 411*5113495bSYour Name volatile uint32_t phy_timestamp_tx_upper_32:32; /* [31:0] */ 412*5113495bSYour Name volatile 413*5113495bSYour Name uint32_t bb_length:16, /* [15:0] */ 414*5113495bSYour Name bb_data:1, /* [16] */ 415*5113495bSYour Name peer_idx_valid:1, /* [17] */ 416*5113495bSYour Name peer_idx:11, /* [28:18] */ 417*5113495bSYour Name reserved_26:2, /* [30:29] */ 418*5113495bSYour Name ppdu_done:1; /* [31] */ 419*5113495bSYour Name }; 420*5113495bSYour Name #else 421*5113495bSYour Name struct rx_ppdu_start { 422*5113495bSYour Name volatile 423*5113495bSYour Name uint32_t rssi_chain0_pri20:8, /* [7:0] */ 424*5113495bSYour Name rssi_chain0_sec20:8, /* [15:8] */ 425*5113495bSYour Name rssi_chain0_sec40:8, /* [23:16] */ 426*5113495bSYour Name rssi_chain0_sec80:8; /* [31:24] */ 427*5113495bSYour Name volatile 428*5113495bSYour Name uint32_t rssi_chain1_pri20:8, /* [7:0] */ 429*5113495bSYour Name rssi_chain1_sec20:8, /* [15:8] */ 430*5113495bSYour Name rssi_chain1_sec40:8, /* [23:16] */ 431*5113495bSYour Name rssi_chain1_sec80:8; /* [31:24] */ 432*5113495bSYour Name volatile 433*5113495bSYour Name uint32_t rssi_chain2_pri20:8, /* [7:0] */ 434*5113495bSYour Name rssi_chain2_sec20:8, /* [15:8] */ 435*5113495bSYour Name rssi_chain2_sec40:8, /* [23:16] */ 436*5113495bSYour Name rssi_chain2_sec80:8; /* [31:24] */ 437*5113495bSYour Name volatile 438*5113495bSYour Name uint32_t rssi_chain3_pri20:8, /* [7:0] */ 439*5113495bSYour Name rssi_chain3_sec20:8, /* [15:8] */ 440*5113495bSYour Name rssi_chain3_sec40:8, /* [23:16] */ 441*5113495bSYour Name rssi_chain3_sec80:8; /* [31:24] */ 442*5113495bSYour Name volatile 443*5113495bSYour Name uint32_t rssi_comb:8, /* [7:0] */ 444*5113495bSYour Name reserved_4a:16, /* [23:8] */ 445*5113495bSYour Name is_greenfield:1, /* [24] */ 446*5113495bSYour Name reserved_4b:7; /* [31:25] */ 447*5113495bSYour Name volatile 448*5113495bSYour Name uint32_t l_sig_rate:4, /* [3:0] */ 449*5113495bSYour Name l_sig_rate_select:1, /* [4] */ 450*5113495bSYour Name l_sig_length:12, /* [16:5] */ 451*5113495bSYour Name l_sig_parity:1, /* [17] */ 452*5113495bSYour Name l_sig_tail:6, /* [23:18] */ 453*5113495bSYour Name preamble_type:8; /* [31:24] */ 454*5113495bSYour Name volatile 455*5113495bSYour Name uint32_t ht_sig_vht_sig_a_1:24, /* [23:0] */ 456*5113495bSYour Name reserved_6:8; /* [31:24] */ 457*5113495bSYour Name volatile 458*5113495bSYour Name uint32_t ht_sig_vht_sig_a_2:24, /* [23:0] */ 459*5113495bSYour Name txbf_h_info:1, /* [24] */ 460*5113495bSYour Name reserved_7:7; /* [31:25] */ 461*5113495bSYour Name volatile 462*5113495bSYour Name uint32_t vht_sig_b:29, /* [28:0] */ 463*5113495bSYour Name reserved_8:3; /* [31:29] */ 464*5113495bSYour Name volatile 465*5113495bSYour Name uint32_t service:16, /* [15:0] */ 466*5113495bSYour Name reserved_9:16; /* [31:16] */ 467*5113495bSYour Name }; 468*5113495bSYour Name 469*5113495bSYour Name #define VHT_SIG_A_1(rx_desc) ((rx_desc)->ppdu_start.ht_sig_vht_sig_a_1) 470*5113495bSYour Name #define VHT_SIG_A_2(rx_desc) ((rx_desc)->ppdu_start.ht_sig_vht_sig_a_2) 471*5113495bSYour Name 472*5113495bSYour Name #define TSF_TIMESTAMP(rx_desc) ((rx_desc)->ppdu_end.tsf_timestamp) 473*5113495bSYour Name 474*5113495bSYour Name struct rx_mpdu_start { 475*5113495bSYour Name volatile 476*5113495bSYour Name uint32_t peer_idx:11, /* [10:0] */ 477*5113495bSYour Name fr_ds:1, /* [11] */ 478*5113495bSYour Name to_ds:1, /* [12] */ 479*5113495bSYour Name encrypted:1, /* [13] */ 480*5113495bSYour Name retry:1, /* [14] */ 481*5113495bSYour Name txbf_h_info:1, /* [15] */ 482*5113495bSYour Name seq_num:12, /* [27:16] */ 483*5113495bSYour Name encrypt_type:4; /* [31:28] */ 484*5113495bSYour Name volatile uint32_t pn_31_0:32; /* [31:0] */ 485*5113495bSYour Name volatile 486*5113495bSYour Name uint32_t pn_47_32:16, /* [15:0] */ 487*5113495bSYour Name directed:1, /* [16] */ 488*5113495bSYour Name reserved_2:11, /* [27:17] */ 489*5113495bSYour Name tid:4; /* [31:28] */ 490*5113495bSYour Name }; 491*5113495bSYour Name 492*5113495bSYour Name struct rx_ppdu_end { 493*5113495bSYour Name volatile uint32_t evm_p0:32; /* [31:0] */ 494*5113495bSYour Name volatile uint32_t evm_p1:32; /* [31:0] */ 495*5113495bSYour Name volatile uint32_t evm_p2:32; /* [31:0] */ 496*5113495bSYour Name volatile uint32_t evm_p3:32; /* [31:0] */ 497*5113495bSYour Name volatile uint32_t evm_p4:32; /* [31:0] */ 498*5113495bSYour Name volatile uint32_t evm_p5:32; /* [31:0] */ 499*5113495bSYour Name volatile uint32_t evm_p6:32; /* [31:0] */ 500*5113495bSYour Name volatile uint32_t evm_p7:32; /* [31:0] */ 501*5113495bSYour Name volatile uint32_t evm_p8:32; /* [31:0] */ 502*5113495bSYour Name volatile uint32_t evm_p9:32; /* [31:0] */ 503*5113495bSYour Name volatile uint32_t evm_p10:32; /* [31:0] */ 504*5113495bSYour Name volatile uint32_t evm_p11:32; /* [31:0] */ 505*5113495bSYour Name volatile uint32_t evm_p12:32; /* [31:0] */ 506*5113495bSYour Name volatile uint32_t evm_p13:32; /* [31:0] */ 507*5113495bSYour Name volatile uint32_t evm_p14:32; /* [31:0] */ 508*5113495bSYour Name volatile uint32_t evm_p15:32; /* [31:0] */ 509*5113495bSYour Name volatile uint32_t tsf_timestamp:32; /* [31:0] */ 510*5113495bSYour Name volatile uint32_t wb_timestamp:32; /* [31:0] */ 511*5113495bSYour Name volatile 512*5113495bSYour Name uint32_t locationing_timestamp:8, /* [7:0] */ 513*5113495bSYour Name phy_err_code:8, /* [15:8] */ 514*5113495bSYour Name phy_err:1, /* [16] */ 515*5113495bSYour Name rx_location:1, /* [17] */ 516*5113495bSYour Name txbf_h_info:1, /* [18] */ 517*5113495bSYour Name reserved_18:13; /* [31:19] */ 518*5113495bSYour Name volatile 519*5113495bSYour Name uint32_t rx_antenna:24, /* [23:0] */ 520*5113495bSYour Name tx_ht_vht_ack:1, /* [24] */ 521*5113495bSYour Name bb_captured_channel:1, /* [25] */ 522*5113495bSYour Name reserved_19:6; /* [31:26] */ 523*5113495bSYour Name volatile 524*5113495bSYour Name uint32_t rtt_correction_value:24, /* [23:0] */ 525*5113495bSYour Name reserved_20:7, /* [30:24] */ 526*5113495bSYour Name rtt_normal_mode:1; /* [31] */ 527*5113495bSYour Name volatile 528*5113495bSYour Name uint32_t bb_length:16, /* [15:0] */ 529*5113495bSYour Name reserved_21:15, /* [30:16] */ 530*5113495bSYour Name ppdu_done:1; /* [31] */ 531*5113495bSYour Name }; 532*5113495bSYour Name #endif /* defined(HELIUMPLUS) */ 533*5113495bSYour Name 534*5113495bSYour Name #endif /*_RX_DESC_H_*/ 535