xref: /wlan-driver/qca-wifi-host-cmn/umac/mlme/connection_mgr/utf/inc/wlan_cm_utf.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 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 any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /*
19*5113495bSYour Name  * DOC: Implements CM UTF
20*5113495bSYour Name  */
21*5113495bSYour Name 
22*5113495bSYour Name #ifndef WLAN_CM_UTF_H
23*5113495bSYour Name #define WLAN_CM_UTF_H
24*5113495bSYour Name 
25*5113495bSYour Name #include <qdf_debugfs.h>
26*5113495bSYour Name #include <qdf_mem.h>
27*5113495bSYour Name #include <qdf_trace.h>
28*5113495bSYour Name #include <qdf_module.h>
29*5113495bSYour Name #include <qdf_event.h>
30*5113495bSYour Name #include <qdf_defer.h>
31*5113495bSYour Name #include <wlan_cm_public_struct.h>
32*5113495bSYour Name #include <wlan_mgmt_txrx_utils_api.h>
33*5113495bSYour Name #include <wlan_reg_services_api.h>
34*5113495bSYour Name #include <wlan_scan_tgt_api.h>
35*5113495bSYour Name #include <wlan_cfg80211.h>
36*5113495bSYour Name 
37*5113495bSYour Name #define NUM_UTF_DEBUGFS_INFOS 2
38*5113495bSYour Name 
39*5113495bSYour Name /*
40*5113495bSYour Name  * <ini>
41*5113495bSYour Name  * wlan_cm_utf - WLAN CM UTF Configuration
42*5113495bSYour Name  * @Min: 0
43*5113495bSYour Name  * @Max: 1
44*5113495bSYour Name  * @Default: 0
45*5113495bSYour Name  *
46*5113495bSYour Name  * This ini is used to config wlan cm utf
47*5113495bSYour Name  *
48*5113495bSYour Name  * Related: None
49*5113495bSYour Name  *
50*5113495bSYour Name  * Usage: External
51*5113495bSYour Name  *
52*5113495bSYour Name  * </ini>
53*5113495bSYour Name  */
54*5113495bSYour Name #define CFG_WLAN_CM_UTF CFG_INI_UINT( \
55*5113495bSYour Name 	"wlan_cm_utf", \
56*5113495bSYour Name 	0, \
57*5113495bSYour Name 	1, \
58*5113495bSYour Name 	0, \
59*5113495bSYour Name 	CFG_VALUE_OR_DEFAULT, \
60*5113495bSYour Name 	"WLAN CM UTF Configuration")
61*5113495bSYour Name 
62*5113495bSYour Name #define CFG_WLAN_CM_UTF_PARAM CFG(CFG_WLAN_CM_UTF)
63*5113495bSYour Name /**
64*5113495bSYour Name  * enum wlan_cm_utf_test - CM UTF Test ID
65*5113495bSYour Name  * @CM_UTF_ID_CONNECT_SUCCESS: Connect Success
66*5113495bSYour Name  * @CM_UTF_ID_DISCONNECT_SUCCESS: Disconnect Success
67*5113495bSYour Name  * @CM_UTF_ID_PEER_CREATE_FAILURE: Peer Create Failure
68*5113495bSYour Name  * @CM_UTF_ID_PEER_CREATE_TIMEOUT: No Peer Create Response
69*5113495bSYour Name  * @CM_UTF_ID_PEER_DELETE_TIMEOUT: No Peer Delete Response
70*5113495bSYour Name  * @CM_UTF_ID_AUTH_FAILURE: Auth Req Failure
71*5113495bSYour Name  * @CM_UTF_ID_AUTH_TIMEOUT: No Auth Response
72*5113495bSYour Name  * @CM_UTF_ID_ASSOC_FAILURE: Assoc Req Failure
73*5113495bSYour Name  * @CM_UTF_ID_ASSOC_TIMEOUT: No Assoc Response
74*5113495bSYour Name  * @CM_UTF_ID_CONNECT_SCAN_FAILURE: SSID Not Found
75*5113495bSYour Name  * @CM_UTF_ID_CONNECT_SER_TIMEOUT: Serialization Active Cmd Timeout for Connect
76*5113495bSYour Name  * @CM_UTF_ID_DISCONNECT_SER_TIMEOUT: Ser Active Cmd Timeout for Disconnect
77*5113495bSYour Name  * @CM_UTF_ID_CONNECT_SER_FAILED: Serialization Cmd Queue Failure for Connect
78*5113495bSYour Name  * @CM_UTF_ID_DISCONNECT_SER_FAILED: Ser Cmd Queue Failure for Disconnect
79*5113495bSYour Name  * @CM_UTF_ID_MAX: Maximum enumeration
80*5113495bSYour Name  */
81*5113495bSYour Name enum wlan_cm_utf_test {
82*5113495bSYour Name 	CM_UTF_ID_CONNECT_SUCCESS,
83*5113495bSYour Name 	CM_UTF_ID_DISCONNECT_SUCCESS,
84*5113495bSYour Name 	CM_UTF_ID_PEER_CREATE_FAILURE,
85*5113495bSYour Name 	CM_UTF_ID_PEER_CREATE_TIMEOUT,
86*5113495bSYour Name 	CM_UTF_ID_PEER_DELETE_TIMEOUT,
87*5113495bSYour Name 	CM_UTF_ID_AUTH_FAILURE,
88*5113495bSYour Name 	CM_UTF_ID_AUTH_TIMEOUT,
89*5113495bSYour Name 	CM_UTF_ID_ASSOC_FAILURE,
90*5113495bSYour Name 	CM_UTF_ID_ASSOC_TIMEOUT,
91*5113495bSYour Name 	CM_UTF_ID_CONNECT_SCAN_FAILURE,
92*5113495bSYour Name 	CM_UTF_ID_CONNECT_SER_TIMEOUT,
93*5113495bSYour Name 	CM_UTF_ID_DISCONNECT_SER_TIMEOUT,
94*5113495bSYour Name 	CM_UTF_ID_CONNECT_SER_FAILED,//Need ser utf
95*5113495bSYour Name 	CM_UTF_ID_DISCONNECT_SER_FAILED,//Need ser utf
96*5113495bSYour Name 	CM_UTF_ID_MAX,
97*5113495bSYour Name };
98*5113495bSYour Name 
99*5113495bSYour Name /**
100*5113495bSYour Name  * enum wlan_cm_utf_evt - CM UTF Resp event
101*5113495bSYour Name  * @CM_UTF_BSS_PEER_CREATE_RESP: Peer Create Response
102*5113495bSYour Name  * @CM_UTF_BSS_PEER_DELETE_RESP: Peer Delete Response
103*5113495bSYour Name  * @CM_UTF_CONNECT_RESP: Connect Response
104*5113495bSYour Name  * @CM_UTF_DISCONNECT_RESP: Disconnect Response
105*5113495bSYour Name  * @CM_UTF_PEER_DELETE_IND: Peer Delete Indication
106*5113495bSYour Name  */
107*5113495bSYour Name enum wlan_cm_utf_evt {
108*5113495bSYour Name 	CM_UTF_BSS_PEER_CREATE_RESP,
109*5113495bSYour Name 	CM_UTF_BSS_PEER_DELETE_RESP,
110*5113495bSYour Name 	CM_UTF_CONNECT_RESP,
111*5113495bSYour Name 	CM_UTF_DISCONNECT_RESP,
112*5113495bSYour Name 	CM_UTF_PEER_DELETE_IND,
113*5113495bSYour Name };
114*5113495bSYour Name 
115*5113495bSYour Name /**
116*5113495bSYour Name  * struct wlan_cm_utf_node - CM UTF node to hold CM req info
117*5113495bSYour Name  * @evt_id: CM UTF event id
118*5113495bSYour Name  * @peer_mac: Peer Mac
119*5113495bSYour Name  * @conn_req: Connect Request
120*5113495bSYour Name  * @disconn_req: Disconnect Request
121*5113495bSYour Name  */
122*5113495bSYour Name struct wlan_cm_utf_node {
123*5113495bSYour Name 	enum wlan_cm_utf_evt evt_id;
124*5113495bSYour Name 	struct qdf_mac_addr *peer_mac;
125*5113495bSYour Name 	struct wlan_cm_vdev_connect_req conn_req;
126*5113495bSYour Name 	struct wlan_cm_vdev_discon_req disconn_req;
127*5113495bSYour Name };
128*5113495bSYour Name 
129*5113495bSYour Name /**
130*5113495bSYour Name  * struct wlan_cm_utf - CM UTF handle
131*5113495bSYour Name  * @cm_utf_node: linked list node for linking entries
132*5113495bSYour Name  * @vdev: Vdev object
133*5113495bSYour Name  * @debugfs_de: debugfs entry
134*5113495bSYour Name  * @test_id: Test case Id
135*5113495bSYour Name  * @req: cfg80211 connect request params
136*5113495bSYour Name  * @cm_utf_timer: CM UTF timer
137*5113495bSYour Name  * @cm_utf_test_timer: CM UTF timer for each test
138*5113495bSYour Name  * @utf_node: CM UTF node to hold CM req info
139*5113495bSYour Name  * @last_cmd_id: last command id
140*5113495bSYour Name  * @last_cmd_source: last command source
141*5113495bSYour Name  * @cm_utf_work: CM UTF work queue for processing events
142*5113495bSYour Name  */
143*5113495bSYour Name struct wlan_cm_utf {
144*5113495bSYour Name 	qdf_list_node_t cm_utf_node;
145*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
146*5113495bSYour Name 	struct dentry *debugfs_de[NUM_UTF_DEBUGFS_INFOS];
147*5113495bSYour Name 	enum wlan_cm_utf_test test_id;
148*5113495bSYour Name 	struct wlan_cm_connect_req req;
149*5113495bSYour Name 	qdf_timer_t  cm_utf_timer;
150*5113495bSYour Name 	qdf_timer_t  cm_utf_test_timer;
151*5113495bSYour Name 	struct wlan_cm_utf_node utf_node;
152*5113495bSYour Name 	uint32_t last_cmd_id;
153*5113495bSYour Name 	enum wlan_cm_source last_cmd_source;
154*5113495bSYour Name 	qdf_work_t cm_utf_work;
155*5113495bSYour Name };
156*5113495bSYour Name 
157*5113495bSYour Name /*
158*5113495bSYour Name  * Debugfs read/write functions
159*5113495bSYour Name  */
160*5113495bSYour Name /**
161*5113495bSYour Name  * wlan_cm_utf_cm_test_id_show() - debugfs function to display CM test case name
162*5113495bSYour Name  * @m: seq_file handle
163*5113495bSYour Name  * @v: not used, offset of read
164*5113495bSYour Name  */
165*5113495bSYour Name int wlan_cm_utf_cm_test_id_show(qdf_debugfs_file_t m, void *v);
166*5113495bSYour Name 
167*5113495bSYour Name int wlan_cm_utf_scan_db_update_show(qdf_debugfs_file_t m, void *v);
168*5113495bSYour Name 
169*5113495bSYour Name /**
170*5113495bSYour Name  * wlan_cm_utf_cm_test_id_write() - debugfs write to start CM UTF test
171*5113495bSYour Name  * @file: file handler to access cm utf handle
172*5113495bSYour Name  * @buf: received data buffer
173*5113495bSYour Name  * @count: length of received buffer
174*5113495bSYour Name  * @ppos: Not used
175*5113495bSYour Name  *
176*5113495bSYour Name  * Return: count
177*5113495bSYour Name  */
178*5113495bSYour Name ssize_t wlan_cm_utf_cm_test_id_write(struct file *file,
179*5113495bSYour Name 				     const char __user *buf,
180*5113495bSYour Name 				     size_t count, loff_t *ppos);
181*5113495bSYour Name 
182*5113495bSYour Name /**
183*5113495bSYour Name  * wlan_cm_utf_scan_db_update_write() - debugfs write to add manual scan entry
184*5113495bSYour Name  * @file: file handler to access cm utf handle
185*5113495bSYour Name  * @buf: received data buffer
186*5113495bSYour Name  * @count: length of received buffer
187*5113495bSYour Name  * @ppos: Not used
188*5113495bSYour Name  *
189*5113495bSYour Name  * Return: count
190*5113495bSYour Name  */
191*5113495bSYour Name ssize_t wlan_cm_utf_scan_db_update_write(struct file *file,
192*5113495bSYour Name 					 const char __user *buf,
193*5113495bSYour Name 					 size_t count, loff_t *ppos);
194*5113495bSYour Name 
195*5113495bSYour Name /**
196*5113495bSYour Name  * wlan_cm_utf_attach() - Connection manager UTF init API
197*5113495bSYour Name  * @vdev: Vdev object
198*5113495bSYour Name  *
199*5113495bSYour Name  * Return: QDF_STATUS
200*5113495bSYour Name  */
201*5113495bSYour Name QDF_STATUS wlan_cm_utf_attach(struct wlan_objmgr_vdev *vdev);
202*5113495bSYour Name 
203*5113495bSYour Name /**
204*5113495bSYour Name  * wlan_cm_utf_detach() - Connection manager UTF deinit API
205*5113495bSYour Name  * @vdev: Vdev object
206*5113495bSYour Name  *
207*5113495bSYour Name  * Return: QDF_STATUS
208*5113495bSYour Name  */
209*5113495bSYour Name void wlan_cm_utf_detach(struct wlan_objmgr_vdev *vdev);
210*5113495bSYour Name 
211*5113495bSYour Name /**
212*5113495bSYour Name  * wlan_cm_utf_bss_peer_create_req() - Connection manager UTF bss peer
213*5113495bSYour Name  * create request handler
214*5113495bSYour Name  * @vdev: VDEV object
215*5113495bSYour Name  * @peer_mac: Peer mac address
216*5113495bSYour Name  *
217*5113495bSYour Name  * Return: QDF_STATUS
218*5113495bSYour Name  */
219*5113495bSYour Name QDF_STATUS wlan_cm_utf_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
220*5113495bSYour Name 					   struct qdf_mac_addr *peer_mac);
221*5113495bSYour Name 
222*5113495bSYour Name /**
223*5113495bSYour Name  * wlan_cm_utf_connect_req_active() - Connection manager UTF handler when connect
224*5113495bSYour Name  * request is activated
225*5113495bSYour Name  * @vdev: VDEV object
226*5113495bSYour Name  * @vdev_connect_req: Vdev connect request
227*5113495bSYour Name  *
228*5113495bSYour Name  * Return: QDF_STATUS
229*5113495bSYour Name  */
230*5113495bSYour Name QDF_STATUS wlan_cm_utf_connect_req_active(
231*5113495bSYour Name 			struct wlan_objmgr_vdev *vdev,
232*5113495bSYour Name 			struct wlan_cm_vdev_connect_req *vdev_connect_req);
233*5113495bSYour Name 
234*5113495bSYour Name /**
235*5113495bSYour Name  * wlan_cm_utf_connect_req() - Connection manager UTF connect request handler
236*5113495bSYour Name  * @vdev: VDEV object
237*5113495bSYour Name  * @vdev_connect_req: Vdev connect request
238*5113495bSYour Name  *
239*5113495bSYour Name  * Return: QDF_STATUS
240*5113495bSYour Name  */
241*5113495bSYour Name QDF_STATUS wlan_cm_utf_connect_req(
242*5113495bSYour Name 			struct wlan_objmgr_vdev *vdev,
243*5113495bSYour Name 			struct wlan_cm_vdev_connect_req *vdev_connect_req);
244*5113495bSYour Name 
245*5113495bSYour Name /**
246*5113495bSYour Name  * wlan_cm_utf_disconnect_req() - Connection manager UTF disconnect
247*5113495bSYour Name  * request handler
248*5113495bSYour Name  * @vdev: VDEV object
249*5113495bSYour Name  * @vdev_disconnect_req: Vdev disconnect request
250*5113495bSYour Name  *
251*5113495bSYour Name  * Return: QDF_STATUS
252*5113495bSYour Name  */
253*5113495bSYour Name QDF_STATUS wlan_cm_utf_disconnect_req(
254*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
255*5113495bSYour Name 		struct wlan_cm_vdev_discon_req *vdev_disconnect_req);
256*5113495bSYour Name 
257*5113495bSYour Name /**
258*5113495bSYour Name  * wlan_cm_utf_bss_peer_delete_req() - Connection manager UTF bss peer
259*5113495bSYour Name  * delete request handler
260*5113495bSYour Name  * @vdev: VDEV object
261*5113495bSYour Name  *
262*5113495bSYour Name  * Return: QDF_STATUS
263*5113495bSYour Name  */
264*5113495bSYour Name QDF_STATUS wlan_cm_utf_bss_peer_delete_req(struct wlan_objmgr_vdev *vdev);
265*5113495bSYour Name 
266*5113495bSYour Name /**
267*5113495bSYour Name  * wlan_cm_utf_vdev_down() - Connection manager UTF vdev down request handler
268*5113495bSYour Name  * @vdev: VDEV object
269*5113495bSYour Name  *
270*5113495bSYour Name  * Return: QDF_STATUS
271*5113495bSYour Name  */
272*5113495bSYour Name QDF_STATUS wlan_cm_utf_vdev_down(struct wlan_objmgr_vdev *vdev);
273*5113495bSYour Name 
274*5113495bSYour Name /**
275*5113495bSYour Name  * osif_cm_utf_register_cb() - API to register connection manager callbacks
276*5113495bSYour Name  *
277*5113495bSYour Name  * Return: QDF_STATUS
278*5113495bSYour Name  */
279*5113495bSYour Name QDF_STATUS osif_cm_utf_register_cb(void);
280*5113495bSYour Name #endif //WLAN_CM_UTF_H
281