Merge tag 'v3.10.55' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / linux / aee.h
CommitLineData
6fa3eb70
S
1#if !defined(__AEE_H__)
2#define __AEE_H__
3
4#include <linux/kernel.h>
5#include <linux/sched.h>
6#include <linux/mtk_ram_console.h>
7
8#define AEE_MODULE_NAME_LENGTH 64
9#define AEE_PROCESS_NAME_LENGTH 256
10#define AEE_BACKTRACE_LENGTH 3072
11
12typedef enum {
13 AE_DEFECT_FATAL,
14 AE_DEFECT_EXCEPTION,
15 AE_DEFECT_WARNING,
16 AE_DEFECT_REMINDING,
17 AE_DEFECT_ATTR_END
18} AE_DEFECT_ATTR;
19
20typedef enum {
21 AE_KE = 0, /* Fatal Exception */
22 AE_NE,
23 AE_JE,
24 AE_SWT,
25 AE_EE,
26 AE_EXP_ERR_END,
27 AE_ANR, /* Error or Warning or Defect */
28 AE_RESMON,
29 AE_MODEM_WARNING,
30 AE_WRN_ERR_END,
31 AE_MANUAL, /* Manual Raise */
32 AE_EXP_CLASS_END,
33
34 AE_KERNEL_PROBLEM_REPORT = 1000,
35 AE_SYSTEM_JAVA_DEFECT,
36 AE_SYSTEM_NATIVE_DEFECT,
37} AE_EXP_CLASS; /* General Program Exception Class */
38
39typedef enum {
40 AEE_REBOOT_MODE_NORMAL = 0,
41 AEE_REBOOT_MODE_KERNEL_OOPS,
42 AEE_REBOOT_MODE_KERNEL_PANIC,
43 AEE_REBOOT_MODE_NESTED_EXCEPTION,
44 AEE_REBOOT_MODE_WDT,
45 AEE_REBOOT_MODE_MANUAL_KDUMP,
46} AEE_REBOOT_MODE;
47
48#define AEE_SZ_SYMBOL_L 140
49#define AEE_SZ_SYMBOL_S 80
50struct aee_bt_frame {
51 __u64 pc;
52 __u64 lr;
53 __u32 pad[5];
54 char pc_symbol[AEE_SZ_SYMBOL_S]; /* Now we use different symbol length for PC &LR */
55 char lr_symbol[AEE_SZ_SYMBOL_L];
56};
57
58/* aee_process_info struct should strictly small than ipanic_buffer, now 4KB */
59struct aee_process_info {
60 char process_path[AEE_PROCESS_NAME_LENGTH];
61 char backtrace[AEE_BACKTRACE_LENGTH];
62 struct aee_bt_frame ke_frame;
63};
64
65struct aee_process_bt {
66 __u32 pid;
67 __u32 nr_entries;
68 struct aee_bt_frame *entries;
69};
70
71
72struct aee_thread_reg {
73 pid_t tid;
74 struct pt_regs regs;
75};
76
77struct aee_user_thread_stack {
78 pid_t tid;
79 int StackLength;
80 unsigned char *Userthread_Stack; //8k stack ,define to char only for match 64bit/32bit
81};
82
83struct aee_user_thread_maps {
84 pid_t tid;
85 int Userthread_mapsLength;
86 unsigned char *Userthread_maps; //8k stack ,define to char only for match 64bit/32bit
87};
88
89
90
91struct aee_oops {
92 struct list_head list;
93 AE_DEFECT_ATTR attr;
94 AE_EXP_CLASS clazz;
95
96 char module[AEE_MODULE_NAME_LENGTH];
97 /* consist with struct aee_process_info */
98 char process_path[AEE_PROCESS_NAME_LENGTH];
99 char backtrace[AEE_BACKTRACE_LENGTH];
100 struct aee_bt_frame ke_frame;
101
102 char *detail;
103 int detail_len;
104
105 char *console;
106 int console_len;
107
108 char *android_main;
109 int android_main_len;
110 char *android_radio;
111 int android_radio_len;
112 char *android_system;
113 int android_system_len;
114
115 char *userspace_info;
116 int userspace_info_len;
117
118 char *mmprofile;
119 int mmprofile_len;
120
121 char *mini_rdump;
122 int mini_rdump_len;
123
124
125 struct aee_user_thread_stack userthread_stack;
126 struct aee_thread_reg userthread_reg;
127 struct aee_user_thread_maps userthread_maps;
128
129 int dump_option;
130};
131
132struct aee_kernel_api {
133 void (*kernel_reportAPI) (const AE_DEFECT_ATTR attr, const int db_opt, const char *module,
134 const char *msg);
135 void (*md_exception) (const char *assert_type, const int *log, int log_size, const int *phy,
136 int phy_size, const char *detail, const int db_opt);
137 void (*md32_exception) (const char *assert_type, const int *log, int log_size,
138 const int *phy, int phy_size, const char *detail, const int db_opt);
139 void (*combo_exception) (const char *assert_type, const int *log, int log_size,
140 const int *phy, int phy_size, const char *detail,
141 const int db_opt);
142};
143
144void aee_sram_printk(const char *fmt, ...);
145int aee_nested_printf(const char *fmt, ...);
146void aee_wdt_irq_info(void);
147void aee_wdt_fiq_info(void *arg, void *regs, void *svc_sp);
148void aee_trigger_kdb(void);
149struct aee_oops *aee_oops_create(AE_DEFECT_ATTR attr, AE_EXP_CLASS clazz, const char *module);
150void aee_oops_set_backtrace(struct aee_oops *oops, const char *backtrace);
151void aee_oops_set_process_path(struct aee_oops *oops, const char *process_path);
152void aee_oops_free(struct aee_oops *oops);
153/* powerkey press,modules use bits */
154#define AE_WDT_Powerkey_DEVICE_PATH "/dev/kick_powerkey"
155#define WDT_SETBY_DEFAULT (0)
156#define WDT_SETBY_Backlight (1<<0)
157#define WDT_SETBY_Display (1<<1)
158#define WDT_SETBY_SF (1<<2)
159#define WDT_SETBY_PM (1<<3)
160#define WDT_SETBY_WMS_DISABLE_PWK_MONITOR (0xAEEAEE00)
161#define WDT_SETBY_WMS_ENABLE_PWK_MONITOR (0xAEEAEE01)
162#define WDT_PWK_HANG_FORCE_HWT (0xAEE0FFFF)
163
164/* QHQ RT Monitor */
165#define AEEIOCTL_RT_MON_Kick _IOR('p', 0x0A, int)
166#define AE_WDT_DEVICE_PATH "/dev/RT_Monitor"
167/* QHQ RT Monitor end */
168
169/* DB dump option bits, set relative bit to 1 to include related file in db */
170#define DB_OPT_DEFAULT (0)
171#define DB_OPT_FTRACE (1<<0)
172#define DB_OPT_STORAGE_LOG (1<<1)
173#define DB_OPT_NE_JBT_TRACES (1<<2)
174#define DB_OPT_SWT_JBT_TRACES (1<<3)
175#define DB_OPT_VM_TRACES (1<<4)
176#define DB_OPT_DUMPSYS_ACTIVITY (1<<5)
177#define DB_OPT_DUMPSYS_WINDOW (1<<6)
178#define DB_OPT_DUMPSYS_GFXINFO (1<<7)
179#define DB_OPT_DUMPSYS_SURFACEFLINGER (1<<8)
180#define DB_OPT_DISPLAY_HANG_DUMP (1<<9)
181#define DB_OPT_LOW_MEMORY_KILLER (1<<10)
182#define DB_OPT_PROC_MEM (1<<11)
183#define DB_OPT_FS_IO_LOG (1<<12)
184#define DB_OPT_PROCESS_COREDUMP (1<<13)
185#define DB_OPT_VM_HPROF (1<<14)
186#define DB_OPT_PROCMEM (1<<15)
187#define DB_OPT_DUMPSYS_INPUT (1<<16)
188#define DB_OPT_MMPROFILE_BUFFER (1<<17)
189#define DB_OPT_BINDER_INFO (1<<18)
190#define DB_OPT_WCN_ISSUE_INFO (1<<19)
191#define DB_OPT_DUMMY_DUMP (1<<20)
192#define DB_OPT_PID_MEMORY_INFO (1<<21)
193#define DB_OPT_VM_OOME_HPROF (1<<22)
194#define DB_OPT_PID_SMAPS (1<<23)
195#define DB_OPT_PROC_CMDQ_INFO (1<<24)
196#define DB_OPT_PROC_USKTRK (1<<25)
197#define DB_OPT_SF_RTT_DUMP (1<<26)
198#define DB_OPT_PAGETYPE_INFO (1<<27)
199#define DB_OPT_DUMPSYS_PROCSTATS (1<<28)
200#define DB_OPT_DUMP_DISPLAY (1<<29)
201#define DB_OPT_NATIVE_BACKTRACE (1<<30)
202#define DB_OPT_AARCH64 (1<<31)
203
204#define aee_kernel_exception(module, msg...) \
205 aee_kernel_exception_api(__FILE__, __LINE__, DB_OPT_DEFAULT, module, msg)
206#define aee_kernel_warning(module, msg...) \
207 aee_kernel_warning_api(__FILE__, __LINE__, DB_OPT_DEFAULT, module, msg)
208#define aee_kernel_reminding(module, msg...) \
209 aee_kernel_reminding_api(__FILE__, __LINE__, DB_OPT_DEFAULT, module, msg)
210#define aee_kernel_dal_show(msg) \
211 aee_kernel_dal_api(__FILE__, __LINE__, msg)
212
213#define aed_md_exception(log, log_size, phy, phy_size, detail) \
214 aed_md_exception_api(log, log_size, phy, phy_size, detail, DB_OPT_DEFAULT)
215#define aed_md32_exception(log, log_size, phy, phy_size, detail) \
216 aed_md32_exception_api(log, log_size, phy, phy_size, detail, DB_OPT_DEFAULT)
217#define aed_combo_exception(log, log_size, phy, phy_size, detail) \
218 aed_combo_exception_api(log, log_size, phy, phy_size, detail, DB_OPT_DEFAULT)
219
220void aee_kernel_exception_api(const char *file, const int line, const int db_opt,
221 const char *module, const char *msg, ...);
222void aee_kernel_warning_api(const char *file, const int line, const int db_opt, const char *module,
223 const char *msg, ...);
224void aee_kernel_reminding_api(const char *file, const int line, const int db_opt,
225 const char *module, const char *msg, ...);
226void aee_kernel_dal_api(const char *file, const int line, const char *msg);
227
228void aed_md_exception_api(const int *log, int log_size, const int *phy, int phy_size,
229 const char *detail, const int db_opt);
230void aed_md32_exception_api(const int *log, int log_size, const int *phy, int phy_size,
231 const char *detail, const int db_opt);
232void aed_combo_exception_api(const int *log, int log_size, const int *phy, int phy_size,
233 const char *detail, const int db_opt);
234
235void aee_kernel_wdt_kick_Powkey_api(const char *module, int msg);
236int aee_kernel_wdt_kick_api(int kinterval);
237void aee_powerkey_notify_press(unsigned long pressed);
238int aee_kernel_Powerkey_is_press(void);
239
240void ipanic_recursive_ke(struct pt_regs *regs, struct pt_regs *excp_regs, int cpu);
241
242/* QHQ RT Monitor */
243void aee_kernel_RT_Monitor_api(int lParam);
244/* QHQ RT Monitor end */
245void mt_fiq_printf(const char *fmt, ...);
246void aee_register_api(struct aee_kernel_api *aee_api);
247int aee_in_nested_panic(void);
248void aee_stop_nested_panic(struct pt_regs *regs);
249void aee_wdt_dump_info(void);
250void aee_wdt_printf(const char *fmt, ...);
251
252#if defined(CONFIG_MTK_AEE_DRAM_CONSOLE)
253void aee_dram_console_reserve_memory(void);
254#else
255static inline void aee_dram_console_reserve_memory(void)
256{
257}
258#endif
259
260extern void *aee_excp_regs; /* To store latest exception, in case of stack corruption */
261#endif /* __AEE_H__ */