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