Prepare v2024.10
[platform/kernel/u-boot.git] / arch / x86 / include / asm / zimage.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * (C) Copyright 2002
4  * Daniel Engström, Omicron Ceti AB, daniel@omicron.se
5  */
6
7 #ifndef _ASM_ZIMAGE_H_
8 #define _ASM_ZIMAGE_H_
9
10 #include <asm/bootparam.h>
11 #include <asm/e820.h>
12
13 /* linux i386 zImage/bzImage header. Offsets relative to
14  * the start of the image */
15
16 #define HEAP_FLAG           0x80
17 #define BIG_KERNEL_FLAG     0x01
18
19 /* magic numbers */
20 #define KERNEL_MAGIC        0xaa55
21 #define KERNEL_V2_MAGIC     0x53726448
22 #define COMMAND_LINE_MAGIC  0xA33F
23
24 /* limits */
25 #define BZIMAGE_MAX_SIZE   15*1024*1024     /* 15MB */
26 #define ZIMAGE_MAX_SIZE    512*1024         /* 512k */
27 #define SETUP_MAX_SIZE     32768
28
29 #define SETUP_START_OFFSET 0x200
30 #define BZIMAGE_LOAD_ADDR  0x100000
31 #define ZIMAGE_LOAD_ADDR   0x10000
32
33 enum {
34         ZBOOT_STATE_START       = BIT(0),
35         ZBOOT_STATE_LOAD        = BIT(1),
36         ZBOOT_STATE_SETUP       = BIT(2),
37         ZBOOT_STATE_INFO        = BIT(3),
38         ZBOOT_STATE_GO          = BIT(4),
39
40         /* This one doesn't execute automatically, so stop the count before 5 */
41         ZBOOT_STATE_DUMP        = BIT(5),
42         ZBOOT_STATE_COUNT       = 5,
43 };
44
45 /**
46  * struct zboot_state - Current state of the boot
47  *
48  * @bzimage_addr: Address of the bzImage to boot, or 0 if the image has already
49  *      been loaded and does not exist (as a cohesive whole) in memory
50  * @bzimage_size: Size of the bzImage, or 0 to detect this
51  * @initrd_addr: Address of the initial ramdisk, or 0 if none
52  * @initrd_size: Size of the initial ramdisk, or 0 if none
53  * @load_address: Address where the bzImage is moved before booting, either
54  *      BZIMAGE_LOAD_ADDR or ZIMAGE_LOAD_ADDR
55  *      This is set up when loading the zimage
56  * @base_ptr: Pointer to the boot parameters, typically at address
57  *      DEFAULT_SETUP_BASE
58  *      This is set up when loading the zimage
59  * @cmdline: Environment variable containing the 'override' command line, or
60  *      NULL to use the one in the setup block
61  */
62 struct zboot_state {
63         ulong bzimage_addr;
64         ulong bzimage_size;
65         ulong initrd_addr;
66         ulong initrd_size;
67         ulong load_address;
68         struct boot_params *base_ptr;
69         const char *cmdline;
70 };
71
72 extern struct zboot_state state;
73
74 /**
75  * zimage_dump() - Dump information about a zimage
76  *
77  * @base_ptr: Pointer to the boot parameters
78  * @show_cmdline: true to show the kernel command line
79  */
80 void zimage_dump(struct boot_params *base_ptr, bool show_cmdline);
81
82 /**
83  * zboot_load() - Load a zimage
84  *
85  * Load the zimage into the correct place
86  *
87  * Return: 0 if OK, -ve on error
88  */
89 int zboot_load(void);
90
91 /**
92  * zboot_setup() - Set up the zboot image reeady for booting
93  *
94  * Return: 0 if OK, -ve on error
95  */
96 int zboot_setup(void);
97
98 /**
99  * zboot_go() - Start the image
100  *
101  * Return: 0 if OK, -ve on error
102  */
103 int zboot_go(void);
104
105 /**
106  * load_zimage() - Load a zImage or bzImage
107  *
108  * This copies an image into the standard location ready for setup
109  *
110  * @image: Address of image to load
111  * @kernel_size: Size of kernel including setup block (or 0 if the kernel is
112  *      new enough to have a 'syssize' value)
113  * @load_addressp: Returns the address where the kernel has been loaded
114  * Return: address of setup block, or NULL if something went wrong
115  */
116 struct boot_params *load_zimage(char *image, unsigned long kernel_size,
117                                 ulong *load_addressp);
118
119 /**
120  * setup_zimage() - Set up a loaded zImage or bzImage ready for booting
121  *
122  * @setup_base: Pointer to the boot parameters, typically at address
123  *      DEFAULT_SETUP_BASE
124  * @cmd_line: Place to put the command line, or NULL to use the one in the setup
125  *      block
126  * @initrd_addr: Address of the initial ramdisk, or 0 if none
127  * @initrd_size: Size of the initial ramdisk, or 0 if none
128  * @load_address: Address where the bzImage is moved before booting, either
129  *      BZIMAGE_LOAD_ADDR or ZIMAGE_LOAD_ADDR
130  * @cmdline_force: Address of 'override' command line, or 0 to use the one in
131  *      the *   setup block
132  * Return: 0 (always)
133  */
134 int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
135                  ulong initrd_addr, ulong initrd_size, ulong cmdline_force);
136
137 /**
138  * zboot_start() - Prepare to boot a zimage
139  *
140  * Record information about a zimage so it can be booted
141  *
142  * @bzimage_addr: Address of the bzImage to boot
143  * @bzimage_size: Size of the bzImage, or 0 to detect this
144  * @initrd_addr: Address of the initial ramdisk, or 0 if none
145  * @initrd_size: Size of the initial ramdisk, or 0 if none
146  * @base_addr: If non-zero, this indicates that the boot parameters have already
147  *      been loaded by the caller to this address, so the load_zimage() call
148  *      in zboot_load() will be skipped when booting
149  * @cmdline: Environment variable containing the 'override' command line, or
150  *      NULL to use the one in the setup block
151  */
152 void zboot_start(ulong bzimage_addr, ulong bzimage_size, ulong initrd_addr,
153                  ulong initrd_size, ulong base_addr, const char *cmdline);
154
155 /**
156  * zboot_info() - Show simple info about a zimage
157  *
158  * Shows wherer the kernel was loaded and also the setup base
159  */
160 void zboot_info(void);
161
162 #endif