qdf_hang_event_notifier.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. * Copyright (c) 2020, The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any
  6. * purpose with or without fee is hereby granted, provided that the above
  7. * copyright notice and this permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  10. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  11. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  12. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  13. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  14. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  15. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  16. */
  17. /**
  18. * DOC: qdf_hang_event_notifier
  19. * This file provides OS dependent QDF notifier call for hang event
  20. */
  21. #ifndef QDF_HANG_EVENT_NOTIFIER_H
  22. #define QDF_HANG_EVENT_NOTIFIER_H
  23. #include <qdf_notifier.h>
  24. #define QDF_HANG_EVENT_VERSION "1"
  25. /* Max hang event buffer size */
  26. #define QDF_HANG_EVENT_DATA_SIZE 390
  27. /* Max offset which host can write */
  28. #define QDF_WLAN_MAX_HOST_OFFSET 194
  29. /* Start of the Firmware Data offset */
  30. #define QDF_WLAN_HANG_FW_OFFSET 195
  31. /**
  32. * enum hang_event_tag - Hang event tag for various modules
  33. * @HANG_EVT_TAG_CDS: CDS module hang event tag
  34. * @HANG_EVT_TAG_OS_IF: OS interface module hang event tag
  35. * @HANG_EVT_TAG_OS_IF_SCAN: scan module hang event tag
  36. * @HANG_EVT_TAG_LEGACY_MAC: Legacy mac module hang event tag
  37. * @HANG_EVT_TAG_WMI_EVT_HIST: WMI event history hang event tag
  38. * @HANG_EVT_TAG_WMI_CMD_HIST: WMI command history hang event tag
  39. * @HANG_EVT_TAG_HTC_CREDIT_HIST: HTC credit history hang event tag
  40. * @HANG_EVT_TAG_DP_PEER_INFO: DP peer info hang event tag
  41. * @HANG_EVT_TAG_CE_INFO: Copy Engine hang event tag
  42. * @HANG_EVT_TAG_BUS_INFO: Bus hang event tag
  43. */
  44. enum hang_event_tag {
  45. HANG_EVT_TAG_CDS,
  46. HANG_EVT_TAG_OS_IF,
  47. HANG_EVT_TAG_OS_IF_SCAN,
  48. HANG_EVT_TAG_LEGACY_MAC,
  49. HANG_EVT_TAG_WMI_EVT_HIST,
  50. HANG_EVT_TAG_WMI_CMD_HIST,
  51. HANG_EVT_TAG_HTC_CREDIT_HIST,
  52. HANG_EVT_TAG_DP_PEER_INFO,
  53. HANG_EVT_TAG_CE_INFO,
  54. HANG_EVT_TAG_BUS_INFO
  55. };
  56. #define QDF_HANG_EVENT_TLV_HDR_SIZE (sizeof(uint16_t))
  57. #define QDF_HANG_EVT_SET_HDR(tlv_buf, tag, len) \
  58. (((uint16_t *)(tlv_buf))[0]) = (((tag) << 8) | ((len) & 0x000000FF))
  59. #define QDF_HANG_GET_STRUCT_TLVLEN(tlv_struct) \
  60. ((uint16_t)(sizeof(tlv_struct) - QDF_HANG_EVENT_TLV_HDR_SIZE))
  61. /**
  62. * struct qdf_notifer_data - Private data for notifier data
  63. * @hang_data: Data filled by notifier
  64. * @offset: Current offset of the hang data buffer
  65. */
  66. struct qdf_notifer_data {
  67. uint8_t *hang_data;
  68. unsigned int offset;
  69. };
  70. #ifdef WLAN_HANG_EVENT
  71. /**
  72. * qdf_hang_event_register_notifier() - Hang data notifier register
  73. * @nb: Notifier block
  74. *
  75. * This function registers notifier block for the hang data notifier chain
  76. * the registered function will be invoked when the hang data notifier call
  77. * is invoked.
  78. *
  79. * Return: QDF_STATUS
  80. */
  81. QDF_STATUS qdf_hang_event_register_notifier(qdf_notif_block *nb);
  82. /**
  83. * qdf_hang_event_unregister_notifier() - Hang data notifier unregister
  84. * @nb: Notifier block
  85. *
  86. * This function unregisters notifier block for the hang data notifier chain.
  87. *
  88. * Return: QDF_STATUS
  89. */
  90. QDF_STATUS qdf_hang_event_unregister_notifier(qdf_notif_block *nb);
  91. /**
  92. * qdf_hang_event_notifier_call() - Hang data notifier register
  93. * @v: state
  94. * @data: Private data for this notifier chain
  95. *
  96. * This function when invoked will call the functions registered with this
  97. * notifier chain.
  98. *
  99. * Return: QDF_STATUS
  100. */
  101. QDF_STATUS qdf_hang_event_notifier_call(unsigned long v, void *data);
  102. #else
  103. static inline
  104. QDF_STATUS qdf_hang_event_register_notifier(qdf_notif_block *nb)
  105. {
  106. return QDF_STATUS_SUCCESS;
  107. }
  108. static inline
  109. QDF_STATUS qdf_hang_event_unregister_notifier(qdf_notif_block *nb)
  110. {
  111. return QDF_STATUS_SUCCESS;
  112. }
  113. static inline
  114. QDF_STATUS qdf_hang_event_notifier_call(unsigned long v, void *data)
  115. {
  116. return QDF_STATUS_SUCCESS;
  117. }
  118. #endif
  119. #endif