xref: /wlan-dirver/qca-wifi-host-cmn/qdf/inc/qdf_platform.h (revision 1397a33f48ea6455be40871470b286e535820eb8)
1 /*
2  * Copyright (c) 2018-2019 The Linux Foundation. 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 /**
20  * DOC: qdf_platform.h
21  * This file defines platform API abstractions.
22  */
23 
24 #ifndef _QDF_PLATFORM_H
25 #define _QDF_PLATFORM_H
26 
27 /**
28  * qdf_self_recovery_callback() - callback for self recovery
29  * @reason: the reason for the recovery request
30  * @func: the caller's function name
31  * @line: the line number of the callsite
32  *
33  * Return: none
34  */
35 typedef void (*qdf_self_recovery_callback)(enum qdf_hang_reason reason,
36 					   const char *func,
37 					   const uint32_t line);
38 
39 /**
40  * qdf_ssr_callback() - callback for ssr
41  *
42  * Return: true if fw is down and false if fw is not down
43  */
44 typedef void (*qdf_ssr_callback)(const char *);
45 
46 /**
47  * qdf_is_module_state_transitioning_cb() - callback to check module state
48  *
49  * Return: true if module is in transition, else false
50  */
51 typedef int (*qdf_is_module_state_transitioning_cb)(void);
52 
53 /**
54  * qdf_is_fw_down_callback() - callback to query if fw is down
55  *
56  * Return: true if fw is down and false if fw is not down
57  */
58 typedef bool (*qdf_is_fw_down_callback)(void);
59 
60 /**
61  * qdf_register_fw_down_callback() - API to register fw down callback
62  * @is_fw_down: callback to query if fw is down or not
63  *
64  * Return: none
65  */
66 void qdf_register_fw_down_callback(qdf_is_fw_down_callback is_fw_down);
67 
68 /**
69  * qdf_is_fw_down() - API to check if fw is down or not
70  *
71  * Return: true: if fw is down
72  *	   false: if fw is not down
73  */
74 bool qdf_is_fw_down(void);
75 
76 /**
77  * qdf_register_self_recovery_callback() - register self recovery callback
78  * @callback:  self recovery callback
79  *
80  * Return: None
81  */
82 void qdf_register_self_recovery_callback(qdf_self_recovery_callback callback);
83 
84 /**
85  * qdf_trigger_self_recovery () - trigger self recovery
86  *
87  * Call API only in case of fatal error,
88  * if self_recovery_cb callback is registered, injcets fw crash and recovers
89  * else raises QDF_BUG()
90  *
91  * Return: None
92  */
93 #define qdf_trigger_self_recovery() \
94 	__qdf_trigger_self_recovery(__func__, __LINE__)
95 void __qdf_trigger_self_recovery(const char *func, const uint32_t line);
96 
97 /**
98  * qdf_register_ssr_protect_callbacks() - register [un]protect callbacks
99  *
100  * Return: None
101  */
102 void qdf_register_ssr_protect_callbacks(qdf_ssr_callback protect,
103 					qdf_ssr_callback unprotect);
104 
105 /**
106  * qdf_ssr_protect() - start SSR protection
107  *
108  * Return: None
109  */
110 void qdf_ssr_protect(const char *caller);
111 
112 /**
113  * qdf_ssr_unprotect() - remove SSR protection
114  *
115  * Return: None
116  */
117 void qdf_ssr_unprotect(const char *caller);
118 
119 /**
120  * qdf_register_module_state_query_callback() - register module state query
121  *
122  * Return: None
123  */
124 void qdf_register_module_state_query_callback(
125 			qdf_is_module_state_transitioning_cb query);
126 
127 /**
128  * qdf_is_module_state_transitioning() - query module state transition
129  *
130  * Return: true if in transition else false
131  */
132 bool qdf_is_module_state_transitioning(void);
133 
134 /**
135  * qdf_is_recovering_callback() - callback to get driver recovering in progress
136  * or not
137  *
138  * Return: true if driver is doing recovering else false
139  */
140 typedef bool (*qdf_is_recovering_callback)(void);
141 
142 /**
143  * qdf_register_recovering_state_query_callback() - register recover status
144  * query callback
145  *
146  * Return: none
147  */
148 void qdf_register_recovering_state_query_callback(
149 	qdf_is_recovering_callback is_recovering);
150 
151 /**
152  * qdf_is_recovering() - get driver recovering in progress status
153  * or not
154  *
155  * Return: true if driver is doing recovering else false
156  */
157 bool qdf_is_recovering(void);
158 
159 /**
160  * qdf_psoc_start_callback() - callback for starting the psoc operation
161  *
162  * Return: true if driver psoc operation can be started else false
163  */
164 typedef QDF_STATUS (*qdf_psoc_start_callback)(void);
165 
166 /**
167  * qdf_psoc_stop_callback - callback for stopping the psoc operation
168  *
169  * Return: None
170  */
171 typedef void (*qdf_psoc_stop_callback)(void);
172 
173 /**
174  * qdf_psoc_op_start() - start DSC psoc operation
175  *
176  * Return: Success for starting psoc operation or failure
177  */
178 QDF_STATUS qdf_psoc_op_start(void);
179 
180 /**
181  * qdf_psoc_op_stop() - stop DSC psoc operation
182  * @context: Context information
183  *
184  * Return: None
185  */
186 void qdf_psoc_op_stop(void);
187 
188 /**
189  * qdf_register_dsc_psoc_callbacks() - register dsc psoc start/stop callbacks
190  *
191  * Return: None
192  */
193 void qdf_register_dsc_psoc_callbacks(qdf_psoc_start_callback protect,
194 				     qdf_psoc_stop_callback unprotect);
195 #endif /*_QDF_PLATFORM_H*/
196