xref: /wlan-driver/qcacld-3.0/core/mac/src/include/dph_global.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
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