1
0
mirror of https://github.com/physwizz/a155-U-u1.git synced 2024-11-19 13:27:49 +00:00
a155-U-u1/kernel-5.10/drivers/misc/mediatek/aee/aed/aed.h
2024-03-11 06:53:12 +11:00

296 lines
7.4 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2015 MediaTek Inc.
*/
#ifndef __aed_h
#define __aed_h
#include <generated/autoconf.h>
#include <linux/bug.h>
#include <linux/kallsyms.h>
#include <linux/notifier.h>
#include <linux/ptrace.h>
#include <linux/types.h>
#include <mt-plat/aee.h>
#define AE_INVALID 0xAEEFF000
#define AE_NOT_AVAILABLE 0xAEE00000
#define AE_DEFAULT 0xAEE00001
enum AE_DEFECT_ATTR {
AE_DEFECT_FATAL,
AE_DEFECT_EXCEPTION,
AE_DEFECT_WARNING,
AE_DEFECT_REMINDING,
AE_DEFECT_ATTR_END
};
enum AEE_MODE {
AEE_MODE_MTK_ENG = 1,
AEE_MODE_MTK_USER,
AEE_MODE_CUSTOMER_ENG,
AEE_MODE_CUSTOMER_USER,
AEE_MODE_NOT_INIT
};
enum AE_EXP_CLASS {
AE_KE = 0, /* Fatal Exception */
AE_HWT,
AE_REBOOT,
AE_NE,
AE_JE,
AE_SWT,
AE_EE,
AE_EXP_ERR_END,
AE_ANR, /* Error or Warning or Defect */
AE_RESMON,
AE_MODEM_WARNING,
AE_WTF,
AE_WRN_ERR_END,
AE_MANUAL, /* Manual Raise */
AE_EXP_CLASS_END,
AE_KERNEL_PROBLEM_REPORT = 1000,
AE_SYSTEM_JAVA_DEFECT,
AE_SYSTEM_NATIVE_DEFECT,
AE_MANUAL_MRDUMP_KEY,
}; /* General Program Exception Class */
enum AEE_FORCE_RED_SCREEN_VALUE {
AEE_FORCE_DISABLE_RED_SCREEN = 0,
AEE_FORCE_RED_SCREEN,
AEE_FORCE_NOT_SET
};
enum AEE_FORCE_EXP {
AEE_FORCE_EXP_DISABLE = 0,
AEE_FORCE_EXP_ENABLE,
AEE_FORCE_EXP_NOT_SET
};
enum AE_ERR {
AE_SUCC,
AE_FAIL
};
enum AE_PASS_METHOD {
AE_PASS_BY_MEM,
AE_PASS_BY_FILE,
AE_PASS_METHOD_END
};
enum AE_CMD_TYPE { AE_REQ, AE_RSP, AE_IND, AE_CMD_TYPE_END };
enum AE_CMD_ID {
AE_REQ_IDX,
AE_REQ_CLASS,
AE_REQ_TYPE,
AE_REQ_PROCESS, /* deprecated */
AE_REQ_MODULE,
AE_REQ_BACKTRACE,
/* Content of response message rule:
* if msg.arg1==AE_PASS_BY_FILE => msg->data=file path
*/
AE_REQ_DETAIL,
AE_REQ_ROOT_LOG_DIR,
AE_REQ_CURR_LOG_DIR,
AE_REQ_DFLT_LOG_DIR,
AE_REQ_MAIN_LOG_FILE_PATH,
/* fatal event raised, indicate AED to notify users */
AE_IND_FATAL_RAISED,
/* exception event raised, indicate AED to notify users */
AE_IND_EXP_RAISED,
/* warning event raised, indicate AED to notify users */
AE_IND_WRN_RAISED,
/* reminding event raised, indicate AED to notify users */
AE_IND_REM_RAISED,
/* arg = AE_ERR */
AE_IND_LOG_STATUS,
/* arg = AE_ERR */
AE_IND_LOG_CLOSE,
/* arg: dal on|off, seq: beep on|off */
AE_REQ_SWITCH_DAL_BEEP,
/* arg: db count */
AE_REQ_DB_COUNT,
/* arg: force db path yes\no */
AE_REQ_DB_FORCE_PATH,
AE_REQ_SWITCH_EXP_LEVEL,
/* query if AED is ready for service */
AE_REQ_IS_AED_READY,
/* msg->data=file path */
AE_REQ_COREDUMP,
/* set read flag msg */
AE_REQ_SET_READFLAG,
/* Init notification of client side(application layer) of Exp2Server */
AE_REQ_E2S_INIT,
AE_REQ_USERSPACEBACKTRACE = 40,
AE_REQ_USER_REG,
AE_REQ_USER_MAPS,
AE_CMD_ID_END
};
struct aee_kernel_api {
void (*kernel_reportAPI)(const enum AE_DEFECT_ATTR attr,
const int db_opt, const char *module, const char *msg);
void (*md_exception)(const char *assert_type, const int *log,
int log_size, const int *phy, int phy_size,
const char *detail, const int db_opt);
void (*md32_exception)(const char *assert_type, const int *log,
int log_size, const int *phy, int phy_size,
const char *detail, const int db_opt);
void (*combo_exception)(const char *assert_type, const int *log,
int log_size, const int *phy, int phy_size,
const char *detail, const int db_opt);
void (*scp_exception)(const char *assert_type, const int *log,
int log_size, const int *phy, int phy_size,
const char *detail, const int db_opt);
void (*common_exception)(const char *assert_type, const int *log,
int log_size, const int *phy, int phy_size,
const char *detail, const int db_opt);
};
struct aee_oops {
struct list_head list;
enum AE_DEFECT_ATTR attr;
enum AE_EXP_CLASS clazz;
char module[AEE_MODULE_NAME_LENGTH];
/* consist with struct aee_process_info */
char backtrace[AEE_BACKTRACE_LENGTH];
char *detail;
int detail_len;
struct aee_user_thread_stack userthread_stack;
struct aee_thread_reg userthread_reg;
struct aee_user_thread_maps userthread_maps;
int dump_option;
};
struct AE_Msg {
enum AE_CMD_TYPE cmdType; /* command type */
enum AE_CMD_ID cmdId; /* command Id */
union {
unsigned int seq; /* sequence number for error checking */
int pid; /* process id */
};
union {
unsigned int arg; /* simple argument */
enum AE_EXP_CLASS cls; /* exception/error/defect class */
};
union {
unsigned int len; /* dynamic length argument */
int id; /* desired id */
};
unsigned int dbOption; /* DB dump option */
};
/* Kernel IOCTL interface */
struct aee_dal_show {
char msg[1024];
};
struct aee_dal_setcolor {
unsigned int foreground;
unsigned int background;
unsigned int screencolor;
};
/* we use MAX_NR_FRAME to control max unwind layer */
#define MAX_AEE_KERNEL_BT 16
#define AEE_NR_FRAME 32
struct aee_ioctl {
__u32 pid;
__u32 detail;
__u32 size;
__u32 pad;
__u64 in;
__u64 out;
};
struct aee_thread_user_stack {
pid_t tid;
int StackLength;
/* 8k stack ,define to char only for match 64bit/32bit */
unsigned char Userspace_Stack[8192];
};
struct aee_siginfo {
pid_t tid;
int si_signo;
int si_errno;
int si_code;
uintptr_t fault_addr;
};
/* Show string on DAL layer */
#define AEEIOCTL_DAL_SHOW _IOW('p', 0x01, struct aee_dal_show)
#define AEEIOCTL_DAL_CLEAN _IO('p', 0x02) /* Clear DAL layer */
/* RGB color 0x00RRGGBB */
#define AEEIOCTL_SETCOLOR _IOW('p', 0x03, struct aee_dal_setcolor)
#define AEEIOCTL_GET_PROCESS_BT _IOW('p', 0x04, struct aee_ioctl)
#define AEEIOCTL_GET_SMP_INFO _IOR('p', 0x05, int)
#define AEEIOCTL_SET_AEE_MODE _IOR('p', 0x06, int)
#define AEEIOCTL_GET_THREAD_REG _IOW('p', 0x07, struct aee_thread_reg)
#define AEEIOCTL_CHECK_SUID_DUMPABLE _IOR('p', 0x08, int)
/* AED debug support */
#define AEEIOCTL_WDT_KICK_POWERKEY _IOR('p', 0x09, int)
#define AEEIOCTL_RT_MON_Kick _IOR('p', 0x0A, int)
#define AEEIOCTL_SET_FORECE_RED_SCREEN _IOR('p', 0x0B, int)
#define AEEIOCTL_SET_SF_STATE _IOR('p', 0x0C, long long)
#define AEEIOCTL_GET_SF_STATE _IOW('p', 0x0D, long long)
#define AEEIOCTL_SET_AEE_FORCE_EXP _IOR('p', 0x0F, int)
#define AEEIOCTL_GET_AEE_SIGINFO _IOW('p', 0x10, struct aee_siginfo)
#define AEEIOCTL_SET_HANG_FLAG _IOW('p', 0x11, int)
#define AEEIOCTL_SET_HANG_REBOOT _IO('p', 0x12)
#define AEEIOCTL_GET_THREAD_RMS _IOW('p', 0x13, struct unwind_info_rms)
#define AEEIOCTL_GET_THREAD_STACK_RAW _IOW('p', 0x14, struct unwind_info_stack)
#define AEEIOCTL_SET_NOTIFY _IOR('p', 0x15, int)
#define AED_FILE_OPS(entry) \
static const struct proc_ops proc_##entry##_fops = { \
.proc_read = proc_##entry##_read, \
.proc_write = proc_##entry##_write, \
}
#define AED_FILE_OPS_RO(entry) \
static const struct proc_ops proc_##entry##_fops = { \
.proc_read = proc_##entry##_read, \
}
#define AED_PROC_ENTRY(name, entry, mode)\
({if (!proc_create(#name, S_IFREG | mode, aed_proc_dir, \
&proc_##entry##_fops)) \
pr_info("proc_create %s failed\n", #name); })
struct proc_dir_entry;
int aed_proc_debug_init(struct proc_dir_entry *aed_proc_dir);
int aed_proc_debug_done(struct proc_dir_entry *aed_proc_dir);
void aee_rr_proc_init(struct proc_dir_entry *aed_proc_dir);
void aee_rr_proc_done(struct proc_dir_entry *aed_proc_dir);
extern struct atomic_notifier_head panic_notifier_list;
extern int aee_dump_ccci_debug_info(int md_id, void **addr, int *size);
extern int aee_get_mode(void);
void aee_register_api(struct aee_kernel_api *aee_api);
extern void slog(const char *fmt, ...);
extern int mtk_slog_init(void);
extern void mtk_slog_exit(void);
#endif