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