1 /*
2 * Copyright (c) 2012-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 /**
21 * DOC: declares nan component os interface APIs
22 */
23
24 #ifndef _OS_IF_NAN_H_
25 #define _OS_IF_NAN_H_
26
27 #include "qdf_types.h"
28 #ifdef WLAN_FEATURE_NAN
29 #include "nan_public_structs.h"
30 #include "nan_ucfg_api.h"
31 #include "qca_vendor.h"
32 #include <wlan_cp_stats_chipset_stats.h>
33
34 /* QCA_NL80211_VENDOR_SUBCMD_NAN_EXT policy */
35 extern const struct nla_policy nan_attr_policy[
36 QCA_WLAN_VENDOR_ATTR_NAN_PARAMS_MAX + 1];
37
38 /* QCA_NL80211_VENDOR_SUBCMD_NDP policy */
39 extern const struct nla_policy vendor_attr_policy[
40 QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX + 1];
41
42 /**
43 * struct ndi_find_vdev_filter - find vdev filter object. this can be extended
44 * @ifname: interface name of vdev
45 * @found_vdev: found vdev object matching one or more of above params
46 */
47 struct ndi_find_vdev_filter {
48 const char *ifname;
49 struct wlan_objmgr_vdev *found_vdev;
50 };
51
52 /**
53 * os_if_nan_process_ndp_cmd: os_if api to handle nan request message
54 * @psoc: pointer to psoc object
55 * @data: request data. contains vendor cmd tlvs
56 * @data_len: length of data
57 * @is_ndp_allowed: Indicates whether to allow NDP creation.
58 * NDI creation is always allowed.
59 * @wdev: Wireless device structure pointer
60 *
61 * Return: status of operation
62 */
63 int os_if_nan_process_ndp_cmd(struct wlan_objmgr_psoc *psoc,
64 const void *data, int data_len,
65 bool is_ndp_allowed,
66 struct wireless_dev *wdev);
67
68 /**
69 * os_if_nan_register_hdd_callbacks: os_if api to register hdd callbacks
70 * @psoc: pointer to psoc object
71 * @cb_obj: struct pointer containing callbacks
72 *
73 * Return: status of operation
74 */
75 int os_if_nan_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
76 struct nan_callbacks *cb_obj);
77
78 /**
79 * os_if_nan_register_lim_callbacks: os_if api to register lim callbacks
80 * @psoc: pointer to psoc object
81 * @cb_obj: struct pointer containing callbacks
82 *
83 * Return: status of operation
84 */
85 int os_if_nan_register_lim_callbacks(struct wlan_objmgr_psoc *psoc,
86 struct nan_callbacks *cb_obj);
87
88 /**
89 * os_if_nan_post_ndi_create_rsp: os_if api to pos ndi create rsp to umac nan
90 * component
91 * @psoc: pointer to psoc object
92 * @vdev_id: vdev id of ndi
93 * @success: if create was success or failure
94 *
95 * Return: None
96 */
97 void os_if_nan_post_ndi_create_rsp(struct wlan_objmgr_psoc *psoc,
98 uint8_t vdev_id, bool success);
99
100 /**
101 * os_if_nan_post_ndi_delete_rsp: os_if api to pos ndi delete rsp to umac nan
102 * component
103 * @psoc: pointer to psoc object
104 * @vdev_id: vdev id of ndi
105 * @success: if delete was success or failure
106 *
107 * Return: None
108 */
109 void os_if_nan_post_ndi_delete_rsp(struct wlan_objmgr_psoc *psoc,
110 uint8_t vdev_id, bool success);
111
112 /**
113 * os_if_nan_ndi_session_end: os_if api to process ndi session end
114 * component
115 * @vdev: pointer to vdev deleted
116 *
117 * Return: None
118 */
119 void os_if_nan_ndi_session_end(struct wlan_objmgr_vdev *vdev);
120
121 /**
122 * os_if_nan_set_ndi_state: os_if api set NDI state
123 * @vdev: pointer to vdev deleted
124 * @state: value to set
125 *
126 * Return: status of operation
127 */
os_if_nan_set_ndi_state(struct wlan_objmgr_vdev * vdev,uint32_t state)128 static inline QDF_STATUS os_if_nan_set_ndi_state(struct wlan_objmgr_vdev *vdev,
129 uint32_t state)
130 {
131 return ucfg_nan_set_ndi_state(vdev, state);
132 }
133
134 /**
135 * os_if_nan_set_ndp_create_transaction_id: set ndp create transaction id
136 * @vdev: pointer to vdev object
137 * @val: value to set
138 *
139 * Return: status of operation
140 */
os_if_nan_set_ndp_create_transaction_id(struct wlan_objmgr_vdev * vdev,uint16_t val)141 static inline QDF_STATUS os_if_nan_set_ndp_create_transaction_id(
142 struct wlan_objmgr_vdev *vdev,
143 uint16_t val)
144 {
145 return ucfg_nan_set_ndp_create_transaction_id(vdev, val);
146 }
147
148 /**
149 * os_if_nan_set_ndp_delete_transaction_id: set ndp delete transaction id
150 * @vdev: pointer to vdev object
151 * @val: value to set
152 *
153 * Return: status of operation
154 */
os_if_nan_set_ndp_delete_transaction_id(struct wlan_objmgr_vdev * vdev,uint16_t val)155 static inline QDF_STATUS os_if_nan_set_ndp_delete_transaction_id(
156 struct wlan_objmgr_vdev *vdev,
157 uint16_t val)
158 {
159 return ucfg_nan_set_ndp_delete_transaction_id(vdev, val);
160 }
161
162 /**
163 * os_if_process_nan_req: os_if api to handle NAN requests attached to the
164 * vendor command QCA_NL80211_VENDOR_SUBCMD_NAN_EXT
165 * @pdev: pointer to pdev object
166 * @vdev_id: NAN vdev id
167 * @data: request data. contains vendor cmd tlvs
168 * @data_len: length of data
169 *
170 * Return: status of operation
171 */
172 int os_if_process_nan_req(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
173 const void *data, int data_len);
174 #else
175
os_if_nan_post_ndi_create_rsp(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,bool success)176 static inline void os_if_nan_post_ndi_create_rsp(struct wlan_objmgr_psoc *psoc,
177 uint8_t vdev_id, bool success)
178 {
179 }
180
os_if_nan_post_ndi_delete_rsp(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,bool success)181 static inline void os_if_nan_post_ndi_delete_rsp(struct wlan_objmgr_psoc *psoc,
182 uint8_t vdev_id, bool success)
183 {
184 }
185
186 #endif /* WLAN_FEATURE_NAN */
187
188 #if defined(WLAN_FEATURE_NAN) && defined(WLAN_CHIPSET_STATS)
189 /**
190 * os_if_cstats_log_ndp_initiator_req_evt() - Chipset stats for ndp
191 * initiator request
192 *
193 * @req : pointer to nan_datapath_initiator_req
194 *
195 * Return : void
196 */
197 void
198 os_if_cstats_log_ndp_initiator_req_evt(struct nan_datapath_initiator_req *req);
199
200 /**
201 * os_if_cstats_log_ndp_responder_req_evt() - Chipset stats for ndp
202 * responder request
203 *
204 * @vdev : pointer to vdev object
205 * @req : pointer to nan_datapath_responder_req
206 *
207 * Return : void
208 */
209 void
210 os_if_cstats_log_ndp_responder_req_evt(struct wlan_objmgr_vdev *vdev,
211 struct nan_datapath_responder_req *req);
212
213 /**
214 * os_if_cstats_log_ndp_end_req_evt() - Chipset stats for ndp end
215 * request event
216 *
217 * @vdev : pointer to vdev object
218 * @rq : pointer to nan_datapath_end_req
219 *
220 * Return : void
221 */
222 void os_if_cstats_log_ndp_end_req_evt(struct wlan_objmgr_vdev *vdev,
223 struct nan_datapath_end_req *rq);
224
225 /**
226 * os_if_cstats_log_ndp_initiator_resp_evt() - Chipset stats for ndp
227 * initiator request event
228 *
229 * @vdev : pointer to vdev object
230 * @rsp : pointer to nan_datapath_end_req
231 *
232 * Return : void
233 */
234 void
235 os_if_cstats_log_ndp_initiator_resp_evt(struct wlan_objmgr_vdev *vdev,
236 struct nan_datapath_initiator_rsp *rsp);
237
238 /**
239 * os_if_cstats_log_ndp_responder_resp_evt() - Chipset stats for ndp
240 * responder response event
241 *
242 * @vdev : pointer to vdev object
243 * @rsp : pointer to nan_datapath_responder_rsp
244 *
245 * Return : void
246 */
247 void
248 os_if_cstats_log_ndp_responder_resp_evt(struct wlan_objmgr_vdev *vdev,
249 struct nan_datapath_responder_rsp *rsp);
250
251 /**
252 * os_if_cstats_log_ndp_indication_evt() - Chipset stats for ndp
253 * indication event
254 *
255 * @vdev : pointer to vdev object
256 * @evt : pointer to nan_datapath_indication_event object
257 *
258 * Return : void
259 */
260 void
261 os_if_cstats_log_ndp_indication_evt(struct wlan_objmgr_vdev *vdev,
262 struct nan_datapath_indication_event *evt);
263
264 /**
265 * os_if_cstats_log_ndp_confirm_evt() - Chipset stats for ndp
266 * confirm event
267 *
268 * @vdev : pointer to vdev object
269 * @nc : pointer to nan_datapath_confirm_event
270 *
271 * Return : void
272 */
273 void os_if_cstats_log_ndp_confirm_evt(struct wlan_objmgr_vdev *vdev,
274 struct nan_datapath_confirm_event *nc);
275
276 /**
277 * os_if_cstats_log_ndp_end_rsp_evt() - Chipset stats for ndp
278 * end response event
279 *
280 * @vdev : pointer to vdev object
281 * @rsp : pointer to nan_datapath_end_rsp_event object
282 *
283 * Return : void
284 */
285 void os_if_cstats_log_ndp_end_rsp_evt(struct wlan_objmgr_vdev *vdev,
286 struct nan_datapath_end_rsp_event *rsp);
287
288 /**
289 * os_if_cstats_log_ndp_new_peer_evt() - Chipset stats for ndp
290 * new peer event
291 *
292 * @vdev : pointer to vdev object
293 * @peer_ind : pointer to nan_datapath_peer_ind object
294 *
295 * Return : void
296 */
297 void os_if_cstats_log_ndp_new_peer_evt(struct wlan_objmgr_vdev *vdev,
298 struct nan_datapath_peer_ind *peer_ind);
299
300 /**
301 * os_if_cstats_log_ndi_delete_resp_evt() - Chipset stats for ndi
302 * delete response event
303 *
304 * @vdev : pointer to vdev object
305 * @rsp : pointer to nan_datapath_inf_delete_rsp object
306 *
307 * Return : void
308 */
309 void
310 os_if_cstats_log_ndi_delete_resp_evt(struct wlan_objmgr_vdev *vdev,
311 struct nan_datapath_inf_delete_rsp *rsp);
312
313 /**
314 * os_if_cstats_log_nan_disc_enable_req_evt() - Chipset stats for nan
315 * discovery enable request
316 *
317 * @vdev_id : pointer to vdev object
318 * @nan_req : pointer to nan_enable_req object
319 *
320 * Return : void
321 */
322 void os_if_cstats_log_nan_disc_enable_req_evt(uint8_t vdev_id,
323 struct nan_enable_req *nan_req);
324
325 /**
326 * os_if_cstats_log_disable_nan_disc_evt() - Chipset stats for nan
327 * discovery disable event
328 *
329 * @pdev : pointer to pdev object
330 * @vdev_id : vdev ID
331 *
332 * Return : void
333 */
334 void os_if_cstats_log_disable_nan_disc_evt(struct wlan_objmgr_pdev *pdev,
335 uint8_t vdev_id);
336 #else
337 static inline void
os_if_cstats_log_ndp_initiator_req_evt(struct nan_datapath_initiator_req * req)338 os_if_cstats_log_ndp_initiator_req_evt(struct nan_datapath_initiator_req *req)
339 {
340 }
341
342 static inline void
os_if_cstats_log_ndp_responder_req_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_responder_req * req)343 os_if_cstats_log_ndp_responder_req_evt(struct wlan_objmgr_vdev *vdev,
344 struct nan_datapath_responder_req *req)
345 {
346 }
347
348 static inline void
os_if_cstats_log_ndp_end_req_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_end_req * rq)349 os_if_cstats_log_ndp_end_req_evt(struct wlan_objmgr_vdev *vdev,
350 struct nan_datapath_end_req *rq)
351 {
352 }
353
354 static inline void
os_if_cstats_log_ndp_initiator_resp_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_initiator_rsp * rsp)355 os_if_cstats_log_ndp_initiator_resp_evt(struct wlan_objmgr_vdev *vdev,
356 struct nan_datapath_initiator_rsp *rsp)
357 {
358 }
359
360 static inline void
os_if_cstats_log_ndp_responder_resp_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_responder_rsp * rsp)361 os_if_cstats_log_ndp_responder_resp_evt(struct wlan_objmgr_vdev *vdev,
362 struct nan_datapath_responder_rsp *rsp)
363 {
364 }
365
366 static inline void
os_if_cstats_log_ndp_indication_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_indication_event * event)367 os_if_cstats_log_ndp_indication_evt(struct wlan_objmgr_vdev *vdev,
368 struct nan_datapath_indication_event *event)
369 {
370 }
371
372 static inline void
os_if_cstats_log_ndp_confirm_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_confirm_event * nc)373 os_if_cstats_log_ndp_confirm_evt(struct wlan_objmgr_vdev *vdev,
374 struct nan_datapath_confirm_event *nc)
375 {
376 }
377
378 static inline void
os_if_cstats_log_ndp_end_rsp_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_end_rsp_event * rsp)379 os_if_cstats_log_ndp_end_rsp_evt(struct wlan_objmgr_vdev *vdev,
380 struct nan_datapath_end_rsp_event *rsp)
381 {
382 }
383
384 static inline void
os_if_cstats_log_ndp_new_peer_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_peer_ind * peer_ind)385 os_if_cstats_log_ndp_new_peer_evt(struct wlan_objmgr_vdev *vdev,
386 struct nan_datapath_peer_ind *peer_ind)
387 {
388 }
389
390 static inline void
os_if_cstats_log_ndi_delete_resp_evt(struct wlan_objmgr_vdev * vdev,struct nan_datapath_inf_delete_rsp * rsp)391 os_if_cstats_log_ndi_delete_resp_evt(struct wlan_objmgr_vdev *vdev,
392 struct nan_datapath_inf_delete_rsp *rsp)
393 {
394 }
395
396 static inline void
os_if_cstats_log_nan_disc_enable_req_evt(uint8_t vdev_id,struct nan_enable_req * nan_req)397 os_if_cstats_log_nan_disc_enable_req_evt(uint8_t vdev_id,
398 struct nan_enable_req *nan_req)
399 {
400 }
401
402 static inline void
os_if_cstats_log_disable_nan_disc_evt(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id)403 os_if_cstats_log_disable_nan_disc_evt(struct wlan_objmgr_pdev *pdev,
404 uint8_t vdev_id)
405 {
406 }
407 #endif /* WLAN_CHIPSET_STATS */
408 #endif
409