1 /* 2 * Copyright (c) 2021, The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022-2024 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 /** 194 * vdev_stop_mlo_params_size() - Get MLO params size in vdev stop 195 * @params: VDEV stop request params 196 * 197 * Return: size of MLO params in VDEV stop 198 */ 199 size_t vdev_stop_mlo_params_size(struct vdev_stop_params *params); 200 201 /** 202 * vdev_stop_add_mlo_params() - Add MLO params in VDEV stop cmd 203 * @buf_ptr: Pointer to VDEV stop cmd buffer. 204 * @params: VDEV stop request params 205 * 206 * Return: Pointer to new offset of cmd buffer. 207 */ 208 uint8_t *vdev_stop_add_mlo_params(uint8_t *buf_ptr, 209 struct vdev_stop_params *params); 210 211 /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks 212 * @wmi_handle: WMI handle 213 */ 214 void wmi_11be_attach_tlv(wmi_unified_t wmi_handle); 215 216 /** 217 * extract_mgmt_rx_mlo_link_removal_tlv_count() - Extract the number of link 218 * removal TLVs from MGMT Rx event 219 * @num_link_removal_tlvs: Number of link removal TLVs 220 * @hdr: MGMT Rx event parameters to be populated 221 * 222 * Return: None 223 */ 224 static inline void 225 extract_mgmt_rx_mlo_link_removal_tlv_count( 226 int num_link_removal_tlvs, 227 struct mgmt_rx_event_params *hdr) 228 { 229 hdr->num_link_removal_info = num_link_removal_tlvs; 230 } 231 #else 232 static uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr, 233 struct vdev_create_params *param) 234 { 235 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 236 return buf_ptr + WMI_TLV_HDR_SIZE; 237 } 238 239 static size_t vdev_create_mlo_params_size(struct vdev_create_params *param) 240 { 241 return WMI_TLV_HDR_SIZE; 242 } 243 244 static uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr, 245 struct vdev_start_params *req) 246 { 247 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 248 return buf_ptr + WMI_TLV_HDR_SIZE; 249 } 250 251 static size_t vdev_start_mlo_params_size(struct vdev_start_params *req) 252 { 253 return WMI_TLV_HDR_SIZE; 254 } 255 256 static uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr, 257 struct vdev_start_params *req) 258 { 259 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 260 return buf_ptr + WMI_TLV_HDR_SIZE; 261 } 262 263 static size_t bcn_tmpl_mlo_param_size(struct beacon_tmpl_params *param) 264 { 265 return WMI_TLV_HDR_SIZE; 266 } 267 268 static uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr, 269 struct beacon_tmpl_params *param) 270 { 271 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 272 return buf_ptr + WMI_TLV_HDR_SIZE; 273 } 274 275 static size_t bcn_tmpl_ml_info_size(struct beacon_tmpl_params *param) 276 { 277 return WMI_TLV_HDR_SIZE; 278 } 279 280 static uint8_t *bcn_tmpl_add_ml_info(uint8_t *buf_ptr, 281 struct beacon_tmpl_params *param) 282 { 283 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 284 return buf_ptr + WMI_TLV_HDR_SIZE; 285 } 286 287 static size_t prb_resp_tmpl_ml_info_size(struct wmi_probe_resp_params *param) 288 { 289 return WMI_TLV_HDR_SIZE; 290 } 291 292 static uint8_t *prb_resp_tmpl_add_ml_info(uint8_t *buf_ptr, 293 struct wmi_probe_resp_params *param) 294 { 295 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 296 return buf_ptr + WMI_TLV_HDR_SIZE; 297 } 298 299 static uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 300 struct peer_create_params *req) 301 { 302 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 303 return buf_ptr + WMI_TLV_HDR_SIZE; 304 } 305 306 static size_t peer_create_mlo_params_size(struct peer_create_params *req) 307 { 308 return WMI_TLV_HDR_SIZE; 309 } 310 311 static size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req) 312 { 313 size_t peer_assoc_mlo_size = 314 WMI_TLV_HDR_SIZE + 315 WMI_TLV_HDR_SIZE; 316 317 return peer_assoc_mlo_size; 318 } 319 320 static uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 321 struct peer_assoc_params *req) 322 { 323 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 324 return buf_ptr + WMI_TLV_HDR_SIZE; 325 } 326 327 static uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 328 struct peer_assoc_params *req) 329 { 330 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 331 return buf_ptr + WMI_TLV_HDR_SIZE; 332 } 333 334 static size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req) 335 { 336 return WMI_TLV_HDR_SIZE; 337 } 338 339 static uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr, 340 struct peer_assoc_params *req) 341 { 342 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 343 return buf_ptr + WMI_TLV_HDR_SIZE; 344 } 345 346 static size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req) 347 { 348 return WMI_TLV_HDR_SIZE; 349 } 350 351 static uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr, 352 struct peer_delete_cmd_params *req) 353 { 354 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 355 return buf_ptr + WMI_TLV_HDR_SIZE; 356 } 357 358 static inline size_t vdev_stop_mlo_params_size(struct vdev_stop_params *params) 359 { 360 return WMI_TLV_HDR_SIZE; 361 } 362 363 static inline uint8_t *vdev_stop_add_mlo_params(uint8_t *buf_ptr, 364 struct vdev_stop_params *params) 365 { 366 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 367 return buf_ptr + WMI_TLV_HDR_SIZE; 368 } 369 370 static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle) 371 { } 372 373 static inline void 374 extract_mgmt_rx_mlo_link_removal_tlv_count( 375 int num_link_removal_tlvs, 376 struct mgmt_rx_event_params *hdr) 377 { 378 } 379 #endif /*WLAN_FEATURE_11BE_MLO*/ 380 #endif /*_WMI_UNIFIED_11BE_TLV_H_*/ 381