2018-07-19 13:11:28 +02:00
/* SPDX-License-Identifier: GPL-2.0 */
# ifndef BOOT_BOOT_H
# define BOOT_BOOT_H
2021-06-30 17:17:53 +02:00
# include <linux/types.h>
2020-11-10 17:05:26 +01:00
2022-04-27 04:14:34 +02:00
# define IPL_START 0x200
# ifndef __ASSEMBLY__
2023-02-02 13:59:36 +01:00
# include <asm/physmem_info.h>
2022-12-04 21:15:41 +01:00
struct machine_info {
unsigned char has_edat1 : 1 ;
unsigned char has_edat2 : 1 ;
unsigned char has_nx : 1 ;
} ;
2022-05-05 16:54:54 +02:00
struct vmlinux_info {
unsigned long default_lma ;
2022-12-13 11:35:11 +01:00
unsigned long entry ;
2022-05-05 16:54:54 +02:00
unsigned long image_size ; /* does not include .bss */
unsigned long bss_size ; /* uncompressed image .bss size */
unsigned long bootdata_off ;
unsigned long bootdata_size ;
unsigned long bootdata_preserved_off ;
unsigned long bootdata_preserved_size ;
unsigned long dynsym_start ;
unsigned long rela_dyn_start ;
unsigned long rela_dyn_end ;
unsigned long amode31_size ;
2022-12-13 11:35:11 +01:00
unsigned long init_mm_off ;
unsigned long swapper_pg_dir_off ;
unsigned long invalid_pg_dir_off ;
2023-02-09 22:05:11 +01:00
# ifdef CONFIG_KASAN
unsigned long kasan_early_shadow_page_off ;
unsigned long kasan_early_shadow_pte_off ;
unsigned long kasan_early_shadow_pmd_off ;
unsigned long kasan_early_shadow_pud_off ;
unsigned long kasan_early_shadow_p4d_off ;
# endif
2022-05-05 16:54:54 +02:00
} ;
2018-07-19 13:11:28 +02:00
void startup_kernel ( void ) ;
2023-02-02 13:59:36 +01:00
unsigned long detect_max_physmem_end ( void ) ;
void detect_physmem_online_ranges ( unsigned long max_physmem_end ) ;
2023-02-08 18:11:25 +01:00
void physmem_set_usable_limit ( unsigned long limit ) ;
2023-02-02 13:59:36 +01:00
void physmem_reserve ( enum reserved_range_type type , unsigned long addr , unsigned long size ) ;
void physmem_free ( enum reserved_range_type type ) ;
/* for continuous/multiple allocations per type */
unsigned long physmem_alloc_top_down ( enum reserved_range_type type , unsigned long size ,
unsigned long align ) ;
/* for single allocations, 1 per type */
unsigned long physmem_alloc_range ( enum reserved_range_type type , unsigned long size ,
unsigned long align , unsigned long min , unsigned long max ,
bool die_on_oom ) ;
2023-02-21 23:08:42 +01:00
unsigned long get_physmem_alloc_pos ( void ) ;
2023-02-02 13:59:36 +01:00
bool ipl_report_certs_intersects ( unsigned long addr , unsigned long size ,
unsigned long * intersection_start ) ;
2020-10-19 11:01:33 +02:00
bool is_ipl_block_dump ( void ) ;
2018-05-15 13:28:53 +02:00
void store_ipl_parmblock ( void ) ;
2023-02-02 13:59:36 +01:00
int read_ipl_report ( void ) ;
void save_ipl_cert_comp_list ( void ) ;
2018-05-15 13:28:53 +02:00
void setup_boot_command_line ( void ) ;
2019-02-27 16:52:42 +01:00
void parse_boot_command_line ( void ) ;
2019-07-17 19:38:42 +02:00
void verify_facilities ( void ) ;
2019-02-27 17:36:35 +01:00
void print_missing_facilities ( void ) ;
2020-11-05 13:09:06 +01:00
void sclp_early_setup_buffer ( void ) ;
2019-08-08 20:09:08 +02:00
void print_pgm_check_info ( void ) ;
2023-02-21 23:08:42 +01:00
unsigned long randomize_within_range ( unsigned long size , unsigned long align ,
unsigned long min , unsigned long max ) ;
2023-01-28 23:55:04 +01:00
void setup_vmem ( unsigned long asce_limit ) ;
2020-11-10 17:05:26 +01:00
void __printf ( 1 , 2 ) decompressor_printk ( const char * fmt , . . . ) ;
2023-02-02 13:59:36 +01:00
void print_stacktrace ( unsigned long sp ) ;
2022-05-05 16:54:54 +02:00
void error ( char * m ) ;
2019-02-03 21:37:20 +01:00
2022-12-04 21:15:41 +01:00
extern struct machine_info machine ;
2021-06-30 17:12:25 +02:00
/* Symbols defined by linker scripts */
2019-07-15 15:30:33 +02:00
extern const char kernel_version [ ] ;
2020-10-19 11:01:33 +02:00
extern unsigned long memory_limit ;
2020-10-06 22:12:39 +02:00
extern unsigned long vmalloc_size ;
2020-10-19 11:01:33 +02:00
extern int vmalloc_size_set ;
2021-06-30 17:12:25 +02:00
extern char __boot_data_start [ ] , __boot_data_end [ ] ;
extern char __boot_data_preserved_start [ ] , __boot_data_preserved_end [ ] ;
extern char _decompressor_syms_start [ ] , _decompressor_syms_end [ ] ;
2021-06-30 17:17:53 +02:00
extern char _stack_start [ ] , _stack_end [ ] ;
2023-02-02 13:59:36 +01:00
extern char _end [ ] , _decompressor_end [ ] ;
2022-05-05 16:54:54 +02:00
extern unsigned char _compressed_start [ ] ;
extern unsigned char _compressed_end [ ] ;
extern struct vmlinux_info _vmlinux_info ;
# define vmlinux _vmlinux_info
2019-02-21 14:23:04 +01:00
2022-12-19 21:08:27 +01:00
# define __abs_lowcore_pa(x) (((unsigned long)(x) - __abs_lowcore) % sizeof(struct lowcore))
2023-02-02 13:59:36 +01:00
static inline bool intersects ( unsigned long addr0 , unsigned long size0 ,
unsigned long addr1 , unsigned long size1 )
{
return addr0 + size0 > addr1 & & addr1 + size1 > addr0 ;
}
2022-04-27 04:14:34 +02:00
# endif /* __ASSEMBLY__ */
2018-07-19 13:11:28 +02:00
# endif /* BOOT_BOOT_H */