mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
directories in include, since having all those directories has obscured understanding. Add elfboot.c to lib. Same argument, it is not in boot, it is in lib, since fewer directories is better. Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@89 f3766cd6-281f-0410-b1cd-43a5c92072e9
89 lines
2.7 KiB
C
89 lines
2.7 KiB
C
#ifndef ELF_BOOT_H
|
|
#define ELF_BOOT_H
|
|
|
|
#include <stdint.h>
|
|
|
|
/* This defines the structure of a table of parameters useful for ELF
|
|
* bootable images. These parameters are all passed and generated
|
|
* by the bootloader to the booted image. For simplicity and
|
|
* consistency the Elf Note format is reused.
|
|
*
|
|
* All of the information must be Position Independent Data.
|
|
* That is it must be safe to relocate the whole ELF boot parameter
|
|
* block without changing the meaning or correctnes of the data.
|
|
* Additionally it must be safe to permute the order of the ELF notes
|
|
* to any possible permutation without changing the meaning or correctness
|
|
* of the data.
|
|
*
|
|
*/
|
|
|
|
#define ELF_HEAD_SIZE (8*1024)
|
|
#define ELF_BOOT_MAGIC 0x0E1FB007
|
|
|
|
typedef uint16_t Elf_Half;
|
|
typedef uint32_t Elf_Word;
|
|
typedef uint64_t Elf_Xword;
|
|
|
|
typedef struct
|
|
{
|
|
Elf_Word b_signature; /* "0x0E1FB007" */
|
|
Elf_Word b_size;
|
|
Elf_Half b_checksum;
|
|
Elf_Half b_records;
|
|
} Elf_Bhdr;
|
|
|
|
typedef struct
|
|
{
|
|
Elf_Word n_namesz; /* Length of the note's name. */
|
|
Elf_Word n_descsz; /* Length of the note's descriptor. */
|
|
Elf_Word n_type; /* Type of the note. */
|
|
} Elf_Nhdr;
|
|
|
|
|
|
/* For standard notes n_namesz must be zero */
|
|
/* All of the following standard note types provide a single null
|
|
* terminated string in the descriptor.
|
|
*/
|
|
#define EBN_FIRMWARE_TYPE 0x00000001
|
|
/* On platforms that support multiple classes of firmware this field
|
|
* specifies the class of firmware you are loaded under.
|
|
*/
|
|
#define EBN_BOOTLOADER_NAME 0x00000002
|
|
/* This specifies just the name of the bootloader for easy comparison */
|
|
#define EBN_BOOTLOADER_VERSION 0x00000003
|
|
/* This specifies the version of the bootlader */
|
|
#define EBN_COMMAND_LINE 0x00000004
|
|
/* This specifies a command line that can be set by user interaction,
|
|
* and is provided as a free form string to the loaded image.
|
|
*/
|
|
|
|
|
|
/* Standardized Elf image notes for booting... The name for all of these is ELFBoot */
|
|
|
|
#define ELF_NOTE_BOOT "ELFBoot"
|
|
|
|
#define EIN_PROGRAM_NAME 0x00000001
|
|
/* The program in this ELF file */
|
|
#define EIN_PROGRAM_VERSION 0x00000002
|
|
/* The version of the program in this ELF file */
|
|
#define EIN_PROGRAM_CHECKSUM 0x00000003
|
|
/* ip style checksum of the memory image. */
|
|
|
|
|
|
/* Linux image notes for booting... The name for all of these is Linux */
|
|
|
|
#define LINUX_NOTE_BOOT "Linux"
|
|
|
|
#define LIN_COMMAND_LINE 0x00000001
|
|
/* The command line to pass to the loaded kernel. */
|
|
#define LIN_ROOT_DEV 0x00000002
|
|
/* The root dev to pass to the loaded kernel. */
|
|
#define LIN_RAMDISK_FLAGS 0x00000003
|
|
/* Various old ramdisk flags */
|
|
#define LIN_INITRD_START 0x00000004
|
|
/* Start of the ramdisk in bytes */
|
|
#define LIN_INITRD_SIZE 0x00000005
|
|
/* Size of the ramdisk in bytes */
|
|
|
|
|
|
#endif /* ELF_BOOT_H */
|