Since some people disapprove of white space cleanups mixed in regular commits
[coreboot.git] / util / mkelfImage / linux-i386 / x86-linux.h
1 #ifndef X86_LINUX_H
2 #define X86_LINUX_H
3
4 #define E820MAP 0x2d0           /* our map */
5 #define E820MAX 32              /* number of entries in E820MAP */
6 #define E820NR  0x1e8           /* # entries in E820MAP */
7
8 #ifndef ASSEMBLY
9
10 struct e820entry {
11         uint64_t addr;  /* start of memory segment */
12         uint64_t size;  /* size of memory segment */
13         uint32_t type;          /* type of memory segment */
14 #define E820_RAM        1
15 #define E820_RESERVED   2
16 #define E820_ACPI       3 /* usable as RAM once ACPI tables have been read */
17 #define E820_NVS        4
18 } __attribute__((packed));
19
20 /* FIXME expand on drive_info_struct... */
21 struct drive_info_struct {
22         uint8_t dummy[32];
23 };
24 struct sys_desc_table {
25         uint16_t length;
26         uint8_t  table[318];
27 };
28
29 struct apm_bios_info {
30         uint16_t version;       /* 0x40 */
31         uint16_t cseg;          /* 0x42 */
32         uint32_t offset;        /* 0x44 */
33         uint16_t cseg_16;       /* 0x48 */
34         uint16_t dseg;          /* 0x4a */
35         uint16_t flags;         /* 0x4c */
36         uint16_t cseg_len;      /* 0x4e */
37         uint16_t cseg_16_len;   /* 0x50 */
38         uint16_t dseg_len;      /* 0x52 */
39         uint8_t  reserved[44];  /* 0x54 */
40 };
41
42
43 struct x86_linux_param_header {
44         uint8_t  orig_x;                        /* 0x00 */
45         uint8_t  orig_y;                        /* 0x01 */
46         uint16_t ext_mem_k;                     /* 0x02 -- EXT_MEM_K sits here */
47         uint16_t orig_video_page;               /* 0x04 */
48         uint8_t  orig_video_mode;               /* 0x06 */
49         uint8_t  orig_video_cols;               /* 0x07 */
50         uint16_t unused2;                       /* 0x08 */
51         uint16_t orig_video_ega_bx;             /* 0x0a */
52         uint16_t unused3;                       /* 0x0c */
53         uint8_t  orig_video_lines;              /* 0x0e */
54         uint8_t  orig_video_isVGA;              /* 0x0f */
55         uint16_t orig_video_points;             /* 0x10 */
56
57         /* VESA graphic mode -- linear frame buffer */
58         uint16_t lfb_width;                     /* 0x12 */
59         uint16_t lfb_height;                    /* 0x14 */
60         uint16_t lfb_depth;                     /* 0x16 */
61         uint32_t lfb_base;                      /* 0x18 */
62         uint32_t lfb_size;                      /* 0x1c */
63         uint16_t cl_magic;                      /* 0x20 */
64 #define CL_MAGIC_VALUE 0xA33F
65         uint16_t cl_offset;                     /* 0x22 */
66         uint16_t lfb_linelength;                /* 0x24 */
67         uint8_t  red_size;                      /* 0x26 */
68         uint8_t  red_pos;                       /* 0x27 */
69         uint8_t  green_size;                    /* 0x28 */
70         uint8_t  green_pos;                     /* 0x29 */
71         uint8_t  blue_size;                     /* 0x2a */
72         uint8_t  blue_pos;                      /* 0x2b */
73         uint8_t  rsvd_size;                     /* 0x2c */
74         uint8_t  rsvd_pos;                      /* 0x2d */
75         uint16_t vesapm_seg;                    /* 0x2e */
76         uint16_t vesapm_off;                    /* 0x30 */
77         uint16_t pages;                         /* 0x32 */
78         uint8_t  reserved4[12];                 /* 0x34 -- 0x3f reserved for future expansion */
79
80         struct apm_bios_info apm_bios_info;     /* 0x40 */
81         struct drive_info_struct drive_info;    /* 0x80 */
82         struct sys_desc_table sys_desc_table;   /* 0xa0 */
83         uint32_t alt_mem_k;                     /* 0x1e0 */
84         uint8_t  reserved5[4];                  /* 0x1e4 */
85         uint8_t  e820_map_nr;                   /* 0x1e8 */
86         uint8_t  reserved6[8];                  /* 0x1e9 */
87         uint8_t  setup_sects;                   /* 0x1f1 */
88         uint16_t mount_root_rdonly;             /* 0x1f2 */
89         uint8_t  reserved7[4];                  /* 0x1f4 */
90         uint16_t ramdisk_flags;                 /* 0x1f8 */
91 #define RAMDISK_IMAGE_START_MASK        0x07FF
92 #define RAMDISK_PROMPT_FLAG             0x8000
93 #define RAMDISK_LOAD_FLAG               0x4000
94         uint16_t vid_mode;                      /* 0x1fa */
95         uint16_t root_dev;                      /* 0x1fc */
96         uint8_t  reserved9[1];                  /* 0x1fe */
97         uint8_t  aux_device_info;               /* 0x1ff */
98         /* 2.00+ */
99         uint8_t  reserved10[2];                 /* 0x200 */
100         uint8_t  header_magic[4];               /* 0x202 */
101         uint16_t protocol_version;              /* 0x206 */
102         uint8_t  reserved11[8];                 /* 0x208 */
103         uint8_t  loader_type;                   /* 0x210 */
104 #define LOADER_TYPE_LOADLIN         1
105 #define LOADER_TYPE_BOOTSECT_LOADER 2
106 #define LOADER_TYPE_SYSLINUX        3
107 #define LOADER_TYPE_ETHERBOOT       4
108 #define LOADER_TYPE_UNKNOWN         0xFF
109         uint8_t  loader_flags;                  /* 0x211 */
110         uint8_t  reserved12[2];                 /* 0x212 */
111         uint32_t kernel_start;                  /* 0x214 */
112         uint32_t initrd_start;                  /* 0x218 */
113         uint32_t initrd_size;                   /* 0x21c */
114         uint8_t  reserved13[4];                 /* 0x220 */
115         /* 2.01+ */
116         uint16_t heap_end_ptr;                  /* 0x224 */
117         uint8_t  reserved14[2];                 /* 0x226 */
118         /* 2.02+ */
119         uint32_t cmd_line_ptr;                  /* 0x228 */
120         /* 2.03+ */
121         uint32_t initrd_addr_max;               /* 0x22c */
122         uint8_t  reserved15[160];               /* 0x230 */
123         struct e820entry e820_map[E820MAX];     /* 0x2d0 */
124                                                 /* 0x550 */
125 #define COMMAND_LINE_SIZE 256
126 };
127
128 struct x86_linux_header {
129         uint8_t  reserved1[0x1f1];              /* 0x000 */
130         uint8_t  setup_sects;                   /* 0x1f1 */
131         uint16_t root_flags;                    /* 0x1f2 */
132         uint8_t  reserved2[6];                  /* 0x1f4 */
133         uint16_t vid_mode;                      /* 0x1fa */
134         uint16_t root_dev;                      /* 0x1fc */
135         uint16_t boot_sector_magic;             /* 0x1fe */
136         /* 2.00+ */
137         uint8_t  reserved3[2];                  /* 0x200 */
138         uint8_t  header_magic[4];               /* 0x202 */
139         uint16_t protocol_version;              /* 0x206 */
140         uint32_t realmode_swtch;                /* 0x208 */
141         uint16_t start_sys;                     /* 0x20c */
142         uint16_t kver_addr;                     /* 0x20e */
143         uint8_t  type_of_loader;                /* 0x210 */
144         uint8_t  loadflags;                     /* 0x211 */
145         uint16_t setup_move_size;               /* 0x212 */
146         uint32_t code32_start;                  /* 0x214 */
147         uint32_t ramdisk_image;                 /* 0x218 */
148         uint32_t ramdisk_size;                  /* 0x21c */
149         uint8_t  reserved4[4];                  /* 0x220 */
150         /* 2.01+ */
151         uint16_t heap_end_ptr;                  /* 0x224 */
152         uint8_t  reserved5[2];                  /* 0x226 */
153         /* 2.02+ */
154         uint32_t cmd_line_ptr;                  /* 0x228 */
155         /* 2.03+ */
156         uint32_t initrd_addr_max;               /* 0x22c */
157         uint8_t  tail[32*1024];                 /* 0x230 */
158 } __attribute__ ((packed));
159
160 #endif /* ASSEMBLY */
161
162 #endif /* X86_LINUX_H */