xref: /wlan-dirver/qca-wifi-host-cmn/spectral/dispatcher/src/wlan_spectral_tgt_api.c (revision 3149adf58a329e17232a4c0e58d460d025edd55a)
1 /*
2  * Copyright (c) 2011,2017-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 #include <wlan_spectral_tgt_api.h>
21 
22 void *
23 tgt_get_target_handle(struct wlan_objmgr_pdev *pdev)
24 {
25 	struct pdev_spectral *ps;
26 
27 	if (!pdev) {
28 		spectral_err("PDEV is NULL!");
29 		return NULL;
30 	}
31 	ps = wlan_objmgr_pdev_get_comp_private_obj(pdev,
32 						   WLAN_UMAC_COMP_SPECTRAL);
33 	if (!ps) {
34 		spectral_err("PDEV SPECTRAL object is NULL!");
35 		return NULL;
36 	}
37 	return ps->psptrl_target_handle;
38 }
39 
40 int
41 tgt_spectral_control(
42 	struct wlan_objmgr_pdev *pdev,
43 	u_int id,
44 	void *indata,
45 	u_int32_t insize, void *outdata, u_int32_t *outsize)
46 {
47 	struct spectral_context *sc;
48 
49 	if (!pdev) {
50 		spectral_err("PDEV is NULL!");
51 		return -EPERM;
52 	}
53 	sc = spectral_get_spectral_ctx_from_pdev(pdev);
54 	if (!sc) {
55 		spectral_err("spectral context is NULL!");
56 		return -EPERM;
57 	}
58 	return spectral_control_cmn(pdev, id, indata, insize, outdata, outsize);
59 }
60 
61 void *
62 tgt_pdev_spectral_init(struct wlan_objmgr_pdev *pdev)
63 {
64 	struct wlan_objmgr_psoc *psoc = NULL;
65 
66 	psoc = wlan_pdev_get_psoc(pdev);
67 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_pdev_spectral_init(
68 		pdev);
69 }
70 
71 void
72 tgt_pdev_spectral_deinit(struct wlan_objmgr_pdev *pdev)
73 {
74 	struct wlan_objmgr_psoc *psoc = NULL;
75 
76 	psoc = wlan_pdev_get_psoc(pdev);
77 	psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_pdev_spectral_deinit(pdev);
78 }
79 
80 int
81 tgt_set_spectral_config(
82 	struct wlan_objmgr_pdev *pdev,
83 	const u_int32_t threshtype, const u_int32_t value)
84 {
85 	struct wlan_objmgr_psoc *psoc = NULL;
86 
87 	psoc = wlan_pdev_get_psoc(pdev);
88 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_set_spectral_config(
89 		pdev, threshtype, value);
90 }
91 
92 void
93 tgt_get_spectral_config(
94 	struct wlan_objmgr_pdev *pdev,
95 	struct spectral_config *sptrl_config)
96 {
97 	struct wlan_objmgr_psoc *psoc = NULL;
98 
99 	psoc = wlan_pdev_get_psoc(pdev);
100 	psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_get_spectral_config(
101 			pdev,
102 			sptrl_config);
103 }
104 
105 int
106 tgt_start_spectral_scan(struct wlan_objmgr_pdev *pdev)
107 {
108 	struct wlan_objmgr_psoc *psoc = NULL;
109 
110 	psoc = wlan_pdev_get_psoc(pdev);
111 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_start_spectral_scan(
112 		pdev);
113 }
114 
115 void
116 tgt_stop_spectral_scan(struct wlan_objmgr_pdev *pdev)
117 {
118 	struct wlan_objmgr_psoc *psoc = NULL;
119 
120 	psoc = wlan_pdev_get_psoc(pdev);
121 	psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_stop_spectral_scan(pdev);
122 }
123 
124 bool
125 tgt_is_spectral_active(struct wlan_objmgr_pdev *pdev)
126 {
127 	struct wlan_objmgr_psoc *psoc = NULL;
128 
129 	psoc = wlan_pdev_get_psoc(pdev);
130 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_is_spectral_active(
131 		pdev);
132 }
133 
134 bool
135 tgt_is_spectral_enabled(struct wlan_objmgr_pdev *pdev)
136 {
137 	struct wlan_objmgr_psoc *psoc = NULL;
138 
139 	psoc = wlan_pdev_get_psoc(pdev);
140 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_is_spectral_enabled(
141 		pdev);
142 }
143 
144 int
145 tgt_set_debug_level(struct wlan_objmgr_pdev *pdev, u_int32_t debug_level)
146 {
147 	struct wlan_objmgr_psoc *psoc = NULL;
148 
149 	psoc = wlan_pdev_get_psoc(pdev);
150 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_set_debug_level(
151 			pdev,
152 			debug_level);
153 }
154 
155 u_int32_t
156 tgt_get_debug_level(struct wlan_objmgr_pdev *pdev)
157 {
158 	struct wlan_objmgr_psoc *psoc = NULL;
159 
160 	psoc = wlan_pdev_get_psoc(pdev);
161 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_get_debug_level(pdev);
162 }
163 
164 void
165 tgt_get_spectral_capinfo(struct wlan_objmgr_pdev *pdev, void *outdata)
166 {
167 	struct wlan_objmgr_psoc *psoc = NULL;
168 
169 	psoc = wlan_pdev_get_psoc(pdev);
170 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_get_spectral_capinfo(
171 		pdev, outdata);
172 }
173 
174 void
175 tgt_get_spectral_diagstats(struct wlan_objmgr_pdev *pdev, void *outdata)
176 {
177 	struct wlan_objmgr_psoc *psoc = NULL;
178 
179 	psoc = wlan_pdev_get_psoc(pdev);
180 	return psoc->soc_cb.tx_ops.sptrl_tx_ops.sptrlto_get_spectral_diagstats(
181 		pdev, outdata);
182 }
183 
184 void
185 tgt_register_wmi_spectral_cmd_ops(
186 	struct wlan_objmgr_pdev *pdev,
187 	struct wmi_spectral_cmd_ops *cmd_ops)
188 {
189 	struct wlan_objmgr_psoc *psoc = NULL;
190 	struct wlan_lmac_if_sptrl_tx_ops *psptrl_tx_ops = NULL;
191 
192 	psoc = wlan_pdev_get_psoc(pdev);
193 
194 	psptrl_tx_ops = &psoc->soc_cb.tx_ops.sptrl_tx_ops;
195 
196 	return psptrl_tx_ops->sptrlto_register_wmi_spectral_cmd_ops(pdev,
197 								    cmd_ops);
198 }
199 
200 void
201 tgt_spectral_register_nl_cb(
202 	struct wlan_objmgr_pdev *pdev,
203 	struct spectral_nl_cb *nl_cb)
204 {
205 	struct wlan_objmgr_psoc *psoc = NULL;
206 	struct wlan_lmac_if_sptrl_tx_ops *psptrl_tx_ops = NULL;
207 
208 	if (!pdev) {
209 		spectral_err("PDEV is NULL!");
210 		return;
211 	}
212 	psoc = wlan_pdev_get_psoc(pdev);
213 
214 	psptrl_tx_ops = &psoc->soc_cb.tx_ops.sptrl_tx_ops;
215 
216 	return psptrl_tx_ops->sptrlto_register_netlink_cb(pdev,
217 							  nl_cb);
218 }
219 
220 bool
221 tgt_spectral_use_nl_bcast(struct wlan_objmgr_pdev *pdev)
222 {
223 	struct wlan_objmgr_psoc *psoc = NULL;
224 	struct wlan_lmac_if_sptrl_tx_ops *psptrl_tx_ops = NULL;
225 
226 	psoc = wlan_pdev_get_psoc(pdev);
227 
228 	psptrl_tx_ops = &psoc->soc_cb.tx_ops.sptrl_tx_ops;
229 
230 	return psptrl_tx_ops->sptrlto_use_nl_bcast(pdev);
231 }
232 
233 void tgt_spectral_deregister_nl_cb(struct wlan_objmgr_pdev *pdev)
234 {
235 	struct wlan_objmgr_psoc *psoc = NULL;
236 	struct wlan_lmac_if_sptrl_tx_ops *psptrl_tx_ops = NULL;
237 
238 	if (!pdev) {
239 		spectral_err("PDEV is NULL!");
240 		return;
241 	}
242 	psoc = wlan_pdev_get_psoc(pdev);
243 
244 	psptrl_tx_ops = &psoc->soc_cb.tx_ops.sptrl_tx_ops;
245 
246 	psptrl_tx_ops->sptrlto_deregister_netlink_cb(pdev);
247 }
248