123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /*
- * Copyright (c) 2020, The Linux Foundation. All rights reserved.
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
- /**
- * DOC: qdf_hang_event_notifier
- * This file provides OS dependent QDF notifier call for hang event
- */
- #ifndef QDF_HANG_EVENT_NOTIFIER_H
- #define QDF_HANG_EVENT_NOTIFIER_H
- #include <qdf_notifier.h>
- #define QDF_HANG_EVENT_VERSION "1"
- /* Max hang event buffer size */
- #define QDF_HANG_EVENT_DATA_SIZE 390
- /* Max offset which host can write */
- #define QDF_WLAN_MAX_HOST_OFFSET 194
- /* Start of the Firmware Data offset */
- #define QDF_WLAN_HANG_FW_OFFSET 195
- /**
- * enum hang_event_tag - Hang event tag for various modules
- * @HANG_EVT_TAG_CDS: CDS module hang event tag
- * @HANG_EVT_TAG_OS_IF: OS interface module hang event tag
- * @HANG_EVT_TAG_OS_IF_SCAN: scan module hang event tag
- * @HANG_EVT_TAG_LEGACY_MAC: Legacy mac module hang event tag
- * @HANG_EVT_TAG_WMI_EVT_HIST: WMI event history hang event tag
- * @HANG_EVT_TAG_WMI_CMD_HIST: WMI command history hang event tag
- * @HANG_EVT_TAG_HTC_CREDIT_HIST: HTC credit history hang event tag
- * @HANG_EVT_TAG_DP_PEER_INFO: DP peer info hang event tag
- * @HANG_EVT_TAG_CE_INFO: Copy Engine hang event tag
- * @HANG_EVT_TAG_BUS_INFO: Bus hang event tag
- */
- enum hang_event_tag {
- HANG_EVT_TAG_CDS,
- HANG_EVT_TAG_OS_IF,
- HANG_EVT_TAG_OS_IF_SCAN,
- HANG_EVT_TAG_LEGACY_MAC,
- HANG_EVT_TAG_WMI_EVT_HIST,
- HANG_EVT_TAG_WMI_CMD_HIST,
- HANG_EVT_TAG_HTC_CREDIT_HIST,
- HANG_EVT_TAG_DP_PEER_INFO,
- HANG_EVT_TAG_CE_INFO,
- HANG_EVT_TAG_BUS_INFO
- };
- #define QDF_HANG_EVENT_TLV_HDR_SIZE (sizeof(uint16_t))
- #define QDF_HANG_EVT_SET_HDR(tlv_buf, tag, len) \
- (((uint16_t *)(tlv_buf))[0]) = (((tag) << 8) | ((len) & 0x000000FF))
- #define QDF_HANG_GET_STRUCT_TLVLEN(tlv_struct) \
- ((uint16_t)(sizeof(tlv_struct) - QDF_HANG_EVENT_TLV_HDR_SIZE))
- /**
- * struct qdf_notifer_data - Private data for notifier data
- * @hang_data: Data filled by notifier
- * @offset: Current offset of the hang data buffer
- */
- struct qdf_notifer_data {
- uint8_t *hang_data;
- unsigned int offset;
- };
- #ifdef WLAN_HANG_EVENT
- /**
- * qdf_hang_event_register_notifier() - Hang data notifier register
- * @nb: Notifier block
- *
- * This function registers notifier block for the hang data notifier chain
- * the registered function will be invoked when the hang data notifier call
- * is invoked.
- *
- * Return: QDF_STATUS
- */
- QDF_STATUS qdf_hang_event_register_notifier(qdf_notif_block *nb);
- /**
- * qdf_hang_event_unregister_notifier() - Hang data notifier unregister
- * @nb: Notifier block
- *
- * This function unregisters notifier block for the hang data notifier chain.
- *
- * Return: QDF_STATUS
- */
- QDF_STATUS qdf_hang_event_unregister_notifier(qdf_notif_block *nb);
- /**
- * qdf_hang_event_notifier_call() - Hang data notifier register
- * @v: state
- * @data: Private data for this notifier chain
- *
- * This function when invoked will call the functions registered with this
- * notifier chain.
- *
- * Return: QDF_STATUS
- */
- QDF_STATUS qdf_hang_event_notifier_call(unsigned long v, void *data);
- #else
- static inline
- QDF_STATUS qdf_hang_event_register_notifier(qdf_notif_block *nb)
- {
- return QDF_STATUS_SUCCESS;
- }
- static inline
- QDF_STATUS qdf_hang_event_unregister_notifier(qdf_notif_block *nb)
- {
- return QDF_STATUS_SUCCESS;
- }
- static inline
- QDF_STATUS qdf_hang_event_notifier_call(unsigned long v, void *data)
- {
- return QDF_STATUS_SUCCESS;
- }
- #endif
- #endif
|