1 #ifndef ELF_BOOT_H
2 #define ELF_BOOT_H
3 
4 
5 /* This defines the structure of a table of parameters useful for ELF
6  * bootable images.  These parameters are all passed and generated
7  * by the bootloader to the booted image.  For simplicity and
8  * consistency the Elf Note format is reused.
9  *
10  * All of the information must be Position Independent Data.
11  * That is it must be safe to relocate the whole ELF boot parameter
12  * block without changing the meaning or correctnes of the data.
13  * Additionally it must be safe to permute the order of the ELF notes
14  * to any possible permutation without changing the meaning or correctness
15  * of the data.
16  *
17  */
18 
19 #define ELF_BHDR_MAGIC		0x0E1FB007
20 
21 #ifndef __ASSEMBLY__
22 typedef uint16_t Elf_Half;
23 typedef uint32_t Elf_Word;
24 
25 /*
26  * Elf boot notes...
27  */
28 
29 typedef struct Elf_Bhdr
30 {
31 	Elf_Word b_signature; /* "0x0E1FB007" */
32 	Elf_Word b_size;
33 	Elf_Half b_checksum;
34 	Elf_Half b_records;
35 } Elf_Bhdr;
36 
37 /*
38  * ELF Notes.
39  */
40 
41 typedef struct Elf_Nhdr
42 {
43 	Elf_Word n_namesz;		/* Length of the note's name.  */
44 	Elf_Word n_descsz;		/* Length of the note's descriptor.  */
45 	Elf_Word n_type;		/* Type of the note.  */
46 } Elf_Nhdr;
47 
48 #endif /* __ASSEMBLY__ */
49 
50 /* Standardized Elf image notes for booting... The name for all of these is ELFBoot */
51 #define ELF_NOTE_BOOT		"ELFBoot"
52 
53 #define EIN_PROGRAM_NAME	0x00000001
54 /* The program in this ELF file */
55 #define EIN_PROGRAM_VERSION	0x00000002
56 /* The version of the program in this ELF file */
57 #define EIN_PROGRAM_CHECKSUM	0x00000003
58 /* ip style checksum of the memory image. */
59 
60 
61 /* Linux image notes for booting... The name for all of these is Linux */
62 
63 #define LIN_COMMAND_LINE	0x00000001
64 /* The command line to pass to the loaded kernel. */
65 #define LIN_ROOT_DEV		0x00000002
66 /* The root dev to pass to the loaded kernel. */
67 #define LIN_RAMDISK_FLAGS	0x00000003
68 /* Various old ramdisk flags */
69 #define LIN_INITRD_START	0x00000004
70 /* Start of the ramdisk in bytes */
71 #define LIN_INITRD_SIZE		0x00000005
72 /* Size of the ramdisk in bytes */
73 
74 /* Notes that are passed to a loaded image */
75 /* For the standard elf boot notes n_namesz must be zero */
76 #define EBN_FIRMWARE_TYPE	0x00000001
77 /* ASCIZ name of the platform firmware. */
78 #define EBN_BOOTLOADER_NAME	0x00000002
79 /* This specifies just the ASCIZ name of the bootloader */
80 #define EBN_BOOTLOADER_VERSION	0x00000003
81 /* This specifies the version of the bootloader as an ASCIZ string */
82 #define EBN_COMMAND_LINE	0x00000004
83 /* This specifies a command line that can be set by user interaction,
84  * and is provided as a free form ASCIZ string to the loaded image.
85  */
86 #define EBN_NOP			0x00000005
87 /* A note nop note has no meaning, useful for inserting explicit padding */
88 #define EBN_LOADED_IMAGE	0x00000006
89 /* An ASCIZ string naming the loaded image */
90 
91 
92 /* Etherboot specific notes */
93 #define EB_PARAM_NOTE		"Etherboot"
94 #define EB_IA64_SYSTAB		0x00000001
95 #define EB_IA64_MEMMAP		0x00000002
96 #define EB_IA64_FPSWA		0x00000003
97 #define EB_IA64_CONINFO		0x00000004
98 #define EB_BOOTP_DATA		0x00000005
99 #define EB_HEADER		0x00000006
100 #define EB_IA64_IMAGE_HANDLE	0x00000007
101 #define EB_I386_MEMMAP		0x00000008
102 
103 extern const struct elf_image_note elf_image_notes;
104 
105 #endif /* ELF_BOOT_H */
106