1 #if !defined(__MRDUMP_H__)
6 #include <linux/elfcore.h>
7 #include <asm/ptrace.h>
12 #define reg_lr regs[30]
14 #define reg_fp regs[29]
23 #define MRDUMP_CPU_MAX 16
25 #define MRDUMP_DEV_NULL 0
26 #define MRDUMP_DEV_SDCARD 1
27 #define MRDUMP_DEV_EMMC 2
29 #define MRDUMP_FS_NULL 0
30 #define MRDUMP_FS_VFAT 1
31 #define MRDUMP_FS_EXT4 2
33 typedef uint32_t arm32_gregset_t
[18];
34 typedef uint64_t aarch64_gregset_t
[34];
36 struct mrdump_crash_record
{
45 arm32_gregset_t arm32_cpu_regs
[MRDUMP_CPU_MAX
];
46 aarch64_gregset_t aarch64_cpu_regs
[MRDUMP_CPU_MAX
];
50 struct mrdump_machdesc
{
53 uint32_t output_device
;
60 uint64_t vmalloc_start
;
63 uint64_t modules_start
;
67 uint64_t master_page_table
;
69 uint32_t output_fstype
;
70 uint32_t output_lbaooo
;
73 struct mrdump_cblock_result
{
80 struct mrdump_control_block
{
83 struct mrdump_machdesc machdesc
;
84 struct mrdump_crash_record crash_record
;
85 struct mrdump_cblock_result result
;
88 struct mrdump_platform
{
89 void (*hw_enable
) (bool enabled
);
90 void (*reboot
) (void);
93 /* NOTE!! any change to this struct should be compatible in aed */
94 struct mrdump_mini_reg_desc
{
95 unsigned long reg
; /* register value */
96 unsigned long kstart
; /* start kernel addr of memory dump */
97 unsigned long kend
; /* end kernel addr of memory dump */
98 unsigned long pos
; /* next pos to dump */
99 int valid
; /* 1: valid regiser, 0: invalid regiser */
100 int pad
; /* reserved */
101 loff_t offset
; /* offset in buffer */
104 /* it should always be smaller than MRDUMP_MINI_HEADER_SIZE */
105 struct mrdump_mini_header
{
106 struct mrdump_mini_reg_desc reg_desc
[ELF_NGREG
];
109 #define MRDUMP_MINI_NR_SECTION 40
110 #define MRDUMP_MINI_SECTION_SIZE (32 * 1024)
111 #define NT_IPANIC_MISC 4095
112 #define MRDUMP_MINI_NR_MISC 20
114 struct mrdump_mini_elf_misc
{
121 #define NOTE_NAME_SHORT 12
122 #define NOTE_NAME_LONG 20
124 struct mrdump_mini_elf_psinfo
{
125 struct elf_note note
;
126 char name
[NOTE_NAME_SHORT
];
127 struct elf_prpsinfo data
;
130 struct mrdump_mini_elf_prstatus
{
131 struct elf_note note
;
132 char name
[NOTE_NAME_SHORT
];
133 struct elf_prstatus data
;
136 struct mrdump_mini_elf_note
{
137 struct elf_note note
;
138 char name
[NOTE_NAME_LONG
];
139 struct mrdump_mini_elf_misc data
;
142 struct mrdump_mini_elf_header
{
144 struct elf_phdr phdrs
[MRDUMP_MINI_NR_SECTION
];
145 struct mrdump_mini_elf_psinfo psinfo
;
146 struct mrdump_mini_elf_prstatus prstatus
[NR_CPUS
+ 1];
147 struct mrdump_mini_elf_note misc
[MRDUMP_MINI_NR_MISC
];
150 #define MRDUMP_MINI_HEADER_SIZE ALIGN(sizeof(struct mrdump_mini_elf_header), PAGE_SIZE)
151 #define MRDUMP_MINI_DATA_SIZE (MRDUMP_MINI_NR_SECTION * MRDUMP_MINI_SECTION_SIZE)
152 #define MRDUMP_MINI_BUF_SIZE (MRDUMP_MINI_HEADER_SIZE + MRDUMP_MINI_DATA_SIZE)
154 #ifdef CONFIG_MTK_RAM_CONSOLE_DRAM_ADDR
155 #define MRDUMP_MINI_BUF_PADDR (CONFIG_MTK_RAM_CONSOLE_DRAM_ADDR + 0xf0000)
157 #define MRDUMP_MINI_BUF_PADDR 0
160 #if defined(CONFIG_MTK_AEE_MRDUMP)
161 void mrdump_reserve_memory(void);
163 void mrdump_platform_init(struct mrdump_control_block
*cblock
,
164 const struct mrdump_platform
*plafrom
);
166 void __mrdump_create_oops_dump(AEE_REBOOT_MODE reboot_mode
, struct pt_regs
*regs
, const char *msg
,
169 void aee_kdump_reboot(AEE_REBOOT_MODE
, const char *msg
, ...);
172 static inline void mrdump_reserve_memory(void)
176 static inline void mrdump_platform_init(struct mrdump_control_block
*cblock
,
177 void (*hw_enable
) (bool enabled
))
181 static inline void __mrdump_create_oops_dump(AEE_REBOOT_MODE reboot_mode
, struct pt_regs
*regs
,
182 const char *msg
, ...)
186 static inline void aee_kdump_reboot(AEE_REBOOT_MODE reboot_mode
, const char *msg
, ...)
192 typedef int (*mrdump_write
)(void *buf
, int off
, int len
, int encrypt
);
193 #if defined(CONFIG_MTK_AEE_IPANIC)
194 int mrdump_mini_create_oops_dump(AEE_REBOOT_MODE reboot_mode
, mrdump_write write
,
195 loff_t sd_offset
, const char *msg
, va_list ap
);
196 void mrdump_mini_reserve_memory(void);
198 static inline int mrdump_mini_create_oops_dump(AEE_REBOOT_MODE reboot_mode
, mrdump_write write
,
199 loff_t sd_offset
, const char *msg
, va_list ap
)
204 static inline void mrdump_mini_reserve_memory(void)