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