Misread the definition of the type_of_loader field; it should include a
[people/xl0/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 } __attribute__ (( packed ));
66
67 /** Offset of bzImage header within kernel image */
68 #define BZI_HDR_OFFSET 0x1f1
69
70 /** bzImage magic signature value */
71 #define BZI_SIGNATURE 0x53726448
72
73 /** bzImage boot loader identifier for Etherboot */
74 #define BZI_LOADER_TYPE_ETHERBOOT 0x40
75
76 /** bzImage boot loader identifier for gPXE
77  *
78  * We advertise ourselves as Etherboot version 6.
79  */
80 #define BZI_LOADER_TYPE_GPXE ( BZI_LOADER_TYPE_ETHERBOOT | 0x06 )
81
82 /** bzImage "load high" flag */
83 #define BZI_LOAD_HIGH 0x01
84
85 /** Load address for high-loaded kernels */
86 #define BZI_LOAD_HIGH_ADDR 0x100000
87
88 /** Load address for low-loaded kernels */
89 #define BZI_LOAD_LOW_ADDR 0x10000
90
91 /** bzImage "kernel can use heap" flag */
92 #define BZI_CAN_USE_HEAP 0x80
93
94 /** bzImage special video mode "normal" */
95 #define BZI_VID_MODE_NORMAL 0xffff
96
97 /** bzImage special video mode "ext" */
98 #define BZI_VID_MODE_EXT 0xfffe
99
100 /** bzImage special video mode "ask" */
101 #define BZI_VID_MODE_ASK 0xfffd
102
103 /** bzImage maximum initrd address for versions < 2.03 */
104 #define BZI_INITRD_MAX 0x37ffffff
105
106 /** bzImage command-line structure used by older kernels */
107 struct bzimage_cmdline {
108         /** Magic signature */
109         uint16_t magic;
110         /** Offset to command line */
111         uint16_t offset;
112 } __attribute__ (( packed ));
113
114 /** Offset of bzImage command-line structure within kernel image */
115 #define BZI_CMDLINE_OFFSET 0x20
116
117 /** bzImage command line present magic marker value */
118 #define BZI_CMDLINE_MAGIC 0xa33f
119
120
121 /** Amount of stack space to provide */
122 #define BZI_STACK_SIZE 0x1000
123
124 /** Maximum size of command line */
125 #define BZI_CMDLINE_SIZE 0x100
126
127 #endif /* _BZIMAGE_H */