qdf_hang_event_notifier.h 4.0 KB

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