18f75582aSVasily Gorbik /* SPDX-License-Identifier: GPL-2.0 */ 28f75582aSVasily Gorbik #ifndef BOOT_BOOT_H 38f75582aSVasily Gorbik #define BOOT_BOOT_H 48f75582aSVasily Gorbik 5256d78d0SAlexander Egorenkov #include <linux/types.h> 69a78c70aSVasily Gorbik 7834979c2SHeiko Carstens #define IPL_START 0x200 8834979c2SHeiko Carstens 9834979c2SHeiko Carstens #ifndef __ASSEMBLY__ 10834979c2SHeiko Carstens 11bd50b743SAlexander Gordeev struct machine_info { 12bd50b743SAlexander Gordeev unsigned char has_edat1 : 1; 13bd50b743SAlexander Gordeev unsigned char has_edat2 : 1; 14bd50b743SAlexander Gordeev unsigned char has_nx : 1; 15bd50b743SAlexander Gordeev }; 16bd50b743SAlexander Gordeev 179c3205b2SAlexander Gordeev struct vmlinux_info { 189c3205b2SAlexander Gordeev unsigned long default_lma; 19*bb1520d5SAlexander Gordeev unsigned long entry; 209c3205b2SAlexander Gordeev unsigned long image_size; /* does not include .bss */ 219c3205b2SAlexander Gordeev unsigned long bss_size; /* uncompressed image .bss size */ 229c3205b2SAlexander Gordeev unsigned long bootdata_off; 239c3205b2SAlexander Gordeev unsigned long bootdata_size; 249c3205b2SAlexander Gordeev unsigned long bootdata_preserved_off; 259c3205b2SAlexander Gordeev unsigned long bootdata_preserved_size; 269c3205b2SAlexander Gordeev unsigned long dynsym_start; 279c3205b2SAlexander Gordeev unsigned long rela_dyn_start; 289c3205b2SAlexander Gordeev unsigned long rela_dyn_end; 299c3205b2SAlexander Gordeev unsigned long amode31_size; 30*bb1520d5SAlexander Gordeev unsigned long init_mm_off; 31*bb1520d5SAlexander Gordeev unsigned long swapper_pg_dir_off; 32*bb1520d5SAlexander Gordeev unsigned long invalid_pg_dir_off; 339c3205b2SAlexander Gordeev }; 349c3205b2SAlexander Gordeev 358f75582aSVasily Gorbik void startup_kernel(void); 3673045a08SVasily Gorbik unsigned long detect_memory(void); 3773045a08SVasily Gorbik bool is_ipl_block_dump(void); 3849698745SVasily Gorbik void store_ipl_parmblock(void); 399c3205b2SAlexander Gordeev unsigned long read_ipl_report(unsigned long safe_offset); 4049698745SVasily Gorbik void setup_boot_command_line(void); 41b5e80459SVasily Gorbik void parse_boot_command_line(void); 42868202ceSVasily Gorbik void verify_facilities(void); 436d85dac2SVasily Gorbik void print_missing_facilities(void); 44f1d3c532SAlexander Egorenkov void sclp_early_setup_buffer(void); 45724dc336SVasily Gorbik void print_pgm_check_info(void); 46b2d24b97SGerald Schaefer unsigned long get_random_base(unsigned long safe_addr); 47*bb1520d5SAlexander Gordeev void setup_vmem(unsigned long online_end, unsigned long asce_limit); 489a78c70aSVasily Gorbik void __printf(1, 2) decompressor_printk(const char *fmt, ...); 499c3205b2SAlexander Gordeev void error(char *m); 50b2d24b97SGerald Schaefer 51bd50b743SAlexander Gordeev extern struct machine_info machine; 52bd50b743SAlexander Gordeev 537fadcc07SAlexander Egorenkov /* Symbols defined by linker scripts */ 546abe2819SVasily Gorbik extern const char kernel_version[]; 5573045a08SVasily Gorbik extern unsigned long memory_limit; 560c4f2623SVasily Gorbik extern unsigned long vmalloc_size; 5773045a08SVasily Gorbik extern int vmalloc_size_set; 5873045a08SVasily Gorbik extern int kaslr_enabled; 597fadcc07SAlexander Egorenkov extern char __boot_data_start[], __boot_data_end[]; 607fadcc07SAlexander Egorenkov extern char __boot_data_preserved_start[], __boot_data_preserved_end[]; 617fadcc07SAlexander Egorenkov extern char _decompressor_syms_start[], _decompressor_syms_end[]; 62256d78d0SAlexander Egorenkov extern char _stack_start[], _stack_end[]; 639c3205b2SAlexander Gordeev extern char _end[]; 649c3205b2SAlexander Gordeev extern unsigned char _compressed_start[]; 659c3205b2SAlexander Gordeev extern unsigned char _compressed_end[]; 669c3205b2SAlexander Gordeev extern struct vmlinux_info _vmlinux_info; 679c3205b2SAlexander Gordeev #define vmlinux _vmlinux_info 689641b8ccSMartin Schwidefsky 69834979c2SHeiko Carstens #endif /* __ASSEMBLY__ */ 708f75582aSVasily Gorbik #endif /* BOOT_BOOT_H */ 71