1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef BOOT_COMPRESSED_MISC_H 3 #define BOOT_COMPRESSED_MISC_H 4 5 /* 6 * Special hack: we have to be careful, because no indirections are allowed here, 7 * and paravirt_ops is a kind of one. As it will only run in baremetal anyway, 8 * we just keep it from happening. (This list needs to be extended when new 9 * paravirt and debugging variants are added.) 10 */ 11 #undef CONFIG_PARAVIRT 12 #undef CONFIG_PARAVIRT_XXL 13 #undef CONFIG_PARAVIRT_SPINLOCKS 14 #undef CONFIG_KASAN 15 16 /* cpu_feature_enabled() cannot be used this early */ 17 #define USE_EARLY_PGTABLE_L5 18 19 #include <linux/linkage.h> 20 #include <linux/screen_info.h> 21 #include <linux/elf.h> 22 #include <linux/io.h> 23 #include <asm/page.h> 24 #include <asm/boot.h> 25 #include <asm/bootparam.h> 26 #include <asm/bootparam_utils.h> 27 28 #define BOOT_CTYPE_H 29 #include <linux/acpi.h> 30 31 #define BOOT_BOOT_H 32 #include "../ctype.h" 33 34 #ifdef CONFIG_X86_64 35 #define memptr long 36 #else 37 #define memptr unsigned 38 #endif 39 40 /* misc.c */ 41 extern memptr free_mem_ptr; 42 extern memptr free_mem_end_ptr; 43 extern struct boot_params *boot_params; 44 void __putstr(const char *s); 45 void __puthex(unsigned long value); 46 #define error_putstr(__x) __putstr(__x) 47 #define error_puthex(__x) __puthex(__x) 48 49 #ifdef CONFIG_X86_VERBOSE_BOOTUP 50 51 #define debug_putstr(__x) __putstr(__x) 52 #define debug_puthex(__x) __puthex(__x) 53 #define debug_putaddr(__x) { \ 54 debug_putstr(#__x ": 0x"); \ 55 debug_puthex((unsigned long)(__x)); \ 56 debug_putstr("\n"); \ 57 } 58 59 #else 60 61 static inline void debug_putstr(const char *s) 62 { } 63 static inline void debug_puthex(const char *s) 64 { } 65 #define debug_putaddr(x) /* */ 66 67 #endif 68 69 /* cmdline.c */ 70 int cmdline_find_option(const char *option, char *buffer, int bufsize); 71 int cmdline_find_option_bool(const char *option); 72 73 struct mem_vector { 74 unsigned long long start; 75 unsigned long long size; 76 }; 77 78 #if CONFIG_RANDOMIZE_BASE 79 /* kaslr.c */ 80 void choose_random_location(unsigned long input, 81 unsigned long input_size, 82 unsigned long *output, 83 unsigned long output_size, 84 unsigned long *virt_addr); 85 /* cpuflags.c */ 86 bool has_cpuflag(int flag); 87 #else 88 static inline void choose_random_location(unsigned long input, 89 unsigned long input_size, 90 unsigned long *output, 91 unsigned long output_size, 92 unsigned long *virt_addr) 93 { 94 } 95 #endif 96 97 #ifdef CONFIG_X86_64 98 void initialize_identity_maps(void); 99 void add_identity_map(unsigned long start, unsigned long size); 100 void finalize_identity_maps(void); 101 extern unsigned char _pgtable[]; 102 #else 103 static inline void initialize_identity_maps(void) 104 { } 105 static inline void add_identity_map(unsigned long start, unsigned long size) 106 { } 107 static inline void finalize_identity_maps(void) 108 { } 109 #endif 110 111 #ifdef CONFIG_EARLY_PRINTK 112 /* early_serial_console.c */ 113 extern int early_serial_base; 114 void console_init(void); 115 #else 116 static const int early_serial_base; 117 static inline void console_init(void) 118 { } 119 #endif 120 121 void set_sev_encryption_mask(void); 122 123 /* acpi.c */ 124 #ifdef CONFIG_ACPI 125 acpi_physical_address get_rsdp_addr(void); 126 #else 127 static inline acpi_physical_address get_rsdp_addr(void) { return 0; } 128 #endif 129 130 #if defined(CONFIG_RANDOMIZE_BASE) && defined(CONFIG_MEMORY_HOTREMOVE) && defined(CONFIG_ACPI) 131 extern struct mem_vector immovable_mem[MAX_NUMNODES*2]; 132 int count_immovable_mem_regions(void); 133 #else 134 static inline int count_immovable_mem_regions(void) { return 0; } 135 #endif 136 137 #endif /* BOOT_COMPRESSED_MISC_H */ 138