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 * peer_create_add_mlo_params() - Add MLO params in peer create cmd 101 * @buf_ptr: pointer to peer create cmd buffer. 102 * @req: pointer to peer create request param 103 * 104 * Return: pointer to new offset of cmd buffer 105 */ 106 uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 107 struct peer_create_params *req); 108 /** 109 * peer_create_mlo_params_size() - Get ML params size in peer create 110 * @req: pointer to peer create request param 111 * 112 * Return: size of ML params in peer create cmd 113 */ 114 size_t peer_create_mlo_params_size(struct peer_create_params *req); 115 /** 116 * peer_assoc_mlo_params_size() - Get ML params size in peer assoc 117 * @req: pointer to peer assoc request param 118 * 119 * Return: size of ML params in peer assoc cmd 120 */ 121 size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req); 122 /** 123 * peer_assoc_add_mlo_params() - Add MLO params in peer assoc cmd 124 * @buf_ptr: pointer to peer assoc cmd buffer. 125 * @req: pointer to peer assoc request param 126 * 127 * Return: pointer to new offset of cmd buffer 128 */ 129 uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 130 struct peer_assoc_params *req); 131 /** 132 * peer_assoc_add_ml_partner_links() - Add MLO partner links in peer assoc cmd 133 * @buf_ptr: pointer to peer assoc cmd buffer. 134 * @req: pointer to peer assoc request param 135 * 136 * Return: pointer to new offset of cmd buffer 137 */ 138 uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 139 struct peer_assoc_params *req); 140 /** 141 * peer_assoc_t2lm_params_size() - Get T2LM param size in peer assoc 142 * @req: pointer to peer create request param 143 * 144 * Return: size of ML params in peer create cmd 145 */ 146 size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req); 147 /** 148 * peer_assoc_add_tid_to_link_map() - Add TID-to-link mapping in peer assoc cmd 149 * @buf_ptr: pointer to peer assoc cmd buffer. 150 * @req: pointer to peer assoc request param 151 * 152 * Return: pointer to new offset of cmd buffer 153 */ 154 uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr, 155 struct peer_assoc_params *req); 156 157 /** 158 * peer_delete_mlo_params_size() - Get MLO params size in pdev delete 159 * @req: peer delete request params 160 * 161 * Return: size of MLO params in vdev start 162 */ 163 size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req); 164 165 /** 166 * peer_delete_add_mlo_params() - Add MLO params in peer delete cmd 167 * @buf_ptr: pointer to peer delete cmd buffer. 168 * @req: pointer to peer delete request param 169 * 170 * Return: pointer to new offset of cmd buffer 171 */ 172 uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr, 173 struct peer_delete_cmd_params *req); 174 175 /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks 176 * @wmi_handle: WMI handle 177 */ 178 void wmi_11be_attach_tlv(wmi_unified_t wmi_handle); 179 #else 180 static uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr, 181 struct vdev_create_params *param) 182 { 183 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 184 return buf_ptr + WMI_TLV_HDR_SIZE; 185 } 186 187 static size_t vdev_create_mlo_params_size(struct vdev_create_params *param) 188 { 189 return WMI_TLV_HDR_SIZE; 190 } 191 192 static uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr, 193 struct vdev_start_params *req) 194 { 195 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 196 return buf_ptr + WMI_TLV_HDR_SIZE; 197 } 198 199 static size_t vdev_start_mlo_params_size(struct vdev_start_params *req) 200 { 201 return WMI_TLV_HDR_SIZE; 202 } 203 204 static uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr, 205 struct vdev_start_params *req) 206 { 207 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 208 return buf_ptr + WMI_TLV_HDR_SIZE; 209 } 210 211 static size_t bcn_tmpl_mlo_param_size(struct beacon_tmpl_params *param) 212 { 213 return WMI_TLV_HDR_SIZE; 214 } 215 216 static uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr, 217 struct beacon_tmpl_params *param) 218 { 219 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 220 return buf_ptr + WMI_TLV_HDR_SIZE; 221 } 222 223 static size_t bcn_tmpl_ml_info_size(struct beacon_tmpl_params *param) 224 { 225 return WMI_TLV_HDR_SIZE; 226 } 227 228 static uint8_t *bcn_tmpl_add_ml_info(uint8_t *buf_ptr, 229 struct beacon_tmpl_params *param) 230 { 231 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 232 return buf_ptr + WMI_TLV_HDR_SIZE; 233 } 234 235 static uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 236 struct peer_create_params *req) 237 { 238 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 239 return buf_ptr + WMI_TLV_HDR_SIZE; 240 } 241 242 static size_t peer_create_mlo_params_size(struct peer_create_params *req) 243 { 244 return WMI_TLV_HDR_SIZE; 245 } 246 247 static size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req) 248 { 249 size_t peer_assoc_mlo_size = 250 WMI_TLV_HDR_SIZE + 251 WMI_TLV_HDR_SIZE; 252 253 return peer_assoc_mlo_size; 254 } 255 256 static uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 257 struct peer_assoc_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 uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 264 struct peer_assoc_params *req) 265 { 266 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 267 return buf_ptr + WMI_TLV_HDR_SIZE; 268 } 269 270 static size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req) 271 { 272 return WMI_TLV_HDR_SIZE; 273 } 274 275 static uint8_t *peer_assoc_add_tid_to_link_map(uint8_t *buf_ptr, 276 struct peer_assoc_params *req) 277 { 278 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 279 return buf_ptr + WMI_TLV_HDR_SIZE; 280 } 281 282 static size_t peer_delete_mlo_params_size(struct peer_delete_cmd_params *req) 283 { 284 return WMI_TLV_HDR_SIZE; 285 } 286 287 static uint8_t *peer_delete_add_mlo_params(uint8_t *buf_ptr, 288 struct peer_delete_cmd_params *req) 289 { 290 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 291 return buf_ptr + WMI_TLV_HDR_SIZE; 292 } 293 294 static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle) 295 { } 296 #endif /*WLAN_FEATURE_11BE_MLO*/ 297 #endif /*_WMI_UNIFIED_11BE_TLV_H_*/ 298