xref: /wlan-driver/qcacld-3.0/core/hdd/inc/wlan_hdd_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 /**
21*5113495bSYour Name  * DOC: wlan_hdd_he.h
22*5113495bSYour Name  *
23*5113495bSYour Name  * WLAN Host Device Driver file for 802.11ax (High Efficiency) support.
24*5113495bSYour Name  *
25*5113495bSYour Name  */
26*5113495bSYour Name 
27*5113495bSYour Name #if !defined(WLAN_HDD_HE_H)
28*5113495bSYour Name #define WLAN_HDD_HE_H
29*5113495bSYour Name 
30*5113495bSYour Name struct hdd_context;
31*5113495bSYour Name struct wma_tgt_cfg;
32*5113495bSYour Name struct hdd_beacon_data;
33*5113495bSYour Name struct sap_config;
34*5113495bSYour Name 
35*5113495bSYour Name #ifdef WLAN_FEATURE_11AX
36*5113495bSYour Name /**
37*5113495bSYour Name  * enum qca_wlan_vendor_attr_get_he_capabilities - attributes for HE caps
38*5113495bSYour Name  *						   vendor command.
39*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_INVALID: invalid
40*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_HE_SUPPORTED: to check if HE capabilities is supported
41*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_PHY_CAPAB: to get HE PHY capabilities
42*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_MAC_CAPAB: to get HE MAC capabilities
43*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_HE_MCS: to get HE MCS
44*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_NUM_SS: to get NUM SS
45*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_RU_IDX_MASK: to get RU index mask
46*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_PPE_THRESHOLD: to get PPE Threshold,
47*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_AFTER_LAST: next to last valid enum
48*5113495bSYour Name  * @QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_MAX: max value supported
49*5113495bSYour Name  *
50*5113495bSYour Name  * enum values are used for NL attributes for data used by
51*5113495bSYour Name  * QCA_NL80211_VENDOR_SUBCMD_GET_HE_CAPABILITIES sub command.
52*5113495bSYour Name  */
53*5113495bSYour Name enum qca_wlan_vendor_attr_get_he_capabilities {
54*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_INVALID = 0,
55*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_HE_SUPPORTED,
56*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_PHY_CAPAB,
57*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_MAC_CAPAB,
58*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_HE_MCS,
59*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_NUM_SS = 5,
60*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_RU_IDX_MASK,
61*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_PPE_THRESHOLD,
62*5113495bSYour Name 
63*5113495bSYour Name 	/* keep last */
64*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_AFTER_LAST,
65*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_MAX =
66*5113495bSYour Name 	QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_AFTER_LAST - 1,
67*5113495bSYour Name };
68*5113495bSYour Name 
69*5113495bSYour Name /* QCA_NL80211_VENDOR_SUBCMD_SR policy*/
70*5113495bSYour Name extern const struct nla_policy
71*5113495bSYour Name wlan_hdd_sr_policy[QCA_WLAN_VENDOR_ATTR_SR_MAX + 1];
72*5113495bSYour Name 
73*5113495bSYour Name /**
74*5113495bSYour Name  * hdd_update_tgt_he_cap() - Update HE related capabilities
75*5113495bSYour Name  * @hdd_ctx: HDD context
76*5113495bSYour Name  * @cfg: Target capabilities
77*5113495bSYour Name  *
78*5113495bSYour Name  * This function updaates WNI CFG with Target capabilities received as part of
79*5113495bSYour Name  * Default values present in WNI CFG are the values supported by FW/HW.
80*5113495bSYour Name  * INI should be introduced if user control is required to control the value.
81*5113495bSYour Name  *
82*5113495bSYour Name  * Return: None
83*5113495bSYour Name  */
84*5113495bSYour Name void hdd_update_tgt_he_cap(struct hdd_context *hdd_ctx,
85*5113495bSYour Name 			   struct wma_tgt_cfg *cfg);
86*5113495bSYour Name 
87*5113495bSYour Name /**
88*5113495bSYour Name  * wlan_hdd_check_11ax_support() - check if beacon IE and update hw mode
89*5113495bSYour Name  * @beacon: beacon IE buffer
90*5113495bSYour Name  * @config: pointer to sap config
91*5113495bSYour Name  *
92*5113495bSYour Name  * Check if HE cap IE is present in beacon IE, if present update hw mode
93*5113495bSYour Name  * to 11ax.
94*5113495bSYour Name  *
95*5113495bSYour Name  * Return: None
96*5113495bSYour Name  */
97*5113495bSYour Name void wlan_hdd_check_11ax_support(struct hdd_beacon_data *beacon,
98*5113495bSYour Name 				 struct sap_config *config);
99*5113495bSYour Name 
100*5113495bSYour Name /**
101*5113495bSYour Name  * hdd_update_he_cap_in_cfg() - update HE cap in global CFG
102*5113495bSYour Name  * @hdd_ctx: pointer to hdd context
103*5113495bSYour Name  *
104*5113495bSYour Name  * This API will update the HE config in CFG after taking intersection
105*5113495bSYour Name  * of INI and firmware capabilities provided reading CFG
106*5113495bSYour Name  *
107*5113495bSYour Name  * Return: 0 on success and errno on failure
108*5113495bSYour Name  */
109*5113495bSYour Name int hdd_update_he_cap_in_cfg(struct hdd_context *hdd_ctx);
110*5113495bSYour Name 
111*5113495bSYour Name /**
112*5113495bSYour Name  * wlan_hdd_cfg80211_get_he_cap() - get HE Capabilities
113*5113495bSYour Name  * @wiphy: Pointer to wiphy
114*5113495bSYour Name  * @wdev: Pointer to wdev
115*5113495bSYour Name  * @data: Pointer to data
116*5113495bSYour Name  * @data_len: Data length
117*5113495bSYour Name  *
118*5113495bSYour Name  * Return: 0 if success, non-zero for failure
119*5113495bSYour Name  */
120*5113495bSYour Name int wlan_hdd_cfg80211_get_he_cap(struct wiphy *wiphy,
121*5113495bSYour Name 				 struct wireless_dev *wdev, const void *data,
122*5113495bSYour Name 				 int data_len);
123*5113495bSYour Name #ifdef WLAN_FEATURE_SR
124*5113495bSYour Name /**
125*5113495bSYour Name  * wlan_hdd_cfg80211_sr_operations() - Spatial Reuse Operations
126*5113495bSYour Name  * @wiphy:   pointer to wireless wiphy structure.
127*5113495bSYour Name  * @wdev:    pointer to wireless_dev structure.
128*5113495bSYour Name  * @data:    Pointer to the data to be passed via vendor interface
129*5113495bSYour Name  * @data_len:Length of the data to be passed
130*5113495bSYour Name  *
131*5113495bSYour Name  * Return:   Return the Success or Failure code.
132*5113495bSYour Name  */
133*5113495bSYour Name int wlan_hdd_cfg80211_sr_operations(struct wiphy *wiphy,
134*5113495bSYour Name 				    struct wireless_dev *wdev,
135*5113495bSYour Name 				    const void *data, int data_len);
136*5113495bSYour Name 
137*5113495bSYour Name /**
138*5113495bSYour Name  * hdd_sr_register_callbacks() - register hdd callback for sr
139*5113495bSYour Name  * @hdd_ctx: hdd context
140*5113495bSYour Name  *
141*5113495bSYour Name  * Return: void
142*5113495bSYour Name  */
143*5113495bSYour Name void hdd_sr_register_callbacks(struct hdd_context *hdd_ctx);
144*5113495bSYour Name 
145*5113495bSYour Name #else
146*5113495bSYour Name static inline
wlan_hdd_cfg80211_sr_operations(struct wiphy * wiphy,struct wireless_dev * wdev,const void * data,int data_len)147*5113495bSYour Name int wlan_hdd_cfg80211_sr_operations(struct wiphy *wiphy,
148*5113495bSYour Name 				    struct wireless_dev *wdev,
149*5113495bSYour Name 				    const void *data, int data_len)
150*5113495bSYour Name {
151*5113495bSYour Name 	return -ENOTSUPP;
152*5113495bSYour Name }
153*5113495bSYour Name 
hdd_sr_register_callbacks(struct hdd_context * hdd_ctx)154*5113495bSYour Name static inline void hdd_sr_register_callbacks(struct hdd_context *hdd_ctx)
155*5113495bSYour Name {
156*5113495bSYour Name }
157*5113495bSYour Name #endif
158*5113495bSYour Name 
159*5113495bSYour Name #define FEATURE_11AX_VENDOR_COMMANDS                                    \
160*5113495bSYour Name {                                                                       \
161*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,                        \
162*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GET_HE_CAPABILITIES,   \
163*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |                           \
164*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV,                          \
165*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_get_he_cap,                           \
166*5113495bSYour Name 	vendor_command_policy(VENDOR_CMD_RAW_DATA, 0)                   \
167*5113495bSYour Name },									\
168*5113495bSYour Name {                                                                       \
169*5113495bSYour Name 	.info.vendor_id = QCA_NL80211_VENDOR_ID,                        \
170*5113495bSYour Name 	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_SR,			\
171*5113495bSYour Name 	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |                           \
172*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_NETDEV |                         \
173*5113495bSYour Name 		 WIPHY_VENDOR_CMD_NEED_RUNNING,				\
174*5113495bSYour Name 	.doit = wlan_hdd_cfg80211_sr_operations,			\
175*5113495bSYour Name 	vendor_command_policy(wlan_hdd_sr_policy,			\
176*5113495bSYour Name 			      QCA_WLAN_VENDOR_ATTR_SR_MAX)		\
177*5113495bSYour Name },
178*5113495bSYour Name 
179*5113495bSYour Name #else
hdd_update_tgt_he_cap(struct hdd_context * hdd_ctx,struct wma_tgt_cfg * cfg)180*5113495bSYour Name static inline void hdd_update_tgt_he_cap(struct hdd_context *hdd_ctx,
181*5113495bSYour Name 					 struct wma_tgt_cfg *cfg)
182*5113495bSYour Name {
183*5113495bSYour Name }
184*5113495bSYour Name 
wlan_hdd_check_11ax_support(struct hdd_beacon_data * beacon,struct sap_config * config)185*5113495bSYour Name static inline void wlan_hdd_check_11ax_support(struct hdd_beacon_data *beacon,
186*5113495bSYour Name 					       struct sap_config *config)
187*5113495bSYour Name {
188*5113495bSYour Name }
189*5113495bSYour Name 
hdd_update_he_cap_in_cfg(struct hdd_context * hdd_ctx)190*5113495bSYour Name static inline int hdd_update_he_cap_in_cfg(struct hdd_context *hdd_ctx)
191*5113495bSYour Name {
192*5113495bSYour Name 	return 0;
193*5113495bSYour Name }
194*5113495bSYour Name 
hdd_sr_register_callbacks(struct hdd_context * hdd_ctx)195*5113495bSYour Name static inline void hdd_sr_register_callbacks(struct hdd_context *hdd_ctx)
196*5113495bSYour Name {
197*5113495bSYour Name }
198*5113495bSYour Name 
199*5113495bSYour Name /* dummy definition */
200*5113495bSYour Name #define FEATURE_11AX_VENDOR_COMMANDS
201*5113495bSYour Name 
202*5113495bSYour Name #endif
203*5113495bSYour Name #endif /* if !defined(WLAN_HDD_HE_H)*/
204