xref: /wlan-dirver/qca-wifi-host-cmn/wmi/inc/wmi_unified_11be_tlv.h (revision 2f4b444fb7e689b83a4ab0e7b3b38f0bf4def8e0)
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