xref: /wlan-dirver/qca-wifi-host-cmn/os_if/linux/wifi_pos/inc/os_if_wifi_pos.h (revision 5b2be6343099ee3c6fb80bd71f2a3bea385acd19)
1 /*
2  * Copyright (c) 2012-2017, 2020 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022 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 /**
21  * DOC: os_if_wifi_pos.h
22  * This file provide declaration of wifi_pos's os_if APIs
23  */
24 #ifndef _OS_IF_WIFI_POS_H_
25 #define _OS_IF_WIFI_POS_H_
26 
27 #include "qdf_types.h"
28 #include "qdf_status.h"
29 #include <wlan_objmgr_cmn.h>
30 #include "wifi_pos_public_struct.h"
31 #include "wlan_cfg80211.h"
32 
33 /* forward declaration */
34 struct wifi_pos_ch_info;
35 struct wlan_objmgr_psoc;
36 struct wifi_pos_driver_caps;
37 
38 #ifdef WIFI_POS_CONVERGED
39 #define FEATURE_WIFI_POS_11AZ_AUTH_EVENTS                              \
40 [QCA_NL80211_VENDOR_SUBCMD_PASN_AUTH_STATUS_INDEX] = {                 \
41 	.vendor_id = QCA_NL80211_VENDOR_ID,                            \
42 	.subcmd = QCA_NL80211_VENDOR_SUBCMD_PASN,                      \
43 },
44 
45 /**
46  * os_if_wifi_pos_register_nl() - abstration API to register callback with GENL
47  * socket.
48  *
49  * Return: status of operation
50  */
51 int os_if_wifi_pos_register_nl(void);
52 
53 /**
54  * os_if_wifi_pos_deregister_nl() - abstration API to deregister callback with
55  * GENL socket.
56  *
57  * Return: status of operation
58  */
59 int os_if_wifi_pos_deregister_nl(void);
60 
61 /**
62  * os_if_wifi_pos_send_peer_status() - Function to send peer status to a
63  * registered application
64  * @peer_mac: MAC address of peer
65  * @peer_status: ePeerConnected or ePeerDisconnected
66  * @peer_timing_meas_cap: 0: RTT/RTT2, 1: RTT3. Default is 0
67  * @session_id: SME session id, i.e. vdev_id
68  * @chan_info: operating channel information
69  * @dev_mode: dev mode for which indication is sent
70  *
71  * Return: none
72  */
73 void os_if_wifi_pos_send_peer_status(struct qdf_mac_addr *peer_mac,
74 				uint8_t peer_status,
75 				uint8_t peer_timing_meas_cap,
76 				uint8_t session_id,
77 				struct wifi_pos_ch_info *chan_info,
78 				enum QDF_OPMODE dev_mode);
79 
80 /**
81  * os_if_wifi_pos_populate_caps() - populate oem capabilities
82  * @psoc: psoc object
83  * @caps: pointer to populate the capabilities
84  *
85  * Return: error code
86  */
87 int os_if_wifi_pos_populate_caps(struct wlan_objmgr_psoc *psoc,
88 				struct wifi_pos_driver_caps *caps);
89 #else
90 #define FEATURE_WIFI_POS_11AZ_AUTH_EVENTS
91 
92 static inline int os_if_wifi_pos_register_nl(void)
93 {
94 	return 0;
95 }
96 
97 static inline int os_if_wifi_pos_deregister_nl(void)
98 {
99 	return 0;
100 }
101 
102 static inline void os_if_wifi_pos_send_peer_status(
103 		struct qdf_mac_addr *peer_mac,
104 		uint8_t peer_status,
105 		uint8_t peer_timing_meas_cap,
106 		uint8_t session_id,
107 		struct wifi_pos_ch_info *chan_info,
108 		enum QDF_OPMODE dev_mode)
109 {
110 }
111 
112 static inline int os_if_wifi_pos_populate_caps(struct wlan_objmgr_psoc *psoc,
113 					struct wifi_pos_driver_caps *caps)
114 {
115 	return 0;
116 }
117 #endif
118 
119 #ifdef CNSS_GENL
120 /**
121  * enum cld80211_vendor_sub_cmds
122  * @CLD80211_VENDOR_SUB_CMD_INVALID: invalid cmd type
123  * @CLD80211_VENDOR_SUB_CMD_REGISTRATION: app registration
124  * @CLD80211_VENDOR_SUB_CMD_SET_CAPS: set driver capabilities
125  * @CLD80211_VENDOR_SUB_CMD_GET_CAPS: get driver capabilities
126  * @CLD80211_VENDOR_SUB_CMD_GET_CH_INFO: get channel info
127  * @CLD80211_VENDOR_SUB_CMD_OEM_DATA: oem data req/rsp
128  * @CLD80211_VENDOR_SUB_CMD_OEM_ERROR: oem error rsp
129  * @CLD80211_VENDOR_SUB_CMD_PEER_STATUS_IND: peer status indication
130  * @CLD80211_VENDOR_SUB_CMD_MAX: Max cld80211 vendor sub cmds
131  */
132 enum cld80211_vendor_sub_cmds {
133 	CLD80211_VENDOR_SUB_CMD_INVALID = 0,
134 	CLD80211_VENDOR_SUB_CMD_REGISTRATION = 1,
135 	CLD80211_VENDOR_SUB_CMD_SET_CAPS = 2,
136 	CLD80211_VENDOR_SUB_CMD_GET_CAPS = 3,
137 	CLD80211_VENDOR_SUB_CMD_GET_CH_INFO = 4,
138 	CLD80211_VENDOR_SUB_CMD_OEM_DATA = 5,
139 	CLD80211_VENDOR_SUB_CMD_OEM_ERROR = 6,
140 	CLD80211_VENDOR_SUB_CMD_PEER_STATUS_IND = 7,
141 	/* keep last */
142 	CLD80211_VENDOR_SUB_CMD__AFTER_LAST,
143 	CLD80211_VENDOR_SUB_CMD_MAX =
144 		CLD80211_VENDOR_SUB_CMD__AFTER_LAST - 1
145 };
146 
147 /**
148  * enum cld80211_sub_attr_cap_rsp - Capability response sub attribute
149  * @CLD80211_SUB_ATTR_CAPS_INVALID: Invalid capability
150  * @CLD80211_SUB_ATTR_CAPS_OEM_TARGET_SIGNATURE: OEM target signature
151  * @CLD80211_SUB_ATTR_CAPS_OEM_TARGET_TYPE: OEM target type
152  * @CLD80211_SUB_ATTR_CAPS_OEM_FW_VERSION: OEM firmware version
153  * @CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_MAJOR: Driver version major
154  * @CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_MINOR: Driver version minor
155  * @CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_PATCH: Driver version patch
156  * @CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_BUILD: Driver version build
157  * @CLD80211_SUB_ATTR_CAPS_ALLOWED_DWELL_TIME_MIN: Allowed dwell time min
158  * @CLD80211_SUB_ATTR_CAPS_ALLOWED_DWELL_TIME_MAX: Allowed dwell time max
159  * @CLD80211_SUB_ATTR_CAPS_CURRENT_DWELL_TIME_MIN: Current dwell time min
160  * @CLD80211_SUB_ATTR_CAPS_CURRENT_DWELL_TIME_MAX: Current dwell time max
161  * @CLD80211_SUB_ATTR_CAPS_SUPPORTED_BANDS: Supported bands
162  * @CLD80211_SUB_ATTR_CAPS_USER_DEFINED_CAPS: User defined capabilities
163  * @CLD80211_SUB_ATTR_CAPS_MAX: Max number for CAP sub attribute
164  *
165  */
166 enum cld80211_sub_attr_cap_rsp {
167 	CLD80211_SUB_ATTR_CAPS_INVALID = 0,
168 	CLD80211_SUB_ATTR_CAPS_OEM_TARGET_SIGNATURE = 1,
169 	CLD80211_SUB_ATTR_CAPS_OEM_TARGET_TYPE = 2,
170 	CLD80211_SUB_ATTR_CAPS_OEM_FW_VERSION = 3,
171 	CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_MAJOR = 4,
172 	CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_MINOR = 5,
173 	CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_PATCH = 6,
174 	CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_BUILD = 7,
175 	CLD80211_SUB_ATTR_CAPS_ALLOWED_DWELL_TIME_MIN = 8,
176 	CLD80211_SUB_ATTR_CAPS_ALLOWED_DWELL_TIME_MAX = 9,
177 	CLD80211_SUB_ATTR_CAPS_CURRENT_DWELL_TIME_MIN = 10,
178 	CLD80211_SUB_ATTR_CAPS_CURRENT_DWELL_TIME_MAX = 11,
179 	CLD80211_SUB_ATTR_CAPS_SUPPORTED_BANDS = 12,
180 	CLD80211_SUB_ATTR_CAPS_USER_DEFINED_CAPS = 13,
181 
182 	/* keep last */
183 	CLD80211_SUB_ATTR_CAPS_AFTER_LAST,
184 	CLD80211_SUB_ATTR_CAPS_MAX =
185 		CLD80211_SUB_ATTR_CAPS_AFTER_LAST - 1
186 };
187 
188 /**
189  * enum cld80211_sub_attr_channel_rsp - Chan info response sub attribute
190  * @CLD80211_SUB_ATTR_CH_RESP_INVALID: Invalid channel resp
191  * @CLD80211_SUB_ATTR_CH_MORE_DATA: More date sub attr for frag response
192  * @CLD80211_SUB_ATTR_CHANNEL_NUM_CHAN: Number of channels in response
193  * @CLD80211_SUB_ATTR_CHANNEL_LIST: Channel list nesting
194  * @CLD80211_SUB_ATTR_CH_CHAN_ID: Channel number
195  * @CLD80211_SUB_ATTR_CH_MHZ: Channel frequency
196  * @CLD80211_SUB_ATTR_CH_BAND_CF_1: Center frequency 1
197  * @CLD80211_SUB_ATTR_CH_BAND_CF_2: Center frequency 2
198  * @CLD80211_SUB_ATTR_CH_INFO: channel info
199  * @CLD80211_SUB_ATTR_CH_REG_INFO_1: regulatory info field 1
200  * @CLD80211_SUB_ATTR_CH_REG_INFO_2: regulatory info field 2
201  * @CLD80211_SUB_ATTR_CAPS_MAX: Max number for CHAN Info sub attribute
202  *
203  */
204 enum cld80211_sub_attr_channel_rsp {
205 	CLD80211_SUB_ATTR_CH_RESP_INVALID = 0,
206 	CLD80211_SUB_ATTR_CH_MORE_DATA = 1,
207 	CLD80211_SUB_ATTR_CHANNEL_NUM_CHAN = 2,
208 	CLD80211_SUB_ATTR_CH_LIST = 3,
209 	/* CH_* belongs to CH_LIST */
210 	CLD80211_SUB_ATTR_CH_CHAN_ID = 4,
211 	CLD80211_SUB_ATTR_CH_MHZ = 5,
212 	CLD80211_SUB_ATTR_CH_BAND_CF_1 = 6,
213 	CLD80211_SUB_ATTR_CH_BAND_CF_2 = 7,
214 	CLD80211_SUB_ATTR_CH_INFO = 8,
215 	CLD80211_SUB_ATTR_CH_REG_INFO_1 = 9,
216 	CLD80211_SUB_ATTR_CH_REG_INFO_2 = 10,
217 
218 	/* keep last */
219 	CLD80211_SUB_ATTR_CH_AFTER_LAST,
220 	CLD80211_SUB_ATTR_CH_MAX =
221 		CLD80211_SUB_ATTR_CH_AFTER_LAST - 1
222 
223 };
224 
225 /**
226  * enum cld80211_sub_attr_oem_data_req - OEM data req sub attribute
227  * @CLD80211_SUB_ATTR_MSG_OEM_DATA_INVALID: Invalid OEM data request
228  * @CLD80211_SUB_ATTR_MSG_OEM_DATA_FW: Data to Firmware
229  * @CLD80211_SUB_ATTR_MSG_OEM_DATA_DRIVER: Data to driver
230  * @CLD80211_SUB_ATTR_MSG_OEM_DATA_REQ_MAX: Max number for OEM data req sub
231  * attribute
232  *
233  * OEM data request sub attributes are NLA attributes in NLA type OEM data
234  * request.
235  *
236  */
237 enum cld80211_sub_attr_oem_data_req {
238 	CLD80211_SUB_ATTR_MSG_OEM_DATA_INVALID = 0,
239 	CLD80211_SUB_ATTR_MSG_OEM_DATA_FW = 1,
240 	CLD80211_SUB_ATTR_MSG_OEM_DATA_DRIVER = 2,
241 
242 	/* keep last */
243 	CLD80211_SUB_ATTR_MSG_OEM_DATA_REQ_AFTER_LAST,
244 	CLD80211_SUB_ATTR_MSG_OEM_DATA_REQ_MAX =
245 		CLD80211_SUB_ATTR_MSG_OEM_DATA_REQ_AFTER_LAST - 1
246 };
247 
248 /**
249  * enum cld80211_sub_attr_oem_data_resp - OEM message sub attribute
250  * @CLD80211_SUB_ATTR_OEM_DATA_INVALID: Invalid oem data resp
251  * @CLD80211_SUB_ATTR_OEM_MORE_DATA: more date sub attribute
252  * @CLD80211_SUB_ATTR_BINARY_DATA: Binary data sub attribute
253  * @CLD80211_SUB_ATTR_OEM_DATA_RESP_MAX: Max number for OEM data resp
254  * sub attribute
255  *
256  * OEM message sub attributes are interface between apps and driver to
257  * process NLA type request and response messages.
258  *
259  */
260 enum cld80211_sub_attr_oem_data_resp {
261 	CLD80211_SUB_ATTR_OEM_DATA_INVALID = 0,
262 	CLD80211_SUB_ATTR_OEM_MORE_DATA = 1,
263 	CLD80211_SUB_ATTR_BINARY_DATA = 2,
264 
265 	/* keep last */
266 	CLD80211_SUB_ATTR_OEM_DATA_RESP_AFTER_LAST,
267 	CLD80211_SUB_ATTR_OEM_DATA_RESP_MAX =
268 		CLD80211_SUB_ATTR_OEM_DATA_RESP_AFTER_LAST - 1
269 };
270 
271 /**
272  * enum cld80211_sub_attr_peer_info - peer info sub attribute
273  * @CLD80211_SUB_ATTR_PEER_INVALID: Invalid peer info
274  * @CLD80211_SUB_ATTR_PEER_MAC_ADDR: peer mac address
275  * @CLD80211_SUB_ATTR_PEER_STATUS: peer status
276  * @CLD80211_SUB_ATTR_PEER_VDEV_ID: peer vdevid
277  * @CLD80211_SUB_ATTR_PEER_CAPABILITY: peer capabilities
278  * @CLD80211_SUB_ATTR_PEER_RESERVED: reserved bytes
279  * @CLD80211_SUB_ATTR_PEER_CHAN_INFO: peer channel info
280  *
281  */
282 enum cld80211_sub_attr_peer_info {
283 	CLD80211_SUB_ATTR_PEER_INVALID = 0,
284 	CLD80211_SUB_ATTR_PEER_MAC_ADDR = 1,
285 	CLD80211_SUB_ATTR_PEER_STATUS = 2,
286 	CLD80211_SUB_ATTR_PEER_VDEV_ID = 3,
287 	CLD80211_SUB_ATTR_PEER_CAPABILITY = 4,
288 	CLD80211_SUB_ATTR_PEER_RESERVED = 5,
289 	CLD80211_SUB_ATTR_PEER_CHAN_INFO = 6,
290 
291 	/* keep last */
292 	CLD80211_SUB_ATTR_PEER_AFTER_LAST,
293 	CLD80211_SUB_ATTR_PEER_MAX =
294 		CLD80211_SUB_ATTR_PEER_AFTER_LAST - 1
295 };
296 #endif
297 
298 #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
299 /**
300  * os_if_wifi_pos_initiate_pasn_auth() - Initiate PASN authentication from
301  * userspace
302  * @vdev: Vdev object pointer
303  * @pasn_peer: PASN Peer list
304  * @num_pasn_peers: number of PASN peers
305  * @is_initiate_pasn: Initiate pasn or initiate flush keys
306  *
307  * Return: QDF_STATUS
308  */
309 QDF_STATUS os_if_wifi_pos_initiate_pasn_auth(struct wlan_objmgr_vdev *vdev,
310 					     struct wlan_pasn_request *pasn_peer,
311 					     uint8_t num_pasn_peers,
312 					     bool is_initiate_pasn);
313 #else
314 static inline
315 QDF_STATUS os_if_wifi_pos_initiate_pasn_auth(struct wlan_objmgr_vdev *vdev,
316 					     struct wlan_pasn_request *pasn_peer,
317 					     uint8_t num_pasn_peers,
318 					     bool is_initiate_pasn)
319 {
320 	return QDF_STATUS_E_NOSUPPORT;
321 }
322 #endif /* WLAN_FEATURE_RTT_11AZ_SUPPORT */
323 #endif /* _OS_IF_WIFI_POS_H_ */
324