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