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