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