xref: /wlan-dirver/qca-wifi-host-cmn/umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c (revision 3149adf58a329e17232a4c0e58d460d025edd55a)
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 
29 QDF_STATUS ucfg_dfs_is_ap_cac_timer_running(struct wlan_objmgr_pdev *pdev,
30 		int *is_ap_cac_timer_running)
31 {
32 	struct wlan_dfs *dfs;
33 
34 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
35 	if (!dfs)
36 		return  QDF_STATUS_E_FAILURE;
37 
38 	*is_ap_cac_timer_running = dfs_is_ap_cac_timer_running(dfs);
39 
40 	return QDF_STATUS_SUCCESS;
41 }
42 EXPORT_SYMBOL(ucfg_dfs_is_ap_cac_timer_running);
43 
44 QDF_STATUS ucfg_dfs_getnol(struct wlan_objmgr_pdev *pdev,
45 		void *dfs_nolinfo)
46 {
47 	struct wlan_dfs *dfs;
48 
49 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
50 	if (!dfs)
51 		return  QDF_STATUS_E_FAILURE;
52 
53 	dfs_getnol(dfs, dfs_nolinfo);
54 
55 	return QDF_STATUS_SUCCESS;
56 }
57 EXPORT_SYMBOL(ucfg_dfs_getnol);
58 
59 QDF_STATUS ucfg_dfs_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
60 		int cac_timeout,
61 		int *status)
62 {
63 	struct wlan_dfs *dfs;
64 
65 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
66 	if (!dfs)
67 		return  QDF_STATUS_E_FAILURE;
68 
69 	*status = dfs_override_cac_timeout(dfs, cac_timeout);
70 
71 	return QDF_STATUS_SUCCESS;
72 }
73 EXPORT_SYMBOL(ucfg_dfs_override_cac_timeout);
74 
75 QDF_STATUS ucfg_dfs_get_override_cac_timeout(struct wlan_objmgr_pdev *pdev,
76 		int *cac_timeout,
77 		int *status)
78 {
79 	struct wlan_dfs *dfs;
80 
81 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
82 	if (!dfs)
83 		return  QDF_STATUS_E_FAILURE;
84 
85 	*status = dfs_get_override_cac_timeout(dfs, cac_timeout);
86 
87 	return QDF_STATUS_SUCCESS;
88 }
89 EXPORT_SYMBOL(ucfg_dfs_get_override_cac_timeout);
90 
91 QDF_STATUS ucfg_dfs_get_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
92 		int *precac_timeout)
93 {
94 	struct wlan_dfs *dfs;
95 
96 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
97 	if (!dfs)
98 		return  QDF_STATUS_E_FAILURE;
99 
100 	dfs_get_override_precac_timeout(dfs, precac_timeout);
101 
102 	return QDF_STATUS_SUCCESS;
103 }
104 EXPORT_SYMBOL(ucfg_dfs_get_override_precac_timeout);
105 
106 QDF_STATUS ucfg_dfs_override_precac_timeout(struct wlan_objmgr_pdev *pdev,
107 		int precac_timeout)
108 {
109 	struct wlan_dfs *dfs;
110 
111 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
112 	if (!dfs)
113 		return  QDF_STATUS_E_FAILURE;
114 
115 	dfs_override_precac_timeout(dfs, precac_timeout);
116 
117 	return QDF_STATUS_SUCCESS;
118 }
119 EXPORT_SYMBOL(ucfg_dfs_override_precac_timeout);
120 
121 QDF_STATUS ucfg_dfs_set_precac_enable(struct wlan_objmgr_pdev *pdev,
122 		uint32_t value)
123 {
124 	struct wlan_dfs *dfs;
125 
126 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
127 	if (!dfs)
128 		return  QDF_STATUS_E_FAILURE;
129 
130 	dfs_set_precac_enable(dfs, value);
131 
132 	return QDF_STATUS_SUCCESS;
133 }
134 EXPORT_SYMBOL(ucfg_dfs_set_precac_enable);
135 
136 QDF_STATUS ucfg_dfs_get_precac_enable(struct wlan_objmgr_pdev *pdev,
137 		int *buff)
138 {
139 	struct wlan_dfs *dfs;
140 
141 	dfs = global_dfs_to_mlme.pdev_get_comp_private_obj(pdev);
142 	if (!dfs)
143 		return  QDF_STATUS_E_FAILURE;
144 
145 	*buff = dfs_get_precac_enable(dfs);
146 
147 	return QDF_STATUS_SUCCESS;
148 }
149 EXPORT_SYMBOL(ucfg_dfs_get_precac_enable);
150 
151 #ifdef QCA_MCL_DFS_SUPPORT
152 QDF_STATUS ucfg_dfs_update_config(struct wlan_objmgr_psoc *psoc,
153 		struct dfs_user_config *req)
154 {
155 	struct dfs_soc_priv_obj *soc_obj;
156 
157 	if (!psoc || !req) {
158 		dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS,
159 			"psoc: 0x%pK, req: 0x%pK", psoc, req);
160 		return QDF_STATUS_E_FAILURE;
161 	}
162 
163 	soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
164 							WLAN_UMAC_COMP_DFS);
165 	if (!soc_obj) {
166 		dfs_err(NULL, WLAN_DEBUG_DFS_ALWAYS,
167 			"Failed to get dfs psoc component");
168 		return QDF_STATUS_E_FAILURE;
169 	}
170 
171 	soc_obj->dfs_is_phyerr_filter_offload =
172 			req->dfs_is_phyerr_filter_offload;
173 
174 	return QDF_STATUS_SUCCESS;
175 }
176 EXPORT_SYMBOL(ucfg_dfs_update_config);
177 #endif
178