bootinfo.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*
  2. * This file is subject to the terms and conditions of the GNU General Public
  3. * License. See the file COPYING in the main directory of this archive
  4. * for more details.
  5. *
  6. * Copyright (C) 1995, 1996, 2003 by Ralf Baechle
  7. * Copyright (C) 1995, 1996 Andreas Busse
  8. * Copyright (C) 1995, 1996 Stoned Elipot
  9. * Copyright (C) 1995, 1996 Paul M. Antoine.
  10. * Copyright (C) 2009 Zhang Le
  11. */
  12. #ifndef _ASM_BOOTINFO_H
  13. #define _ASM_BOOTINFO_H
  14. #include <linux/types.h>
  15. #include <asm/setup.h>
  16. /*
  17. * The MACH_ IDs are sort of equivalent to PCI product IDs. As such the
  18. * numbers do not necessarily reflect technical relations or similarities
  19. * between systems.
  20. */
  21. /*
  22. * Valid machtype values for group unknown
  23. */
  24. #define MACH_UNKNOWN 0 /* whatever... */
  25. /*
  26. * Valid machtype for group DEC
  27. */
  28. #define MACH_DSUNKNOWN 0
  29. #define MACH_DS23100 1 /* DECstation 2100 or 3100 */
  30. #define MACH_DS5100 2 /* DECsystem 5100 */
  31. #define MACH_DS5000_200 3 /* DECstation 5000/200 */
  32. #define MACH_DS5000_1XX 4 /* DECstation 5000/120, 125, 133, 150 */
  33. #define MACH_DS5000_XX 5 /* DECstation 5000/20, 25, 33, 50 */
  34. #define MACH_DS5000_2X0 6 /* DECstation 5000/240, 260 */
  35. #define MACH_DS5400 7 /* DECsystem 5400 */
  36. #define MACH_DS5500 8 /* DECsystem 5500 */
  37. #define MACH_DS5800 9 /* DECsystem 5800 */
  38. #define MACH_DS5900 10 /* DECsystem 5900 */
  39. /*
  40. * Valid machtype for group Mikrotik
  41. */
  42. #define MACH_MIKROTIK_RB532 0 /* Mikrotik RouterBoard 532 */
  43. #define MACH_MIKROTIK_RB532A 1 /* Mikrotik RouterBoard 532A */
  44. /*
  45. * Valid machtype for Loongson family
  46. */
  47. enum loongson2ef_machine_type {
  48. MACH_LOONGSON_UNKNOWN,
  49. MACH_LEMOTE_FL2E,
  50. MACH_LEMOTE_FL2F,
  51. MACH_LEMOTE_ML2F7,
  52. MACH_LEMOTE_YL2F89,
  53. MACH_DEXXON_GDIUM2F10,
  54. MACH_LEMOTE_NAS,
  55. MACH_LEMOTE_LL2F,
  56. MACH_LOONGSON_END
  57. };
  58. /*
  59. * Valid machtype for group INGENIC
  60. */
  61. enum ingenic_machine_type {
  62. MACH_INGENIC_UNKNOWN,
  63. MACH_INGENIC_JZ4720,
  64. MACH_INGENIC_JZ4725,
  65. MACH_INGENIC_JZ4725B,
  66. MACH_INGENIC_JZ4730,
  67. MACH_INGENIC_JZ4740,
  68. MACH_INGENIC_JZ4750,
  69. MACH_INGENIC_JZ4755,
  70. MACH_INGENIC_JZ4760,
  71. MACH_INGENIC_JZ4760B,
  72. MACH_INGENIC_JZ4770,
  73. MACH_INGENIC_JZ4775,
  74. MACH_INGENIC_JZ4780,
  75. MACH_INGENIC_X1000,
  76. MACH_INGENIC_X1000E,
  77. MACH_INGENIC_X1830,
  78. MACH_INGENIC_X2000,
  79. MACH_INGENIC_X2000E,
  80. MACH_INGENIC_X2000H,
  81. MACH_INGENIC_X2100,
  82. };
  83. extern char *system_type;
  84. const char *get_system_type(void);
  85. extern unsigned long mips_machtype;
  86. extern void detect_memory_region(phys_addr_t start, phys_addr_t sz_min, phys_addr_t sz_max);
  87. extern void prom_init(void);
  88. extern void prom_free_prom_memory(void);
  89. extern void prom_cleanup(void);
  90. extern void free_init_pages(const char *what,
  91. unsigned long begin, unsigned long end);
  92. extern void (*free_init_pages_eva)(void *begin, void *end);
  93. /*
  94. * Initial kernel command line, usually setup by prom_init()
  95. */
  96. extern char arcs_cmdline[COMMAND_LINE_SIZE];
  97. /*
  98. * Registers a0, a1, a2 and a3 as passed to the kernel entry by firmware
  99. */
  100. extern unsigned long fw_arg0, fw_arg1, fw_arg2, fw_arg3;
  101. #ifdef CONFIG_USE_OF
  102. #include <linux/libfdt.h>
  103. #include <linux/of_fdt.h>
  104. extern char __appended_dtb[];
  105. static inline void *get_fdt(void)
  106. {
  107. if (IS_ENABLED(CONFIG_MIPS_RAW_APPENDED_DTB) ||
  108. IS_ENABLED(CONFIG_MIPS_ELF_APPENDED_DTB))
  109. if (fdt_magic(&__appended_dtb) == FDT_MAGIC)
  110. return &__appended_dtb;
  111. if (fw_arg0 == -2) /* UHI interface */
  112. return (void *)fw_arg1;
  113. if (IS_ENABLED(CONFIG_BUILTIN_DTB))
  114. if (&__dtb_start != &__dtb_end)
  115. return &__dtb_start;
  116. return NULL;
  117. }
  118. #endif
  119. /*
  120. * Platform memory detection hook called by arch_mem_init()
  121. */
  122. extern void plat_mem_setup(void);
  123. #ifdef CONFIG_SWIOTLB
  124. /*
  125. * Optional platform hook to call swiotlb_setup().
  126. */
  127. extern void plat_swiotlb_setup(void);
  128. #else
  129. static inline void plat_swiotlb_setup(void) {}
  130. #endif /* CONFIG_SWIOTLB */
  131. #ifdef CONFIG_USE_OF
  132. /**
  133. * plat_get_fdt() - Return a pointer to the platform's device tree blob
  134. *
  135. * This function provides a platform independent API to get a pointer to the
  136. * flattened device tree blob. The interface between bootloader and kernel
  137. * is not consistent across platforms so it is necessary to provide this
  138. * API such that common startup code can locate the FDT.
  139. *
  140. * This is used by the KASLR code to get command line arguments and random
  141. * seed from the device tree. Any platform wishing to use KASLR should
  142. * provide this API and select SYS_SUPPORTS_RELOCATABLE.
  143. *
  144. * Return: Pointer to the flattened device tree blob.
  145. */
  146. extern void *plat_get_fdt(void);
  147. #ifdef CONFIG_RELOCATABLE
  148. /**
  149. * plat_fdt_relocated() - Update platform's information about relocated dtb
  150. *
  151. * This function provides a platform-independent API to set platform's
  152. * information about relocated DTB if it needs to be moved due to kernel
  153. * relocation occurring at boot.
  154. */
  155. void plat_fdt_relocated(void *new_location);
  156. #endif /* CONFIG_RELOCATABLE */
  157. #endif /* CONFIG_USE_OF */
  158. #endif /* _ASM_BOOTINFO_H */