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