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