1 /*
2  * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022-2024 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 #ifndef _HALMSGAPI_H_
21 #define _HALMSGAPI_H_
22 
23 #include "qdf_types.h"
24 #include "sir_api.h"
25 #include "sir_params.h"
26 
27 /*
28  * Validate the OS Type being built
29  */
30 
31 #if defined(ANI_OS_TYPE_ANDROID)        /* ANDROID */
32 
33 #if defined(ANI_OS_TYPE_QNX)
34 #error "more than one ANI_OS_TYPE_xxx is defined for this build"
35 #endif
36 
37 #elif defined(ANI_OS_TYPE_QNX)        /* QNX */
38 
39 #if defined(ANI_OS_TYPE_ANDROID)
40 #error "more than one ANI_OS_TYPE_xxx is defined for this build"
41 #endif
42 
43 #elif !defined(ANI_OS_TYPE_ANDROID) && !defined(ANI_OS_TYPE_QNX) /* NONE */
44 #error "NONE of the ANI_OS_TYPE_xxx are defined for this build"
45 #endif
46 
47 /* operMode in ADD BSS message */
48 #define BSS_OPERATIONAL_MODE_AP     0
49 #define BSS_OPERATIONAL_MODE_STA    1
50 #define BSS_OPERATIONAL_MODE_IBSS   2
51 #define BSS_OPERATIONAL_MODE_NDI    3
52 
53 /* STA entry type in add sta message */
54 #define STA_ENTRY_SELF              0
55 #define STA_ENTRY_OTHER             1
56 #define STA_ENTRY_BSSID             2
57 /* Special station id for transmitting broadcast frames. */
58 #define STA_ENTRY_BCAST             3
59 #define STA_ENTRY_PEER              STA_ENTRY_OTHER
60 #define STA_ENTRY_TDLS_PEER         4
61 #ifdef FEATURE_WLAN_TDLS
62 #define IS_TDLS_PEER(type) ((type) == STA_ENTRY_TDLS_PEER)
63 #else /* !FEATURE_WLAN_TDLS */
64 #define IS_TDLS_PEER(type) false
65 #endif /* FEATURE_WLAN_TDLS */
66 #define STA_ENTRY_NDI_PEER          5
67 
68 #define STA_INVALID_IDX 0xFF
69 
70 /* invalid channel id. */
71 #define INVALID_CHANNEL_ID 0
72 
73 /**
74  * enum eFrameType - frame types
75  * @TXRX_FRM_RAW: raw frame
76  * @TXRX_FRM_ETH2: ethernet frame
77  * @TXRX_FRM_802_3: 802.3 frame
78  * @TXRX_FRM_802_11_MGMT: 802.11 mgmt frame
79  * @TXRX_FRM_802_11_CTRL: 802.11 control frame
80  * @TXRX_FRM_802_11_DATA: 802.11 data frame
81  */
82 typedef enum {
83 	TXRX_FRM_RAW,
84 	TXRX_FRM_ETH2,
85 	TXRX_FRM_802_3,
86 	TXRX_FRM_802_11_MGMT,
87 	TXRX_FRM_802_11_CTRL,
88 	TXRX_FRM_802_11_DATA,
89 	TXRX_FRM_IGNORED,   /* This frame will be dropped */
90 	TXRX_FRM_MAX
91 } eFrameType;
92 
93 /**
94  * enum eFrameTxDir - frame tx direction
95  * @ANI_TXDIR_IBSS: IBSS frame
96  * @ANI_TXDIR_TODS: frame to DS
97  * @ANI_TXDIR_FROMDS: Frame from DS
98  * @ANI_TXDIR_WDS: WDS frame
99  */
100 typedef enum {
101 	ANI_TXDIR_IBSS = 0,
102 	ANI_TXDIR_TODS,
103 	ANI_TXDIR_FROMDS,
104 	ANI_TXDIR_WDS
105 } eFrameTxDir;
106 
107 /**
108  *struct sAniBeaconStruct - Beacon structure
109  * @beaconLength: beacon length
110  * @macHdr: mac header for beacon
111  */
112 typedef struct sAniBeaconStruct {
113 	uint32_t beaconLength;
114 	tSirMacMgmtHdr macHdr;
115 } qdf_packed tAniBeaconStruct, *tpAniBeaconStruct;
116 
117 /**
118  * struct sAniProbeRspStruct - probeRsp template structure
119  * @macHdr: mac header for probe response
120  */
121 struct sAniProbeRspStruct {
122 	tSirMacMgmtHdr macHdr;
123 	/* probeRsp body follows here */
124 } qdf_packed;
125 
126 /**
127  * med_sync_delay - medium sync delay info
128  * @med_sync_duration: medium sync duration
129  * @med_sync_ofdm_ed_thresh: medium sync OFDM ED threshold
130  * @med_sync_max_txop_num: medium sync max txop num
131  */
132 struct med_sync_delay {
133 	uint16_t med_sync_duration:8;
134 	uint16_t med_sync_ofdm_ed_thresh:4;
135 	uint16_t med_sync_max_txop_num:4;
136 };
137 
138 #ifdef WLAN_FEATURE_11BE_MLO
139 /**
140  * struct ml_partner_link_info: partner link info
141  * @link_id: partner link ID
142  * @link_addr: partner link address
143  * @ch_freq:Channel in Mhz
144  * @ch_phymode: Channel phymode
145  */
146 struct ml_partner_link_info {
147 	uint8_t vdev_id;
148 	uint8_t link_id;
149 	struct qdf_mac_addr link_addr;
150 	struct qdf_mac_addr self_mac_addr;
151 	struct wlan_channel channel_info;
152 };
153 
154 struct peer_ml_info {
155 	uint32_t vdev_id;
156 	uint32_t link_id;
157 	struct qdf_mac_addr link_addr;
158 	struct wlan_channel channel_info;
159 	struct qdf_mac_addr self_mac_addr;
160 	uint8_t num_links;
161 	struct ml_partner_link_info partner_info[MLD_MAX_LINKS - 1];
162 	uint8_t rec_max_simultaneous_links;
163 };
164 #endif
165 
166 /**
167  * struct tAddStaParams - add sta related parameters
168  * @bssId: bssid of sta
169  * @assocId: associd
170  * @staType: 0 - Self, 1 other/remote, 2 - bssid
171  * @staMac: MAC Address of STA
172  * @listenInterval: Listen interval
173  * @wmmEnabled: Support for 11e/WMM
174  * @uAPSD: U-APSD Flags: 1b per AC
175  * @maxSPLen: Max SP Length
176  * @htCapable: 11n HT capable STA
177  * @txChannelWidthSet: TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz
178  * @mimoPS: MIMO Power Save
179  * @maxAmpduDensity: 3 : 0~7 : 2^(11nAMPDUdensity -4)
180  * @maxAmsduSize: 1 : 3839 bytes, 0 : 7935 bytes
181  * @fShortGI40Mhz: short GI support for 40Mhz packets
182  * @fShortGI20Mhz: short GI support for 20Mhz packets
183  * @supportedRates: legacy supported rates
184  * @status: QDF status
185  * @staIdx: station index
186  * @updateSta: pdate the existing STA entry, if this flag is set
187  * @rmfEnabled: Robust Management Frame (RMF) enabled/disabled
188  * @encryptType: The unicast encryption type in the association
189  * @sessionId: PE session id
190  * @p2pCapableSta: if this is a P2P Capable Sta
191  * @csaOffloadEnable: CSA offload enable flag
192  * @vhtCapable: is VHT capabale or not
193  * @vhtTxChannelWidthSet: VHT channel width
194  * @vhtSupportedRxNss: VHT supported RX NSS
195  * @vhtTxBFCapable: txbf capable or not
196  * @vhtTxMUBformeeCapable: Bformee capable or not
197  * @enableVhtpAid: enable VHT AID
198  * @enableAmpduPs: AMPDU power save
199  * @enableHtSmps: enable HT SMPS
200  * @htSmpsconfig: HT SMPS config
201  * @htLdpcCapable: HT LDPC capable
202  * @vhtLdpcCapable: VHT LDPC capable
203  * @vht_mcs_10_11_supp: VHT MCS 10 & 11 support
204  * @smesessionId: sme session id
205  * @wpa_rsn: RSN capable
206  * @capab_info: capabality info
207  * @ht_caps: HT capabalities
208  * @vht_caps: VHT vapabalities
209  * @nwType: NW Type
210  * @maxTxPower: max tx power
211  * @nss: Return the number of spatial streams supported
212  * @stbc_capable: stbc capable
213  * @no_ptk_4_way: Do not need 4-way handshake
214  * @eht_capable: is EHT capabale or not
215  * @eht_config: EHT capability
216  * @eht_op: EHT operation
217  * @mld_mac_addr: mld mac address
218  * @is_assoc_peer: is assoc peer or not
219  * @emlsr_support: is EMLSR mode supported or not
220  * @msd_caps_present: is MSD capability present in MLO IE or not
221  * @link_id: per link id
222  * @emlsr_trans_timeout: EMLSR transition timeout value
223  *
224  * This structure contains parameter required for
225  * add sta request of upper layer.
226  */
227 typedef struct {
228 	tSirMacAddr bssId;
229 	uint16_t assocId;
230 	/* Field to indicate if this is sta entry for itself STA adding entry
231 	 * for itself or remote (AP adding STA after successful association.
232 	 * This may or may not be required in production driver.
233 	 */
234 	uint8_t staType;
235 	tSirMacAddr staMac;
236 	uint16_t listenInterval;
237 	uint8_t wmmEnabled;
238 	uint8_t uAPSD;
239 	uint8_t maxSPLen;
240 	uint8_t htCapable;
241 	enum phy_ch_width ch_width;
242 	tSirMacHTMIMOPowerSaveState mimoPS;
243 	uint8_t maxAmpduSize;
244 	uint8_t maxAmpduDensity;
245 	/* 11n Parameters */
246 	/* HT STA should set it to 1 if it is enabled in BSS
247 	 * HT STA should set it to 0 if AP does not support it.
248 	 * This indication is sent to HAL and HAL uses this flag
249 	 * to pickup up appropriate 40Mhz rates.
250 	 */
251 	uint8_t fShortGI40Mhz;
252 	uint8_t fShortGI20Mhz;
253 	struct supported_rates supportedRates;
254 	/*
255 	 * Following parameters are for returning status and station index from
256 	 * HAL to PE via response message. HAL does not read them.
257 	 */
258 	/* The return status of SIR_HAL_ADD_STA_REQ is reported here */
259 	QDF_STATUS status;
260 	uint8_t updateSta;
261 	uint8_t rmfEnabled;
262 	uint32_t encryptType;
263 	uint8_t sessionId;
264 	uint8_t p2pCapableSta;
265 	uint8_t csaOffloadEnable;
266 	uint8_t vhtCapable;
267 	uint8_t vhtSupportedRxNss;
268 	uint8_t vht_160mhz_nss;
269 	uint8_t vht_80p80mhz_nss;
270 	uint8_t vht_extended_nss_bw_cap;
271 	uint8_t vhtTxBFCapable;
272 	uint8_t enable_su_tx_bformer;
273 	uint8_t vhtTxMUBformeeCapable;
274 	uint8_t enableVhtpAid;
275 	uint8_t enableAmpduPs;
276 	uint8_t enableHtSmps;
277 	uint8_t htSmpsconfig;
278 	bool send_smps_action;
279 	uint8_t htLdpcCapable;
280 	uint8_t vhtLdpcCapable;
281 	uint8_t vht_mcs_10_11_supp;
282 	uint8_t smesessionId;
283 	uint8_t wpa_rsn;
284 	uint16_t capab_info;
285 	uint16_t ht_caps;
286 	uint32_t vht_caps;
287 	tSirNwType nwType;
288 	int8_t maxTxPower;
289 	uint8_t nonRoamReassoc;
290 	uint32_t nss;
291 #ifdef WLAN_FEATURE_11AX
292 	bool he_capable;
293 	tDot11fIEhe_cap he_config;
294 	tDot11fIEhe_op he_op;
295 	tDot11fIEhe_6ghz_band_cap he_6ghz_band_caps;
296 	uint16_t he_mcs_12_13_map;
297 #endif
298 	uint8_t stbc_capable;
299 #ifdef WLAN_SUPPORT_TWT
300 	uint8_t twt_requestor;
301 	uint8_t twt_responder;
302 #endif
303 	bool no_ptk_4_way;
304 #ifdef WLAN_FEATURE_11BE
305 	bool eht_capable;
306 	tDot11fIEeht_cap eht_config;
307 	tDot11fIEeht_op eht_op;
308 #endif
309 	struct med_sync_delay msd_caps;
310 #ifdef WLAN_FEATURE_11BE_MLO
311 	uint8_t mld_mac_addr[QDF_MAC_ADDR_SIZE];
312 	bool is_assoc_peer;
313 	bool emlsr_support;
314 	bool msd_caps_present;
315 	uint8_t link_id;
316 	uint16_t emlsr_trans_timeout;
317 	struct ml_partner_link_info ml_partner_info[MLD_MAX_LINKS - 1];
318 	struct peer_ml_info ml_info;
319 #endif
320 } tAddStaParams, *tpAddStaParams;
321 
322 /**
323  * struct tDeleteStaParams - parameters required for del sta request
324  * @assocId: association index
325  * @status: status
326  * @respReqd: is response required
327  * @sessionId: PE session id
328  * @smesessionId: SME session id
329  * @staType: station type
330  * @staMac: station mac
331  */
332 typedef struct {
333 	uint16_t assocId;
334 	QDF_STATUS status;
335 	uint8_t respReqd;
336 	uint8_t sessionId;
337 	uint8_t smesessionId;
338 	uint8_t staType;
339 	tSirMacAddr staMac;
340 } tDeleteStaParams, *tpDeleteStaParams;
341 
342 /**
343  * struct tSetStaKeyParams - set key params
344  * @encType: encryption type
345  * @defWEPIdx: Default WEP key, valid only for static WEP, must between 0 and 3
346  * @singleTidRc: 1=Single TID based Replay Count, 0=Per TID based RC
347  * @vdev_id: vdev_id
348  * @peerMacAddr: peer mac address
349  * @status: status
350  * @macaddr: MAC address of the peer
351  * @key_len: key len
352  *
353  * This is used by PE to configure the key information on a given station.
354  * When the secType is WEP40 or WEP104, the defWEPIdx is used to locate
355  * a preconfigured key from a BSS the station associated with; otherwise
356  * a new key descriptor is created based on the key field.
357  */
358 typedef struct {
359 	tAniEdType encType;
360 	uint8_t defWEPIdx;
361 	uint8_t singleTidRc;
362 	uint8_t vdev_id;
363 	struct qdf_mac_addr peer_macaddr;
364 	QDF_STATUS status;
365 	uint8_t sendRsp;
366 	struct qdf_mac_addr macaddr;
367 	uint16_t key_len;
368 } tSetStaKeyParams, *tpSetStaKeyParams;
369 
370 /**
371  * struct bss_params - parameters required for add bss params
372  * @bssId: MAC Address/BSSID
373  * @nwType: network type
374  * @shortSlotTimeSupported: is short slot time supported or not
375  * @llbCoexist: 11b coexist supported or not
376  * @beaconInterval: beacon interval
377  * @dtimPeriod: DTIM period
378  * @htCapable: Enable/Disable HT capabilities
379  * @rmfEnabled: RMF enabled/disabled
380  * @staContext: sta context
381  * @updateBss: update the existing BSS entry, if this flag is set
382  * @maxTxPower: max power to be used after applying the power constraint
383  * @bSpectrumMgtEnabled: Spectrum Management Capability, 1:Enabled, 0:Disabled.
384  * @vhtCapable: VHT capability
385  * @ch_width: VHT tx channel width
386  * @he_capable: HE Capability
387  * @no_ptk_4_way: Do not need 4-way handshake
388  * @eht_capable: EHT capability
389  */
390 struct bss_params {
391 	tSirMacAddr bssId;
392 	tSirNwType nwType;
393 	uint8_t shortSlotTimeSupported;
394 	uint8_t llbCoexist;
395 	tSirMacBeaconInterval beaconInterval;
396 	uint8_t dtimPeriod;
397 	uint8_t htCapable;
398 	uint8_t rmfEnabled;
399 	tAddStaParams staContext;
400 	/* HAL should update the existing BSS entry, if this flag is set.
401 	 * PE will set this flag in case of reassoc, where we want to reuse the
402 	 * the old bssID and still return success.
403 	 */
404 	uint8_t updateBss;
405 	int8_t maxTxPower;
406 	uint8_t vhtCapable;
407 	enum phy_ch_width ch_width;
408 	uint8_t nonRoamReassoc;
409 #ifdef WLAN_FEATURE_11AX
410 	bool he_capable;
411 	uint32_t he_sta_obsspd;
412 #endif
413 	bool no_ptk_4_way;
414 	uint16_t bss_max_idle_period;
415 #ifdef WLAN_FEATURE_11BE
416 	bool eht_capable;
417 #endif
418 };
419 
420 /**
421  * struct add_bss_rsp - params required for add bss response
422  * @vdev_id: vdev_id
423  * @status: QDF status
424  * @chain_mask: chain mask vdev start resp
425  * @smps_mode: smps mode in vdev start resp
426  */
427 struct add_bss_rsp {
428 	uint8_t vdev_id;
429 	QDF_STATUS status;
430 	uint32_t chain_mask;
431 	uint8_t smps_mode;
432 };
433 
434 typedef enum eDelStaReasonCode {
435 	HAL_DEL_STA_REASON_CODE_KEEP_ALIVE = 0x1,
436 	HAL_DEL_STA_REASON_CODE_TIM_BASED = 0x2,
437 	HAL_DEL_STA_REASON_CODE_RA_BASED = 0x3,
438 	HAL_DEL_STA_REASON_CODE_UNKNOWN_A2 = 0x4,
439 	HAL_DEL_STA_REASON_CODE_BTM_DISASSOC_IMMINENT = 0x5,
440 	HAL_DEL_STA_REASON_CODE_SA_QUERY_TIMEOUT = 0x6,
441 	HAL_DEL_STA_REASON_CODE_XRETRY = 0x7,
442 } tDelStaReasonCode;
443 
444 typedef enum eSmpsModeValue {
445 	STATIC_SMPS_MODE = 0x0,
446 	DYNAMIC_SMPS_MODE = 0x1,
447 	SMPS_MODE_RESERVED = 0x2,
448 	SMPS_MODE_DISABLED = 0x3
449 } tSmpsModeValue;
450 
451 /**
452  * struct tDeleteStaContext - params required for delete sta request
453  * @assocId: association id
454  * @bssId: mac address
455  * @addr2: mac address
456  * @reasonCode: reason code
457  * @rssi: rssi value during disconnection
458  */
459 typedef struct {
460 	bool is_tdls;
461 	uint8_t vdev_id;
462 	uint16_t assocId;
463 	tSirMacAddr bssId;
464 	tSirMacAddr addr2;
465 	uint16_t reasonCode;
466 	int8_t rssi;
467 } tDeleteStaContext, *tpDeleteStaContext;
468 
469 #ifdef FEATURE_OEM_DATA_SUPPORT
470 
471 #ifndef OEM_DATA_RSP_SIZE
472 #define OEM_DATA_RSP_SIZE 1724
473 #endif
474 
475 /**
476  * struct tStartOemDataRsp - start OEM Data response
477  * @target_rsp: Indicates if the rsp is from Target or WMA generated.
478  * @rsp_len: oem data response length
479  * @oem_data_rsp: pointer to OEM Data response
480  */
481 typedef struct {
482 	bool target_rsp;
483 	uint32_t rsp_len;
484 	uint8_t *oem_data_rsp;
485 } tStartOemDataRsp, *tpStartOemDataRsp;
486 #endif /* FEATURE_OEM_DATA_SUPPORT */
487 
488 /**
489  * struct beacon_gen_params - params required for beacon gen request
490  * @bssdd: BSSID for which it is time to generate a beacon
491  */
492 struct beacon_gen_params {
493 	tSirMacAddr bssid;
494 };
495 
496 /**
497  * struct tSendbeaconParams - send beacon parameters
498  * vdev_id: vdev id
499  * @bssId: BSSID mac address
500  * @beacon: beacon data
501  * @beaconLength: beacon length of template
502  * @timIeOffset: TIM IE offset
503  * @p2pIeOffset: P2P IE offset
504  * @csa_count_offset: Offset of Switch count field in CSA IE
505  * @ecsa_count_offset: Offset of Switch count field in ECSA IE
506  * @reason: bcn update reason
507  * @status: beacon send status
508  */
509 typedef struct {
510 	uint8_t vdev_id;
511 	tSirMacAddr bssId;
512 	uint8_t beacon[SIR_MAX_BEACON_SIZE];
513 	uint32_t beaconLength;
514 	uint32_t timIeOffset;
515 	uint16_t p2pIeOffset;
516 	uint32_t csa_count_offset;
517 	uint32_t ecsa_count_offset;
518 	enum sir_bcn_update_reason reason;
519 	QDF_STATUS status;
520 #ifdef WLAN_FEATURE_11BE_MLO
521 	struct mlo_bcn_templ_partner_links mlo_partner;
522 #endif
523 } tSendbeaconParams, *tpSendbeaconParams;
524 
525 /**
526  * struct tSendProbeRespParams - send probe response parameters
527  * @bssId: BSSID
528  * @probeRespTemplate: probe response template
529  * @probeRespTemplateLen: probe response template length
530  * @ucProxyProbeReqValidIEBmap: valid IE bitmap
531  * @go_ignore_non_p2p_probe_req: go ignore non-p2p probe req
532  */
533 typedef struct sSendProbeRespParams {
534 	tSirMacAddr bssId;
535 	uint8_t probeRespTemplate[SIR_MAX_PROBE_RESP_SIZE];
536 	uint32_t probeRespTemplateLen;
537 	uint32_t ucProxyProbeReqValidIEBmap[8];
538 	bool go_ignore_non_p2p_probe_req;
539 } tSendProbeRespParams, *tpSendProbeRespParams;
540 
541 /**
542  * struct tSetBssKeyParams - BSS key parameters
543  * @vdev_id: vdev id id
544  * @status: return status of command
545  * @macaddr: MAC address of the peer
546  * @key_len: key len
547  */
548 typedef struct {
549 	uint8_t vdev_id;
550 	QDF_STATUS status;
551 	struct qdf_mac_addr macaddr;
552 	uint16_t key_len;
553 } tSetBssKeyParams, *tpSetBssKeyParams;
554 
555 /**
556  * struct tUpdateBeaconParams - update beacon request parameters
557  * @bss_idx: BSSID index
558  * @fShortPreamble: shortPreamble mode
559  * @fShortSlotTime: short Slot time
560  * @beaconInterval: Beacon Interval
561  * @llaCoexist: 11a coexist
562  * @llbCoexist: 11b coexist
563  * @llgCoexist: 11g coexist
564  * @ht20MhzCoexist: HT 20MHz coexist
565  * @fLsigTXOPProtectionFullSupport: TXOP protection supported or not
566  * @fRIFSMode: RIFS mode
567  * @paramChangeBitmap: change bitmap
568  * @vdev_id: vdev_id
569  */
570 typedef struct {
571 	uint8_t bss_idx;
572 	uint8_t fShortPreamble;
573 	uint8_t fShortSlotTime;
574 	uint16_t beaconInterval;
575 	uint8_t llaCoexist;
576 	uint8_t llbCoexist;
577 	uint8_t llgCoexist;
578 	uint8_t ht20MhzCoexist;
579 	uint8_t llnNonGFCoexist;
580 	uint8_t fLsigTXOPProtectionFullSupport;
581 	uint8_t fRIFSMode;
582 	uint16_t paramChangeBitmap;
583 	uint8_t vdev_id;
584 	uint32_t bss_color;
585 	bool bss_color_disabled;
586 } tUpdateBeaconParams, *tpUpdateBeaconParams;
587 
588 /**
589  * struct tUpdateVHTOpMode - VHT operating mode
590  * @opMode: VHT operating mode
591  * @staId: station id
592  * @smesessionId: SME session id
593  * @peer_mac: peer mac address
594  */
595 typedef struct {
596 	uint16_t opMode;
597 	uint16_t smesessionId;
598 	tSirMacAddr peer_mac;
599 } tUpdateVHTOpMode, *tpUpdateVHTOpMode;
600 
601 /**
602  * struct tUpdateRxNss - update rx nss parameters
603  * @rxNss: rx nss value
604  * @staId: station id
605  * @smesessionId: sme session id
606  * @peer_mac: peer mac address
607  */
608 typedef struct {
609 	uint16_t rxNss;
610 	uint16_t smesessionId;
611 	tSirMacAddr peer_mac;
612 } tUpdateRxNss, *tpUpdateRxNss;
613 
614 /**
615  * struct tUpdateMembership - update membership parameters
616  * @membership: membership value
617  * @staId: station id
618  * @smesessionId: SME session id
619  * @peer_mac: peer mac address
620  */
621 typedef struct {
622 	uint32_t membership;
623 	uint16_t smesessionId;
624 	tSirMacAddr peer_mac;
625 } tUpdateMembership, *tpUpdateMembership;
626 
627 /**
628  * struct tUpdateUserPos - update user position parameters
629  * @userPos: user position
630  * @staId: station id
631  * @smesessionId: sme session id
632  * @peer_mac: peer mac address
633  */
634 typedef struct {
635 	uint32_t userPos;
636 	uint16_t smesessionId;
637 	tSirMacAddr peer_mac;
638 } tUpdateUserPos, *tpUpdateUserPos;
639 
640 /**
641  * struct tEdcaParams - EDCA parameters
642  * @vdev_id: vdev id
643  * @acbe: best effort access category
644  * @acbk: Background access category
645  * @acvi: video access category
646  * @acvo: voice access category
647  * @mu_edca_params: flag to indicate MU EDCA
648  */
649 typedef struct {
650 	uint16_t vdev_id;
651 	tSirMacEdcaParamRecord acbe;
652 	tSirMacEdcaParamRecord acbk;
653 	tSirMacEdcaParamRecord acvi;
654 	tSirMacEdcaParamRecord acvo;
655 	bool mu_edca_params;
656 } tEdcaParams, *tpEdcaParams;
657 
658 /**
659  * struct tSetMIMOPS - MIMO power save related parameters
660  * @htMIMOPSState: MIMO Power Save State
661  * @status: response status
662  * @fsendRsp: send response flag
663  * @peerMac: peer mac address
664  * @sessionId: session id
665  */
666 typedef struct sSet_MIMOPS {
667 	tSirMacHTMIMOPowerSaveState htMIMOPSState;
668 	QDF_STATUS status;
669 	uint8_t fsendRsp;
670 	tSirMacAddr peerMac;
671 	uint8_t sessionId;
672 } tSetMIMOPS, *tpSetMIMOPS;
673 
674 /**
675  * struct tMaxTxPowerParams - Max Tx Power parameters
676  * @bssId: BSSID is needed to identify which session issued this request
677  * @selfStaMacAddr: self mac address
678  * @power: tx power in dbm
679  * @dev_mode: device mode
680  * Request Type = SIR_HAL_SET_MAX_TX_POWER_REQ
681  */
682 typedef struct sMaxTxPowerParams {
683 	struct qdf_mac_addr bssId;
684 	struct qdf_mac_addr selfStaMacAddr;
685 	/* In request,
686 	 * power == MaxTx power to be used.
687 	 * In response,
688 	 * power == tx power used for management frames.
689 	 */
690 	int8_t power;
691 	enum QDF_OPMODE dev_mode;
692 } tMaxTxPowerParams, *tpMaxTxPowerParams;
693 
694 /**
695  * struct tMaxTxPowerPerBandParams - max tx power per band info
696  * @bandInfo: band info
697  * @power: power in dbm
698  */
699 typedef struct sMaxTxPowerPerBandParams {
700 	enum band_info bandInfo;
701 	int8_t power;
702 } tMaxTxPowerPerBandParams, *tpMaxTxPowerPerBandParams;
703 
704 /**
705  * struct set_ie_param - set IE params structure
706  * @pdev_id: pdev id
707  * @ie_type: IE type
708  * @nss: Nss value
709  * @ie_len: IE length
710  * @ie_ptr: Pointer to IE data
711  *
712  * Holds the set pdev IE req data.
713  */
714 struct set_ie_param {
715 	uint8_t pdev_id;
716 	uint8_t ie_type;
717 	uint8_t nss;
718 	uint8_t ie_len;
719 	uint8_t *ie_ptr;
720 };
721 
722 /**
723  * struct set_dtim_params - dtim params
724  * @session_id: SME Session ID
725  * @dtim_period: dtim period
726  */
727 struct set_dtim_params {
728 	uint8_t session_id;
729 	uint8_t dtim_period;
730 };
731 
732 #define DOT11_HT_IE     1
733 #define DOT11_VHT_IE    2
734 
735 /**
736  * struct del_vdev_params - Del Sta Self params
737  * @session_id: SME Session ID
738  * @status: response status code
739  * @vdev: Object to vdev
740  */
741 struct del_vdev_params {
742 	tSirMacAddr self_mac_addr;
743 	uint8_t vdev_id;
744 	uint32_t status;
745 	struct wlan_objmgr_vdev *vdev;
746 };
747 
748 /**
749  * struct del_sta_self_rsp_params - Del Sta Self response params
750  * @self_sta_param: sta params
751  * @generate_rsp: generate response to upper layers
752  */
753 struct del_sta_self_rsp_params {
754 	struct del_vdev_params *self_sta_param;
755 };
756 
757 /**
758  * struct send_peer_unmap_conf_params - Send Peer Unmap Conf param
759  * @vdev_id: vdev ID
760  * @peer_id_cnt: peer_id count
761  * @peer_id_list: list of peer IDs
762  */
763 struct send_peer_unmap_conf_params {
764 	uint8_t vdev_id;
765 	uint32_t peer_id_cnt;
766 	uint16_t *peer_id_list;
767 };
768 
769 /**
770  * struct peer_create_rsp_params  - Peer create response parameters
771  * @peer_mac: Peer mac address
772  */
773 struct peer_create_rsp_params {
774 	struct qdf_mac_addr peer_mac;
775 };
776 
777 /**
778  * struct tDisableIntraBssFwd - intra bss forward parameters
779  * @sessionId: session id
780  * @disableintrabssfwd: disable intra bss forward flag
781  */
782 typedef struct sDisableIntraBssFwd {
783 	uint16_t sessionId;
784 	bool disableintrabssfwd;
785 } qdf_packed tDisableIntraBssFwd, *tpDisableIntraBssFwd;
786 
787 #ifdef WLAN_FEATURE_STATS_EXT
788 /**
789  * struct tStatsExtRequest - ext stats request
790  * @vdev_id: vdev id
791  * @request_data_len: request data length
792  * @request_data: request data
793  */
794 typedef struct sStatsExtRequest {
795 	uint32_t vdev_id;
796 	uint32_t request_data_len;
797 	uint8_t request_data[];
798 } tStatsExtRequest, *tpStatsExtRequest;
799 #endif /* WLAN_FEATURE_STATS_EXT */
800 
801 #endif /* _HALMSGAPI_H_ */
802