1*5113495bSYour Name /*
2*5113495bSYour Name * Copyright (c) 2020, The Linux Foundation. All rights reserved.
3*5113495bSYour Name * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name *
5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for any
6*5113495bSYour Name * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name *
9*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name */
17*5113495bSYour Name
18*5113495bSYour Name /*
19*5113495bSYour Name * DOC: contains coex north bound interface declarations
20*5113495bSYour Name */
21*5113495bSYour Name
22*5113495bSYour Name #ifndef _WLAN_COEX_UCFG_API_H_
23*5113495bSYour Name #define _WLAN_COEX_UCFG_API_H_
24*5113495bSYour Name
25*5113495bSYour Name #include "qdf_status.h"
26*5113495bSYour Name #include <wlan_objmgr_vdev_obj.h>
27*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h>
28*5113495bSYour Name #include "wlan_coex_public_structs.h"
29*5113495bSYour Name
30*5113495bSYour Name /**
31*5113495bSYour Name * enum coex_btc_chain_mode - btc chain mode definitions
32*5113495bSYour Name * @WLAN_COEX_BTC_CHAIN_MODE_SHARED: chains of BT and WLAN 2.4 GHz are shared.
33*5113495bSYour Name * @WLAN_COEX_BTC_CHAIN_MODE_FDD: chains of BT and WLAN 2.4 GHz are
34*5113495bSYour Name * separated, FDD mode.
35*5113495bSYour Name * @WLAN_COEX_BTC_CHAIN_MODE_HYBRID: chains of BT and WLAN 2.4 GHz are
36*5113495bSYour Name * separated, hybrid mode.
37*5113495bSYour Name * @WLAN_COEX_BTC_CHAIN_MODE_UNSETTLED: chain mode is not set.
38*5113495bSYour Name */
39*5113495bSYour Name enum coex_btc_chain_mode {
40*5113495bSYour Name WLAN_COEX_BTC_CHAIN_MODE_SHARED = 0,
41*5113495bSYour Name WLAN_COEX_BTC_CHAIN_MODE_FDD,
42*5113495bSYour Name WLAN_COEX_BTC_CHAIN_MODE_HYBRID,
43*5113495bSYour Name WLAN_COEX_BTC_CHAIN_MODE_UNSETTLED = 0xFF,
44*5113495bSYour Name };
45*5113495bSYour Name
46*5113495bSYour Name /**
47*5113495bSYour Name * enum coex_config_type - coex config type definitions
48*5113495bSYour Name * @COEX_CONFIG_BTC_CHAIN_MODE: config BT coex chain mode
49*5113495bSYour Name * @COEX_CONFIG_TYPE_MAX: max value
50*5113495bSYour Name */
51*5113495bSYour Name enum coex_config_type {
52*5113495bSYour Name COEX_CONFIG_BTC_CHAIN_MODE,
53*5113495bSYour Name /* keep last */
54*5113495bSYour Name COEX_CONFIG_TYPE_MAX,
55*5113495bSYour Name };
56*5113495bSYour Name
57*5113495bSYour Name /**
58*5113495bSYour Name * typedef update_coex_cb() - cb to inform coex config
59*5113495bSYour Name * @vdev: vdev pointer
60*5113495bSYour Name *
61*5113495bSYour Name * Return: void
62*5113495bSYour Name */
63*5113495bSYour Name typedef QDF_STATUS (*update_coex_cb)(struct wlan_objmgr_vdev *vdev);
64*5113495bSYour Name
65*5113495bSYour Name #ifdef FEATURE_COEX
66*5113495bSYour Name /**
67*5113495bSYour Name * ucfg_coex_register_cfg_updated_handler() - API to register coex config
68*5113495bSYour Name * updated handler.
69*5113495bSYour Name * @psoc: pointer to psoc object
70*5113495bSYour Name * @type: type of coex config
71*5113495bSYour Name * @handler: handler to be registered
72*5113495bSYour Name *
73*5113495bSYour Name * Return: status of operation
74*5113495bSYour Name */
75*5113495bSYour Name QDF_STATUS
76*5113495bSYour Name ucfg_coex_register_cfg_updated_handler(struct wlan_objmgr_psoc *psoc,
77*5113495bSYour Name enum coex_config_type type,
78*5113495bSYour Name update_coex_cb handler);
79*5113495bSYour Name
80*5113495bSYour Name /**
81*5113495bSYour Name * ucfg_coex_psoc_set_btc_chain_mode() - API to set BT coex chain mode for psoc
82*5113495bSYour Name * @psoc: pointer to psoc object
83*5113495bSYour Name * @val: BT coex chain mode
84*5113495bSYour Name *
85*5113495bSYour Name * Return : status of operation
86*5113495bSYour Name */
87*5113495bSYour Name QDF_STATUS
88*5113495bSYour Name ucfg_coex_psoc_set_btc_chain_mode(struct wlan_objmgr_psoc *psoc,
89*5113495bSYour Name enum coex_btc_chain_mode val);
90*5113495bSYour Name
91*5113495bSYour Name /**
92*5113495bSYour Name * ucfg_coex_psoc_get_btc_chain_mode() - API to get BT coex chain mode from psoc
93*5113495bSYour Name * @psoc: pointer to psoc object
94*5113495bSYour Name * @val: pointer to BT coex chain mode
95*5113495bSYour Name *
96*5113495bSYour Name * Return : status of operation
97*5113495bSYour Name */
98*5113495bSYour Name QDF_STATUS
99*5113495bSYour Name ucfg_coex_psoc_get_btc_chain_mode(struct wlan_objmgr_psoc *psoc,
100*5113495bSYour Name enum coex_btc_chain_mode *val);
101*5113495bSYour Name
102*5113495bSYour Name /**
103*5113495bSYour Name * ucfg_coex_send_btc_chain_mode() - API to send BT coex config to target if
104*5113495bSYour Name * @vdev: pointer to vdev object
105*5113495bSYour Name * @mode: BT coex chain mode
106*5113495bSYour Name *
107*5113495bSYour Name * Return: status of operation
108*5113495bSYour Name */
109*5113495bSYour Name QDF_STATUS
110*5113495bSYour Name ucfg_coex_send_btc_chain_mode(struct wlan_objmgr_vdev *vdev,
111*5113495bSYour Name enum coex_btc_chain_mode mode);
112*5113495bSYour Name
113*5113495bSYour Name /**
114*5113495bSYour Name * ucfg_coex_send_multi_config() - API to send coex multiple config to target
115*5113495bSYour Name * @vdev: pointer to vdev object
116*5113495bSYour Name * @param: pointer to coex multiple config parameters
117*5113495bSYour Name *
118*5113495bSYour Name * Return: status of operation
119*5113495bSYour Name */
120*5113495bSYour Name QDF_STATUS
121*5113495bSYour Name ucfg_coex_send_multi_config(struct wlan_objmgr_vdev *vdev,
122*5113495bSYour Name struct coex_multi_config *param);
123*5113495bSYour Name
124*5113495bSYour Name /**
125*5113495bSYour Name * ucfg_coex_send_logging_config() - API to send BT coex logging config to
126*5113495bSYour Name * target if
127*5113495bSYour Name * @psoc: pointer to psoc object
128*5113495bSYour Name * @apps_args: pointer to argument
129*5113495bSYour Name *
130*5113495bSYour Name * Return : status of operation
131*5113495bSYour Name */
132*5113495bSYour Name QDF_STATUS
133*5113495bSYour Name ucfg_coex_send_logging_config(struct wlan_objmgr_psoc *psoc,
134*5113495bSYour Name uint32_t *apps_args);
135*5113495bSYour Name #else
136*5113495bSYour Name static inline QDF_STATUS
ucfg_coex_register_cfg_updated_handler(struct wlan_objmgr_psoc * psoc,enum coex_config_type type,update_coex_cb handler)137*5113495bSYour Name ucfg_coex_register_cfg_updated_handler(struct wlan_objmgr_psoc *psoc,
138*5113495bSYour Name enum coex_config_type type,
139*5113495bSYour Name update_coex_cb handler)
140*5113495bSYour Name {
141*5113495bSYour Name return QDF_STATUS_SUCCESS;
142*5113495bSYour Name }
143*5113495bSYour Name
144*5113495bSYour Name static inline QDF_STATUS
ucfg_coex_psoc_get_btc_chain_mode(struct wlan_objmgr_psoc * psoc,enum coex_btc_chain_mode * val)145*5113495bSYour Name ucfg_coex_psoc_get_btc_chain_mode(struct wlan_objmgr_psoc *psoc,
146*5113495bSYour Name enum coex_btc_chain_mode *val)
147*5113495bSYour Name {
148*5113495bSYour Name if (val)
149*5113495bSYour Name *val = WLAN_COEX_BTC_CHAIN_MODE_UNSETTLED;
150*5113495bSYour Name
151*5113495bSYour Name return QDF_STATUS_SUCCESS;
152*5113495bSYour Name }
153*5113495bSYour Name
154*5113495bSYour Name static inline QDF_STATUS
ucfg_coex_send_btc_chain_mode(struct wlan_objmgr_vdev * vdev,enum coex_btc_chain_mode mode)155*5113495bSYour Name ucfg_coex_send_btc_chain_mode(struct wlan_objmgr_vdev *vdev,
156*5113495bSYour Name enum coex_btc_chain_mode mode)
157*5113495bSYour Name {
158*5113495bSYour Name return QDF_STATUS_SUCCESS;
159*5113495bSYour Name }
160*5113495bSYour Name
161*5113495bSYour Name static inline QDF_STATUS
ucfg_coex_send_multi_config(struct wlan_objmgr_vdev * vdev,struct coex_multi_config * param)162*5113495bSYour Name ucfg_coex_send_multi_config(struct wlan_objmgr_vdev *vdev,
163*5113495bSYour Name struct coex_multi_config *param)
164*5113495bSYour Name {
165*5113495bSYour Name return QDF_STATUS_E_NOSUPPORT;
166*5113495bSYour Name }
167*5113495bSYour Name
168*5113495bSYour Name static inline QDF_STATUS
ucfg_coex_send_logging_config(struct wlan_objmgr_psoc * psoc,uint32_t * apps_args)169*5113495bSYour Name ucfg_coex_send_logging_config(struct wlan_objmgr_psoc *psoc,
170*5113495bSYour Name uint32_t *apps_args)
171*5113495bSYour Name {
172*5113495bSYour Name return QDF_STATUS_E_NOSUPPORT;
173*5113495bSYour Name }
174*5113495bSYour Name #endif
175*5113495bSYour Name #ifdef WLAN_FEATURE_DBAM_CONFIG
176*5113495bSYour Name /**
177*5113495bSYour Name * ucfg_coex_send_dbam_config() - API to send dbam config to target if
178*5113495bSYour Name * @vdev: pointer to vdev object
179*5113495bSYour Name * @param: DBAM config mode params
180*5113495bSYour Name * @clbk: dbam config response callback
181*5113495bSYour Name * @context: request manager context
182*5113495bSYour Name *
183*5113495bSYour Name * Return: QDF_STATUS_SUCCESS on success
184*5113495bSYour Name */
185*5113495bSYour Name QDF_STATUS
186*5113495bSYour Name ucfg_coex_send_dbam_config(struct wlan_objmgr_vdev *vdev,
187*5113495bSYour Name struct coex_dbam_config_params *param,
188*5113495bSYour Name void (*clbk)(void *ctx,
189*5113495bSYour Name enum coex_dbam_comp_status *rsp),
190*5113495bSYour Name void *context);
191*5113495bSYour Name #else
192*5113495bSYour Name static inline QDF_STATUS
ucfg_coex_send_dbam_config(void)193*5113495bSYour Name ucfg_coex_send_dbam_config(void)
194*5113495bSYour Name {
195*5113495bSYour Name return QDF_STATUS_E_NOSUPPORT;
196*5113495bSYour Name }
197*5113495bSYour Name #endif
198*5113495bSYour Name #endif
199