1 /* 2 * Copyright (c) 2017-2019 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: wlan_tdls_cmds_process.h 22 * 23 * TDLS north bound commands include file 24 */ 25 26 #ifndef _WLAN_TDLS_CMDS_PROCESS_H_ 27 #define _WLAN_TDLS_CMDS_PROCESS_H_ 28 29 #define TDLS_IS_SETUP_ACTION(action) \ 30 ((TDLS_SETUP_REQUEST <= action) && \ 31 (TDLS_SETUP_CONFIRM >= action)) 32 33 /** 34 * tdls_process_add_peer() - add TDLS peer 35 * @req: TDLS add peer request 36 * 37 * Return: QDF_STATUS_SUCCESS if success; other value if failed 38 */ 39 QDF_STATUS tdls_process_add_peer(struct tdls_add_peer_request *req); 40 41 /** 42 * tdls_process_del_peer() - del TDLS peer 43 * @req: TDLS del peer request 44 * 45 * Return: QDF_STATUS_SUCCESS if success; other value if failed 46 */ 47 QDF_STATUS tdls_process_del_peer(struct tdls_oper_request *req); 48 49 /** 50 * tdls_process_enable_link() - enable TDLS link 51 * @req: TDLS enable link request 52 * 53 * Return: QDF_STATUS_SUCCESS if success; other value if failed 54 */ 55 QDF_STATUS tdls_process_enable_link(struct tdls_oper_request *req); 56 57 /** 58 * tdls_process_setup_peer() - process configure an externally 59 * controllable TDLS peer 60 * @req: TDLS configure force peer request 61 * 62 * Return: QDF_STATUS_SUCCESS if success; other values if failed 63 */ 64 QDF_STATUS tdls_process_setup_peer(struct tdls_oper_request *req); 65 66 /** 67 * tdls_process_remove_force_peer() - process remove an externally controllable 68 * TDLS peer 69 * @req: TDLS operation request 70 * 71 * Return: QDF_STATUS_SUCCESS if success; other values if failed 72 */ 73 QDF_STATUS tdls_process_remove_force_peer(struct tdls_oper_request *req); 74 75 /** 76 * tdls_process_update_peer() - update TDLS peer 77 * @req: TDLS update peer request 78 * 79 * Return: QDF_STATUS_SUCCESS if success; other value if failed 80 */ 81 QDF_STATUS tdls_process_update_peer(struct tdls_update_peer_request *req); 82 83 /** 84 * tdls_process_antenna_switch() - handle TDLS antenna switch 85 * @req: TDLS antenna switch request 86 * 87 * Rely on callback to indicate the antenna switch state to caller. 88 * 89 * Return: QDF_STATUS_SUCCESS if success; other value if failed. 90 */ 91 QDF_STATUS tdls_process_antenna_switch(struct tdls_antenna_switch_request *req); 92 93 /** 94 * tdls_antenna_switch_flush_callback() - flush TDLS antenna switch request 95 * @msg: scheduler message contains tdls antenna switch event 96 * 97 * This function call is invoked when scheduler thread is going down 98 * 99 * Return: QDF_STATUS 100 */ 101 QDF_STATUS tdls_antenna_switch_flush_callback(struct scheduler_msg *msg); 102 103 /** 104 * tdls_pe_del_peer() - send TDLS delete peer request to PE 105 * @req: TDLS delete peer request 106 * 107 * Return: QDF status 108 */ 109 QDF_STATUS tdls_pe_del_peer(struct tdls_del_peer_request *req); 110 111 /** 112 * tdls_process_add_peer_rsp() - handle response for add or update TDLS peer 113 * @rsp: TDLS add peer response 114 * 115 * Return: QDF status 116 */ 117 QDF_STATUS tdls_process_add_peer_rsp(struct tdls_add_sta_rsp *rsp); 118 119 /** 120 * tdls_reset_nss() - reset tdls nss parameters 121 * @tdls_soc: TDLS soc object 122 * @action_code: action code 123 * 124 * Return: None 125 */ 126 void tdls_reset_nss(struct tdls_soc_priv_obj *tdls_soc, 127 uint8_t action_code); 128 129 /** 130 * tdls_release_serialization_command() - TDLS wrapper to 131 * releases serialization command. 132 * @vdev: Object manager vdev 133 * @type: command to release. 134 * 135 * Return: None 136 */ 137 138 void 139 tdls_release_serialization_command(struct wlan_objmgr_vdev *vdev, 140 enum wlan_serialization_cmd_type type); 141 142 /** 143 * tdls_get_connected_peer_count_from_vdev() - Get TDLS connected peer count 144 * @vdev: Pointer to vdev obj 145 * 146 * Return: Connected peer count 147 */ 148 uint16_t tdls_get_connected_peer_count_from_vdev(struct wlan_objmgr_vdev *vdev); 149 150 /** 151 * tdls_set_cap() - set TDLS capability type 152 * @tdls_vdev: tdls vdev object 153 * @mac: peer mac address 154 * @cap: TDLS capability type 155 * 156 * Return: 0 if successful or negative errno otherwise 157 */ 158 int tdls_set_cap(struct tdls_vdev_priv_obj *tdls_vdev, const uint8_t *mac, 159 enum tdls_peer_capab cap); 160 161 /** 162 * tdls_process_send_mgmt_rsp() - handle response for send mgmt 163 * @rsp: TDLS send mgmt response 164 * 165 * Return: QDF_STATUS_SUCCESS for success; other values if failed 166 */ 167 QDF_STATUS tdls_process_send_mgmt_rsp(struct tdls_send_mgmt_rsp *rsp); 168 169 /** 170 * tdls_send_mgmt_tx_completion() - process tx completion 171 * @tx_complete: TDLS mgmt completion info 172 * 173 * Return: QDF_STATUS_SUCCESS for success; other values if failed 174 */ 175 QDF_STATUS tdls_send_mgmt_tx_completion( 176 struct tdls_mgmt_tx_completion_ind *tx_complete); 177 178 /** 179 * tdls_process_del_peer_rsp() - handle response for delete TDLS peer 180 * @rsp: TDLS delete peer response 181 * 182 * Return: QDF status 183 */ 184 QDF_STATUS tdls_process_del_peer_rsp(struct tdls_del_sta_rsp *rsp); 185 186 /** 187 * tdls_process_should_discover() - handle tdls should_discover event 188 * @vdev: vdev object 189 * @evt: event info 190 * 191 * Return: QDF_STATUS 192 */ 193 QDF_STATUS tdls_process_should_discover(struct wlan_objmgr_vdev *vdev, 194 struct tdls_event_info *evt); 195 196 /** 197 * tdls_process_should_teardown() - handle tdls should_teardown event 198 * @vdev: vdev object 199 * @evt: event info 200 * 201 * Return: QDF_STATUS 202 */ 203 QDF_STATUS tdls_process_should_teardown(struct wlan_objmgr_vdev *vdev, 204 struct tdls_event_info *evt); 205 206 /** 207 * tdls_process_connection_tracker_notify() -handle tdls connect tracker notify 208 * @vdev: vdev object 209 * @evt: event info 210 * 211 * Return: QDF_STATUS 212 */ 213 QDF_STATUS tdls_process_connection_tracker_notify(struct wlan_objmgr_vdev *vdev, 214 struct tdls_event_info *evt); 215 216 /** 217 * tdls_validate_mgmt_request() - validate mgmt request 218 * @tdls_mgmt_req: action frame request 219 * 220 * Return: 0 for success or -EINVAL otherwise 221 */ 222 int tdls_validate_mgmt_request(struct tdls_action_frame_request *tdls_mgmt_req); 223 224 /** 225 * tdls_set_responder() - Set/clear TDLS peer's responder role 226 * @set_req: set responder request 227 * 228 * Return: 0 for success or -EINVAL otherwise 229 */ 230 int tdls_set_responder(struct tdls_set_responder_req *set_req); 231 232 /** 233 * tdls_decrement_peer_count() - decrement connected TDLS peer counter 234 * @vdev: vdev obj mgr 235 * @soc_obj: TDLS soc object 236 * 237 * Used in scheduler thread context, no lock needed. 238 * 239 * Return: None. 240 */ 241 void tdls_decrement_peer_count(struct wlan_objmgr_vdev *vdev, 242 struct tdls_soc_priv_obj *soc_obj); 243 244 /** 245 * wlan_tdls_offchan_parms_callback() - Callback to release ref count 246 * @vdev: vdev object 247 * 248 * Return: none 249 */ 250 void wlan_tdls_offchan_parms_callback(struct wlan_objmgr_vdev *vdev); 251 252 /** 253 * tdls_process_set_offchannel() - Handle set offchannel request for TDLS 254 * @req: TDLS set offchannel request 255 * 256 * Return: int status 257 */ 258 int tdls_process_set_offchannel(struct tdls_set_offchannel *req); 259 260 /** 261 * tdls_process_set_offchan_mode() - Handle set offchan mode request for TDLS 262 * @req: TDLS set offchannel mode request 263 * 264 * Return: int status 265 */ 266 int tdls_process_set_offchan_mode(struct tdls_set_offchanmode *req); 267 268 /** 269 * tdls_process_set_secoffchanneloffset() - Handle set sec offchannel 270 * offset request for TDLS 271 * @req: TDLS set secoffchannel offchannel request 272 * 273 * Return: int status 274 */ 275 int tdls_process_set_secoffchanneloffset( 276 struct tdls_set_secoffchanneloffset *req); 277 278 #endif 279