1 /*
2 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. 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: wlan_qmi_wfds_api.c
19 *
20 * QMI component north bound interface definitions
21 */
22
23 #include "wlan_qmi_wfds_api.h"
24 #include "wlan_qmi_objmgr.h"
25 #include "wlan_qmi_priv.h"
26 #include "wlan_qmi_main.h"
27
wlan_qmi_wfds_init(struct wlan_objmgr_psoc * psoc)28 QDF_STATUS wlan_qmi_wfds_init(struct wlan_objmgr_psoc *psoc)
29 {
30 struct wlan_qmi_psoc_context *qmi_ctx = qmi_psoc_get_priv(psoc);
31
32 if (!qmi_ctx) {
33 qmi_err("QMI context is NULL");
34 return QDF_STATUS_E_INVAL;
35 }
36
37 if (qmi_ctx->qmi_cbs.qmi_wfds_init)
38 return qmi_ctx->qmi_cbs.qmi_wfds_init();
39
40 return QDF_STATUS_E_FAILURE;
41 }
42
wlan_qmi_wfds_deinit(struct wlan_objmgr_psoc * psoc)43 void wlan_qmi_wfds_deinit(struct wlan_objmgr_psoc *psoc)
44 {
45 struct wlan_qmi_psoc_context *qmi_ctx = qmi_psoc_get_priv(psoc);
46
47 if (!qmi_ctx) {
48 qmi_err("QMI context is NULL");
49 return;
50 }
51
52 if (qmi_ctx->qmi_cbs.qmi_wfds_deinit)
53 qmi_ctx->qmi_cbs.qmi_wfds_deinit();
54 }
55
56 QDF_STATUS
wlan_qmi_wfds_send_config_msg(struct wlan_objmgr_psoc * psoc,struct wlan_qmi_wfds_config_req_msg * src_info)57 wlan_qmi_wfds_send_config_msg(struct wlan_objmgr_psoc *psoc,
58 struct wlan_qmi_wfds_config_req_msg *src_info)
59 {
60 struct wlan_qmi_psoc_context *qmi_ctx = qmi_psoc_get_priv(psoc);
61
62 if (!qmi_ctx) {
63 qmi_err("QMI context is NULL");
64 return QDF_STATUS_E_INVAL;
65 }
66
67 if (qmi_ctx->qmi_cbs.qmi_wfds_send_config_msg)
68 return qmi_ctx->qmi_cbs.qmi_wfds_send_config_msg(src_info);
69
70 return QDF_STATUS_E_FAILURE;
71 }
72
73 QDF_STATUS
wlan_qmi_wfds_send_req_mem_msg(struct wlan_objmgr_psoc * psoc,struct wlan_qmi_wfds_mem_req_msg * src_info)74 wlan_qmi_wfds_send_req_mem_msg(struct wlan_objmgr_psoc *psoc,
75 struct wlan_qmi_wfds_mem_req_msg *src_info)
76 {
77 struct wlan_qmi_psoc_context *qmi_ctx = qmi_psoc_get_priv(psoc);
78
79 if (!qmi_ctx) {
80 qmi_err("QMI context is NULL");
81 return QDF_STATUS_E_INVAL;
82 }
83
84 if (qmi_ctx->qmi_cbs.qmi_wfds_send_req_mem_msg)
85 return qmi_ctx->qmi_cbs.qmi_wfds_send_req_mem_msg(src_info);
86
87 return QDF_STATUS_E_FAILURE;
88 }
89
90 QDF_STATUS
wlan_qmi_wfds_ipcc_map_n_cfg_msg(struct wlan_objmgr_psoc * psoc,struct wlan_qmi_wfds_ipcc_map_n_cfg_req_msg * src_info)91 wlan_qmi_wfds_ipcc_map_n_cfg_msg(struct wlan_objmgr_psoc *psoc,
92 struct wlan_qmi_wfds_ipcc_map_n_cfg_req_msg *src_info)
93 {
94 struct wlan_qmi_psoc_context *qmi_ctx = qmi_psoc_get_priv(psoc);
95
96 if (!qmi_ctx) {
97 qmi_err("QMI context is NULL");
98 return QDF_STATUS_E_INVAL;
99 }
100
101 if (qmi_ctx->qmi_cbs.qmi_wfds_send_ipcc_map_n_cfg_msg)
102 return qmi_ctx->qmi_cbs.qmi_wfds_send_ipcc_map_n_cfg_msg(src_info);
103
104 return QDF_STATUS_E_FAILURE;
105 }
106
107 QDF_STATUS
wlan_qmi_wfds_send_misc_req_msg(struct wlan_objmgr_psoc * psoc,bool is_ssr)108 wlan_qmi_wfds_send_misc_req_msg(struct wlan_objmgr_psoc *psoc, bool is_ssr)
109 {
110 struct wlan_qmi_psoc_context *qmi_ctx = qmi_psoc_get_priv(psoc);
111
112 if (!qmi_ctx) {
113 qmi_err("QMI context is NULL");
114 return QDF_STATUS_E_INVAL;
115 }
116
117 if (qmi_ctx->qmi_cbs.qmi_wfds_send_misc_req_msg)
118 return qmi_ctx->qmi_cbs.qmi_wfds_send_misc_req_msg(is_ssr);
119
120 return QDF_STATUS_E_FAILURE;
121 }
122