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