xref: /titanic_51/usr/src/boot/sys/boot/i386/libi386/linux.h (revision 4a5d661a82b942b6538acd26209d959ce98b593a)
1*4a5d661aSToomas Soome /*
2*4a5d661aSToomas Soome  * This file and its contents are supplied under the terms of the
3*4a5d661aSToomas Soome  * Common Development and Distribution License ("CDDL"), version 1.0.
4*4a5d661aSToomas Soome  * You may only use this file in accordance with the terms of version
5*4a5d661aSToomas Soome  * 1.0 of the CDDL.
6*4a5d661aSToomas Soome  *
7*4a5d661aSToomas Soome  * A full copy of the text of the CDDL should have accompanied this
8*4a5d661aSToomas Soome  * source.  A copy of the CDDL is also available via the Internet at
9*4a5d661aSToomas Soome  * http://www.illumos.org/license/CDDL.
10*4a5d661aSToomas Soome  */
11*4a5d661aSToomas Soome 
12*4a5d661aSToomas Soome /*
13*4a5d661aSToomas Soome  * Copyright 2015 Toomas Soome <tsoome@me.com>
14*4a5d661aSToomas Soome  */
15*4a5d661aSToomas Soome 
16*4a5d661aSToomas Soome #ifndef _LINUX_H
17*4a5d661aSToomas Soome #define	_LINUX_H
18*4a5d661aSToomas Soome 
19*4a5d661aSToomas Soome #ifdef __cplusplus
20*4a5d661aSToomas Soome extern "C" {
21*4a5d661aSToomas Soome #endif
22*4a5d661aSToomas Soome 
23*4a5d661aSToomas Soome #ifndef ASM_FILE
24*4a5d661aSToomas Soome /* For the Linux/i386 boot protocol version 2.10.  */
25*4a5d661aSToomas Soome struct linux_kernel_header
26*4a5d661aSToomas Soome {
27*4a5d661aSToomas Soome   uint8_t code1[0x0020];
28*4a5d661aSToomas Soome   uint16_t cl_magic;               /* Magic number 0xA33F */
29*4a5d661aSToomas Soome   uint16_t cl_offset;              /* The offset of command line */
30*4a5d661aSToomas Soome   uint8_t code2[0x01F1 - 0x0020 - 2 - 2];
31*4a5d661aSToomas Soome   uint8_t setup_sects;             /* The size of the setup in sectors */
32*4a5d661aSToomas Soome   uint16_t root_flags;             /* If the root is mounted readonly */
33*4a5d661aSToomas Soome   uint16_t syssize;                /* obsolete */
34*4a5d661aSToomas Soome   uint16_t swap_dev;               /* obsolete */
35*4a5d661aSToomas Soome   uint16_t ram_size;               /* obsolete */
36*4a5d661aSToomas Soome   uint16_t vid_mode;               /* Video mode control */
37*4a5d661aSToomas Soome   uint16_t root_dev;               /* Default root device number */
38*4a5d661aSToomas Soome   uint16_t boot_flag;              /* 0xAA55 magic number */
39*4a5d661aSToomas Soome   uint16_t jump;                   /* Jump instruction */
40*4a5d661aSToomas Soome   uint32_t header;                 /* Magic signature "HdrS" */
41*4a5d661aSToomas Soome   uint16_t version;                /* Boot protocol version supported */
42*4a5d661aSToomas Soome   uint32_t realmode_swtch;         /* Boot loader hook */
43*4a5d661aSToomas Soome   uint16_t start_sys;              /* The load-low segment (obsolete) */
44*4a5d661aSToomas Soome   uint16_t kernel_version;         /* Points to kernel version string */
45*4a5d661aSToomas Soome   uint8_t type_of_loader;          /* Boot loader identifier */
46*4a5d661aSToomas Soome   uint8_t loadflags;               /* Boot protocol option flags */
47*4a5d661aSToomas Soome   uint16_t setup_move_size;        /* Move to high memory size */
48*4a5d661aSToomas Soome   uint32_t code32_start;           /* Boot loader hook */
49*4a5d661aSToomas Soome   uint32_t ramdisk_image;          /* initrd load address */
50*4a5d661aSToomas Soome   uint32_t ramdisk_size;           /* initrd size */
51*4a5d661aSToomas Soome   uint32_t bootsect_kludge;        /* obsolete */
52*4a5d661aSToomas Soome   uint16_t heap_end_ptr;           /* Free memory after setup end */
53*4a5d661aSToomas Soome   uint16_t pad1;                   /* Unused */
54*4a5d661aSToomas Soome   uint32_t cmd_line_ptr;           /* Points to the kernel command line */
55*4a5d661aSToomas Soome   uint32_t initrd_addr_max;        /* Highest address for initrd */
56*4a5d661aSToomas Soome   uint32_t kernel_alignment;
57*4a5d661aSToomas Soome   uint8_t relocatable;
58*4a5d661aSToomas Soome   uint8_t min_alignment;
59*4a5d661aSToomas Soome   uint8_t pad[2];
60*4a5d661aSToomas Soome   uint32_t cmdline_size;
61*4a5d661aSToomas Soome   uint32_t hardware_subarch;
62*4a5d661aSToomas Soome   uint64_t hardware_subarch_data;
63*4a5d661aSToomas Soome   uint32_t payload_offset;
64*4a5d661aSToomas Soome   uint32_t payload_length;
65*4a5d661aSToomas Soome   uint64_t setup_data;
66*4a5d661aSToomas Soome   uint64_t pref_address;
67*4a5d661aSToomas Soome   uint32_t init_size;
68*4a5d661aSToomas Soome } __attribute__ ((packed));
69*4a5d661aSToomas Soome #endif
70*4a5d661aSToomas Soome 
71*4a5d661aSToomas Soome #define	LINUX_VID_MODE_NORMAL		0xFFFF
72*4a5d661aSToomas Soome #define	LINUX_VID_MODE_EXTENDED		0xFFFE
73*4a5d661aSToomas Soome #define	LINUX_VID_MODE_ASK		0xFFFD
74*4a5d661aSToomas Soome 
75*4a5d661aSToomas Soome #define	BOOTSEC_SIGNATURE		0xAA55
76*4a5d661aSToomas Soome #define	LINUX_BOOT_LOADER_TYPE		0x72
77*4a5d661aSToomas Soome #define	LINUX_BZIMAGE_ADDR		0x100000
78*4a5d661aSToomas Soome #define	LINUX_CL_END_OFFSET		0x90FF
79*4a5d661aSToomas Soome #define	LINUX_CL_MAGIC			0xA33F
80*4a5d661aSToomas Soome #define	LINUX_CL_OFFSET			0x9000
81*4a5d661aSToomas Soome #define	LINUX_DEFAULT_SETUP_SECTS	4
82*4a5d661aSToomas Soome #define	LINUX_ESP			0x9000
83*4a5d661aSToomas Soome #define	LINUX_FLAG_BIG_KERNEL		0x1
84*4a5d661aSToomas Soome #define	LINUX_FLAG_CAN_USE_HEAP		0x80
85*4a5d661aSToomas Soome #define	LINUX_HEAP_END_OFFSET		(0x9000 - 0x200)
86*4a5d661aSToomas Soome #define	LINUX_MAGIC_SIGNATURE		0x53726448
87*4a5d661aSToomas Soome #define	LINUX_MAX_SETUP_SECTS		64
88*4a5d661aSToomas Soome #define	LINUX_OLD_REAL_MODE_ADDR	0x90000
89*4a5d661aSToomas Soome #define	LINUX_SETUP_MOVE_SIZE		0x9100
90*4a5d661aSToomas Soome #define	LINUX_ZIMAGE_ADDR		0x10000
91*4a5d661aSToomas Soome #define	LINUX_INITRD_MAX_ADDRESS	0x38000000
92*4a5d661aSToomas Soome 
93*4a5d661aSToomas Soome #ifdef __cplusplus
94*4a5d661aSToomas Soome }
95*4a5d661aSToomas Soome #endif
96*4a5d661aSToomas Soome 
97*4a5d661aSToomas Soome #endif /* _LINUX_H */
98