1*5113495bSYour Name /*
2*5113495bSYour Name * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
3*5113495bSYour Name * Copyright (c) 2022 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: init_deinit_lmac.c
22*5113495bSYour Name *
23*5113495bSYour Name * APIs to get/set target_if params
24*5113495bSYour Name */
25*5113495bSYour Name #include <qdf_status.h>
26*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h>
27*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
28*5113495bSYour Name #include <target_if.h>
29*5113495bSYour Name #include <target_type.h>
30*5113495bSYour Name #include <init_deinit_lmac.h>
31*5113495bSYour Name #include <qdf_module.h>
32*5113495bSYour Name
lmac_get_target_cap(struct wlan_objmgr_psoc * psoc)33*5113495bSYour Name struct wlan_psoc_target_capability_info *lmac_get_target_cap(
34*5113495bSYour Name struct wlan_objmgr_psoc *psoc)
35*5113495bSYour Name {
36*5113495bSYour Name struct target_psoc_info *tgt_hdl;
37*5113495bSYour Name
38*5113495bSYour Name if (!psoc) {
39*5113495bSYour Name target_if_err("psoc is null");
40*5113495bSYour Name return NULL;
41*5113495bSYour Name }
42*5113495bSYour Name
43*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
44*5113495bSYour Name if (!tgt_hdl) {
45*5113495bSYour Name target_if_err("target_psoc_info is null");
46*5113495bSYour Name return NULL;
47*5113495bSYour Name }
48*5113495bSYour Name
49*5113495bSYour Name return target_psoc_get_target_caps(tgt_hdl);
50*5113495bSYour Name }
51*5113495bSYour Name
lmac_get_tgt_res_cfg(struct wlan_objmgr_psoc * psoc)52*5113495bSYour Name target_resource_config *lmac_get_tgt_res_cfg(struct wlan_objmgr_psoc *psoc)
53*5113495bSYour Name {
54*5113495bSYour Name struct target_psoc_info *tgt_hdl;
55*5113495bSYour Name
56*5113495bSYour Name if (!psoc) {
57*5113495bSYour Name target_if_err("psoc is null");
58*5113495bSYour Name return NULL;
59*5113495bSYour Name }
60*5113495bSYour Name
61*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
62*5113495bSYour Name if (!tgt_hdl) {
63*5113495bSYour Name target_if_err("target_psoc_info is null");
64*5113495bSYour Name return NULL;
65*5113495bSYour Name }
66*5113495bSYour Name
67*5113495bSYour Name return target_psoc_get_wlan_res_cfg(tgt_hdl);
68*5113495bSYour Name }
69*5113495bSYour Name
lmac_get_pdev_idx(struct wlan_objmgr_pdev * pdev)70*5113495bSYour Name int32_t lmac_get_pdev_idx(struct wlan_objmgr_pdev *pdev)
71*5113495bSYour Name {
72*5113495bSYour Name if (!pdev) {
73*5113495bSYour Name target_if_err("pdev is null");
74*5113495bSYour Name return 0xffffffff;
75*5113495bSYour Name }
76*5113495bSYour Name
77*5113495bSYour Name return wlan_objmgr_pdev_get_pdev_id(pdev);
78*5113495bSYour Name }
79*5113495bSYour Name
lmac_get_tgt_type(struct wlan_objmgr_psoc * psoc)80*5113495bSYour Name uint32_t lmac_get_tgt_type(struct wlan_objmgr_psoc *psoc)
81*5113495bSYour Name {
82*5113495bSYour Name struct target_psoc_info *tgt_hdl;
83*5113495bSYour Name
84*5113495bSYour Name if (!psoc) {
85*5113495bSYour Name target_if_err("psoc is null");
86*5113495bSYour Name return 0;
87*5113495bSYour Name }
88*5113495bSYour Name
89*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
90*5113495bSYour Name if (!tgt_hdl) {
91*5113495bSYour Name target_if_err("target_psoc_info is null");
92*5113495bSYour Name return 0;
93*5113495bSYour Name }
94*5113495bSYour Name
95*5113495bSYour Name return target_psoc_get_target_type(tgt_hdl);
96*5113495bSYour Name }
97*5113495bSYour Name qdf_export_symbol(lmac_get_tgt_type);
98*5113495bSYour Name
lmac_get_pdev_target_type(struct wlan_objmgr_pdev * pdev,uint32_t * target_type)99*5113495bSYour Name QDF_STATUS lmac_get_pdev_target_type(struct wlan_objmgr_pdev *pdev,
100*5113495bSYour Name uint32_t *target_type)
101*5113495bSYour Name {
102*5113495bSYour Name struct wlan_objmgr_psoc *psoc;
103*5113495bSYour Name
104*5113495bSYour Name psoc = wlan_pdev_get_psoc(pdev);
105*5113495bSYour Name if (!psoc) {
106*5113495bSYour Name target_if_err("psoc is NULL");
107*5113495bSYour Name return QDF_STATUS_E_FAILURE;
108*5113495bSYour Name }
109*5113495bSYour Name
110*5113495bSYour Name *target_type = lmac_get_tgt_type(psoc);
111*5113495bSYour Name return QDF_STATUS_SUCCESS;
112*5113495bSYour Name }
113*5113495bSYour Name qdf_export_symbol(lmac_get_pdev_target_type);
114*5113495bSYour Name
lmac_get_tgt_version(struct wlan_objmgr_psoc * psoc)115*5113495bSYour Name uint32_t lmac_get_tgt_version(struct wlan_objmgr_psoc *psoc)
116*5113495bSYour Name {
117*5113495bSYour Name struct target_psoc_info *tgt_hdl;
118*5113495bSYour Name
119*5113495bSYour Name if (!psoc) {
120*5113495bSYour Name target_if_err("psoc is null");
121*5113495bSYour Name return -EINVAL;
122*5113495bSYour Name }
123*5113495bSYour Name
124*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
125*5113495bSYour Name if (!tgt_hdl) {
126*5113495bSYour Name target_if_err("target_psoc_info is null");
127*5113495bSYour Name return -EINVAL;
128*5113495bSYour Name }
129*5113495bSYour Name
130*5113495bSYour Name return target_psoc_get_target_ver(tgt_hdl);
131*5113495bSYour Name }
132*5113495bSYour Name qdf_export_symbol(lmac_get_tgt_version);
133*5113495bSYour Name
lmac_get_tgt_revision(struct wlan_objmgr_psoc * psoc)134*5113495bSYour Name uint32_t lmac_get_tgt_revision(struct wlan_objmgr_psoc *psoc)
135*5113495bSYour Name {
136*5113495bSYour Name struct target_psoc_info *tgt_hdl;
137*5113495bSYour Name
138*5113495bSYour Name if (!psoc) {
139*5113495bSYour Name target_if_err("psoc is null");
140*5113495bSYour Name return -EINVAL;
141*5113495bSYour Name }
142*5113495bSYour Name
143*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
144*5113495bSYour Name if (!tgt_hdl) {
145*5113495bSYour Name target_if_err("target_psoc_info is null");
146*5113495bSYour Name return -EINVAL;
147*5113495bSYour Name }
148*5113495bSYour Name
149*5113495bSYour Name return target_psoc_get_target_rev(tgt_hdl);
150*5113495bSYour Name }
151*5113495bSYour Name qdf_export_symbol(lmac_get_tgt_revision);
152*5113495bSYour Name
lmac_is_target_ar900b(struct wlan_objmgr_psoc * psoc)153*5113495bSYour Name bool lmac_is_target_ar900b(struct wlan_objmgr_psoc *psoc)
154*5113495bSYour Name {
155*5113495bSYour Name struct target_psoc_info *tgt_hdl;
156*5113495bSYour Name uint32_t target_type;
157*5113495bSYour Name
158*5113495bSYour Name if (!psoc) {
159*5113495bSYour Name target_if_err("psoc is null\n");
160*5113495bSYour Name return false;
161*5113495bSYour Name }
162*5113495bSYour Name
163*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
164*5113495bSYour Name if (!tgt_hdl) {
165*5113495bSYour Name target_if_err("target_psoc_info is null");
166*5113495bSYour Name return false;
167*5113495bSYour Name }
168*5113495bSYour Name target_type = tgt_hdl->info.target_type;
169*5113495bSYour Name
170*5113495bSYour Name switch (target_type) {
171*5113495bSYour Name case TARGET_TYPE_AR900B:
172*5113495bSYour Name case TARGET_TYPE_QCA9984:
173*5113495bSYour Name case TARGET_TYPE_QCA9888:
174*5113495bSYour Name return true;
175*5113495bSYour Name default:
176*5113495bSYour Name return false;
177*5113495bSYour Name }
178*5113495bSYour Name return false;
179*5113495bSYour Name }
180*5113495bSYour Name qdf_export_symbol(lmac_is_target_ar900b);
181*5113495bSYour Name
lmac_get_wmi_hdl(struct wlan_objmgr_psoc * psoc)182*5113495bSYour Name struct wmi_unified *lmac_get_wmi_hdl(struct wlan_objmgr_psoc *psoc)
183*5113495bSYour Name {
184*5113495bSYour Name struct target_psoc_info *tgt_hdl;
185*5113495bSYour Name
186*5113495bSYour Name if (!psoc) {
187*5113495bSYour Name target_if_err("psoc is null");
188*5113495bSYour Name return NULL;
189*5113495bSYour Name }
190*5113495bSYour Name
191*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
192*5113495bSYour Name if (!tgt_hdl) {
193*5113495bSYour Name target_if_err("target_psoc_info is null");
194*5113495bSYour Name return NULL;
195*5113495bSYour Name }
196*5113495bSYour Name
197*5113495bSYour Name return target_psoc_get_wmi_hdl(tgt_hdl);
198*5113495bSYour Name }
199*5113495bSYour Name qdf_export_symbol(lmac_get_wmi_hdl);
200*5113495bSYour Name
lmac_get_wmi_unified_hdl(struct wlan_objmgr_psoc * psoc)201*5113495bSYour Name wmi_unified_t lmac_get_wmi_unified_hdl(struct wlan_objmgr_psoc *psoc)
202*5113495bSYour Name {
203*5113495bSYour Name return (wmi_unified_t)lmac_get_wmi_hdl(psoc);
204*5113495bSYour Name }
205*5113495bSYour Name qdf_export_symbol(lmac_get_wmi_unified_hdl);
206*5113495bSYour Name
lmac_get_htc_hdl(struct wlan_objmgr_psoc * psoc)207*5113495bSYour Name HTC_HANDLE lmac_get_htc_hdl(struct wlan_objmgr_psoc *psoc)
208*5113495bSYour Name {
209*5113495bSYour Name struct target_psoc_info *tgt_hdl;
210*5113495bSYour Name
211*5113495bSYour Name if (!psoc) {
212*5113495bSYour Name target_if_err("psoc is null");
213*5113495bSYour Name return NULL;
214*5113495bSYour Name }
215*5113495bSYour Name
216*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
217*5113495bSYour Name if (!tgt_hdl) {
218*5113495bSYour Name target_if_err("target_psoc_info is null");
219*5113495bSYour Name return NULL;
220*5113495bSYour Name }
221*5113495bSYour Name
222*5113495bSYour Name return target_psoc_get_htc_hdl(tgt_hdl);
223*5113495bSYour Name }
224*5113495bSYour Name qdf_export_symbol(lmac_get_htc_hdl);
225*5113495bSYour Name
lmac_set_htc_hdl(struct wlan_objmgr_psoc * psoc,HTC_HANDLE htc_hdl)226*5113495bSYour Name void lmac_set_htc_hdl(struct wlan_objmgr_psoc *psoc,
227*5113495bSYour Name HTC_HANDLE htc_hdl)
228*5113495bSYour Name {
229*5113495bSYour Name struct target_psoc_info *tgt_hdl;
230*5113495bSYour Name
231*5113495bSYour Name if (!psoc) {
232*5113495bSYour Name target_if_err("psoc is null");
233*5113495bSYour Name return;
234*5113495bSYour Name }
235*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
236*5113495bSYour Name if (!tgt_hdl) {
237*5113495bSYour Name target_if_err("target_psoc_info is null");
238*5113495bSYour Name return;
239*5113495bSYour Name }
240*5113495bSYour Name
241*5113495bSYour Name target_psoc_set_htc_hdl(tgt_hdl, htc_hdl);
242*5113495bSYour Name }
243*5113495bSYour Name
lmac_get_hif_hdl(struct wlan_objmgr_psoc * psoc)244*5113495bSYour Name struct hif_opaque_softc *lmac_get_hif_hdl(struct wlan_objmgr_psoc *psoc)
245*5113495bSYour Name {
246*5113495bSYour Name struct target_psoc_info *tgt_hdl;
247*5113495bSYour Name
248*5113495bSYour Name if (!psoc) {
249*5113495bSYour Name target_if_err("psoc is null");
250*5113495bSYour Name return NULL;
251*5113495bSYour Name }
252*5113495bSYour Name
253*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
254*5113495bSYour Name if (!tgt_hdl) {
255*5113495bSYour Name target_if_err("target_psoc_info is null");
256*5113495bSYour Name return NULL;
257*5113495bSYour Name }
258*5113495bSYour Name
259*5113495bSYour Name return target_psoc_get_hif_hdl(tgt_hdl);
260*5113495bSYour Name }
261*5113495bSYour Name qdf_export_symbol(lmac_get_hif_hdl);
262*5113495bSYour Name
lmac_get_ol_hif_hdl(struct wlan_objmgr_psoc * psoc)263*5113495bSYour Name struct hif_opaque_softc *lmac_get_ol_hif_hdl(struct wlan_objmgr_psoc *psoc)
264*5113495bSYour Name {
265*5113495bSYour Name return (struct hif_opaque_softc *)lmac_get_hif_hdl(psoc);
266*5113495bSYour Name }
267*5113495bSYour Name qdf_export_symbol(lmac_get_ol_hif_hdl);
268*5113495bSYour Name
lmac_get_pdev_wmi_handle(struct wlan_objmgr_pdev * pdev)269*5113495bSYour Name struct wmi_unified *lmac_get_pdev_wmi_handle(
270*5113495bSYour Name struct wlan_objmgr_pdev *pdev)
271*5113495bSYour Name {
272*5113495bSYour Name struct target_pdev_info *tgt_hdl;
273*5113495bSYour Name
274*5113495bSYour Name if (!pdev) {
275*5113495bSYour Name target_if_err("pdev is null");
276*5113495bSYour Name return NULL;
277*5113495bSYour Name }
278*5113495bSYour Name
279*5113495bSYour Name tgt_hdl = wlan_pdev_get_tgt_if_handle(pdev);
280*5113495bSYour Name if (!tgt_hdl) {
281*5113495bSYour Name target_if_err("target_pdev_info is null");
282*5113495bSYour Name return NULL;
283*5113495bSYour Name }
284*5113495bSYour Name
285*5113495bSYour Name return target_pdev_get_wmi_handle(tgt_hdl);
286*5113495bSYour Name }
287*5113495bSYour Name qdf_export_symbol(lmac_get_pdev_wmi_handle);
288*5113495bSYour Name
289*5113495bSYour Name wmi_unified_t
lmac_get_pdev_wmi_unified_handle(struct wlan_objmgr_pdev * pdev)290*5113495bSYour Name lmac_get_pdev_wmi_unified_handle(struct wlan_objmgr_pdev *pdev)
291*5113495bSYour Name {
292*5113495bSYour Name return (wmi_unified_t)lmac_get_pdev_wmi_handle(pdev);
293*5113495bSYour Name }
294*5113495bSYour Name
lmac_get_num_radios(struct wlan_objmgr_psoc * psoc)295*5113495bSYour Name uint32_t lmac_get_num_radios(struct wlan_objmgr_psoc *psoc)
296*5113495bSYour Name {
297*5113495bSYour Name struct target_psoc_info *tgt_hdl;
298*5113495bSYour Name
299*5113495bSYour Name if (!psoc) {
300*5113495bSYour Name target_if_err("psoc is null");
301*5113495bSYour Name return 0;
302*5113495bSYour Name }
303*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
304*5113495bSYour Name if (!tgt_hdl) {
305*5113495bSYour Name target_if_err("target_psoc_info is null");
306*5113495bSYour Name return 0;
307*5113495bSYour Name }
308*5113495bSYour Name
309*5113495bSYour Name return target_psoc_get_num_radios(tgt_hdl);
310*5113495bSYour Name }
311*5113495bSYour Name qdf_export_symbol(lmac_get_num_radios);
312*5113495bSYour Name
lmac_get_psoc_feature_ptr(struct wlan_objmgr_psoc * psoc)313*5113495bSYour Name void *lmac_get_psoc_feature_ptr(struct wlan_objmgr_psoc *psoc)
314*5113495bSYour Name {
315*5113495bSYour Name struct target_psoc_info *tgt_hdl;
316*5113495bSYour Name
317*5113495bSYour Name if (!psoc) {
318*5113495bSYour Name target_if_err("psoc is null");
319*5113495bSYour Name return NULL;
320*5113495bSYour Name }
321*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
322*5113495bSYour Name if (!tgt_hdl) {
323*5113495bSYour Name target_if_err("target_psoc_info is null");
324*5113495bSYour Name return NULL;
325*5113495bSYour Name }
326*5113495bSYour Name
327*5113495bSYour Name return target_psoc_get_feature_ptr(tgt_hdl);
328*5113495bSYour Name }
329*5113495bSYour Name qdf_export_symbol(lmac_get_psoc_feature_ptr);
330*5113495bSYour Name
lmac_get_pdev_feature_ptr(struct wlan_objmgr_pdev * pdev)331*5113495bSYour Name void *lmac_get_pdev_feature_ptr(struct wlan_objmgr_pdev *pdev)
332*5113495bSYour Name {
333*5113495bSYour Name struct target_pdev_info *tgt_hdl;
334*5113495bSYour Name
335*5113495bSYour Name if (!pdev) {
336*5113495bSYour Name target_if_err("pdev is null");
337*5113495bSYour Name return NULL;
338*5113495bSYour Name }
339*5113495bSYour Name tgt_hdl = wlan_pdev_get_tgt_if_handle(pdev);
340*5113495bSYour Name if (!tgt_hdl) {
341*5113495bSYour Name target_if_err("target_pdev_info is null");
342*5113495bSYour Name return NULL;
343*5113495bSYour Name }
344*5113495bSYour Name
345*5113495bSYour Name return target_pdev_get_feature_ptr(tgt_hdl);
346*5113495bSYour Name }
347*5113495bSYour Name qdf_export_symbol(lmac_get_pdev_feature_ptr);
348*5113495bSYour Name
lmac_get_preferred_hw_mode(struct wlan_objmgr_psoc * psoc)349*5113495bSYour Name enum wmi_host_hw_mode_config_type lmac_get_preferred_hw_mode(
350*5113495bSYour Name struct wlan_objmgr_psoc *psoc)
351*5113495bSYour Name {
352*5113495bSYour Name struct target_psoc_info *tgt_hdl;
353*5113495bSYour Name
354*5113495bSYour Name if (!psoc) {
355*5113495bSYour Name target_if_err("psoc is null");
356*5113495bSYour Name return WMI_HOST_HW_MODE_MAX;
357*5113495bSYour Name }
358*5113495bSYour Name tgt_hdl = wlan_psoc_get_tgt_if_handle(psoc);
359*5113495bSYour Name if (!tgt_hdl) {
360*5113495bSYour Name target_if_err("target_psoc_info is null");
361*5113495bSYour Name return WMI_HOST_HW_MODE_MAX;
362*5113495bSYour Name }
363*5113495bSYour Name
364*5113495bSYour Name return target_psoc_get_preferred_hw_mode(tgt_hdl);
365*5113495bSYour Name }
366*5113495bSYour Name
367*5113495bSYour Name qdf_export_symbol(lmac_get_preferred_hw_mode);
368