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 22 * 23 24 * Author: Sandesh Goel 25 26 * Date: 02/25/02 27 28 * History:- 29 30 * Date Modified by Modification Information 31 32 * -------------------------------------------------------------------- 33 34 * 35 36 */ 37 38 #ifndef __DPH_GLOBAL_H__ 39 #define __DPH_GLOBAL_H__ 40 41 #include "lim_global.h" 42 #include "sir_mac_prot_def.h" 43 #include "sir_api.h" 44 45 /* DPH Hash Index for BSS(STA's Peer) on station. */ 46 #define DPH_STA_HASH_INDEX_PEER 1 47 48 /* DPH PMF SA Query state for station */ 49 #define DPH_SA_QUERY_NOT_IN_PROGRESS 1 50 #define DPH_SA_QUERY_IN_PROGRESS 2 51 #define DPH_SA_QUERY_TIMED_OUT 3 52 53 typedef struct sDphQosParams { 54 uint8_t addtsPresent; 55 tSirAddtsReqInfo addts; 56 tSirMacQosCapabilityStaIE capability; 57 /*AP EDCA params, extracted from assoc resp*/ 58 tSirMacEdcaParamSetIE peer_edca_params; 59 } tDphQosParams; 60 61 /** 62 * struct parsed_ies: Parsed IE's of BSS capability 63 * @ht_caps: HT caps IE 64 * @vht_caps: VHT caps IE 65 * @ht_operation: HT operation IE 66 * @vht_operation: VHT operation IE 67 * @hs20vendor_ie: HS2.0 vendor IE 68 * @he_operation: HE operation IE 69 * @srp_ie: Spatial Reuse Parameter IE 70 * @eht_operation: EHT IE 71 * 72 * This structure holds the parsed IE of connected BSS 73 * and this is not the intersection of BSS and STA 74 * capability. For example, if BSS supports 80 MHz 75 * and STA connects to BSS in 20 MHz, this structure 76 * holds 80 MHz as peer capability. 77 */ 78 struct parsed_ies { 79 tDot11fIEHTCaps ht_caps; 80 tDot11fIEVHTCaps vht_caps; 81 tDot11fIEHTInfo ht_operation; 82 tDot11fIEVHTOperation vht_operation; 83 tDot11fIEhs20vendor_ie hs20vendor_ie; 84 #ifdef WLAN_FEATURE_11AX 85 tDot11fIEhe_op he_operation; 86 #endif 87 #ifdef WLAN_FEATURE_SR 88 tDot11fIEspatial_reuse srp_ie; 89 #endif 90 #ifdef WLAN_FEATURE_11BE 91 tDot11fIEeht_op eht_operation; 92 #endif 93 }; 94 95 /* STA state node */ 96 typedef struct sDphHashNode { 97 /* 98 * This STA valid or not 99 */ 100 uint8_t valid:1; 101 uint8_t qosMode:1; 102 uint8_t erpEnabled:1; 103 /* This has been added to the dph hash table */ 104 uint8_t added:1; 105 uint8_t shortPreambleEnabled:1; 106 uint8_t shortSlotTimeEnabled:1; 107 /* set if both ap and sta are wme capable */ 108 uint8_t wmeEnabled:1; 109 /* set if both ap and sta are 11e capable */ 110 uint8_t lleEnabled:1; 111 /* set if both ap and sta are wsm capable */ 112 uint8_t wsmEnabled:1; 113 uint8_t fAniCount:1; 114 uint8_t rmfEnabled:1; 115 uint8_t ocv_enabled:1; 116 /* LIM state */ 117 struct lim_sta_context mlmStaContext; 118 /* qos parameter info */ 119 tDphQosParams qos; 120 /* 121 * All the legacy and airgo supported rates. 122 */ 123 struct supported_rates supportedRates; 124 /* MIMO Power Save */ 125 tSirMacHTMIMOPowerSaveState htMIMOPSState; 126 uint8_t htGreenfield:1; 127 uint8_t htShortGI40Mhz:1; 128 uint8_t htShortGI20Mhz:1; 129 /* DSSS/CCK at 40 MHz: Enabled 1 or Disabled */ 130 uint8_t htDsssCckRate40MHzSupport:1; 131 /* L-SIG TXOP Protection used only if peer support available */ 132 uint8_t htLsigTXOPProtection:1; 133 /* 134 * A-MPDU Density 135 * 000 - No restriction 136 * 001 - 1/8 usec 137 * 010 - 1/4 usec 138 * 011 - 1/2 usec 139 * 100 - 1 usec 140 * 101 - 2 usec 141 * 110 - 4 usec 142 * 111 - 8 usec 143 */ 144 uint8_t htAMpduDensity:3; 145 /* Set to 0 for 3839 octets */ 146 /* Set to 1 for 7935 octets */ 147 uint8_t htMaxAmsduLength; 148 /* */ 149 /* Maximum Rx A-MPDU factor */ 150 uint8_t htMaxRxAMpduFactor:3; 151 /* 152 * Recommended Tx Width Set 153 * 0 - use 20 MHz channel (control channel) 154 * 1 - use 40 Mhz channel 155 */ 156 uint8_t htSupportedChannelWidthSet:1; 157 uint8_t htSecondaryChannelOffset:2; 158 uint16_t assocId; /* Association ID */ 159 uint8_t staAddr[6]; 160 uint8_t staType; 161 162 uint8_t vhtSupportedChannelWidthSet; 163 enum phy_ch_width ch_width; 164 uint8_t vhtSupportedRxNss; 165 uint8_t vhtBeamFormerCapable; 166 uint8_t vht_su_bfee_capable; 167 uint8_t vht_mcs_10_11_supp; 168 uint8_t vht_160mhz_nss; 169 uint8_t vht_80p80mhz_nss; 170 uint8_t vht_extended_nss_bw_cap; 171 TX_TIMER pmfSaQueryTimer; 172 uint16_t pmfSaQueryCurrentTransId; 173 uint16_t pmfSaQueryStartTransId; 174 uint8_t pmfSaQueryState; 175 uint8_t pmfSaQueryRetryCount; 176 uint8_t htLdpcCapable; 177 uint8_t vhtLdpcCapable; 178 #ifdef FEATURE_WLAN_TDLS 179 uint16_t ht_caps; 180 uint32_t vht_caps; 181 #endif 182 uint8_t timingMeasCap; 183 /* key installed for this STA or not in the firmware */ 184 uint8_t is_key_installed; 185 uint8_t is_disassoc_deauth_in_progress; 186 187 uint8_t nss; 188 int8_t del_sta_ctx_rssi; 189 bool sta_deletion_in_progress; 190 /* Flag indicating connected STA doesn't support ECSA */ 191 uint8_t non_ecsa_capable; 192 struct parsed_ies parsed_ies; 193 uint32_t last_ocv_done_freq; 194 195 #ifdef WLAN_FEATURE_11AX 196 tDot11fIEhe_cap he_config; 197 uint16_t he_mcs_12_13_map; 198 tDot11fIEhe_6ghz_band_cap he_6g_band_cap; 199 #endif 200 201 #ifdef WLAN_FEATURE_11BE 202 tDot11fIEeht_cap eht_config; 203 tDot11fIEeht_op eht_op; 204 #endif 205 206 /* Peer operation class, extracted from ASSOC request frame*/ 207 tDot11fIESuppOperatingClasses supp_operating_classes; 208 /* 209 * When a station with already an existing dph entry tries to 210 * associate again, the old dph entry will be zeroed out except 211 * for the next pointer. The next pointer must be defined at the 212 * end of the structure. 213 */ 214 struct sDphHashNode *next; 215 #ifdef WLAN_FEATURE_11BE_MLO 216 bool recv_assoc_frm; 217 uint8_t mld_addr[QDF_MAC_ADDR_SIZE]; 218 struct mlo_partner_info mlo_info; 219 #endif 220 } tDphHashNode, *tpDphHashNode; 221 222 #include "dph_hash_table.h" 223 224 /* ------------------------------------------------------------------- */ 225 typedef struct sAniSirDph { 226 /* The hash table object */ 227 struct dph_hash_table dphHashTable; 228 } tAniSirDph, *tpAniSirDph; 229 230 #endif 231