xref: /wlan-driver/qca-wifi-host-cmn/wmi/src/wmi_unified_reg_api.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 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
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name /**
21*5113495bSYour Name  * DOC: Implement API's specific to Regulatory component.
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #include <qdf_status.h>
25*5113495bSYour Name #include <qdf_module.h>
26*5113495bSYour Name #include <wmi_unified_api.h>
27*5113495bSYour Name #include <wmi_unified_priv.h>
28*5113495bSYour Name #include <wmi_unified_reg_api.h>
29*5113495bSYour Name 
wmi_extract_reg_chan_list_update_event(wmi_unified_t wmi_handle,uint8_t * evt_buf,struct cur_regulatory_info * reg_info,uint32_t len)30*5113495bSYour Name QDF_STATUS wmi_extract_reg_chan_list_update_event(
31*5113495bSYour Name 		wmi_unified_t wmi_handle,
32*5113495bSYour Name 		uint8_t *evt_buf,
33*5113495bSYour Name 		struct cur_regulatory_info *reg_info,
34*5113495bSYour Name 		uint32_t len)
35*5113495bSYour Name {
36*5113495bSYour Name 	if (wmi_handle && wmi_handle->ops->extract_reg_chan_list_update_event)
37*5113495bSYour Name 		return wmi_handle->ops->extract_reg_chan_list_update_event
38*5113495bSYour Name 			(wmi_handle,
39*5113495bSYour Name 			 evt_buf, reg_info, len);
40*5113495bSYour Name 
41*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
42*5113495bSYour Name }
43*5113495bSYour Name qdf_export_symbol(wmi_extract_reg_chan_list_update_event);
44*5113495bSYour Name 
45*5113495bSYour Name #ifdef CONFIG_BAND_6GHZ
wmi_extract_reg_chan_list_ext_update_event(wmi_unified_t wmi_handle,uint8_t * evt_buf,struct cur_regulatory_info * reg_info,uint32_t len)46*5113495bSYour Name QDF_STATUS wmi_extract_reg_chan_list_ext_update_event(
47*5113495bSYour Name 		wmi_unified_t wmi_handle,
48*5113495bSYour Name 		uint8_t *evt_buf,
49*5113495bSYour Name 		struct cur_regulatory_info *reg_info,
50*5113495bSYour Name 		uint32_t len)
51*5113495bSYour Name {
52*5113495bSYour Name 	if (wmi_handle &&
53*5113495bSYour Name 	    wmi_handle->ops->extract_reg_chan_list_ext_update_event)
54*5113495bSYour Name 		return wmi_handle->ops->extract_reg_chan_list_ext_update_event
55*5113495bSYour Name 					(wmi_handle, evt_buf, reg_info, len);
56*5113495bSYour Name 
57*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
58*5113495bSYour Name }
59*5113495bSYour Name 
60*5113495bSYour Name qdf_export_symbol(wmi_extract_reg_chan_list_ext_update_event);
61*5113495bSYour Name 
62*5113495bSYour Name #ifdef CONFIG_AFC_SUPPORT
wmi_extract_afc_event(wmi_unified_t wmi_handle,uint8_t * evt_buf,struct afc_regulatory_info * afc_info,uint32_t len)63*5113495bSYour Name QDF_STATUS wmi_extract_afc_event(wmi_unified_t wmi_handle,
64*5113495bSYour Name 				 uint8_t *evt_buf,
65*5113495bSYour Name 				 struct afc_regulatory_info *afc_info,
66*5113495bSYour Name 				 uint32_t len)
67*5113495bSYour Name {
68*5113495bSYour Name 	if (wmi_handle &&
69*5113495bSYour Name 	    wmi_handle->ops->extract_afc_event)
70*5113495bSYour Name 		return wmi_handle->ops->extract_afc_event(wmi_handle, evt_buf,
71*5113495bSYour Name 							  afc_info, len);
72*5113495bSYour Name 
73*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
74*5113495bSYour Name }
75*5113495bSYour Name 
76*5113495bSYour Name qdf_export_symbol(wmi_extract_afc_event);
77*5113495bSYour Name #endif
78*5113495bSYour Name #endif
79*5113495bSYour Name 
80*5113495bSYour Name /*
81*5113495bSYour Name  * wmi_unified_send_start_11d_scan_cmd() - start 11d scan
82*5113495bSYour Name  * @wmi_handle: wmi handle
83*5113495bSYour Name  * @start_11d_scan: pointer to 11d scan start req.
84*5113495bSYour Name  *
85*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
86*5113495bSYour Name  */
wmi_unified_send_start_11d_scan_cmd(wmi_unified_t wmi_handle,struct reg_start_11d_scan_req * start_11d_scan)87*5113495bSYour Name QDF_STATUS wmi_unified_send_start_11d_scan_cmd(wmi_unified_t wmi_handle,
88*5113495bSYour Name 		struct reg_start_11d_scan_req *start_11d_scan)
89*5113495bSYour Name {
90*5113495bSYour Name 	if (wmi_handle->ops->send_start_11d_scan_cmd)
91*5113495bSYour Name 		return wmi_handle->ops->send_start_11d_scan_cmd(wmi_handle,
92*5113495bSYour Name 				start_11d_scan);
93*5113495bSYour Name 
94*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
95*5113495bSYour Name }
96*5113495bSYour Name qdf_export_symbol(wmi_unified_send_start_11d_scan_cmd);
97*5113495bSYour Name 
98*5113495bSYour Name /*
99*5113495bSYour Name  * wmi_unified_send_stop_11d_scan_cmd() - stop 11d scan
100*5113495bSYour Name  * @wmi_handle: wmi handle
101*5113495bSYour Name  * @stop_11d_scan: pointer to 11d scan stop req.
102*5113495bSYour Name  *
103*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
104*5113495bSYour Name  */
wmi_unified_send_stop_11d_scan_cmd(wmi_unified_t wmi_handle,struct reg_stop_11d_scan_req * stop_11d_scan)105*5113495bSYour Name QDF_STATUS wmi_unified_send_stop_11d_scan_cmd(wmi_unified_t wmi_handle,
106*5113495bSYour Name 		struct reg_stop_11d_scan_req *stop_11d_scan)
107*5113495bSYour Name {
108*5113495bSYour Name 	if (wmi_handle->ops->send_stop_11d_scan_cmd)
109*5113495bSYour Name 		return wmi_handle->ops->send_stop_11d_scan_cmd(wmi_handle,
110*5113495bSYour Name 				stop_11d_scan);
111*5113495bSYour Name 
112*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
113*5113495bSYour Name }
114*5113495bSYour Name qdf_export_symbol(wmi_unified_send_stop_11d_scan_cmd);
115*5113495bSYour Name 
wmi_extract_reg_11d_new_cc_event(wmi_unified_t wmi_handle,uint8_t * evt_buf,struct reg_11d_new_country * reg_11d_new_cc,uint32_t len)116*5113495bSYour Name QDF_STATUS wmi_extract_reg_11d_new_cc_event(
117*5113495bSYour Name 		wmi_unified_t wmi_handle,
118*5113495bSYour Name 		uint8_t *evt_buf,
119*5113495bSYour Name 		struct reg_11d_new_country *reg_11d_new_cc,
120*5113495bSYour Name 		uint32_t len)
121*5113495bSYour Name {
122*5113495bSYour Name 	if (wmi_handle && wmi_handle->ops->extract_reg_11d_new_country_event)
123*5113495bSYour Name 		return wmi_handle->ops->extract_reg_11d_new_country_event(
124*5113495bSYour Name 				wmi_handle, evt_buf, reg_11d_new_cc, len);
125*5113495bSYour Name 
126*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
127*5113495bSYour Name }
128*5113495bSYour Name qdf_export_symbol(wmi_extract_reg_11d_new_cc_event);
129*5113495bSYour Name 
wmi_unified_set_user_country_code_cmd_send(wmi_unified_t wmi_handle,uint8_t pdev_id,struct cc_regdmn_s * rd)130*5113495bSYour Name QDF_STATUS wmi_unified_set_user_country_code_cmd_send(
131*5113495bSYour Name 		wmi_unified_t wmi_handle,
132*5113495bSYour Name 		uint8_t pdev_id, struct cc_regdmn_s *rd)
133*5113495bSYour Name {
134*5113495bSYour Name 	if (wmi_handle->ops->send_user_country_code_cmd)
135*5113495bSYour Name 		return wmi_handle->ops->send_user_country_code_cmd(
136*5113495bSYour Name 				wmi_handle, pdev_id, rd);
137*5113495bSYour Name 
138*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
139*5113495bSYour Name }
140*5113495bSYour Name qdf_export_symbol(wmi_unified_set_user_country_code_cmd_send);
141*5113495bSYour Name 
wmi_extract_reg_ch_avoid_event(wmi_unified_t wmi_handle,uint8_t * evt_buf,struct ch_avoid_ind_type * ch_avoid_ind,uint32_t len)142*5113495bSYour Name QDF_STATUS wmi_extract_reg_ch_avoid_event(
143*5113495bSYour Name 		wmi_unified_t wmi_handle,
144*5113495bSYour Name 		uint8_t *evt_buf,
145*5113495bSYour Name 		struct ch_avoid_ind_type *ch_avoid_ind,
146*5113495bSYour Name 		uint32_t len)
147*5113495bSYour Name {
148*5113495bSYour Name 	if (wmi_handle && wmi_handle->ops->extract_reg_ch_avoid_event)
149*5113495bSYour Name 		return wmi_handle->ops->extract_reg_ch_avoid_event(
150*5113495bSYour Name 				wmi_handle, evt_buf, ch_avoid_ind, len);
151*5113495bSYour Name 
152*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
153*5113495bSYour Name }
154*5113495bSYour Name qdf_export_symbol(wmi_extract_reg_ch_avoid_event);
155*5113495bSYour Name 
wmi_extract_tgtr2p_table_event(wmi_unified_t wmi_handle,uint8_t * evt_buf,struct r2p_table_update_status_obj * update_status,uint32_t len)156*5113495bSYour Name QDF_STATUS wmi_extract_tgtr2p_table_event(
157*5113495bSYour Name 		wmi_unified_t wmi_handle,
158*5113495bSYour Name 		uint8_t *evt_buf,
159*5113495bSYour Name 		struct r2p_table_update_status_obj *update_status,
160*5113495bSYour Name 		uint32_t len)
161*5113495bSYour Name {
162*5113495bSYour Name 	if (wmi_handle &&
163*5113495bSYour Name 	    wmi_handle->ops->extract_tgtr2p_table_event)
164*5113495bSYour Name 		return wmi_handle->ops->extract_tgtr2p_table_event(
165*5113495bSYour Name 				wmi_handle, evt_buf, update_status, len);
166*5113495bSYour Name 
167*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
168*5113495bSYour Name }
169*5113495bSYour Name 
170*5113495bSYour Name qdf_export_symbol(wmi_extract_tgtr2p_table_event);
171