qdf_platform.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. /*
  2. * Copyright (c) 2018-2020 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. * DOC: qdf_platform.h
  20. * This file defines platform API abstractions.
  21. */
  22. #ifndef _QDF_PLATFORM_H
  23. #define _QDF_PLATFORM_H
  24. #include "qdf_types.h"
  25. /**
  26. * qdf_self_recovery_callback() - callback for self recovery
  27. * @reason: the reason for the recovery request
  28. * @func: the caller's function name
  29. * @line: the line number of the callsite
  30. *
  31. * Return: none
  32. */
  33. typedef void (*qdf_self_recovery_callback)(enum qdf_hang_reason reason,
  34. const char *func,
  35. const uint32_t line);
  36. /**
  37. * qdf_is_fw_down_callback() - callback to query if fw is down
  38. *
  39. * Return: true if fw is down and false if fw is not down
  40. */
  41. typedef bool (*qdf_is_fw_down_callback)(void);
  42. /**
  43. * qdf_register_fw_down_callback() - API to register fw down callback
  44. * @is_fw_down: callback to query if fw is down or not
  45. *
  46. * Return: none
  47. */
  48. void qdf_register_fw_down_callback(qdf_is_fw_down_callback is_fw_down);
  49. /**
  50. * qdf_is_fw_down() - API to check if fw is down or not
  51. *
  52. * Return: true: if fw is down
  53. * false: if fw is not down
  54. */
  55. bool qdf_is_fw_down(void);
  56. /**
  57. * qdf_wmi_recv_qmi_cb() - callback to receive WMI over QMI
  58. * @cb_ctx: WMI event recv callback context(wmi_handle)
  59. * @buf: WMI buffer
  60. * @len: WMI buffer len
  61. *
  62. * Return: 0 if success otherwise -EINVAL
  63. */
  64. typedef int (*qdf_wmi_recv_qmi_cb)(void *cb_ctx, void *buf, int len);
  65. /**
  66. * qdf_wmi_send_over_qmi_callback() - callback to send WMI over QMI
  67. * @buf: WMI buffer
  68. * @len: WMI buffer len
  69. * @cb_ctx: WMI event recv callback context(wmi_handle)
  70. * @wmi_rx_cb: WMI event receive call back
  71. *
  72. * Return: QDF_STATUS_SUCCESS if success otherwise QDF error code
  73. */
  74. typedef QDF_STATUS (*qdf_wmi_send_over_qmi_callback)(void *buf, uint32_t len,
  75. void *cb_ctx,
  76. qdf_wmi_recv_qmi_cb
  77. wmi_rx_cb);
  78. /**
  79. * qdf_register_wmi_send_recv_qmi_callback() - Register WMI over QMI callback
  80. * @qdf_wmi_send_over_qmi_callback: callback to send recv WMI data over QMI
  81. *
  82. * Return: none
  83. */
  84. void qdf_register_wmi_send_recv_qmi_callback(qdf_wmi_send_over_qmi_callback
  85. wmi_send_recv_qmi_cb);
  86. /**
  87. * qdf_wmi_send_recv_qmi() - API to send receive WMI data over QMI
  88. * @buf: WMI buffer
  89. * @len: WMI buffer len
  90. * @cb_ctx: WMI event recv callback context(wmi_handle)
  91. * @wmi_rx_cb: WMI event receive call back
  92. *
  93. * Return: QDF STATUS of operation
  94. */
  95. QDF_STATUS qdf_wmi_send_recv_qmi(void *buf, uint32_t len, void *cb_ctx,
  96. qdf_wmi_recv_qmi_cb wmi_rx_cb);
  97. /**
  98. * qdf_is_driver_unloading_callback() - callback to get driver unloading in progress
  99. * or not
  100. *
  101. * Return: true if driver is unloading else false
  102. */
  103. typedef bool (*qdf_is_driver_unloading_callback)(void);
  104. /**
  105. * qdf_register_is_driver_unloading_callback() - driver unloading callback
  106. * @callback: driver unloading callback
  107. *
  108. * Return: None
  109. */
  110. void qdf_register_is_driver_unloading_callback(
  111. qdf_is_driver_unloading_callback callback);
  112. /**
  113. * qdf_register_self_recovery_callback() - register self recovery callback
  114. * @callback: self recovery callback
  115. *
  116. * Return: None
  117. */
  118. void qdf_register_self_recovery_callback(qdf_self_recovery_callback callback);
  119. /**
  120. * qdf_trigger_self_recovery () - trigger self recovery
  121. * @reason: the reason for the recovery request
  122. *
  123. * Call API only in case of fatal error,
  124. * if self_recovery_cb callback is registered, injcets fw crash and recovers
  125. * else raises QDF_BUG()
  126. *
  127. * Return: None
  128. */
  129. #define qdf_trigger_self_recovery(reason) \
  130. __qdf_trigger_self_recovery(reason, __func__, __LINE__)
  131. void __qdf_trigger_self_recovery(enum qdf_hang_reason reason,
  132. const char *func, const uint32_t line);
  133. /**
  134. * qdf_is_recovering_callback() - callback to get driver recovering in
  135. * progress or not
  136. *
  137. * Return: true if driver is doing recovering else false
  138. */
  139. typedef bool (*qdf_is_recovering_callback)(void);
  140. /**
  141. * qdf_register_recovering_state_query_callback() - register recover status
  142. * query callback
  143. *
  144. * Return: none
  145. */
  146. void qdf_register_recovering_state_query_callback(
  147. qdf_is_recovering_callback is_recovering);
  148. /**
  149. * qdf_is_driver_unloading() - get driver unloading in progress status
  150. * or not
  151. *
  152. * Return: true if driver is unloading else false
  153. */
  154. bool qdf_is_driver_unloading(void);
  155. /**
  156. * qdf_is_recovering() - get driver recovering in progress status
  157. * or not
  158. *
  159. * Return: true if driver is doing recovering else false
  160. */
  161. bool qdf_is_recovering(void);
  162. /**
  163. * struct qdf_op_sync - opaque operation synchronization context handle
  164. */
  165. struct qdf_op_sync;
  166. typedef int (*qdf_op_protect_cb)(void **out_sync, const char *func);
  167. typedef void (*qdf_op_unprotect_cb)(void *sync, const char *func);
  168. /**
  169. * qdf_op_protect() - attempt to protect a driver operation
  170. * @out_sync: output parameter for the synchronization context, populated on
  171. * success
  172. *
  173. * Return: Errno
  174. */
  175. #define qdf_op_protect(out_sync) __qdf_op_protect(out_sync, __func__)
  176. qdf_must_check int
  177. __qdf_op_protect(struct qdf_op_sync **out_sync, const char *func);
  178. /**
  179. * qdf_op_unprotect() - release driver operation protection
  180. * @sync: synchronization context returned from qdf_op_protect()
  181. *
  182. * Return: None
  183. */
  184. #define qdf_op_unprotect(sync) __qdf_op_unprotect(sync, __func__)
  185. void __qdf_op_unprotect(struct qdf_op_sync *sync, const char *func);
  186. /**
  187. * qdf_op_callbacks_register() - register driver operation protection callbacks
  188. *
  189. * Return: None
  190. */
  191. void qdf_op_callbacks_register(qdf_op_protect_cb on_protect,
  192. qdf_op_unprotect_cb on_unprotect);
  193. /**
  194. * qdf_is_drv_connected_callback() - callback to query if drv is connected
  195. *
  196. * Return: true if drv is connected else false
  197. */
  198. typedef bool (*qdf_is_drv_connected_callback)(void);
  199. /**
  200. * qdf_is_drv_connected() - API to check if drv is connected or not
  201. *
  202. * DRV is dynamic request voting using which fw can do page fault and
  203. * bring in page back without apps wake up
  204. *
  205. * Return: true: if drv is connected
  206. * false: if drv is not connected
  207. */
  208. bool qdf_is_drv_connected(void);
  209. /**
  210. * qdf_register_drv_connected_callback() - API to register drv connected cb
  211. * @is_drv_connected: callback to query if drv is connected or not
  212. *
  213. * Return: none
  214. */
  215. void qdf_register_drv_connected_callback(qdf_is_drv_connected_callback
  216. is_drv_connected);
  217. /**
  218. * qdf_check_state_before_panic() - API to check if FW is down
  219. * or driver is in recovery before calling assert
  220. *
  221. * Return: none
  222. */
  223. void qdf_check_state_before_panic(void);
  224. #endif /*_QDF_PLATFORM_H*/