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 Leemt7996_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 Leestatic 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 Leemt7996_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 Leestatic 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 Leestatic 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