qdf_hang_event_notifier.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. */
  42. enum hang_event_tag {
  43. HANG_EVT_TAG_CDS,
  44. HANG_EVT_TAG_OS_IF,
  45. HANG_EVT_TAG_OS_IF_SCAN,
  46. HANG_EVT_TAG_LEGACY_MAC,
  47. HANG_EVT_TAG_WMI_EVT_HIST,
  48. HANG_EVT_TAG_WMI_CMD_HIST,
  49. HANG_EVT_TAG_HTC_CREDIT_HIST,
  50. HANG_EVT_TAG_DP_PEER_INFO,
  51. HANG_EVT_TAG_CE_INFO
  52. };
  53. #define QDF_HANG_EVENT_TLV_HDR_SIZE (sizeof(uint32_t))
  54. #define QDF_HANG_EVT_SET_HDR(tlv_buf, tag, len) \
  55. (((uint16_t *)(tlv_buf))[0]) = (((tag) << 8) | ((len) & 0x000000FF))
  56. #define QDF_HANG_GET_STRUCT_TLVLEN(tlv_struct) \
  57. ((uint16_t)(sizeof(tlv_struct) - QDF_HANG_EVENT_TLV_HDR_SIZE))
  58. /**
  59. * qdf_notifier_data - Private data for notifier data
  60. * @hang_data: Data filled by notifier
  61. * @offset: Current offset of the hang data buffer
  62. */
  63. struct qdf_notifer_data {
  64. uint8_t *hang_data;
  65. unsigned int offset;
  66. };
  67. #ifdef WLAN_HANG_EVENT
  68. /**
  69. * qdf_hang_event_register_notifier() - Hang data notifier register
  70. * @nb: Notifier block
  71. *
  72. * This function registers notifier block for the hang data notifier chain
  73. * the registered function will be invoked when the hang data notifier call
  74. * is invoked.
  75. *
  76. * Return: QDF_STATUS
  77. */
  78. QDF_STATUS qdf_hang_event_register_notifier(qdf_notif_block *nb);
  79. /**
  80. * qdf_hang_event_unregister_notifier() - Hang data notifier unregister
  81. * @nb: Notifier block
  82. *
  83. * This function unregisters notifier block for the hang data notifier chain.
  84. *
  85. * Return: QDF_STATUS
  86. */
  87. QDF_STATUS qdf_hang_event_unregister_notifier(qdf_notif_block *nb);
  88. /**
  89. * qdf_hang_event_notifier_call() - Hang data notifier register
  90. * @v: state
  91. * @data: Private data for this notifier chain
  92. *
  93. * This function when invoked will call the functions registered with this
  94. * notifier chain.
  95. *
  96. * Return: QDF_STATUS
  97. */
  98. QDF_STATUS qdf_hang_event_notifier_call(unsigned long v, void *data);
  99. #else
  100. static inline
  101. QDF_STATUS qdf_hang_event_register_notifier(qdf_notif_block *nb)
  102. {
  103. return QDF_STATUS_SUCCESS;
  104. }
  105. static inline
  106. QDF_STATUS qdf_hang_event_unregister_notifier(qdf_notif_block *nb)
  107. {
  108. return QDF_STATUS_SUCCESS;
  109. }
  110. static inline
  111. QDF_STATUS qdf_hang_event_notifier_call(unsigned long v, void *data)
  112. {
  113. return QDF_STATUS_SUCCESS;
  114. }
  115. #endif
  116. #endif