1 /*
2 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2023 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 * DOC: Implement API's specific to 11be.
19 */
20
21 #include "wmi_unified_11be_api.h"
22
23 /**
24 * wmi_extract_mlo_link_set_active_resp() - extract mlo link set active resp
25 * from event
26 * @wmi: WMI handle for this pdev
27 * @evt_buf: pointer to event buffer
28 * @resp: Pointer to hold mlo link set active resp
29 *
30 * Return: QDF_STATUS code
31 */
32 QDF_STATUS
wmi_extract_mlo_link_set_active_resp(wmi_unified_t wmi,void * evt_buf,struct mlo_link_set_active_resp * resp)33 wmi_extract_mlo_link_set_active_resp(wmi_unified_t wmi,
34 void *evt_buf,
35 struct mlo_link_set_active_resp *resp)
36 {
37 if (wmi->ops->extract_mlo_link_set_active_resp) {
38 return wmi->ops->extract_mlo_link_set_active_resp(wmi,
39 evt_buf,
40 resp);
41 }
42 return QDF_STATUS_E_FAILURE;
43 }
44
45 /**
46 * wmi_send_mlo_link_set_active_cmd() - send mlo link set active command
47 * @wmi: WMI handle for this pdev
48 * @param: Pointer to mlo link set active param
49 *
50 * Return: QDF_STATUS code
51 */
52 QDF_STATUS
wmi_send_mlo_link_set_active_cmd(wmi_unified_t wmi,struct mlo_link_set_active_param * param)53 wmi_send_mlo_link_set_active_cmd(wmi_unified_t wmi,
54 struct mlo_link_set_active_param *param)
55 {
56 if (wmi->ops->send_mlo_link_set_active_cmd)
57 return wmi->ops->send_mlo_link_set_active_cmd(wmi, param);
58
59 return QDF_STATUS_E_FAILURE;
60 }
61
62 #ifdef WLAN_FEATURE_11BE
wmi_send_mlo_peer_tid_to_link_map_cmd(wmi_unified_t wmi,struct wmi_host_tid_to_link_map_params * params,bool t2lm_info)63 QDF_STATUS wmi_send_mlo_peer_tid_to_link_map_cmd(
64 wmi_unified_t wmi,
65 struct wmi_host_tid_to_link_map_params *params,
66 bool t2lm_info)
67 {
68 if (wmi->ops->send_mlo_peer_tid_to_link_map)
69 return wmi->ops->send_mlo_peer_tid_to_link_map(wmi, params, t2lm_info);
70
71 return QDF_STATUS_E_FAILURE;
72 }
73
wmi_send_mlo_vdev_tid_to_link_map_cmd(wmi_unified_t wmi,struct wmi_host_tid_to_link_map_ap_params * params)74 QDF_STATUS wmi_send_mlo_vdev_tid_to_link_map_cmd(
75 wmi_unified_t wmi,
76 struct wmi_host_tid_to_link_map_ap_params *params)
77 {
78 if (wmi->ops->send_mlo_vdev_tid_to_link_map)
79 return wmi->ops->send_mlo_vdev_tid_to_link_map(wmi, params);
80
81 return QDF_STATUS_E_FAILURE;
82 }
83
84 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
85 QDF_STATUS
wmi_send_mlo_link_switch_req_cnf_cmd(wmi_unified_t wmi,struct wlan_mlo_link_switch_cnf * params)86 wmi_send_mlo_link_switch_req_cnf_cmd(wmi_unified_t wmi,
87 struct wlan_mlo_link_switch_cnf *params)
88 {
89 if (wmi->ops->send_mlo_link_switch_req_cnf_cmd)
90 return wmi->ops->send_mlo_link_switch_req_cnf_cmd(wmi, params);
91
92 return QDF_STATUS_E_FAILURE;
93 }
94
95 QDF_STATUS
wmi_extract_mlo_link_switch_request_evt(struct wmi_unified * wmi,void * buf,struct wlan_mlo_link_switch_req * req)96 wmi_extract_mlo_link_switch_request_evt(struct wmi_unified *wmi,
97 void *buf,
98 struct wlan_mlo_link_switch_req *req)
99 {
100 if (wmi->ops->extract_mlo_link_switch_request_event)
101 return wmi->ops->extract_mlo_link_switch_request_event(wmi,
102 buf,
103 req);
104
105 return QDF_STATUS_E_FAILURE;
106 }
107
108 QDF_STATUS
wmi_extract_mlo_link_state_switch_evt(struct wmi_unified * wmi,void * buf,uint8_t len,struct mlo_link_switch_state_info * info)109 wmi_extract_mlo_link_state_switch_evt(struct wmi_unified *wmi,
110 void *buf, uint8_t len,
111 struct mlo_link_switch_state_info *info)
112 {
113 if (wmi->ops->extract_mlo_link_state_switch_evt)
114 return wmi->ops->extract_mlo_link_state_switch_evt(
115 wmi, buf, len, info);
116
117 return QDF_STATUS_SUCCESS;
118 }
119 #endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
120
wmi_send_mlo_link_state_request_cmd(wmi_unified_t wmi,struct wmi_host_link_state_params * params)121 QDF_STATUS wmi_send_mlo_link_state_request_cmd(
122 wmi_unified_t wmi,
123 struct wmi_host_link_state_params *params)
124 {
125 if (wmi->ops->send_mlo_link_state_request)
126 return wmi->ops->send_mlo_link_state_request(wmi, params);
127 return QDF_STATUS_E_FAILURE;
128 }
129
wmi_send_link_set_bss_params_cmd(wmi_unified_t wmi,struct wmi_host_link_bss_params * params)130 QDF_STATUS wmi_send_link_set_bss_params_cmd(
131 wmi_unified_t wmi,
132 struct wmi_host_link_bss_params *params)
133 {
134 if (wmi->ops->send_link_set_bss_params_cmd)
135 return wmi->ops->send_link_set_bss_params_cmd(wmi, params);
136 return QDF_STATUS_E_FAILURE;
137 }
138
139 QDF_STATUS
wmi_extract_mlo_vdev_tid_to_link_map_event(wmi_unified_t wmi,void * evt_buf,struct mlo_vdev_host_tid_to_link_map_resp * resp)140 wmi_extract_mlo_vdev_tid_to_link_map_event(
141 wmi_unified_t wmi, void *evt_buf,
142 struct mlo_vdev_host_tid_to_link_map_resp *resp)
143 {
144 if (wmi->ops->extract_mlo_vdev_tid_to_link_map_event) {
145 return wmi->ops->extract_mlo_vdev_tid_to_link_map_event(wmi,
146 evt_buf,
147 resp);
148 }
149 return QDF_STATUS_E_FAILURE;
150 }
151
152 QDF_STATUS
wmi_extract_mlo_vdev_bcast_tid_to_link_map_event(wmi_unified_t wmi,void * evt_buf,struct mlo_bcast_t2lm_info * bcast)153 wmi_extract_mlo_vdev_bcast_tid_to_link_map_event(
154 wmi_unified_t wmi,
155 void *evt_buf,
156 struct mlo_bcast_t2lm_info *bcast)
157 {
158 if (wmi->ops->extract_mlo_vdev_bcast_tid_to_link_map_event) {
159 return wmi->ops->extract_mlo_vdev_bcast_tid_to_link_map_event(
160 wmi,
161 evt_buf,
162 bcast);
163 }
164 return QDF_STATUS_E_FAILURE;
165 }
166
wmi_extract_mlo_link_state_info_event(wmi_unified_t wmi,void * evt_buf,struct ml_link_state_info_event * params)167 QDF_STATUS wmi_extract_mlo_link_state_info_event(
168 wmi_unified_t wmi,
169 void *evt_buf,
170 struct ml_link_state_info_event *params)
171 {
172 if (wmi->ops->extract_mlo_link_state_event)
173 return wmi->ops->extract_mlo_link_state_event(
174 wmi, evt_buf, params);
175 return QDF_STATUS_E_FAILURE;
176 }
177
wmi_extract_mlo_link_disable_request_evt(struct wmi_unified * wmi,void * buf,struct mlo_link_disable_request_evt_params * params)178 QDF_STATUS wmi_extract_mlo_link_disable_request_evt(
179 struct wmi_unified *wmi,
180 void *buf,
181 struct mlo_link_disable_request_evt_params *params)
182 {
183 if (wmi->ops->extract_mlo_link_disable_request_evt_param)
184 return wmi->ops->extract_mlo_link_disable_request_evt_param(
185 wmi, buf, params);
186
187 return QDF_STATUS_E_FAILURE;
188 }
189 #endif /* WLAN_FEATURE_11BE */
190
191 QDF_STATUS
wmi_extract_mgmt_rx_ml_cu_params(wmi_unified_t wmi,void * evt_buf,struct mlo_mgmt_ml_info * cu_params)192 wmi_extract_mgmt_rx_ml_cu_params(wmi_unified_t wmi, void *evt_buf,
193 struct mlo_mgmt_ml_info *cu_params)
194 {
195 if (wmi->ops->extract_mgmt_rx_ml_cu_params)
196 return wmi->ops->extract_mgmt_rx_ml_cu_params(
197 wmi, evt_buf, cu_params);
198
199 return QDF_STATUS_E_FAILURE;
200 }
201
wmi_send_mlo_link_removal_cmd(wmi_unified_t wmi,const struct mlo_link_removal_cmd_params * param)202 QDF_STATUS wmi_send_mlo_link_removal_cmd(
203 wmi_unified_t wmi,
204 const struct mlo_link_removal_cmd_params *param)
205 {
206 if (wmi->ops->send_mlo_link_removal_cmd)
207 return wmi->ops->send_mlo_link_removal_cmd(wmi, param);
208
209 return QDF_STATUS_E_FAILURE;
210 }
211
wmi_send_mlo_vdev_pause(wmi_unified_t wmi,struct mlo_vdev_pause * info)212 QDF_STATUS wmi_send_mlo_vdev_pause(wmi_unified_t wmi,
213 struct mlo_vdev_pause *info)
214 {
215 if (wmi->ops->send_mlo_vdev_pause)
216 return wmi->ops->send_mlo_vdev_pause(wmi, info);
217
218 return QDF_STATUS_E_FAILURE;
219 }
220
wmi_extract_mlo_link_removal_evt_fixed_param(struct wmi_unified * wmi,void * buf,struct mlo_link_removal_evt_params * params)221 QDF_STATUS wmi_extract_mlo_link_removal_evt_fixed_param(
222 struct wmi_unified *wmi,
223 void *buf,
224 struct mlo_link_removal_evt_params *params)
225 {
226 if (wmi->ops->extract_mlo_link_removal_evt_fixed_param)
227 return wmi->ops->extract_mlo_link_removal_evt_fixed_param(
228 wmi, buf, params);
229
230 return QDF_STATUS_E_FAILURE;
231 }
232
wmi_extract_mlo_link_removal_tbtt_update(struct wmi_unified * wmi,void * buf,struct mlo_link_removal_tbtt_info * tbtt_info)233 QDF_STATUS wmi_extract_mlo_link_removal_tbtt_update(
234 struct wmi_unified *wmi,
235 void *buf,
236 struct mlo_link_removal_tbtt_info *tbtt_info)
237 {
238 if (wmi->ops->extract_mlo_link_removal_tbtt_update)
239 return wmi->ops->extract_mlo_link_removal_tbtt_update(
240 wmi, buf, tbtt_info);
241
242 return QDF_STATUS_E_FAILURE;
243 }
244
wmi_extract_mgmt_rx_mlo_link_removal_info(struct wmi_unified * wmi,void * buf,struct mgmt_rx_mlo_link_removal_info * link_removal_info,int num_link_removal_info)245 QDF_STATUS wmi_extract_mgmt_rx_mlo_link_removal_info(
246 struct wmi_unified *wmi,
247 void *buf,
248 struct mgmt_rx_mlo_link_removal_info *link_removal_info,
249 int num_link_removal_info)
250 {
251 if (wmi->ops->extract_mgmt_rx_mlo_link_removal_info)
252 return wmi->ops->extract_mgmt_rx_mlo_link_removal_info(
253 wmi, buf,
254 link_removal_info,
255 num_link_removal_info);
256
257 return QDF_STATUS_E_FAILURE;
258 }
259
260 #ifdef QCA_SUPPORT_PRIMARY_LINK_MIGRATE
wmi_unified_peer_ptqm_migrate_send(wmi_unified_t wmi_hdl,struct peer_ptqm_migrate_params * param)261 QDF_STATUS wmi_unified_peer_ptqm_migrate_send(
262 wmi_unified_t wmi_hdl,
263 struct peer_ptqm_migrate_params *param)
264 {
265 if (wmi_hdl->ops->send_peer_ptqm_migrate_cmd)
266 return wmi_hdl->ops->send_peer_ptqm_migrate_cmd(wmi_hdl, param);
267
268 return QDF_STATUS_E_FAILURE;
269 }
270
271 QDF_STATUS
wmi_extract_peer_ptqm_migrate_event(wmi_unified_t wmi,void * evt_buf,struct peer_ptqm_migrate_event_params * resp)272 wmi_extract_peer_ptqm_migrate_event(
273 wmi_unified_t wmi, void *evt_buf,
274 struct peer_ptqm_migrate_event_params *resp)
275 {
276 if (wmi->ops->extract_peer_ptqm_migrate_event) {
277 return wmi->ops->extract_peer_ptqm_migrate_event(wmi,
278 evt_buf,
279 resp);
280 }
281 return QDF_STATUS_E_FAILURE;
282 }
283
284 QDF_STATUS
wmi_extract_peer_ptqm_entry_param(wmi_unified_t wmi_handle,void * evt_buf,uint32_t index,struct peer_entry_ptqm_migrate_event_params * entry)285 wmi_extract_peer_ptqm_entry_param(
286 wmi_unified_t wmi_handle, void *evt_buf,
287 uint32_t index,
288 struct peer_entry_ptqm_migrate_event_params *entry)
289 {
290 if (wmi_handle->ops->extract_peer_entry_ptqm_migrate_event)
291 return wmi_handle->ops->extract_peer_entry_ptqm_migrate_event(
292 wmi_handle, evt_buf,
293 index, entry);
294
295 return QDF_STATUS_E_FAILURE;
296 }
297 #endif /* QCA_SUPPORT_PRIMARY_LINK_MIGRATE */
298