1*878161d5SRyder Lee /* SPDX-License-Identifier: ISC */
2*878161d5SRyder Lee /* Copyright (C) 2023 MediaTek Inc. */
3*878161d5SRyder Lee 
4*878161d5SRyder Lee #ifndef _COREDUMP_H_
5*878161d5SRyder Lee #define _COREDUMP_H_
6*878161d5SRyder Lee 
7*878161d5SRyder Lee #include "mt7996.h"
8*878161d5SRyder Lee 
9*878161d5SRyder Lee struct mt7996_coredump {
10*878161d5SRyder Lee 	char magic[16];
11*878161d5SRyder Lee 
12*878161d5SRyder Lee 	u32 len;
13*878161d5SRyder Lee 
14*878161d5SRyder Lee 	guid_t guid;
15*878161d5SRyder Lee 
16*878161d5SRyder Lee 	/* time-of-day stamp */
17*878161d5SRyder Lee 	u64 tv_sec;
18*878161d5SRyder Lee 	/* time-of-day stamp, nano-seconds */
19*878161d5SRyder Lee 	u64 tv_nsec;
20*878161d5SRyder Lee 	/* kernel version */
21*878161d5SRyder Lee 	char kernel[64];
22*878161d5SRyder Lee 	/* firmware version */
23*878161d5SRyder Lee 	char fw_ver[ETHTOOL_FWVERS_LEN];
24*878161d5SRyder Lee 
25*878161d5SRyder Lee 	u32 device_id;
26*878161d5SRyder Lee 
27*878161d5SRyder Lee 	/* exception state */
28*878161d5SRyder Lee 	char fw_state[12];
29*878161d5SRyder Lee 
30*878161d5SRyder Lee 	/* program counters */
31*878161d5SRyder Lee 	char pc_current[16];
32*878161d5SRyder Lee 	u32 pc_stack[17];
33*878161d5SRyder Lee 	/* link registers */
34*878161d5SRyder Lee 	u32 lr_stack[16];
35*878161d5SRyder Lee 
36*878161d5SRyder Lee 	/* memory content */
37*878161d5SRyder Lee 	u8 data[];
38*878161d5SRyder Lee } __packed;
39*878161d5SRyder Lee 
40*878161d5SRyder Lee struct mt7996_coredump_mem {
41*878161d5SRyder Lee 	u32 len;
42*878161d5SRyder Lee 	u8 data[];
43*878161d5SRyder Lee } __packed;
44*878161d5SRyder Lee 
45*878161d5SRyder Lee struct mt7996_mem_hdr {
46*878161d5SRyder Lee 	u32 start;
47*878161d5SRyder Lee 	u32 len;
48*878161d5SRyder Lee 	u8 data[];
49*878161d5SRyder Lee };
50*878161d5SRyder Lee 
51*878161d5SRyder Lee struct mt7996_mem_region {
52*878161d5SRyder Lee 	u32 start;
53*878161d5SRyder Lee 	size_t len;
54*878161d5SRyder Lee 
55*878161d5SRyder Lee 	const char *name;
56*878161d5SRyder Lee };
57*878161d5SRyder Lee 
58*878161d5SRyder Lee #ifdef CONFIG_DEV_COREDUMP
59*878161d5SRyder Lee 
60*878161d5SRyder Lee const struct mt7996_mem_region *
61*878161d5SRyder Lee mt7996_coredump_get_mem_layout(struct mt7996_dev *dev, u32 *num);
62*878161d5SRyder Lee struct mt7996_crash_data *mt7996_coredump_new(struct mt7996_dev *dev);
63*878161d5SRyder Lee int mt7996_coredump_submit(struct mt7996_dev *dev);
64*878161d5SRyder Lee int mt7996_coredump_register(struct mt7996_dev *dev);
65*878161d5SRyder Lee void mt7996_coredump_unregister(struct mt7996_dev *dev);
66*878161d5SRyder Lee 
67*878161d5SRyder Lee #else /* CONFIG_DEV_COREDUMP */
68*878161d5SRyder Lee 
69*878161d5SRyder Lee static inline const struct mt7996_mem_region *
mt7996_coredump_get_mem_layout(struct mt7996_dev * dev,u32 * num)70*878161d5SRyder Lee mt7996_coredump_get_mem_layout(struct mt7996_dev *dev, u32 *num)
71*878161d5SRyder Lee {
72*878161d5SRyder Lee 	return NULL;
73*878161d5SRyder Lee }
74*878161d5SRyder Lee 
mt7996_coredump_submit(struct mt7996_dev * dev)75*878161d5SRyder Lee static inline int mt7996_coredump_submit(struct mt7996_dev *dev)
76*878161d5SRyder Lee {
77*878161d5SRyder Lee 	return 0;
78*878161d5SRyder Lee }
79*878161d5SRyder Lee 
80*878161d5SRyder Lee static inline struct
mt7996_coredump_new(struct mt7996_dev * dev)81*878161d5SRyder Lee mt7996_crash_data *mt7996_coredump_new(struct mt7996_dev *dev)
82*878161d5SRyder Lee {
83*878161d5SRyder Lee 	return NULL;
84*878161d5SRyder Lee }
85*878161d5SRyder Lee 
mt7996_coredump_register(struct mt7996_dev * dev)86*878161d5SRyder Lee static inline int mt7996_coredump_register(struct mt7996_dev *dev)
87*878161d5SRyder Lee {
88*878161d5SRyder Lee 	return 0;
89*878161d5SRyder Lee }
90*878161d5SRyder Lee 
mt7996_coredump_unregister(struct mt7996_dev * dev)91*878161d5SRyder Lee static inline void mt7996_coredump_unregister(struct mt7996_dev *dev)
92*878161d5SRyder Lee {
93*878161d5SRyder Lee }
94*878161d5SRyder Lee 
95*878161d5SRyder Lee #endif /* CONFIG_DEV_COREDUMP */
96*878161d5SRyder Lee 
97*878161d5SRyder Lee #endif /* _COREDUMP_H_ */
98