xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c (revision 6ecd284e5a94a1c96e26d571dd47419ac305990d)
1 /*
2  * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
3  *
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: This file has the DFS dispatcher API implementation which is exposed
22  * to outside of DFS component.
23  */
24 
25 #include "wlan_dfs_ucfg_api.h"
26 #include "../../core/src/dfs.h"
27 #include "../../core/src/dfs_zero_cac.h"
28 #include <qdf_module.h>
29 
30 QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
31 		int *is_ap_cac_timer_running)
32 {
33 	struct wlan_dfs *dfs;
34 
35 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
36 	if (!dfs)
37 		return  QDF_STATUS_E_FAILURE;
38 
39 	*is_ap_cac_timer_running = dfs_is_ap_cac_timer_running(dfs);
40 
41 	return QDF_STATUS_SUCCESS;
42 }
43 qdf_export_symbol(ucfg_dfs_is_ap_cac_timer_running);
44 
45 QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev,
46 		void *dfs_nolinfo)
47 {
48 	struct wlan_dfs *dfs;
49 
50 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
51 	if (!dfs)
52 		return  QDF_STATUS_E_FAILURE;
53 
54 	dfs_getnol(dfs, dfs_nolinfo);
55 
56 	return QDF_STATUS_SUCCESS;
57 }
58 qdf_export_symbol(ucfg_dfs_getnol);
59 
60 QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
61 		int cac_timeout,
62 		int *status)
63 {
64 	struct wlan_dfs *dfs;
65 
66 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
67 	if (!dfs)
68 		return  QDF_STATUS_E_FAILURE;
69 
70 	*status = dfs_override_cac_timeout(dfs, cac_timeout);
71 
72 	return QDF_STATUS_SUCCESS;
73 }
74 qdf_export_symbol(ucfg_dfs_override_cac_timeout);
75 
76 QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
77 		int *cac_timeout,
78 		int *status)
79 {
80 	struct wlan_dfs *dfs;
81 
82 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
83 	if (!dfs)
84 		return  QDF_STATUS_E_FAILURE;
85 
86 	*status = dfs_get_override_cac_timeout(dfs, cac_timeout);
87 
88 	return QDF_STATUS_SUCCESS;
89 }
90 qdf_export_symbol(ucfg_dfs_get_override_cac_timeout);
91 
92 QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
93 		int *precac_timeout)
94 {
95 	struct wlan_dfs *dfs;
96 
97 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
98 	if (!dfs)
99 		return  QDF_STATUS_E_FAILURE;
100 
101 	dfs_get_override_precac_timeout(dfs, precac_timeout);
102 
103 	return QDF_STATUS_SUCCESS;
104 }
105 qdf_export_symbol(ucfg_dfs_get_override_precac_timeout);
106 
107 QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
108 		int precac_timeout)
109 {
110 	struct wlan_dfs *dfs;
111 
112 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
113 	if (!dfs)
114 		return  QDF_STATUS_E_FAILURE;
115 
116 	dfs_override_precac_timeout(dfs, precac_timeout);
117 
118 	return QDF_STATUS_SUCCESS;
119 }
120 qdf_export_symbol(ucfg_dfs_override_precac_timeout);
121 
122 QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
123 		uint32_t value)
124 {
125 	struct wlan_dfs *dfs;
126 
127 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
128 	if (!dfs)
129 		return  QDF_STATUS_E_FAILURE;
130 
131 	dfs_set_precac_enable(dfs, value);
132 
133 	return QDF_STATUS_SUCCESS;
134 }
135 qdf_export_symbol(ucfg_dfs_set_precac_enable);
136 
137 QDF_STATUS ucfg_dfs_get_precac_enable(struct wlan_objmgr_pdev *pdev,
138 		int *buff)
139 {
140 	struct wlan_dfs *dfs;
141 
142 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
143 	if (!dfs)
144 		return  QDF_STATUS_E_FAILURE;
145 
146 	*buff = dfs_get_precac_enable(dfs);
147 
148 	return QDF_STATUS_SUCCESS;
149 }
150 qdf_export_symbol(ucfg_dfs_get_precac_enable);
151 
152 #ifdef QCA_MCL_DFS_SUPPORT
153 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
154 		struct dfs_user_config *req)
155 {
156 	struct dfs_soc_priv_obj *soc_obj;
157 
158 	if (!psoc || !req) {
159 		dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS,
160 			"psoc: 0x%pK, req: 0x%pK", psoc, req);
161 		return QDF_STATUS_E_FAILURE;
162 	}
163 
164 	soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
165 							WLAN_UMAC_COMP_DFS);
166 	if (!soc_obj) {
167 		dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS,
168 			"Failed to get dfs psoc component");
169 		return QDF_STATUS_E_FAILURE;
170 	}
171 
172 	soc_obj->dfs_is_phyerr_filter_offload =
173 			req->dfs_is_phyerr_filter_offload;
174 
175 	return QDF_STATUS_SUCCESS;
176 }
177 qdf_export_symbol(ucfg_dfs_update_config);
178 #endif
179