Merge tag 'pull-nios2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-block.git] / arch / x86 / include / asm / setup.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
1965aae3
PA
2#ifndef _ASM_X86_SETUP_H
3#define _ASM_X86_SETUP_H
ef685298 4
af170c50
DH
5#include <uapi/asm/setup.h>
6
ef685298
TG
7#define COMMAND_LINE_SIZE 2048
8
a1ed4ddf 9#include <linux/linkage.h>
35de5b06 10#include <asm/page_types.h>
2b6ff7de 11#include <asm/ibt.h>
a1ed4ddf 12
ef685298
TG
13#ifdef __i386__
14
15#include <linux/pfn.h>
16/*
17 * Reserved space for vmalloc and iomap - defined in asm/page.h
18 */
19#define MAXMEM_PFN PFN_DOWN(MAXMEM)
20#define MAX_NONPAE_PFN (1 << 20)
21
fa76dab9
PA
22#endif /* __i386__ */
23
24#define PARAM_SIZE 4096 /* sizeof(struct boot_params) */
ef685298 25
ef685298 26#define OLD_CL_MAGIC 0xA33F
fa76dab9 27#define OLD_CL_ADDRESS 0x020 /* Relative to real mode data */
ef685298
TG
28#define NEW_CL_POINTER 0x228 /* Relative to real mode data */
29
ef685298
TG
30#ifndef __ASSEMBLY__
31#include <asm/bootparam.h>
845b3944 32#include <asm/x86_init.h>
ef685298 33
5aa3d718
BP
34extern u64 relocated_ramdisk;
35
15c55443 36/* Interrupt control for vSMPowered x86_64 systems */
70511134 37#ifdef CONFIG_X86_64
15c55443 38void vsmp_init(void);
129d8bc8
YL
39#else
40static inline void vsmp_init(void) { }
41#endif
15c55443 42
4b47cdbd
JR
43struct pt_regs;
44
15c55443 45void setup_bios_corruption_check(void);
630b3aff 46void early_platform_quirks(void);
15c55443 47
15c55443
JSR
48extern unsigned long saved_video_mode;
49
8fee697d
TG
50extern void reserve_standard_io_resources(void);
51extern void i386_reserve_resources(void);
ad3bc25a 52extern unsigned long __startup_64(unsigned long physaddr, struct boot_params *bp);
866b556e 53extern void startup_64_setup_env(unsigned long physbase);
f5963ba7 54extern void early_setup_idt(void);
4b47cdbd 55extern void __init do_early_exception(struct pt_regs *regs, int trapnr);
8fee697d 56
933b9463 57#ifdef CONFIG_X86_INTEL_MID
712b6aa8 58extern void x86_intel_mid_early_setup(void);
3f4110a4 59#else
712b6aa8 60static inline void x86_intel_mid_early_setup(void) { }
3f4110a4
TG
61#endif
62
c751e17b
TG
63#ifdef CONFIG_X86_INTEL_CE
64extern void x86_ce4100_early_setup(void);
65#else
66static inline void x86_ce4100_early_setup(void) { }
67#endif
68
fa76dab9
PA
69#ifndef _SETUP
70
e1fe9ed8 71#include <asm/espfix.h>
535b3ddc 72#include <linux/kernel.h>
e1fe9ed8 73
ef685298
TG
74/*
75 * This is set up by the setup-routine at boot-time
76 */
77extern struct boot_params boot_params;
4545c898 78extern char _text[];
ef685298 79
78cac48c
BP
80static inline bool kaslr_enabled(void)
81{
88107d33
MR
82 return IS_ENABLED(CONFIG_RANDOMIZE_MEMORY) &&
83 !!(boot_params.hdr.loadflags & KASLR_FLAG);
84}
85
86/*
87 * Apply no randomization if KASLR was disabled at boot or if KASAN
88 * is enabled. KASAN shadow mappings rely on regions being PGD aligned.
89 */
90static inline bool kaslr_memory_enabled(void)
91{
92 return kaslr_enabled() && !IS_ENABLED(CONFIG_KASAN);
78cac48c
BP
93}
94
4545c898
JK
95static inline unsigned long kaslr_offset(void)
96{
97 return (unsigned long)&_text - __START_KERNEL;
98}
99
ef685298
TG
100/*
101 * Do NOT EVER look at the BIOS memory size location.
102 * It does not work on many machines.
103 */
104#define LOWMEMSIZE() (0x9f000)
105
93dbda7c
JF
106/* exceedingly early brk-like allocator */
107extern unsigned long _brk_end;
108void *extend_brk(size_t size, size_t align);
109
796216a5 110/*
e32683c6
JP
111 * Reserve space in the .brk section, which is a block of memory from which the
112 * caller is allowed to allocate very early (before even memblock is available)
113 * by calling extend_brk(). All allocated memory will be eventually converted
114 * to memblock. Any leftover unallocated memory will be freed.
796216a5 115 *
e32683c6 116 * The size is in bytes.
796216a5 117 */
e32683c6
JP
118#define RESERVE_BRK(name, size) \
119 __section(".bss..brk") __aligned(1) __used \
120 static char __brk_##name[size]
796216a5 121
5d94e81f 122extern void probe_roms(void);
96e8fc58
JG
123
124void clear_bss(void);
125
95a71a45
YL
126#ifdef __i386__
127
a1ed4ddf 128asmlinkage void __init i386_start_kernel(void);
746ef0cd 129
102e3b8d 130#else
a1ed4ddf
AK
131asmlinkage void __init x86_64_start_kernel(char *real_mode);
132asmlinkage void __init x86_64_start_reservations(char *real_mode_data);
f97013fd 133
ef685298 134#endif /* __i386__ */
fa76dab9 135#endif /* _SETUP */
e32683c6
JP
136
137#else /* __ASSEMBLY */
138
139.macro __RESERVE_BRK name, size
140 .pushsection .bss..brk, "aw"
141SYM_DATA_START(__brk_\name)
142 .skip \size
143SYM_DATA_END(__brk_\name)
796216a5 144 .popsection
e32683c6
JP
145.endm
146
147#define RESERVE_BRK(name, size) __RESERVE_BRK name, size
148
ef685298 149#endif /* __ASSEMBLY__ */
e32683c6 150
1965aae3 151#endif /* _ASM_X86_SETUP_H */