qdf_platform.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. #include "qdf_module.h"
  19. #include "qdf_trace.h"
  20. #include "qdf_platform.h"
  21. /**
  22. * The following callbacks should be defined static to make sure they are
  23. * initialized to NULL
  24. */
  25. static qdf_self_recovery_callback self_recovery_cb;
  26. static qdf_ssr_callback ssr_protect_cb;
  27. static qdf_ssr_callback ssr_unprotect_cb;
  28. static qdf_is_module_state_transitioning_cb module_state_transitioning_cb;
  29. static qdf_is_fw_down_callback is_fw_down_cb;
  30. static qdf_is_recovering_callback is_recovering_cb;
  31. static qdf_psoc_start_callback psoc_op_start;
  32. static qdf_psoc_stop_callback psoc_op_stop;
  33. void qdf_register_fw_down_callback(qdf_is_fw_down_callback is_fw_down)
  34. {
  35. is_fw_down_cb = is_fw_down;
  36. }
  37. qdf_export_symbol(qdf_register_fw_down_callback);
  38. bool qdf_is_fw_down(void)
  39. {
  40. if (!is_fw_down_cb) {
  41. QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
  42. "fw down callback is not registered");
  43. return false;
  44. }
  45. return is_fw_down_cb();
  46. }
  47. qdf_export_symbol(qdf_is_fw_down);
  48. void qdf_register_self_recovery_callback(qdf_self_recovery_callback callback)
  49. {
  50. self_recovery_cb = callback;
  51. }
  52. qdf_export_symbol(qdf_register_self_recovery_callback);
  53. void __qdf_trigger_self_recovery(const char *func, const uint32_t line)
  54. {
  55. if (self_recovery_cb)
  56. self_recovery_cb(QDF_REASON_UNSPECIFIED, func, line);
  57. else
  58. QDF_DEBUG_PANIC_FL(func, line, "");
  59. }
  60. qdf_export_symbol(__qdf_trigger_self_recovery);
  61. void qdf_register_ssr_protect_callbacks(qdf_ssr_callback protect,
  62. qdf_ssr_callback unprotect)
  63. {
  64. ssr_protect_cb = protect;
  65. ssr_unprotect_cb = unprotect;
  66. }
  67. qdf_export_symbol(qdf_register_ssr_protect_callbacks);
  68. void qdf_ssr_protect(const char *caller)
  69. {
  70. if (ssr_protect_cb)
  71. ssr_protect_cb(caller);
  72. }
  73. qdf_export_symbol(qdf_ssr_protect);
  74. void qdf_ssr_unprotect(const char *caller)
  75. {
  76. if (ssr_unprotect_cb)
  77. ssr_unprotect_cb(caller);
  78. }
  79. qdf_export_symbol(qdf_ssr_unprotect);
  80. void qdf_register_module_state_query_callback(
  81. qdf_is_module_state_transitioning_cb query)
  82. {
  83. module_state_transitioning_cb = query;
  84. }
  85. qdf_export_symbol(qdf_register_module_state_query_callback);
  86. bool qdf_is_module_state_transitioning(void)
  87. {
  88. if (module_state_transitioning_cb)
  89. return module_state_transitioning_cb();
  90. return false;
  91. }
  92. qdf_export_symbol(qdf_is_module_state_transitioning);
  93. void qdf_register_recovering_state_query_callback(
  94. qdf_is_recovering_callback is_recovering)
  95. {
  96. is_recovering_cb = is_recovering;
  97. }
  98. bool qdf_is_recovering(void)
  99. {
  100. if (is_recovering_cb)
  101. return is_recovering_cb();
  102. return false;
  103. }
  104. qdf_export_symbol(qdf_is_recovering);
  105. void qdf_register_dsc_psoc_callbacks(qdf_psoc_start_callback psoc_start,
  106. qdf_psoc_stop_callback psoc_stop)
  107. {
  108. psoc_op_start = psoc_start;
  109. psoc_op_stop = psoc_stop;
  110. }
  111. qdf_export_symbol(qdf_register_dsc_psoc_callbacks);
  112. QDF_STATUS qdf_psoc_op_start(void)
  113. {
  114. if (psoc_op_start)
  115. return psoc_op_start();
  116. return QDF_STATUS_E_INVAL;
  117. }
  118. qdf_export_symbol(qdf_psoc_op_start);
  119. void qdf_psoc_op_stop(void)
  120. {
  121. if (psoc_op_stop)
  122. psoc_op_stop();
  123. }
  124. qdf_export_symbol(qdf_psoc_op_stop);