Path: blob/main/sys/contrib/dev/athk/ath12k/hal_rx.h
48375 views
/* SPDX-License-Identifier: BSD-3-Clause-Clear */1/*2* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.3* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.4*/56#ifndef ATH12K_HAL_RX_H7#define ATH12K_HAL_RX_H89struct hal_rx_wbm_rel_info {10u32 cookie;11enum hal_wbm_rel_src_module err_rel_src;12enum hal_reo_dest_ring_push_reason push_reason;13u32 err_code;14bool first_msdu;15bool last_msdu;16bool continuation;17void *rx_desc;18bool hw_cc_done;19};2021#define HAL_INVALID_PEERID 0xffff22#define VHT_SIG_SU_NSS_MASK 0x72324#define HAL_RX_MAX_MCS 1225#define HAL_RX_MAX_NSS 82627#define HAL_RX_MPDU_INFO_PN_GET_BYTE1(__val) \28le32_get_bits((__val), GENMASK(7, 0))2930#define HAL_RX_MPDU_INFO_PN_GET_BYTE2(__val) \31le32_get_bits((__val), GENMASK(15, 8))3233#define HAL_RX_MPDU_INFO_PN_GET_BYTE3(__val) \34le32_get_bits((__val), GENMASK(23, 16))3536#define HAL_RX_MPDU_INFO_PN_GET_BYTE4(__val) \37le32_get_bits((__val), GENMASK(31, 24))3839struct hal_rx_mon_status_tlv_hdr {40u32 hdr;41u8 value[];42};4344enum hal_rx_su_mu_coding {45HAL_RX_SU_MU_CODING_BCC,46HAL_RX_SU_MU_CODING_LDPC,47HAL_RX_SU_MU_CODING_MAX,48};4950enum hal_rx_gi {51HAL_RX_GI_0_8_US,52HAL_RX_GI_0_4_US,53HAL_RX_GI_1_6_US,54HAL_RX_GI_3_2_US,55HAL_RX_GI_MAX,56};5758enum hal_rx_bw {59HAL_RX_BW_20MHZ,60HAL_RX_BW_40MHZ,61HAL_RX_BW_80MHZ,62HAL_RX_BW_160MHZ,63HAL_RX_BW_MAX,64};6566enum hal_rx_preamble {67HAL_RX_PREAMBLE_11A,68HAL_RX_PREAMBLE_11B,69HAL_RX_PREAMBLE_11N,70HAL_RX_PREAMBLE_11AC,71HAL_RX_PREAMBLE_11AX,72HAL_RX_PREAMBLE_MAX,73};7475enum hal_rx_reception_type {76HAL_RX_RECEPTION_TYPE_SU,77HAL_RX_RECEPTION_TYPE_MU_MIMO,78HAL_RX_RECEPTION_TYPE_MU_OFDMA,79HAL_RX_RECEPTION_TYPE_MU_OFDMA_MIMO,80HAL_RX_RECEPTION_TYPE_MAX,81};8283enum hal_rx_legacy_rate {84HAL_RX_LEGACY_RATE_1_MBPS,85HAL_RX_LEGACY_RATE_2_MBPS,86HAL_RX_LEGACY_RATE_5_5_MBPS,87HAL_RX_LEGACY_RATE_6_MBPS,88HAL_RX_LEGACY_RATE_9_MBPS,89HAL_RX_LEGACY_RATE_11_MBPS,90HAL_RX_LEGACY_RATE_12_MBPS,91HAL_RX_LEGACY_RATE_18_MBPS,92HAL_RX_LEGACY_RATE_24_MBPS,93HAL_RX_LEGACY_RATE_36_MBPS,94HAL_RX_LEGACY_RATE_48_MBPS,95HAL_RX_LEGACY_RATE_54_MBPS,96HAL_RX_LEGACY_RATE_INVALID,97};9899#define HAL_TLV_STATUS_PPDU_NOT_DONE 0100#define HAL_TLV_STATUS_PPDU_DONE 1101#define HAL_TLV_STATUS_BUF_DONE 2102#define HAL_TLV_STATUS_PPDU_NON_STD_DONE 3103#define HAL_RX_FCS_LEN 4104105enum hal_rx_mon_status {106HAL_RX_MON_STATUS_PPDU_NOT_DONE,107HAL_RX_MON_STATUS_PPDU_DONE,108HAL_RX_MON_STATUS_BUF_DONE,109};110111#define HAL_RX_MAX_MPDU 256112#define HAL_RX_NUM_WORDS_PER_PPDU_BITMAP (HAL_RX_MAX_MPDU >> 5)113114struct hal_rx_user_status {115u32 mcs:4,116nss:3,117ofdma_info_valid:1,118ul_ofdma_ru_start_index:7,119ul_ofdma_ru_width:7,120ul_ofdma_ru_size:8;121u32 ul_ofdma_user_v0_word0;122u32 ul_ofdma_user_v0_word1;123u32 ast_index;124u32 tid;125u16 tcp_msdu_count;126u16 tcp_ack_msdu_count;127u16 udp_msdu_count;128u16 other_msdu_count;129u16 frame_control;130u8 frame_control_info_valid;131u8 data_sequence_control_info_valid;132u16 first_data_seq_ctrl;133u32 preamble_type;134u16 ht_flags;135u16 vht_flags;136u16 he_flags;137u8 rs_flags;138u8 ldpc;139u32 mpdu_cnt_fcs_ok;140u32 mpdu_cnt_fcs_err;141u32 mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];142u32 mpdu_ok_byte_count;143u32 mpdu_err_byte_count;144};145146#define HAL_MAX_UL_MU_USERS 37147148struct hal_rx_mon_ppdu_info {149u32 ppdu_id;150u32 last_ppdu_id;151u64 ppdu_ts;152u32 num_mpdu_fcs_ok;153u32 num_mpdu_fcs_err;154u32 preamble_type;155u32 mpdu_len;156u16 chan_num;157u16 tcp_msdu_count;158u16 tcp_ack_msdu_count;159u16 udp_msdu_count;160u16 other_msdu_count;161u16 peer_id;162u8 rate;163u8 mcs;164u8 nss;165u8 bw;166u8 vht_flag_values1;167u8 vht_flag_values2;168u8 vht_flag_values3[4];169u8 vht_flag_values4;170u8 vht_flag_values5;171u16 vht_flag_values6;172u8 is_stbc;173u8 gi;174u8 sgi;175u8 ldpc;176u8 beamformed;177u8 rssi_comb;178u16 tid;179u8 fc_valid;180u16 ht_flags;181u16 vht_flags;182u16 he_flags;183u16 he_mu_flags;184u8 dcm;185u8 ru_alloc;186u8 reception_type;187u64 tsft;188u64 rx_duration;189u16 frame_control;190u32 ast_index;191u8 rs_fcs_err;192u8 rs_flags;193u8 cck_flag;194u8 ofdm_flag;195u8 ulofdma_flag;196u8 frame_control_info_valid;197u16 he_per_user_1;198u16 he_per_user_2;199u8 he_per_user_position;200u8 he_per_user_known;201u16 he_flags1;202u16 he_flags2;203u8 he_RU[4];204u16 he_data1;205u16 he_data2;206u16 he_data3;207u16 he_data4;208u16 he_data5;209u16 he_data6;210u32 ppdu_len;211u32 prev_ppdu_id;212u32 device_id;213u16 first_data_seq_ctrl;214u8 monitor_direct_used;215u8 data_sequence_control_info_valid;216u8 ltf_size;217u8 rxpcu_filter_pass;218s8 rssi_chain[8][8];219u32 num_users;220u32 mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];221u8 addr1[ETH_ALEN];222u8 addr2[ETH_ALEN];223u8 addr3[ETH_ALEN];224u8 addr4[ETH_ALEN];225struct hal_rx_user_status userstats[HAL_MAX_UL_MU_USERS];226u8 userid;227u16 ampdu_id[HAL_MAX_UL_MU_USERS];228bool first_msdu_in_mpdu;229bool is_ampdu;230u8 medium_prot_type;231};232233#define HAL_RX_PPDU_START_INFO0_PPDU_ID GENMASK(15, 0)234235struct hal_rx_ppdu_start {236__le32 info0;237__le32 chan_num;238__le32 ppdu_start_ts;239} __packed;240241#define HAL_RX_PPDU_END_USER_STATS_INFO0_MPDU_CNT_FCS_ERR GENMASK(25, 16)242243#define HAL_RX_PPDU_END_USER_STATS_INFO1_MPDU_CNT_FCS_OK GENMASK(8, 0)244#define HAL_RX_PPDU_END_USER_STATS_INFO1_FC_VALID BIT(9)245#define HAL_RX_PPDU_END_USER_STATS_INFO1_QOS_CTRL_VALID BIT(10)246#define HAL_RX_PPDU_END_USER_STATS_INFO1_HT_CTRL_VALID BIT(11)247#define HAL_RX_PPDU_END_USER_STATS_INFO1_PKT_TYPE GENMASK(23, 20)248249#define HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX GENMASK(15, 0)250#define HAL_RX_PPDU_END_USER_STATS_INFO2_FRAME_CTRL GENMASK(31, 16)251252#define HAL_RX_PPDU_END_USER_STATS_INFO3_QOS_CTRL GENMASK(31, 16)253254#define HAL_RX_PPDU_END_USER_STATS_INFO4_UDP_MSDU_CNT GENMASK(15, 0)255#define HAL_RX_PPDU_END_USER_STATS_INFO4_TCP_MSDU_CNT GENMASK(31, 16)256257#define HAL_RX_PPDU_END_USER_STATS_INFO5_OTHER_MSDU_CNT GENMASK(15, 0)258#define HAL_RX_PPDU_END_USER_STATS_INFO5_TCP_ACK_MSDU_CNT GENMASK(31, 16)259260#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP GENMASK(15, 0)261#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP GENMASK(31, 16)262263#define HAL_RX_PPDU_END_USER_STATS_MPDU_DELIM_OK_BYTE_COUNT GENMASK(24, 0)264#define HAL_RX_PPDU_END_USER_STATS_MPDU_DELIM_ERR_BYTE_COUNT GENMASK(24, 0)265266struct hal_rx_ppdu_end_user_stats {267__le32 rsvd0[2];268__le32 info0;269__le32 info1;270__le32 info2;271__le32 info3;272__le32 ht_ctrl;273__le32 rsvd1[2];274__le32 info4;275__le32 info5;276__le32 usr_resp_ref;277__le32 info6;278__le32 rsvd3[4];279__le32 mpdu_ok_cnt;280__le32 rsvd4;281__le32 mpdu_err_cnt;282__le32 rsvd5[2];283__le32 usr_resp_ref_ext;284__le32 rsvd6;285} __packed;286287struct hal_rx_ppdu_end_user_stats_ext {288__le32 info0;289__le32 info1;290__le32 info2;291__le32 info3;292__le32 info4;293__le32 info5;294__le32 info6;295} __packed;296297#define HAL_RX_HT_SIG_INFO_INFO0_MCS GENMASK(6, 0)298#define HAL_RX_HT_SIG_INFO_INFO0_BW BIT(7)299300#define HAL_RX_HT_SIG_INFO_INFO1_STBC GENMASK(5, 4)301#define HAL_RX_HT_SIG_INFO_INFO1_FEC_CODING BIT(6)302#define HAL_RX_HT_SIG_INFO_INFO1_GI BIT(7)303304struct hal_rx_ht_sig_info {305__le32 info0;306__le32 info1;307} __packed;308309#define HAL_RX_LSIG_B_INFO_INFO0_RATE GENMASK(3, 0)310#define HAL_RX_LSIG_B_INFO_INFO0_LEN GENMASK(15, 4)311312struct hal_rx_lsig_b_info {313__le32 info0;314} __packed;315316#define HAL_RX_LSIG_A_INFO_INFO0_RATE GENMASK(3, 0)317#define HAL_RX_LSIG_A_INFO_INFO0_LEN GENMASK(16, 5)318#define HAL_RX_LSIG_A_INFO_INFO0_PKT_TYPE GENMASK(27, 24)319320struct hal_rx_lsig_a_info {321__le32 info0;322} __packed;323324#define HAL_RX_VHT_SIG_A_INFO_INFO0_BW GENMASK(1, 0)325#define HAL_RX_VHT_SIG_A_INFO_INFO0_STBC BIT(3)326#define HAL_RX_VHT_SIG_A_INFO_INFO0_GROUP_ID GENMASK(9, 4)327#define HAL_RX_VHT_SIG_A_INFO_INFO0_NSTS GENMASK(21, 10)328329#define HAL_RX_VHT_SIG_A_INFO_INFO1_GI_SETTING GENMASK(1, 0)330#define HAL_RX_VHT_SIG_A_INFO_INFO1_SU_MU_CODING BIT(2)331#define HAL_RX_VHT_SIG_A_INFO_INFO1_MCS GENMASK(7, 4)332#define HAL_RX_VHT_SIG_A_INFO_INFO1_BEAMFORMED BIT(8)333334struct hal_rx_vht_sig_a_info {335__le32 info0;336__le32 info1;337} __packed;338339enum hal_rx_vht_sig_a_gi_setting {340HAL_RX_VHT_SIG_A_NORMAL_GI = 0,341HAL_RX_VHT_SIG_A_SHORT_GI = 1,342HAL_RX_VHT_SIG_A_SHORT_GI_AMBIGUITY = 3,343};344345#define HE_GI_0_8 0346#define HE_GI_0_4 1347#define HE_GI_1_6 2348#define HE_GI_3_2 3349350#define HE_LTF_1_X 0351#define HE_LTF_2_X 1352#define HE_LTF_4_X 2353354#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_TRANSMIT_MCS GENMASK(6, 3)355#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_DCM BIT(7)356#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_TRANSMIT_BW GENMASK(20, 19)357#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_CP_LTF_SIZE GENMASK(22, 21)358#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_NSTS GENMASK(25, 23)359#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_BSS_COLOR GENMASK(13, 8)360#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_SPATIAL_REUSE GENMASK(18, 15)361#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_FORMAT_IND BIT(0)362#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_BEAM_CHANGE BIT(1)363#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_DL_UL_FLAG BIT(2)364365#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_TXOP_DURATION GENMASK(6, 0)366#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_CODING BIT(7)367#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_LDPC_EXTRA BIT(8)368#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_STBC BIT(9)369#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_TXBF BIT(10)370#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_PKT_EXT_FACTOR GENMASK(12, 11)371#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_PKT_EXT_PE_DISAM BIT(13)372#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_DOPPLER_IND BIT(15)373374struct hal_rx_he_sig_a_su_info {375__le32 info0;376__le32 info1;377} __packed;378379#define HAL_RX_HE_SIG_A_MU_DL_INFO0_UL_FLAG BIT(1)380#define HAL_RX_HE_SIG_A_MU_DL_INFO0_MCS_OF_SIGB GENMASK(3, 1)381#define HAL_RX_HE_SIG_A_MU_DL_INFO0_DCM_OF_SIGB BIT(4)382#define HAL_RX_HE_SIG_A_MU_DL_INFO0_BSS_COLOR GENMASK(10, 5)383#define HAL_RX_HE_SIG_A_MU_DL_INFO0_SPATIAL_REUSE GENMASK(14, 11)384#define HAL_RX_HE_SIG_A_MU_DL_INFO0_TRANSMIT_BW GENMASK(17, 15)385#define HAL_RX_HE_SIG_A_MU_DL_INFO0_NUM_SIGB_SYMB GENMASK(21, 18)386#define HAL_RX_HE_SIG_A_MU_DL_INFO0_COMP_MODE_SIGB BIT(22)387#define HAL_RX_HE_SIG_A_MU_DL_INFO0_CP_LTF_SIZE GENMASK(24, 23)388#define HAL_RX_HE_SIG_A_MU_DL_INFO0_DOPPLER_INDICATION BIT(25)389390#define HAL_RX_HE_SIG_A_MU_DL_INFO1_TXOP_DURATION GENMASK(6, 0)391#define HAL_RX_HE_SIG_A_MU_DL_INFO1_CODING BIT(7)392#define HAL_RX_HE_SIG_A_MU_DL_INFO1_NUM_LTF_SYMB GENMASK(10, 8)393#define HAL_RX_HE_SIG_A_MU_DL_INFO1_LDPC_EXTRA BIT(11)394#define HAL_RX_HE_SIG_A_MU_DL_INFO1_STBC BIT(12)395#define HAL_RX_HE_SIG_A_MU_DL_INFO1_TXBF BIT(10)396#define HAL_RX_HE_SIG_A_MU_DL_INFO1_PKT_EXT_FACTOR GENMASK(14, 13)397#define HAL_RX_HE_SIG_A_MU_DL_INFO1_PKT_EXT_PE_DISAM BIT(15)398399struct hal_rx_he_sig_a_mu_dl_info {400__le32 info0;401__le32 info1;402} __packed;403404#define HAL_RX_HE_SIG_B1_MU_INFO_INFO0_RU_ALLOCATION GENMASK(7, 0)405406struct hal_rx_he_sig_b1_mu_info {407__le32 info0;408} __packed;409410#define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_ID GENMASK(10, 0)411#define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_MCS GENMASK(18, 15)412#define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_CODING BIT(20)413#define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_NSTS GENMASK(31, 29)414415struct hal_rx_he_sig_b2_mu_info {416__le32 info0;417} __packed;418419#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_ID GENMASK(10, 0)420#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_NSTS GENMASK(13, 11)421#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_TXBF BIT(19)422#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_MCS GENMASK(18, 15)423#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_DCM BIT(19)424#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_CODING BIT(20)425426struct hal_rx_he_sig_b2_ofdma_info {427__le32 info0;428} __packed;429430enum hal_rx_ul_reception_type {431HAL_RECEPTION_TYPE_ULOFMDA,432HAL_RECEPTION_TYPE_ULMIMO,433HAL_RECEPTION_TYPE_OTHER,434HAL_RECEPTION_TYPE_FRAMELESS435};436437#define HAL_RX_PHYRX_RSSI_LEGACY_INFO_INFO0_RSSI_COMB GENMASK(15, 8)438#define HAL_RX_PHYRX_RSSI_LEGACY_INFO_RSVD1_RECEPTION GENMASK(3, 0)439440struct hal_rx_phyrx_rssi_legacy_info {441__le32 rsvd[35];442__le32 info0;443} __packed;444445#define HAL_RX_MPDU_START_INFO0_PPDU_ID GENMASK(31, 16)446#define HAL_RX_MPDU_START_INFO1_PEERID GENMASK(31, 16)447#define HAL_RX_MPDU_START_INFO2_MPDU_LEN GENMASK(13, 0)448struct hal_rx_mpdu_start {449__le32 info0;450__le32 info1;451__le32 rsvd1[11];452__le32 info2;453__le32 rsvd2[9];454} __packed;455456#define HAL_RX_PPDU_END_DURATION GENMASK(23, 0)457struct hal_rx_ppdu_end_duration {458__le32 rsvd0[9];459__le32 info0;460__le32 rsvd1[4];461} __packed;462463struct hal_rx_rxpcu_classification_overview {464u32 rsvd0;465} __packed;466467struct hal_rx_msdu_desc_info {468u32 msdu_flags;469u16 msdu_len; /* 14 bits for length */470};471472#define HAL_RX_NUM_MSDU_DESC 6473struct hal_rx_msdu_list {474struct hal_rx_msdu_desc_info msdu_info[HAL_RX_NUM_MSDU_DESC];475u32 sw_cookie[HAL_RX_NUM_MSDU_DESC];476u8 rbm[HAL_RX_NUM_MSDU_DESC];477};478479#define HAL_RX_FBM_ACK_INFO0_ADDR1_31_0 GENMASK(31, 0)480#define HAL_RX_FBM_ACK_INFO1_ADDR1_47_32 GENMASK(15, 0)481#define HAL_RX_FBM_ACK_INFO1_ADDR2_15_0 GENMASK(31, 16)482#define HAL_RX_FBM_ACK_INFO2_ADDR2_47_16 GENMASK(31, 0)483484struct hal_rx_frame_bitmap_ack {485__le32 reserved;486__le32 info0;487__le32 info1;488__le32 info2;489__le32 reserved1[10];490} __packed;491492#define HAL_RX_RESP_REQ_INFO0_PPDU_ID GENMASK(15, 0)493#define HAL_RX_RESP_REQ_INFO0_RECEPTION_TYPE BIT(16)494#define HAL_RX_RESP_REQ_INFO1_DURATION GENMASK(15, 0)495#define HAL_RX_RESP_REQ_INFO1_RATE_MCS GENMASK(24, 21)496#define HAL_RX_RESP_REQ_INFO1_SGI GENMASK(26, 25)497#define HAL_RX_RESP_REQ_INFO1_STBC BIT(27)498#define HAL_RX_RESP_REQ_INFO1_LDPC BIT(28)499#define HAL_RX_RESP_REQ_INFO1_IS_AMPDU BIT(29)500#define HAL_RX_RESP_REQ_INFO2_NUM_USER GENMASK(6, 0)501#define HAL_RX_RESP_REQ_INFO3_ADDR1_31_0 GENMASK(31, 0)502#define HAL_RX_RESP_REQ_INFO4_ADDR1_47_32 GENMASK(15, 0)503#define HAL_RX_RESP_REQ_INFO4_ADDR1_15_0 GENMASK(31, 16)504#define HAL_RX_RESP_REQ_INFO5_ADDR1_47_16 GENMASK(31, 0)505506struct hal_rx_resp_req_info {507__le32 info0;508__le32 reserved[1];509__le32 info1;510__le32 info2;511__le32 reserved1[2];512__le32 info3;513__le32 info4;514__le32 info5;515__le32 reserved2[5];516} __packed;517518#define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_0 0xDDBEEF519#define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_1 0xADBEEF520#define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_2 0xBDBEEF521#define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_3 0xCDBEEF522523#define HAL_RX_UL_OFDMA_USER_INFO_V0_W0_VALID BIT(30)524#define HAL_RX_UL_OFDMA_USER_INFO_V0_W0_VER BIT(31)525#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_NSS GENMASK(2, 0)526#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_MCS GENMASK(6, 3)527#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_LDPC BIT(7)528#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_DCM BIT(8)529#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_RU_START GENMASK(15, 9)530#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_RU_SIZE GENMASK(18, 16)531532/* HE Radiotap data1 Mask */533#define HE_SU_FORMAT_TYPE 0x0000534#define HE_EXT_SU_FORMAT_TYPE 0x0001535#define HE_MU_FORMAT_TYPE 0x0002536#define HE_TRIG_FORMAT_TYPE 0x0003537#define HE_BEAM_CHANGE_KNOWN 0x0008538#define HE_DL_UL_KNOWN 0x0010539#define HE_MCS_KNOWN 0x0020540#define HE_DCM_KNOWN 0x0040541#define HE_CODING_KNOWN 0x0080542#define HE_LDPC_EXTRA_SYMBOL_KNOWN 0x0100543#define HE_STBC_KNOWN 0x0200544#define HE_DATA_BW_RU_KNOWN 0x4000545#define HE_DOPPLER_KNOWN 0x8000546#define HE_BSS_COLOR_KNOWN 0x0004547548/* HE Radiotap data2 Mask */549#define HE_GI_KNOWN 0x0002550#define HE_TXBF_KNOWN 0x0010551#define HE_PE_DISAMBIGUITY_KNOWN 0x0020552#define HE_TXOP_KNOWN 0x0040553#define HE_LTF_SYMBOLS_KNOWN 0x0004554#define HE_PRE_FEC_PADDING_KNOWN 0x0008555#define HE_MIDABLE_PERIODICITY_KNOWN 0x0080556557/* HE radiotap data3 shift values */558#define HE_BEAM_CHANGE_SHIFT 6559#define HE_DL_UL_SHIFT 7560#define HE_TRANSMIT_MCS_SHIFT 8561#define HE_DCM_SHIFT 12562#define HE_CODING_SHIFT 13563#define HE_LDPC_EXTRA_SYMBOL_SHIFT 14564#define HE_STBC_SHIFT 15565566/* HE radiotap data4 shift values */567#define HE_STA_ID_SHIFT 4568569/* HE radiotap data5 */570#define HE_GI_SHIFT 4571#define HE_LTF_SIZE_SHIFT 6572#define HE_LTF_SYM_SHIFT 8573#define HE_TXBF_SHIFT 14574#define HE_PE_DISAMBIGUITY_SHIFT 15575#define HE_PRE_FEC_PAD_SHIFT 12576577/* HE radiotap data6 */578#define HE_DOPPLER_SHIFT 4579#define HE_TXOP_SHIFT 8580581/* HE radiotap HE-MU flags1 */582#define HE_SIG_B_MCS_KNOWN 0x0010583#define HE_SIG_B_DCM_KNOWN 0x0040584#define HE_SIG_B_SYM_NUM_KNOWN 0x8000585#define HE_RU_0_KNOWN 0x0100586#define HE_RU_1_KNOWN 0x0200587#define HE_RU_2_KNOWN 0x0400588#define HE_RU_3_KNOWN 0x0800589#define HE_DCM_FLAG_1_SHIFT 5590#define HE_SPATIAL_REUSE_MU_KNOWN 0x0100591#define HE_SIG_B_COMPRESSION_FLAG_1_KNOWN 0x4000592593/* HE radiotap HE-MU flags2 */594#define HE_SIG_B_COMPRESSION_FLAG_2_SHIFT 3595#define HE_BW_KNOWN 0x0004596#define HE_NUM_SIG_B_SYMBOLS_SHIFT 4597#define HE_SIG_B_COMPRESSION_FLAG_2_KNOWN 0x0100598#define HE_NUM_SIG_B_FLAG_2_SHIFT 9599#define HE_LTF_FLAG_2_SYMBOLS_SHIFT 12600#define HE_LTF_KNOWN 0x8000601602/* HE radiotap per_user_1 */603#define HE_STA_SPATIAL_SHIFT 11604#define HE_TXBF_SHIFT 14605#define HE_RESERVED_SET_TO_1_SHIFT 19606#define HE_STA_CODING_SHIFT 20607608/* HE radiotap per_user_2 */609#define HE_STA_MCS_SHIFT 4610#define HE_STA_DCM_SHIFT 5611612/* HE radiotap per user known */613#define HE_USER_FIELD_POSITION_KNOWN 0x01614#define HE_STA_ID_PER_USER_KNOWN 0x02615#define HE_STA_NSTS_KNOWN 0x04616#define HE_STA_TX_BF_KNOWN 0x08617#define HE_STA_SPATIAL_CONFIG_KNOWN 0x10618#define HE_STA_MCS_KNOWN 0x20619#define HE_STA_DCM_KNOWN 0x40620#define HE_STA_CODING_KNOWN 0x80621622#define HAL_RX_MPDU_ERR_FCS BIT(0)623#define HAL_RX_MPDU_ERR_DECRYPT BIT(1)624#define HAL_RX_MPDU_ERR_TKIP_MIC BIT(2)625#define HAL_RX_MPDU_ERR_AMSDU_ERR BIT(3)626#define HAL_RX_MPDU_ERR_OVERFLOW BIT(4)627#define HAL_RX_MPDU_ERR_MSDU_LEN BIT(5)628#define HAL_RX_MPDU_ERR_MPDU_LEN BIT(6)629#define HAL_RX_MPDU_ERR_UNENCRYPTED_FRAME BIT(7)630631static inline632enum nl80211_he_ru_alloc ath12k_he_ru_tones_to_nl80211_he_ru_alloc(u16 ru_tones)633{634enum nl80211_he_ru_alloc ret;635636switch (ru_tones) {637case RU_52:638ret = NL80211_RATE_INFO_HE_RU_ALLOC_52;639break;640case RU_106:641ret = NL80211_RATE_INFO_HE_RU_ALLOC_106;642break;643case RU_242:644ret = NL80211_RATE_INFO_HE_RU_ALLOC_242;645break;646case RU_484:647ret = NL80211_RATE_INFO_HE_RU_ALLOC_484;648break;649case RU_996:650ret = NL80211_RATE_INFO_HE_RU_ALLOC_996;651break;652case RU_26:653fallthrough;654default:655ret = NL80211_RATE_INFO_HE_RU_ALLOC_26;656break;657}658return ret;659}660661void ath12k_hal_reo_status_queue_stats(struct ath12k_base *ab,662struct hal_tlv_64_hdr *tlv,663struct hal_reo_status *status);664void ath12k_hal_reo_flush_queue_status(struct ath12k_base *ab,665struct hal_tlv_64_hdr *tlv,666struct hal_reo_status *status);667void ath12k_hal_reo_flush_cache_status(struct ath12k_base *ab,668struct hal_tlv_64_hdr *tlv,669struct hal_reo_status *status);670void ath12k_hal_reo_unblk_cache_status(struct ath12k_base *ab,671struct hal_tlv_64_hdr *tlv,672struct hal_reo_status *status);673void ath12k_hal_reo_flush_timeout_list_status(struct ath12k_base *ab,674struct hal_tlv_64_hdr *tlv,675struct hal_reo_status *status);676void ath12k_hal_reo_desc_thresh_reached_status(struct ath12k_base *ab,677struct hal_tlv_64_hdr *tlv,678struct hal_reo_status *status);679void ath12k_hal_reo_update_rx_reo_queue_status(struct ath12k_base *ab,680struct hal_tlv_64_hdr *tlv,681struct hal_reo_status *status);682void ath12k_hal_rx_msdu_link_info_get(struct hal_rx_msdu_link *link, u32 *num_msdus,683u32 *msdu_cookies,684enum hal_rx_buf_return_buf_manager *rbm);685void ath12k_hal_rx_msdu_link_desc_set(struct ath12k_base *ab,686struct hal_wbm_release_ring *dst_desc,687struct hal_wbm_release_ring *src_desc,688enum hal_wbm_rel_bm_act action);689void ath12k_hal_rx_buf_addr_info_set(struct ath12k_buffer_addr *binfo,690dma_addr_t paddr, u32 cookie, u8 manager);691void ath12k_hal_rx_buf_addr_info_get(struct ath12k_buffer_addr *binfo,692dma_addr_t *paddr,693u32 *cookie, u8 *rbm);694int ath12k_hal_desc_reo_parse_err(struct ath12k_base *ab,695struct hal_reo_dest_ring *desc,696dma_addr_t *paddr, u32 *desc_bank);697int ath12k_hal_wbm_desc_parse_err(struct ath12k_base *ab, void *desc,698struct hal_rx_wbm_rel_info *rel_info);699void ath12k_hal_rx_reo_ent_paddr_get(struct ath12k_base *ab,700struct ath12k_buffer_addr *buff_addr,701dma_addr_t *paddr, u32 *cookie);702703#endif704705706