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: ponter 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: ponter 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: ponter 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: ponter 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_add_ml_partner_links - Add MLO partner links in beacon template 64 * command 65 * @buf_ptr: pointer to beacon cmd buffer. 66 * @param: pointer to beacon template params 67 * 68 * Return: pointer to new offset of cmd buffer 69 */ 70 uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr, 71 struct beacon_tmpl_params *param); 72 /** 73 * peer_create_add_mlo_params() - Add MLO params in peer create cmd 74 * @buf_ptr: pointer to peer create cmd buffer. 75 * @req: pointer to peer create request param 76 * 77 * Return: pointer to new offset of cmd buffer 78 */ 79 uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 80 struct peer_create_params *req); 81 /** 82 * peer_create_mlo_params_size() - Get ML params size in peer create 83 * @req: pointer to peer create request param 84 * 85 * Return: size of ML params in peer create cmd 86 */ 87 size_t peer_create_mlo_params_size(struct peer_create_params *req); 88 /** 89 * peer_assoc_mlo_params_size() - Get ML params size in peer assoc 90 * @req: pointer to peer assoc request param 91 * 92 * Return: size of ML params in peer assoc cmd 93 */ 94 size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req); 95 /** 96 * peer_assoc_add_mlo_params() - Add MLO params in peer assoc cmd 97 * @buf_ptr: pointer to peer assoc cmd buffer. 98 * @req: pointer to peer assoc request param 99 * 100 * Return: pointer to new offset of cmd buffer 101 */ 102 uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 103 struct peer_assoc_params *req); 104 /** 105 * peer_assoc_add_ml_partner_links() - Add MLO partner links in peer assoc cmd 106 * @buf_ptr: pointer to peer assoc cmd buffer. 107 * @req: pointer to peer assoc request param 108 * 109 * Return: pointer to new offset of cmd buffer 110 */ 111 uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 112 struct peer_assoc_params *req); 113 /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks 114 * @wmi_handle: WMI handle 115 */ 116 void wmi_11be_attach_tlv(wmi_unified_t wmi_handle); 117 #else 118 static uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr, 119 struct vdev_create_params *param) 120 { 121 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 122 return buf_ptr + WMI_TLV_HDR_SIZE; 123 } 124 125 static size_t vdev_create_mlo_params_size(struct vdev_create_params *param) 126 { 127 return WMI_TLV_HDR_SIZE; 128 } 129 130 static uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr, 131 struct vdev_start_params *req) 132 { 133 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 134 return buf_ptr + WMI_TLV_HDR_SIZE; 135 } 136 137 static size_t vdev_start_mlo_params_size(struct vdev_start_params *req) 138 { 139 return WMI_TLV_HDR_SIZE; 140 } 141 142 static uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr, 143 struct vdev_start_params *req) 144 { 145 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 146 return buf_ptr + WMI_TLV_HDR_SIZE; 147 } 148 149 static uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr, 150 struct beacon_tmpl_params *param) 151 { 152 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 153 return buf_ptr + WMI_TLV_HDR_SIZE; 154 } 155 156 static uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 157 struct peer_create_params *req) 158 { 159 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 160 return buf_ptr + WMI_TLV_HDR_SIZE; 161 } 162 163 static size_t peer_create_mlo_params_size(struct peer_create_params *req) 164 { 165 return WMI_TLV_HDR_SIZE; 166 } 167 168 static size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req) 169 { 170 size_t peer_assoc_mlo_size = 171 WMI_TLV_HDR_SIZE + 172 WMI_TLV_HDR_SIZE; 173 174 return peer_assoc_mlo_size; 175 } 176 177 static uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 178 struct peer_assoc_params *req) 179 { 180 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 181 return buf_ptr + WMI_TLV_HDR_SIZE; 182 } 183 184 static uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 185 struct peer_assoc_params *req) 186 { 187 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 188 return buf_ptr + WMI_TLV_HDR_SIZE; 189 } 190 191 static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle) 192 { } 193 #endif /*WLAN_FEATURE_11BE_MLO*/ 194 #endif /*_WMI_UNIFIED_11BE_TLV_H_*/ 195