1 /* 2 * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2023 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_mgmt.h 22 * 23 * TDLS management frames include file 24 */ 25 26 #ifndef _WLAN_TDLS_MGMT_H_ 27 #define _WLAN_TDLS_MGMT_H_ 28 29 #include "wlan_tdls_cmds_process.h" 30 31 #define TDLS_PUBLIC_ACTION_FRAME_OFFSET 24 32 /* TDLS_PUBLIC_ACTION_FRAME_OFFSET(category[1]) + action[1] + dialog[1] 33 * + cap[2] 34 */ 35 #define TDLS_PUBLIC_ACTION_FRAME_TDLS_IE_OFFSET 29 36 #define TDLS_PUBLIC_ACTION_FRAME 4 37 #define TDLS_PUBLIC_ACTION_DISC_RESP 14 38 #define TDLS_ACTION_FRAME 12 39 #define TDLS_80211_PEER_ADDR_OFFSET (TDLS_PUBLIC_ACTION_FRAME + \ 40 QDF_MAC_ADDR_SIZE) 41 #define TDLS_ACTION_FRAME_TYPE_MAX 11 42 43 /** 44 * struct tdls_link_identifier - tdls link identifier ie 45 * @id: element id 46 * @len: length 47 * @bssid: bssid 48 * @initsta: the mac address of initiator 49 * @respsta: the mac address of responder 50 */ 51 struct tdls_link_identifier { 52 uint8_t id; 53 uint8_t len; 54 uint8_t bssid[6]; 55 uint8_t initsta[6]; 56 uint8_t respsta[6]; 57 }; 58 59 /** 60 * struct tdls_rx_mgmt_event - tdls rx mgmt frame event 61 * @tdls_soc_obj: tdls soc private object 62 * @rx_mgmt: tdls rx mgmt frame structure 63 */ 64 struct tdls_rx_mgmt_event { 65 struct tdls_soc_priv_obj *tdls_soc_obj; 66 struct tdls_rx_mgmt_frame *rx_mgmt; 67 }; 68 69 /** 70 * tdls_process_mgmt_req() - send a TDLS mgmt request to serialize module 71 * @tdls_mgmt_req: tdls management request 72 * 73 * TDLS request API, called from cfg80211 to send a TDLS frame in 74 * serialized manner to PE 75 * 76 *Return: QDF_STATUS 77 */ 78 QDF_STATUS tdls_process_mgmt_req( 79 struct tdls_action_frame_request *tdls_mgmt_req); 80 81 /** 82 * tdls_process_mlo_cal_tdls_link_score() - process mlo cal tdls link 83 * @vdev: object manager vdev 84 * 85 * Converts rx tdls frame freq to a link score and stores the score 86 * in relative tdls_vdev object. 87 * 88 *Return: QDF_STATUS 89 */ 90 QDF_STATUS 91 tdls_process_mlo_cal_tdls_link_score(struct wlan_objmgr_vdev *vdev); 92 93 /** 94 * tdls_mlo_get_tdls_link_vdev() - wrapper function 95 * @vdev: vdev object 96 * 97 * Return: tdls vdev 98 */ 99 struct wlan_objmgr_vdev * 100 tdls_mlo_get_tdls_link_vdev(struct wlan_objmgr_vdev *vdev); 101 102 /** 103 * tdls_set_remain_links_unforce() - unforce links 104 * @vdev: vdev object 105 * 106 * Return: void 107 */ 108 void tdls_set_remain_links_unforce(struct wlan_objmgr_vdev *vdev); 109 110 /** 111 * tdls_mgmt_rx_ops() - register or unregister rx callback 112 * @psoc: psoc object 113 * @isregister: register if true, unregister if false 114 * 115 * This function registers or unregisters rx callback to mgmt txrx 116 * component. 117 * 118 * Return: QDF_STATUS 119 */ 120 QDF_STATUS tdls_mgmt_rx_ops(struct wlan_objmgr_psoc *psoc, 121 bool isregister); 122 123 /** 124 * tdls_process_rx_frame() - process tdls rx frames 125 * @msg: scheduler msg 126 * 127 * Return: QDF_STATUS 128 */ 129 QDF_STATUS tdls_process_rx_frame(struct scheduler_msg *msg); 130 131 /** 132 * tdls_set_rssi() - Set TDLS RSSI on peer given by mac 133 * @vdev: vdev object 134 * @mac: MAC address of Peer 135 * @rssi: rssi value 136 * 137 * Set RSSI on TDSL peer 138 * 139 * Return: QDF_STATUS 140 */ 141 QDF_STATUS tdls_set_rssi(struct wlan_objmgr_vdev *vdev, 142 uint8_t *mac, int8_t rssi); 143 144 /** 145 * tdls_process_mlo_choice_tdls_vdev() - choice one vdev for tdls vdev 146 * @vdev: object manager vdev 147 * 148 * Return: pointer of vdev object 149 */ 150 struct wlan_objmgr_vdev * 151 tdls_process_mlo_choice_tdls_vdev(struct wlan_objmgr_vdev *vdev); 152 153 /** 154 * tdls_set_no_force_vdev() - set no force for the vdev 155 * @vdev: object manager vdev 156 * @flag: true, set all vdev as no force; false, except the current one. 157 * 158 * Return: void 159 */ 160 void tdls_set_no_force_vdev(struct wlan_objmgr_vdev *vdev, bool flag); 161 162 /** 163 * tdls_set_link_mode() - force active or unfore link for MLO case 164 * @req: the pointer of tdls_action_frame_request 165 * 166 * Return: QDF_STATUS 167 */ 168 QDF_STATUS tdls_set_link_mode(struct tdls_action_frame_request *req); 169 #endif 170 171