1 /*
2 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 /**
18 * DOC: wifi_pos_pasn_api.h
19 * This file declares public APIs of wifi positioning component
20 */
21 #ifndef _WIFI_POS_PASN_API_H_
22 #define _WIFI_POS_PASN_API_H_
23
24 /* Include files */
25 #include "wlan_objmgr_cmn.h"
26 #include "wifi_pos_utils_pub.h"
27 #include "wifi_pos_public_struct.h"
28
29 #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
30 /**
31 * wifi_pos_set_peer_ltf_keyseed_required() - Set LTF keyseed required
32 * for the peer
33 * @peer: Peer object
34 * @value: Value to set
35 *
36 * Return: QDF_STATUS
37 */
38 QDF_STATUS
39 wifi_pos_set_peer_ltf_keyseed_required(struct wlan_objmgr_peer *peer,
40 bool value);
41 /**
42 * wifi_pos_is_ltf_keyseed_required_for_peer() - Is LTF keyseed required for
43 * the given peer
44 * @peer: Peer object
45 *
46 * Return: true or false
47 */
48 bool wifi_pos_is_ltf_keyseed_required_for_peer(struct wlan_objmgr_peer *peer);
49
50 /**
51 * wifi_pos_handle_ranging_peer_create() - Handle ranging peer create
52 * @psoc: Pointer to PSOC
53 * @req: PASN request
54 * @vdev_id: vdev id
55 * @total_entries: Total entries
56 *
57 * Return: QDF_STATUS
58 */
59 QDF_STATUS wifi_pos_handle_ranging_peer_create(struct wlan_objmgr_psoc *psoc,
60 struct wlan_pasn_request *req,
61 uint8_t vdev_id,
62 uint8_t total_entries);
63
64 /**
65 * wifi_pos_set_11az_failed_peers() - Update the 11az failed peers to the
66 * context
67 * @vdev: Objmgr vdev pointer
68 * @mac_addr: mac address
69 */
70 void wifi_pos_set_11az_failed_peers(struct wlan_objmgr_vdev *vdev,
71 struct qdf_mac_addr *mac_addr);
72
73 /**
74 * wifi_pos_add_peer_to_list() - Add the peer mac to the secure/unsecure
75 * peer list in the 11az context
76 * @vdev: Pointer to vdev object
77 * @req: PASN peer create request pointer
78 * @is_peer_create_required: True if we need to send peer create command to
79 * firmware
80 */
81 void wifi_pos_add_peer_to_list(struct wlan_objmgr_vdev *vdev,
82 struct wlan_pasn_request *req,
83 bool is_peer_create_required);
84
85 /**
86 * wifi_pos_handle_ranging_peer_create_rsp() - Ranging peer create response
87 * handler
88 * @psoc: Pointer to PSOC object
89 * @vdev_id: vdev id
90 * @peer_mac: Peer mac address
91 * @status: Status
92 *
93 * Return: QDF_STATUS
94 */
95 QDF_STATUS
96 wifi_pos_handle_ranging_peer_create_rsp(struct wlan_objmgr_psoc *psoc,
97 uint8_t vdev_id,
98 struct qdf_mac_addr *peer_mac,
99 uint8_t status);
100
101 /**
102 * wifi_pos_handle_ranging_peer_delete() - Handle ranging PASN peer delete
103 * @psoc: Pointer to PSOC object
104 * @req: PASN request
105 * @vdev_id: vdev id
106 * @total_entries: Total number of peers
107 *
108 * Return: QDF_STATUS
109 */
110 QDF_STATUS
111 wifi_pos_handle_ranging_peer_delete(struct wlan_objmgr_psoc *psoc,
112 struct wlan_pasn_request *req,
113 uint8_t vdev_id,
114 uint8_t total_entries);
115
116 /**
117 * wifi_pos_send_pasn_auth_status() - Send PASN auth status to firmware
118 * @psoc: Pointer to PSOC object
119 * @data: pointer to auth status data
120 *
121 * Return: QDF_STATUS
122 */
123 QDF_STATUS
124 wifi_pos_send_pasn_auth_status(struct wlan_objmgr_psoc *psoc,
125 struct wlan_pasn_auth_status *data);
126
127 /**
128 * wifi_pos_send_pasn_peer_deauth() - Send PASN peer deauth
129 * @psoc: Pointer to PSOC object
130 * @peer_mac: Peer mac address
131 *
132 * Return: QDF_STATUS
133 */
134 QDF_STATUS
135 wifi_pos_send_pasn_peer_deauth(struct wlan_objmgr_psoc *psoc,
136 struct qdf_mac_addr *peer_mac);
137
138 /**
139 * wifi_pos_get_pasn_peer_count() - Wifi POS get total pasn peer count
140 * @vdev: Pointer to vdev object
141 *
142 * Return: Total number of pasn peers
143 */
144 uint8_t
145 wifi_pos_get_pasn_peer_count(struct wlan_objmgr_vdev *vdev);
146
147 /**
148 * wifi_pos_update_pasn_peer_count() - Increment pasn peer count
149 * @vdev: Pointer to vdev object
150 * @is_increment: flag to indicate if peer count needs to be incremented
151 *
152 * Return: None
153 */
154 void wifi_pos_update_pasn_peer_count(struct wlan_objmgr_vdev *vdev,
155 bool is_increment);
156
157 /**
158 * wifi_pos_cleanup_pasn_peers() - Delete all PASN peer objects for
159 * given vdev
160 * @psoc: Pointer to psoc object
161 * @vdev: Pointer to vdev object
162 *
163 * Return: QDF_STATUS
164 */
165 QDF_STATUS
166 wifi_pos_cleanup_pasn_peers(struct wlan_objmgr_psoc *psoc,
167 struct wlan_objmgr_vdev *vdev);
168
169 /**
170 * wifi_pos_vdev_delete_all_ranging_peers() - Delete all ranging peers
171 * associated with given vdev
172 * @vdev: Vdev object pointer
173 *
174 * Return: QDF_STATUS
175 */
176 QDF_STATUS
177 wifi_pos_vdev_delete_all_ranging_peers(struct wlan_objmgr_vdev *vdev);
178
179 /**
180 * wifi_pos_vdev_delete_all_ranging_peers_rsp() - Delete all vdev peers response
181 * handler
182 * @psoc: Psoc pointer
183 * @vdev_id: vdev id
184 *
185 * Return: QDF_STATUS
186 */
187 QDF_STATUS
188 wifi_pos_vdev_delete_all_ranging_peers_rsp(struct wlan_objmgr_psoc *psoc,
189 uint8_t vdev_id);
190
191 /**
192 * wifi_pos_is_delete_all_peer_in_progress() - Check if delete all pasn peers
193 * command is already in progress
194 * for a given vdev
195 * @vdev: Vdev object pointer
196 *
197 * Return: True if delete all pasn peer is in progress
198 */
199 bool wifi_pos_is_delete_all_peer_in_progress(struct wlan_objmgr_vdev *vdev);
200
201 /**
202 * wifi_pos_set_delete_all_peer_in_progress() - API to set/unset delete all
203 * ranging peers is in progress
204 * @vdev: Pointer to vdev object
205 * @flag: value to indicate set or unset the flag
206 *
207 * Return: None
208 */
209 void wifi_pos_set_delete_all_peer_in_progress(struct wlan_objmgr_vdev *vdev,
210 bool flag);
211 #else
212 static inline
wifi_pos_handle_ranging_peer_create(struct wlan_objmgr_psoc * psoc,struct wlan_pasn_request * req,uint8_t vdev_id,uint8_t total_entries)213 QDF_STATUS wifi_pos_handle_ranging_peer_create(struct wlan_objmgr_psoc *psoc,
214 struct wlan_pasn_request *req,
215 uint8_t vdev_id,
216 uint8_t total_entries)
217 {
218 return QDF_STATUS_SUCCESS;
219 }
220
221 static inline
wifi_pos_set_11az_failed_peers(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * mac_addr)222 void wifi_pos_set_11az_failed_peers(struct wlan_objmgr_vdev *vdev,
223 struct qdf_mac_addr *mac_addr)
224 {}
225
226 static inline
wifi_pos_add_peer_to_list(struct wlan_objmgr_vdev * vdev,struct wlan_pasn_request * req,bool is_peer_create_required)227 void wifi_pos_add_peer_to_list(struct wlan_objmgr_vdev *vdev,
228 struct wlan_pasn_request *req,
229 bool is_peer_create_required)
230 {}
231
232 static inline QDF_STATUS
wifi_pos_handle_ranging_peer_create_rsp(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,struct qdf_mac_addr * peer_mac,uint8_t status)233 wifi_pos_handle_ranging_peer_create_rsp(struct wlan_objmgr_psoc *psoc,
234 uint8_t vdev_id,
235 struct qdf_mac_addr *peer_mac,
236 uint8_t status)
237 {
238 return QDF_STATUS_SUCCESS;
239 }
240
241 static inline QDF_STATUS
wifi_pos_handle_ranging_peer_delete(struct wlan_objmgr_psoc * psoc,struct wlan_pasn_request * req,uint8_t vdev_id,uint8_t total_entries)242 wifi_pos_handle_ranging_peer_delete(struct wlan_objmgr_psoc *psoc,
243 struct wlan_pasn_request *req,
244 uint8_t vdev_id,
245 uint8_t total_entries)
246 {
247 return QDF_STATUS_SUCCESS;
248 }
249
250 static inline QDF_STATUS
wifi_pos_send_pasn_peer_deauth(struct wlan_objmgr_psoc * psoc,struct qdf_mac_addr * peer_mac)251 wifi_pos_send_pasn_peer_deauth(struct wlan_objmgr_psoc *psoc,
252 struct qdf_mac_addr *peer_mac)
253 {
254 return QDF_STATUS_SUCCESS;
255 }
256
257 static inline void
wifi_pos_update_pasn_peer_count(struct wlan_objmgr_vdev * vdev,bool is_increment)258 wifi_pos_update_pasn_peer_count(struct wlan_objmgr_vdev *vdev,
259 bool is_increment)
260 {}
261
262 static inline uint8_t
wifi_pos_get_pasn_peer_count(struct wlan_objmgr_vdev * vdev)263 wifi_pos_get_pasn_peer_count(struct wlan_objmgr_vdev *vdev)
264 {
265 return 0;
266 }
267
268 static inline QDF_STATUS
wifi_pos_vdev_delete_all_ranging_peers(struct wlan_objmgr_vdev * vdev)269 wifi_pos_vdev_delete_all_ranging_peers(struct wlan_objmgr_vdev *vdev)
270 {
271 return QDF_STATUS_SUCCESS;
272 }
273
274 static inline
wifi_pos_is_delete_all_peer_in_progress(struct wlan_objmgr_vdev * vdev)275 bool wifi_pos_is_delete_all_peer_in_progress(struct wlan_objmgr_vdev *vdev)
276 {
277 return false;
278 }
279
280 static inline QDF_STATUS
wifi_pos_cleanup_pasn_peers(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_vdev * vdev)281 wifi_pos_cleanup_pasn_peers(struct wlan_objmgr_psoc *psoc,
282 struct wlan_objmgr_vdev *vdev)
283 {
284 return QDF_STATUS_SUCCESS;
285 }
286
287 static inline
wifi_pos_set_delete_all_peer_in_progress(struct wlan_objmgr_vdev * vdev,bool flag)288 void wifi_pos_set_delete_all_peer_in_progress(struct wlan_objmgr_vdev *vdev,
289 bool flag)
290 {}
291 #endif /* WIFI_POS_CONVERGED && WLAN_FEATURE_RTT_11AZ_SUPPORT */
292 #endif /* _WIFI_POS_PASN_API_H_ */
293