blob: 5054286c2d74e1ca34244a08c63a72b0e0cdd64d [file] [log] [blame]
Srinivas Pitla39a92222018-10-05 10:52:48 +05301/*
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_pdev_mlme_main.h"
27#include "wlan_vdev_mlme_main.h"
28
29struct mlme_ext_ops *glbl_ops;
30mlme_get_global_ops_cb glbl_ops_cb;
31
32QDF_STATUS wlan_cmn_mlme_init(void)
33{
34 QDF_STATUS status;
35
36 status = wlan_pdev_mlme_init();
37 if (status != QDF_STATUS_SUCCESS)
38 return status;
39
40 status = wlan_vdev_mlme_init();
41 if (status != QDF_STATUS_SUCCESS)
42 return status;
43
44 if (glbl_ops_cb)
45 glbl_ops = glbl_ops_cb();
46
47 return QDF_STATUS_SUCCESS;
48}
49
50QDF_STATUS wlan_cmn_mlme_deinit(void)
51{
52 QDF_STATUS status;
53
54 status = wlan_vdev_mlme_deinit();
55 if (status != QDF_STATUS_SUCCESS)
56 return status;
57
58 status = wlan_pdev_mlme_deinit();
59 if (status != QDF_STATUS_SUCCESS)
60 return status;
61
62 return QDF_STATUS_SUCCESS;
63}
64
65QDF_STATUS mlme_pdev_ops_ext_hdl_create(struct pdev_mlme_obj *pdev_mlme)
66{
67 QDF_STATUS ret = QDF_STATUS_SUCCESS;
68
69 if ((glbl_ops) && glbl_ops->mlme_pdev_ext_hdl_create)
70 ret = glbl_ops->mlme_pdev_ext_hdl_create(pdev_mlme);
71
72 return ret;
73}
74
75QDF_STATUS mlme_pdev_ops_ext_hdl_destroy(struct pdev_mlme_obj *pdev_mlme)
76{
77 QDF_STATUS ret = QDF_STATUS_SUCCESS;
78
79 if ((glbl_ops) && glbl_ops->mlme_pdev_ext_hdl_destroy)
80 ret = glbl_ops->mlme_pdev_ext_hdl_destroy(pdev_mlme);
81
82 return ret;
83}
84
85QDF_STATUS mlme_vdev_ops_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme)
86{
87 QDF_STATUS ret = QDF_STATUS_SUCCESS;
88
89 if ((glbl_ops) && glbl_ops->mlme_vdev_ext_hdl_create)
90 ret = glbl_ops->mlme_vdev_ext_hdl_create(vdev_mlme);
91
92 return ret;
93}
94
95QDF_STATUS mlme_vdev_ops_ext_hdl_post_create(struct vdev_mlme_obj *vdev_mlme)
96{
97 QDF_STATUS ret = QDF_STATUS_SUCCESS;
98
99 if ((glbl_ops) && glbl_ops->mlme_vdev_ext_hdl_post_create)
100 ret = glbl_ops->mlme_vdev_ext_hdl_post_create(vdev_mlme);
101
102 return ret;
103}
104
105QDF_STATUS mlme_vdev_ops_ext_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
106{
107 QDF_STATUS ret = QDF_STATUS_SUCCESS;
108
109 if ((glbl_ops) && glbl_ops->mlme_vdev_ext_hdl_destroy)
110 ret = glbl_ops->mlme_vdev_ext_hdl_destroy(vdev_mlme);
111
112 return ret;
113}
114
115QDF_STATUS mlme_vdev_ops_start_fw_send(struct wlan_objmgr_vdev *vdev,
116 uint8_t restart)
117{
118 QDF_STATUS ret = QDF_STATUS_SUCCESS;
119
120 if (glbl_ops && glbl_ops->mlme_vdev_start_fw_send)
121 ret = glbl_ops->mlme_vdev_start_fw_send(vdev, restart);
122
123 return ret;
124}
125
126QDF_STATUS mlme_vdev_ops_multivdev_restart_fw_cmd_send(
127 struct wlan_objmgr_pdev *pdev)
128{
129 QDF_STATUS ret = QDF_STATUS_SUCCESS;
130
131 if ((glbl_ops) && glbl_ops->mlme_multivdev_restart_fw_send)
132 glbl_ops->mlme_multivdev_restart_fw_send(pdev);
133
134 return ret;
135}
136
137QDF_STATUS mlme_vdev_ops_stop_fw_send(struct wlan_objmgr_vdev *vdev)
138{
139 QDF_STATUS ret = QDF_STATUS_SUCCESS;
140
141 if (glbl_ops && glbl_ops->mlme_vdev_stop_fw_send)
142 ret = glbl_ops->mlme_vdev_stop_fw_send(vdev);
143
144 return ret;
145}
146
147QDF_STATUS mlme_vdev_ops_down_fw_send(struct wlan_objmgr_vdev *vdev)
148{
149 QDF_STATUS ret = QDF_STATUS_SUCCESS;
150
151 if (glbl_ops && glbl_ops->mlme_vdev_down_fw_send)
152 ret = glbl_ops->mlme_vdev_down_fw_send(vdev);
153
154 return ret;
155}
156
157QDF_STATUS mlme_vdev_enqueue_exp_ser_cmd(struct vdev_mlme_obj *vdev_mlme,
158 uint8_t cmd_type)
159{
160 QDF_STATUS ret = QDF_STATUS_SUCCESS;
161
162 if (glbl_ops && glbl_ops->mlme_vdev_enqueue_exp_cmd)
163 ret = glbl_ops->mlme_vdev_enqueue_exp_cmd(vdev_mlme, cmd_type);
164
165 return ret;
166}
167
168void mlme_set_ops_register_cb(mlme_get_global_ops_cb ops_cb)
169{
170 glbl_ops_cb = ops_cb;
171}