ee4d6a4cc4e5ab3468a38bbcde1891bb52e3882d
[barrelfish] / tools / weever / kernel_boot_param.h
1 /**
2  * \file
3  * \brief Struct definition for the boot param struct supplied by the
4  *        K1OM boot loader
5  */
6
7 /*
8  * Copyright (c) 2013 ETH Zurich.
9  * All rights reserved.
10  *
11  * This file is distributed under the terms in the attached LICENSE file.
12  * If you do not find this file, copies can be found by writing to:
13  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
14  */
15
16
17 /*
18  * The kernel boot param structure is adapted from the Linux boot params
19  * specifications.
20  */
21
22 #ifndef KERNEL_BOOT_PARAM_H
23 #define KERNEL_BOOT_PARAM_H
24
25 #include "kernel_boot_param/screen_info.h"
26 #include "kernel_boot_param/apm_bios.h"
27 #include "kernel_boot_param/ist_bios.h"
28 #include "kernel_boot_param/edd.h"
29 #include "kernel_boot_param/e820.h"
30
31 struct edid_info
32 {
33     unsigned char dummy[128];
34 };
35
36 /* setup data types */
37 #define SETUP_NONE                      0
38 #define SETUP_E820_EXT                  1
39
40 /* extensible setup data list node */
41 struct setup_data
42 {
43     uint64_t next;
44     uint32_t type;
45     uint32_t len;
46     uint8_t data[0];
47 };
48
49 struct setup_header
50 {
51     uint8_t setup_sects;
52     uint16_t root_flags;
53     uint32_t syssize;
54     uint16_t ram_size;
55 #define RAMDISK_IMAGE_START_MASK        0x07FF
56 #define RAMDISK_PROMPT_FLAG             0x8000
57 #define RAMDISK_LOAD_FLAG               0x4000
58     uint16_t vid_mode;
59     uint16_t root_dev;
60     uint16_t boot_flag;
61     uint16_t jump;
62     uint32_t header;
63     uint16_t version;
64     uint32_t realmode_swtch;
65     uint16_t start_sys;
66     uint16_t kernel_version;
67     uint8_t type_of_loader;
68     uint8_t loadflags;
69 #define LOADED_HIGH     (1<<0)
70 #define QUIET_FLAG      (1<<5)
71 #define KEEP_SEGMENTS   (1<<6)
72 #define CAN_USE_HEAP    (1<<7)
73     uint16_t setup_move_size;
74     uint32_t code32_start;
75     uint32_t ramdisk_image;
76     uint32_t ramdisk_size;
77     uint32_t bootsect_kludge;
78     uint16_t heap_end_ptr;
79     uint8_t ext_loader_ver;
80     uint8_t ext_loader_type;
81     uint32_t cmd_line_ptr;
82     uint32_t initrd_addr_max;
83     uint32_t kernel_alignment;
84     uint8_t relocatable_kernel;
85     uint8_t _pad2[3];
86     uint32_t cmdline_size;
87     uint32_t hardware_subarch;
88     uint64_t hardware_subarch_data;
89     uint32_t payload_offset;
90     uint32_t payload_length;
91     uint64_t setup_data;
92 }__attribute__((packed));
93
94 struct sys_desc_table
95 {
96     uint16_t length;
97     uint8_t table[14];
98 };
99
100 /* Gleaned from OFW's set-parameters in cpu/x86/pc/linux.fth */
101 struct olpc_ofw_header
102 {
103     uint32_t ofw_magic; /* OFW signature */
104     uint32_t ofw_version;
105     uint32_t cif_handler; /* callback into OFW */
106     uint32_t irq_desc_table;
107 }__attribute__((packed));
108
109 struct efi_info
110 {
111     uint32_t efi_loader_signature;
112     uint32_t efi_systab;
113     uint32_t efi_memdesc_size;
114     uint32_t efi_memdesc_version;
115     uint32_t efi_memmap;
116     uint32_t efi_memmap_size;
117     uint32_t efi_systab_hi;
118     uint32_t efi_memmap_hi;
119 };
120
121 /* The so-called "zeropage" */
122 struct boot_params
123 {
124     struct screen_info screen_info; /* 0x000 */
125     struct apm_bios_info apm_bios_info; /* 0x040 */
126     uint8_t _pad2[4]; /* 0x054 */
127     uint64_t tboot_addr; /* 0x058 */
128     struct ist_info ist_info; /* 0x060 */
129     uint8_t _pad3[16]; /* 0x070 */
130     uint8_t hd0_info[16]; /* obsolete! *//* 0x080 */
131     uint8_t hd1_info[16]; /* obsolete! *//* 0x090 */
132     struct sys_desc_table sys_desc_table; /* 0x0a0 */
133     struct olpc_ofw_header olpc_ofw_header; /* 0x0b0 */
134     uint8_t _pad4[128]; /* 0x0c0 */
135     struct edid_info edid_info; /* 0x140 */
136     struct efi_info efi_info; /* 0x1c0 */
137     uint32_t alt_mem_k; /* 0x1e0 */
138     uint32_t scratch; /* Scratch field! *//* 0x1e4 */
139     uint8_t e820_entries; /* 0x1e8 */
140     uint8_t eddbuf_entries; /* 0x1e9 */
141     uint8_t edd_mbr_sig_buf_entries; /* 0x1ea */
142     uint8_t _pad6[6]; /* 0x1eb */
143     struct setup_header hdr; /* setup header *//* 0x1f1 */
144     uint8_t _pad7[0x290 - 0x1f1 - sizeof(struct setup_header)];
145     uint32_t edd_mbr_sig_buffer[EDD_MBR_SIG_MAX]; /* 0x290 */
146     struct e820entry e820_map[E820MAX]; /* 0x2d0 */
147     uint8_t _pad8[48]; /* 0xcd0 */
148     struct edd_info eddbuf[EDDMAXNR]; /* 0xd00 */
149     uint8_t _pad9[276]; /* 0xeec */
150 }__attribute__((packed));
151
152 enum
153 {
154     X86_SUBARCH_PC = 0,
155     X86_SUBARCH_LGUEST,
156     X86_SUBARCH_XEN,
157     X86_SUBARCH_MRST,
158     X86_SUBARCH_CE4100,
159     X86_NR_SUBARCHS,
160 };
161
162 #endif /* KERNEL_BOOT_PARAM_H */