1 /* 2 * Copyright (c) 2021, The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef _WMI_UNIFIED_11BE_TLV_H_ 18 #define _WMI_UNIFIED_11BE_TLV_H_ 19 20 #ifdef WLAN_FEATURE_11BE_MLO 21 /** 22 * vdev_create_mlo_params_size() - Get MLO params size in vdev create 23 * 24 * Return: size of MLO params in vdev create 25 */ 26 size_t vdev_create_mlo_params_size(void); 27 /** 28 * vdev_create_add_mlo_params() - Add MLO params in vdev create cmd 29 * @buf_ptr: pointer to vdev create buffer. 30 * @param: ponter to vdev create request param 31 * 32 * Return: pointer to new offset of vdev create buffer 33 */ 34 uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr, 35 struct vdev_create_params *param); 36 /** 37 * vdev_start_mlo_params_size() - Get MLO params size in vdev start 38 * @req: Vdev start request params 39 * 40 * Return: size of MLO params in vdev start 41 */ 42 size_t vdev_start_mlo_params_size(struct vdev_start_params *req); 43 /** 44 * vdev_start_add_mlo_params() - Add MLO params in vdev start cmd 45 * @buf_ptr: pointer to vdev start buffer. 46 * @req: ponter to vdev create request param 47 * 48 * Return: pointer to new offset of cmd buffer 49 */ 50 uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr, 51 struct vdev_start_params *req); 52 /** 53 * vdev_start_add_ml_partner_links() - Add MLO partner links in vdev start cmd 54 * @buf_ptr: pointer to vdev start cmd buffer. 55 * @req: ponter to vdev start request param 56 * 57 * Return: pointer to new offset of cmd buffer 58 */ 59 uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr, 60 struct vdev_start_params *req); 61 /** 62 * bcn_tmpl_add_ml_partner_links - Add MLO partner links in beacon template 63 * command 64 * @buf_ptr: pointer to beacon cmd buffer. 65 * @param: pointer to beacon template params 66 * 67 * Return: pointer to new offset of cmd buffer 68 */ 69 uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr, 70 struct beacon_tmpl_params *param); 71 /** 72 * peer_create_add_mlo_params() - Add MLO params in peer create cmd 73 * @buf_ptr: pointer to peer create cmd buffer. 74 * @req: pointer to peer create request param 75 * 76 * Return: pointer to new offset of cmd buffer 77 */ 78 uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 79 struct peer_create_params *req); 80 /** 81 * peer_create_mlo_params_size() - Get ML params size in peer create 82 * @req: pointer to peer create request param 83 * 84 * Return: size of ML params in peer create cmd 85 */ 86 size_t peer_create_mlo_params_size(struct peer_create_params *req); 87 /** 88 * peer_assoc_mlo_params_size() - Get ML params size in peer assoc 89 * @req: pointer to peer assoc request param 90 * 91 * Return: size of ML params in peer assoc cmd 92 */ 93 size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req); 94 /** 95 * peer_assoc_add_mlo_params() - Add MLO params in peer assoc cmd 96 * @buf_ptr: pointer to peer assoc cmd buffer. 97 * @req: pointer to peer assoc request param 98 * 99 * Return: pointer to new offset of cmd buffer 100 */ 101 uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 102 struct peer_assoc_params *req); 103 /** 104 * peer_assoc_add_ml_partner_links() - Add MLO partner links in peer assoc cmd 105 * @buf_ptr: pointer to peer assoc cmd buffer. 106 * @req: pointer to peer assoc request param 107 * 108 * Return: pointer to new offset of cmd buffer 109 */ 110 uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 111 struct peer_assoc_params *req); 112 /** wmi_11be_tlv_attach_tlv - Attach 11be relaated callbacks 113 * @wmi_handle: WMI handle 114 */ 115 void wmi_11be_attach_tlv(wmi_unified_t wmi_handle); 116 #else 117 static uint8_t *vdev_create_add_mlo_params(uint8_t *buf_ptr, 118 struct vdev_create_params *param) 119 { 120 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 121 return buf_ptr + WMI_TLV_HDR_SIZE; 122 } 123 124 static size_t vdev_create_mlo_params_size(void) 125 { 126 return WMI_TLV_HDR_SIZE; 127 } 128 129 static uint8_t *vdev_start_add_mlo_params(uint8_t *buf_ptr, 130 struct vdev_start_params *req) 131 { 132 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 133 return buf_ptr + WMI_TLV_HDR_SIZE; 134 } 135 136 static size_t vdev_start_mlo_params_size(struct vdev_start_params *req) 137 { 138 return WMI_TLV_HDR_SIZE; 139 } 140 141 static uint8_t *vdev_start_add_ml_partner_links(uint8_t *buf_ptr, 142 struct vdev_start_params *req) 143 { 144 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 145 return buf_ptr + WMI_TLV_HDR_SIZE; 146 } 147 148 static uint8_t *bcn_tmpl_add_ml_partner_links(uint8_t *buf_ptr, 149 struct beacon_tmpl_params *param) 150 { 151 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 152 return buf_ptr + WMI_TLV_HDR_SIZE; 153 } 154 155 static uint8_t *peer_create_add_mlo_params(uint8_t *buf_ptr, 156 struct peer_create_params *req) 157 { 158 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 159 return buf_ptr + WMI_TLV_HDR_SIZE; 160 } 161 162 static size_t peer_create_mlo_params_size(struct peer_create_params *req) 163 { 164 return WMI_TLV_HDR_SIZE; 165 } 166 167 static size_t peer_assoc_mlo_params_size(struct peer_assoc_params *req) 168 { 169 size_t peer_assoc_mlo_size = 170 WMI_TLV_HDR_SIZE + 171 WMI_TLV_HDR_SIZE; 172 173 return peer_assoc_mlo_size; 174 } 175 176 static uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr, 177 struct peer_assoc_params *req) 178 { 179 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 180 return buf_ptr + WMI_TLV_HDR_SIZE; 181 } 182 183 static uint8_t *peer_assoc_add_ml_partner_links(uint8_t *buf_ptr, 184 struct peer_assoc_params *req) 185 { 186 WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, 0); 187 return buf_ptr + WMI_TLV_HDR_SIZE; 188 } 189 190 static void wmi_11be_attach_tlv(wmi_unified_t wmi_handle) 191 { } 192 #endif /*WLAN_FEATURE_11BE_MLO*/ 193 #endif /*_WMI_UNIFIED_11BE_TLV_H_*/ 194