xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_ucfg_api.c (revision d0c05845839e5f2ba5a8dcebe0cd3e4cd4e8dfcf)
1 /*
2  * Copyright (c) 2019 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
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: wlan_vdev_mgr_ucfg_api.c
22  *
23  * This file provides definitions to APIs to get/set mlme fields in
24  * vdev mlme core data structures
25  */
26 #include <wlan_vdev_mgr_tgt_if_tx_api.h>
27 #include "wlan_vdev_mgr_ucfg_api.h"
28 #include "include/wlan_vdev_mlme.h"
29 #include <wlan_mlme_dbg.h>
30 #include <wlan_vdev_mgr_utils_api.h>
31 #include <wlan_vdev_mlme_api.h>
32 #include <qdf_module.h>
33 
34 void ucfg_wlan_vdev_mgr_get_param_bssid(
35 				struct wlan_objmgr_vdev *vdev,
36 				uint8_t *bssid)
37 {
38 	struct vdev_mlme_mgmt *mlme_mgmt;
39 	struct vdev_mlme_obj *vdev_mlme;
40 
41 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
42 						vdev, WLAN_UMAC_COMP_MLME);
43 
44 	if (!vdev_mlme) {
45 		mlme_err("VDEV_MLME is NULL");
46 		return;
47 	}
48 
49 	mlme_mgmt = &vdev_mlme->mgmt;
50 
51 	qdf_mem_copy(bssid, mlme_mgmt->generic.bssid,
52 		     QDF_MAC_ADDR_SIZE);
53 }
54 
55 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_bssid);
56 
57 void ucfg_wlan_vdev_mgr_get_param_ssid(
58 				struct wlan_objmgr_vdev *vdev,
59 				uint8_t *ssid, uint8_t *ssid_len)
60 {
61 	struct vdev_mlme_mgmt *mlme_mgmt;
62 	struct vdev_mlme_obj *vdev_mlme;
63 
64 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
65 			vdev, WLAN_UMAC_COMP_MLME);
66 
67 	if (!vdev_mlme) {
68 		QDF_ASSERT(0);
69 		return;
70 	}
71 
72 	mlme_mgmt = &vdev_mlme->mgmt;
73 
74 	*ssid_len = mlme_mgmt->generic.ssid_len;
75 	qdf_mem_copy(ssid, mlme_mgmt->generic.ssid,
76 		     mlme_mgmt->generic.ssid_len);
77 }
78 
79 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_ssid);
80 
81 void ucfg_wlan_vdev_mgr_get_beacon_buffer(
82 				struct wlan_objmgr_vdev *vdev,
83 				qdf_nbuf_t buf)
84 {
85 	struct vdev_mlme_obj *vdev_mlme;
86 	struct vdev_mlme_mgmt *mlme_mgmt;
87 
88 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
89 			vdev, WLAN_UMAC_COMP_MLME);
90 
91 	if (!vdev_mlme) {
92 		QDF_ASSERT(0);
93 		return;
94 	}
95 
96 	mlme_mgmt = &vdev_mlme->mgmt;
97 
98 	buf = mlme_mgmt->beacon_info.beacon_buffer;
99 }
100 
101 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_beacon_buffer);
102 
103 void ucfg_wlan_vdev_mgr_get_trans_bssid(
104 				struct wlan_objmgr_vdev *vdev,
105 				uint8_t *addr)
106 {
107 	struct vdev_mlme_obj *vdev_mlme;
108 	struct vdev_mlme_mgmt *mlme_mgmt;
109 
110 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
111 			vdev, WLAN_UMAC_COMP_MLME);
112 
113 	if (!vdev_mlme) {
114 		QDF_ASSERT(0);
115 		return;
116 	}
117 
118 	mlme_mgmt = &vdev_mlme->mgmt;
119 
120 	qdf_mem_copy(addr, mlme_mgmt->mbss_11ax.trans_bssid, QDF_MAC_ADDR_SIZE);
121 }
122 
123 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_trans_bssid);
124 
125 void ucfg_wlan_vdev_mgr_get_tsf_adjust(
126 				struct wlan_objmgr_vdev *vdev,
127 				uint64_t *tsf_adjust)
128 {
129 	struct vdev_mlme_obj *vdev_mlme;
130 	struct vdev_mlme_proto *mlme_proto;
131 
132 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
133 
134 	if (!vdev_mlme) {
135 		mlme_err("VDEV MLME is NULL");
136 		return;
137 	}
138 
139 	mlme_proto = &vdev_mlme->proto;
140 
141 	*tsf_adjust = mlme_proto->generic.tsfadjust;
142 }
143 
144 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_tsf_adjust);
145 
146 QDF_STATUS ucfg_wlan_vdev_mgr_set_param(
147 				struct wlan_objmgr_vdev *vdev,
148 				enum wlan_mlme_cfg_id param_id,
149 				struct wlan_vdev_mgr_cfg mlme_cfg)
150 {
151 	struct vdev_mlme_obj *vdev_mlme;
152 
153 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
154 							vdev,
155 							WLAN_UMAC_COMP_MLME);
156 
157 	if (!vdev_mlme) {
158 		QDF_ASSERT(0);
159 		return QDF_STATUS_E_FAILURE;
160 	}
161 
162 	return wlan_util_vdev_mlme_set_param(vdev_mlme, param_id, mlme_cfg);
163 }
164 
165 qdf_export_symbol(ucfg_wlan_vdev_mgr_set_param);
166 
167 void ucfg_wlan_vdev_mgr_get_param(
168 				struct wlan_objmgr_vdev *vdev,
169 				enum wlan_mlme_cfg_id param_id,
170 				uint32_t *value)
171 {
172 	struct vdev_mlme_obj *vdev_mlme;
173 
174 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
175 							vdev,
176 							WLAN_UMAC_COMP_MLME);
177 
178 	if (!vdev_mlme) {
179 		QDF_ASSERT(0);
180 		return;
181 	}
182 
183 	wlan_util_vdev_mlme_get_param(vdev_mlme, param_id, value);
184 }
185 
186 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param);
187 
188 #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
189 QDF_STATUS ucfg_vdev_mgr_cdp_vdev_attach(struct wlan_objmgr_vdev *vdev)
190 {
191 	struct vdev_mlme_obj *vdev_mlme;
192 
193 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
194 							vdev,
195 							WLAN_UMAC_COMP_MLME);
196 
197 	if (!vdev_mlme)
198 		return QDF_STATUS_E_FAILURE;
199 
200 	return vdev_mgr_cdp_vdev_attach(vdev_mlme);
201 }
202 
203 qdf_export_symbol(ucfg_vdev_mgr_cdp_vdev_attach);
204 
205 QDF_STATUS ucfg_vdev_mgr_cdp_vdev_detach(struct wlan_objmgr_vdev *vdev)
206 {
207 	struct vdev_mlme_obj *vdev_mlme;
208 
209 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
210 							vdev,
211 							WLAN_UMAC_COMP_MLME);
212 
213 	if (!vdev_mlme) {
214 		QDF_ASSERT(0);
215 		return QDF_STATUS_E_FAILURE;
216 	}
217 
218 	return vdev_mgr_cdp_vdev_detach(vdev_mlme);
219 }
220 
221 qdf_export_symbol(ucfg_vdev_mgr_cdp_vdev_detach);
222 #endif
223