xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c (revision bea437e2293c3d4fb1b5704fcf633aedac996962)
1 /*
2  * Copyright (c) 2019 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /**
18  * DOC: Implements MLME global APIs
19  */
20 
21 #include <wlan_objmgr_cmn.h>
22 #include <include/wlan_mlme_cmn.h>
23 #include <include/wlan_pdev_mlme.h>
24 #include <include/wlan_vdev_mlme.h>
25 #include <include/wlan_mlme_cmn.h>
26 #include <wlan_psoc_mlme_main.h>
27 #include <wlan_pdev_mlme_main.h>
28 #include <wlan_vdev_mlme_main.h>
29 
30 struct mlme_ext_ops *glbl_ops;
31 mlme_get_global_ops_cb glbl_ops_cb;
32 
33 QDF_STATUS wlan_cmn_mlme_init(void)
34 {
35 	QDF_STATUS status;
36 
37 	status = wlan_psoc_mlme_init();
38 	if (status != QDF_STATUS_SUCCESS)
39 		return status;
40 
41 	status = wlan_pdev_mlme_init();
42 	if (status != QDF_STATUS_SUCCESS)
43 		return status;
44 
45 	status = wlan_vdev_mlme_init();
46 	if (status != QDF_STATUS_SUCCESS)
47 		return status;
48 
49 	if (glbl_ops_cb)
50 		glbl_ops = glbl_ops_cb();
51 
52 	return QDF_STATUS_SUCCESS;
53 }
54 
55 QDF_STATUS wlan_cmn_mlme_deinit(void)
56 {
57 	QDF_STATUS status;
58 
59 	status = wlan_vdev_mlme_deinit();
60 	if (status != QDF_STATUS_SUCCESS)
61 		return status;
62 
63 	status = wlan_pdev_mlme_deinit();
64 	if (status != QDF_STATUS_SUCCESS)
65 		return status;
66 
67 	status = wlan_psoc_mlme_deinit();
68 	if (status != QDF_STATUS_SUCCESS)
69 		return status;
70 
71 	return QDF_STATUS_SUCCESS;
72 }
73 
74 QDF_STATUS mlme_psoc_ops_ext_hdl_create(struct psoc_mlme_obj *psoc_mlme)
75 {
76 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
77 
78 	if (glbl_ops && glbl_ops->mlme_psoc_ext_hdl_create)
79 		ret = glbl_ops->mlme_psoc_ext_hdl_create(psoc_mlme);
80 
81 	return ret;
82 }
83 
84 QDF_STATUS mlme_psoc_ops_ext_hdl_destroy(struct psoc_mlme_obj *psoc_mlme)
85 {
86 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
87 
88 	if (glbl_ops && glbl_ops->mlme_psoc_ext_hdl_destroy)
89 		ret = glbl_ops->mlme_psoc_ext_hdl_destroy(psoc_mlme);
90 
91 	return ret;
92 }
93 
94 QDF_STATUS mlme_pdev_ops_ext_hdl_create(struct pdev_mlme_obj *pdev_mlme)
95 {
96 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
97 
98 	if (glbl_ops && glbl_ops->mlme_pdev_ext_hdl_create)
99 		ret = glbl_ops->mlme_pdev_ext_hdl_create(pdev_mlme);
100 
101 	return ret;
102 }
103 
104 QDF_STATUS mlme_pdev_ops_ext_hdl_destroy(struct pdev_mlme_obj *pdev_mlme)
105 {
106 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
107 
108 	if (glbl_ops && glbl_ops->mlme_pdev_ext_hdl_destroy)
109 		ret = glbl_ops->mlme_pdev_ext_hdl_destroy(pdev_mlme);
110 
111 	return ret;
112 }
113 
114 QDF_STATUS mlme_vdev_ops_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
115 {
116 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
117 
118 	if (glbl_ops && glbl_ops->mlme_vdev_ext_hdl_create)
119 		ret = glbl_ops->mlme_vdev_ext_hdl_create(vdev_mlme);
120 
121 	return ret;
122 }
123 
124 QDF_STATUS mlme_vdev_ops_ext_hdl_post_create(struct vdev_mlme_obj *vdev_mlme)
125 {
126 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
127 
128 	if (glbl_ops && glbl_ops->mlme_vdev_ext_hdl_post_create)
129 		ret = glbl_ops->mlme_vdev_ext_hdl_post_create(vdev_mlme);
130 
131 	return ret;
132 }
133 
134 QDF_STATUS mlme_vdev_ops_ext_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
135 {
136 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
137 
138 	if (glbl_ops && glbl_ops->mlme_vdev_ext_hdl_destroy)
139 		ret = glbl_ops->mlme_vdev_ext_hdl_destroy(vdev_mlme);
140 
141 	return ret;
142 }
143 
144 QDF_STATUS mlme_vdev_ops_start_fw_send(struct wlan_objmgr_vdev *vdev,
145 				       uint8_t restart)
146 {
147 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
148 
149 	if (glbl_ops && glbl_ops->mlme_vdev_start_fw_send)
150 		ret = glbl_ops->mlme_vdev_start_fw_send(vdev, restart);
151 
152 	return ret;
153 }
154 
155 QDF_STATUS mlme_vdev_ops_multivdev_restart_fw_cmd_send(
156 						struct wlan_objmgr_pdev *pdev)
157 {
158 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
159 
160 	if (glbl_ops && glbl_ops->mlme_multivdev_restart_fw_send)
161 		glbl_ops->mlme_multivdev_restart_fw_send(pdev);
162 
163 	return ret;
164 }
165 
166 QDF_STATUS mlme_vdev_ops_stop_fw_send(struct wlan_objmgr_vdev *vdev)
167 {
168 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
169 
170 	if (glbl_ops && glbl_ops->mlme_vdev_stop_fw_send)
171 		ret = glbl_ops->mlme_vdev_stop_fw_send(vdev);
172 
173 	return ret;
174 }
175 
176 QDF_STATUS mlme_vdev_ops_down_fw_send(struct wlan_objmgr_vdev *vdev)
177 {
178 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
179 
180 	if (glbl_ops && glbl_ops->mlme_vdev_down_fw_send)
181 		ret = glbl_ops->mlme_vdev_down_fw_send(vdev);
182 
183 	return ret;
184 }
185 
186 QDF_STATUS mlme_vdev_enqueue_exp_ser_cmd(struct vdev_mlme_obj *vdev_mlme,
187 					 uint8_t cmd_type)
188 {
189 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
190 
191 	if (glbl_ops && glbl_ops->mlme_vdev_enqueue_exp_cmd)
192 		ret = glbl_ops->mlme_vdev_enqueue_exp_cmd(vdev_mlme, cmd_type);
193 
194 	return ret;
195 }
196 
197 QDF_STATUS mlme_vdev_ops_ext_hdl_delete_rsp(struct wlan_objmgr_psoc *psoc,
198 					    struct vdev_delete_response *rsp)
199 {
200 	QDF_STATUS ret = QDF_STATUS_SUCCESS;
201 
202 	if ((glbl_ops) && glbl_ops->mlme_vdev_ext_delete_rsp)
203 		ret = glbl_ops->mlme_vdev_ext_delete_rsp(psoc, rsp);
204 
205 	return ret;
206 }
207 
208 void mlme_set_ops_register_cb(mlme_get_global_ops_cb ops_cb)
209 {
210 	glbl_ops_cb = ops_cb;
211 }
212