1/* SPDX-License-Identifier: ISC */ 2/* Copyright (C) 2022 MediaTek Inc. */ 3 4#ifndef _COREDUMP_H_ 5#define _COREDUMP_H_ 6 7#if defined(__FreeBSD__) 8#include <linux/uuid.h> 9#endif 10#include "mt7915.h" 11 12struct trace { 13 u32 id; 14 u32 timestamp; 15}; 16 17struct mt7915_coredump { 18 char magic[16]; 19 20 u32 len; 21 22 guid_t guid; 23 24 /* time-of-day stamp */ 25 u64 tv_sec; 26 /* time-of-day stamp, nano-seconds */ 27 u64 tv_nsec; 28 /* kernel version */ 29 char kernel[64]; 30 /* firmware version */ 31 char fw_ver[ETHTOOL_FWVERS_LEN]; 32 33 u32 device_id; 34 35 /* exception state */ 36 char fw_state[12]; 37 38 u32 last_msg_id; 39 u32 eint_info_idx; 40 u32 irq_info_idx; 41 u32 sched_info_idx; 42 43 /* schedule info */ 44 char trace_sched[32]; 45 struct { 46 struct trace t; 47 u32 pc; 48 } sched[60]; 49 50 /* irq info */ 51 char trace_irq[32]; 52 struct trace irq[60]; 53 54 /* task queue status */ 55 char task_qid[32]; 56 struct { 57 u32 read; 58 u32 write; 59 } taskq[2]; 60 61 /* task stack info */ 62 char task_info[32]; 63 struct { 64 u32 start; 65 u32 end; 66 u32 size; 67 } taski[2]; 68 69 /* firmware context */ 70 char fw_context[24]; 71 struct { 72 u32 idx; 73 u32 handler; 74 } context; 75 76 /* link registers calltrace */ 77 u32 call_stack[16]; 78 79 /* memory content */ 80 u8 data[]; 81} __packed; 82 83struct mt7915_coredump_mem { 84 u32 len; 85 u8 data[]; 86} __packed; 87 88struct mt7915_mem_hdr { 89 u32 start; 90 u32 len; 91 u8 data[]; 92}; 93 94struct mt7915_mem_region { 95 u32 start; 96 size_t len; 97 98 const char *name; 99}; 100 101#ifdef CONFIG_DEV_COREDUMP 102 103const struct mt7915_mem_region * 104mt7915_coredump_get_mem_layout(struct mt7915_dev *dev, u32 *num); 105struct mt7915_crash_data *mt7915_coredump_new(struct mt7915_dev *dev); 106int mt7915_coredump_submit(struct mt7915_dev *dev); 107int mt7915_coredump_register(struct mt7915_dev *dev); 108void mt7915_coredump_unregister(struct mt7915_dev *dev); 109 110#else /* CONFIG_DEV_COREDUMP */ 111 112static inline const struct mt7915_mem_region * 113mt7915_coredump_get_mem_layout(struct mt7915_dev *dev, u32 *num) 114{ 115 return NULL; 116} 117 118static inline int mt7915_coredump_submit(struct mt7915_dev *dev) 119{ 120 return 0; 121} 122 123static inline struct mt7915_crash_data *mt7915_coredump_new(struct mt7915_dev *dev) 124{ 125 return NULL; 126} 127 128static inline int mt7915_coredump_register(struct mt7915_dev *dev) 129{ 130 return 0; 131} 132 133static inline void mt7915_coredump_unregister(struct mt7915_dev *dev) 134{ 135} 136 137#endif /* CONFIG_DEV_COREDUMP */ 138 139#endif /* _COREDUMP_H_ */ 140