mrdump_private.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2016. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. */
  31. #if !defined(__MRDUMP_PRIVATE_H__)
  32. #define __MRDUMP_PRIVATE_H__
  33. #include <stdint.h>
  34. #include <platform/mt_typedefs.h>
  35. #include <platform/mt_reg_base.h>
  36. #include <dev/mrdump.h>
  37. #ifdef MTK_MRDUMP_SRAM_CB
  38. #include <platform/mtk_mrdump.h>
  39. #endif
  40. /* for LPAE (MTK_3LEVEL_PAGETABLE) */
  41. #include <compiler.h>
  42. #include <arch/arm/mmu.h>
  43. #define MRDUMP_GO_DUMP "MRDUMP08"
  44. /*
  45. * for ext4 and f2fs, InfoLBA (header), version 2
  46. * v1: support allocate size > 4G
  47. * v2: support timestamp
  48. */
  49. #define MRDUMP_PAF_VERSION 0x0002
  50. #define MRDUMP_PAF_INFO_LBA 4
  51. #define MRDUMP_PAF_ADDR_LBA 8
  52. #define MRDUMP_PAF_ALLOCSIZE 12
  53. #define MRDUMP_PAF_COREDUMPSIZE 20
  54. #define MRDUMP_PAF_TIMESTAMP 28
  55. #define MRDUMP_PAF_CRC32 36
  56. #define MRDUMP_LBA_DATAONLY MRDUMP_PAF_CRC32
  57. #define MRDUMP_PAF_TOTAL_SIZE 40
  58. #define KZIP_ENTRY_MAX 30
  59. #define LOCALHEADERMAGIC 0x04034b50UL
  60. #define CENTRALHEADERMAGIC 0x02014b50UL
  61. #define ZIP64ENDOFCENTRALDIRMAGIC 0x06064b50UL
  62. #define ZIP64ENDOFCENTRALDIRLOCATORMAGIC 0x07064b50UL
  63. #define ENDOFCENTRALDIRMAGIC 0x06054b50UL
  64. #define MRDUMP_CORE_HEADER_SIZE 2 * 4096
  65. struct kzip_entry {
  66. char *filename;
  67. int level;
  68. uint64_t localheader_offset;
  69. uint64_t comp_size;
  70. uint64_t uncomp_size;
  71. uint32_t crc32;
  72. };
  73. struct kzip_file {
  74. uint64_t reported_size;
  75. uint64_t wdk_kick_size;
  76. uint64_t current_size;
  77. uint32_t entries_num;
  78. struct kzip_entry zentries[KZIP_ENTRY_MAX];
  79. void *handle;
  80. int (*write_cb)(void *handle, void *buf, int size);
  81. };
  82. #define MEM_NO_MAP 0
  83. #define MEM_DO_MAP 1
  84. #define EXPDB_FILE 2
  85. struct kzip_addlist {
  86. uint64_t address;
  87. uint64_t size;
  88. int type;
  89. };
  90. #define MRDUMP_CPU_MAX 12
  91. #define MRDUMP_ENABLE_COOKIE 0x590d2ba3
  92. typedef uint32_t arm32_gregset_t[18];
  93. typedef uint64_t arm64_gregset_t[34];
  94. struct arm32_ctrl_regs {
  95. uint32_t sctlr;
  96. uint64_t ttbcr;
  97. uint64_t ttbr0;
  98. uint64_t ttbr1;
  99. };
  100. struct arm64_ctrl_regs {
  101. uint32_t sctlr_el1;
  102. uint32_t sctlr_el2;
  103. uint32_t sctlr_el3;
  104. uint64_t tcr_el1;
  105. uint64_t tcr_el2;
  106. uint64_t tcr_el3;
  107. uint64_t ttbr0_el1;
  108. uint64_t ttbr0_el2;
  109. uint64_t ttbr0_el3;
  110. uint64_t ttbr1_el1;
  111. uint64_t sp_el[4];
  112. };
  113. struct mrdump_crash_record {
  114. int reboot_mode;
  115. char msg[128];
  116. uint32_t fault_cpu;
  117. union {
  118. arm32_gregset_t arm32_regs;
  119. arm64_gregset_t arm64_regs;
  120. } cpu_regs[MRDUMP_CPU_MAX];
  121. union {
  122. struct arm32_ctrl_regs arm32_creg;
  123. struct arm64_ctrl_regs arm64_creg;
  124. } cpu_creg[MRDUMP_CPU_MAX];
  125. };
  126. struct mrdump_ksyms_param {
  127. char tag[4];
  128. uint32_t flag;
  129. uint32_t crc;
  130. uint64_t start_addr;
  131. uint32_t size;
  132. uint32_t addresses_off;
  133. uint32_t num_syms_off;
  134. uint32_t names_off;
  135. uint32_t markers_off;
  136. uint32_t token_table_off;
  137. uint32_t token_index_off;
  138. } __attribute__((packed));
  139. struct mrdump_machdesc {
  140. uint32_t nr_cpus;
  141. uint64_t page_offset;
  142. uint64_t high_memory;
  143. uint64_t kimage_vaddr;
  144. uint64_t dram_start;
  145. uint64_t dram_end;
  146. uint64_t kimage_stext;
  147. uint64_t kimage_etext;
  148. uint64_t kimage_stext_real;
  149. uint64_t kimage_voffset;
  150. uint64_t kimage_sdata;
  151. uint64_t kimage_edata;
  152. uint64_t vmalloc_start;
  153. uint64_t vmalloc_end;
  154. uint64_t modules_start;
  155. uint64_t modules_end;
  156. uint64_t phys_offset;
  157. uint64_t master_page_table;
  158. uint64_t memmap;
  159. uint64_t dfdmem_pa; // Reserved for DFD 3.0+
  160. struct mrdump_ksyms_param kallsyms;
  161. };
  162. struct __attribute__((__packed__)) mrdump_cblock_result {
  163. char sig[9];
  164. char status[128];
  165. char log_buf[2048];
  166. };
  167. struct mrdump_control_block {
  168. char sig[8];
  169. struct mrdump_machdesc machdesc;
  170. uint32_t machdesc_crc;
  171. uint32_t enabled;
  172. uint32_t output_fs_lbaooo;
  173. struct mrdump_crash_record crash_record;
  174. };
  175. struct kzip_file *kzip_open(void *handle, int (*write_cb)(void *handle, void *p, int size));
  176. bool kzip_add_file(struct kzip_file *zf, const struct kzip_addlist *addlist, const char *zfilename);
  177. bool kzip_close(struct kzip_file *zf);
  178. struct mrdump_dev {
  179. const char *name;
  180. void *handle;
  181. bool (*read)(struct mrdump_dev *dev, uint64_t sector_addr, uint8_t *pdBuf, int32_t blockLen);
  182. bool (*write)(struct mrdump_dev *dev, uint64_t sector_addr, uint8_t *pdBuf, int32_t blockLen);
  183. uint64_t (*get_size)(struct mrdump_dev *dev);
  184. };
  185. int mrdump_null_output(const struct mrdump_control_block *kparams, const struct kzip_addlist *memlist);
  186. int mrdump_ext4_output(const struct mrdump_control_block *mrdump_cb, const struct kzip_addlist *memlist, struct mrdump_dev *mrdump_dev);
  187. int mrdump_partition_output(const struct mrdump_control_block *mrdump_cb, const struct kzip_addlist *memlist, struct mrdump_dev *mrdump_dev);
  188. int mrdump_usb_output(const struct mrdump_control_block *mrdump_cb, const struct kzip_addlist *memlist, const struct kzip_addlist *memlist_cmm);
  189. void mrdump_core_header_init(const struct mrdump_control_block *kparams, const struct kzip_addlist *memlist);
  190. struct kzip_addlist *mrdump_memlist_fill_cmm(struct mrdump_control_block *mrdump_cblock);
  191. void mrdump_memlist_free_cmm(struct kzip_addlist *memlist);
  192. struct mrdump_dev *mrdump_dev_blkpart(const char *partname);
  193. void mrdump_partition_resize(void);
  194. void mrdump_read_expdb(void *data, int len, u64 offset_src);
  195. extern u64 physical_memory_size(void);
  196. extern void mtk_wdt_disable(void);
  197. extern void mtk_wdt_init(void);
  198. int aee_mrdump_get_info(struct mrdump_control_block *mcb);
  199. int mrdump_get_default_output_device(void);
  200. #ifdef MTK_3LEVEL_PAGETABLE
  201. vaddr_t scratch_addr(void);
  202. #endif
  203. #endif