1 /* 2 * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /** 21 * DOC: wlan_vdev_mgr_tgt_if_tx_defs.h 22 * 23 * This file provides definitions to data structures required for vdev Tx ops 24 */ 25 26 #ifndef __WLAN_VDEV_MGR_TX_OPS_DEFS_H__ 27 #define __WLAN_VDEV_MGR_TX_OPS_DEFS_H__ 28 29 #include <qdf_nbuf.h> 30 #ifdef WLAN_FEATURE_11BE_MLO 31 #include <wlan_mlo_mgr_public_structs.h> 32 #endif 33 #include <wlan_mlme_dbg.h> 34 35 /* slot time long */ 36 #define WLAN_MLME_VDEV_SLOT_TIME_LONG 0x1 37 /* slot time short */ 38 #define WLAN_MLME_VDEV_SLOT_TIME_SHORT 0x2 39 40 #define WLAN_MU_SNIF_MAX_AIDS 4 41 42 /** 43 * enum mlme_dev_setparam - type of set params pdev/vdev 44 * @MLME_PDEV_SETPARAM: pdev param 45 * @MLME_VDEV_SETPARAM: vdev param 46 */ 47 enum mlme_dev_setparam { 48 MLME_PDEV_SETPARAM = 0, 49 MLME_VDEV_SETPARAM, 50 }; 51 52 /** 53 * enum mlme_bcn_tx_rate_code - beacon tx rate code 54 * @MLME_BCN_TX_RATE_CODE_1_M: 55 * @MLME_BCN_TX_RATE_CODE_2_M: 56 * @MLME_BCN_TX_RATE_CODE_5_5_M: 57 * @MLME_BCN_TX_RATE_CODE_6_M: 58 * @MLME_BCN_TX_RATE_CODE_9_M: 59 * @MLME_BCN_TX_RATE_CODE_11M: 60 * @MLME_BCN_TX_RATE_CODE_12_M: 61 * @MLME_BCN_TX_RATE_CODE_18_M: 62 * @MLME_BCN_TX_RATE_CODE_24_M: 63 * @MLME_BCN_TX_RATE_CODE_36_M: 64 * @MLME_BCN_TX_RATE_CODE_48_M: 65 * @MLME_BCN_TX_RATE_CODE_54_M: 66 */ 67 enum mlme_bcn_tx_rate_code { 68 MLME_BCN_TX_RATE_CODE_1_M = 0x43, 69 MLME_BCN_TX_RATE_CODE_2_M = 0x42, 70 MLME_BCN_TX_RATE_CODE_5_5_M = 0x41, 71 MLME_BCN_TX_RATE_CODE_6_M = 0x03, 72 MLME_BCN_TX_RATE_CODE_9_M = 0x07, 73 MLME_BCN_TX_RATE_CODE_11M = 0x40, 74 MLME_BCN_TX_RATE_CODE_12_M = 0x02, 75 MLME_BCN_TX_RATE_CODE_18_M = 0x06, 76 MLME_BCN_TX_RATE_CODE_24_M = 0x01, 77 MLME_BCN_TX_RATE_CODE_36_M = 0x05, 78 MLME_BCN_TX_RATE_CODE_48_M = 0x00, 79 MLME_BCN_TX_RATE_CODE_54_M = 0x04, 80 }; 81 82 /** 83 * enum wlan_mlme_host_sta_ps_param_uapsd - STA UPASD params 84 * @WLAN_MLME_HOST_STA_PS_UAPSD_AC0_DELIVERY_EN: 85 * @WLAN_MLME_HOST_STA_PS_UAPSD_AC0_TRIGGER_EN: 86 * @WLAN_MLME_HOST_STA_PS_UAPSD_AC1_DELIVERY_EN: 87 * @WLAN_MLME_HOST_STA_PS_UAPSD_AC1_TRIGGER_EN: 88 * @WLAN_MLME_HOST_STA_PS_UAPSD_AC2_DELIVERY_EN: 89 * @WLAN_MLME_HOST_STA_PS_UAPSD_AC2_TRIGGER_EN: 90 * @WLAN_MLME_HOST_STA_PS_UAPSD_AC3_DELIVERY_EN: 91 * @WLAN_MLME_HOST_STA_PS_UAPSD_AC3_TRIGGER_EN: 92 */ 93 enum wlan_mlme_host_sta_ps_param_uapsd { 94 WLAN_MLME_HOST_STA_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0), 95 WLAN_MLME_HOST_STA_PS_UAPSD_AC0_TRIGGER_EN = (1 << 1), 96 WLAN_MLME_HOST_STA_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2), 97 WLAN_MLME_HOST_STA_PS_UAPSD_AC1_TRIGGER_EN = (1 << 3), 98 WLAN_MLME_HOST_STA_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4), 99 WLAN_MLME_HOST_STA_PS_UAPSD_AC2_TRIGGER_EN = (1 << 5), 100 WLAN_MLME_HOST_STA_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6), 101 WLAN_MLME_HOST_STA_PS_UAPSD_AC3_TRIGGER_EN = (1 << 7), 102 }; 103 104 /** 105 * enum wlan_mlme_host_vdev_start_status - vdev start status code 106 * @WLAN_MLME_HOST_VDEV_START_OK: 107 * @WLAN_MLME_HOST_VDEV_START_CHAN_INVALID: 108 * @WLAN_MLME_HOST_VDEV_START_CHAN_BLOCKED: 109 * @WLAN_MLME_HOST_VDEV_START_CHAN_DFS_VIOLATION: 110 * @WLAN_MLME_HOST_VDEV_START_CHAN_INVALID_REGDOMAIN: 111 * @WLAN_MLME_HOST_VDEV_START_CHAN_INVALID_BAND: 112 * @WLAN_MLME_HOST_VDEV_START_TIMEOUT: 113 * @WLAN_MLME_HOST_VDEV_START_MAX_REASON: Max enumeration 114 */ 115 enum wlan_mlme_host_vdev_start_status { 116 WLAN_MLME_HOST_VDEV_START_OK = 0, 117 WLAN_MLME_HOST_VDEV_START_CHAN_INVALID, 118 WLAN_MLME_HOST_VDEV_START_CHAN_BLOCKED, 119 WLAN_MLME_HOST_VDEV_START_CHAN_DFS_VIOLATION, 120 WLAN_MLME_HOST_VDEV_START_CHAN_INVALID_REGDOMAIN, 121 WLAN_MLME_HOST_VDEV_START_CHAN_INVALID_BAND, 122 WLAN_MLME_HOST_VDEV_START_TIMEOUT, 123 /* Add new response status code from here */ 124 WLAN_MLME_HOST_VDEV_START_MAX_REASON, 125 }; 126 127 /** 128 * string_from_start_rsp_status() - Convert start response status to string 129 * @start_rsp: start response status 130 * 131 * Please note to add new string in the array at index equal to 132 * its enum value in wlan_mlme_host_vdev_start_status. 133 */ 134 static inline char *string_from_start_rsp_status( 135 enum wlan_mlme_host_vdev_start_status start_rsp) 136 { 137 static const char *strings[] = { "START_OK", 138 "CHAN_INVALID", 139 "CHAN_BLOCKED", 140 "CHAN_DFS_VIOLATION", 141 "CHAN_INVALID_REGDOMAIN", 142 "CHAN_INVALID_BAND", 143 "START_RESPONSE_TIMEOUT", 144 "START_RESPONSE_UNKNOWN"}; 145 146 if (start_rsp >= WLAN_MLME_HOST_VDEV_START_MAX_REASON) 147 start_rsp = WLAN_MLME_HOST_VDEV_START_MAX_REASON; 148 149 return (char *)strings[start_rsp]; 150 } 151 152 /** 153 * enum wlan_mlme_host_start_event_param - start/restart resp event 154 * @WLAN_MLME_HOST_VDEV_START_RESP_EVENT: Start response 155 * @WLAN_MLME_HOST_VDEV_RESTART_RESP_EVENT: Restart response 156 */ 157 enum wlan_mlme_host_start_event_param { 158 WLAN_MLME_HOST_VDEV_START_RESP_EVENT = 0, 159 WLAN_MLME_HOST_VDEV_RESTART_RESP_EVENT, 160 }; 161 162 /** 163 * enum wlan_mlme_custom_aggr_type: custom aggregate type 164 * @WLAN_MLME_CUSTOM_AGGR_TYPE_AMPDU: A-MPDU aggregation 165 * @WLAN_MLME_CUSTOM_AGGR_TYPE_AMSDU: A-MSDU aggregation 166 * @WLAN_MLME_CUSTOM_AGGR_TYPE_MAX: Max type 167 */ 168 enum wlan_mlme_custom_aggr_type { 169 WLAN_MLME_CUSTOM_AGGR_TYPE_AMPDU = 0, 170 WLAN_MLME_CUSTOM_AGGR_TYPE_AMSDU = 1, 171 WLAN_MLME_CUSTOM_AGGR_TYPE_MAX, 172 }; 173 174 /** 175 * struct sta_ps_params - sta ps cmd parameter 176 * @vdev_id: vdev id 177 * @param_id: sta ps parameter 178 * @value: sta ps parameter value 179 */ 180 struct sta_ps_params { 181 uint32_t vdev_id; 182 uint32_t param_id; 183 uint32_t value; 184 }; 185 186 /** 187 * struct rnr_bss_tbtt_info_param: Reported Vdev info 188 * @bss_mac: Mac address 189 * @beacon_intval: Beacon interval of reported AP 190 * @opclass: Channel Opclass 191 * @chan_idx: Channel number 192 * @next_qtime_tbtt_high: Tbtt higher 32bit 193 * @next_qtime_tbtt_low: Tbtt lower 32bit 194 */ 195 struct rnr_bss_tbtt_info_param { 196 uint8_t bss_mac[QDF_MAC_ADDR_SIZE]; 197 uint32_t beacon_intval; 198 uint32_t opclass; 199 uint32_t chan_idx; 200 uint32_t next_qtime_tbtt_high; 201 uint32_t next_qtime_tbtt_low; 202 }; 203 204 /** 205 * struct rnr_tbtt_multisoc_sync_param - Params to 206 * sync tbtt with non self SoCs timers 207 * @pdev_id: Host pdev_id 208 * @rnr_vap_count: Count of Vap to be included in WMI cmd 209 * @cmd_type: Set/Get tbtt sync info 210 * @rnr_bss_tbtt: Reported AP Vap info 211 */ 212 struct rnr_tbtt_multisoc_sync_param { 213 uint32_t pdev_id; 214 uint8_t rnr_vap_count; 215 uint8_t cmd_type; 216 struct rnr_bss_tbtt_info_param *rnr_bss_tbtt; 217 }; 218 219 /** 220 * struct tbttoffset_params - Tbttoffset event params 221 * @vdev_id: Virtual AP device identifier 222 * @tbttoffset : Tbttoffset for the virtual AP device 223 * @vdev_tbtt_qtime_lo: Tbtt qtime low value 224 * @vdev_tbtt_qtime_hi: Tbtt qtime high value 225 */ 226 struct tbttoffset_params { 227 uint32_t vdev_id; 228 uint32_t tbttoffset; 229 uint32_t vdev_tbtt_qtime_lo; 230 uint32_t vdev_tbtt_qtime_hi; 231 }; 232 233 /* Follow bitmap for sending the CSA switch count event */ 234 #define WLAN_CSA_EVENT_BMAP_VALID_MASK 0X80000000 235 /* Send only when the switch count becomes zero, added for backward 236 * compatibility same can also be achieved by setting bitmap to 0X80000001. 237 */ 238 #define WLAN_CSA_EVENT_BMAP_SWITCH_COUNT_ZERO 0 239 /* Send CSA switch count event for every update to switch count */ 240 #define WLAN_CSA_EVENT_BMAP_ALL 0XFFFFFFFF 241 242 #ifdef WLAN_FEATURE_11BE_MLO 243 /** 244 * struct ml_bcn_partner_info - Partner link beacon information 245 * @vdev_id: Vdev id 246 * @hw_link_id: Unique hw link id across SoCs 247 * @beacon_interval: Beacon interval 248 * @csa_switch_count_offset: CSA switch count offset in beacon frame 249 * @ext_csa_switch_count_offset: ECSA switch count offset in beacon frame 250 * @per_sta_profile_offset: Pointer to per-STA profile info 251 * @quiet_ie_offset: Quiet IE offset 252 * @is_other_ie_present: Set true if other IEs are present in per-STA profile. 253 * If the flag is set to false, FW will remove per-STA 254 * profile IE when Quiet count reaches to 0. 255 */ 256 struct ml_bcn_partner_info { 257 uint32_t vdev_id; 258 uint32_t hw_link_id; 259 uint32_t beacon_interval; 260 uint32_t csa_switch_count_offset; 261 uint32_t ext_csa_switch_count_offset; 262 uint32_t per_sta_profile_offset; 263 uint32_t quiet_ie_offset; 264 uint32_t is_other_ie_present; 265 }; 266 267 /** 268 * struct mlo_bcn_templ_partner_links - ML partner links 269 * @num_links: Number of links 270 * @partner_info: Partner link info 271 */ 272 struct mlo_bcn_templ_partner_links { 273 uint8_t num_links; 274 struct ml_bcn_partner_info partner_info[WLAN_UMAC_MLO_MAX_VDEVS]; 275 }; 276 277 /** 278 * struct mlo_bcn_tmpl_ml_info - Impacted link critical update information 279 * @hw_link_id: Unique hw link id across SoCs 280 * CU vdev map for the Critical update category-1 (Inclusion of CU IES) 281 * @cu_vdev_map_cat1_lo: bits 31:0 to represent vdev ids 0 to 31 282 * @cu_vdev_map_cat1_hi: bits 63:32 to represent vdev ids 32 to 63 283 * CU vdev map for the Critical update category-2 (modification of CU IES) 284 * @cu_vdev_map_cat2_lo: bits 31:0 to represent vdev ids 0 to 31 285 * @cu_vdev_map_cat2_hi: bits 63:32 to represent vdev ids 32 to 63 286 */ 287 struct mlo_bcn_tmpl_ml_info { 288 uint32_t hw_link_id; 289 uint32_t cu_vdev_map_cat1_lo; 290 uint32_t cu_vdev_map_cat1_hi; 291 uint32_t cu_vdev_map_cat2_lo; 292 uint32_t cu_vdev_map_cat2_hi; 293 }; 294 #endif 295 296 /** 297 * struct beacon_tmpl_params - beacon template cmd parameter 298 * @vdev_id: vdev id 299 * @tim_ie_offset: tim ie offset 300 * @mbssid_ie_offset: mbssid ie offset 301 * @tmpl_len: beacon template length 302 * @tmpl_len_aligned: beacon template alignment 303 * @csa_switch_count_offset: CSA switch count offset in beacon frame 304 * @ext_csa_switch_count_offset: ECSA switch count offset in beacon frame 305 * @esp_ie_offset: ESP IE offset in beacon frame 306 * @mu_edca_ie_offset: Mu EDCA IE offset in beacon frame 307 * @ema_params: The 4 octets in this field respectively indicate 308 * ema_beacon_profile_periodicity, ema_beacon_tmpl_idx, 309 * ema_first_tmpl and ema_last_tmpl in the order of low 310 * to high 311 * @csa_event_bitmap: Specify when to send the CSA switch count status from FW 312 * to host. Example: if CSA switch count event is needed to be sent when the 313 * switch count is 0, 1, 4, and 5, set the bitmap to (0X80000033) 314 * @enable_bigtk: enable bigtk or not 315 * @frm: beacon template parameter 316 * @mlo_partner: Partner link information 317 * @cu_ml_info: Impacted link critical update information 318 */ 319 struct beacon_tmpl_params { 320 uint8_t vdev_id; 321 uint32_t tim_ie_offset; 322 uint32_t mbssid_ie_offset; 323 uint32_t tmpl_len; 324 uint32_t tmpl_len_aligned; 325 uint32_t csa_switch_count_offset; 326 uint32_t ext_csa_switch_count_offset; 327 uint32_t esp_ie_offset; 328 uint32_t mu_edca_ie_offset; 329 uint32_t ema_params; 330 uint32_t csa_event_bitmap; 331 bool enable_bigtk; 332 uint8_t *frm; 333 #ifdef WLAN_FEATURE_11BE_MLO 334 struct mlo_bcn_templ_partner_links mlo_partner; 335 struct mlo_bcn_tmpl_ml_info cu_ml_info; 336 #endif 337 }; 338 339 /** 340 * struct beacon_params - beacon cmd parameter 341 * @vdev_id: vdev id 342 * @beacon_interval: Beacon interval 343 * @wbuf: beacon buffer 344 * @frame_ctrl: frame control field 345 * @bcn_txant: beacon antenna 346 * @is_dtim_count_zero: is it dtim beacon 347 * @is_bitctl_reqd: is Bit control required 348 * @is_high_latency: Is this high latency target 349 */ 350 struct beacon_params { 351 uint8_t vdev_id; 352 uint16_t beacon_interval; 353 qdf_nbuf_t wbuf; 354 uint16_t frame_ctrl; 355 uint32_t bcn_txant; 356 bool is_dtim_count_zero; 357 bool is_bitctl_reqd; 358 bool is_high_latency; 359 }; 360 361 /* struct fils_discovery_tmpl_params - FILS Discovery template cmd parameter 362 * @vdev_id: vdev ID 363 * @tmpl_len: FILS Discovery template length 364 * @tmpl_aligned: FILS Discovery template alignment 365 * @frm: FILS Discovery template parameter 366 */ 367 struct fils_discovery_tmpl_params { 368 uint8_t vdev_id; 369 uint32_t tmpl_len; 370 uint32_t tmpl_len_aligned; 371 uint8_t *frm; 372 }; 373 374 /** 375 * struct mlme_channel_param - Channel parameters with all 376 * info required by target. 377 * @chan_id: channel id 378 * @pwr: channel power 379 * @mhz: channel frequency 380 * @half_rate: is half rate 381 * @quarter_rate: is quarter rate 382 * @dfs_set: is dfs channel 383 * @dfs_set_cfreq2: is secondary freq dfs channel 384 * @is_chan_passive: is this passive channel 385 * @allow_ht: HT allowed in chan 386 * @allow_vht: VHT allowed on chan 387 * @set_agile: is agile mode 388 * @is_stadfs_en: STA DFS enabled 389 * @phy_mode: phymode (vht80 or ht40 or ...) 390 * @cfreq1: centre frequency on primary 391 * @cfreq2: centre frequency on secondary 392 * @maxpower: max power for channel 393 * @minpower: min power for channel 394 * @maxregpower: Max regulatory power 395 * @antennamax: Max antenna 396 * @reg_class_id: Regulatory class id. 397 * @puncture_bitmap: 11be static puncture bitmap 398 */ 399 struct mlme_channel_param { 400 uint8_t chan_id; 401 uint8_t pwr; 402 uint32_t mhz; 403 uint32_t half_rate:1, 404 quarter_rate:1, 405 dfs_set:1, 406 dfs_set_cfreq2:1, 407 is_chan_passive:1, 408 allow_ht:1, 409 allow_vht:1, 410 set_agile:1, 411 is_stadfs_en:1; 412 enum wlan_phymode phy_mode; 413 uint32_t cfreq1; 414 uint32_t cfreq2; 415 int8_t maxpower; 416 int8_t minpower; 417 int8_t maxregpower; 418 uint8_t antennamax; 419 uint8_t reg_class_id; 420 #ifdef WLAN_FEATURE_11BE 421 uint16_t puncture_bitmap; 422 #endif 423 }; 424 425 /** 426 * struct vdev_mlme_mvr_param - Multiple vdev restart params 427 * @phymode: phymode information 428 * @preferred_tx_streams: preferred tx streams for VAP 429 * @preferred_rx_streams: preferred rx streams for VAP 430 */ 431 struct vdev_mlme_mvr_param { 432 uint32_t phymode; 433 uint32_t preferred_tx_streams; 434 uint32_t preferred_rx_streams; 435 }; 436 437 /** 438 * struct multiple_vdev_restart_params - Multiple vdev restart cmd parameter 439 * @pdev_id: Pdev identifier 440 * @requestor_id: Unique id identifying the module 441 * @disable_hw_ack: Flag to indicate disabling HW ACK during CAC 442 * @cac_duration_ms: CAC duration on the given channel 443 * @num_vdevs: No. of vdevs that need to be restarted 444 * @ch_param: Pointer to channel_param 445 * @vdev_ids: Pointer to array of vdev_ids 446 * @mvr_param: Pointer to array of multi vdev restart param 447 * @max_vdevs: Maximum vdev count of this pdev 448 * @mvr_bmap_enabled: flag indicating mvr-bitmap support 449 */ 450 struct multiple_vdev_restart_params { 451 uint32_t pdev_id; 452 uint32_t requestor_id; 453 uint32_t disable_hw_ack; 454 uint32_t cac_duration_ms; 455 uint32_t num_vdevs; 456 struct mlme_channel_param ch_param; 457 uint32_t *vdev_ids; 458 struct vdev_mlme_mvr_param *mvr_param; 459 uint32_t max_vdevs; 460 uint8_t mvr_bmap_enabled; 461 }; 462 463 /** 464 * struct multiple_vdev_set_param - Multiple vdev set param command parameter 465 * @pdev_id: Pdev identifier 466 * @param_id: parameter id 467 * @param_value: parameter value 468 * @num_vdevs: number of vdevs 469 * @vdev_ids: Pointer to array of vdev_ids 470 */ 471 struct multiple_vdev_set_param { 472 uint32_t pdev_id; 473 uint32_t param_id; 474 uint32_t param_value; 475 uint32_t num_vdevs; 476 uint32_t vdev_ids[WLAN_UMAC_PDEV_MAX_VDEVS]; 477 }; 478 479 /** 480 * struct peer_flush_params - peer flush cmd parameter 481 * @peer_tid_bitmap: peer tid bitmap 482 * @vdev_id: vdev id 483 * @peer_mac: peer mac address 484 */ 485 struct peer_flush_params { 486 uint32_t peer_tid_bitmap; 487 uint8_t vdev_id; 488 uint8_t peer_mac[QDF_MAC_ADDR_SIZE]; 489 }; 490 491 /** 492 * struct peer_delete_cmd_params - peer delete cmd parameter 493 * @vdev_id: vdev id 494 * @hw_link_id_bitmap: logical link id bitmap for peers 495 * not getting created 496 */ 497 struct peer_delete_cmd_params { 498 uint8_t vdev_id; 499 uint32_t hw_link_id_bitmap; 500 }; 501 502 /* Default FILS DISCOVERY/probe response sent in period of 20TU */ 503 #define DEFAULT_FILS_DISCOVERY_PERIOD 20 504 #define DEFAULT_PROBE_RESP_PERIOD 20 505 506 /** 507 * struct config_fils_params - FILS config params 508 * @vdev_id: vdev id 509 * @fd_period: 0 - Disabled, non-zero - Period in ms (mili seconds) 510 * @send_prb_rsp_frame: send broadcast prb resp frame 511 */ 512 struct config_fils_params { 513 uint8_t vdev_id; 514 uint32_t fd_period; 515 uint32_t send_prb_rsp_frame: 1; 516 }; 517 518 /** 519 * struct config_ratemask_params - ratemask config parameters 520 * @vdev_id: vdev id 521 * @type: Type 522 * @lower32: Lower 32 bits in the 1st 64-bit value 523 * @higher32: Higher 32 bits in the 1st 64-bit value 524 * @lower32_2: Lower 32 bits in the 2nd 64-bit value 525 * @higher32_2: Higher 32 bits in the 2nd 64-bit value 526 */ 527 struct config_ratemask_params { 528 uint8_t vdev_id; 529 uint8_t type; 530 uint32_t lower32; 531 uint32_t higher32; 532 uint32_t lower32_2; 533 uint32_t higher32_2; 534 }; 535 536 /** 537 * struct set_custom_aggr_size_params - custom aggr size params 538 * @vdev_id : vdev id 539 * @tx_aggr_size : TX aggr size 540 * @rx_aggr_size : RX aggr size 541 * @ac: 542 * @aggr_type: 543 * @tx_aggr_size_disable: 544 * @rx_aggr_size_disable: 545 * @tx_ac_enable: 546 * @aggr_ba_enable: 547 * @reserved: spare bits 548 */ 549 struct set_custom_aggr_size_params { 550 uint32_t vdev_id; 551 uint32_t tx_aggr_size; 552 uint32_t rx_aggr_size; 553 uint32_t ac:2, 554 aggr_type:1, 555 tx_aggr_size_disable:1, 556 rx_aggr_size_disable:1, 557 tx_ac_enable:1, 558 aggr_ba_enable:1, 559 reserved:25; 560 }; 561 562 /** 563 * struct sifs_trigger_param - sifs_trigger cmd parameter 564 * @vdev_id: vdev id 565 * @param_value: parameter value 566 */ 567 struct sifs_trigger_param { 568 uint32_t vdev_id; 569 uint32_t param_value; 570 }; 571 572 /** 573 * struct set_neighbour_rx_params - Neighbour RX params 574 * @vdev_id: vdev id 575 * @idx: index of param 576 * @action: action 577 * @type: Type of param 578 */ 579 struct set_neighbour_rx_params { 580 uint8_t vdev_id; 581 uint32_t idx; 582 uint32_t action; 583 uint32_t type; 584 }; 585 586 /** 587 * struct set_tx_peer_filter - Set tx peer filter 588 * @vdev_id: vdev id 589 * @idx: index of param 590 * @action: action 591 */ 592 struct set_tx_peer_filter { 593 uint8_t vdev_id; 594 uint32_t idx; 595 uint32_t action; 596 }; 597 598 /** 599 * struct vdev_scan_nac_rssi_params - NAC_RSSI cmd parameter 600 * @vdev_id: vdev id 601 * @bssid_addr: BSSID address 602 * @client_addr: client address 603 * @chan_num: channel number 604 * @action:NAC_RSSI action, 605 */ 606 struct vdev_scan_nac_rssi_params { 607 uint32_t vdev_id; 608 uint8_t bssid_addr[QDF_MAC_ADDR_SIZE]; 609 uint8_t client_addr[QDF_MAC_ADDR_SIZE]; 610 uint32_t chan_num; 611 uint32_t action; /* WMI_FILTER_NAC_RSSI_ACTION */ 612 }; 613 614 #ifdef WLAN_FEATURE_11BE_MLO 615 /** 616 * struct mlo_vdev_start_flags - MLO start flags 617 * @mlo_enabled: indicate is MLO enabled 618 * @mlo_assoc_link: indicate is the link used to initialize 619 * the association of mlo connection 620 * @mlo_mcast_vdev: MLO cast vdev 621 * @emlsr_support: indicate non AP MLD STA supports eMLSR mode 622 * @mlo_link_add: Dynamic link addition 623 * @rsvd: reserved bits 624 */ 625 struct mlo_vdev_start_flags { 626 uint32_t mlo_enabled:1, 627 mlo_assoc_link:1, 628 mlo_mcast_vdev:1, 629 emlsr_support:1, 630 mlo_link_add:1, 631 rsvd:27; 632 }; 633 634 /** 635 * struct ml_vdev_start_partner_info - partner link info 636 * @vdev_id: vdev id 637 * @hw_mld_link_id: unique hw link id across SoCs 638 * @mac_addr: Partner mac address 639 */ 640 struct ml_vdev_start_partner_info { 641 uint32_t vdev_id; 642 uint32_t hw_mld_link_id; 643 uint8_t mac_addr[QDF_MAC_ADDR_SIZE]; 644 }; 645 646 /** 647 * struct mlo_vdev_start_partner_links - ML partner links 648 * @num_links: Number of links 649 * @partner_info: Partner link info 650 */ 651 struct mlo_vdev_start_partner_links { 652 uint8_t num_links; 653 struct ml_vdev_start_partner_info partner_info[WLAN_UMAC_MLO_MAX_VDEVS]; 654 }; 655 #endif 656 /** 657 * struct vdev_start_params - vdev start cmd parameter 658 * @vdev_id: vdev id 659 * @beacon_interval: beacon interval 660 * @dtim_period: dtim period 661 * @is_restart: flag to check if it is vdev 662 * @disable_hw_ack: to update disable hw ack flag 663 * @hidden_ssid: hidden ssid 664 * @pmf_enabled: pmf enabled 665 * @ssid: ssid MAC 666 * @num_noa_descriptors: number of noa descriptors 667 * @preferred_tx_streams: preferred tx streams 668 * @preferred_rx_streams: preferred rx streams 669 * @cac_duration_ms: cac duration in milliseconds 670 * @regdomain: Regulatory domain 671 * @he_ops: HE ops 672 * @eht_ops: EHT ops 673 * @channel: Channel params required by target. 674 * @bcn_tx_rate_code: Beacon tx rate code. 675 * @ldpc_rx_enabled: Enable/Disable LDPC RX for this vdev 676 * @mbssid_flags: MBSSID flags to FW 677 * @vdevid_trans: Tx VDEV ID 678 * @mlo_flags: Flags for multi-link operation 679 * @mlo_partner: Partner links for multi-link operation 680 * @mbssid_multi_group_flag: Flag to identify multi group mbssid support 681 * @mbssid_multi_group_id: Group id of current vdev 682 */ 683 struct vdev_start_params { 684 uint8_t vdev_id; 685 uint32_t beacon_interval; 686 uint32_t dtim_period; 687 bool is_restart; 688 uint32_t disable_hw_ack; 689 bool hidden_ssid; 690 bool pmf_enabled; 691 struct wlan_ssid ssid; 692 uint32_t num_noa_descriptors; 693 uint32_t preferred_rx_streams; 694 uint32_t preferred_tx_streams; 695 uint32_t cac_duration_ms; 696 uint32_t regdomain; 697 uint32_t he_ops; 698 #ifdef WLAN_FEATURE_11BE 699 uint32_t eht_ops; 700 #endif 701 struct mlme_channel_param channel; 702 enum mlme_bcn_tx_rate_code bcn_tx_rate_code; 703 bool ldpc_rx_enabled; 704 uint32_t mbssid_flags; 705 uint8_t vdevid_trans; 706 #ifdef WLAN_FEATURE_11BE_MLO 707 struct mlo_vdev_start_flags mlo_flags; 708 struct mlo_vdev_start_partner_links mlo_partner; 709 #endif 710 uint8_t mbssid_multi_group_flag; 711 uint32_t mbssid_multi_group_id; 712 }; 713 714 /** 715 * struct vdev_set_params - vdev set cmd parameter 716 * @vdev_id: vdev id 717 * @param_id: parameter id 718 * @param_value: parameter value 719 */ 720 struct vdev_set_params { 721 uint32_t vdev_id; 722 uint32_t param_id; 723 uint32_t param_value; 724 }; 725 726 /** 727 * struct dev_set_param - vdev/pdev set param info 728 * @param_id: parameter id 729 * @param_value: parameter value 730 */ 731 struct dev_set_param { 732 uint32_t param_id; 733 uint32_t param_value; 734 }; 735 736 /** 737 * struct set_multiple_pdev_vdev_param 738 * @param_type: enum of type mlme_dev_setparam 739 * @is_host_pdev_id: to indicate @dev_id holds host pdev id in case of pdev set 740 * param, need conversion to target pdev id before sending to fw. 741 * @dev_id: unique dev_id identifying the VDEV/PDEV 742 * @n_params: Number of parambers to set 743 * @params: pointer to dev_set_param structure 744 */ 745 struct set_multiple_pdev_vdev_param { 746 enum mlme_dev_setparam param_type; 747 uint8_t is_host_pdev_id; 748 uint8_t dev_id; 749 uint8_t n_params; 750 struct dev_set_param *params; 751 }; 752 753 /** 754 * struct set_rx_mac_filter - Set rx mac filter command parameters 755 * @vdev_id: Vdev id 756 * @mac: mac addr 757 * @freq: frequency 758 * @set: set or clear 759 */ 760 struct set_rx_mac_filter { 761 uint32_t vdev_id; 762 uint8_t mac[QDF_MAC_ADDR_SIZE]; 763 uint32_t freq; 764 bool set; 765 }; 766 767 static inline 768 QDF_STATUS mlme_check_index_setparam(struct dev_set_param *param, 769 uint32_t paramid, uint32_t paramvalue, 770 uint8_t index, uint8_t n_params) 771 { 772 if (index >= n_params) { 773 mlme_err("Index:%d OOB to fill param", index); 774 return QDF_STATUS_E_FAILURE; 775 } 776 param[index].param_id = paramid; 777 param[index].param_value = paramvalue; 778 return QDF_STATUS_SUCCESS; 779 } 780 781 /** 782 * struct vdev_set_mu_snif_param - vdev set mu sniffer cmd parameter 783 * @vdev_id: vdev id 784 * @mode: mu snif mode 785 * @num_user: max number of user 786 * @num_aid: number of set sta aid 787 * @aid: sta aids 788 */ 789 790 struct vdev_set_mu_snif_param { 791 uint32_t vdev_id; 792 uint32_t mode; 793 uint32_t num_user; 794 uint32_t num_aid; 795 uint32_t aid[WLAN_MU_SNIF_MAX_AIDS]; 796 }; 797 798 /** 799 * struct vdev_create_params - vdev create cmd parameter 800 * @vdev_id: interface id 801 * @vdev_stats_id_valid: flag to indicate valid stats id 802 * @vdev_stats_id: stats_id for stats collection 803 * @type: interface type 804 * @subtype: interface subtype 805 * @nss_2g: NSS for 2G 806 * @nss_5g: NSS for 5G 807 * @pdev_id: pdev id on pdev for this vdev 808 * @mbssid_flags: MBSS IE flags indicating vdev type 809 * @vdevid_trans: id of transmitting vdev for MBSS IE 810 * @special_vdev_mode: indicates special vdev mode 811 * @mlo_mac: Multilink Operation MAC address 812 */ 813 struct vdev_create_params { 814 uint8_t vdev_id; 815 bool vdev_stats_id_valid; 816 uint8_t vdev_stats_id; 817 uint32_t type; 818 uint32_t subtype; 819 uint8_t nss_2g; 820 uint8_t nss_5g; 821 uint32_t pdev_id; 822 uint32_t mbssid_flags; 823 uint8_t vdevid_trans; 824 bool special_vdev_mode; 825 #ifdef WLAN_FEATURE_11BE_MLO 826 uint8_t mlo_mac[QDF_MAC_ADDR_SIZE]; 827 #endif 828 }; 829 830 /** 831 * struct vdev_delete_params - vdev delete cmd parameter 832 * @vdev_id: vdev id 833 */ 834 struct vdev_delete_params { 835 uint8_t vdev_id; 836 }; 837 838 /** 839 * struct vdev_stop_params - vdev stop cmd parameter 840 * @vdev_id: vdev id 841 */ 842 struct vdev_stop_params { 843 uint8_t vdev_id; 844 }; 845 846 /** 847 * struct vdev_up_params - vdev up cmd parameter 848 * @vdev_id: vdev id 849 * @assoc_id: association id 850 * @profile_idx: profile index of the connected non-trans ap (mbssid case). 851 * 0 means invalid. 852 * @profile_num: the total profile numbers of non-trans aps (mbssid case). 853 * 0 means non-MBSS AP. 854 * @trans_bssid: bssid of transmitted AP (MBSS IE case) 855 */ 856 struct vdev_up_params { 857 uint8_t vdev_id; 858 uint16_t assoc_id; 859 uint32_t profile_idx; 860 uint32_t profile_num; 861 uint8_t trans_bssid[QDF_MAC_ADDR_SIZE]; 862 }; 863 864 /** 865 * struct vdev_down_params - vdev down cmd parameter 866 * @vdev_id: vdev id 867 */ 868 struct vdev_down_params { 869 uint8_t vdev_id; 870 }; 871 872 /** 873 * struct peer_delete_all_params - peer delete all request parameter 874 * @vdev_id: vdev id 875 * @peer_type_bitmap: Bitmap of type with bits corresponding to value from 876 * enum wlan_peer_type 877 */ 878 struct peer_delete_all_params { 879 uint8_t vdev_id; 880 uint32_t peer_type_bitmap; 881 }; 882 883 #define AC_MAX 4 884 #define WMI_MUEDCA_PARAM_MASK 0xff 885 /** 886 * struct muedca_params - MU-EDCA parameters 887 * @pdev_id: pdev id 888 * @muedca_ecwmin: CWmin in exponential form 889 * @muedca_ecwmax: CWmax in exponential form 890 * @muedca_aifsn: AIFSN parameter 891 * @muedca_acm: ACM parameter 892 * @muedca_timer: MU EDCA timer value 893 */ 894 struct muedca_params { 895 uint32_t pdev_id; 896 uint8_t muedca_ecwmin[AC_MAX]; /* CWmin in exponential form */ 897 uint8_t muedca_ecwmax[AC_MAX]; /* CWmax in exponential form */ 898 uint8_t muedca_aifsn[AC_MAX]; /* AIFSN parameter */ 899 uint8_t muedca_acm[AC_MAX]; /* ACM parameter */ 900 uint8_t muedca_timer[AC_MAX]; /* MU EDCA timer value */ 901 }; 902 903 /* Total 10 BSSIDs can be packed in a single measurement request buffer */ 904 #define RTT_MAX_BSSIDS_TO_SCAN 10 905 906 /** 907 * struct rtt_bssid_info - Store the parsed macaddr and BW from the measurement 908 * request buffer. 909 * @macaddr: Destination macaddr to scan 910 * @bw: packet bandwidth 911 */ 912 struct rtt_bssid_info { 913 uint8_t macaddr[QDF_MAC_ADDR_SIZE]; 914 uint8_t bw; 915 }; 916 917 /** 918 * struct rtt_channel_info - Store the parsed channel info from LOWI measurement 919 * request buffer. 920 * @freq: Channel frequency 921 * @cfreq1: Center frequency1 922 * @cfreq2: Center frequency2 923 * @phymode: Phymode 924 * @num_bssids: Number of bssids present in the measurement request buffer 925 * @bssid_info: Array to store BW and macaddr present in the measurement request 926 * buffer. 927 */ 928 struct rtt_channel_info { 929 uint16_t freq; 930 uint16_t cfreq1; 931 uint16_t cfreq2; 932 uint16_t phymode; 933 uint16_t num_bssids; 934 struct rtt_bssid_info bssid_info[RTT_MAX_BSSIDS_TO_SCAN]; 935 }; 936 937 /** 938 * struct sr_prohibit_param - SR prohibit command parameter 939 * 940 * @vdev_id: vdev id 941 * @sr_he_siga_val15_allowed: HE_SIG_A_VAL15_ALLOWED is enabled/disabled 942 */ 943 struct sr_prohibit_param { 944 uint8_t vdev_id; 945 bool sr_he_siga_val15_allowed; 946 }; 947 #endif /* __WLAN_VDEV_MGR_TX_OPS_DEFS_H__ */ 948