xref: /wlan-driver/qcacld-3.0/core/wma/inc/wma_he.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-2020 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 #ifndef __WMA_HE_H
21*5113495bSYour Name #define __WMA_HE_H
22*5113495bSYour Name 
23*5113495bSYour Name #include "wma.h"
24*5113495bSYour Name #include "sir_api.h"
25*5113495bSYour Name #include "target_if.h"
26*5113495bSYour Name 
27*5113495bSYour Name /* Number of bits to shift on HE MCS 12 13 MAP to get the desired map */
28*5113495bSYour Name #define WMA_MCS_12_13_MAP_L80 16
29*5113495bSYour Name #define WMA_MCS_12_13_MAP_G80 8
30*5113495bSYour Name 
31*5113495bSYour Name /* Mask to fill tx and rx mcs rate maps to be sent to the FW */
32*5113495bSYour Name #define WMA_MCS_12_13_PEER_RATE_MAP 0x00ff0000
33*5113495bSYour Name 
34*5113495bSYour Name #ifdef WLAN_FEATURE_11AX
35*5113495bSYour Name /**
36*5113495bSYour Name  * wma_print_he_cap() - Print HE capabilities
37*5113495bSYour Name  * @he_cap: pointer to HE Capability
38*5113495bSYour Name  *
39*5113495bSYour Name  * Received HE capabilities are converted into dot11f structure.
40*5113495bSYour Name  * This function will print all the HE capabilities as stored
41*5113495bSYour Name  * in the dot11f structure.
42*5113495bSYour Name  *
43*5113495bSYour Name  * Return: None
44*5113495bSYour Name  */
45*5113495bSYour Name void wma_print_he_cap(tDot11fIEhe_cap *he_cap);
46*5113495bSYour Name 
47*5113495bSYour Name /**
48*5113495bSYour Name  * wma_print_he_ppet() - Prints HE PPE Threshold
49*5113495bSYour Name  * @he_ppet: PPE Threshold
50*5113495bSYour Name  *
51*5113495bSYour Name  * This function prints HE PPE Threshold as received from FW.
52*5113495bSYour Name  * Refer to the definition of wmi_ppe_threshold to understand
53*5113495bSYour Name  * how PPE thresholds are packed by FW for a given NSS and RU.
54*5113495bSYour Name  *
55*5113495bSYour Name  * Return: none
56*5113495bSYour Name  */
57*5113495bSYour Name void wma_print_he_ppet(void *ppet);
58*5113495bSYour Name 
59*5113495bSYour Name /**
60*5113495bSYour Name  * wma_print_he_phy_cap() - Print HE PHY Capability
61*5113495bSYour Name  * @phy_cap: pointer to PHY Capability
62*5113495bSYour Name  *
63*5113495bSYour Name  * This function prints HE PHY Capability received from FW.
64*5113495bSYour Name  *
65*5113495bSYour Name  * Return: none
66*5113495bSYour Name  */
67*5113495bSYour Name void wma_print_he_phy_cap(uint32_t *phy_cap);
68*5113495bSYour Name 
69*5113495bSYour Name /**
70*5113495bSYour Name  * wma_print_he_mac_cap_w1() - Print HE MAC Capability
71*5113495bSYour Name  * @mac_cap: MAC Capability
72*5113495bSYour Name  *
73*5113495bSYour Name  * This function prints HE MAC Capability received from FW.
74*5113495bSYour Name  *
75*5113495bSYour Name  * Return: none
76*5113495bSYour Name  */
77*5113495bSYour Name void wma_print_he_mac_cap_w1(uint32_t mac_cap);
78*5113495bSYour Name 
79*5113495bSYour Name /**
80*5113495bSYour Name  * wma_print_he_mac_cap_w2() - Print HE MAC Capability
81*5113495bSYour Name  * @mac_cap: MAC Capability
82*5113495bSYour Name  *
83*5113495bSYour Name  * This function prints HE MAC Capability received from FW.
84*5113495bSYour Name  *
85*5113495bSYour Name  * Return: none
86*5113495bSYour Name  */
87*5113495bSYour Name void wma_print_he_mac_cap_w2(uint32_t mac_cap);
88*5113495bSYour Name 
89*5113495bSYour Name /**
90*5113495bSYour Name  * wma_print_he_op() - Print HE Operation
91*5113495bSYour Name  * @he_cap: pointer to HE Operation
92*5113495bSYour Name  *
93*5113495bSYour Name  * Print HE operation stored as dot11f structure
94*5113495bSYour Name  *
95*5113495bSYour Name  * Return: None
96*5113495bSYour Name  */
97*5113495bSYour Name void wma_print_he_op(tDot11fIEhe_op *he_ops);
98*5113495bSYour Name 
99*5113495bSYour Name /**
100*5113495bSYour Name  * wma_update_target_ext_he_cap() - Update HE caps with given extended cap
101*5113495bSYour Name  * @tgt_hdl: target psoc information
102*5113495bSYour Name  * @tgt_cfg: Target config
103*5113495bSYour Name  *
104*5113495bSYour Name  * This function loop through each hardware mode and for each hardware mode
105*5113495bSYour Name  * again it loop through each MAC/PHY and pull the caps 2G and 5G specific
106*5113495bSYour Name  * HE caps and derives the final cap.
107*5113495bSYour Name  *
108*5113495bSYour Name  * Return: None
109*5113495bSYour Name  */
110*5113495bSYour Name void wma_update_target_ext_he_cap(struct target_psoc_info *tgt_hdl,
111*5113495bSYour Name 				  struct wma_tgt_cfg *tgt_cfg);
112*5113495bSYour Name 
113*5113495bSYour Name /*
114*5113495bSYour Name  * wma_he_update_tgt_services() - update tgt cfg to indicate 11ax support
115*5113495bSYour Name  * @wmi_handle: pointer to WMI handle
116*5113495bSYour Name  * @cfg: pointer to WMA target services
117*5113495bSYour Name  *
118*5113495bSYour Name  * Based on WMI SERVICES information, enable 11ax support and set DOT11AX bit
119*5113495bSYour Name  * in feature caps bitmap.
120*5113495bSYour Name  *
121*5113495bSYour Name  * Return: None
122*5113495bSYour Name  */
123*5113495bSYour Name void wma_he_update_tgt_services(struct wmi_unified *wmi_handle,
124*5113495bSYour Name 				struct wma_tgt_services *cfg);
125*5113495bSYour Name 
126*5113495bSYour Name /**
127*5113495bSYour Name  * wma_populate_peer_he_cap() - populate peer HE capabilities in peer assoc cmd
128*5113495bSYour Name  * @peer: pointer to peer assoc params
129*5113495bSYour Name  * @params: pointer to ADD STA params
130*5113495bSYour Name  *
131*5113495bSYour Name  * Return: None
132*5113495bSYour Name  */
133*5113495bSYour Name void wma_populate_peer_he_cap(struct peer_assoc_params *peer,
134*5113495bSYour Name 			      tpAddStaParams params);
135*5113495bSYour Name 
136*5113495bSYour Name /**
137*5113495bSYour Name  * wma_update_vdev_he_ops() - update he ops in vdev start request
138*5113495bSYour Name  * @he_ops: target he ops
139*5113495bSYour Name  * @he_op: source he ops
140*5113495bSYour Name  *
141*5113495bSYour Name  * Return: None
142*5113495bSYour Name  */
143*5113495bSYour Name void wma_update_vdev_he_ops(uint32_t *he_ops, tDot11fIEhe_op *he_op);
144*5113495bSYour Name 
145*5113495bSYour Name #define DOT11AX_HEMU_MODE 0x30
146*5113495bSYour Name #define HE_SUBFEE 0
147*5113495bSYour Name #define HE_SUBFER 1
148*5113495bSYour Name #define HE_MUBFEE 2
149*5113495bSYour Name #define HE_MUBFER 3
150*5113495bSYour Name 
151*5113495bSYour Name /**
152*5113495bSYour Name  * wma_get_hemu_mode() - get hemu mode
153*5113495bSYour Name  * @hemumode: pointer to have hemumode
154*5113495bSYour Name  * @mac: pointer to mac context
155*5113495bSYour Name  *
156*5113495bSYour Name  * Return: Success on proper hemumode else failure
157*5113495bSYour Name  */
158*5113495bSYour Name QDF_STATUS wma_get_hemu_mode(uint32_t *hemumode, struct mac_context *mac);
159*5113495bSYour Name 
160*5113495bSYour Name /**
161*5113495bSYour Name  * wma_set_he_txbf_params() - set HE Tx beamforming params to FW
162*5113495bSYour Name  * @vdev_id: VDEV id
163*5113495bSYour Name  * @su bfer: SU beamformer capability
164*5113495bSYour Name  * @su bfee: SU beamformee capability
165*5113495bSYour Name  * @mu bfer: MU beamformer capability
166*5113495bSYour Name  *
167*5113495bSYour Name  * Return: None
168*5113495bSYour Name  */
169*5113495bSYour Name void wma_set_he_txbf_params(uint8_t vdev_id, bool su_bfer,
170*5113495bSYour Name 			    bool su_bfee, bool mu_bfer);
171*5113495bSYour Name 
172*5113495bSYour Name 
173*5113495bSYour Name /**
174*5113495bSYour Name  * wma_set_he_txbf_cfg() - set HE Tx beamforming mlme cfg to FW
175*5113495bSYour Name  * @mac: Global MAC context
176*5113495bSYour Name  * @vdev_id: VDEV id
177*5113495bSYour Name  *
178*5113495bSYour Name  * Return: None
179*5113495bSYour Name  */
180*5113495bSYour Name void wma_set_he_txbf_cfg(struct mac_context *mac, uint8_t vdev_id);
181*5113495bSYour Name /**
182*5113495bSYour Name  * wma_vdev_set_he_bss_params() - set HE OPs in vdev start
183*5113495bSYour Name  * @wma: pointer to wma handle
184*5113495bSYour Name  * @vdev_id: VDEV id
185*5113495bSYour Name  * @he_info: pointer to he info
186*5113495bSYour Name  *
187*5113495bSYour Name  * Return: None
188*5113495bSYour Name  */
189*5113495bSYour Name void wma_vdev_set_he_bss_params(tp_wma_handle wma, uint8_t vdev_id,
190*5113495bSYour Name 				struct vdev_mlme_he_ops_info *he_info);
191*5113495bSYour Name 
192*5113495bSYour Name /**
193*5113495bSYour Name  * wma_vdev_set_he_config() - set HE Config in vdev start
194*5113495bSYour Name  * @wma: pointer to wma handle
195*5113495bSYour Name  * @vdev_id: VDEV id
196*5113495bSYour Name  * @add_bss: BSS params
197*5113495bSYour Name  *
198*5113495bSYour Name  * Return: None
199*5113495bSYour Name  */
200*5113495bSYour Name void wma_vdev_set_he_config(tp_wma_handle wma, uint8_t vdev_id,
201*5113495bSYour Name 				struct bss_params *add_bss);
202*5113495bSYour Name 
wma_is_peer_he_capable(tpAddStaParams params)203*5113495bSYour Name static inline bool wma_is_peer_he_capable(tpAddStaParams params)
204*5113495bSYour Name {
205*5113495bSYour Name 	return params->he_capable;
206*5113495bSYour Name }
207*5113495bSYour Name 
208*5113495bSYour Name /**
209*5113495bSYour Name  * wma_update_he_ops_ie() - update the HE OPS IE to firmware
210*5113495bSYour Name  * @wma: pointer to wma context
211*5113495bSYour Name  * @vdev_id: vdev id
212*5113495bSYour Name  * @he_ops: 32bit value of HE ops
213*5113495bSYour Name  *
214*5113495bSYour Name  * This API is used to send updated HE operational IE to firmware, so that
215*5113495bSYour Name  * firmware can be in sync with host
216*5113495bSYour Name  *
217*5113495bSYour Name  * Return: QDF_STATUS
218*5113495bSYour Name  */
219*5113495bSYour Name QDF_STATUS wma_update_he_ops_ie(tp_wma_handle wma, uint8_t vdev_id,
220*5113495bSYour Name 				tDot11fIEhe_op *he_ops);
221*5113495bSYour Name 
222*5113495bSYour Name /**
223*5113495bSYour Name  * wma_get_he_capabilities() - Get HE capabilities from WMA
224*5113495bSYour Name  * @he_cap: Pointer to HE capabilities
225*5113495bSYour Name  *
226*5113495bSYour Name  * Currently HE capabilities are not updated in wma_handle. This
227*5113495bSYour Name  * is an interface for upper layer to query capabilities from WMA.
228*5113495bSYour Name  * When the real use case arise, update wma_handle with HE capabilities
229*5113495bSYour Name  * as required.
230*5113495bSYour Name  *
231*5113495bSYour Name  * Return: QDF_STATUS
232*5113495bSYour Name  */
233*5113495bSYour Name QDF_STATUS wma_get_he_capabilities(struct he_capability *he_cap);
234*5113495bSYour Name 
235*5113495bSYour Name /**
236*5113495bSYour Name  * wma_set_he_vdev_param() - update he vdev param in wma
237*5113495bSYour Name  * @intr: pointer to wma_txrx_node
238*5113495bSYour Name  * @param_id: vdev param id
239*5113495bSYour Name  * @value: value of vdev param
240*5113495bSYour Name  *
241*5113495bSYour Name  * Result: None
242*5113495bSYour Name  */
243*5113495bSYour Name void wma_set_he_vdev_param(struct wma_txrx_node *intr,
244*5113495bSYour Name 			   wmi_conv_vdev_param_id param_id,
245*5113495bSYour Name 			   uint32_t value);
246*5113495bSYour Name 
247*5113495bSYour Name /**
248*5113495bSYour Name  * wma_get_he_vdev_param() - retrieve he vdev param from wma
249*5113495bSYour Name  * @intr: pointer to wma_txrx_node
250*5113495bSYour Name  * @param_id: vdev param id
251*5113495bSYour Name  *
252*5113495bSYour Name  * Result: param value
253*5113495bSYour Name  */
254*5113495bSYour Name uint32_t wma_get_he_vdev_param(struct wma_txrx_node *intr,
255*5113495bSYour Name 			       wmi_conv_vdev_param_id param_id);
256*5113495bSYour Name 
257*5113495bSYour Name /**
258*5113495bSYour Name  * wma_prevent_suspend_on_obss_color_collision() - prevent suspend on obss color
259*5113495bSYour Name  *						collision
260*5113495bSYour Name  * @vdev: pointer to vdev object
261*5113495bSYour Name  *
262*5113495bSYour Name  * Return: none
263*5113495bSYour Name  */
264*5113495bSYour Name void wma_prevent_suspend_on_obss_color_collision(struct wlan_objmgr_vdev *vdev);
265*5113495bSYour Name 
266*5113495bSYour Name /**
267*5113495bSYour Name  * wma_allow_suspend_after_obss_color_change() - allow suspend on obss color
268*5113495bSYour Name  *						change
269*5113495bSYour Name  * @vdev: pointer to vdev object
270*5113495bSYour Name  *
271*5113495bSYour Name  * Return: none
272*5113495bSYour Name  */
273*5113495bSYour Name void wma_allow_suspend_after_obss_color_change(struct wlan_objmgr_vdev *vdev);
274*5113495bSYour Name #else
wma_print_he_cap(tDot11fIEhe_cap * he_cap)275*5113495bSYour Name static inline void wma_print_he_cap(tDot11fIEhe_cap *he_cap)
276*5113495bSYour Name {
277*5113495bSYour Name }
278*5113495bSYour Name 
wma_print_he_ppet(void * ppet)279*5113495bSYour Name static inline void wma_print_he_ppet(void *ppet)
280*5113495bSYour Name {
281*5113495bSYour Name }
282*5113495bSYour Name 
wma_print_he_phy_cap(uint32_t * phy_cap)283*5113495bSYour Name static inline void wma_print_he_phy_cap(uint32_t *phy_cap)
284*5113495bSYour Name {
285*5113495bSYour Name }
286*5113495bSYour Name 
wma_print_he_mac_cap_w1(uint32_t mac_cap)287*5113495bSYour Name static inline void wma_print_he_mac_cap_w1(uint32_t mac_cap)
288*5113495bSYour Name {
289*5113495bSYour Name }
290*5113495bSYour Name 
wma_print_he_mac_cap_w2(uint32_t mac_cap)291*5113495bSYour Name static inline void wma_print_he_mac_cap_w2(uint32_t mac_cap)
292*5113495bSYour Name {
293*5113495bSYour Name }
294*5113495bSYour Name 
wma_print_he_op(tDot11fIEhe_op * he_ops)295*5113495bSYour Name static inline void wma_print_he_op(tDot11fIEhe_op *he_ops)
296*5113495bSYour Name {
297*5113495bSYour Name }
298*5113495bSYour Name 
wma_update_target_ext_he_cap(struct target_psoc_info * tgt_hdl,struct wma_tgt_cfg * tgt_cfg)299*5113495bSYour Name static inline void wma_update_target_ext_he_cap(struct
300*5113495bSYour Name 						target_psoc_info *tgt_hdl,
301*5113495bSYour Name 						struct wma_tgt_cfg *tgt_cfg)
302*5113495bSYour Name {
303*5113495bSYour Name }
304*5113495bSYour Name 
wma_he_update_tgt_services(struct wmi_unified * wmi_handle,struct wma_tgt_services * cfg)305*5113495bSYour Name static inline void wma_he_update_tgt_services(struct wmi_unified *wmi_handle,
306*5113495bSYour Name 					      struct wma_tgt_services *cfg)
307*5113495bSYour Name {
308*5113495bSYour Name 	cfg->en_11ax = false;
309*5113495bSYour Name 	return;
310*5113495bSYour Name }
311*5113495bSYour Name 
wma_populate_peer_he_cap(struct peer_assoc_params * peer,tpAddStaParams params)312*5113495bSYour Name static inline void wma_populate_peer_he_cap(struct peer_assoc_params *peer,
313*5113495bSYour Name 					    tpAddStaParams params)
314*5113495bSYour Name {
315*5113495bSYour Name }
316*5113495bSYour Name 
317*5113495bSYour Name static inline
wma_update_vdev_he_ops(uint32_t * he_ops,tDot11fIEhe_op * he_op)318*5113495bSYour Name void wma_update_vdev_he_ops(uint32_t *he_ops, tDot11fIEhe_op *he_op)
319*5113495bSYour Name {
320*5113495bSYour Name }
321*5113495bSYour Name 
wma_get_hemu_mode(uint32_t * hemumode,struct mac_context * mac)322*5113495bSYour Name static inline QDF_STATUS wma_get_hemu_mode(uint32_t *hemumode,
323*5113495bSYour Name 					   struct mac_context *mac)
324*5113495bSYour Name {
325*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
326*5113495bSYour Name }
327*5113495bSYour Name 
wma_set_he_txbf_params(uint8_t vdev_id,bool su_bfer,bool su_bfee,bool mu_bfer)328*5113495bSYour Name static inline void wma_set_he_txbf_params(uint8_t vdev_id, bool su_bfer,
329*5113495bSYour Name 					  bool su_bfee, bool mu_bfer)
330*5113495bSYour Name {
331*5113495bSYour Name }
332*5113495bSYour Name 
wma_set_he_txbf_cfg(struct mac_context * mac,uint8_t vdev_id)333*5113495bSYour Name static inline void wma_set_he_txbf_cfg(struct mac_context *mac, uint8_t vdev_id)
334*5113495bSYour Name {
335*5113495bSYour Name }
336*5113495bSYour Name 
wma_update_he_ops_ie(tp_wma_handle wma,uint8_t vdev_id,tDot11fIEhe_op * he_ops)337*5113495bSYour Name static inline  QDF_STATUS wma_update_he_ops_ie(tp_wma_handle wma,
338*5113495bSYour Name 			uint8_t vdev_id, tDot11fIEhe_op *he_ops)
339*5113495bSYour Name {
340*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
341*5113495bSYour Name }
342*5113495bSYour Name 
343*5113495bSYour Name static inline
wma_vdev_set_he_bss_params(tp_wma_handle wma,uint8_t vdev_id,struct vdev_mlme_he_ops_info * he_info)344*5113495bSYour Name void wma_vdev_set_he_bss_params(tp_wma_handle wma, uint8_t vdev_id,
345*5113495bSYour Name 				struct vdev_mlme_he_ops_info *he_info)
346*5113495bSYour Name {
347*5113495bSYour Name }
348*5113495bSYour Name 
wma_vdev_set_he_config(tp_wma_handle wma,uint8_t vdev_id,struct bss_params * add_bss)349*5113495bSYour Name static inline void wma_vdev_set_he_config(tp_wma_handle wma, uint8_t vdev_id,
350*5113495bSYour Name 					struct bss_params *add_bss)
351*5113495bSYour Name {
352*5113495bSYour Name }
353*5113495bSYour Name 
wma_is_peer_he_capable(tpAddStaParams params)354*5113495bSYour Name static inline bool wma_is_peer_he_capable(tpAddStaParams params)
355*5113495bSYour Name {
356*5113495bSYour Name 	return false;
357*5113495bSYour Name }
358*5113495bSYour Name 
wma_set_he_vdev_param(struct wma_txrx_node * intr,wmi_conv_vdev_param_id param_id,uint32_t value)359*5113495bSYour Name static inline void wma_set_he_vdev_param(struct wma_txrx_node *intr,
360*5113495bSYour Name 			wmi_conv_vdev_param_id param_id, uint32_t value)
361*5113495bSYour Name {
362*5113495bSYour Name }
363*5113495bSYour Name 
wma_get_he_vdev_param(struct wma_txrx_node * intr,wmi_conv_vdev_param_id param_id)364*5113495bSYour Name static inline uint32_t wma_get_he_vdev_param(struct wma_txrx_node *intr,
365*5113495bSYour Name 					     wmi_conv_vdev_param_id param_id)
366*5113495bSYour Name {
367*5113495bSYour Name 	return 0;
368*5113495bSYour Name }
369*5113495bSYour Name 
wma_prevent_suspend_on_obss_color_collision(struct wlan_objmgr_vdev * vdev)370*5113495bSYour Name static inline void wma_prevent_suspend_on_obss_color_collision(
371*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev)
372*5113495bSYour Name {
373*5113495bSYour Name }
374*5113495bSYour Name 
wma_allow_suspend_after_obss_color_change(struct wlan_objmgr_vdev * vdev)375*5113495bSYour Name static inline void wma_allow_suspend_after_obss_color_change(
376*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev)
377*5113495bSYour Name {
378*5113495bSYour Name }
379*5113495bSYour Name #endif
380*5113495bSYour Name 
381*5113495bSYour Name #endif /* __WMA_HE_H */
382