1bfcc09ddSBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2bfcc09ddSBjoern A. Zeeb /* 3bfcc09ddSBjoern A. Zeeb * Copyright (C) 2012-2014, 2018-2020 Intel Corporation 4bfcc09ddSBjoern A. Zeeb * Copyright (C) 2013-2015 Intel Mobile Communications GmbH 5bfcc09ddSBjoern A. Zeeb * Copyright (C) 2016-2017 Intel Deutschland GmbH 6bfcc09ddSBjoern A. Zeeb */ 7bfcc09ddSBjoern A. Zeeb #ifndef __iwl_fw_api_datapath_h__ 8bfcc09ddSBjoern A. Zeeb #define __iwl_fw_api_datapath_h__ 9bfcc09ddSBjoern A. Zeeb 10bfcc09ddSBjoern A. Zeeb /** 11bfcc09ddSBjoern A. Zeeb * enum iwl_data_path_subcmd_ids - data path group commands 12bfcc09ddSBjoern A. Zeeb */ 13bfcc09ddSBjoern A. Zeeb enum iwl_data_path_subcmd_ids { 14bfcc09ddSBjoern A. Zeeb /** 15bfcc09ddSBjoern A. Zeeb * @DQA_ENABLE_CMD: &struct iwl_dqa_enable_cmd 16bfcc09ddSBjoern A. Zeeb */ 17bfcc09ddSBjoern A. Zeeb DQA_ENABLE_CMD = 0x0, 18bfcc09ddSBjoern A. Zeeb 19bfcc09ddSBjoern A. Zeeb /** 20bfcc09ddSBjoern A. Zeeb * @UPDATE_MU_GROUPS_CMD: &struct iwl_mu_group_mgmt_cmd 21bfcc09ddSBjoern A. Zeeb */ 22bfcc09ddSBjoern A. Zeeb UPDATE_MU_GROUPS_CMD = 0x1, 23bfcc09ddSBjoern A. Zeeb 24bfcc09ddSBjoern A. Zeeb /** 25bfcc09ddSBjoern A. Zeeb * @TRIGGER_RX_QUEUES_NOTIF_CMD: &struct iwl_rxq_sync_cmd 26bfcc09ddSBjoern A. Zeeb */ 27bfcc09ddSBjoern A. Zeeb TRIGGER_RX_QUEUES_NOTIF_CMD = 0x2, 28bfcc09ddSBjoern A. Zeeb 29bfcc09ddSBjoern A. Zeeb /** 30bfcc09ddSBjoern A. Zeeb * @STA_HE_CTXT_CMD: &struct iwl_he_sta_context_cmd 31bfcc09ddSBjoern A. Zeeb */ 32bfcc09ddSBjoern A. Zeeb STA_HE_CTXT_CMD = 0x7, 33bfcc09ddSBjoern A. Zeeb 34bfcc09ddSBjoern A. Zeeb /** 35d9836fb4SBjoern A. Zeeb * @RLC_CONFIG_CMD: &struct iwl_rlc_config_cmd 36d9836fb4SBjoern A. Zeeb */ 37d9836fb4SBjoern A. Zeeb RLC_CONFIG_CMD = 0x8, 38d9836fb4SBjoern A. Zeeb 39d9836fb4SBjoern A. Zeeb /** 40bfcc09ddSBjoern A. Zeeb * @RFH_QUEUE_CONFIG_CMD: &struct iwl_rfh_queue_config 41bfcc09ddSBjoern A. Zeeb */ 42bfcc09ddSBjoern A. Zeeb RFH_QUEUE_CONFIG_CMD = 0xD, 43bfcc09ddSBjoern A. Zeeb 44bfcc09ddSBjoern A. Zeeb /** 45d9836fb4SBjoern A. Zeeb * @TLC_MNG_CONFIG_CMD: &struct iwl_tlc_config_cmd_v4 46bfcc09ddSBjoern A. Zeeb */ 47bfcc09ddSBjoern A. Zeeb TLC_MNG_CONFIG_CMD = 0xF, 48bfcc09ddSBjoern A. Zeeb 49bfcc09ddSBjoern A. Zeeb /** 50bfcc09ddSBjoern A. Zeeb * @HE_AIR_SNIFFER_CONFIG_CMD: &struct iwl_he_monitor_cmd 51bfcc09ddSBjoern A. Zeeb */ 52bfcc09ddSBjoern A. Zeeb HE_AIR_SNIFFER_CONFIG_CMD = 0x13, 53bfcc09ddSBjoern A. Zeeb 54bfcc09ddSBjoern A. Zeeb /** 55bfcc09ddSBjoern A. Zeeb * @CHEST_COLLECTOR_FILTER_CONFIG_CMD: Configure the CSI 56bfcc09ddSBjoern A. Zeeb * matrix collection, uses &struct iwl_channel_estimation_cfg 57bfcc09ddSBjoern A. Zeeb */ 58bfcc09ddSBjoern A. Zeeb CHEST_COLLECTOR_FILTER_CONFIG_CMD = 0x14, 59bfcc09ddSBjoern A. Zeeb 60bfcc09ddSBjoern A. Zeeb /** 61d9836fb4SBjoern A. Zeeb * @RX_BAID_ALLOCATION_CONFIG_CMD: Allocate/deallocate a BAID for an RX 62d9836fb4SBjoern A. Zeeb * blockack session, uses &struct iwl_rx_baid_cfg_cmd for the 63d9836fb4SBjoern A. Zeeb * command, and &struct iwl_rx_baid_cfg_resp as a response. 64d9836fb4SBjoern A. Zeeb */ 65d9836fb4SBjoern A. Zeeb RX_BAID_ALLOCATION_CONFIG_CMD = 0x16, 66d9836fb4SBjoern A. Zeeb 67d9836fb4SBjoern A. Zeeb /** 68d9836fb4SBjoern A. Zeeb * @SCD_QUEUE_CONFIG_CMD: new scheduler queue allocation/config/removal 69d9836fb4SBjoern A. Zeeb * command, uses &struct iwl_scd_queue_cfg_cmd and the response 70d9836fb4SBjoern A. Zeeb * is (same as before) &struct iwl_tx_queue_cfg_rsp. 71d9836fb4SBjoern A. Zeeb */ 72d9836fb4SBjoern A. Zeeb SCD_QUEUE_CONFIG_CMD = 0x17, 73d9836fb4SBjoern A. Zeeb 74d9836fb4SBjoern A. Zeeb /** 75bfcc09ddSBjoern A. Zeeb * @MONITOR_NOTIF: Datapath monitoring notification, using 76bfcc09ddSBjoern A. Zeeb * &struct iwl_datapath_monitor_notif 77bfcc09ddSBjoern A. Zeeb */ 78bfcc09ddSBjoern A. Zeeb MONITOR_NOTIF = 0xF4, 79bfcc09ddSBjoern A. Zeeb 80bfcc09ddSBjoern A. Zeeb /** 81bfcc09ddSBjoern A. Zeeb * @RX_NO_DATA_NOTIF: &struct iwl_rx_no_data 82bfcc09ddSBjoern A. Zeeb */ 83bfcc09ddSBjoern A. Zeeb RX_NO_DATA_NOTIF = 0xF5, 84bfcc09ddSBjoern A. Zeeb 85bfcc09ddSBjoern A. Zeeb /** 86bfcc09ddSBjoern A. Zeeb * @THERMAL_DUAL_CHAIN_DISABLE_REQ: firmware request for SMPS mode, 87bfcc09ddSBjoern A. Zeeb * &struct iwl_thermal_dual_chain_request 88bfcc09ddSBjoern A. Zeeb */ 89bfcc09ddSBjoern A. Zeeb THERMAL_DUAL_CHAIN_REQUEST = 0xF6, 90bfcc09ddSBjoern A. Zeeb 91bfcc09ddSBjoern A. Zeeb /** 92bfcc09ddSBjoern A. Zeeb * @TLC_MNG_UPDATE_NOTIF: &struct iwl_tlc_update_notif 93bfcc09ddSBjoern A. Zeeb */ 94bfcc09ddSBjoern A. Zeeb TLC_MNG_UPDATE_NOTIF = 0xF7, 95bfcc09ddSBjoern A. Zeeb 96bfcc09ddSBjoern A. Zeeb /** 97bfcc09ddSBjoern A. Zeeb * @STA_PM_NOTIF: &struct iwl_mvm_pm_state_notification 98bfcc09ddSBjoern A. Zeeb */ 99bfcc09ddSBjoern A. Zeeb STA_PM_NOTIF = 0xFD, 100bfcc09ddSBjoern A. Zeeb 101bfcc09ddSBjoern A. Zeeb /** 102bfcc09ddSBjoern A. Zeeb * @MU_GROUP_MGMT_NOTIF: &struct iwl_mu_group_mgmt_notif 103bfcc09ddSBjoern A. Zeeb */ 104bfcc09ddSBjoern A. Zeeb MU_GROUP_MGMT_NOTIF = 0xFE, 105bfcc09ddSBjoern A. Zeeb 106bfcc09ddSBjoern A. Zeeb /** 107bfcc09ddSBjoern A. Zeeb * @RX_QUEUES_NOTIFICATION: &struct iwl_rxq_sync_notification 108bfcc09ddSBjoern A. Zeeb */ 109bfcc09ddSBjoern A. Zeeb RX_QUEUES_NOTIFICATION = 0xFF, 110bfcc09ddSBjoern A. Zeeb }; 111bfcc09ddSBjoern A. Zeeb 112bfcc09ddSBjoern A. Zeeb /** 113bfcc09ddSBjoern A. Zeeb * struct iwl_mu_group_mgmt_cmd - VHT MU-MIMO group configuration 114bfcc09ddSBjoern A. Zeeb * 115bfcc09ddSBjoern A. Zeeb * @reserved: reserved 116bfcc09ddSBjoern A. Zeeb * @membership_status: a bitmap of MU groups 117bfcc09ddSBjoern A. Zeeb * @user_position:the position of station in a group. If the station is in the 118bfcc09ddSBjoern A. Zeeb * group then bits (group * 2) is the position -1 119bfcc09ddSBjoern A. Zeeb */ 120bfcc09ddSBjoern A. Zeeb struct iwl_mu_group_mgmt_cmd { 121bfcc09ddSBjoern A. Zeeb __le32 reserved; 122bfcc09ddSBjoern A. Zeeb __le32 membership_status[2]; 123bfcc09ddSBjoern A. Zeeb __le32 user_position[4]; 124bfcc09ddSBjoern A. Zeeb } __packed; /* MU_GROUP_ID_MNG_TABLE_API_S_VER_1 */ 125bfcc09ddSBjoern A. Zeeb 126bfcc09ddSBjoern A. Zeeb /** 127bfcc09ddSBjoern A. Zeeb * struct iwl_mu_group_mgmt_notif - VHT MU-MIMO group id notification 128bfcc09ddSBjoern A. Zeeb * 129bfcc09ddSBjoern A. Zeeb * @membership_status: a bitmap of MU groups 130bfcc09ddSBjoern A. Zeeb * @user_position: the position of station in a group. If the station is in the 131bfcc09ddSBjoern A. Zeeb * group then bits (group * 2) is the position -1 132bfcc09ddSBjoern A. Zeeb */ 133bfcc09ddSBjoern A. Zeeb struct iwl_mu_group_mgmt_notif { 134bfcc09ddSBjoern A. Zeeb __le32 membership_status[2]; 135bfcc09ddSBjoern A. Zeeb __le32 user_position[4]; 136bfcc09ddSBjoern A. Zeeb } __packed; /* MU_GROUP_MNG_NTFY_API_S_VER_1 */ 137bfcc09ddSBjoern A. Zeeb 138bfcc09ddSBjoern A. Zeeb enum iwl_channel_estimation_flags { 139bfcc09ddSBjoern A. Zeeb IWL_CHANNEL_ESTIMATION_ENABLE = BIT(0), 140bfcc09ddSBjoern A. Zeeb IWL_CHANNEL_ESTIMATION_TIMER = BIT(1), 141bfcc09ddSBjoern A. Zeeb IWL_CHANNEL_ESTIMATION_COUNTER = BIT(2), 142bfcc09ddSBjoern A. Zeeb }; 143bfcc09ddSBjoern A. Zeeb 144bfcc09ddSBjoern A. Zeeb /** 145bfcc09ddSBjoern A. Zeeb * struct iwl_channel_estimation_cfg - channel estimation reporting config 146bfcc09ddSBjoern A. Zeeb */ 147bfcc09ddSBjoern A. Zeeb struct iwl_channel_estimation_cfg { 148bfcc09ddSBjoern A. Zeeb /** 149bfcc09ddSBjoern A. Zeeb * @flags: flags, see &enum iwl_channel_estimation_flags 150bfcc09ddSBjoern A. Zeeb */ 151bfcc09ddSBjoern A. Zeeb __le32 flags; 152bfcc09ddSBjoern A. Zeeb /** 153bfcc09ddSBjoern A. Zeeb * @timer: if enabled via flags, automatically disable after this many 154bfcc09ddSBjoern A. Zeeb * microseconds 155bfcc09ddSBjoern A. Zeeb */ 156bfcc09ddSBjoern A. Zeeb __le32 timer; 157bfcc09ddSBjoern A. Zeeb /** 158bfcc09ddSBjoern A. Zeeb * @count: if enabled via flags, automatically disable after this many 159bfcc09ddSBjoern A. Zeeb * frames with channel estimation matrix were captured 160bfcc09ddSBjoern A. Zeeb */ 161bfcc09ddSBjoern A. Zeeb __le32 count; 162bfcc09ddSBjoern A. Zeeb /** 163bfcc09ddSBjoern A. Zeeb * @rate_n_flags_mask: only try to record the channel estimation matrix 164bfcc09ddSBjoern A. Zeeb * if the rate_n_flags value for the received frame (let's call 165bfcc09ddSBjoern A. Zeeb * that rx_rnf) matches the mask/value given here like this: 166bfcc09ddSBjoern A. Zeeb * (rx_rnf & rate_n_flags_mask) == rate_n_flags_val. 167bfcc09ddSBjoern A. Zeeb */ 168bfcc09ddSBjoern A. Zeeb __le32 rate_n_flags_mask; 169bfcc09ddSBjoern A. Zeeb /** 170bfcc09ddSBjoern A. Zeeb * @rate_n_flags_val: see @rate_n_flags_mask 171bfcc09ddSBjoern A. Zeeb */ 172bfcc09ddSBjoern A. Zeeb __le32 rate_n_flags_val; 173bfcc09ddSBjoern A. Zeeb /** 174bfcc09ddSBjoern A. Zeeb * @reserved: reserved (for alignment) 175bfcc09ddSBjoern A. Zeeb */ 176bfcc09ddSBjoern A. Zeeb __le32 reserved; 177bfcc09ddSBjoern A. Zeeb /** 178bfcc09ddSBjoern A. Zeeb * @frame_types: bitmap of frame types to capture, the received frame's 179bfcc09ddSBjoern A. Zeeb * subtype|type takes 6 bits in the frame and the corresponding bit 180bfcc09ddSBjoern A. Zeeb * in this field must be set to 1 to capture channel estimation for 181bfcc09ddSBjoern A. Zeeb * that frame type. Set to all-ones to enable capturing for all 182bfcc09ddSBjoern A. Zeeb * frame types. 183bfcc09ddSBjoern A. Zeeb */ 184bfcc09ddSBjoern A. Zeeb __le64 frame_types; 185bfcc09ddSBjoern A. Zeeb } __packed; /* CHEST_COLLECTOR_FILTER_CMD_API_S_VER_1 */ 186bfcc09ddSBjoern A. Zeeb 187bfcc09ddSBjoern A. Zeeb enum iwl_datapath_monitor_notif_type { 188bfcc09ddSBjoern A. Zeeb IWL_DP_MON_NOTIF_TYPE_EXT_CCA, 189bfcc09ddSBjoern A. Zeeb }; 190bfcc09ddSBjoern A. Zeeb 191bfcc09ddSBjoern A. Zeeb struct iwl_datapath_monitor_notif { 192bfcc09ddSBjoern A. Zeeb __le32 type; 193bfcc09ddSBjoern A. Zeeb u8 mac_id; 194bfcc09ddSBjoern A. Zeeb u8 reserved[3]; 195bfcc09ddSBjoern A. Zeeb } __packed; /* MONITOR_NTF_API_S_VER_1 */ 196bfcc09ddSBjoern A. Zeeb 197bfcc09ddSBjoern A. Zeeb /** 198bfcc09ddSBjoern A. Zeeb * enum iwl_thermal_dual_chain_req_events - firmware SMPS request event 199bfcc09ddSBjoern A. Zeeb * @THERMAL_DUAL_CHAIN_REQ_ENABLE: (re-)enable dual-chain operation 200bfcc09ddSBjoern A. Zeeb * (subject to other constraints) 201bfcc09ddSBjoern A. Zeeb * @THERMAL_DUAL_CHAIN_REQ_DISABLE: disable dual-chain operation 202bfcc09ddSBjoern A. Zeeb * (static SMPS) 203bfcc09ddSBjoern A. Zeeb */ 204bfcc09ddSBjoern A. Zeeb enum iwl_thermal_dual_chain_req_events { 205bfcc09ddSBjoern A. Zeeb THERMAL_DUAL_CHAIN_REQ_ENABLE, 206bfcc09ddSBjoern A. Zeeb THERMAL_DUAL_CHAIN_REQ_DISABLE, 207bfcc09ddSBjoern A. Zeeb }; /* THERMAL_DUAL_CHAIN_DISABLE_STATE_API_E_VER_1 */ 208bfcc09ddSBjoern A. Zeeb 209bfcc09ddSBjoern A. Zeeb /** 210bfcc09ddSBjoern A. Zeeb * struct iwl_thermal_dual_chain_request - SMPS request 211bfcc09ddSBjoern A. Zeeb * @event: the type of request, see &enum iwl_thermal_dual_chain_req_events 212bfcc09ddSBjoern A. Zeeb */ 213bfcc09ddSBjoern A. Zeeb struct iwl_thermal_dual_chain_request { 214bfcc09ddSBjoern A. Zeeb __le32 event; 215bfcc09ddSBjoern A. Zeeb } __packed; /* THERMAL_DUAL_CHAIN_DISABLE_REQ_NTFY_API_S_VER_1 */ 216bfcc09ddSBjoern A. Zeeb 217d9836fb4SBjoern A. Zeeb enum iwl_rlc_chain_info { 218d9836fb4SBjoern A. Zeeb IWL_RLC_CHAIN_INFO_DRIVER_FORCE = BIT(0), 219d9836fb4SBjoern A. Zeeb IWL_RLC_CHAIN_INFO_VALID = 0x000e, 220d9836fb4SBjoern A. Zeeb IWL_RLC_CHAIN_INFO_FORCE = 0x0070, 221d9836fb4SBjoern A. Zeeb IWL_RLC_CHAIN_INFO_FORCE_MIMO = 0x0380, 222d9836fb4SBjoern A. Zeeb IWL_RLC_CHAIN_INFO_COUNT = 0x0c00, 223d9836fb4SBjoern A. Zeeb IWL_RLC_CHAIN_INFO_MIMO_COUNT = 0x3000, 224d9836fb4SBjoern A. Zeeb }; 225d9836fb4SBjoern A. Zeeb 226d9836fb4SBjoern A. Zeeb /** 227d9836fb4SBjoern A. Zeeb * struct iwl_rlc_properties - RLC properties 228d9836fb4SBjoern A. Zeeb * @rx_chain_info: RX chain info, &enum iwl_rlc_chain_info 229d9836fb4SBjoern A. Zeeb * @reserved: reserved 230d9836fb4SBjoern A. Zeeb */ 231d9836fb4SBjoern A. Zeeb struct iwl_rlc_properties { 232d9836fb4SBjoern A. Zeeb __le32 rx_chain_info; 233d9836fb4SBjoern A. Zeeb __le32 reserved; 234d9836fb4SBjoern A. Zeeb } __packed; /* RLC_PROPERTIES_S_VER_1 */ 235d9836fb4SBjoern A. Zeeb 236d9836fb4SBjoern A. Zeeb enum iwl_sad_mode { 237d9836fb4SBjoern A. Zeeb IWL_SAD_MODE_ENABLED = BIT(0), 238d9836fb4SBjoern A. Zeeb IWL_SAD_MODE_DEFAULT_ANT_MSK = 0x6, 239d9836fb4SBjoern A. Zeeb IWL_SAD_MODE_DEFAULT_ANT_FW = 0x0, 240d9836fb4SBjoern A. Zeeb IWL_SAD_MODE_DEFAULT_ANT_A = 0x2, 241d9836fb4SBjoern A. Zeeb IWL_SAD_MODE_DEFAULT_ANT_B = 0x4, 242d9836fb4SBjoern A. Zeeb }; 243d9836fb4SBjoern A. Zeeb 244d9836fb4SBjoern A. Zeeb /** 245d9836fb4SBjoern A. Zeeb * struct iwl_sad_properties - SAD properties 246d9836fb4SBjoern A. Zeeb * @chain_a_sad_mode: chain A SAD mode, &enum iwl_sad_mode 247d9836fb4SBjoern A. Zeeb * @chain_b_sad_mode: chain B SAD mode, &enum iwl_sad_mode 248d9836fb4SBjoern A. Zeeb * @mac_id: MAC index 249d9836fb4SBjoern A. Zeeb * @reserved: reserved 250d9836fb4SBjoern A. Zeeb */ 251d9836fb4SBjoern A. Zeeb struct iwl_sad_properties { 252d9836fb4SBjoern A. Zeeb __le32 chain_a_sad_mode; 253d9836fb4SBjoern A. Zeeb __le32 chain_b_sad_mode; 254d9836fb4SBjoern A. Zeeb __le32 mac_id; 255d9836fb4SBjoern A. Zeeb __le32 reserved; 256d9836fb4SBjoern A. Zeeb } __packed; 257d9836fb4SBjoern A. Zeeb 258d9836fb4SBjoern A. Zeeb /** 259d9836fb4SBjoern A. Zeeb * struct iwl_rlc_config_cmd - RLC configuration 260d9836fb4SBjoern A. Zeeb * @phy_id: PHY index 261d9836fb4SBjoern A. Zeeb * @rlc: RLC properties, &struct iwl_rlc_properties 262d9836fb4SBjoern A. Zeeb * @sad: SAD (single antenna diversity) options, &struct iwl_sad_properties 263d9836fb4SBjoern A. Zeeb * @flags: flags, &enum iwl_rlc_flags 264d9836fb4SBjoern A. Zeeb * @reserved: reserved 265d9836fb4SBjoern A. Zeeb */ 266d9836fb4SBjoern A. Zeeb struct iwl_rlc_config_cmd { 267d9836fb4SBjoern A. Zeeb __le32 phy_id; 268d9836fb4SBjoern A. Zeeb struct iwl_rlc_properties rlc; 269d9836fb4SBjoern A. Zeeb struct iwl_sad_properties sad; 270d9836fb4SBjoern A. Zeeb u8 flags; 271d9836fb4SBjoern A. Zeeb u8 reserved[3]; 272d9836fb4SBjoern A. Zeeb } __packed; /* RLC_CONFIG_CMD_API_S_VER_2 */ 273d9836fb4SBjoern A. Zeeb 274d9836fb4SBjoern A. Zeeb #define IWL_MAX_BAID_OLD 16 /* MAX_IMMEDIATE_BA_API_D_VER_2 */ 275d9836fb4SBjoern A. Zeeb #define IWL_MAX_BAID 32 /* MAX_IMMEDIATE_BA_API_D_VER_3 */ 276d9836fb4SBjoern A. Zeeb 277d9836fb4SBjoern A. Zeeb /** 278d9836fb4SBjoern A. Zeeb * enum iwl_rx_baid_action - BAID allocation/config action 279d9836fb4SBjoern A. Zeeb * @IWL_RX_BAID_ACTION_ADD: add a new BAID session 280d9836fb4SBjoern A. Zeeb * @IWL_RX_BAID_ACTION_MODIFY: modify the BAID session 281d9836fb4SBjoern A. Zeeb * @IWL_RX_BAID_ACTION_REMOVE: remove the BAID session 282d9836fb4SBjoern A. Zeeb */ 283d9836fb4SBjoern A. Zeeb enum iwl_rx_baid_action { 284d9836fb4SBjoern A. Zeeb IWL_RX_BAID_ACTION_ADD, 285d9836fb4SBjoern A. Zeeb IWL_RX_BAID_ACTION_MODIFY, 286d9836fb4SBjoern A. Zeeb IWL_RX_BAID_ACTION_REMOVE, 287d9836fb4SBjoern A. Zeeb }; /* RX_BAID_ALLOCATION_ACTION_E_VER_1 */ 288d9836fb4SBjoern A. Zeeb 289d9836fb4SBjoern A. Zeeb /** 290d9836fb4SBjoern A. Zeeb * struct iwl_rx_baid_cfg_cmd_alloc - BAID allocation data 291d9836fb4SBjoern A. Zeeb * @sta_id_mask: station ID mask 292d9836fb4SBjoern A. Zeeb * @tid: the TID for this session 293d9836fb4SBjoern A. Zeeb * @reserved: reserved 294d9836fb4SBjoern A. Zeeb * @ssn: the starting sequence number 295d9836fb4SBjoern A. Zeeb * @win_size: RX BA session window size 296d9836fb4SBjoern A. Zeeb */ 297d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd_alloc { 298d9836fb4SBjoern A. Zeeb __le32 sta_id_mask; 299d9836fb4SBjoern A. Zeeb u8 tid; 300d9836fb4SBjoern A. Zeeb u8 reserved[3]; 301d9836fb4SBjoern A. Zeeb __le16 ssn; 302d9836fb4SBjoern A. Zeeb __le16 win_size; 303d9836fb4SBjoern A. Zeeb } __packed; /* RX_BAID_ALLOCATION_ADD_CMD_API_S_VER_1 */ 304d9836fb4SBjoern A. Zeeb 305d9836fb4SBjoern A. Zeeb /** 306d9836fb4SBjoern A. Zeeb * struct iwl_rx_baid_cfg_cmd_modify - BAID modification data 307d9836fb4SBjoern A. Zeeb * @old_sta_id_mask: old station ID mask 308d9836fb4SBjoern A. Zeeb * @new_sta_id_mask: new station ID mask 309d9836fb4SBjoern A. Zeeb * @tid: TID of the BAID 310d9836fb4SBjoern A. Zeeb */ 311d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd_modify { 312d9836fb4SBjoern A. Zeeb __le32 old_sta_id_mask; 313d9836fb4SBjoern A. Zeeb __le32 new_sta_id_mask; 314d9836fb4SBjoern A. Zeeb __le32 tid; 315d9836fb4SBjoern A. Zeeb } __packed; /* RX_BAID_ALLOCATION_MODIFY_CMD_API_S_VER_2 */ 316d9836fb4SBjoern A. Zeeb 317d9836fb4SBjoern A. Zeeb /** 318d9836fb4SBjoern A. Zeeb * struct iwl_rx_baid_cfg_cmd_remove_v1 - BAID removal data 319d9836fb4SBjoern A. Zeeb * @baid: the BAID to remove 320d9836fb4SBjoern A. Zeeb */ 321d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd_remove_v1 { 322d9836fb4SBjoern A. Zeeb __le32 baid; 323d9836fb4SBjoern A. Zeeb } __packed; /* RX_BAID_ALLOCATION_REMOVE_CMD_API_S_VER_1 */ 324d9836fb4SBjoern A. Zeeb 325d9836fb4SBjoern A. Zeeb /** 326d9836fb4SBjoern A. Zeeb * struct iwl_rx_baid_cfg_cmd_remove - BAID removal data 327d9836fb4SBjoern A. Zeeb * @sta_id_mask: the station mask of the BAID to remove 328d9836fb4SBjoern A. Zeeb * @tid: the TID of the BAID to remove 329d9836fb4SBjoern A. Zeeb */ 330d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd_remove { 331d9836fb4SBjoern A. Zeeb __le32 sta_id_mask; 332d9836fb4SBjoern A. Zeeb __le32 tid; 333d9836fb4SBjoern A. Zeeb } __packed; /* RX_BAID_ALLOCATION_REMOVE_CMD_API_S_VER_2 */ 334d9836fb4SBjoern A. Zeeb 335d9836fb4SBjoern A. Zeeb /** 336d9836fb4SBjoern A. Zeeb * struct iwl_rx_baid_cfg_cmd - BAID allocation/config command 337d9836fb4SBjoern A. Zeeb * @action: the action, from &enum iwl_rx_baid_action 338d9836fb4SBjoern A. Zeeb */ 339d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd { 340d9836fb4SBjoern A. Zeeb __le32 action; 341d9836fb4SBjoern A. Zeeb union { 342d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd_alloc alloc; 343d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd_modify modify; 344d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd_remove_v1 remove_v1; 345d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_cmd_remove remove; 346d9836fb4SBjoern A. Zeeb }; /* RX_BAID_ALLOCATION_OPERATION_API_U_VER_2 */ 347d9836fb4SBjoern A. Zeeb } __packed; /* RX_BAID_ALLOCATION_CONFIG_CMD_API_S_VER_2 */ 348d9836fb4SBjoern A. Zeeb 349d9836fb4SBjoern A. Zeeb /** 350d9836fb4SBjoern A. Zeeb * struct iwl_rx_baid_cfg_resp - BAID allocation response 351d9836fb4SBjoern A. Zeeb * @baid: the allocated BAID 352d9836fb4SBjoern A. Zeeb */ 353d9836fb4SBjoern A. Zeeb struct iwl_rx_baid_cfg_resp { 354d9836fb4SBjoern A. Zeeb __le32 baid; 355d9836fb4SBjoern A. Zeeb }; /* RX_BAID_ALLOCATION_RESPONSE_API_S_VER_1 */ 356d9836fb4SBjoern A. Zeeb 357d9836fb4SBjoern A. Zeeb /** 358d9836fb4SBjoern A. Zeeb * enum iwl_scd_queue_cfg_operation - scheduler queue operation 359d9836fb4SBjoern A. Zeeb * @IWL_SCD_QUEUE_ADD: allocate a new queue 360d9836fb4SBjoern A. Zeeb * @IWL_SCD_QUEUE_REMOVE: remove a queue 361d9836fb4SBjoern A. Zeeb * @IWL_SCD_QUEUE_MODIFY: modify a queue 362d9836fb4SBjoern A. Zeeb */ 363d9836fb4SBjoern A. Zeeb enum iwl_scd_queue_cfg_operation { 364d9836fb4SBjoern A. Zeeb IWL_SCD_QUEUE_ADD = 0, 365d9836fb4SBjoern A. Zeeb IWL_SCD_QUEUE_REMOVE = 1, 366d9836fb4SBjoern A. Zeeb IWL_SCD_QUEUE_MODIFY = 2, 367d9836fb4SBjoern A. Zeeb }; 368d9836fb4SBjoern A. Zeeb 369d9836fb4SBjoern A. Zeeb /** 370d9836fb4SBjoern A. Zeeb * struct iwl_scd_queue_cfg_cmd - scheduler queue allocation command 371d9836fb4SBjoern A. Zeeb * @operation: the operation, see &enum iwl_scd_queue_cfg_operation 372d9836fb4SBjoern A. Zeeb * @u.add.sta_mask: station mask 373d9836fb4SBjoern A. Zeeb * @u.add.tid: TID 374d9836fb4SBjoern A. Zeeb * @u.add.reserved: reserved 375d9836fb4SBjoern A. Zeeb * @u.add.flags: flags from &enum iwl_tx_queue_cfg_actions, except 376d9836fb4SBjoern A. Zeeb * %TX_QUEUE_CFG_ENABLE_QUEUE is not valid 377d9836fb4SBjoern A. Zeeb * @u.add.cb_size: size code 378d9836fb4SBjoern A. Zeeb * @u.add.bc_dram_addr: byte-count table IOVA 379d9836fb4SBjoern A. Zeeb * @u.add.tfdq_dram_addr: TFD queue IOVA 380d9836fb4SBjoern A. Zeeb * @u.remove.queue: queue ID for removal 381d9836fb4SBjoern A. Zeeb * @u.modify.sta_mask: new station mask for modify 382d9836fb4SBjoern A. Zeeb * @u.modify.queue: queue ID to modify 383d9836fb4SBjoern A. Zeeb */ 384d9836fb4SBjoern A. Zeeb struct iwl_scd_queue_cfg_cmd { 385d9836fb4SBjoern A. Zeeb __le32 operation; 386d9836fb4SBjoern A. Zeeb union { 387d9836fb4SBjoern A. Zeeb struct { 388d9836fb4SBjoern A. Zeeb __le32 sta_mask; 389d9836fb4SBjoern A. Zeeb u8 tid; 390d9836fb4SBjoern A. Zeeb u8 reserved[3]; 391d9836fb4SBjoern A. Zeeb __le32 flags; 392d9836fb4SBjoern A. Zeeb __le32 cb_size; 393d9836fb4SBjoern A. Zeeb __le64 bc_dram_addr; 394d9836fb4SBjoern A. Zeeb __le64 tfdq_dram_addr; 395d9836fb4SBjoern A. Zeeb } __packed add; /* TX_QUEUE_CFG_CMD_ADD_API_S_VER_1 */ 396d9836fb4SBjoern A. Zeeb struct { 397d9836fb4SBjoern A. Zeeb __le32 queue; 398d9836fb4SBjoern A. Zeeb } __packed remove; /* TX_QUEUE_CFG_CMD_REMOVE_API_S_VER_1 */ 399d9836fb4SBjoern A. Zeeb struct { 400d9836fb4SBjoern A. Zeeb __le32 sta_mask; 401d9836fb4SBjoern A. Zeeb __le32 queue; 402d9836fb4SBjoern A. Zeeb } __packed modify; /* TX_QUEUE_CFG_CMD_MODIFY_API_S_VER_1 */ 403d9836fb4SBjoern A. Zeeb } __packed u; /* TX_QUEUE_CFG_CMD_OPERATION_API_U_VER_1 */ 404d9836fb4SBjoern A. Zeeb } __packed; /* TX_QUEUE_CFG_CMD_API_S_VER_3 */ 405d9836fb4SBjoern A. Zeeb 406bfcc09ddSBjoern A. Zeeb #endif /* __iwl_fw_api_datapath_h__ */ 407