xref: /wlan-driver/qca-wifi-host-cmn/wmi/src/wmi_unified_11be_api.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name /**
18*5113495bSYour Name  * DOC: Implement API's specific to 11be.
19*5113495bSYour Name  */
20*5113495bSYour Name 
21*5113495bSYour Name #include "wmi_unified_11be_api.h"
22*5113495bSYour Name 
23*5113495bSYour Name /**
24*5113495bSYour Name  * wmi_extract_mlo_link_set_active_resp() - extract mlo link set active resp
25*5113495bSYour Name  *  from event
26*5113495bSYour Name  * @wmi: WMI handle for this pdev
27*5113495bSYour Name  * @evt_buf: pointer to event buffer
28*5113495bSYour Name  * @resp: Pointer to hold mlo link set active resp
29*5113495bSYour Name  *
30*5113495bSYour Name  * Return: QDF_STATUS code
31*5113495bSYour Name  */
32*5113495bSYour Name QDF_STATUS
wmi_extract_mlo_link_set_active_resp(wmi_unified_t wmi,void * evt_buf,struct mlo_link_set_active_resp * resp)33*5113495bSYour Name wmi_extract_mlo_link_set_active_resp(wmi_unified_t wmi,
34*5113495bSYour Name 				     void *evt_buf,
35*5113495bSYour Name 				     struct mlo_link_set_active_resp *resp)
36*5113495bSYour Name {
37*5113495bSYour Name 	if (wmi->ops->extract_mlo_link_set_active_resp) {
38*5113495bSYour Name 		return wmi->ops->extract_mlo_link_set_active_resp(wmi,
39*5113495bSYour Name 								  evt_buf,
40*5113495bSYour Name 								  resp);
41*5113495bSYour Name 	}
42*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
43*5113495bSYour Name }
44*5113495bSYour Name 
45*5113495bSYour Name /**
46*5113495bSYour Name  * wmi_send_mlo_link_set_active_cmd() - send mlo link set active command
47*5113495bSYour Name  * @wmi: WMI handle for this pdev
48*5113495bSYour Name  * @param: Pointer to mlo link set active param
49*5113495bSYour Name  *
50*5113495bSYour Name  * Return: QDF_STATUS code
51*5113495bSYour Name  */
52*5113495bSYour Name QDF_STATUS
wmi_send_mlo_link_set_active_cmd(wmi_unified_t wmi,struct mlo_link_set_active_param * param)53*5113495bSYour Name wmi_send_mlo_link_set_active_cmd(wmi_unified_t wmi,
54*5113495bSYour Name 				 struct mlo_link_set_active_param *param)
55*5113495bSYour Name {
56*5113495bSYour Name 	if (wmi->ops->send_mlo_link_set_active_cmd)
57*5113495bSYour Name 		return wmi->ops->send_mlo_link_set_active_cmd(wmi, param);
58*5113495bSYour Name 
59*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
60*5113495bSYour Name }
61*5113495bSYour Name 
62*5113495bSYour Name #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*5113495bSYour Name QDF_STATUS wmi_send_mlo_peer_tid_to_link_map_cmd(
64*5113495bSYour Name 		wmi_unified_t wmi,
65*5113495bSYour Name 		struct wmi_host_tid_to_link_map_params *params,
66*5113495bSYour Name 		bool t2lm_info)
67*5113495bSYour Name {
68*5113495bSYour Name 	if (wmi->ops->send_mlo_peer_tid_to_link_map)
69*5113495bSYour Name 		return wmi->ops->send_mlo_peer_tid_to_link_map(wmi, params, t2lm_info);
70*5113495bSYour Name 
71*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
72*5113495bSYour Name }
73*5113495bSYour Name 
wmi_send_mlo_vdev_tid_to_link_map_cmd(wmi_unified_t wmi,struct wmi_host_tid_to_link_map_ap_params * params)74*5113495bSYour Name QDF_STATUS wmi_send_mlo_vdev_tid_to_link_map_cmd(
75*5113495bSYour Name 		wmi_unified_t wmi,
76*5113495bSYour Name 		struct wmi_host_tid_to_link_map_ap_params *params)
77*5113495bSYour Name {
78*5113495bSYour Name 	if (wmi->ops->send_mlo_vdev_tid_to_link_map)
79*5113495bSYour Name 		return wmi->ops->send_mlo_vdev_tid_to_link_map(wmi, params);
80*5113495bSYour Name 
81*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
82*5113495bSYour Name }
83*5113495bSYour Name 
84*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
85*5113495bSYour Name QDF_STATUS
wmi_send_mlo_link_switch_req_cnf_cmd(wmi_unified_t wmi,struct wlan_mlo_link_switch_cnf * params)86*5113495bSYour Name wmi_send_mlo_link_switch_req_cnf_cmd(wmi_unified_t wmi,
87*5113495bSYour Name 				     struct wlan_mlo_link_switch_cnf *params)
88*5113495bSYour Name {
89*5113495bSYour Name 	if (wmi->ops->send_mlo_link_switch_req_cnf_cmd)
90*5113495bSYour Name 		return wmi->ops->send_mlo_link_switch_req_cnf_cmd(wmi, params);
91*5113495bSYour Name 
92*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
93*5113495bSYour Name }
94*5113495bSYour Name 
95*5113495bSYour Name QDF_STATUS
wmi_extract_mlo_link_switch_request_evt(struct wmi_unified * wmi,void * buf,struct wlan_mlo_link_switch_req * req)96*5113495bSYour Name wmi_extract_mlo_link_switch_request_evt(struct wmi_unified *wmi,
97*5113495bSYour Name 					void *buf,
98*5113495bSYour Name 					struct wlan_mlo_link_switch_req *req)
99*5113495bSYour Name {
100*5113495bSYour Name 	if (wmi->ops->extract_mlo_link_switch_request_event)
101*5113495bSYour Name 		return wmi->ops->extract_mlo_link_switch_request_event(wmi,
102*5113495bSYour Name 								       buf,
103*5113495bSYour Name 								       req);
104*5113495bSYour Name 
105*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
106*5113495bSYour Name }
107*5113495bSYour Name 
108*5113495bSYour Name 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*5113495bSYour Name wmi_extract_mlo_link_state_switch_evt(struct wmi_unified *wmi,
110*5113495bSYour Name 				      void *buf, uint8_t len,
111*5113495bSYour Name 				      struct mlo_link_switch_state_info *info)
112*5113495bSYour Name {
113*5113495bSYour Name 	if (wmi->ops->extract_mlo_link_state_switch_evt)
114*5113495bSYour Name 		return wmi->ops->extract_mlo_link_state_switch_evt(
115*5113495bSYour Name 							wmi, buf, len, info);
116*5113495bSYour Name 
117*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
118*5113495bSYour Name }
119*5113495bSYour Name #endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
120*5113495bSYour Name 
wmi_send_mlo_link_state_request_cmd(wmi_unified_t wmi,struct wmi_host_link_state_params * params)121*5113495bSYour Name QDF_STATUS wmi_send_mlo_link_state_request_cmd(
122*5113495bSYour Name 		wmi_unified_t wmi,
123*5113495bSYour Name 		struct wmi_host_link_state_params *params)
124*5113495bSYour Name {
125*5113495bSYour Name 	if (wmi->ops->send_mlo_link_state_request)
126*5113495bSYour Name 		return wmi->ops->send_mlo_link_state_request(wmi, params);
127*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
128*5113495bSYour Name }
129*5113495bSYour Name 
wmi_send_link_set_bss_params_cmd(wmi_unified_t wmi,struct wmi_host_link_bss_params * params)130*5113495bSYour Name QDF_STATUS wmi_send_link_set_bss_params_cmd(
131*5113495bSYour Name 		wmi_unified_t wmi,
132*5113495bSYour Name 		struct wmi_host_link_bss_params *params)
133*5113495bSYour Name {
134*5113495bSYour Name 	if (wmi->ops->send_link_set_bss_params_cmd)
135*5113495bSYour Name 		return wmi->ops->send_link_set_bss_params_cmd(wmi, params);
136*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
137*5113495bSYour Name }
138*5113495bSYour Name 
139*5113495bSYour Name 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*5113495bSYour Name wmi_extract_mlo_vdev_tid_to_link_map_event(
141*5113495bSYour Name 		wmi_unified_t wmi, void *evt_buf,
142*5113495bSYour Name 		struct mlo_vdev_host_tid_to_link_map_resp *resp)
143*5113495bSYour Name {
144*5113495bSYour Name 	if (wmi->ops->extract_mlo_vdev_tid_to_link_map_event) {
145*5113495bSYour Name 		return wmi->ops->extract_mlo_vdev_tid_to_link_map_event(wmi,
146*5113495bSYour Name 									evt_buf,
147*5113495bSYour Name 									resp);
148*5113495bSYour Name 	}
149*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
150*5113495bSYour Name }
151*5113495bSYour Name 
152*5113495bSYour Name 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*5113495bSYour Name wmi_extract_mlo_vdev_bcast_tid_to_link_map_event(
154*5113495bSYour Name 				     wmi_unified_t wmi,
155*5113495bSYour Name 				     void *evt_buf,
156*5113495bSYour Name 				     struct mlo_bcast_t2lm_info *bcast)
157*5113495bSYour Name {
158*5113495bSYour Name 	if (wmi->ops->extract_mlo_vdev_bcast_tid_to_link_map_event) {
159*5113495bSYour Name 		return wmi->ops->extract_mlo_vdev_bcast_tid_to_link_map_event(
160*5113495bSYour Name 						wmi,
161*5113495bSYour Name 						evt_buf,
162*5113495bSYour Name 						bcast);
163*5113495bSYour Name 	}
164*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
165*5113495bSYour Name }
166*5113495bSYour Name 
wmi_extract_mlo_link_state_info_event(wmi_unified_t wmi,void * evt_buf,struct ml_link_state_info_event * params)167*5113495bSYour Name QDF_STATUS wmi_extract_mlo_link_state_info_event(
168*5113495bSYour Name 		wmi_unified_t wmi,
169*5113495bSYour Name 		void *evt_buf,
170*5113495bSYour Name 		struct ml_link_state_info_event *params)
171*5113495bSYour Name {
172*5113495bSYour Name 	if (wmi->ops->extract_mlo_link_state_event)
173*5113495bSYour Name 		return wmi->ops->extract_mlo_link_state_event(
174*5113495bSYour Name 				wmi, evt_buf, params);
175*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
176*5113495bSYour Name }
177*5113495bSYour Name 
wmi_extract_mlo_link_disable_request_evt(struct wmi_unified * wmi,void * buf,struct mlo_link_disable_request_evt_params * params)178*5113495bSYour Name QDF_STATUS wmi_extract_mlo_link_disable_request_evt(
179*5113495bSYour Name 		struct wmi_unified *wmi,
180*5113495bSYour Name 		void *buf,
181*5113495bSYour Name 		struct mlo_link_disable_request_evt_params *params)
182*5113495bSYour Name {
183*5113495bSYour Name 	if (wmi->ops->extract_mlo_link_disable_request_evt_param)
184*5113495bSYour Name 		return wmi->ops->extract_mlo_link_disable_request_evt_param(
185*5113495bSYour Name 							wmi, buf, params);
186*5113495bSYour Name 
187*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
188*5113495bSYour Name }
189*5113495bSYour Name #endif /* WLAN_FEATURE_11BE */
190*5113495bSYour Name 
191*5113495bSYour Name QDF_STATUS
wmi_extract_mgmt_rx_ml_cu_params(wmi_unified_t wmi,void * evt_buf,struct mlo_mgmt_ml_info * cu_params)192*5113495bSYour Name wmi_extract_mgmt_rx_ml_cu_params(wmi_unified_t wmi, void *evt_buf,
193*5113495bSYour Name 				 struct mlo_mgmt_ml_info *cu_params)
194*5113495bSYour Name {
195*5113495bSYour Name 	if (wmi->ops->extract_mgmt_rx_ml_cu_params)
196*5113495bSYour Name 		return wmi->ops->extract_mgmt_rx_ml_cu_params(
197*5113495bSYour Name 				wmi, evt_buf, cu_params);
198*5113495bSYour Name 
199*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
200*5113495bSYour Name }
201*5113495bSYour Name 
wmi_send_mlo_link_removal_cmd(wmi_unified_t wmi,const struct mlo_link_removal_cmd_params * param)202*5113495bSYour Name QDF_STATUS wmi_send_mlo_link_removal_cmd(
203*5113495bSYour Name 		wmi_unified_t wmi,
204*5113495bSYour Name 		const struct mlo_link_removal_cmd_params *param)
205*5113495bSYour Name {
206*5113495bSYour Name 	if (wmi->ops->send_mlo_link_removal_cmd)
207*5113495bSYour Name 		return wmi->ops->send_mlo_link_removal_cmd(wmi, param);
208*5113495bSYour Name 
209*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
210*5113495bSYour Name }
211*5113495bSYour Name 
wmi_send_mlo_vdev_pause(wmi_unified_t wmi,struct mlo_vdev_pause * info)212*5113495bSYour Name QDF_STATUS wmi_send_mlo_vdev_pause(wmi_unified_t wmi,
213*5113495bSYour Name 				   struct mlo_vdev_pause *info)
214*5113495bSYour Name {
215*5113495bSYour Name 	if (wmi->ops->send_mlo_vdev_pause)
216*5113495bSYour Name 		return wmi->ops->send_mlo_vdev_pause(wmi, info);
217*5113495bSYour Name 
218*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
219*5113495bSYour Name }
220*5113495bSYour Name 
wmi_extract_mlo_link_removal_evt_fixed_param(struct wmi_unified * wmi,void * buf,struct mlo_link_removal_evt_params * params)221*5113495bSYour Name QDF_STATUS wmi_extract_mlo_link_removal_evt_fixed_param(
222*5113495bSYour Name 		struct wmi_unified *wmi,
223*5113495bSYour Name 		void *buf,
224*5113495bSYour Name 		struct mlo_link_removal_evt_params *params)
225*5113495bSYour Name {
226*5113495bSYour Name 	if (wmi->ops->extract_mlo_link_removal_evt_fixed_param)
227*5113495bSYour Name 		return wmi->ops->extract_mlo_link_removal_evt_fixed_param(
228*5113495bSYour Name 							wmi, buf, params);
229*5113495bSYour Name 
230*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
231*5113495bSYour Name }
232*5113495bSYour Name 
wmi_extract_mlo_link_removal_tbtt_update(struct wmi_unified * wmi,void * buf,struct mlo_link_removal_tbtt_info * tbtt_info)233*5113495bSYour Name QDF_STATUS wmi_extract_mlo_link_removal_tbtt_update(
234*5113495bSYour Name 		struct wmi_unified *wmi,
235*5113495bSYour Name 		void *buf,
236*5113495bSYour Name 		struct mlo_link_removal_tbtt_info *tbtt_info)
237*5113495bSYour Name {
238*5113495bSYour Name 	if (wmi->ops->extract_mlo_link_removal_tbtt_update)
239*5113495bSYour Name 		return wmi->ops->extract_mlo_link_removal_tbtt_update(
240*5113495bSYour Name 							wmi, buf, tbtt_info);
241*5113495bSYour Name 
242*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
243*5113495bSYour Name }
244*5113495bSYour Name 
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*5113495bSYour Name QDF_STATUS wmi_extract_mgmt_rx_mlo_link_removal_info(
246*5113495bSYour Name 		struct wmi_unified *wmi,
247*5113495bSYour Name 		void *buf,
248*5113495bSYour Name 		struct mgmt_rx_mlo_link_removal_info *link_removal_info,
249*5113495bSYour Name 		int num_link_removal_info)
250*5113495bSYour Name {
251*5113495bSYour Name 	if (wmi->ops->extract_mgmt_rx_mlo_link_removal_info)
252*5113495bSYour Name 		return wmi->ops->extract_mgmt_rx_mlo_link_removal_info(
253*5113495bSYour Name 							wmi, buf,
254*5113495bSYour Name 							link_removal_info,
255*5113495bSYour Name 							num_link_removal_info);
256*5113495bSYour Name 
257*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
258*5113495bSYour Name }
259*5113495bSYour Name 
260*5113495bSYour Name #ifdef QCA_SUPPORT_PRIMARY_LINK_MIGRATE
wmi_unified_peer_ptqm_migrate_send(wmi_unified_t wmi_hdl,struct peer_ptqm_migrate_params * param)261*5113495bSYour Name QDF_STATUS wmi_unified_peer_ptqm_migrate_send(
262*5113495bSYour Name 					wmi_unified_t wmi_hdl,
263*5113495bSYour Name 					struct peer_ptqm_migrate_params *param)
264*5113495bSYour Name {
265*5113495bSYour Name 	if (wmi_hdl->ops->send_peer_ptqm_migrate_cmd)
266*5113495bSYour Name 		return wmi_hdl->ops->send_peer_ptqm_migrate_cmd(wmi_hdl, param);
267*5113495bSYour Name 
268*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
269*5113495bSYour Name }
270*5113495bSYour Name 
271*5113495bSYour Name QDF_STATUS
wmi_extract_peer_ptqm_migrate_event(wmi_unified_t wmi,void * evt_buf,struct peer_ptqm_migrate_event_params * resp)272*5113495bSYour Name wmi_extract_peer_ptqm_migrate_event(
273*5113495bSYour Name 		wmi_unified_t wmi, void *evt_buf,
274*5113495bSYour Name 		struct peer_ptqm_migrate_event_params *resp)
275*5113495bSYour Name {
276*5113495bSYour Name 	if (wmi->ops->extract_peer_ptqm_migrate_event) {
277*5113495bSYour Name 		return wmi->ops->extract_peer_ptqm_migrate_event(wmi,
278*5113495bSYour Name 								 evt_buf,
279*5113495bSYour Name 								 resp);
280*5113495bSYour Name 	}
281*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
282*5113495bSYour Name }
283*5113495bSYour Name 
284*5113495bSYour Name 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*5113495bSYour Name wmi_extract_peer_ptqm_entry_param(
286*5113495bSYour Name 		wmi_unified_t wmi_handle, void *evt_buf,
287*5113495bSYour Name 		uint32_t index,
288*5113495bSYour Name 		struct peer_entry_ptqm_migrate_event_params *entry)
289*5113495bSYour Name {
290*5113495bSYour Name 	if (wmi_handle->ops->extract_peer_entry_ptqm_migrate_event)
291*5113495bSYour Name 		return wmi_handle->ops->extract_peer_entry_ptqm_migrate_event(
292*5113495bSYour Name 			wmi_handle, evt_buf,
293*5113495bSYour Name 			index, entry);
294*5113495bSYour Name 
295*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
296*5113495bSYour Name }
297*5113495bSYour Name #endif /* QCA_SUPPORT_PRIMARY_LINK_MIGRATE */
298