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