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
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  * DOC: wlan_twt_api.h
20  */
21 #ifndef _WLAN_TWT_API_H_
22 #define _WLAN_TWT_API_H_
23 
24 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED)
25 #include <wlan_objmgr_psoc_obj.h>
26 #include <wlan_objmgr_global_obj.h>
27 #include <wlan_lmac_if_def.h>
28 #include <wlan_twt_public_structs.h>
29 
30 #define twt_alert(params...) \
31 	QDF_TRACE_FATAL(QDF_MODULE_ID_TWT, params)
32 #define twt_err(params...) \
33 	QDF_TRACE_ERROR(QDF_MODULE_ID_TWT, params)
34 #define twt_warn(params...) \
35 	QDF_TRACE_WARN(QDF_MODULE_ID_TWT, params)
36 #define twt_notice(params...) \
37 	QDF_TRACE_INFO(QDF_MODULE_ID_TWT, params)
38 #define twt_debug(params...) \
39 	QDF_TRACE_DEBUG(QDF_MODULE_ID_TWT, params)
40 
41 #define twt_nofl_alert(params...) \
42 	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_TWT, params)
43 #define twt_nofl_err(params...) \
44 	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_TWT, params)
45 #define twt_nofl_warn(params...) \
46 	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_TWT, params)
47 #define twt_nofl_notice(params...) \
48 	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_TWT, params)
49 #define twt_nofl_debug(params...) \
50 	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_TWT, params)
51 
52 /**
53  * twt_psoc_enable() - twt psoc enable
54  * @psoc: psoc handle
55  *
56  * return: QDF_STATUS
57  */
58 QDF_STATUS twt_psoc_enable(struct wlan_objmgr_psoc *psoc);
59 
60 /**
61  * twt_psoc_disable() - twt psoc disable
62  * @psoc: psoc handle
63  *
64  * return: QDF_STATUS
65  */
66 QDF_STATUS twt_psoc_disable(struct wlan_objmgr_psoc *psoc);
67 
68 /**
69  * wlan_twt_init() - twt init
70  *
71  * return: QDF_STATUS
72  */
73 QDF_STATUS wlan_twt_init(void);
74 
75 /**
76  * wlan_twt_deinit() - twt de-init
77  *
78  * return: QDF_STATUS
79  */
80 QDF_STATUS wlan_twt_deinit(void);
81 
82 /**
83  * wlan_twt_get_tx_ops() - get tx ops
84  * @psoc: psoc handle
85  *
86  * return: QDF_STATUS
87  */
88 struct wlan_lmac_if_twt_tx_ops *
89 wlan_twt_get_tx_ops(struct wlan_objmgr_psoc *psoc);
90 
91 /**
92  * wlan_twt_get_rx_ops() - get rx ops
93  * @psoc: psoc handle
94  *
95  * return: QDF_STATUS
96  */
97 struct wlan_lmac_if_twt_rx_ops *
98 wlan_twt_get_rx_ops(struct wlan_objmgr_psoc *psoc);
99 
100 /**
101  * wlan_twt_psoc_get_comp_private_obj() - get twt priv obj
102  * @psoc: psoc handle
103  *
104  * return: QDF_STATUS
105  */
106 struct twt_psoc_priv_obj*
107 wlan_twt_psoc_get_comp_private_obj(struct wlan_objmgr_psoc *psoc);
108 
109 /**
110  * wlan_set_peer_twt_capabilities() - set peer twt capabilities
111  * @psoc: psoc handle
112  * @peer_mac: peer mac address
113  * @peer_cap: TWT peer capability bitmap. Refer enum
114  * wlan_twt_capabilities for representation.
115  *
116  * return: QDF_STATUS
117  */
118 QDF_STATUS
119 wlan_set_peer_twt_capabilities(struct wlan_objmgr_psoc *psoc,
120 			       struct qdf_mac_addr *peer_mac,
121 			       uint8_t peer_cap);
122 /**
123  * wlan_twt_psoc_set_pmo_enable() - twt psoc set enable
124  * @psoc: psoc handle
125  * @reason: twt enable reason
126  *
127  * return: QDF_STATUS
128  */
129 QDF_STATUS
130 wlan_twt_psoc_set_pmo_enable(struct wlan_objmgr_psoc *psoc,
131 			     enum twt_disable_reason reason);
132 /**
133  * wlan_twt_psoc_set_pmo_disable() - twt psoc set disable
134  * @psoc: psoc handle
135  * @reason: twt disable reason
136  *
137  *  return: QDF_STATUS
138  */
139 QDF_STATUS
140 wlan_twt_psoc_set_pmo_disable(struct wlan_objmgr_psoc *psoc,
141 			      enum twt_disable_reason reason);
142 
143 #else
144 static inline
twt_psoc_enable(struct wlan_objmgr_psoc * psoc)145 QDF_STATUS twt_psoc_enable(struct wlan_objmgr_psoc *psoc)
146 {
147 	return QDF_STATUS_SUCCESS;
148 }
149 
150 static inline
twt_psoc_disable(struct wlan_objmgr_psoc * psoc)151 QDF_STATUS twt_psoc_disable(struct wlan_objmgr_psoc *psoc)
152 {
153 	return QDF_STATUS_SUCCESS;
154 }
155 
156 static inline
wlan_twt_init(void)157 QDF_STATUS wlan_twt_init(void)
158 {
159 	return QDF_STATUS_SUCCESS;
160 }
161 
162 static inline
wlan_twt_deinit(void)163 QDF_STATUS wlan_twt_deinit(void)
164 {
165 	return QDF_STATUS_SUCCESS;
166 }
167 
168 static inline
wlan_set_peer_twt_capabilities(struct wlan_objmgr_psoc * psoc,struct qdf_mac_addr * peer_mac,uint8_t peer_cap)169 QDF_STATUS wlan_set_peer_twt_capabilities(struct wlan_objmgr_psoc *psoc,
170 					  struct qdf_mac_addr *peer_mac,
171 					  uint8_t peer_cap)
172 {
173 	return QDF_STATUS_SUCCESS;
174 }
175 
176 QDF_STATUS
177 wlan_twt_psoc_set_pmo_enable(struct wlan_objmgr_psoc *psoc,
178 			     enum twt_disable_reason reason);
179 
180 QDF_STATUS
181 wlan_twt_psoc_set_pmo_disable(struct wlan_objmgr_psoc *psoc,
182 			      enum twt_disable_reason reason);
183 #endif
184 #endif /* _WLAN_TWT_API_H_ */
185