1 /* 2 * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022-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 * This file sir_mac_prot_def.h contains the MAC/PHY protocol 22 * definitions used across various projects. 23 */ 24 25 #ifndef __MAC_PROT_DEFS_H 26 #define __MAC_PROT_DEFS_H 27 28 #include <linux/if_ether.h> 29 30 #include "cds_api.h" 31 #include "sir_types.h" 32 #include "wni_cfg.h" 33 #include <lim_fils_defs.h> 34 35 /* /Capability information related */ 36 #define CAPABILITY_INFO_DELAYED_BA_BIT 14 37 #define CAPABILITY_INFO_IMMEDIATE_BA_BIT 15 38 39 /* / 11h MAC defaults */ 40 #define SIR_11A_CHANNEL_BEGIN 34 41 #define SIR_11A_CHANNEL_END 165 42 #define SIR_11B_CHANNEL_BEGIN 1 43 #define SIR_11B_CHANNEL_END 14 44 #define SIR_11A_FREQUENCY_OFFSET 4 45 #define SIR_11B_FREQUENCY_OFFSET 1 46 #define SIR_11P_CHANNEL_BEGIN 170 47 #define SIR_11P_CHANNEL_END 184 48 49 /* / Current version of 802.11 */ 50 #define SIR_MAC_PROTOCOL_VERSION 0 51 52 /* Frame Type definitions */ 53 54 #define SIR_MAC_MGMT_FRAME 0x0 55 #define SIR_MAC_CTRL_FRAME 0x1 56 #define SIR_MAC_DATA_FRAME 0x2 57 58 /* Data frame subtype definitions */ 59 #define SIR_MAC_DATA_DATA 0 60 #define SIR_MAC_DATA_DATA_ACK 1 61 #define SIR_MAC_DATA_DATA_POLL 2 62 #define SIR_MAC_DATA_DATA_ACK_POLL 3 63 #define SIR_MAC_DATA_NULL 4 64 #define SIR_MAC_DATA_NULL_ACK 5 65 #define SIR_MAC_DATA_NULL_POLL 6 66 #define SIR_MAC_DATA_NULL_ACK_POLL 7 67 #define SIR_MAC_DATA_QOS_DATA 8 68 #define SIR_MAC_DATA_QOS_DATA_ACK 9 69 #define SIR_MAC_DATA_QOS_DATA_POLL 10 70 #define SIR_MAC_DATA_QOS_DATA_ACK_POLL 11 71 #define SIR_MAC_DATA_QOS_NULL 12 72 #define SIR_MAC_DATA_QOS_NULL_ACK 13 73 #define SIR_MAC_DATA_QOS_NULL_POLL 14 74 #define SIR_MAC_DATA_QOS_NULL_ACK_POLL 15 75 76 #define SIR_MAC_DATA_QOS_MASK 8 77 #define SIR_MAC_DATA_NULL_MASK 4 78 #define SIR_MAC_DATA_POLL_MASK 2 79 #define SIR_MAC_DATA_ACK_MASK 1 80 81 /* Management frame subtype definitions */ 82 83 #define SIR_MAC_MGMT_ASSOC_REQ 0x0 84 #define SIR_MAC_MGMT_ASSOC_RSP 0x1 85 #define SIR_MAC_MGMT_REASSOC_REQ 0x2 86 #define SIR_MAC_MGMT_REASSOC_RSP 0x3 87 #define SIR_MAC_MGMT_PROBE_REQ 0x4 88 #define SIR_MAC_MGMT_PROBE_RSP 0x5 89 #define SIR_MAC_MGMT_TIME_ADVERT 0x6 90 #define SIR_MAC_MGMT_BEACON 0x8 91 #define SIR_MAC_MGMT_ATIM 0x9 92 #define SIR_MAC_MGMT_DISASSOC 0xA 93 #define SIR_MAC_MGMT_AUTH 0xB 94 #define SIR_MAC_MGMT_DEAUTH 0xC 95 #define SIR_MAC_MGMT_ACTION 0xD 96 #define SIR_MAC_MGMT_RESERVED15 0xF 97 98 #define SIR_MAC_ACTION_TX 1 99 100 #define SIR_MAC_BA_POLICY_IMMEDIATE 1 101 #define SIR_MAC_BA_DEFAULT_BUFF_SIZE 64 102 103 #define MAX_BA_BUFF_SIZE 256 104 #define MAX_EHT_BA_BUFF_SIZE 1024 105 106 #ifdef ANI_SUPPORT_11H 107 #define SIR_MAC_BASIC_MEASUREMENT_TYPE 0 108 #define SIR_MAC_CCA_MEASUREMENT_TYPE 1 109 #define SIR_MAC_RPI_MEASUREMENT_TYPE 2 110 #endif /* ANI_SUPPORT_11H */ 111 112 /* RRM related. */ 113 /* Refer IEEE Std 802.11k-2008, Section 7.3.2.21, table 7.29 */ 114 #define SIR_MAC_RRM_CHANNEL_LOAD_TYPE 3 115 #define SIR_MAC_RRM_NOISE_HISTOGRAM_BEACON 4 116 #define SIR_MAC_RRM_BEACON_TYPE 5 117 #define SIR_MAC_RRM_FRAME_TYPE 6 118 #define SIR_MAC_RRM_STA_STATISTICS_TYPE 7 119 #define SIR_MAC_RRM_LCI_TYPE 8 120 #define SIR_MAC_RRM_TSM_TYPE 9 121 #define SIR_MAC_RRM_LOCATION_CIVIC_TYPE 11 122 #define SIR_MAC_RRM_FINE_TIME_MEAS_TYPE 16 123 124 #define SIR_MAC_VHT_OPMODE_SIZE 3 125 126 #define NUM_OF_SOUNDING_DIMENSIONS 1 /*Nss - 1, (Nss = 2 for 2x2)*/ 127 128 /* ----------------------------------------------------------------------------- */ 129 /* EID (Element ID) definitions */ 130 /* and their min/max lengths */ 131 /* ----------------------------------------------------------------------------- */ 132 133 #define SIR_MAC_TIM_EID_MIN 3 134 135 #define SIR_MAC_WPA_EID 221 136 137 #define SIR_MAC_MAX_SUPPORTED_MCS_SET 16 138 139 #define VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1 390 140 #define VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1 390 141 #define VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_2_2 780 142 #define VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_2_2 780 143 144 #define VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1_SGI80 433 145 #define VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1_SGI80 433 146 #define VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_2_2_SGI80 866 147 #define VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_2_2_SGI80 866 148 149 #define VHT_CAP_NO_160M_SUPP 0 150 #define VHT_CAP_160_SUPP 1 151 #define VHT_CAP_160_AND_80P80_SUPP 2 152 153 #define VHT_NO_EXTD_NSS_BW_SUPP 0 154 #define VHT_EXTD_NSS_80_HALF_NSS_160 1 155 #define VHT_EXTD_NSS_80_HALF_NSS_80P80 2 156 #define VHT_EXTD_NSS_80_3QUART_NSS_80P80 3 157 #define VHT_EXTD_NSS_160_HALF_NSS_80P80 1 158 #define VHT_EXTD_NSS_160_3QUART_NSS_80P80 2 159 #define VHT_EXTD_NSS_2X_NSS_160_1X_NSS_80P80 3 160 #define VHT_EXTD_NSS_2X_NSS_80_1X_NSS_80P80 3 161 162 #define VHT_MAX_NSS 8 163 164 #define VHT_MCS_1x1 0xFFFC 165 #define VHT_MCS_2x2 0xFFF3 166 167 #ifdef FEATURE_AP_MCC_CH_AVOIDANCE 168 #define SIR_MAC_QCOM_VENDOR_EID 200 169 #define SIR_MAC_QCOM_VENDOR_OUI "\x00\xA0\xC6" 170 #define SIR_MAC_QCOM_VENDOR_SIZE 3 171 #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ 172 173 #define SIR_MAC_MAX_ADD_IE_LENGTH 2048 174 175 /* / Minimum length of each IE */ 176 #define SIR_MAC_RSN_IE_MIN_LENGTH 2 177 #define SIR_MAC_WPA_IE_MIN_LENGTH 6 178 179 #ifdef FEATURE_WLAN_ESE 180 #define ESE_VERSION_4 4 181 #define ESE_VERSION_SUPPORTED ESE_VERSION_4 182 183 /* When station sends Radio Management Cap. */ 184 /* State should be normal=1 */ 185 /* Mbssid Mask should be 0 */ 186 #define RM_STATE_NORMAL 1 187 #endif 188 189 #define SIR_MAC_OUI_VERSION_1 1 190 191 /* OWE DH Parameter element https://tools.ietf.org/html/rfc8110 */ 192 #define SIR_DH_PARAMETER_ELEMENT_EXT_EID 32 193 194 #define SIR_MSCS_ELEMENT_EXT_EID 88 195 196 /* OUI and type definition for WPA IE in network byte order */ 197 #define SIR_MAC_WPA_OUI 0x01F25000 198 #define SIR_MAC_WSC_OUI "\x00\x50\xf2\x04" 199 #define SIR_MAC_WSC_OUI_SIZE 4 200 #define SIR_MAC_P2P_OUI "\x50\x6f\x9a\x09" 201 #define SIR_MAC_P2P_OUI_SIZE 4 202 #define SIR_P2P_NOA_ATTR 12 203 #define SIR_MAX_NOA_ATTR_LEN 31 204 #define SIR_P2P_IE_HEADER_LEN 6 205 206 #define SIR_MAC_CISCO_OUI "\x00\x40\x96" 207 #define SIR_MAC_CISCO_OUI_SIZE 3 208 209 #define SIR_MAC_QCN_OUI_TYPE "\x8c\xfd\xf0\x01" 210 #define SIR_MAC_QCN_OUI_TYPE_SIZE 4 211 212 /* MBO OUI definitions */ 213 #define SIR_MAC_MBO_OUI "\x50\x6f\x9a\x16" 214 #define SIR_MAC_MBO_OUI_SIZE 4 215 #define SIR_MBO_ELEM_OFFSET (2 + SIR_MAC_MBO_OUI_SIZE) 216 217 /* min size of wme oui header: oui(3) + type + subtype + version */ 218 #define SIR_MAC_OUI_WME_HDR_MIN 6 219 220 /* ----------------------------------------------------------------------------- */ 221 222 /* OFFSET definitions for fixed fields in Management frames */ 223 224 /* Beacon/Probe Response offsets */ 225 #define SIR_MAC_B_PR_CAPAB_OFFSET 10 226 #define SIR_MAC_B_PR_SSID_OFFSET 12 227 228 /* Association/Reassociation offsets */ 229 #define SIR_MAC_REASSOC_REQ_SSID_OFFSET 10 230 #define SIR_MAC_ASSOC_RSP_STATUS_CODE_OFFSET 2 231 232 /* Association Request offsets */ 233 #define SIR_MAC_ASSOC_REQ_SSID_OFFSET 4 234 235 /* / Transaction sequence number definitions (used in Authentication frames) */ 236 #define SIR_MAC_AUTH_FRAME_1 1 237 #define SIR_MAC_AUTH_FRAME_2 2 238 #define SIR_MAC_AUTH_FRAME_3 3 239 #define SIR_MAC_AUTH_FRAME_4 4 240 241 /* / Protocol defined MAX definitions */ 242 #define SIR_MAC_MAX_NUMBER_OF_RATES 12 243 #define SIR_MAC_KEY_LENGTH 13 /* WEP Maximum key length size */ 244 #define SIR_MAC_AUTH_CHALLENGE_LENGTH 253 245 #define SIR_MAC_SAP_AUTH_CHALLENGE_LENGTH 128 246 #define SIR_MAC_WEP_IV_LENGTH 4 247 #define SIR_MAC_WEP_ICV_LENGTH 4 248 #define SIR_MAC_CHALLENGE_ID_LEN 2 249 250 /* 2 bytes each for auth algo number, transaction number and status code */ 251 #define SIR_MAC_AUTH_FRAME_INFO_LEN 6 252 /* 2 bytes for ID and length + SIR_MAC_AUTH_CHALLENGE_LENGTH */ 253 #define SIR_MAC_AUTH_CHALLENGE_BODY_LEN (SIR_MAC_CHALLENGE_ID_LEN + \ 254 SIR_MAC_AUTH_CHALLENGE_LENGTH) 255 256 /* / MAX key length when ULA is used */ 257 #define SIR_MAC_MAX_KEY_LENGTH 32 258 259 /* / Macro definitions for get/set on FC fields */ 260 #define SIR_MAC_GET_PROT_VERSION(x) ((((uint16_t) x) & 0x0300) >> 8) 261 #define SIR_MAC_GET_FRAME_TYPE(x) ((((uint16_t) x) & 0x0C00) >> 8) 262 #define SIR_MAC_GET_FRAME_SUB_TYPE(x) ((((uint16_t) x) & 0xF000) >> 12) 263 #define SIR_MAC_GET_WEP_BIT_IN_FC(x) (((uint16_t) x) & 0x0040) 264 #define SIR_MAC_SET_PROT_VERSION(x) ((uint16_t) x) 265 #define SIR_MAC_SET_FRAME_TYPE(x) (((uint16_t) x) << 2) 266 #define SIR_MAC_SET_FRAME_SUB_TYPE(x) (((uint16_t) x) << 4) 267 #define SIR_MAC_SET_WEP_BIT_IN_FC(x) (((uint16_t) x) << 14) 268 269 /* / Macro definitions for get/set on capabilityInfo bits */ 270 #define SIR_MAC_GET_ESS(x) (((uint16_t) x) & 0x0001) 271 #define SIR_MAC_GET_IBSS(x) ((((uint16_t) x) & 0x0002) >> 1) 272 #define SIR_MAC_GET_CF_POLLABLE(x) ((((uint16_t) x) & 0x0004) >> 2) 273 #define SIR_MAC_GET_CF_POLL_REQ(x) ((((uint16_t) x) & 0x0008) >> 3) 274 #define SIR_MAC_GET_PRIVACY(x) ((((uint16_t) x) & 0x0010) >> 4) 275 #define SIR_MAC_GET_SHORT_PREAMBLE(x) ((((uint16_t) x) & 0x0020) >> 5) 276 #define SIR_MAC_GET_SPECTRUM_MGMT(x) ((((uint16_t) x) & 0x0100) >> 8) 277 #define SIR_MAC_GET_QOS(x) ((((uint16_t) x) & 0x0200) >> 9) 278 #define SIR_MAC_GET_SHORT_SLOT_TIME(x) ((((uint16_t) x) & 0x0400) >> 10) 279 #define SIR_MAC_GET_APSD(x) ((((uint16_t) x) & 0x0800) >> 11) 280 #define SIR_MAC_GET_RRM(x) ((((uint16_t) x) & 0x1000) >> 12) 281 #define SIR_MAC_GET_BLOCK_ACK(x) ((((uint16_t) x) & 0xc000) >> CAPABILITY_INFO_DELAYED_BA_BIT) 282 #define SIR_MAC_SET_ESS(x) (((uint16_t) x) | 0x0001) 283 #define SIR_MAC_SET_IBSS(x) (((uint16_t) x) | 0x0002) 284 #define SIR_MAC_SET_CF_POLLABLE(x) (((uint16_t) x) | 0x0004) 285 #define SIR_MAC_SET_CF_POLL_REQ(x) (((uint16_t) x) | 0x0008) 286 #define SIR_MAC_SET_PRIVACY(x) (((uint16_t) x) | 0x0010) 287 #define SIR_MAC_SET_SHORT_PREAMBLE(x) (((uint16_t) x) | 0x0020) 288 #define SIR_MAC_SET_SPECTRUM_MGMT(x) (((uint16_t) x) | 0x0100) 289 #define SIR_MAC_SET_QOS(x) (((uint16_t) x) | 0x0200) 290 #define SIR_MAC_SET_SHORT_SLOT_TIME(x) (((uint16_t) x) | 0x0400) 291 #define SIR_MAC_SET_APSD(x) (((uint16_t) x) | 0x0800) 292 #define SIR_MAC_SET_RRM(x) (((uint16_t) x) | 0x1000) 293 #define SIR_MAC_SET_GROUP_ACK(x) (((uint16_t) x) | 0x4000) 294 295 #define SIR_MAC_GET_VHT_MAX_AMPDU_EXPO(x) ((((uint32_t) x) & 0x03800000) >> 23) 296 297 /* bitname must be one of the above, eg ESS, CF_POLLABLE, etc. */ 298 #define SIR_MAC_CLEAR_CAPABILITY(u16value, bitname) \ 299 ((u16value) &= (~(SIR_MAC_SET_ ## bitname(0)))) 300 301 #define IS_WES_MODE_ENABLED(x) \ 302 ((x)->mlme_cfg->lfr.wes_mode_enabled) 303 304 #define SIR_MAC_VENDOR_AP_1_OUI "\x00\x0C\x43" 305 #define SIR_MAC_VENDOR_AP_1_OUI_LEN 3 306 307 #define SIR_MAC_VENDOR_AP_3_OUI "\x00\x03\x7F" 308 #define SIR_MAC_VENDOR_AP_3_OUI_LEN 3 309 310 #define SIR_MAC_VENDOR_AP_4_OUI "\x8C\xFD\xF0" 311 #define SIR_MAC_VENDOR_AP_4_OUI_LEN 3 312 313 #define SIR_MAC_BA_2K_JUMP_AP_VENDOR_OUI "\x00\x14\x6C" 314 #define SIR_MAC_BA_2K_JUMP_AP_VENDOR_OUI_LEN 3 315 316 #define SIR_MAC_BAD_HTC_HE_VENDOR_OUI1 "\x00\x50\xF2\x11" 317 #define SIR_MAC_BAD_HTC_HE_VENDOR_OUI2 "\x00\x50\xF2\x12" 318 #define SIR_MAC_BAD_HTC_HE_VENDOR_OUI_LEN 4 319 320 /* Maximum allowable size of a beacon,probe rsp and fils discovery frame */ 321 #define SIR_MAX_BEACON_SIZE 512 322 #define SIR_MAX_PROBE_RESP_SIZE 512 323 #define SIR_MAX_FD_TMPL_SIZE 512 324 325 326 /* / Frame control field format (2 bytes) */ 327 typedef struct sSirMacFrameCtl { 328 329 #ifndef ANI_LITTLE_BIT_ENDIAN 330 331 uint8_t subType:4; 332 uint8_t type:2; 333 uint8_t protVer:2; 334 335 uint8_t order:1; 336 uint8_t wep:1; 337 uint8_t moreData:1; 338 uint8_t powerMgmt:1; 339 uint8_t retry:1; 340 uint8_t moreFrag:1; 341 uint8_t fromDS:1; 342 uint8_t toDS:1; 343 344 #else 345 346 uint8_t protVer:2; 347 uint8_t type:2; 348 uint8_t subType:4; 349 350 uint8_t toDS:1; 351 uint8_t fromDS:1; 352 uint8_t moreFrag:1; 353 uint8_t retry:1; 354 uint8_t powerMgmt:1; 355 uint8_t moreData:1; 356 uint8_t wep:1; 357 uint8_t order:1; 358 359 #endif 360 361 } qdf_packed tSirMacFrameCtl, *tpSirMacFrameCtl; 362 363 /* / Sequence control field */ 364 typedef struct sSirMacSeqCtl { 365 366 #ifndef ANI_LITTLE_BIT_ENDIAN 367 368 uint8_t seqNumLo:4; 369 uint8_t fragNum:4; 370 371 uint8_t seqNumHi:8; 372 373 #else 374 375 uint8_t fragNum:4; 376 uint8_t seqNumLo:4; 377 uint8_t seqNumHi:8; 378 379 #endif 380 } qdf_packed tSirMacSeqCtl, *tpSirMacSeqCtl; 381 382 /* / QoS control field */ 383 typedef struct sSirMacQosCtl { 384 385 #ifndef ANI_LITTLE_BIT_ENDIAN 386 387 uint8_t rsvd:1; 388 uint8_t ackPolicy:2; 389 uint8_t esop_txopUnit:1; 390 uint8_t tid:4; 391 392 uint8_t txop:8; 393 394 #else 395 396 uint8_t tid:4; 397 uint8_t esop_txopUnit:1; 398 uint8_t ackPolicy:2; 399 uint8_t rsvd:1; 400 401 uint8_t txop:8; 402 403 #endif 404 } qdf_packed tSirMacQosCtl, *tpSirMacQosCtl; 405 406 /* / Length (in bytes) of MAC header in 3 address format */ 407 #define SIR_MAC_HDR_LEN_3A 24 408 409 typedef uint8_t tSirMacAddr[ETH_ALEN]; 410 411 /* / 3 address MAC data header format (24/26 bytes) */ 412 typedef struct sSirMacDot3Hdr { 413 tSirMacAddr da; 414 tSirMacAddr sa; 415 uint16_t length; 416 } qdf_packed tSirMacDot3Hdr, *tpSirMacDot3Hdr; 417 418 /* / 3 address MAC data header format (24/26 bytes) */ 419 typedef struct sSirMacDataHdr3a { 420 tSirMacFrameCtl fc; 421 uint8_t durationLo; 422 uint8_t durationHi; 423 tSirMacAddr addr1; 424 tSirMacAddr addr2; 425 tSirMacAddr addr3; 426 tSirMacSeqCtl seqControl; 427 tSirMacQosCtl qosControl; 428 } qdf_packed tSirMacDataHdr3a, *tpSirMacDataHdr3a; 429 430 /* / Management header format */ 431 typedef struct sSirMacMgmtHdr { 432 tSirMacFrameCtl fc; 433 uint8_t durationLo; 434 uint8_t durationHi; 435 tSirMacAddr da; 436 tSirMacAddr sa; 437 tSirMacAddr bssId; 438 tSirMacSeqCtl seqControl; 439 } qdf_packed tSirMacMgmtHdr, *tpSirMacMgmtHdr; 440 441 /* / ERP information field */ 442 typedef struct sSirMacErpInfo { 443 #ifndef ANI_LITTLE_BIT_ENDIAN 444 uint8_t reserved:5; 445 uint8_t barkerPreambleMode:1; 446 uint8_t useProtection:1; 447 uint8_t nonErpPresent:1; 448 #else 449 uint8_t nonErpPresent:1; 450 uint8_t useProtection:1; 451 uint8_t barkerPreambleMode:1; 452 uint8_t reserved:5; 453 #endif 454 } qdf_packed tSirMacErpInfo, *tpSirMacErpInfo; 455 456 /* / Capability information field */ 457 typedef struct sSirMacCapabilityInfo { 458 #ifndef ANI_LITTLE_BIT_ENDIAN 459 uint16_t immediateBA:1; 460 uint16_t delayedBA:1; 461 uint16_t dsssOfdm:1; 462 uint16_t rrm:1; 463 uint16_t apsd:1; 464 uint16_t shortSlotTime:1; 465 uint16_t qos:1; 466 uint16_t spectrumMgt:1; 467 uint16_t channelAgility:1; 468 uint16_t criticalUpdateFlag:1; 469 uint16_t shortPreamble:1; 470 uint16_t privacy:1; 471 uint16_t cfPollReq:1; 472 uint16_t cfPollable:1; 473 uint16_t ibss:1; 474 uint16_t ess:1; 475 #else 476 uint16_t ess:1; 477 uint16_t ibss:1; 478 uint16_t cfPollable:1; 479 uint16_t cfPollReq:1; 480 uint16_t privacy:1; 481 uint16_t shortPreamble:1; 482 uint16_t criticalUpdateFlag:1; 483 uint16_t channelAgility:1; 484 uint16_t spectrumMgt:1; 485 uint16_t qos:1; 486 uint16_t shortSlotTime:1; 487 uint16_t apsd:1; 488 uint16_t rrm:1; 489 uint16_t dsssOfdm:1; 490 uint16_t delayedBA:1; 491 uint16_t immediateBA:1; 492 #endif 493 } qdf_packed tSirMacCapabilityInfo, *tpSirMacCapabilityInfo; 494 495 typedef struct sSirMacCfParamSet { 496 uint8_t cfpCount; 497 uint8_t cfpPeriod; 498 uint16_t cfpMaxDuration; 499 uint16_t cfpDurRemaining; 500 } qdf_packed tSirMacCfParamSet; 501 502 typedef struct sSirMacTim { 503 uint8_t dtimCount; 504 uint8_t dtimPeriod; 505 uint8_t bitmapControl; 506 uint8_t bitmapLength; 507 uint8_t bitmap[251]; 508 } qdf_packed tSirMacTim; 509 510 /* 12 Bytes long because this structure can be used to represent rate */ 511 /* and extended rate set IEs */ 512 /* The parser assume this to be at least 12 */ 513 typedef struct sSirMacRateSet { 514 uint8_t numRates; 515 uint8_t rate[SIR_MAC_MAX_NUMBER_OF_RATES]; 516 } qdf_packed tSirMacRateSet; 517 518 /** struct merged_mac_rate_set - merged mac rate set 519 * @num_rates: num of rates 520 * @rate: rate list 521 */ 522 struct merged_mac_rate_set { 523 uint8_t num_rates; 524 uint8_t rate[2 * WLAN_SUPPORTED_RATES_IE_MAX_LEN]; 525 }; 526 527 /* Reserve 1 byte for NULL character in the SSID name field to print in %s */ 528 typedef struct sSirMacSSid { 529 uint8_t length; 530 uint8_t ssId[WLAN_SSID_MAX_LEN +1]; 531 } qdf_packed tSirMacSSid; 532 533 typedef struct sSirMacWpaInfo { 534 uint8_t length; 535 uint8_t info[WLAN_MAX_IE_LEN]; 536 } qdf_packed tSirMacWpaInfo, *tpSirMacWpaInfo, 537 tSirMacRsnInfo, *tpSirMacRsnInfo; 538 539 typedef struct sSirMacWapiInfo { 540 uint8_t length; 541 uint8_t info[WLAN_MAX_IE_LEN]; 542 } qdf_packed tSirMacWapiInfo, *tpSirMacWapiInfo; 543 544 typedef struct sSirMacFHParamSet { 545 uint16_t dwellTime; 546 uint8_t hopSet; 547 uint8_t hopPattern; 548 uint8_t hopIndex; 549 } tSirMacFHParamSet, *tpSirMacFHParamSet; 550 551 typedef struct sSirMacIBSSParams { 552 uint16_t atim; 553 } tSirMacIBSSParams, *tpSirMacIBSSParams; 554 555 typedef struct sSirMacRRMEnabledCap { 556 #ifndef ANI_LITTLE_BIT_ENDIAN 557 uint8_t reserved:6; 558 uint8_t AntennaInformation:1; 559 uint8_t BSSAvailAdmission:1; 560 uint8_t BssAvgAccessDelay:1; 561 uint8_t RSNIMeasurement:1; 562 uint8_t RCPIMeasurement:1; 563 uint8_t NeighborTSFOffset:1; 564 uint8_t MeasurementPilotEnabled:1; 565 uint8_t MeasurementPilot:3; 566 uint8_t nonOperatinChanMax:3; 567 uint8_t operatingChanMax:3; 568 uint8_t RRMMIBEnabled:1; 569 uint8_t APChanReport:1; 570 uint8_t triggeredTCM:1; 571 uint8_t TCMCapability:1; 572 uint8_t LCIAzimuth:1; 573 uint8_t LCIMeasurement:1; 574 uint8_t statistics:1; 575 uint8_t NoiseHistogram:1; 576 uint8_t ChannelLoad:1; 577 uint8_t FrameMeasurement:1; 578 uint8_t BeaconRepCond:1; 579 uint8_t BeaconTable:1; 580 uint8_t BeaconActive:1; 581 uint8_t BeaconPassive:1; 582 uint8_t repeated:1; 583 uint8_t parallel:1; 584 uint8_t NeighborRpt:1; 585 uint8_t LinkMeasurement:1; 586 uint8_t present; 587 #else 588 uint8_t present; 589 uint8_t LinkMeasurement:1; 590 uint8_t NeighborRpt:1; 591 uint8_t parallel:1; 592 uint8_t repeated:1; 593 uint8_t BeaconPassive:1; 594 uint8_t BeaconActive:1; 595 uint8_t BeaconTable:1; 596 uint8_t BeaconRepCond:1; 597 uint8_t FrameMeasurement:1; 598 uint8_t ChannelLoad:1; 599 uint8_t NoiseHistogram:1; 600 uint8_t statistics:1; 601 uint8_t LCIMeasurement:1; 602 uint8_t LCIAzimuth:1; 603 uint8_t TCMCapability:1; 604 uint8_t triggeredTCM:1; 605 uint8_t APChanReport:1; 606 uint8_t RRMMIBEnabled:1; 607 uint8_t operatingChanMax:3; 608 uint8_t nonOperatinChanMax:3; 609 uint8_t MeasurementPilot:3; 610 uint8_t MeasurementPilotEnabled:1; 611 uint8_t NeighborTSFOffset:1; 612 uint8_t RCPIMeasurement:1; 613 uint8_t RSNIMeasurement:1; 614 uint8_t BssAvgAccessDelay:1; 615 uint8_t BSSAvailAdmission:1; 616 uint8_t AntennaInformation:1; 617 uint8_t reserved:6; 618 #endif 619 } tSirMacRRMEnabledCap, *tpSirMacRRMEnabledCap; 620 621 #define MU_EDCA_DEF_AIFSN 0 622 #define MU_EDCA_DEF_CW_MAX 15 623 #define MU_EDCA_DEF_CW_MIN 15 624 #define MU_EDCA_DEF_TIMER 255 625 /* access category record */ 626 typedef struct sSirMacAciAifsn { 627 #ifndef ANI_LITTLE_BIT_ENDIAN 628 uint8_t rsvd:1; 629 uint8_t aci:2; 630 uint8_t acm:1; 631 uint8_t aifsn:4; 632 #else 633 uint8_t aifsn:4; 634 uint8_t acm:1; 635 uint8_t aci:2; 636 uint8_t rsvd:1; 637 #endif 638 } qdf_packed tSirMacAciAifsn; 639 640 /* contention window size */ 641 typedef struct sSirMacCW { 642 #ifndef ANI_LITTLE_BIT_ENDIAN 643 uint8_t max:4; 644 uint8_t min:4; 645 #else 646 uint8_t min:4; 647 uint8_t max:4; 648 #endif 649 } qdf_packed tSirMacCW; 650 651 typedef struct sSirMacEdcaParamRecord { 652 tSirMacAciAifsn aci; 653 tSirMacCW cw; 654 union { 655 uint16_t txoplimit; 656 uint16_t mu_edca_timer; 657 }; 658 uint8_t no_ack; 659 } qdf_packed tSirMacEdcaParamRecord; 660 661 typedef struct sSirMacQosInfo { 662 #ifndef ANI_LITTLE_BIT_ENDIAN 663 uint8_t uapsd:1; 664 uint8_t txopreq:1; 665 uint8_t qreq:1; 666 uint8_t qack:1; 667 uint8_t count:4; 668 #else 669 uint8_t count:4; 670 uint8_t qack:1; 671 uint8_t qreq:1; 672 uint8_t txopreq:1; 673 uint8_t uapsd:1; 674 #endif 675 } qdf_packed tSirMacQosInfo; 676 677 typedef struct sSirMacQosInfoStation { 678 #ifdef ANI_LITTLE_BIT_ENDIAN 679 uint8_t acvo_uapsd:1; 680 uint8_t acvi_uapsd:1; 681 uint8_t acbk_uapsd:1; 682 uint8_t acbe_uapsd:1; 683 uint8_t qack:1; 684 uint8_t maxSpLen:2; 685 uint8_t moreDataAck:1; 686 #else 687 uint8_t moreDataAck:1; 688 uint8_t maxSpLen:2; 689 uint8_t qack:1; 690 uint8_t acbe_uapsd:1; 691 uint8_t acbk_uapsd:1; 692 uint8_t acvi_uapsd:1; 693 uint8_t acvo_uapsd:1; 694 #endif 695 } qdf_packed tSirMacQosInfoStation, *tpSirMacQosInfoStation; 696 697 typedef struct sSirMacEdcaParamSetIE { 698 uint8_t type; 699 uint8_t length; 700 tSirMacQosInfo qosInfo; 701 uint8_t rsvd; 702 tSirMacEdcaParamRecord acbe; /* best effort */ 703 tSirMacEdcaParamRecord acbk; /* background */ 704 tSirMacEdcaParamRecord acvi; /* video */ 705 tSirMacEdcaParamRecord acvo; /* voice */ 706 } qdf_packed tSirMacEdcaParamSetIE; 707 708 /* ts info direction field can take any of these values */ 709 #define SIR_MAC_DIRECTION_UPLINK 0 710 #define SIR_MAC_DIRECTION_DNLINK 1 711 #define SIR_MAC_DIRECTION_DIRECT 2 712 #define SIR_MAC_DIRECTION_BIDIR 3 713 714 /* access policy */ 715 /* reserved 0 */ 716 #define SIR_MAC_ACCESSPOLICY_EDCA 1 717 #define SIR_MAC_ACCESSPOLICY_HCCA 2 718 #define SIR_MAC_ACCESSPOLICY_BOTH 3 719 720 /* frame classifier types */ 721 #define SIR_MAC_TCLASTYPE_ETHERNET 0 722 #define SIR_MAC_TCLASTYPE_TCPUDPIP 1 723 #define SIR_MAC_TCLASTYPE_8021DQ 2 724 /* reserved 3-255 */ 725 726 typedef struct sSirMacTclasParamEthernet { 727 tSirMacAddr srcAddr; 728 tSirMacAddr dstAddr; 729 uint16_t type; 730 } qdf_packed tSirMacTclasParamEthernet; 731 732 typedef struct sSirMacTclasParamIPv4 { 733 uint8_t version; 734 uint8_t srcIpAddr[4]; 735 uint8_t dstIpAddr[4]; 736 uint16_t srcPort; 737 uint16_t dstPort; 738 uint8_t dscp; 739 uint8_t protocol; 740 uint8_t rsvd; 741 } qdf_packed tSirMacTclasParamIPv4; 742 743 #define SIR_MAC_TCLAS_IPV4 4 744 745 typedef struct sSirMacTclasParamIPv6 { 746 uint8_t version; 747 uint8_t srcIpAddr[16]; 748 uint8_t dstIpAddr[16]; 749 uint16_t srcPort; 750 uint16_t dstPort; 751 uint8_t flowLabel[3]; 752 } qdf_packed tSirMacTclasParamIPv6; 753 754 typedef struct sSirMacTclasParam8021dq { 755 uint16_t tag; 756 } qdf_packed tSirMacTclasParam8021dq; 757 758 typedef struct sSirMacTclasIE { 759 uint8_t type; 760 uint8_t length; 761 uint8_t userPrio; 762 uint8_t classifierType; 763 uint8_t classifierMask; 764 } qdf_packed tSirMacTclasIE; 765 766 typedef struct sSirMacTsDelayIE { 767 uint8_t type; 768 uint8_t length; 769 uint32_t delay; 770 } qdf_packed tSirMacTsDelayIE; 771 772 typedef struct sSirMacScheduleInfo { 773 #ifndef ANI_LITTLE_BIT_ENDIAN 774 uint16_t rsvd:9; 775 uint16_t direction:2; 776 uint16_t tsid:4; 777 uint16_t aggregation:1; 778 #else 779 uint16_t aggregation:1; 780 uint16_t tsid:4; 781 uint16_t direction:2; 782 uint16_t rsvd:9; 783 #endif 784 } qdf_packed tSirMacScheduleInfo; 785 786 typedef struct sSirMacScheduleIE { 787 uint8_t type; 788 uint8_t length; 789 tSirMacScheduleInfo info; 790 uint32_t svcStartTime; 791 uint32_t svcInterval; 792 uint16_t maxSvcDuration; 793 uint16_t specInterval; 794 } qdf_packed tSirMacScheduleIE; 795 796 typedef struct sSirMacQosCapabilityIE { 797 uint8_t type; 798 uint8_t length; 799 tSirMacQosInfo qosInfo; 800 } qdf_packed tSirMacQosCapabilityIE; 801 802 typedef struct sSirMacQosCapabilityStaIE { 803 uint8_t type; 804 uint8_t length; 805 tSirMacQosInfoStation qosInfo; 806 } qdf_packed tSirMacQosCapabilityStaIE; 807 808 typedef uint32_t tSirMacTimeStamp[2]; 809 810 typedef uint16_t tSirMacBeaconInterval; 811 812 typedef uint16_t tSirMacListenInterval; 813 814 typedef uint8_t tSirMacChanNum; 815 816 /* IE definitions */ 817 typedef struct sSirMacSSidIE { 818 uint8_t type; 819 tSirMacSSid ssId; 820 } qdf_packed tSirMacSSidIE; 821 822 typedef struct sSirMacRateSetIE { 823 uint8_t type; 824 tSirMacRateSet supportedRateSet; 825 } qdf_packed tSirMacRateSetIE; 826 827 typedef struct sSirMacDsParamSetIE { 828 uint8_t type; 829 uint8_t length; 830 tSirMacChanNum channelNumber; 831 } qdf_packed tSirMacDsParamSetIE; 832 833 typedef struct sSirMacCfParamSetIE { 834 uint8_t type; 835 uint8_t length; 836 tSirMacCfParamSet cfParams; 837 } qdf_packed tSirMacCfParamSetIE; 838 839 typedef struct sSirMacNonErpPresentIE { 840 uint8_t type; 841 uint8_t length; 842 uint8_t erp; 843 } qdf_packed tSirMacNonErpPresentIE; 844 845 typedef struct sSirMacPowerCapabilityIE { 846 uint8_t type; 847 uint8_t length; 848 uint8_t minTxPower; 849 uint8_t maxTxPower; 850 } tSirMacPowerCapabilityIE; 851 852 typedef struct sSirMacSupportedChannelIE { 853 uint8_t type; 854 uint8_t length; 855 uint8_t supportedChannels[96]; 856 } tSirMacSupportedChannelIE; 857 858 typedef struct sSirMacMeasReqField { 859 uint8_t channelNumber; 860 uint8_t measStartTime[8]; 861 uint16_t measDuration; 862 } tSirMacMeasReqField, *tpSirMacMeasReqField; 863 864 typedef struct sSirMacMeasReqIE { 865 uint8_t type; 866 uint8_t length; 867 uint8_t measToken; 868 uint8_t measReqMode; 869 uint8_t measType; 870 tSirMacMeasReqField measReqField; 871 } tSirMacMeasReqIE, *tpSirMacMeasReqIE; 872 873 /* VHT Capabilities Info */ 874 typedef struct sSirMacVHTCapabilityInfo { 875 #ifndef ANI_LITTLE_BIT_ENDIAN 876 uint32_t extended_nss_bw_supp:2; 877 uint32_t txAntPattern:1; 878 uint32_t rxAntPattern:1; 879 uint32_t vhtLinkAdaptCap:2; 880 uint32_t maxAMPDULenExp:3; 881 uint32_t htcVHTCap:1; 882 uint32_t vhtTXOPPS:1; 883 uint32_t muBeamformeeCap:1; 884 uint32_t muBeamformerCap:1; 885 uint32_t numSoundingDim:3; 886 uint32_t csnofBeamformerAntSup:3; 887 uint32_t suBeamformeeCap:1; 888 uint32_t suBeamFormerCap:1; 889 uint32_t rxSTBC:3; 890 uint32_t txSTBC:1; 891 uint32_t shortGI160and80plus80MHz:1; 892 uint32_t shortGI80MHz:1; 893 uint32_t ldpcCodingCap:1; 894 uint32_t supportedChannelWidthSet:2; 895 uint32_t maxMPDULen:2; 896 #else 897 uint32_t maxMPDULen:2; 898 uint32_t supportedChannelWidthSet:2; 899 uint32_t ldpcCodingCap:1; 900 uint32_t shortGI80MHz:1; 901 uint32_t shortGI160and80plus80MHz:1; 902 uint32_t txSTBC:1; 903 uint32_t rxSTBC:3; 904 uint32_t suBeamFormerCap:1; 905 uint32_t suBeamformeeCap:1; 906 uint32_t csnofBeamformerAntSup:3; 907 uint32_t numSoundingDim:3; 908 uint32_t muBeamformerCap:1; 909 uint32_t muBeamformeeCap:1; 910 uint32_t vhtTXOPPS:1; 911 uint32_t htcVHTCap:1; 912 uint32_t maxAMPDULenExp:3; 913 uint32_t vhtLinkAdaptCap:2; 914 uint32_t rxAntPattern:1; 915 uint32_t txAntPattern:1; 916 uint32_t extended_nss_bw_supp:2; 917 #endif 918 } qdf_packed tSirMacVHTCapabilityInfo; 919 920 typedef struct sSirMacVHTTxSupDataRateInfo { 921 #ifndef ANI_LITTLE_BIT_ENDIAN 922 uint16_t reserved:2; 923 uint16_t vht_extended_nss_bw_cap:1; 924 uint16_t txSupDataRate:13; 925 #else 926 uint16_t txSupDataRate:13; 927 uint16_t vht_extended_nss_bw_cap:1; 928 uint16_t reserved:2; 929 #endif 930 } qdf_packed tSirMacVHTTxSupDataRateInfo; 931 932 typedef struct sSirMacVHTRxSupDataRateInfo { 933 #ifndef ANI_LITTLE_BIT_ENDIAN 934 uint16_t max_nsts_total:3; 935 uint16_t rxSupDataRate:13; 936 #else 937 uint16_t rxSupDataRate:13; 938 uint16_t max_nsts_total:3; 939 #endif 940 } qdf_packed tSirMacVHTRxSupDataRateInfo; 941 942 /** 943 * struct sSirVhtMcsInfo - VHT MCS information 944 * @rx_mcs_map: RX MCS map 2 bits for each stream, total 8 streams 945 * @rx_highest: Indicates highest long GI VHT PPDU data rate 946 * STA can receive. Rate expressed in units of 1 Mbps. 947 * If this field is 0 this value should not be used to 948 * consider the highest RX data rate supported. 949 * @tx_mcs_map: TX MCS map 2 bits for each stream, total 8 streams 950 * @tx_highest: Indicates highest long GI VHT PPDU data rate 951 * STA can transmit. Rate expressed in units of 1 Mbps. 952 * If this field is 0 this value should not be used to 953 * consider the highest TX data rate supported. 954 */ 955 typedef struct sSirVhtMcsInfo { 956 uint16_t rxMcsMap; 957 uint16_t rxHighest; 958 uint16_t txMcsMap; 959 uint16_t txHighest; 960 } tSirVhtMcsInfo; 961 962 /** 963 * struct sSirVHtCap - VHT capabilities 964 * 965 * This structure is the "VHT capabilities element" as 966 * described in 802.11ac D3.0 8.4.2.160 967 * @vht_cap_info: VHT capability info 968 * @supp_mcs: VHT MCS supported rates 969 */ 970 typedef struct sSirVHtCap { 971 uint32_t vhtCapInfo; 972 tSirVhtMcsInfo suppMcs; 973 } tSirVHTCap; 974 975 /* */ 976 /* Determines the current operating mode of the 802.11n STA */ 977 /* */ 978 979 typedef enum eSirMacHTOperatingMode { 980 eSIR_HT_OP_MODE_PURE, /* No Protection */ 981 eSIR_HT_OP_MODE_OVERLAP_LEGACY, /* Overlap Legacy device present, protection is optional */ 982 eSIR_HT_OP_MODE_NO_LEGACY_20MHZ_HT, /* No legacy device, but 20 MHz HT present */ 983 eSIR_HT_OP_MODE_MIXED /* Protetion is required */ 984 } tSirMacHTOperatingMode; 985 986 /* Spatial Multiplexing(SM) Power Save mode */ 987 typedef enum eSirMacHTMIMOPowerSaveState { 988 eSIR_HT_MIMO_PS_STATIC = 0, /* Static SM Power Save mode */ 989 eSIR_HT_MIMO_PS_DYNAMIC = 1, /* Dynamic SM Power Save mode */ 990 eSIR_HT_MIMO_PS_NA = 2, /* reserved */ 991 eSIR_HT_MIMO_PS_NO_LIMIT = 3 /* SM Power Save disabled */ 992 } tSirMacHTMIMOPowerSaveState; 993 994 typedef enum eSirMacHTChannelWidth { 995 eHT_CHANNEL_WIDTH_20MHZ = 0, 996 eHT_CHANNEL_WIDTH_40MHZ = 1, 997 eHT_CHANNEL_WIDTH_80MHZ = 2, 998 eHT_CHANNEL_WIDTH_160MHZ = 3, 999 eHT_CHANNEL_WIDTH_80P80MHZ = 4, 1000 eHT_CHANNEL_WIDTH_320MHZ = 5, 1001 eHT_MAX_CHANNEL_WIDTH 1002 } tSirMacHTChannelWidth; 1003 1004 typedef enum eSirMacHTChannelType { 1005 eHT_CHAN_NO_HT = 0, 1006 eHT_CHAN_HT20 = 1, 1007 eHT_CHAN_HT40MINUS = 2, 1008 eHT_CHAN_HT40PLUS = 3 1009 } tSirMacHTChannelType; 1010 1011 /* Packet struct for HT capability */ 1012 typedef struct sHtCaps { 1013 uint16_t advCodingCap:1; 1014 uint16_t supportedChannelWidthSet:1; 1015 uint16_t mimoPowerSave:2; 1016 uint16_t greenField:1; 1017 uint16_t shortGI20MHz:1; 1018 uint16_t shortGI40MHz:1; 1019 uint16_t txSTBC:1; 1020 uint16_t rxSTBC:2; 1021 uint16_t delayedBA:1; 1022 uint16_t maximalAMSDUsize:1; 1023 uint16_t dsssCckMode40MHz:1; 1024 uint16_t psmp:1; 1025 uint16_t stbcControlFrame:1; 1026 uint16_t lsigTXOPProtection:1; 1027 uint8_t maxRxAMPDUFactor:2; 1028 uint8_t mpduDensity:3; 1029 uint8_t reserved1:3; 1030 uint8_t supportedMCSSet[16]; 1031 uint16_t pco:1; 1032 uint16_t transitionTime:2; 1033 uint16_t reserved2:5; 1034 uint16_t mcsFeedback:2; 1035 uint16_t reserved3:6; 1036 uint32_t txBF:1; 1037 uint32_t rxStaggeredSounding:1; 1038 uint32_t txStaggeredSounding:1; 1039 uint32_t rxZLF:1; 1040 uint32_t txZLF:1; 1041 uint32_t implicitTxBF:1; 1042 uint32_t calibration:2; 1043 uint32_t explicitCSITxBF:1; 1044 uint32_t explicitUncompressedSteeringMatrix:1; 1045 uint32_t explicitBFCSIFeedback:3; 1046 uint32_t explicitUncompressedSteeringMatrixFeedback:3; 1047 uint32_t explicitCompressedSteeringMatrixFeedback:3; 1048 uint32_t csiNumBFAntennae:2; 1049 uint32_t uncompressedSteeringMatrixBFAntennae:2; 1050 uint32_t compressedSteeringMatrixBFAntennae:2; 1051 uint32_t reserved4:7; 1052 uint8_t antennaSelection:1; 1053 uint8_t explicitCSIFeedbackTx:1; 1054 uint8_t antennaIndicesFeedbackTx:1; 1055 uint8_t explicitCSIFeedback:1; 1056 uint8_t antennaIndicesFeedback:1; 1057 uint8_t rxAS:1; 1058 uint8_t txSoundingPPDUs:1; 1059 uint8_t reserved5:1; 1060 1061 } qdf_packed tHtCaps; 1062 1063 /* Supported MCS set */ 1064 #define SIZE_OF_SUPPORTED_MCS_SET 16 1065 #define SIZE_OF_BASIC_MCS_SET 16 1066 #define VALID_MCS_SIZE 77 /* 0-76 */ 1067 #define MCS_RX_HIGHEST_SUPPORTED_RATE_BYTE_OFFSET 10 1068 #define VALID_MAX_MCS_INDEX 8 1069 1070 /* */ 1071 /* The following enums will be used to get the "current" HT Capabilities of */ 1072 /* the local STA in a generic fashion. In other words, the following enums */ 1073 /* identify the HT capabilities that can be queried or set. */ 1074 /* */ 1075 typedef enum eHTCapability { 1076 eHT_LSIG_TXOP_PROTECTION, 1077 eHT_STBC_CONTROL_FRAME, 1078 eHT_PSMP, 1079 eHT_DSSS_CCK_MODE_40MHZ, 1080 eHT_MAX_AMSDU_LENGTH, 1081 eHT_MAX_AMSDU_NUM, 1082 eHT_RX_STBC, 1083 eHT_TX_STBC, 1084 eHT_SHORT_GI_40MHZ, 1085 eHT_SHORT_GI_20MHZ, 1086 eHT_GREENFIELD, 1087 eHT_MIMO_POWER_SAVE, 1088 eHT_SUPPORTED_CHANNEL_WIDTH_SET, 1089 eHT_ADVANCED_CODING, 1090 eHT_MAX_RX_AMPDU_FACTOR, 1091 eHT_MPDU_DENSITY, 1092 eHT_PCO, 1093 eHT_TRANSITION_TIME, 1094 eHT_MCS_FEEDBACK, 1095 eHT_TX_BEAMFORMING, 1096 eHT_ANTENNA_SELECTION, 1097 /* The following come under Additional HT Capabilities */ 1098 eHT_SI_GRANULARITY, 1099 eHT_CONTROLLED_ACCESS, 1100 eHT_RIFS_MODE, 1101 eHT_RECOMMENDED_TX_WIDTH_SET, 1102 eHT_EXTENSION_CHANNEL_OFFSET, 1103 eHT_OP_MODE, 1104 eHT_BASIC_STBC_MCS, 1105 eHT_DUAL_CTS_PROTECTION, 1106 eHT_LSIG_TXOP_PROTECTION_FULL_SUPPORT, 1107 eHT_PCO_ACTIVE, 1108 eHT_PCO_PHASE 1109 } tHTCapability; 1110 1111 /* HT Parameters Info */ 1112 typedef struct sSirMacHTParametersInfo { 1113 #ifndef ANI_LITTLE_BIT_ENDIAN 1114 uint8_t reserved:3; 1115 uint8_t mpduDensity:3; /* Dynamic state */ 1116 uint8_t maxRxAMPDUFactor:2; /* Dynamic state */ 1117 #else 1118 uint8_t maxRxAMPDUFactor:2; 1119 uint8_t mpduDensity:3; 1120 uint8_t reserved:3; 1121 #endif 1122 } qdf_packed tSirMacHTParametersInfo; 1123 1124 /* Extended HT Capabilities Info */ 1125 typedef struct sSirMacExtendedHTCapabilityInfo { 1126 #ifndef ANI_LITTLE_BIT_ENDIAN 1127 uint16_t reserved2:6; 1128 uint16_t mcsFeedback:2; /* Static via CFG */ 1129 uint16_t reserved1:5; 1130 uint16_t transitionTime:2; /* Static via CFG */ 1131 uint16_t pco:1; /* Static via CFG */ 1132 #else 1133 uint16_t pco:1; 1134 uint16_t transitionTime:2; 1135 uint16_t reserved1:5; 1136 uint16_t mcsFeedback:2; 1137 uint16_t reserved2:6; 1138 #endif 1139 } qdf_packed tSirMacExtendedHTCapabilityInfo; 1140 1141 /* IEEE 802.11n/D7.0 - 7.3.2.57.4 */ 1142 /* Part of the "supported MCS set field" */ 1143 typedef struct sSirMacRxHighestSupportRate { 1144 #ifndef ANI_LITTLE_BIT_ENDIAN 1145 uint16_t reserved:6; 1146 uint16_t rate:10; 1147 #else 1148 uint16_t rate:10; 1149 uint16_t reserved:6; 1150 #endif 1151 } qdf_packed tSirMacRxHighestSupportRate, *tpSirMacRxHighestSupportRate; 1152 1153 /* Transmit Beam Forming Capabilities Info */ 1154 typedef struct sSirMacTxBFCapabilityInfo { 1155 #ifndef ANI_LITTLE_BIT_ENDIAN 1156 uint32_t reserved:7; 1157 uint32_t compressedSteeringMatrixBFAntennae:2; /* Static via CFG */ 1158 /* Static via CFG */ 1159 uint32_t uncompressedSteeringMatrixBFAntennae:2; 1160 uint32_t csiNumBFAntennae:2; /* Static via CFG */ 1161 /* Static via CFG */ 1162 uint32_t explicitCompressedSteeringMatrixFeedback:3; 1163 /* Static via CFG */ 1164 uint32_t explicitUncompressedSteeringMatrixFeedback:3; 1165 uint32_t explicitBFCSIFeedback:3; /* Static via CFG */ 1166 uint32_t explicitUncompressedSteeringMatrix:1; /* Static via CFG */ 1167 uint32_t explicitCSITxBF:1; /* Static via CFG */ 1168 uint32_t calibration:2; /* Static via CFG */ 1169 uint32_t implicitTxBF:1; /* Static via CFG */ 1170 uint32_t txZLF:1; /* Static via CFG */ 1171 uint32_t rxZLF:1; /* Static via CFG */ 1172 uint32_t txStaggeredSounding:1; /* Static via CFG */ 1173 uint32_t rxStaggeredSounding:1; /* Static via CFG */ 1174 uint32_t txBF:1; /* Static via CFG */ 1175 #else 1176 uint32_t txBF:1; 1177 uint32_t rxStaggeredSounding:1; 1178 uint32_t txStaggeredSounding:1; 1179 uint32_t rxZLF:1; 1180 uint32_t txZLF:1; 1181 uint32_t implicitTxBF:1; 1182 uint32_t calibration:2; 1183 uint32_t explicitCSITxBF:1; 1184 uint32_t explicitUncompressedSteeringMatrix:1; 1185 uint32_t explicitBFCSIFeedback:3; 1186 uint32_t explicitUncompressedSteeringMatrixFeedback:3; 1187 uint32_t explicitCompressedSteeringMatrixFeedback:3; 1188 uint32_t csiNumBFAntennae:2; 1189 uint32_t uncompressedSteeringMatrixBFAntennae:2; 1190 uint32_t compressedSteeringMatrixBFAntennae:2; 1191 uint32_t reserved:7; 1192 #endif 1193 } qdf_packed tSirMacTxBFCapabilityInfo; 1194 1195 /* Antenna Selection Capability Info */ 1196 typedef struct sSirMacASCapabilityInfo { 1197 #ifndef ANI_LITTLE_BIT_ENDIAN 1198 uint8_t reserved2:1; 1199 uint8_t txSoundingPPDUs:1; /* Static via CFG */ 1200 uint8_t rxAS:1; /* Static via CFG */ 1201 uint8_t antennaIndicesFeedback:1; /* Static via CFG */ 1202 uint8_t explicitCSIFeedback:1; /* Static via CFG */ 1203 uint8_t antennaIndicesFeedbackTx:1; /* Static via CFG */ 1204 uint8_t explicitCSIFeedbackTx:1; /* Static via CFG */ 1205 uint8_t antennaSelection:1; /* Static via CFG */ 1206 #else 1207 uint8_t antennaSelection:1; 1208 uint8_t explicitCSIFeedbackTx:1; 1209 uint8_t antennaIndicesFeedbackTx:1; 1210 uint8_t explicitCSIFeedback:1; 1211 uint8_t antennaIndicesFeedback:1; 1212 uint8_t rxAS:1; 1213 uint8_t txSoundingPPDUs:1; 1214 uint8_t reserved2:1; 1215 #endif 1216 } qdf_packed tSirMacASCapabilityInfo; 1217 1218 typedef struct sSirMacAuthFrameBody { 1219 uint16_t authAlgoNumber; 1220 uint16_t authTransactionSeqNumber; 1221 uint16_t authStatusCode; 1222 uint8_t type; /* = WLAN_ELEMID_CHALLENGE */ 1223 uint8_t length; /* = SIR_MAC_AUTH_CHALLENGE_LENGTH */ 1224 uint8_t challengeText[SIR_MAC_AUTH_CHALLENGE_LENGTH]; 1225 #ifdef WLAN_FEATURE_FILS_SK 1226 tSirMacRsnInfo rsn_ie; 1227 struct mac_ft_ie ft_ie; 1228 uint8_t assoc_delay_info; 1229 uint8_t session[SIR_FILS_SESSION_LENGTH]; 1230 uint8_t wrapped_data_len; 1231 uint8_t wrapped_data[SIR_FILS_WRAPPED_DATA_MAX_SIZE]; 1232 uint8_t nonce[SIR_FILS_NONCE_LENGTH]; 1233 #endif 1234 bool is_mlo_ie_present; 1235 struct qdf_mac_addr peer_mld; 1236 } qdf_packed tSirMacAuthFrameBody, *tpSirMacAuthFrameBody; 1237 1238 /* / Common header for all action frames */ 1239 typedef struct sSirMacActionFrameHdr { 1240 uint8_t category; 1241 uint8_t actionID; 1242 } qdf_packed tSirMacActionFrameHdr, *tpSirMacActionFrameHdr; 1243 1244 typedef struct sSirMacVendorSpecificFrameHdr { 1245 uint8_t category; 1246 uint8_t Oui[4]; 1247 } qdf_packed tSirMacVendorSpecificFrameHdr, 1248 *tpSirMacVendorSpecificFrameHdr; 1249 1250 typedef struct sSirMacVendorSpecificPublicActionFrameHdr { 1251 uint8_t category; 1252 uint8_t actionID; 1253 uint8_t Oui[4]; 1254 uint8_t OuiSubType; 1255 uint8_t dialogToken; 1256 } qdf_packed tSirMacVendorSpecificPublicActionFrameHdr, 1257 *tpSirMacVendorSpecificPublicActionFrameHdr; 1258 1259 typedef struct sSirMacMeasActionFrameHdr { 1260 uint8_t category; 1261 uint8_t actionID; 1262 uint8_t dialogToken; 1263 } tSirMacMeasActionFrameHdr, *tpSirMacMeasActionFrameHdr; 1264 1265 #ifdef ANI_SUPPORT_11H 1266 typedef struct sSirMacTpcReqActionFrame { 1267 tSirMacMeasActionFrameHdr actionHeader; 1268 uint8_t type; 1269 uint8_t length; 1270 } tSirMacTpcReqActionFrame, *tpSirMacTpcReqActionFrame; 1271 typedef struct sSirMacMeasReqActionFrame { 1272 tSirMacMeasActionFrameHdr actionHeader; 1273 tSirMacMeasReqIE measReqIE; 1274 } tSirMacMeasReqActionFrame, *tpSirMacMeasReqActionFrame; 1275 #endif 1276 1277 typedef struct sSirMacNeighborReportReq { 1278 uint8_t dialogToken; 1279 uint8_t ssid_present; 1280 tSirMacSSid ssid; 1281 } tSirMacNeighborReportReq, *tpSirMacNeighborReportReq; 1282 1283 typedef struct sSirMacLinkReport { 1284 uint8_t dialogToken; 1285 uint8_t txPower; 1286 uint8_t rxAntenna; 1287 uint8_t txAntenna; 1288 uint8_t rcpi; 1289 uint8_t rsni; 1290 } tSirMacLinkReport, *tpSirMacLinkReport; 1291 1292 #define BEACON_REPORT_MAX_IES 215 1293 /* Max number of beacon reports per channel supported in the driver */ 1294 #define MAX_BEACON_REPORTS 32 1295 /* Offset of IEs after Fixed Fields in Beacon Frame */ 1296 #define BEACON_FRAME_IES_OFFSET 12 1297 1298 /** 1299 * struct bcn_report_frame_body_frag_id - beacon report reported frame body 1300 * fragment ID sub element params 1301 * @id: report ID 1302 * @frag_id: fragment ID 1303 * @more_frags: more frags present or not present 1304 */ 1305 struct bcn_report_frame_body_frag_id { 1306 uint8_t id; 1307 uint8_t frag_id; 1308 bool more_frags; 1309 }; 1310 1311 /** 1312 * struct sSirMacBeaconReport - Beacon Report Structure 1313 * @regClass: Regulatory Class 1314 * @channel: Channel for which the current report is being sent 1315 * @measStartTime: RRM scan start time for this report 1316 * @measDuration: Scan duration for the current channel 1317 * @phyType: Condensed Phy Type 1318 * @bcnProbeRsp: Beacon or probe response being reported 1319 * @rsni: Received signal-to-noise indication 1320 * @rcpi: Received Channel Power indication 1321 * @bssid: BSSID of the AP requesting the beacon report 1322 * @antennaId: Number of Antennas used for measurement 1323 * @parentTSF: measuring STA's TSF timer value 1324 * @numIes: Number of IEs included in the beacon frames 1325 * @last_bcn_report_ind_support: Support for Last beacon report indication 1326 * @is_last_bcn_report: Is the current report last or more reports present 1327 * @frame_body_frag_id: Reported Frame Body Frag Id sub-element params 1328 * @Ies: IEs included in the beacon report 1329 */ 1330 typedef struct sSirMacBeaconReport { 1331 uint8_t regClass; 1332 uint8_t channel; 1333 uint8_t measStartTime[8]; 1334 uint8_t measDuration; 1335 uint8_t phyType; 1336 uint8_t bcnProbeRsp; 1337 uint8_t rsni; 1338 uint8_t rcpi; 1339 tSirMacAddr bssid; 1340 uint8_t antennaId; 1341 uint32_t parentTSF; 1342 uint8_t numIes; 1343 uint8_t last_bcn_report_ind_support; 1344 uint8_t is_last_bcn_report; 1345 struct bcn_report_frame_body_frag_id frame_body_frag_id; 1346 uint8_t Ies[BEACON_REPORT_MAX_IES]; 1347 1348 } tSirMacBeaconReport, *tpSirMacBeaconReport; 1349 1350 /** 1351 * struct sir_mac_bw_ind_element - Contains info for Bandwidth Indication IE 1352 * present in channel load request received from AP 1353 * @is_wide_bw_chan_switch: to check Bandwidth Indication optional IE present 1354 * @channel_width: channel width 1355 * @center_chan_freq0: center freq segment 0 for 320 MHz request 1356 * @center_chan_freq1: center freq segment 1 for 320 MHz request 1357 */ 1358 struct sir_mac_bw_ind_element { 1359 bool is_bw_ind_element; 1360 uint8_t channel_width; 1361 uint8_t center_freq_seg0; 1362 uint8_t center_freq_seg1; 1363 }; 1364 1365 /** 1366 * struct sir_mac_wide_bw_chan_switch - Contains info for Wide Bandwidth Channel 1367 * Switch IE present in channel load request received from AP 1368 * @is_wide_bw_chan_switch: to check Bandwidth Indication optional IE present 1369 * @channel_width: channel width 1370 * @center_chan_freq0: center freq segment 0 for till 160 MHz request 1371 * @center_chan_freq1: center freq segment 1 for till 160 MHz request 1372 */ 1373 struct sir_mac_wide_bw_chan_switch { 1374 uint8_t is_wide_bw_chan_switch; 1375 uint8_t channel_width; 1376 uint8_t center_chan_freq0; 1377 uint8_t center_chan_freq1; 1378 }; 1379 1380 /** 1381 * struct chan_load_report - channel load Report Structure 1382 * @op_class: Regulatory Class 1383 * @channel: Channel for which the current report is being sent 1384 * @rrm_scan_tsf: RRM scan start time for this report 1385 * @meas_duration: Scan duration for the current channel 1386 * @chan_load: channel utilization measurement 1387 * @bw_ind: Contains info for Bandwidth Indication IE 1388 * @wide_bw: Contains info for Wide Bandwidth Channel IE 1389 */ 1390 struct chan_load_report { 1391 uint8_t op_class; 1392 uint8_t channel; 1393 qdf_time_t rrm_scan_tsf; 1394 uint8_t meas_duration; 1395 uint8_t chan_load; 1396 struct sir_mac_bw_ind_element bw_ind; 1397 struct sir_mac_wide_bw_chan_switch wide_bw; 1398 }; 1399 1400 /** 1401 * sta_statistics_group_id - RRM STA STATISTICS TYPE related Refer IEEE 1402 * P802.11-REVme/D2.1, January 2023, Table 9-144 1403 * @STA_STAT_GROUP_ID_COUNTER_STATS: group id for counter stats 1404 * @STA_STAT_GROUP_ID_MAC_STATS: group id for mac stats 1405 * @STA_STAT_GROUP_ID_QOS_STATS: group id for qos stats 1406 * @STA_STAT_GROUP_ID_DELAY_STATS: group id delay stats 1407 */ 1408 enum sta_statistics_group_id { 1409 STA_STAT_GROUP_ID_COUNTER_STATS = 0, 1410 STA_STAT_GROUP_ID_MAC_STATS = 1, 1411 STA_STAT_GROUP_ID_QOS_STATS = 2, 1412 STA_STAT_GROUP_ID_DELAY_STATS = 10, 1413 }; 1414 1415 /** 1416 * counter_stats - structure to hold stats of group id 0 1417 * @transmitted_fragment_count: transmitted fragment count 1418 * @group_transmitted_frame_count: group transmitted frame count 1419 * @failed_count: failed count 1420 * @group_received_frame_count: group received frame count 1421 * @fcs_error_count: face error count 1422 * @transmitted_frame_count: transmitted frame count 1423 * @received_fragment_count: received fragment count 1424 */ 1425 struct counter_stats { 1426 uint32_t transmitted_fragment_count; 1427 uint32_t group_transmitted_frame_count; 1428 uint32_t failed_count; 1429 uint32_t group_received_frame_count; 1430 uint32_t fcs_error_count; 1431 uint32_t transmitted_frame_count; 1432 uint32_t received_fragment_count; 1433 }; 1434 1435 /** 1436 * mac_stats - struct to hold group id 1 stats 1437 * @retry_count: retry count 1438 * @multiple_retry_count: multiple retry count 1439 * @frame_duplicate_count: frame duplicate count 1440 * @rts_success_count: rts success count 1441 * @rts_failure_count: rts failure count 1442 * @ack_failure_count: ack failure count 1443 */ 1444 struct mac_stats { 1445 uint32_t retry_count; 1446 uint32_t multiple_retry_count; 1447 uint32_t frame_duplicate_count; 1448 uint32_t rts_success_count; 1449 uint32_t rts_failure_count; 1450 uint32_t ack_failure_count; 1451 }; 1452 1453 /** 1454 * struct access_delay_stats - struct for group id 10 stats 1455 * @ap_average_access_delay: ap average access delay 1456 * @average_access_delay_besteffort: access delay best effort 1457 * @average_access_delay_background: average access delay background 1458 * @average_access_delay_video: average access delay video 1459 * @average_access_delay_voice: average access delay voice 1460 * station_count: station count 1461 * channel_utilization: channel utilization 1462 */ 1463 struct access_delay_stats { 1464 uint8_t ap_average_access_delay; 1465 uint8_t average_access_delay_besteffort; 1466 uint8_t average_access_delay_background; 1467 uint8_t average_access_delay_video; 1468 uint8_t average_access_delay_voice; 1469 uint16_t station_count; 1470 uint8_t channel_utilization; 1471 }; 1472 1473 /** 1474 * union stats_group_data - stats data for provided group id 1475 * @counter stats - stats for group id 0 1476 * @mac_stats - stats for group id 1 1477 */ 1478 union stats_group_data { 1479 struct counter_stats counter_stats; 1480 struct mac_stats mac_stats; 1481 struct access_delay_stats access_delay_stats; 1482 }; 1483 1484 /** 1485 * struct statistics_report - To store sta statistics report 1486 * @meas_duration: measurement duration 1487 * @group id: stats group id 1488 * @group stats: stats data 1489 */ 1490 struct statistics_report { 1491 uint8_t meas_duration; 1492 uint8_t group_id; 1493 union stats_group_data group_stats; 1494 }; 1495 1496 typedef struct sSirMacRadioMeasureReport { 1497 uint8_t token; 1498 uint8_t refused; 1499 uint8_t incapable; 1500 uint8_t type; 1501 union { 1502 tSirMacBeaconReport beaconReport; 1503 struct chan_load_report channel_load_report; 1504 struct statistics_report statistics_report; 1505 } report; 1506 1507 } tSirMacRadioMeasureReport, *tpSirMacRadioMeasureReport; 1508 1509 #ifdef WLAN_FEATURE_11AX 1510 struct he_cap_network_endian { 1511 uint32_t htc_he:1; 1512 uint32_t twt_request:1; 1513 uint32_t twt_responder:1; 1514 uint32_t fragmentation:2; 1515 uint32_t max_num_frag_msdu_amsdu_exp:3; 1516 uint32_t min_frag_size:2; 1517 uint32_t trigger_frm_mac_pad:2; 1518 uint32_t multi_tid_aggr_rx_supp:3; 1519 uint32_t he_link_adaptation:2; 1520 uint32_t all_ack:1; 1521 uint32_t trigd_rsp_sched:1; 1522 uint32_t a_bsr:1; 1523 uint32_t broadcast_twt:1; 1524 uint32_t ba_32bit_bitmap:1; 1525 uint32_t mu_cascade:1; 1526 uint32_t ack_enabled_multitid:1; 1527 uint32_t reserved:1; 1528 uint32_t omi_a_ctrl:1; 1529 uint32_t ofdma_ra:1; 1530 uint32_t max_ampdu_len_exp_ext:2; 1531 uint32_t amsdu_frag:1; 1532 uint32_t flex_twt_sched:1; 1533 uint32_t rx_ctrl_frame:1; 1534 1535 uint16_t bsrp_ampdu_aggr:1; 1536 uint16_t qtp:1; 1537 uint16_t a_bqr:1; 1538 uint16_t spatial_reuse_param_rspder:1; 1539 uint16_t ndp_feedback_supp:1; 1540 uint16_t ops_supp:1; 1541 uint16_t amsdu_in_ampdu:1; 1542 uint16_t multi_tid_aggr_tx_supp:3; 1543 uint16_t he_sub_ch_sel_tx_supp:1; 1544 uint16_t ul_2x996_tone_ru_supp:1; 1545 uint16_t om_ctrl_ul_mu_data_dis_rx:1; 1546 uint16_t he_dynamic_smps:1; 1547 uint16_t punctured_sounding_supp:1; 1548 uint16_t ht_vht_trg_frm_rx_supp:1; 1549 1550 uint32_t reserved2:1; 1551 uint32_t chan_width:7; 1552 uint32_t rx_pream_puncturing:4; 1553 uint32_t device_class:1; 1554 uint32_t ldpc_coding:1; 1555 uint32_t he_1x_ltf_800_gi_ppdu:1; 1556 uint32_t midamble_tx_rx_max_nsts:2; 1557 uint32_t he_4x_ltf_3200_gi_ndp:1; 1558 uint32_t tb_ppdu_tx_stbc_lt_80mhz:1; 1559 uint32_t rx_stbc_lt_80mhz:1; 1560 uint32_t doppler:2; 1561 uint32_t ul_mu:2; 1562 uint32_t dcm_enc_tx:3; 1563 uint32_t dcm_enc_rx:3; 1564 uint32_t ul_he_mu:1; 1565 uint32_t su_beamformer:1; 1566 1567 uint32_t su_beamformee:1; 1568 uint32_t mu_beamformer:1; 1569 uint32_t bfee_sts_lt_80:3; 1570 uint32_t bfee_sts_gt_80:3; 1571 uint32_t num_sounding_lt_80:3; 1572 uint32_t num_sounding_gt_80:3; 1573 uint32_t su_feedback_tone16:1; 1574 uint32_t mu_feedback_tone16:1; 1575 uint32_t codebook_su:1; 1576 uint32_t codebook_mu:1; 1577 uint32_t beamforming_feedback:3; 1578 uint32_t he_er_su_ppdu:1; 1579 uint32_t dl_mu_mimo_part_bw:1; 1580 uint32_t ppet_present:1; 1581 uint32_t srp:1; 1582 uint32_t power_boost:1; 1583 uint32_t he_ltf_800_gi_4x:1; 1584 uint32_t max_nc:3; 1585 uint32_t tb_ppdu_tx_stbc_gt_80mhz:1; 1586 uint32_t rx_stbc_gt_80mhz:1; 1587 1588 uint16_t er_he_ltf_800_gi_4x:1; 1589 uint16_t he_ppdu_20_in_40Mhz_2G:1; 1590 uint16_t he_ppdu_20_in_160_80p80Mhz:1; 1591 uint16_t he_ppdu_80_in_160_80p80Mhz:1; 1592 uint16_t er_1x_he_ltf_gi:1; 1593 uint16_t midamble_tx_rx_1x_he_ltf:1; 1594 uint16_t dcm_max_bw:2; 1595 uint16_t longer_than_16_he_sigb_ofdm_sym:1; 1596 uint16_t non_trig_cqi_feedback:1; 1597 uint16_t tx_1024_qam_lt_242_tone_ru:1; 1598 uint16_t rx_1024_qam_lt_242_tone_ru:1; 1599 uint16_t rx_full_bw_su_he_mu_compress_sigb:1; 1600 uint16_t rx_full_bw_su_he_mu_non_cmpr_sigb:1; 1601 uint16_t reserved3:2; 1602 1603 uint8_t reserved4; 1604 1605 uint16_t rx_he_mcs_map_lt_80; 1606 uint16_t tx_he_mcs_map_lt_80; 1607 uint16_t rx_he_mcs_map_160; 1608 uint16_t tx_he_mcs_map_160; 1609 uint16_t rx_he_mcs_map_80_80; 1610 uint16_t tx_he_mcs_map_80_80; 1611 } qdf_packed; 1612 1613 struct he_ops_network_endian { 1614 uint16_t default_pe:3; 1615 uint16_t twt_required:1; 1616 uint16_t txop_rts_threshold:10; 1617 uint16_t vht_oper_present:1; 1618 uint16_t co_located_bss:1; 1619 uint8_t er_su_disable:1; 1620 uint8_t reserved1:7; 1621 uint8_t bss_color:6; 1622 uint8_t partial_bss_col:1; 1623 uint8_t bss_col_disabled:1; 1624 uint8_t basic_mcs_nss[2]; 1625 union { 1626 struct { 1627 uint8_t chan_width; 1628 uint8_t center_freq_seg0; 1629 uint8_t center_freq_seg1; 1630 } info; /* vht_oper_present = 1 */ 1631 } vht_oper; 1632 union { 1633 struct { 1634 uint8_t data; 1635 } info; /* co_located_bss = 1 */ 1636 } maxbssid_ind; 1637 } qdf_packed; 1638 1639 /* HE Capabilities Info */ 1640 struct he_capability_info { 1641 #ifndef ANI_LITTLE_BIT_ENDIAN 1642 uint32_t rx_ctrl_frame:1; 1643 uint32_t flex_twt_sched:1; 1644 uint32_t amsdu_frag:1; 1645 uint32_t max_ampdu_len_exp_ext:2; 1646 uint32_t ofdma_ra:1; 1647 uint32_t omi_a_ctrl:1; 1648 uint32_t reserved:1; 1649 uint32_t ack_enabled_multitid:1; 1650 uint32_t mu_cascade:1; 1651 uint32_t ba_32bit_bitmap:1; 1652 uint32_t broadcast_twt:1; 1653 uint32_t a_bsr:1; 1654 uint32_t trigd_rsp_sched:1; 1655 uint32_t all_ack:1; 1656 uint32_t he_link_adaptation:2; 1657 uint32_t multi_tid_aggr_rx_supp:3; 1658 uint32_t trigger_frm_mac_pad:2; 1659 uint32_t min_frag_size:2; 1660 uint32_t max_num_frag_msdu_amsdu_exp:3; 1661 uint32_t fragmentation:2; 1662 uint32_t twt_responder:1; 1663 uint32_t twt_request:1; 1664 uint32_t htc_he:1; 1665 1666 uint16_t ht_vht_trg_frm_rx_supp:1; 1667 uint16_t punctured_sounding_supp:1; 1668 uint16_t he_dynamic_smps:1; 1669 uint16_t om_ctrl_ul_mu_data_dis_rx:1; 1670 uint16_t ul_2x996_tone_ru_supp:1; 1671 uint16_t he_sub_ch_sel_tx_supp:1; 1672 uint16_t multi_tid_aggr_tx_supp:3; 1673 uint16_t amsdu_in_ampdu:1; 1674 uint16_t ops_supp:1; 1675 uint16_t ndp_feedback_supp:1; 1676 uint16_t spatial_reuse_param_rspder:1; 1677 uint16_t a_bqr:1; 1678 uint16_t qtp:1; 1679 uint16_t bsrp_ampdu_aggr:1; 1680 1681 uint32_t su_beamformer:1; 1682 uint32_t ul_he_mu:1; 1683 uint32_t dcm_enc_rx:3; 1684 uint32_t dcm_enc_tx:3; 1685 uint32_t ul_mu:2; 1686 uint32_t doppler:2; 1687 uint32_t rx_stbc_lt_80mhz:1; 1688 uint32_t tb_ppdu_tx_stbc_lt_80mhz:1; 1689 uint32_t he_4x_ltf_3200_gi_ndp:1; 1690 uint32_t midamble_tx_rx_max_nsts:2; 1691 uint32_t he_1x_ltf_800_gi_ppdu:1; 1692 uint32_t ldpc_coding:1; 1693 uint32_t device_class:1; 1694 uint32_t rx_pream_puncturing:4; 1695 uint32_t chan_width:7; 1696 uint32_t reserved2:1; 1697 1698 uint32_t rx_stbc_gt_80mhz:1; 1699 uint32_t tb_ppdu_tx_stbc_gt_80mhz:1; 1700 uint32_t max_nc:3; 1701 uint32_t he_ltf_800_gi_4x:1; 1702 uint32_t power_boost:1; 1703 uint32_t srp:1; 1704 uint32_t ppet_present:1; 1705 uint32_t dl_mu_mimo_part_bw:1; 1706 uint32_t he_er_su_ppdu:1; 1707 uint32_t beamforming_feedback:3; 1708 uint32_t codebook_mu:1; 1709 uint32_t codebook_su:1; 1710 uint32_t mu_feedback_tone16:1; 1711 uint32_t su_feedback_tone16:1; 1712 uint32_t num_sounding_gt_80:3; 1713 uint32_t num_sounding_lt_80:3; 1714 uint32_t bfee_sts_gt_80:3; 1715 uint32_t bfee_sts_lt_80:3; 1716 uint32_t mu_beamformer:1; 1717 uint32_t su_beamformee:1; 1718 1719 uint16_t reserved3:2; 1720 uint16_t rx_full_bw_su_he_mu_non_cmpr_sigb:1; 1721 uint16_t rx_full_bw_su_he_mu_compress_sigb:1; 1722 uint16_t rx_1024_qam_lt_242_tone_ru:1; 1723 uint16_t tx_1024_qam_lt_242_tone_ru:1; 1724 uint16_t non_trig_cqi_feedback:1; 1725 uint16_t longer_than_16_he_sigb_ofdm_sym:1; 1726 uint16_t dcm_max_bw:2; 1727 uint16_t midamble_tx_rx_1x_he_ltf:1; 1728 uint16_t er_1x_he_ltf_gi:1; 1729 uint16_t he_ppdu_80_in_160_80p80Mhz:1; 1730 uint16_t he_ppdu_20_in_160_80p80Mhz:1; 1731 uint16_t he_ppdu_20_in_40Mhz_2G:1; 1732 uint16_t er_he_ltf_800_gi_4x:1; 1733 1734 uint8_t reserved4; 1735 1736 uint16_t tx_he_mcs_map_80_80; 1737 uint16_t rx_he_mcs_map_80_80; 1738 uint16_t tx_he_mcs_map_160; 1739 uint16_t rx_he_mcs_map_160; 1740 uint16_t tx_he_mcs_map_lt_80; 1741 uint16_t rx_he_mcs_map_lt_80; 1742 #else 1743 uint32_t htc_he:1; 1744 uint32_t twt_request:1; 1745 uint32_t twt_responder:1; 1746 uint32_t fragmentation:2; 1747 uint32_t max_num_frag_msdu_amsdu_exp:3; 1748 uint32_t min_frag_size:2; 1749 uint32_t trigger_frm_mac_pad:2; 1750 uint32_t multi_tid_aggr_rx_supp:3; 1751 uint32_t he_link_adaptation:2; 1752 uint32_t all_ack:1; 1753 uint32_t trigd_rsp_sched:1; 1754 uint32_t a_bsr:1; 1755 uint32_t broadcast_twt:1; 1756 uint32_t ba_32bit_bitmap:1; 1757 uint32_t mu_cascade:1; 1758 uint32_t ack_enabled_multitid:1; 1759 uint32_t reserved:1; 1760 uint32_t omi_a_ctrl:1; 1761 uint32_t ofdma_ra:1; 1762 uint32_t max_ampdu_len_exp_ext:2; 1763 uint32_t amsdu_frag:1; 1764 uint32_t flex_twt_sched:1; 1765 uint32_t rx_ctrl_frame:1; 1766 1767 uint16_t bsrp_ampdu_aggr:1; 1768 uint16_t qtp:1; 1769 uint16_t a_bqr:1; 1770 uint16_t spatial_reuse_param_rspder:1; 1771 uint16_t ndp_feedback_supp:1; 1772 uint16_t ops_supp:1; 1773 uint16_t amsdu_in_ampdu:1; 1774 uint16_t multi_tid_aggr_tx_supp:3; 1775 uint16_t he_sub_ch_sel_tx_supp:1; 1776 uint16_t ul_2x996_tone_ru_supp:1; 1777 uint16_t om_ctrl_ul_mu_data_dis_rx:1; 1778 uint16_t he_dynamic_smps:1; 1779 uint16_t punctured_sounding_supp:1; 1780 uint16_t ht_vht_trg_frm_rx_supp:1; 1781 1782 uint32_t reserved2:1; 1783 uint32_t chan_width:7; 1784 uint32_t rx_pream_puncturing:4; 1785 uint32_t device_class:1; 1786 uint32_t ldpc_coding:1; 1787 uint32_t he_1x_ltf_800_gi_ppdu:1; 1788 uint32_t midamble_tx_rx_max_nsts:2; 1789 uint32_t he_4x_ltf_3200_gi_ndp:1; 1790 uint32_t tb_ppdu_tx_stbc_lt_80mhz:1; 1791 uint32_t rx_stbc_lt_80mhz:1; 1792 uint32_t doppler:2; 1793 uint32_t ul_mu:2; 1794 uint32_t dcm_enc_tx:3; 1795 uint32_t dcm_enc_rx:3; 1796 uint32_t ul_he_mu:1; 1797 uint32_t su_beamformer:1; 1798 1799 uint32_t su_beamformee:1; 1800 uint32_t mu_beamformer:1; 1801 uint32_t bfee_sts_lt_80:3; 1802 uint32_t bfee_sts_gt_80:3; 1803 uint32_t num_sounding_lt_80:3; 1804 uint32_t num_sounding_gt_80:3; 1805 uint32_t su_feedback_tone16:1; 1806 uint32_t mu_feedback_tone16:1; 1807 uint32_t codebook_su:1; 1808 uint32_t codebook_mu:1; 1809 uint32_t beamforming_feedback:3; 1810 uint32_t he_er_su_ppdu:1; 1811 uint32_t dl_mu_mimo_part_bw:1; 1812 uint32_t ppet_present:1; 1813 uint32_t srp:1; 1814 uint32_t power_boost:1; 1815 uint32_t he_ltf_800_gi_4x:1; 1816 uint32_t max_nc:3; 1817 uint32_t tb_ppdu_tx_stbc_gt_80mhz:1; 1818 uint32_t rx_stbc_gt_80mhz:1; 1819 1820 uint16_t er_he_ltf_800_gi_4x:1; 1821 uint16_t he_ppdu_20_in_40Mhz_2G:1; 1822 uint16_t he_ppdu_20_in_160_80p80Mhz:1; 1823 uint16_t he_ppdu_80_in_160_80p80Mhz:1; 1824 uint16_t er_1x_he_ltf_gi:1; 1825 uint16_t midamble_tx_rx_1x_he_ltf:1; 1826 uint16_t dcm_max_bw:2; 1827 uint16_t longer_than_16_he_sigb_ofdm_sym:1; 1828 uint16_t non_trig_cqi_feedback:1; 1829 uint16_t tx_1024_qam_lt_242_tone_ru:1; 1830 uint16_t rx_1024_qam_lt_242_tone_ru:1; 1831 uint16_t rx_full_bw_su_he_mu_compress_sigb:1; 1832 uint16_t rx_full_bw_su_he_mu_non_cmpr_sigb:1; 1833 uint16_t reserved3:2; 1834 1835 uint8_t reserved4; 1836 1837 uint16_t rx_he_mcs_map_lt_80; 1838 uint16_t tx_he_mcs_map_lt_80; 1839 uint16_t rx_he_mcs_map_160; 1840 uint16_t tx_he_mcs_map_160; 1841 uint16_t rx_he_mcs_map_80_80; 1842 uint16_t tx_he_mcs_map_80_80; 1843 #endif 1844 } qdf_packed; 1845 1846 struct he_6ghz_capability_info { 1847 uint16_t min_mpdu_start_spacing:3; 1848 uint16_t max_ampdu_len_exp:3; 1849 uint16_t max_mpdu_len:2; 1850 1851 uint16_t reserved:1; 1852 uint16_t sm_pow_save:2; 1853 uint16_t rd_responder:1; 1854 uint16_t rx_ant_pattern_consistency:1; 1855 uint16_t tx_ant_pattern_consistency:1; 1856 uint16_t reserved2:2; 1857 } qdf_packed; 1858 #endif 1859 1860 /* 1861 * frame parser does not include optional 160 and 80+80 mcs set for MIN IE len 1862 */ 1863 #define SIR_MAC_HE_CAP_MIN_LEN (DOT11F_IE_HE_CAP_MIN_LEN) 1864 #define HE_CAP_160M_MCS_MAP_LEN 4 1865 #define HE_CAP_80P80_MCS_MAP_LEN 4 1866 #define HE_CAP_OUI_LEN 3 1867 1868 /* QOS action frame definitions */ 1869 1870 /* max number of possible tclas elements in any frame */ 1871 #define SIR_MAC_TCLASIE_MAXNUM 2 1872 1873 /* 11b rate encoding in MAC format */ 1874 1875 #define SIR_MAC_RATE_1 0x02 1876 #define SIR_MAC_RATE_2 0x04 1877 #define SIR_MAC_RATE_5_5 0x0B 1878 #define SIR_MAC_RATE_11 0x16 1879 1880 /* 11a/g rate encoding in MAC format */ 1881 1882 #define SIR_MAC_RATE_6 0x0C 1883 #define SIR_MAC_RATE_9 0x12 1884 #define SIR_MAC_RATE_12 0x18 1885 #define SIR_MAC_RATE_18 0x24 1886 #define SIR_MAC_RATE_24 0x30 1887 #define SIR_MAC_RATE_36 0x48 1888 #define SIR_MAC_RATE_48 0x60 1889 #define SIR_MAC_RATE_54 0x6C 1890 1891 /* ANI legacy supported rates */ 1892 #define SIR_MAC_RATE_72 0x01 1893 #define SIR_MAC_RATE_96 0x03 1894 #define SIR_MAC_RATE_108 0x05 1895 1896 /* ANI enhanced rates */ 1897 #define SIR_MAC_RATE_42 1000 1898 #define SIR_MAC_RATE_84 1001 1899 #define SIR_MAC_RATE_126 1002 1900 #define SIR_MAC_RATE_144 1003 1901 #define SIR_MAC_RATE_168 1004 1902 #define SIR_MAC_RATE_192 1005 1903 #define SIR_MAC_RATE_216 1006 1904 #define SIR_MAC_RATE_240 1007 1905 1906 #define SIR_MAC_RATE_1_BITMAP (1<<0) 1907 #define SIR_MAC_RATE_2_BITMAP (1<<1) 1908 #define SIR_MAC_RATE_5_5_BITMAP (1<<2) 1909 #define SIR_MAC_RATE_11_BITMAP (1<<3) 1910 #define SIR_MAC_RATE_6_BITMAP (1<<4) 1911 #define SIR_MAC_RATE_9_BITMAP (1<<5) 1912 #define SIR_MAC_RATE_12_BITMAP (1<<6) 1913 #define SIR_MAC_RATE_18_BITMAP (1<<7) 1914 #define SIR_MAC_RATE_24_BITMAP (1<<8) 1915 #define SIR_MAC_RATE_36_BITMAP (1<<9) 1916 #define SIR_MAC_RATE_48_BITMAP (1<<10) 1917 #define SIR_MAC_RATE_54_BITMAP (1<<11) 1918 1919 #define sirIsArate(x) ((((uint8_t)x) == SIR_MAC_RATE_6) || \ 1920 (((uint8_t)x) == SIR_MAC_RATE_9) || \ 1921 (((uint8_t)x) == SIR_MAC_RATE_12) || \ 1922 (((uint8_t)x) == SIR_MAC_RATE_18) || \ 1923 (((uint8_t)x) == SIR_MAC_RATE_24) || \ 1924 (((uint8_t)x) == SIR_MAC_RATE_36) || \ 1925 (((uint8_t)x) == SIR_MAC_RATE_48) || \ 1926 (((uint8_t)x) == SIR_MAC_RATE_54)) 1927 1928 #define sirIsBrate(x) ((((uint8_t)x) == SIR_MAC_RATE_1) || \ 1929 (((uint8_t)x) == SIR_MAC_RATE_2) || \ 1930 (((uint8_t)x) == SIR_MAC_RATE_5_5) || \ 1931 (((uint8_t)x) == SIR_MAC_RATE_11)) 1932 1933 #define sirIsGrate(x) ((((uint8_t)x) == SIR_MAC_RATE_1) || \ 1934 (((uint8_t)x) == SIR_MAC_RATE_2) || \ 1935 (((uint8_t)x) == SIR_MAC_RATE_5_5) || \ 1936 (((uint8_t)x) == SIR_MAC_RATE_11) || \ 1937 (((uint8_t)x) == SIR_MAC_RATE_6) || \ 1938 (((uint8_t)x) == SIR_MAC_RATE_9) || \ 1939 (((uint8_t)x) == SIR_MAC_RATE_12) || \ 1940 (((uint8_t)x) == SIR_MAC_RATE_18) || \ 1941 (((uint8_t)x) == SIR_MAC_RATE_24) || \ 1942 (((uint8_t)x) == SIR_MAC_RATE_36) || \ 1943 (((uint8_t)x) == SIR_MAC_RATE_48) || \ 1944 (((uint8_t)x) == SIR_MAC_RATE_54)) 1945 1946 #define SIR_MAC_MIN_IE_LEN 2 /* Minimum IE length for IE validation */ 1947 1948 #define SIR_MAC_TI_TYPE_ASSOC_COMEBACK 3 1949 1950 #define SIR_MAC_VHT_CAP_MAX_MPDU_LEN 0 1951 #define SIR_MAC_VHT_CAP_SUPP_CH_WIDTH_SET 2 1952 #define SIR_MAC_VHT_CAP_LDPC_CODING_CAP 4 1953 #define SIR_MAC_VHT_CAP_SHORTGI_80MHZ 5 1954 #define SIR_MAC_VHT_CAP_SHORTGI_160_80_80MHZ 6 1955 #define SIR_MAC_VHT_CAP_TXSTBC 7 1956 #define SIR_MAC_VHT_CAP_RXSTBC 8 1957 #define SIR_MAC_VHT_CAP_SU_BEAMFORMER_CAP 11 1958 #define SIR_MAC_VHT_CAP_SU_BEAMFORMEE_CAP 12 1959 #define SIR_MAC_VHT_CAP_CSN_BEAMORMER_ANT_SUP 13 1960 #define SIR_MAC_VHT_CAP_NUM_SOUNDING_DIM 16 1961 #define SIR_MAC_VHT_CAP_NUM_BEAM_FORMER_CAP 19 1962 #define SIR_MAC_VHT_CAP_NUM_BEAM_FORMEE_CAP 20 1963 #define SIR_MAC_VHT_CAP_TXOPPS 21 1964 #define SIR_MAC_VHT_CAP_HTC_CAP 22 1965 #define SIR_MAC_VHT_CAP_MAX_AMDU_LEN_EXPO 23 1966 #define SIR_MAC_VHT_CAP_LINK_ADAPT_CAP 26 1967 #define SIR_MAC_VHT_CAP_RX_ANTENNA_PATTERN 28 1968 #define SIR_MAC_VHT_CAP_TX_ANTENNA_PATTERN 29 1969 #define SIR_MAC_VHT_CAP_EXTD_NSS_BW 30 1970 1971 #define SIR_MAC_HT_CAP_ADVCODING_S 0 1972 #define SIR_MAC_HT_CAP_CHWIDTH40_S 1 1973 #define SIR_MAC_HT_CAP_SMPOWERSAVE_DYNAMIC_S 2 1974 #define SIR_MAC_HT_CAP_SM_RESERVED_S 3 1975 #define SIR_MAC_HT_CAP_GREENFIELD_S 4 1976 #define SIR_MAC_HT_CAP_SHORTGI20MHZ_S 5 1977 #define SIR_MAC_HT_CAP_SHORTGI40MHZ_S 6 1978 #define SIR_MAC_HT_CAP_TXSTBC_S 7 1979 #define SIR_MAC_HT_CAP_RXSTBC_S 8 1980 #define SIR_MAC_HT_CAP_DELAYEDBLKACK_S 10 1981 #define SIR_MAC_HT_CAP_MAXAMSDUSIZE_S 11 1982 #define SIR_MAC_HT_CAP_DSSSCCK40_S 12 1983 #define SIR_MAC_HT_CAP_PSMP_S 13 1984 #define SIR_MAC_HT_CAP_INTOLERANT40_S 14 1985 #define SIR_MAC_HT_CAP_LSIGTXOPPROT_S 15 1986 1987 #define SIR_MAC_TXSTBC 1 1988 #define SIR_MAC_RXSTBC 1 1989 1990 #define SIR_MAC_RSNX_CAP_MIN_LEN 1 1991 #define SIR_MAC_RSNX_CAP_MAX_LEN 16 1992 1993 #define SIR_MAC_IE_TYPE_OFFSET 0 1994 #define SIR_MAC_IE_LEN_OFFSET 1 1995 #define SIR_MAC_IE_TYPE_LEN_SIZE 2 1996 #endif /* __MAC_PROT_DEFS_H */ 1997