1 /* 2 * Copyright (c) 2021, 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 any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #ifndef _WMI_UNIFIED_11BE_TLV_H_ 19 #define _WMI_UNIFIED_11BE_TLV_H_ 20 21 #ifdef WLAN_FEATURE_11BE_MLO 22 /** 23 * vdev_create_mlo_params_size() - Get MLO params size in vdev create 24 * @param: pointer to vdev create request param 25 * Return: size of MLO params in vdev create 26 */ 27 size_t vdev_create_mlo_params_size(struct vdev_create_params *param); 28 /** 29 * vdev_create_add_mlo_params() - Add MLO params in vdev create cmd 30 * @buf_ptr: pointer to vdev create buffer. 31 * @param: pointer to vdev create request param 32 * 33 * Return: pointer to new offset of vdev create buffer 34 */ 35 uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr, 36 struct vdev_create_params *param); 37 /** 38 * vdev_start_mlo_params_size() - Get MLO params size in vdev start 39 * @req: Vdev start request params 40 * 41 * Return: size of MLO params in vdev start 42 */ 43 size_t vdev_start_mlo_params_size(struct vdev_start_params *req); 44 /** 45 * vdev_start_add_mlo_params() - Add MLO params in vdev start cmd 46 * @buf_ptr: pointer to vdev start buffer. 47 * @req: pointer to vdev create request param 48 * 49 * Return: pointer to new offset of cmd buffer 50 */ 51 uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr, 52 struct vdev_start_params *req); 53 /** 54 * vdev_start_add_ml_partner_links() - Add MLO partner links in vdev start cmd 55 * @buf_ptr: pointer to vdev start cmd buffer. 56 * @req: pointer to vdev start request param 57 * 58 * Return: pointer to new offset of cmd buffer 59 */ 60 uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr, 61 struct vdev_start_params *req); 62 /** 63 * bcn_tmpl_mlo_param_size() - Get ML param size in beacon template 64 * @param: Pointer to beacon template param 65 * 66 * Return: size of ML params in beacon template 67 */ 68 size_t bcn_tmpl_mlo_param_size(struct beacon_tmpl_params *param); 69 70 /** 71 * bcn_tmpl_add_ml_partner_links - Add MLO partner links in beacon template 72 * command 73 * @buf_ptr: pointer to beacon cmd buffer. 74 * @param: pointer to beacon template params 75 * 76 * Return: pointer to new offset of cmd buffer 77 */ 78 uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr, 79 struct beacon_tmpl_params *param); 80 81 /** 82 * bcn_tmpl_ml_info_size() - Get ML info size in beacon template 83 * @param: Pointer to beacon template param 84 * 85 * Return: size of ML info in beacon template 86 */ 87 size_t bcn_tmpl_ml_info_size(struct beacon_tmpl_params *param); 88 89 /** 90 * bcn_tmpl_add_ml_info() - Add MLO info to update Critical Update info in 91 * beacon template command 92 * @buf_ptr: pointer to beacon cmd buffer. 93 * @param: pointer to beacon template params 94 * 95 * Return: pointer to new offset of cmd buffer 96 */ 97 uint8_t *bcn_tmpl_add_ml_info(uint8_t *buf_ptr, 98 struct beacon_tmpl_params *param); 99 /** 100 * prb_resp_tmpl_ml_info_size() - Get ML info size in 20TU probe resp template 101 * @param: Pointer to 20TU probe response template param 102 * 103 * Return: size of ML info in 20TU probe response template 104 */ 105 size_t prb_resp_tmpl_ml_info_size(struct wmi_probe_resp_params *param); 106 107 /** 108 * prb_resp_tmpl_add_ml_info() - Add MLO info to update Critical Update info in 109 * 20TU probe response template command 110 * @buf_ptr: pointer to 20TU probe response cmd buffer. 111 * @param: pointer to 20TU probe response template params 112 * 113 * Return: pointer to new offset of cmd buffer 114 */ 115 uint8_t *prb_resp_tmpl_add_ml_info(uint8_t *buf_ptr, 116 struct wmi_probe_resp_params *param); 117 /** 118 * peer_create_add_mlo_params() - Add MLO params in peer create cmd 119 * @buf_ptr: pointer to peer create cmd buffer. 120 * @req: pointer to peer create request param 121 * 122 * Return: pointer to new offset of cmd buffer 123 */ 124 uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 125 struct peer_create_params *req); 126 /** 127 * peer_create_mlo_params_size() - Get ML params size in peer create 128 * @req: pointer to peer create request param 129 * 130 * Return: size of ML params in peer create cmd 131 */ 132 size_t peer_create_mlo_params_size(struct peer_create_params *req); 133 /** 134 * peer_assoc_mlo_params_size() - Get ML params size in peer assoc 135 * @req: pointer to peer assoc request param 136 * 137 * Return: size of ML params in peer assoc cmd 138 */ 139 size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req); 140 /** 141 * peer_assoc_add_mlo_params() - Add MLO params in peer assoc cmd 142 * @buf_ptr: pointer to peer assoc cmd buffer. 143 * @req: pointer to peer assoc request param 144 * 145 * Return: pointer to new offset of cmd buffer 146 */ 147 uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 148 struct peer_assoc_params *req); 149 /** 150 * peer_assoc_add_ml_partner_links() - Add MLO partner links in peer assoc cmd 151 * @buf_ptr: pointer to peer assoc cmd buffer. 152 * @req: pointer to peer assoc request param 153 * 154 * Return: pointer to new offset of cmd buffer 155 */ 156 uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 157 struct peer_assoc_params *req); 158 /** 159 * peer_assoc_t2lm_params_size() - Get T2LM param size in peer assoc 160 * @req: pointer to peer create request param 161 * 162 * Return: size of ML params in peer create cmd 163 */ 164 size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req); 165 /** 166 * peer_assoc_add_tid_to_link_map() - Add TID-to-link mapping in peer assoc cmd 167 * @buf_ptr: pointer to peer assoc cmd buffer. 168 * @req: pointer to peer assoc request param 169 * 170 * Return: pointer to new offset of cmd buffer 171 */ 172 uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr, 173 struct peer_assoc_params *req); 174 175 /** 176 * peer_delete_mlo_params_size() - Get MLO params size in pdev delete 177 * @req: peer delete request params 178 * 179 * Return: size of MLO params in vdev start 180 */ 181 size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req); 182 183 /** 184 * peer_delete_add_mlo_params() - Add MLO params in peer delete cmd 185 * @buf_ptr: pointer to peer delete cmd buffer. 186 * @req: pointer to peer delete request param 187 * 188 * Return: pointer to new offset of cmd buffer 189 */ 190 uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr, 191 struct peer_delete_cmd_params *req); 192 193 /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks 194 * @wmi_handle: WMI handle 195 */ 196 void wmi_11be_attach_tlv(wmi_unified_t wmi_handle); 197 198 /** 199 * extract_mgmt_rx_mlo_link_removal_tlv_count() - Extract the number of link 200 * removal TLVs from MGMT Rx event 201 * @num_link_removal_tlvs: Number of link removal TLVs 202 * @hdr: MGMT Rx event parameters to be populated 203 * 204 * Return: None 205 */ 206 static inline void 207 extract_mgmt_rx_mlo_link_removal_tlv_count( 208 int num_link_removal_tlvs, 209 struct mgmt_rx_event_params *hdr) 210 { 211 hdr->num_link_removal_info = num_link_removal_tlvs; 212 } 213 #else 214 static uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr, 215 struct vdev_create_params *param) 216 { 217 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 218 return buf_ptr + WMI_TLV_HDR_SIZE; 219 } 220 221 static size_t vdev_create_mlo_params_size(struct vdev_create_params *param) 222 { 223 return WMI_TLV_HDR_SIZE; 224 } 225 226 static uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr, 227 struct vdev_start_params *req) 228 { 229 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 230 return buf_ptr + WMI_TLV_HDR_SIZE; 231 } 232 233 static size_t vdev_start_mlo_params_size(struct vdev_start_params *req) 234 { 235 return WMI_TLV_HDR_SIZE; 236 } 237 238 static uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr, 239 struct vdev_start_params *req) 240 { 241 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 242 return buf_ptr + WMI_TLV_HDR_SIZE; 243 } 244 245 static size_t bcn_tmpl_mlo_param_size(struct beacon_tmpl_params *param) 246 { 247 return WMI_TLV_HDR_SIZE; 248 } 249 250 static uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr, 251 struct beacon_tmpl_params *param) 252 { 253 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 254 return buf_ptr + WMI_TLV_HDR_SIZE; 255 } 256 257 static size_t bcn_tmpl_ml_info_size(struct beacon_tmpl_params *param) 258 { 259 return WMI_TLV_HDR_SIZE; 260 } 261 262 static uint8_t *bcn_tmpl_add_ml_info(uint8_t *buf_ptr, 263 struct beacon_tmpl_params *param) 264 { 265 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 266 return buf_ptr + WMI_TLV_HDR_SIZE; 267 } 268 269 static size_t prb_resp_tmpl_ml_info_size(struct wmi_probe_resp_params *param) 270 { 271 return WMI_TLV_HDR_SIZE; 272 } 273 274 static uint8_t *prb_resp_tmpl_add_ml_info(uint8_t *buf_ptr, 275 struct wmi_probe_resp_params *param) 276 { 277 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 278 return buf_ptr + WMI_TLV_HDR_SIZE; 279 } 280 281 static uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 282 struct peer_create_params *req) 283 { 284 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 285 return buf_ptr + WMI_TLV_HDR_SIZE; 286 } 287 288 static size_t peer_create_mlo_params_size(struct peer_create_params *req) 289 { 290 return WMI_TLV_HDR_SIZE; 291 } 292 293 static size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req) 294 { 295 size_t peer_assoc_mlo_size = 296 WMI_TLV_HDR_SIZE + 297 WMI_TLV_HDR_SIZE; 298 299 return peer_assoc_mlo_size; 300 } 301 302 static uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 303 struct peer_assoc_params *req) 304 { 305 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 306 return buf_ptr + WMI_TLV_HDR_SIZE; 307 } 308 309 static uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 310 struct peer_assoc_params *req) 311 { 312 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 313 return buf_ptr + WMI_TLV_HDR_SIZE; 314 } 315 316 static size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req) 317 { 318 return WMI_TLV_HDR_SIZE; 319 } 320 321 static uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr, 322 struct peer_assoc_params *req) 323 { 324 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 325 return buf_ptr + WMI_TLV_HDR_SIZE; 326 } 327 328 static size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req) 329 { 330 return WMI_TLV_HDR_SIZE; 331 } 332 333 static uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr, 334 struct peer_delete_cmd_params *req) 335 { 336 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 337 return buf_ptr + WMI_TLV_HDR_SIZE; 338 } 339 340 static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle) 341 { } 342 343 static inline void 344 extract_mgmt_rx_mlo_link_removal_tlv_count( 345 int num_link_removal_tlvs, 346 struct mgmt_rx_event_params *hdr) 347 { 348 } 349 #endif /*WLAN_FEATURE_11BE_MLO*/ 350 #endif /*_WMI_UNIFIED_11BE_TLV_H_*/ 351