xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_ucfg_api.c (revision dd4dc88b837a295134aa9869114a2efee0f4894b)
1 /*
2  * Copyright (c) 2019 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /**
20  * DOC: wlan_vdev_mgr_ucfg_api.c
21  *
22  * This file provides definitions to APIs to get/set mlme fields in
23  * vdev mlme core data structures
24  */
25 #include <wlan_vdev_mgr_tgt_if_tx_api.h>
26 #include "wlan_vdev_mgr_ucfg_api.h"
27 #include "include/wlan_vdev_mlme.h"
28 #include <wlan_mlme_dbg.h>
29 #include <wlan_vdev_mgr_utils_api.h>
30 #include <wlan_vdev_mlme_api.h>
31 
32 void ucfg_wlan_vdev_mgr_get_param_bssid(
33 				struct wlan_objmgr_vdev *vdev,
34 				uint8_t *bssid)
35 {
36 	struct vdev_mlme_mgmt *mlme_mgmt;
37 	struct vdev_mlme_obj *vdev_mlme;
38 
39 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
40 						vdev, WLAN_UMAC_COMP_MLME);
41 
42 	if (!vdev_mlme) {
43 		mlme_err("VDEV_MLME is NULL");
44 		return;
45 	}
46 
47 	mlme_mgmt = &vdev_mlme->mgmt;
48 
49 	qdf_mem_copy(bssid, mlme_mgmt->generic.bssid,
50 		     QDF_MAC_ADDR_SIZE);
51 }
52 
53 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_bssid);
54 
55 void ucfg_wlan_vdev_mgr_get_param_ssid(
56 				struct wlan_objmgr_vdev *vdev,
57 				uint8_t *ssid, uint8_t *ssid_len)
58 {
59 	struct vdev_mlme_mgmt *mlme_mgmt;
60 	struct vdev_mlme_obj *vdev_mlme;
61 
62 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
63 			vdev, WLAN_UMAC_COMP_MLME);
64 
65 	if (!vdev_mlme) {
66 		QDF_ASSERT(0);
67 		return;
68 	}
69 
70 	mlme_mgmt = &vdev_mlme->mgmt;
71 
72 	*ssid_len = mlme_mgmt->generic.ssid_len;
73 	qdf_mem_copy(ssid, mlme_mgmt->generic.ssid,
74 		     mlme_mgmt->generic.ssid_len);
75 }
76 
77 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param_ssid);
78 
79 void ucfg_wlan_vdev_mgr_get_beacon_buffer(
80 				struct wlan_objmgr_vdev *vdev,
81 				qdf_nbuf_t buf)
82 {
83 	struct vdev_mlme_obj *vdev_mlme;
84 	struct vdev_mlme_mgmt *mlme_mgmt;
85 
86 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
87 			vdev, WLAN_UMAC_COMP_MLME);
88 
89 	if (!vdev_mlme) {
90 		QDF_ASSERT(0);
91 		return;
92 	}
93 
94 	mlme_mgmt = &vdev_mlme->mgmt;
95 
96 	buf = mlme_mgmt->beacon_info.beacon_buffer;
97 }
98 
99 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_beacon_buffer);
100 
101 void ucfg_wlan_vdev_mgr_get_trans_bssid(
102 				struct wlan_objmgr_vdev *vdev,
103 				uint8_t *addr)
104 {
105 	struct vdev_mlme_obj *vdev_mlme;
106 	struct vdev_mlme_mgmt *mlme_mgmt;
107 
108 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
109 			vdev, WLAN_UMAC_COMP_MLME);
110 
111 	if (!vdev_mlme) {
112 		QDF_ASSERT(0);
113 		return;
114 	}
115 
116 	mlme_mgmt = &vdev_mlme->mgmt;
117 
118 	qdf_mem_copy(addr, mlme_mgmt->mbss_11ax.trans_bssid, QDF_MAC_ADDR_SIZE);
119 }
120 
121 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_trans_bssid);
122 
123 void ucfg_wlan_vdev_mgr_get_tsf_adjust(
124 				struct wlan_objmgr_vdev *vdev,
125 				uint64_t *tsf_adjust)
126 {
127 	struct vdev_mlme_obj *vdev_mlme;
128 	struct vdev_mlme_proto *mlme_proto;
129 
130 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
131 
132 	if (!vdev_mlme) {
133 		mlme_err("VDEV MLME is NULL");
134 		return;
135 	}
136 
137 	mlme_proto = &vdev_mlme->proto;
138 
139 	*tsf_adjust = mlme_proto->generic.tsfadjust;
140 }
141 
142 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_tsf_adjust);
143 
144 QDF_STATUS ucfg_wlan_vdev_mgr_set_param(
145 				struct wlan_objmgr_vdev *vdev,
146 				enum wlan_mlme_cfg_id param_id,
147 				struct wlan_vdev_mgr_cfg mlme_cfg)
148 {
149 	struct vdev_mlme_obj *vdev_mlme;
150 
151 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
152 							vdev,
153 							WLAN_UMAC_COMP_MLME);
154 
155 	if (!vdev_mlme) {
156 		QDF_ASSERT(0);
157 		return QDF_STATUS_E_FAILURE;
158 	}
159 
160 	return wlan_util_vdev_mlme_set_param(vdev_mlme, param_id, mlme_cfg);
161 }
162 
163 qdf_export_symbol(ucfg_wlan_vdev_mgr_set_param);
164 
165 void ucfg_wlan_vdev_mgr_get_param(
166 				struct wlan_objmgr_vdev *vdev,
167 				enum wlan_mlme_cfg_id param_id,
168 				uint32_t *value)
169 {
170 	struct vdev_mlme_obj *vdev_mlme;
171 
172 	vdev_mlme = wlan_objmgr_vdev_get_comp_private_obj(
173 							vdev,
174 							WLAN_UMAC_COMP_MLME);
175 
176 	if (!vdev_mlme) {
177 		QDF_ASSERT(0);
178 		return;
179 	}
180 
181 	wlan_util_vdev_mlme_get_param(vdev_mlme, param_id, value);
182 }
183 
184 qdf_export_symbol(ucfg_wlan_vdev_mgr_get_param);
185