1 | #ifndef _BZIMAGE_H |
---|
2 | #define _BZIMAGE_H |
---|
3 | |
---|
4 | FILE_LICENCE ( GPL2_OR_LATER ); |
---|
5 | |
---|
6 | #include <stdint.h> |
---|
7 | |
---|
8 | /** |
---|
9 | * A bzImage header |
---|
10 | * |
---|
11 | * As documented in Documentation/i386/boot.txt |
---|
12 | */ |
---|
13 | struct bzimage_header { |
---|
14 | /** The size of the setup in sectors |
---|
15 | * |
---|
16 | * If this field contains 0, assume it contains 4. |
---|
17 | */ |
---|
18 | uint8_t setup_sects; |
---|
19 | /** If set, the root is mounted readonly */ |
---|
20 | uint16_t root_flags; |
---|
21 | /** DO NOT USE - for bootsect.S use only */ |
---|
22 | uint16_t syssize; |
---|
23 | /** DO NOT USE - obsolete */ |
---|
24 | uint16_t swap_dev; |
---|
25 | /** DO NOT USE - for bootsect.S use only */ |
---|
26 | uint16_t ram_size; |
---|
27 | /** Video mode control */ |
---|
28 | uint16_t vid_mode; |
---|
29 | /** Default root device number */ |
---|
30 | uint16_t root_dev; |
---|
31 | /** 0xAA55 magic number */ |
---|
32 | uint16_t boot_flag; |
---|
33 | /** Jump instruction */ |
---|
34 | uint16_t jump; |
---|
35 | /** Magic signature "HdrS" */ |
---|
36 | uint32_t header; |
---|
37 | /** Boot protocol version supported */ |
---|
38 | uint16_t version; |
---|
39 | /** Boot loader hook (see below) */ |
---|
40 | uint32_t realmode_swtch; |
---|
41 | /** The load-low segment (0x1000) (obsolete) */ |
---|
42 | uint16_t start_sys; |
---|
43 | /** Pointer to kernel version string */ |
---|
44 | uint16_t kernel_version; |
---|
45 | /** Boot loader identifier */ |
---|
46 | uint8_t type_of_loader; |
---|
47 | /** Boot protocol option flags */ |
---|
48 | uint8_t loadflags; |
---|
49 | /** Move to high memory size (used with hooks) */ |
---|
50 | uint16_t setup_move_size; |
---|
51 | /** Boot loader hook (see below) */ |
---|
52 | uint32_t code32_start; |
---|
53 | /** initrd load address (set by boot loader) */ |
---|
54 | uint32_t ramdisk_image; |
---|
55 | /** initrd size (set by boot loader) */ |
---|
56 | uint32_t ramdisk_size; |
---|
57 | /** DO NOT USE - for bootsect.S use only */ |
---|
58 | uint32_t bootsect_kludge; |
---|
59 | /** Free memory after setup end */ |
---|
60 | uint16_t heap_end_ptr; |
---|
61 | /** Unused */ |
---|
62 | uint16_t pad1; |
---|
63 | /** 32-bit pointer to the kernel command line */ |
---|
64 | uint32_t cmd_line_ptr; |
---|
65 | /** Highest legal initrd address */ |
---|
66 | uint32_t initrd_addr_max; |
---|
67 | /** Physical addr alignment required for kernel */ |
---|
68 | uint32_t kernel_alignment; |
---|
69 | /** Whether kernel is relocatable or not */ |
---|
70 | uint8_t relocatable_kernel; |
---|
71 | /** Unused */ |
---|
72 | uint8_t pad2[3]; |
---|
73 | /** Maximum size of the kernel command line */ |
---|
74 | uint32_t cmdline_size; |
---|
75 | } __attribute__ (( packed )); |
---|
76 | |
---|
77 | /** Offset of bzImage header within kernel image */ |
---|
78 | #define BZI_HDR_OFFSET 0x1f1 |
---|
79 | |
---|
80 | /** bzImage boot flag value */ |
---|
81 | #define BZI_BOOT_FLAG 0xaa55 |
---|
82 | |
---|
83 | /** bzImage magic signature value */ |
---|
84 | #define BZI_SIGNATURE 0x53726448 |
---|
85 | |
---|
86 | /** bzImage boot loader identifier for Etherboot */ |
---|
87 | #define BZI_LOADER_TYPE_ETHERBOOT 0x40 |
---|
88 | |
---|
89 | /** bzImage boot loader identifier for gPXE |
---|
90 | * |
---|
91 | * We advertise ourselves as Etherboot version 6. |
---|
92 | */ |
---|
93 | #define BZI_LOADER_TYPE_GPXE ( BZI_LOADER_TYPE_ETHERBOOT | 0x06 ) |
---|
94 | |
---|
95 | /** bzImage "load high" flag */ |
---|
96 | #define BZI_LOAD_HIGH 0x01 |
---|
97 | |
---|
98 | /** Load address for high-loaded kernels */ |
---|
99 | #define BZI_LOAD_HIGH_ADDR 0x100000 |
---|
100 | |
---|
101 | /** Load address for low-loaded kernels */ |
---|
102 | #define BZI_LOAD_LOW_ADDR 0x10000 |
---|
103 | |
---|
104 | /** bzImage "kernel can use heap" flag */ |
---|
105 | #define BZI_CAN_USE_HEAP 0x80 |
---|
106 | |
---|
107 | /** bzImage special video mode "normal" */ |
---|
108 | #define BZI_VID_MODE_NORMAL 0xffff |
---|
109 | |
---|
110 | /** bzImage special video mode "ext" */ |
---|
111 | #define BZI_VID_MODE_EXT 0xfffe |
---|
112 | |
---|
113 | /** bzImage special video mode "ask" */ |
---|
114 | #define BZI_VID_MODE_ASK 0xfffd |
---|
115 | |
---|
116 | /** bzImage maximum initrd address for versions < 2.03 */ |
---|
117 | #define BZI_INITRD_MAX 0x37ffffff |
---|
118 | |
---|
119 | /** bzImage command-line structure used by older kernels */ |
---|
120 | struct bzimage_cmdline { |
---|
121 | /** Magic signature */ |
---|
122 | uint16_t magic; |
---|
123 | /** Offset to command line */ |
---|
124 | uint16_t offset; |
---|
125 | } __attribute__ (( packed )); |
---|
126 | |
---|
127 | /** Offset of bzImage command-line structure within kernel image */ |
---|
128 | #define BZI_CMDLINE_OFFSET 0x20 |
---|
129 | |
---|
130 | /** bzImage command line present magic marker value */ |
---|
131 | #define BZI_CMDLINE_MAGIC 0xa33f |
---|
132 | |
---|
133 | /** Assumed size of real-mode portion (including .bss) */ |
---|
134 | #define BZI_ASSUMED_RM_SIZE 0x8000 |
---|
135 | |
---|
136 | /** Amount of stack space to provide */ |
---|
137 | #define BZI_STACK_SIZE 0x1000 |
---|
138 | |
---|
139 | /** Maximum size of command line */ |
---|
140 | #define BZI_CMDLINE_SIZE 0x100 |
---|
141 | |
---|
142 | #endif /* _BZIMAGE_H */ |
---|