blob: 532ea47ca0e2e20a0bb5df111b0871ba2dbdacea [file] [log] [blame]
Arun Kumar Khandavalli2bfa2222020-03-24 12:51:21 +05301/*
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 /**
18 * DOC: qdf_hang_event_notifier
19 * This file provides OS dependent QDF notifier call for hang event
20 */
21
22#ifndef QDF_HANG_EVENT_NOTIFIER_H
23#define QDF_HANG_EVENT_NOTIFIER_H
24
25#include <qdf_notifier.h>
26
Arun Kumar Khandavallid5649552020-08-12 17:22:42 +053027#define QDF_HANG_EVENT_VERSION "1"
Arun Kumar Khandavalli551fd3f2020-03-27 19:31:05 +053028/* Max hang event buffer size */
Arun Kumar Khandavallid5649552020-08-12 17:22:42 +053029#define QDF_HANG_EVENT_DATA_SIZE 390
Arun Kumar Khandavalli551fd3f2020-03-27 19:31:05 +053030/* Max offset which host can write */
Arun Kumar Khandavallid5649552020-08-12 17:22:42 +053031#define QDF_WLAN_MAX_HOST_OFFSET 194
Arun Kumar Khandavalli551fd3f2020-03-27 19:31:05 +053032/* Start of the Firmware Data offset */
Arun Kumar Khandavallid5649552020-08-12 17:22:42 +053033#define QDF_WLAN_HANG_FW_OFFSET 195
Arun Kumar Khandavalli551fd3f2020-03-27 19:31:05 +053034
35/**
36 * hang_event_tag: Hang event tag for various modules
37 * @HANG_EVT_TAG_CDS: CDS module hang event tag
38 * @HANG_EVT_TAG_OS_IF: OS interface module hang event tag
39 * @HANG_EVT_TAG_OS_IF_SCAN: scan module hang event tag
40 * @HANG_EVT_TAG_LEGACY_MAC: Legacy mac module hang event tag
41 * @HANG_EVT_TAG_WMI_EVT_HIST: WMI event history hang event tag
42 * @HANG_EVT_TAG_WMI_CMD_HIST: WMI command history hang event tag
43 * @HANG_EVT_TAG_WMI_CMD_HIST: HTC event tag wmi command history hang event tag
44 * @HANG_EVT_TAG_DP_PEER_INFO: DP peer info hang event tag
45 * @HANG_EVT_TAG_CE_INFO: Copy Engine hang event tag
Kai Liu673dfce2020-10-20 22:22:39 +080046 * @HANG_EVT_TAG_BUS_INFO: Bus hang event tag
Arun Kumar Khandavalli551fd3f2020-03-27 19:31:05 +053047 */
48enum hang_event_tag {
49 HANG_EVT_TAG_CDS,
50 HANG_EVT_TAG_OS_IF,
51 HANG_EVT_TAG_OS_IF_SCAN,
52 HANG_EVT_TAG_LEGACY_MAC,
53 HANG_EVT_TAG_WMI_EVT_HIST,
54 HANG_EVT_TAG_WMI_CMD_HIST,
55 HANG_EVT_TAG_HTC_CREDIT_HIST,
56 HANG_EVT_TAG_DP_PEER_INFO,
Kai Liu673dfce2020-10-20 22:22:39 +080057 HANG_EVT_TAG_CE_INFO,
58 HANG_EVT_TAG_BUS_INFO
Arun Kumar Khandavalli551fd3f2020-03-27 19:31:05 +053059};
60
Kai Liu673dfce2020-10-20 22:22:39 +080061#define QDF_HANG_EVENT_TLV_HDR_SIZE (sizeof(uint16_t))
Arun Kumar Khandavalli551fd3f2020-03-27 19:31:05 +053062
63#define QDF_HANG_EVT_SET_HDR(tlv_buf, tag, len) \
Arun Kumar Khandavallid5649552020-08-12 17:22:42 +053064 (((uint16_t *)(tlv_buf))[0]) = (((tag) << 8) | ((len) & 0x000000FF))
Arun Kumar Khandavalli551fd3f2020-03-27 19:31:05 +053065
66#define QDF_HANG_GET_STRUCT_TLVLEN(tlv_struct) \
Arun Kumar Khandavallid5649552020-08-12 17:22:42 +053067 ((uint16_t)(sizeof(tlv_struct) - QDF_HANG_EVENT_TLV_HDR_SIZE))
Arun Kumar Khandavalli2bfa2222020-03-24 12:51:21 +053068
69/**
70 * qdf_notifier_data - Private data for notifier data
71 * @hang_data: Data filled by notifier
72 * @offset: Current offset of the hang data buffer
73 */
74struct qdf_notifer_data {
75 uint8_t *hang_data;
76 unsigned int offset;
77};
78
79#ifdef WLAN_HANG_EVENT
80/**
81 * qdf_hang_event_register_notifier() - Hang data notifier register
82 * @nb: Notifier block
83 *
84 * This function registers notifier block for the hang data notifier chain
85 * the registered function will be invoked when the hang data notifier call
86 * is invoked.
87 *
88 * Return: QDF_STATUS
89 */
90QDF_STATUS qdf_hang_event_register_notifier(qdf_notif_block *nb);
91
92/**
93 * qdf_hang_event_unregister_notifier() - Hang data notifier unregister
94 * @nb: Notifier block
95 *
96 * This function unregisters notifier block for the hang data notifier chain.
97 *
98 * Return: QDF_STATUS
99 */
100QDF_STATUS qdf_hang_event_unregister_notifier(qdf_notif_block *nb);
101
102/**
103 * qdf_hang_event_notifier_call() - Hang data notifier register
104 * @v: state
105 * @data: Private data for this notifier chain
106 *
107 * This function when invoked will call the functions registered with this
108 * notifier chain.
109 *
110 * Return: QDF_STATUS
111 */
112QDF_STATUS qdf_hang_event_notifier_call(unsigned long v, void *data);
113#else
114static inline
115QDF_STATUS qdf_hang_event_register_notifier(qdf_notif_block *nb)
116{
117 return QDF_STATUS_SUCCESS;
118}
119
120static inline
121QDF_STATUS qdf_hang_event_unregister_notifier(qdf_notif_block *nb)
122{
123 return QDF_STATUS_SUCCESS;
124}
125
126static inline
127QDF_STATUS qdf_hang_event_notifier_call(unsigned long v, void *data)
128{
129 return QDF_STATUS_SUCCESS;
130}
131#endif
132#endif