1bfcc09ddSBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2bfcc09ddSBjoern A. Zeeb /* 3*9af1bba4SBjoern A. Zeeb * Copyright (C) 2012-2014, 2018-2022 Intel Corporation 4bfcc09ddSBjoern A. Zeeb * Copyright (C) 2017 Intel Deutschland GmbH 5bfcc09ddSBjoern A. Zeeb */ 6bfcc09ddSBjoern A. Zeeb #ifndef __iwl_fw_api_mac_h__ 7bfcc09ddSBjoern A. Zeeb #define __iwl_fw_api_mac_h__ 8bfcc09ddSBjoern A. Zeeb 9bfcc09ddSBjoern A. Zeeb /* 10bfcc09ddSBjoern A. Zeeb * The first MAC indices (starting from 0) are available to the driver, 11bfcc09ddSBjoern A. Zeeb * AUX indices follows - 1 for non-CDB, 2 for CDB. 12bfcc09ddSBjoern A. Zeeb */ 13bfcc09ddSBjoern A. Zeeb #define MAC_INDEX_AUX 4 14bfcc09ddSBjoern A. Zeeb #define MAC_INDEX_MIN_DRIVER 0 15bfcc09ddSBjoern A. Zeeb #define NUM_MAC_INDEX_DRIVER MAC_INDEX_AUX 16bfcc09ddSBjoern A. Zeeb #define NUM_MAC_INDEX (NUM_MAC_INDEX_DRIVER + 1) 17bfcc09ddSBjoern A. Zeeb #define NUM_MAC_INDEX_CDB (NUM_MAC_INDEX_DRIVER + 2) 18bfcc09ddSBjoern A. Zeeb 19bfcc09ddSBjoern A. Zeeb #define IWL_MVM_STATION_COUNT_MAX 16 20bfcc09ddSBjoern A. Zeeb #define IWL_MVM_INVALID_STA 0xFF 21bfcc09ddSBjoern A. Zeeb 22bfcc09ddSBjoern A. Zeeb enum iwl_ac { 23bfcc09ddSBjoern A. Zeeb AC_BK, 24bfcc09ddSBjoern A. Zeeb AC_BE, 25bfcc09ddSBjoern A. Zeeb AC_VI, 26bfcc09ddSBjoern A. Zeeb AC_VO, 27bfcc09ddSBjoern A. Zeeb AC_NUM, 28bfcc09ddSBjoern A. Zeeb }; 29bfcc09ddSBjoern A. Zeeb 30bfcc09ddSBjoern A. Zeeb /** 31bfcc09ddSBjoern A. Zeeb * enum iwl_mac_protection_flags - MAC context flags 32bfcc09ddSBjoern A. Zeeb * @MAC_PROT_FLG_TGG_PROTECT: 11g protection when transmitting OFDM frames, 33bfcc09ddSBjoern A. Zeeb * this will require CCK RTS/CTS2self. 34bfcc09ddSBjoern A. Zeeb * RTS/CTS will protect full burst time. 35bfcc09ddSBjoern A. Zeeb * @MAC_PROT_FLG_HT_PROT: enable HT protection 36bfcc09ddSBjoern A. Zeeb * @MAC_PROT_FLG_FAT_PROT: protect 40 MHz transmissions 37bfcc09ddSBjoern A. Zeeb * @MAC_PROT_FLG_SELF_CTS_EN: allow CTS2self 38bfcc09ddSBjoern A. Zeeb */ 39bfcc09ddSBjoern A. Zeeb enum iwl_mac_protection_flags { 40bfcc09ddSBjoern A. Zeeb MAC_PROT_FLG_TGG_PROTECT = BIT(3), 41bfcc09ddSBjoern A. Zeeb MAC_PROT_FLG_HT_PROT = BIT(23), 42bfcc09ddSBjoern A. Zeeb MAC_PROT_FLG_FAT_PROT = BIT(24), 43bfcc09ddSBjoern A. Zeeb MAC_PROT_FLG_SELF_CTS_EN = BIT(30), 44bfcc09ddSBjoern A. Zeeb }; 45bfcc09ddSBjoern A. Zeeb 46bfcc09ddSBjoern A. Zeeb #define MAC_FLG_SHORT_SLOT BIT(4) 47bfcc09ddSBjoern A. Zeeb #define MAC_FLG_SHORT_PREAMBLE BIT(5) 48bfcc09ddSBjoern A. Zeeb 49bfcc09ddSBjoern A. Zeeb /** 50bfcc09ddSBjoern A. Zeeb * enum iwl_mac_types - Supported MAC types 51bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_FIRST: lowest supported MAC type 52bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_AUX: Auxiliary MAC (internal) 53bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_LISTENER: monitor MAC type (?) 54bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_PIBSS: Pseudo-IBSS 55bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_IBSS: IBSS 56bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_BSS_STA: BSS (managed) station 57bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_P2P_DEVICE: P2P Device 58bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_P2P_STA: P2P client 59bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_GO: P2P GO 60bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_TEST: ? 61bfcc09ddSBjoern A. Zeeb * @FW_MAC_TYPE_MAX: highest support MAC type 62bfcc09ddSBjoern A. Zeeb */ 63bfcc09ddSBjoern A. Zeeb enum iwl_mac_types { 64bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_FIRST = 1, 65bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_AUX = FW_MAC_TYPE_FIRST, 66bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_LISTENER, 67bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_PIBSS, 68bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_IBSS, 69bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_BSS_STA, 70bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_P2P_DEVICE, 71bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_P2P_STA, 72bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_GO, 73bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_TEST, 74bfcc09ddSBjoern A. Zeeb FW_MAC_TYPE_MAX = FW_MAC_TYPE_TEST 75bfcc09ddSBjoern A. Zeeb }; /* MAC_CONTEXT_TYPE_API_E_VER_1 */ 76bfcc09ddSBjoern A. Zeeb 77bfcc09ddSBjoern A. Zeeb /** 78bfcc09ddSBjoern A. Zeeb * enum iwl_tsf_id - TSF hw timer ID 79bfcc09ddSBjoern A. Zeeb * @TSF_ID_A: use TSF A 80bfcc09ddSBjoern A. Zeeb * @TSF_ID_B: use TSF B 81bfcc09ddSBjoern A. Zeeb * @TSF_ID_C: use TSF C 82bfcc09ddSBjoern A. Zeeb * @TSF_ID_D: use TSF D 83bfcc09ddSBjoern A. Zeeb * @NUM_TSF_IDS: number of TSF timers available 84bfcc09ddSBjoern A. Zeeb */ 85bfcc09ddSBjoern A. Zeeb enum iwl_tsf_id { 86bfcc09ddSBjoern A. Zeeb TSF_ID_A = 0, 87bfcc09ddSBjoern A. Zeeb TSF_ID_B = 1, 88bfcc09ddSBjoern A. Zeeb TSF_ID_C = 2, 89bfcc09ddSBjoern A. Zeeb TSF_ID_D = 3, 90bfcc09ddSBjoern A. Zeeb NUM_TSF_IDS = 4, 91bfcc09ddSBjoern A. Zeeb }; /* TSF_ID_API_E_VER_1 */ 92bfcc09ddSBjoern A. Zeeb 93bfcc09ddSBjoern A. Zeeb /** 94bfcc09ddSBjoern A. Zeeb * struct iwl_mac_data_ap - configuration data for AP MAC context 95bfcc09ddSBjoern A. Zeeb * @beacon_time: beacon transmit time in system time 96bfcc09ddSBjoern A. Zeeb * @beacon_tsf: beacon transmit time in TSF 97bfcc09ddSBjoern A. Zeeb * @bi: beacon interval in TU 98bfcc09ddSBjoern A. Zeeb * @reserved1: reserved 99bfcc09ddSBjoern A. Zeeb * @dtim_interval: dtim transmit time in TU 100bfcc09ddSBjoern A. Zeeb * @reserved2: reserved 101bfcc09ddSBjoern A. Zeeb * @mcast_qid: queue ID for multicast traffic. 102bfcc09ddSBjoern A. Zeeb * NOTE: obsolete from VER2 and on 103bfcc09ddSBjoern A. Zeeb * @beacon_template: beacon template ID 104bfcc09ddSBjoern A. Zeeb */ 105bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_ap { 106bfcc09ddSBjoern A. Zeeb __le32 beacon_time; 107bfcc09ddSBjoern A. Zeeb __le64 beacon_tsf; 108bfcc09ddSBjoern A. Zeeb __le32 bi; 109bfcc09ddSBjoern A. Zeeb __le32 reserved1; 110bfcc09ddSBjoern A. Zeeb __le32 dtim_interval; 111bfcc09ddSBjoern A. Zeeb __le32 reserved2; 112bfcc09ddSBjoern A. Zeeb __le32 mcast_qid; 113bfcc09ddSBjoern A. Zeeb __le32 beacon_template; 114bfcc09ddSBjoern A. Zeeb } __packed; /* AP_MAC_DATA_API_S_VER_2 */ 115bfcc09ddSBjoern A. Zeeb 116bfcc09ddSBjoern A. Zeeb /** 117bfcc09ddSBjoern A. Zeeb * struct iwl_mac_data_ibss - configuration data for IBSS MAC context 118bfcc09ddSBjoern A. Zeeb * @beacon_time: beacon transmit time in system time 119bfcc09ddSBjoern A. Zeeb * @beacon_tsf: beacon transmit time in TSF 120bfcc09ddSBjoern A. Zeeb * @bi: beacon interval in TU 121bfcc09ddSBjoern A. Zeeb * @reserved: reserved 122bfcc09ddSBjoern A. Zeeb * @beacon_template: beacon template ID 123bfcc09ddSBjoern A. Zeeb */ 124bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_ibss { 125bfcc09ddSBjoern A. Zeeb __le32 beacon_time; 126bfcc09ddSBjoern A. Zeeb __le64 beacon_tsf; 127bfcc09ddSBjoern A. Zeeb __le32 bi; 128bfcc09ddSBjoern A. Zeeb __le32 reserved; 129bfcc09ddSBjoern A. Zeeb __le32 beacon_template; 130bfcc09ddSBjoern A. Zeeb } __packed; /* IBSS_MAC_DATA_API_S_VER_1 */ 131bfcc09ddSBjoern A. Zeeb 132bfcc09ddSBjoern A. Zeeb /** 133bfcc09ddSBjoern A. Zeeb * enum iwl_mac_data_policy - policy of the data path for this MAC 134bfcc09ddSBjoern A. Zeeb * @TWT_SUPPORTED: twt is supported 135bfcc09ddSBjoern A. Zeeb * @MORE_DATA_ACK_SUPPORTED: AP supports More Data Ack according to 136bfcc09ddSBjoern A. Zeeb * paragraph 9.4.1.17 in P802.11ax_D4 specification. Used for TWT 137bfcc09ddSBjoern A. Zeeb * early termination detection. 138bfcc09ddSBjoern A. Zeeb * @FLEXIBLE_TWT_SUPPORTED: AP supports flexible TWT schedule 139bfcc09ddSBjoern A. Zeeb * @PROTECTED_TWT_SUPPORTED: AP supports protected TWT frames (with 11w) 140bfcc09ddSBjoern A. Zeeb * @BROADCAST_TWT_SUPPORTED: AP and STA support broadcast TWT 141bfcc09ddSBjoern A. Zeeb * @COEX_HIGH_PRIORITY_ENABLE: high priority mode for BT coex, to be used 142bfcc09ddSBjoern A. Zeeb * during 802.1X negotiation (and allowed during 4-way-HS) 143bfcc09ddSBjoern A. Zeeb */ 144bfcc09ddSBjoern A. Zeeb enum iwl_mac_data_policy { 145bfcc09ddSBjoern A. Zeeb TWT_SUPPORTED = BIT(0), 146bfcc09ddSBjoern A. Zeeb MORE_DATA_ACK_SUPPORTED = BIT(1), 147bfcc09ddSBjoern A. Zeeb FLEXIBLE_TWT_SUPPORTED = BIT(2), 148bfcc09ddSBjoern A. Zeeb PROTECTED_TWT_SUPPORTED = BIT(3), 149bfcc09ddSBjoern A. Zeeb BROADCAST_TWT_SUPPORTED = BIT(4), 150bfcc09ddSBjoern A. Zeeb COEX_HIGH_PRIORITY_ENABLE = BIT(5), 151bfcc09ddSBjoern A. Zeeb }; 152bfcc09ddSBjoern A. Zeeb 153bfcc09ddSBjoern A. Zeeb /** 154bfcc09ddSBjoern A. Zeeb * struct iwl_mac_data_sta - configuration data for station MAC context 155bfcc09ddSBjoern A. Zeeb * @is_assoc: 1 for associated state, 0 otherwise 156bfcc09ddSBjoern A. Zeeb * @dtim_time: DTIM arrival time in system time 157bfcc09ddSBjoern A. Zeeb * @dtim_tsf: DTIM arrival time in TSF 158bfcc09ddSBjoern A. Zeeb * @bi: beacon interval in TU, applicable only when associated 159bfcc09ddSBjoern A. Zeeb * @reserved1: reserved 160bfcc09ddSBjoern A. Zeeb * @dtim_interval: DTIM interval in TU, applicable only when associated 161bfcc09ddSBjoern A. Zeeb * @data_policy: see &enum iwl_mac_data_policy 162bfcc09ddSBjoern A. Zeeb * @listen_interval: in beacon intervals, applicable only when associated 163bfcc09ddSBjoern A. Zeeb * @assoc_id: unique ID assigned by the AP during association 164bfcc09ddSBjoern A. Zeeb * @assoc_beacon_arrive_time: TSF of first beacon after association 165bfcc09ddSBjoern A. Zeeb */ 166bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_sta { 167bfcc09ddSBjoern A. Zeeb __le32 is_assoc; 168bfcc09ddSBjoern A. Zeeb __le32 dtim_time; 169bfcc09ddSBjoern A. Zeeb __le64 dtim_tsf; 170bfcc09ddSBjoern A. Zeeb __le32 bi; 171bfcc09ddSBjoern A. Zeeb __le32 reserved1; 172bfcc09ddSBjoern A. Zeeb __le32 dtim_interval; 173bfcc09ddSBjoern A. Zeeb __le32 data_policy; 174bfcc09ddSBjoern A. Zeeb __le32 listen_interval; 175bfcc09ddSBjoern A. Zeeb __le32 assoc_id; 176bfcc09ddSBjoern A. Zeeb __le32 assoc_beacon_arrive_time; 177bfcc09ddSBjoern A. Zeeb } __packed; /* STA_MAC_DATA_API_S_VER_2 */ 178bfcc09ddSBjoern A. Zeeb 179bfcc09ddSBjoern A. Zeeb /** 180bfcc09ddSBjoern A. Zeeb * struct iwl_mac_data_go - configuration data for P2P GO MAC context 181bfcc09ddSBjoern A. Zeeb * @ap: iwl_mac_data_ap struct with most config data 182bfcc09ddSBjoern A. Zeeb * @ctwin: client traffic window in TU (period after TBTT when GO is present). 183bfcc09ddSBjoern A. Zeeb * 0 indicates that there is no CT window. 184bfcc09ddSBjoern A. Zeeb * @opp_ps_enabled: indicate that opportunistic PS allowed 185bfcc09ddSBjoern A. Zeeb */ 186bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_go { 187bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_ap ap; 188bfcc09ddSBjoern A. Zeeb __le32 ctwin; 189bfcc09ddSBjoern A. Zeeb __le32 opp_ps_enabled; 190bfcc09ddSBjoern A. Zeeb } __packed; /* GO_MAC_DATA_API_S_VER_1 */ 191bfcc09ddSBjoern A. Zeeb 192bfcc09ddSBjoern A. Zeeb /** 193bfcc09ddSBjoern A. Zeeb * struct iwl_mac_data_p2p_sta - configuration data for P2P client MAC context 194bfcc09ddSBjoern A. Zeeb * @sta: iwl_mac_data_sta struct with most config data 195bfcc09ddSBjoern A. Zeeb * @ctwin: client traffic window in TU (period after TBTT when GO is present). 196bfcc09ddSBjoern A. Zeeb * 0 indicates that there is no CT window. 197bfcc09ddSBjoern A. Zeeb */ 198bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_p2p_sta { 199bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_sta sta; 200bfcc09ddSBjoern A. Zeeb __le32 ctwin; 201bfcc09ddSBjoern A. Zeeb } __packed; /* P2P_STA_MAC_DATA_API_S_VER_2 */ 202bfcc09ddSBjoern A. Zeeb 203bfcc09ddSBjoern A. Zeeb /** 204bfcc09ddSBjoern A. Zeeb * struct iwl_mac_data_pibss - Pseudo IBSS config data 205bfcc09ddSBjoern A. Zeeb * @stats_interval: interval in TU between statistics notifications to host. 206bfcc09ddSBjoern A. Zeeb */ 207bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_pibss { 208bfcc09ddSBjoern A. Zeeb __le32 stats_interval; 209bfcc09ddSBjoern A. Zeeb } __packed; /* PIBSS_MAC_DATA_API_S_VER_1 */ 210bfcc09ddSBjoern A. Zeeb 211bfcc09ddSBjoern A. Zeeb /* 212bfcc09ddSBjoern A. Zeeb * struct iwl_mac_data_p2p_dev - configuration data for the P2P Device MAC 213bfcc09ddSBjoern A. Zeeb * context. 214bfcc09ddSBjoern A. Zeeb * @is_disc_extended: if set to true, P2P Device discoverability is enabled on 215bfcc09ddSBjoern A. Zeeb * other channels as well. This should be to true only in case that the 216bfcc09ddSBjoern A. Zeeb * device is discoverable and there is an active GO. Note that setting this 217bfcc09ddSBjoern A. Zeeb * field when not needed, will increase the number of interrupts and have 218bfcc09ddSBjoern A. Zeeb * effect on the platform power, as this setting opens the Rx filters on 219bfcc09ddSBjoern A. Zeeb * all macs. 220bfcc09ddSBjoern A. Zeeb */ 221bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_p2p_dev { 222bfcc09ddSBjoern A. Zeeb __le32 is_disc_extended; 223bfcc09ddSBjoern A. Zeeb } __packed; /* _P2P_DEV_MAC_DATA_API_S_VER_1 */ 224bfcc09ddSBjoern A. Zeeb 225bfcc09ddSBjoern A. Zeeb /** 226bfcc09ddSBjoern A. Zeeb * enum iwl_mac_filter_flags - MAC context filter flags 227bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_IN_PROMISC: accept all data frames 228bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_IN_CONTROL_AND_MGMT: pass all management and 229bfcc09ddSBjoern A. Zeeb * control frames to the host 230bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_ACCEPT_GRP: accept multicast frames 231bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_DIS_DECRYPT: don't decrypt unicast frames 232bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_DIS_GRP_DECRYPT: don't decrypt multicast frames 233bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_IN_BEACON: transfer foreign BSS's beacons to host 234bfcc09ddSBjoern A. Zeeb * (in station mode when associated) 235bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_OUT_BCAST: filter out all broadcast frames 236bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_IN_CRC32: extract FCS and append it to frames 237bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_IN_PROBE_REQUEST: pass probe requests to host 238bfcc09ddSBjoern A. Zeeb */ 239bfcc09ddSBjoern A. Zeeb enum iwl_mac_filter_flags { 240bfcc09ddSBjoern A. Zeeb MAC_FILTER_IN_PROMISC = BIT(0), 241bfcc09ddSBjoern A. Zeeb MAC_FILTER_IN_CONTROL_AND_MGMT = BIT(1), 242bfcc09ddSBjoern A. Zeeb MAC_FILTER_ACCEPT_GRP = BIT(2), 243bfcc09ddSBjoern A. Zeeb MAC_FILTER_DIS_DECRYPT = BIT(3), 244bfcc09ddSBjoern A. Zeeb MAC_FILTER_DIS_GRP_DECRYPT = BIT(4), 245bfcc09ddSBjoern A. Zeeb MAC_FILTER_IN_BEACON = BIT(6), 246bfcc09ddSBjoern A. Zeeb MAC_FILTER_OUT_BCAST = BIT(8), 247bfcc09ddSBjoern A. Zeeb MAC_FILTER_IN_CRC32 = BIT(11), 248bfcc09ddSBjoern A. Zeeb MAC_FILTER_IN_PROBE_REQUEST = BIT(12), 249bfcc09ddSBjoern A. Zeeb /** 250bfcc09ddSBjoern A. Zeeb * @MAC_FILTER_IN_11AX: mark BSS as supporting 802.11ax 251bfcc09ddSBjoern A. Zeeb */ 252bfcc09ddSBjoern A. Zeeb MAC_FILTER_IN_11AX = BIT(14), 253bfcc09ddSBjoern A. Zeeb }; 254bfcc09ddSBjoern A. Zeeb 255bfcc09ddSBjoern A. Zeeb /** 256bfcc09ddSBjoern A. Zeeb * enum iwl_mac_qos_flags - QoS flags 257bfcc09ddSBjoern A. Zeeb * @MAC_QOS_FLG_UPDATE_EDCA: ? 258bfcc09ddSBjoern A. Zeeb * @MAC_QOS_FLG_TGN: HT is enabled 259bfcc09ddSBjoern A. Zeeb * @MAC_QOS_FLG_TXOP_TYPE: ? 260bfcc09ddSBjoern A. Zeeb * 261bfcc09ddSBjoern A. Zeeb */ 262bfcc09ddSBjoern A. Zeeb enum iwl_mac_qos_flags { 263bfcc09ddSBjoern A. Zeeb MAC_QOS_FLG_UPDATE_EDCA = BIT(0), 264bfcc09ddSBjoern A. Zeeb MAC_QOS_FLG_TGN = BIT(1), 265bfcc09ddSBjoern A. Zeeb MAC_QOS_FLG_TXOP_TYPE = BIT(4), 266bfcc09ddSBjoern A. Zeeb }; 267bfcc09ddSBjoern A. Zeeb 268bfcc09ddSBjoern A. Zeeb /** 269bfcc09ddSBjoern A. Zeeb * struct iwl_ac_qos - QOS timing params for MAC_CONTEXT_CMD 270bfcc09ddSBjoern A. Zeeb * @cw_min: Contention window, start value in numbers of slots. 271bfcc09ddSBjoern A. Zeeb * Should be a power-of-2, minus 1. Device's default is 0x0f. 272bfcc09ddSBjoern A. Zeeb * @cw_max: Contention window, max value in numbers of slots. 273bfcc09ddSBjoern A. Zeeb * Should be a power-of-2, minus 1. Device's default is 0x3f. 274bfcc09ddSBjoern A. Zeeb * @aifsn: Number of slots in Arbitration Interframe Space (before 275bfcc09ddSBjoern A. Zeeb * performing random backoff timing prior to Tx). Device default 1. 276bfcc09ddSBjoern A. Zeeb * @fifos_mask: FIFOs used by this MAC for this AC 277bfcc09ddSBjoern A. Zeeb * @edca_txop: Length of Tx opportunity, in uSecs. Device default is 0. 278bfcc09ddSBjoern A. Zeeb * 279bfcc09ddSBjoern A. Zeeb * One instance of this config struct for each of 4 EDCA access categories 280bfcc09ddSBjoern A. Zeeb * in struct iwl_qosparam_cmd. 281bfcc09ddSBjoern A. Zeeb * 282bfcc09ddSBjoern A. Zeeb * Device will automatically increase contention window by (2*CW) + 1 for each 283bfcc09ddSBjoern A. Zeeb * transmission retry. Device uses cw_max as a bit mask, ANDed with new CW 284bfcc09ddSBjoern A. Zeeb * value, to cap the CW value. 285bfcc09ddSBjoern A. Zeeb */ 286bfcc09ddSBjoern A. Zeeb struct iwl_ac_qos { 287bfcc09ddSBjoern A. Zeeb __le16 cw_min; 288bfcc09ddSBjoern A. Zeeb __le16 cw_max; 289bfcc09ddSBjoern A. Zeeb u8 aifsn; 290bfcc09ddSBjoern A. Zeeb u8 fifos_mask; 291bfcc09ddSBjoern A. Zeeb __le16 edca_txop; 292bfcc09ddSBjoern A. Zeeb } __packed; /* AC_QOS_API_S_VER_2 */ 293bfcc09ddSBjoern A. Zeeb 294bfcc09ddSBjoern A. Zeeb /** 295bfcc09ddSBjoern A. Zeeb * struct iwl_mac_ctx_cmd - command structure to configure MAC contexts 296bfcc09ddSBjoern A. Zeeb * ( MAC_CONTEXT_CMD = 0x28 ) 297bfcc09ddSBjoern A. Zeeb * @id_and_color: ID and color of the MAC 298*9af1bba4SBjoern A. Zeeb * @action: action to perform, see &enum iwl_ctxt_action 299bfcc09ddSBjoern A. Zeeb * @mac_type: one of &enum iwl_mac_types 300bfcc09ddSBjoern A. Zeeb * @tsf_id: TSF HW timer, one of &enum iwl_tsf_id 301bfcc09ddSBjoern A. Zeeb * @node_addr: MAC address 302bfcc09ddSBjoern A. Zeeb * @reserved_for_node_addr: reserved 303bfcc09ddSBjoern A. Zeeb * @bssid_addr: BSSID 304bfcc09ddSBjoern A. Zeeb * @reserved_for_bssid_addr: reserved 305bfcc09ddSBjoern A. Zeeb * @cck_rates: basic rates available for CCK 306bfcc09ddSBjoern A. Zeeb * @ofdm_rates: basic rates available for OFDM 307bfcc09ddSBjoern A. Zeeb * @protection_flags: combination of &enum iwl_mac_protection_flags 308bfcc09ddSBjoern A. Zeeb * @cck_short_preamble: 0x20 for enabling short preamble, 0 otherwise 309bfcc09ddSBjoern A. Zeeb * @short_slot: 0x10 for enabling short slots, 0 otherwise 310bfcc09ddSBjoern A. Zeeb * @filter_flags: combination of &enum iwl_mac_filter_flags 311bfcc09ddSBjoern A. Zeeb * @qos_flags: from &enum iwl_mac_qos_flags 312bfcc09ddSBjoern A. Zeeb * @ac: one iwl_mac_qos configuration for each AC 313bfcc09ddSBjoern A. Zeeb */ 314bfcc09ddSBjoern A. Zeeb struct iwl_mac_ctx_cmd { 315bfcc09ddSBjoern A. Zeeb /* COMMON_INDEX_HDR_API_S_VER_1 */ 316bfcc09ddSBjoern A. Zeeb __le32 id_and_color; 317bfcc09ddSBjoern A. Zeeb __le32 action; 318bfcc09ddSBjoern A. Zeeb /* MAC_CONTEXT_COMMON_DATA_API_S_VER_1 */ 319bfcc09ddSBjoern A. Zeeb __le32 mac_type; 320bfcc09ddSBjoern A. Zeeb __le32 tsf_id; 321bfcc09ddSBjoern A. Zeeb u8 node_addr[6]; 322bfcc09ddSBjoern A. Zeeb __le16 reserved_for_node_addr; 323bfcc09ddSBjoern A. Zeeb u8 bssid_addr[6]; 324bfcc09ddSBjoern A. Zeeb __le16 reserved_for_bssid_addr; 325bfcc09ddSBjoern A. Zeeb __le32 cck_rates; 326bfcc09ddSBjoern A. Zeeb __le32 ofdm_rates; 327bfcc09ddSBjoern A. Zeeb __le32 protection_flags; 328bfcc09ddSBjoern A. Zeeb __le32 cck_short_preamble; 329bfcc09ddSBjoern A. Zeeb __le32 short_slot; 330bfcc09ddSBjoern A. Zeeb __le32 filter_flags; 331bfcc09ddSBjoern A. Zeeb /* MAC_QOS_PARAM_API_S_VER_1 */ 332bfcc09ddSBjoern A. Zeeb __le32 qos_flags; 333bfcc09ddSBjoern A. Zeeb struct iwl_ac_qos ac[AC_NUM+1]; 334bfcc09ddSBjoern A. Zeeb /* MAC_CONTEXT_COMMON_DATA_API_S */ 335bfcc09ddSBjoern A. Zeeb union { 336bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_ap ap; 337bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_go go; 338bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_sta sta; 339bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_p2p_sta p2p_sta; 340bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_p2p_dev p2p_dev; 341bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_pibss pibss; 342bfcc09ddSBjoern A. Zeeb struct iwl_mac_data_ibss ibss; 343bfcc09ddSBjoern A. Zeeb }; 344bfcc09ddSBjoern A. Zeeb } __packed; /* MAC_CONTEXT_CMD_API_S_VER_1 */ 345bfcc09ddSBjoern A. Zeeb 346bfcc09ddSBjoern A. Zeeb #define IWL_NONQOS_SEQ_GET 0x1 347bfcc09ddSBjoern A. Zeeb #define IWL_NONQOS_SEQ_SET 0x2 348bfcc09ddSBjoern A. Zeeb struct iwl_nonqos_seq_query_cmd { 349bfcc09ddSBjoern A. Zeeb __le32 get_set_flag; 350bfcc09ddSBjoern A. Zeeb __le32 mac_id_n_color; 351bfcc09ddSBjoern A. Zeeb __le16 value; 352bfcc09ddSBjoern A. Zeeb __le16 reserved; 353bfcc09ddSBjoern A. Zeeb } __packed; /* NON_QOS_TX_COUNTER_GET_SET_API_S_VER_1 */ 354bfcc09ddSBjoern A. Zeeb 355bfcc09ddSBjoern A. Zeeb /** 356*9af1bba4SBjoern A. Zeeb * struct iwl_missed_beacons_notif_ver_3 - information on missed beacons 357bfcc09ddSBjoern A. Zeeb * ( MISSED_BEACONS_NOTIFICATION = 0xa2 ) 358bfcc09ddSBjoern A. Zeeb * @mac_id: interface ID 359bfcc09ddSBjoern A. Zeeb * @consec_missed_beacons_since_last_rx: number of consecutive missed 360bfcc09ddSBjoern A. Zeeb * beacons since last RX. 361bfcc09ddSBjoern A. Zeeb * @consec_missed_beacons: number of consecutive missed beacons 362bfcc09ddSBjoern A. Zeeb * @num_expected_beacons: number of expected beacons 363bfcc09ddSBjoern A. Zeeb * @num_recvd_beacons: number of received beacons 364bfcc09ddSBjoern A. Zeeb */ 365*9af1bba4SBjoern A. Zeeb struct iwl_missed_beacons_notif_ver_3 { 366bfcc09ddSBjoern A. Zeeb __le32 mac_id; 367bfcc09ddSBjoern A. Zeeb __le32 consec_missed_beacons_since_last_rx; 368bfcc09ddSBjoern A. Zeeb __le32 consec_missed_beacons; 369bfcc09ddSBjoern A. Zeeb __le32 num_expected_beacons; 370bfcc09ddSBjoern A. Zeeb __le32 num_recvd_beacons; 371bfcc09ddSBjoern A. Zeeb } __packed; /* MISSED_BEACON_NTFY_API_S_VER_3 */ 372bfcc09ddSBjoern A. Zeeb 373bfcc09ddSBjoern A. Zeeb /** 374*9af1bba4SBjoern A. Zeeb * struct iwl_missed_beacons_notif - information on missed beacons 375*9af1bba4SBjoern A. Zeeb * ( MISSED_BEACONS_NOTIFICATION = 0xa2 ) 376*9af1bba4SBjoern A. Zeeb * @link_id: fw link ID 377*9af1bba4SBjoern A. Zeeb * @consec_missed_beacons_since_last_rx: number of consecutive missed 378*9af1bba4SBjoern A. Zeeb * beacons since last RX. 379*9af1bba4SBjoern A. Zeeb * @consec_missed_beacons: number of consecutive missed beacons 380*9af1bba4SBjoern A. Zeeb * @num_expected_beacons: number of expected beacons 381*9af1bba4SBjoern A. Zeeb * @num_recvd_beacons: number of received beacons 382*9af1bba4SBjoern A. Zeeb */ 383*9af1bba4SBjoern A. Zeeb struct iwl_missed_beacons_notif { 384*9af1bba4SBjoern A. Zeeb __le32 link_id; 385*9af1bba4SBjoern A. Zeeb __le32 consec_missed_beacons_since_last_rx; 386*9af1bba4SBjoern A. Zeeb __le32 consec_missed_beacons; 387*9af1bba4SBjoern A. Zeeb __le32 num_expected_beacons; 388*9af1bba4SBjoern A. Zeeb __le32 num_recvd_beacons; 389*9af1bba4SBjoern A. Zeeb } __packed; /* MISSED_BEACON_NTFY_API_S_VER_4 */ 390*9af1bba4SBjoern A. Zeeb 391*9af1bba4SBjoern A. Zeeb /** 392bfcc09ddSBjoern A. Zeeb * struct iwl_he_backoff_conf - used for backoff configuration 393bfcc09ddSBjoern A. Zeeb * Per each trigger-based AC, (set by MU EDCA Parameter set info-element) 394bfcc09ddSBjoern A. Zeeb * used for backoff configuration of TXF5..TXF8 trigger based. 395bfcc09ddSBjoern A. Zeeb * The MU-TIMER is reloaded w/ MU_TIME each time a frame from the AC is sent via 396bfcc09ddSBjoern A. Zeeb * trigger-based TX. 397bfcc09ddSBjoern A. Zeeb * @cwmin: CW min 398bfcc09ddSBjoern A. Zeeb * @cwmax: CW max 399bfcc09ddSBjoern A. Zeeb * @aifsn: AIFSN 400bfcc09ddSBjoern A. Zeeb * AIFSN=0, means that no backoff from the specified TRIG-BASED AC is 401bfcc09ddSBjoern A. Zeeb * allowed till the MU-TIMER is 0 402bfcc09ddSBjoern A. Zeeb * @mu_time: MU time in 8TU units 403bfcc09ddSBjoern A. Zeeb */ 404bfcc09ddSBjoern A. Zeeb struct iwl_he_backoff_conf { 405bfcc09ddSBjoern A. Zeeb __le16 cwmin; 406bfcc09ddSBjoern A. Zeeb __le16 cwmax; 407bfcc09ddSBjoern A. Zeeb __le16 aifsn; 408bfcc09ddSBjoern A. Zeeb __le16 mu_time; 409bfcc09ddSBjoern A. Zeeb } __packed; /* AC_QOS_DOT11AX_API_S */ 410bfcc09ddSBjoern A. Zeeb 411bfcc09ddSBjoern A. Zeeb /** 412bfcc09ddSBjoern A. Zeeb * enum iwl_he_pkt_ext_constellations - PPE constellation indices 413bfcc09ddSBjoern A. Zeeb * @IWL_HE_PKT_EXT_BPSK: BPSK 414bfcc09ddSBjoern A. Zeeb * @IWL_HE_PKT_EXT_QPSK: QPSK 415bfcc09ddSBjoern A. Zeeb * @IWL_HE_PKT_EXT_16QAM: 16-QAM 416bfcc09ddSBjoern A. Zeeb * @IWL_HE_PKT_EXT_64QAM: 64-QAM 417bfcc09ddSBjoern A. Zeeb * @IWL_HE_PKT_EXT_256QAM: 256-QAM 418bfcc09ddSBjoern A. Zeeb * @IWL_HE_PKT_EXT_1024QAM: 1024-QAM 419*9af1bba4SBjoern A. Zeeb * @IWL_HE_PKT_EXT_4096QAM: 4096-QAM, for EHT only 420bfcc09ddSBjoern A. Zeeb * @IWL_HE_PKT_EXT_NONE: not defined 421bfcc09ddSBjoern A. Zeeb */ 422bfcc09ddSBjoern A. Zeeb enum iwl_he_pkt_ext_constellations { 423bfcc09ddSBjoern A. Zeeb IWL_HE_PKT_EXT_BPSK = 0, 424bfcc09ddSBjoern A. Zeeb IWL_HE_PKT_EXT_QPSK, 425bfcc09ddSBjoern A. Zeeb IWL_HE_PKT_EXT_16QAM, 426bfcc09ddSBjoern A. Zeeb IWL_HE_PKT_EXT_64QAM, 427bfcc09ddSBjoern A. Zeeb IWL_HE_PKT_EXT_256QAM, 428bfcc09ddSBjoern A. Zeeb IWL_HE_PKT_EXT_1024QAM, 429*9af1bba4SBjoern A. Zeeb IWL_HE_PKT_EXT_4096QAM, 430bfcc09ddSBjoern A. Zeeb IWL_HE_PKT_EXT_NONE, 431bfcc09ddSBjoern A. Zeeb }; 432bfcc09ddSBjoern A. Zeeb 433bfcc09ddSBjoern A. Zeeb #define MAX_HE_SUPP_NSS 2 434d9836fb4SBjoern A. Zeeb #define MAX_CHANNEL_BW_INDX_API_D_VER_2 4 435d9836fb4SBjoern A. Zeeb #define MAX_CHANNEL_BW_INDX_API_D_VER_3 5 436bfcc09ddSBjoern A. Zeeb 437bfcc09ddSBjoern A. Zeeb /** 438d9836fb4SBjoern A. Zeeb * struct iwl_he_pkt_ext_v1 - QAM thresholds 439bfcc09ddSBjoern A. Zeeb * The required PPE is set via HE Capabilities IE, per Nss x BW x MCS 440bfcc09ddSBjoern A. Zeeb * The IE is organized in the following way: 441bfcc09ddSBjoern A. Zeeb * Support for Nss x BW (or RU) matrix: 442bfcc09ddSBjoern A. Zeeb * (0=SISO, 1=MIMO2) x (0-20MHz, 1-40MHz, 2-80MHz, 3-160MHz) 443bfcc09ddSBjoern A. Zeeb * Each entry contains 2 QAM thresholds for 8us and 16us: 444bfcc09ddSBjoern A. Zeeb * 0=BPSK, 1=QPSK, 2=16QAM, 3=64QAM, 4=256QAM, 5=1024QAM, 6=RES, 7=NONE 445bfcc09ddSBjoern A. Zeeb * i.e. QAM_th1 < QAM_th2 such if TX uses QAM_tx: 446bfcc09ddSBjoern A. Zeeb * QAM_tx < QAM_th1 --> PPE=0us 447bfcc09ddSBjoern A. Zeeb * QAM_th1 <= QAM_tx < QAM_th2 --> PPE=8us 448bfcc09ddSBjoern A. Zeeb * QAM_th2 <= QAM_tx --> PPE=16us 449bfcc09ddSBjoern A. Zeeb * @pkt_ext_qam_th: QAM thresholds 450bfcc09ddSBjoern A. Zeeb * For each Nss/Bw define 2 QAM thrsholds (0..5) 451bfcc09ddSBjoern A. Zeeb * For rates below the low_th, no need for PPE 452bfcc09ddSBjoern A. Zeeb * For rates between low_th and high_th, need 8us PPE 453bfcc09ddSBjoern A. Zeeb * For rates equal or higher then the high_th, need 16us PPE 454bfcc09ddSBjoern A. Zeeb * Nss (0-siso, 1-mimo2) x BW (0-20MHz, 1-40MHz, 2-80MHz, 3-160MHz) x 455bfcc09ddSBjoern A. Zeeb * (0-low_th, 1-high_th) 456bfcc09ddSBjoern A. Zeeb */ 457d9836fb4SBjoern A. Zeeb struct iwl_he_pkt_ext_v1 { 458d9836fb4SBjoern A. Zeeb u8 pkt_ext_qam_th[MAX_HE_SUPP_NSS][MAX_CHANNEL_BW_INDX_API_D_VER_2][2]; 459d9836fb4SBjoern A. Zeeb } __packed; /* PKT_EXT_DOT11AX_API_S_VER_1 */ 460d9836fb4SBjoern A. Zeeb 461d9836fb4SBjoern A. Zeeb /** 462d9836fb4SBjoern A. Zeeb * struct iwl_he_pkt_ext_v2 - QAM thresholds 463d9836fb4SBjoern A. Zeeb * The required PPE is set via HE Capabilities IE, per Nss x BW x MCS 464d9836fb4SBjoern A. Zeeb * The IE is organized in the following way: 465d9836fb4SBjoern A. Zeeb * Support for Nss x BW (or RU) matrix: 466d9836fb4SBjoern A. Zeeb * (0=SISO, 1=MIMO2) x (0-20MHz, 1-40MHz, 2-80MHz, 3-160MHz) 467d9836fb4SBjoern A. Zeeb * Each entry contains 2 QAM thresholds for 8us and 16us: 468d9836fb4SBjoern A. Zeeb * 0=BPSK, 1=QPSK, 2=16QAM, 3=64QAM, 4=256QAM, 5=1024QAM, 6=RES, 7=NONE 469d9836fb4SBjoern A. Zeeb * i.e. QAM_th1 < QAM_th2 such if TX uses QAM_tx: 470d9836fb4SBjoern A. Zeeb * QAM_tx < QAM_th1 --> PPE=0us 471d9836fb4SBjoern A. Zeeb * QAM_th1 <= QAM_tx < QAM_th2 --> PPE=8us 472d9836fb4SBjoern A. Zeeb * QAM_th2 <= QAM_tx --> PPE=16us 473d9836fb4SBjoern A. Zeeb * @pkt_ext_qam_th: QAM thresholds 474d9836fb4SBjoern A. Zeeb * For each Nss/Bw define 2 QAM thrsholds (0..5) 475d9836fb4SBjoern A. Zeeb * For rates below the low_th, no need for PPE 476d9836fb4SBjoern A. Zeeb * For rates between low_th and high_th, need 8us PPE 477d9836fb4SBjoern A. Zeeb * For rates equal or higher then the high_th, need 16us PPE 478d9836fb4SBjoern A. Zeeb * Nss (0-siso, 1-mimo2) x 479d9836fb4SBjoern A. Zeeb * BW (0-20MHz, 1-40MHz, 2-80MHz, 3-160MHz, 4-320MHz) x 480d9836fb4SBjoern A. Zeeb * (0-low_th, 1-high_th) 481d9836fb4SBjoern A. Zeeb */ 482d9836fb4SBjoern A. Zeeb struct iwl_he_pkt_ext_v2 { 483d9836fb4SBjoern A. Zeeb u8 pkt_ext_qam_th[MAX_HE_SUPP_NSS][MAX_CHANNEL_BW_INDX_API_D_VER_3][2]; 484d9836fb4SBjoern A. Zeeb } __packed; /* PKT_EXT_DOT11AX_API_S_VER_2 */ 485bfcc09ddSBjoern A. Zeeb 486bfcc09ddSBjoern A. Zeeb /** 487bfcc09ddSBjoern A. Zeeb * enum iwl_he_sta_ctxt_flags - HE STA context flags 488bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_REF_BSSID_VALID: ref bssid addr valid (for receiving specific 489bfcc09ddSBjoern A. Zeeb * control frames such as TRIG, NDPA, BACK) 490bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_BSS_COLOR_DIS: BSS color disable, don't use the BSS 491bfcc09ddSBjoern A. Zeeb * color for RX filter but use MAC header 492bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_PARTIAL_BSS_COLOR: partial BSS color allocation 493bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_32BIT_BA_BITMAP: indicates the receiver supports BA bitmap 494bfcc09ddSBjoern A. Zeeb * of 32-bits 495bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_PACKET_EXT: indicates that the packet-extension info is valid 496bfcc09ddSBjoern A. Zeeb * and should be used 497bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_TRIG_RND_ALLOC: indicates that trigger based random allocation 498bfcc09ddSBjoern A. Zeeb * is enabled according to UORA element existence 499bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_CONST_TRIG_RND_ALLOC: used for AV testing 500bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_ACK_ENABLED: indicates that the AP supports receiving ACK- 501bfcc09ddSBjoern A. Zeeb * enabled AGG, i.e. both BACK and non-BACK frames in a single AGG 502bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_MU_EDCA_CW: indicates that there is an element of MU EDCA 503bfcc09ddSBjoern A. Zeeb * parameter set, i.e. the backoff counters for trig-based ACs 504bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_NIC_NOT_ACK_ENABLED: mark that the NIC doesn't support receiving 505bfcc09ddSBjoern A. Zeeb * ACK-enabled AGG, (i.e. both BACK and non-BACK frames in single AGG). 506bfcc09ddSBjoern A. Zeeb * If the NIC is not ACK_ENABLED it may use the EOF-bit in first non-0 507bfcc09ddSBjoern A. Zeeb * len delim to determine if AGG or single. 508bfcc09ddSBjoern A. Zeeb * @STA_CTXT_HE_RU_2MHZ_BLOCK: indicates that 26-tone RU OFDMA transmission are 509bfcc09ddSBjoern A. Zeeb * not allowed (as there are OBSS that might classify such transmissions as 510bfcc09ddSBjoern A. Zeeb * radar pulses). 511d9836fb4SBjoern A. Zeeb * @STA_CTXT_HE_NDP_FEEDBACK_ENABLED: mark support for NDP feedback and change 512d9836fb4SBjoern A. Zeeb * of threshold 513d9836fb4SBjoern A. Zeeb * @STA_CTXT_EHT_PUNCTURE_MASK_VALID: indicates the puncture_mask field is valid 514d9836fb4SBjoern A. Zeeb * @STA_CTXT_EHT_LONG_PPE_ENABLED: indicates the PPE requirement should be 515d9836fb4SBjoern A. Zeeb * extended to 20us for BW > 160Mhz or for MCS w/ 4096-QAM. 516bfcc09ddSBjoern A. Zeeb */ 517bfcc09ddSBjoern A. Zeeb enum iwl_he_sta_ctxt_flags { 518bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_REF_BSSID_VALID = BIT(4), 519bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_BSS_COLOR_DIS = BIT(5), 520bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_PARTIAL_BSS_COLOR = BIT(6), 521bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_32BIT_BA_BITMAP = BIT(7), 522bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_PACKET_EXT = BIT(8), 523bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_TRIG_RND_ALLOC = BIT(9), 524bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_CONST_TRIG_RND_ALLOC = BIT(10), 525bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_ACK_ENABLED = BIT(11), 526bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_MU_EDCA_CW = BIT(12), 527bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_NIC_NOT_ACK_ENABLED = BIT(13), 528bfcc09ddSBjoern A. Zeeb STA_CTXT_HE_RU_2MHZ_BLOCK = BIT(14), 529d9836fb4SBjoern A. Zeeb STA_CTXT_HE_NDP_FEEDBACK_ENABLED = BIT(15), 530d9836fb4SBjoern A. Zeeb STA_CTXT_EHT_PUNCTURE_MASK_VALID = BIT(16), 531d9836fb4SBjoern A. Zeeb STA_CTXT_EHT_LONG_PPE_ENABLED = BIT(17), 532bfcc09ddSBjoern A. Zeeb }; 533bfcc09ddSBjoern A. Zeeb 534bfcc09ddSBjoern A. Zeeb /** 535bfcc09ddSBjoern A. Zeeb * enum iwl_he_htc_flags - HE HTC support flags 536bfcc09ddSBjoern A. Zeeb * @IWL_HE_HTC_SUPPORT: HE-HTC support 537bfcc09ddSBjoern A. Zeeb * @IWL_HE_HTC_UL_MU_RESP_SCHED: HE UL MU response schedule 538bfcc09ddSBjoern A. Zeeb * support via A-control field 539bfcc09ddSBjoern A. Zeeb * @IWL_HE_HTC_BSR_SUPP: BSR support in A-control field 540bfcc09ddSBjoern A. Zeeb * @IWL_HE_HTC_OMI_SUPP: A-OMI support in A-control field 541bfcc09ddSBjoern A. Zeeb * @IWL_HE_HTC_BQR_SUPP: A-BQR support in A-control field 542bfcc09ddSBjoern A. Zeeb */ 543bfcc09ddSBjoern A. Zeeb enum iwl_he_htc_flags { 544bfcc09ddSBjoern A. Zeeb IWL_HE_HTC_SUPPORT = BIT(0), 545bfcc09ddSBjoern A. Zeeb IWL_HE_HTC_UL_MU_RESP_SCHED = BIT(3), 546bfcc09ddSBjoern A. Zeeb IWL_HE_HTC_BSR_SUPP = BIT(4), 547bfcc09ddSBjoern A. Zeeb IWL_HE_HTC_OMI_SUPP = BIT(5), 548bfcc09ddSBjoern A. Zeeb IWL_HE_HTC_BQR_SUPP = BIT(6), 549bfcc09ddSBjoern A. Zeeb }; 550bfcc09ddSBjoern A. Zeeb 551bfcc09ddSBjoern A. Zeeb /* 552bfcc09ddSBjoern A. Zeeb * @IWL_HE_HTC_LINK_ADAP_NO_FEEDBACK: the STA does not provide HE MFB 553bfcc09ddSBjoern A. Zeeb * @IWL_HE_HTC_LINK_ADAP_UNSOLICITED: the STA provides only unsolicited HE MFB 554bfcc09ddSBjoern A. Zeeb * @IWL_HE_HTC_LINK_ADAP_BOTH: the STA is capable of providing HE MFB in 555bfcc09ddSBjoern A. Zeeb * response to HE MRQ and if the STA provides unsolicited HE MFB 556bfcc09ddSBjoern A. Zeeb */ 557bfcc09ddSBjoern A. Zeeb #define IWL_HE_HTC_LINK_ADAP_POS (1) 558bfcc09ddSBjoern A. Zeeb #define IWL_HE_HTC_LINK_ADAP_NO_FEEDBACK (0) 559bfcc09ddSBjoern A. Zeeb #define IWL_HE_HTC_LINK_ADAP_UNSOLICITED (2 << IWL_HE_HTC_LINK_ADAP_POS) 560bfcc09ddSBjoern A. Zeeb #define IWL_HE_HTC_LINK_ADAP_BOTH (3 << IWL_HE_HTC_LINK_ADAP_POS) 561bfcc09ddSBjoern A. Zeeb 562bfcc09ddSBjoern A. Zeeb /** 563bfcc09ddSBjoern A. Zeeb * struct iwl_he_sta_context_cmd_v1 - configure FW to work with HE AP 564bfcc09ddSBjoern A. Zeeb * @sta_id: STA id 565bfcc09ddSBjoern A. Zeeb * @tid_limit: max num of TIDs in TX HE-SU multi-TID agg 566bfcc09ddSBjoern A. Zeeb * 0 - bad value, 1 - multi-tid not supported, 2..8 - tid limit 567bfcc09ddSBjoern A. Zeeb * @reserved1: reserved byte for future use 568bfcc09ddSBjoern A. Zeeb * @reserved2: reserved byte for future use 569bfcc09ddSBjoern A. Zeeb * @flags: see %iwl_11ax_sta_ctxt_flags 570bfcc09ddSBjoern A. Zeeb * @ref_bssid_addr: reference BSSID used by the AP 571bfcc09ddSBjoern A. Zeeb * @reserved0: reserved 2 bytes for aligning the ref_bssid_addr field to 8 bytes 572bfcc09ddSBjoern A. Zeeb * @htc_flags: which features are supported in HTC 573bfcc09ddSBjoern A. Zeeb * @frag_flags: frag support in A-MSDU 574bfcc09ddSBjoern A. Zeeb * @frag_level: frag support level 575bfcc09ddSBjoern A. Zeeb * @frag_max_num: max num of "open" MSDUs in the receiver (in power of 2) 576bfcc09ddSBjoern A. Zeeb * @frag_min_size: min frag size (except last frag) 577bfcc09ddSBjoern A. Zeeb * @pkt_ext: optional, exists according to PPE-present bit in the HE-PHY capa 578bfcc09ddSBjoern A. Zeeb * @bss_color: 11ax AP ID that is used in the HE SIG-A to mark inter BSS frame 579bfcc09ddSBjoern A. Zeeb * @htc_trig_based_pkt_ext: default PE in 4us units 580bfcc09ddSBjoern A. Zeeb * @frame_time_rts_th: HE duration RTS threshold, in units of 32us 581bfcc09ddSBjoern A. Zeeb * @rand_alloc_ecwmin: random CWmin = 2**ECWmin-1 582bfcc09ddSBjoern A. Zeeb * @rand_alloc_ecwmax: random CWmax = 2**ECWmax-1 583bfcc09ddSBjoern A. Zeeb * @reserved3: reserved byte for future use 584bfcc09ddSBjoern A. Zeeb * @trig_based_txf: MU EDCA Parameter set for the trigger based traffic queues 585bfcc09ddSBjoern A. Zeeb */ 586bfcc09ddSBjoern A. Zeeb struct iwl_he_sta_context_cmd_v1 { 587bfcc09ddSBjoern A. Zeeb u8 sta_id; 588bfcc09ddSBjoern A. Zeeb u8 tid_limit; 589bfcc09ddSBjoern A. Zeeb u8 reserved1; 590bfcc09ddSBjoern A. Zeeb u8 reserved2; 591bfcc09ddSBjoern A. Zeeb __le32 flags; 592bfcc09ddSBjoern A. Zeeb 593bfcc09ddSBjoern A. Zeeb /* The below fields are set via Multiple BSSID IE */ 594bfcc09ddSBjoern A. Zeeb u8 ref_bssid_addr[6]; 595bfcc09ddSBjoern A. Zeeb __le16 reserved0; 596bfcc09ddSBjoern A. Zeeb 597bfcc09ddSBjoern A. Zeeb /* The below fields are set via HE-capabilities IE */ 598bfcc09ddSBjoern A. Zeeb __le32 htc_flags; 599bfcc09ddSBjoern A. Zeeb 600bfcc09ddSBjoern A. Zeeb u8 frag_flags; 601bfcc09ddSBjoern A. Zeeb u8 frag_level; 602bfcc09ddSBjoern A. Zeeb u8 frag_max_num; 603bfcc09ddSBjoern A. Zeeb u8 frag_min_size; 604bfcc09ddSBjoern A. Zeeb 605bfcc09ddSBjoern A. Zeeb /* The below fields are set via PPE thresholds element */ 606d9836fb4SBjoern A. Zeeb struct iwl_he_pkt_ext_v1 pkt_ext; 607bfcc09ddSBjoern A. Zeeb 608bfcc09ddSBjoern A. Zeeb /* The below fields are set via HE-Operation IE */ 609bfcc09ddSBjoern A. Zeeb u8 bss_color; 610bfcc09ddSBjoern A. Zeeb u8 htc_trig_based_pkt_ext; 611bfcc09ddSBjoern A. Zeeb __le16 frame_time_rts_th; 612bfcc09ddSBjoern A. Zeeb 613bfcc09ddSBjoern A. Zeeb /* Random access parameter set (i.e. RAPS) */ 614bfcc09ddSBjoern A. Zeeb u8 rand_alloc_ecwmin; 615bfcc09ddSBjoern A. Zeeb u8 rand_alloc_ecwmax; 616bfcc09ddSBjoern A. Zeeb __le16 reserved3; 617bfcc09ddSBjoern A. Zeeb 618bfcc09ddSBjoern A. Zeeb /* The below fields are set via MU EDCA parameter set element */ 619bfcc09ddSBjoern A. Zeeb struct iwl_he_backoff_conf trig_based_txf[AC_NUM]; 620bfcc09ddSBjoern A. Zeeb } __packed; /* STA_CONTEXT_DOT11AX_API_S_VER_1 */ 621bfcc09ddSBjoern A. Zeeb 622bfcc09ddSBjoern A. Zeeb /** 623d9836fb4SBjoern A. Zeeb * struct iwl_he_sta_context_cmd_v2 - configure FW to work with HE AP 624bfcc09ddSBjoern A. Zeeb * @sta_id: STA id 625bfcc09ddSBjoern A. Zeeb * @tid_limit: max num of TIDs in TX HE-SU multi-TID agg 626bfcc09ddSBjoern A. Zeeb * 0 - bad value, 1 - multi-tid not supported, 2..8 - tid limit 627bfcc09ddSBjoern A. Zeeb * @reserved1: reserved byte for future use 628bfcc09ddSBjoern A. Zeeb * @reserved2: reserved byte for future use 629bfcc09ddSBjoern A. Zeeb * @flags: see %iwl_11ax_sta_ctxt_flags 630bfcc09ddSBjoern A. Zeeb * @ref_bssid_addr: reference BSSID used by the AP 631bfcc09ddSBjoern A. Zeeb * @reserved0: reserved 2 bytes for aligning the ref_bssid_addr field to 8 bytes 632bfcc09ddSBjoern A. Zeeb * @htc_flags: which features are supported in HTC 633bfcc09ddSBjoern A. Zeeb * @frag_flags: frag support in A-MSDU 634bfcc09ddSBjoern A. Zeeb * @frag_level: frag support level 635bfcc09ddSBjoern A. Zeeb * @frag_max_num: max num of "open" MSDUs in the receiver (in power of 2) 636bfcc09ddSBjoern A. Zeeb * @frag_min_size: min frag size (except last frag) 637bfcc09ddSBjoern A. Zeeb * @pkt_ext: optional, exists according to PPE-present bit in the HE-PHY capa 638bfcc09ddSBjoern A. Zeeb * @bss_color: 11ax AP ID that is used in the HE SIG-A to mark inter BSS frame 639bfcc09ddSBjoern A. Zeeb * @htc_trig_based_pkt_ext: default PE in 4us units 640bfcc09ddSBjoern A. Zeeb * @frame_time_rts_th: HE duration RTS threshold, in units of 32us 641bfcc09ddSBjoern A. Zeeb * @rand_alloc_ecwmin: random CWmin = 2**ECWmin-1 642bfcc09ddSBjoern A. Zeeb * @rand_alloc_ecwmax: random CWmax = 2**ECWmax-1 643bfcc09ddSBjoern A. Zeeb * @reserved3: reserved byte for future use 644bfcc09ddSBjoern A. Zeeb * @trig_based_txf: MU EDCA Parameter set for the trigger based traffic queues 645bfcc09ddSBjoern A. Zeeb * @max_bssid_indicator: indicator of the max bssid supported on the associated 646bfcc09ddSBjoern A. Zeeb * bss 647bfcc09ddSBjoern A. Zeeb * @bssid_index: index of the associated VAP 648bfcc09ddSBjoern A. Zeeb * @ema_ap: AP supports enhanced Multi BSSID advertisement 649bfcc09ddSBjoern A. Zeeb * @profile_periodicity: number of Beacon periods that are needed to receive the 650bfcc09ddSBjoern A. Zeeb * complete VAPs info 651bfcc09ddSBjoern A. Zeeb * @bssid_count: actual number of VAPs in the MultiBSS Set 652bfcc09ddSBjoern A. Zeeb * @reserved4: alignment 653bfcc09ddSBjoern A. Zeeb */ 654d9836fb4SBjoern A. Zeeb struct iwl_he_sta_context_cmd_v2 { 655bfcc09ddSBjoern A. Zeeb u8 sta_id; 656bfcc09ddSBjoern A. Zeeb u8 tid_limit; 657bfcc09ddSBjoern A. Zeeb u8 reserved1; 658bfcc09ddSBjoern A. Zeeb u8 reserved2; 659bfcc09ddSBjoern A. Zeeb __le32 flags; 660bfcc09ddSBjoern A. Zeeb 661bfcc09ddSBjoern A. Zeeb /* The below fields are set via Multiple BSSID IE */ 662bfcc09ddSBjoern A. Zeeb u8 ref_bssid_addr[6]; 663bfcc09ddSBjoern A. Zeeb __le16 reserved0; 664bfcc09ddSBjoern A. Zeeb 665bfcc09ddSBjoern A. Zeeb /* The below fields are set via HE-capabilities IE */ 666bfcc09ddSBjoern A. Zeeb __le32 htc_flags; 667bfcc09ddSBjoern A. Zeeb 668bfcc09ddSBjoern A. Zeeb u8 frag_flags; 669bfcc09ddSBjoern A. Zeeb u8 frag_level; 670bfcc09ddSBjoern A. Zeeb u8 frag_max_num; 671bfcc09ddSBjoern A. Zeeb u8 frag_min_size; 672bfcc09ddSBjoern A. Zeeb 673bfcc09ddSBjoern A. Zeeb /* The below fields are set via PPE thresholds element */ 674d9836fb4SBjoern A. Zeeb struct iwl_he_pkt_ext_v1 pkt_ext; 675bfcc09ddSBjoern A. Zeeb 676bfcc09ddSBjoern A. Zeeb /* The below fields are set via HE-Operation IE */ 677bfcc09ddSBjoern A. Zeeb u8 bss_color; 678bfcc09ddSBjoern A. Zeeb u8 htc_trig_based_pkt_ext; 679bfcc09ddSBjoern A. Zeeb __le16 frame_time_rts_th; 680bfcc09ddSBjoern A. Zeeb 681bfcc09ddSBjoern A. Zeeb /* Random access parameter set (i.e. RAPS) */ 682bfcc09ddSBjoern A. Zeeb u8 rand_alloc_ecwmin; 683bfcc09ddSBjoern A. Zeeb u8 rand_alloc_ecwmax; 684bfcc09ddSBjoern A. Zeeb __le16 reserved3; 685bfcc09ddSBjoern A. Zeeb 686bfcc09ddSBjoern A. Zeeb /* The below fields are set via MU EDCA parameter set element */ 687bfcc09ddSBjoern A. Zeeb struct iwl_he_backoff_conf trig_based_txf[AC_NUM]; 688bfcc09ddSBjoern A. Zeeb 689bfcc09ddSBjoern A. Zeeb u8 max_bssid_indicator; 690bfcc09ddSBjoern A. Zeeb u8 bssid_index; 691bfcc09ddSBjoern A. Zeeb u8 ema_ap; 692bfcc09ddSBjoern A. Zeeb u8 profile_periodicity; 693bfcc09ddSBjoern A. Zeeb u8 bssid_count; 694bfcc09ddSBjoern A. Zeeb u8 reserved4[3]; 695bfcc09ddSBjoern A. Zeeb } __packed; /* STA_CONTEXT_DOT11AX_API_S_VER_2 */ 696bfcc09ddSBjoern A. Zeeb 697bfcc09ddSBjoern A. Zeeb /** 698d9836fb4SBjoern A. Zeeb * struct iwl_he_sta_context_cmd_v3 - configure FW to work with HE AP 699d9836fb4SBjoern A. Zeeb * @sta_id: STA id 700d9836fb4SBjoern A. Zeeb * @tid_limit: max num of TIDs in TX HE-SU multi-TID agg 701d9836fb4SBjoern A. Zeeb * 0 - bad value, 1 - multi-tid not supported, 2..8 - tid limit 702d9836fb4SBjoern A. Zeeb * @reserved1: reserved byte for future use 703d9836fb4SBjoern A. Zeeb * @reserved2: reserved byte for future use 704d9836fb4SBjoern A. Zeeb * @flags: see %iwl_11ax_sta_ctxt_flags 705d9836fb4SBjoern A. Zeeb * @ref_bssid_addr: reference BSSID used by the AP 706d9836fb4SBjoern A. Zeeb * @reserved0: reserved 2 bytes for aligning the ref_bssid_addr field to 8 bytes 707d9836fb4SBjoern A. Zeeb * @htc_flags: which features are supported in HTC 708d9836fb4SBjoern A. Zeeb * @frag_flags: frag support in A-MSDU 709d9836fb4SBjoern A. Zeeb * @frag_level: frag support level 710d9836fb4SBjoern A. Zeeb * @frag_max_num: max num of "open" MSDUs in the receiver (in power of 2) 711d9836fb4SBjoern A. Zeeb * @frag_min_size: min frag size (except last frag) 712d9836fb4SBjoern A. Zeeb * @pkt_ext: optional, exists according to PPE-present bit in the HE-PHY capa 713d9836fb4SBjoern A. Zeeb * @bss_color: 11ax AP ID that is used in the HE SIG-A to mark inter BSS frame 714d9836fb4SBjoern A. Zeeb * @htc_trig_based_pkt_ext: default PE in 4us units 715d9836fb4SBjoern A. Zeeb * @frame_time_rts_th: HE duration RTS threshold, in units of 32us 716d9836fb4SBjoern A. Zeeb * @rand_alloc_ecwmin: random CWmin = 2**ECWmin-1 717d9836fb4SBjoern A. Zeeb * @rand_alloc_ecwmax: random CWmax = 2**ECWmax-1 718d9836fb4SBjoern A. Zeeb * @puncture_mask: puncture mask for EHT 719d9836fb4SBjoern A. Zeeb * @trig_based_txf: MU EDCA Parameter set for the trigger based traffic queues 720d9836fb4SBjoern A. Zeeb * @max_bssid_indicator: indicator of the max bssid supported on the associated 721d9836fb4SBjoern A. Zeeb * bss 722d9836fb4SBjoern A. Zeeb * @bssid_index: index of the associated VAP 723d9836fb4SBjoern A. Zeeb * @ema_ap: AP supports enhanced Multi BSSID advertisement 724d9836fb4SBjoern A. Zeeb * @profile_periodicity: number of Beacon periods that are needed to receive the 725d9836fb4SBjoern A. Zeeb * complete VAPs info 726d9836fb4SBjoern A. Zeeb * @bssid_count: actual number of VAPs in the MultiBSS Set 727d9836fb4SBjoern A. Zeeb * @reserved4: alignment 728d9836fb4SBjoern A. Zeeb */ 729d9836fb4SBjoern A. Zeeb struct iwl_he_sta_context_cmd_v3 { 730d9836fb4SBjoern A. Zeeb u8 sta_id; 731d9836fb4SBjoern A. Zeeb u8 tid_limit; 732d9836fb4SBjoern A. Zeeb u8 reserved1; 733d9836fb4SBjoern A. Zeeb u8 reserved2; 734d9836fb4SBjoern A. Zeeb __le32 flags; 735d9836fb4SBjoern A. Zeeb 736d9836fb4SBjoern A. Zeeb /* The below fields are set via Multiple BSSID IE */ 737d9836fb4SBjoern A. Zeeb u8 ref_bssid_addr[6]; 738d9836fb4SBjoern A. Zeeb __le16 reserved0; 739d9836fb4SBjoern A. Zeeb 740d9836fb4SBjoern A. Zeeb /* The below fields are set via HE-capabilities IE */ 741d9836fb4SBjoern A. Zeeb __le32 htc_flags; 742d9836fb4SBjoern A. Zeeb 743d9836fb4SBjoern A. Zeeb u8 frag_flags; 744d9836fb4SBjoern A. Zeeb u8 frag_level; 745d9836fb4SBjoern A. Zeeb u8 frag_max_num; 746d9836fb4SBjoern A. Zeeb u8 frag_min_size; 747d9836fb4SBjoern A. Zeeb 748d9836fb4SBjoern A. Zeeb /* The below fields are set via PPE thresholds element */ 749d9836fb4SBjoern A. Zeeb struct iwl_he_pkt_ext_v2 pkt_ext; 750d9836fb4SBjoern A. Zeeb 751d9836fb4SBjoern A. Zeeb /* The below fields are set via HE-Operation IE */ 752d9836fb4SBjoern A. Zeeb u8 bss_color; 753d9836fb4SBjoern A. Zeeb u8 htc_trig_based_pkt_ext; 754d9836fb4SBjoern A. Zeeb __le16 frame_time_rts_th; 755d9836fb4SBjoern A. Zeeb 756d9836fb4SBjoern A. Zeeb /* Random access parameter set (i.e. RAPS) */ 757d9836fb4SBjoern A. Zeeb u8 rand_alloc_ecwmin; 758d9836fb4SBjoern A. Zeeb u8 rand_alloc_ecwmax; 759d9836fb4SBjoern A. Zeeb __le16 puncture_mask; 760d9836fb4SBjoern A. Zeeb 761d9836fb4SBjoern A. Zeeb /* The below fields are set via MU EDCA parameter set element */ 762d9836fb4SBjoern A. Zeeb struct iwl_he_backoff_conf trig_based_txf[AC_NUM]; 763d9836fb4SBjoern A. Zeeb 764d9836fb4SBjoern A. Zeeb u8 max_bssid_indicator; 765d9836fb4SBjoern A. Zeeb u8 bssid_index; 766d9836fb4SBjoern A. Zeeb u8 ema_ap; 767d9836fb4SBjoern A. Zeeb u8 profile_periodicity; 768d9836fb4SBjoern A. Zeeb u8 bssid_count; 769d9836fb4SBjoern A. Zeeb u8 reserved4[3]; 770d9836fb4SBjoern A. Zeeb } __packed; /* STA_CONTEXT_DOT11AX_API_S_VER_2 */ 771d9836fb4SBjoern A. Zeeb 772d9836fb4SBjoern A. Zeeb /** 773bfcc09ddSBjoern A. Zeeb * struct iwl_he_monitor_cmd - configure air sniffer for HE 774bfcc09ddSBjoern A. Zeeb * @bssid: the BSSID to sniff for 775bfcc09ddSBjoern A. Zeeb * @reserved1: reserved for dword alignment 776bfcc09ddSBjoern A. Zeeb * @aid: the AID to track on for HE MU 777bfcc09ddSBjoern A. Zeeb * @reserved2: reserved for future use 778bfcc09ddSBjoern A. Zeeb */ 779bfcc09ddSBjoern A. Zeeb struct iwl_he_monitor_cmd { 780bfcc09ddSBjoern A. Zeeb u8 bssid[6]; 781bfcc09ddSBjoern A. Zeeb __le16 reserved1; 782bfcc09ddSBjoern A. Zeeb __le16 aid; 783bfcc09ddSBjoern A. Zeeb u8 reserved2[6]; 784bfcc09ddSBjoern A. Zeeb } __packed; /* HE_AIR_SNIFFER_CONFIG_CMD_API_S_VER_1 */ 785bfcc09ddSBjoern A. Zeeb 786bfcc09ddSBjoern A. Zeeb #endif /* __iwl_fw_api_mac_h__ */ 787