diff options
| author | fishsoupisgood <github@madingley.org> | 2019-04-29 01:17:54 +0100 | 
|---|---|---|
| committer | fishsoupisgood <github@madingley.org> | 2019-05-27 03:43:43 +0100 | 
| commit | 3f2546b2ef55b661fd8dd69682b38992225e86f6 (patch) | |
| tree | 65ca85f13617aee1dce474596800950f266a456c /roms/openbios/include/arch/common | |
| download | qemu-master.tar.gz qemu-master.tar.bz2 qemu-master.zip | |
Diffstat (limited to 'roms/openbios/include/arch/common')
| -rw-r--r-- | roms/openbios/include/arch/common/a.out.h | 271 | ||||
| -rw-r--r-- | roms/openbios/include/arch/common/elf.h | 227 | ||||
| -rw-r--r-- | roms/openbios/include/arch/common/elf_boot.h | 105 | ||||
| -rw-r--r-- | roms/openbios/include/arch/common/fw_cfg.h | 90 | ||||
| -rw-r--r-- | roms/openbios/include/arch/common/nvram.h | 24 | ||||
| -rw-r--r-- | roms/openbios/include/arch/common/xcoff.h | 98 | 
6 files changed, 815 insertions, 0 deletions
| diff --git a/roms/openbios/include/arch/common/a.out.h b/roms/openbios/include/arch/common/a.out.h new file mode 100644 index 00000000..350babd7 --- /dev/null +++ b/roms/openbios/include/arch/common/a.out.h @@ -0,0 +1,271 @@ +#ifndef __A_OUT_GNU_H__ +#define __A_OUT_GNU_H__ + +#define __GNU_EXEC_MACROS__ + +#ifndef __STRUCT_EXEC_OVERRIDE__ + +#include "asm/a.out.h" + +#endif /* __STRUCT_EXEC_OVERRIDE__ */ + +/* these go in the N_MACHTYPE field */ +enum machine_type { +#if defined (M_OLDSUN2) +  M__OLDSUN2 = M_OLDSUN2, +#else +  M_OLDSUN2 = 0, +#endif +#if defined (M_68010) +  M__68010 = M_68010, +#else +  M_68010 = 1, +#endif +#if defined (M_68020) +  M__68020 = M_68020, +#else +  M_68020 = 2, +#endif +#if defined (M_SPARC) +  M__SPARC = M_SPARC, +#else +  M_SPARC = 3, +#endif +  /* skip a bunch so we don't run into any of sun's numbers */ +  M_386 = 100, +  M_MIPS1 = 151,	/* MIPS R3000/R3000 binary */ +  M_MIPS2 = 152		/* MIPS R6000/R4000 binary */ +}; + +#if !defined (N_MAGIC) +#define N_MAGIC(exec) ((exec).a_info & 0xffff) +#endif +#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff)) +#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff) +#define N_SET_INFO(exec, magic, type, flags) \ +	((exec).a_info = ((magic) & 0xffff) \ +	 | (((int)(type) & 0xff) << 16) \ +	 | (((flags) & 0xff) << 24)) +#define N_SET_MAGIC(exec, magic) \ +	((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff))) + +#define N_SET_MACHTYPE(exec, machtype) \ +	((exec).a_info = \ +	 ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16)) + +#define N_SET_FLAGS(exec, flags) \ +	((exec).a_info = \ +	 ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24)) + +/* Code indicating object file or impure executable.  */ +#define OMAGIC 0407 +/* Code indicating pure executable.  */ +#define NMAGIC 0410 +/* Code indicating demand-paged executable.  */ +#define ZMAGIC 0413 +/* This indicates a demand-paged executable with the header in the text. +   The first page is unmapped to help trap NULL pointer references */ +#define QMAGIC 0314 + +/* Code indicating core file.  */ +#define CMAGIC 0421 + +#if !defined (N_BADMAG) +#define N_BADMAG(x)	  (N_MAGIC(x) != OMAGIC		\ +			&& N_MAGIC(x) != NMAGIC		\ +  			&& N_MAGIC(x) != ZMAGIC \ +		        && N_MAGIC(x) != QMAGIC) +#endif + +#define _N_HDROFF(x) (1024 - sizeof (struct exec)) + +#if !defined (N_TXTOFF) +#define N_TXTOFF(x) \ + (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : \ +  (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec))) +#endif + +#if !defined (N_DATOFF) +#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) +#endif + +#if !defined (N_TRELOFF) +#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) +#endif + +#if !defined (N_DRELOFF) +#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x)) +#endif + +#if !defined (N_SYMOFF) +#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x)) +#endif + +#if !defined (N_STROFF) +#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x)) +#endif + +/* Address of text segment in memory after it is loaded.  */ +#if !defined (N_TXTADDR) +#define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? PAGE_SIZE : 0) +#endif + +/* Address of data segment in memory after it is loaded. +   Note that it is up to you to define SEGMENT_SIZE +   on machines not listed here.  */ +#if defined(vax) || defined(hp300) || defined(pyr) +#define SEGMENT_SIZE page_size +#endif +#ifdef	sony +#define	SEGMENT_SIZE	0x2000 +#endif	/* Sony.  */ +#ifdef is68k +#define SEGMENT_SIZE 0x20000 +#endif +#if defined(m68k) && defined(PORTAR) +#define PAGE_SIZE 0x400 +#define SEGMENT_SIZE PAGE_SIZE +#endif + +#if !defined(SEGMENT_SIZE) +#ifdef linux +#if defined(__i386__) || defined(__mc68000__) +#define SEGMENT_SIZE	1024 +#elif defined(__sparc__) +#define SEGMENT_SIZE    0x2000 +#else +#if defined(PAGE_SIZE) +#define SEGMENT_SIZE	PAGE_SIZE +#endif +#endif +#endif +#endif + +#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) + +#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) + +#ifndef N_DATADDR +#define N_DATADDR(x) \ +    (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ +     : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) +#endif + +/* Address of bss segment in memory after it is loaded.  */ +#if !defined (N_BSSADDR) +#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) +#endif + +#if !defined (N_NLIST_DECLARED) +struct nlist { +  union { +    char *n_name; +    struct nlist *n_next; +    long n_strx; +  } n_un; +  unsigned char n_type; +  char n_other; +  short n_desc; +  unsigned long n_value; +}; +#endif /* no N_NLIST_DECLARED.  */ + +#if !defined (N_UNDF) +#define N_UNDF 0 +#endif +#if !defined (N_ABS) +#define N_ABS 2 +#endif +#if !defined (N_TEXT) +#define N_TEXT 4 +#endif +#if !defined (N_DATA) +#define N_DATA 6 +#endif +#if !defined (N_BSS) +#define N_BSS 8 +#endif +#if !defined (N_FN) +#define N_FN 15 +#endif + +#if !defined (N_EXT) +#define N_EXT 1 +#endif +#if !defined (N_TYPE) +#define N_TYPE 036 +#endif +#if !defined (N_STAB) +#define N_STAB 0340 +#endif + +/* The following type indicates the definition of a symbol as being +   an indirect reference to another symbol.  The other symbol +   appears as an undefined reference, immediately following this symbol. + +   Indirection is asymmetrical.  The other symbol's value will be used +   to satisfy requests for the indirect symbol, but not vice versa. +   If the other symbol does not have a definition, libraries will +   be searched to find a definition.  */ +#define N_INDR 0xa + +/* The following symbols refer to set elements. +   All the N_SET[ATDB] symbols with the same name form one set. +   Space is allocated for the set in the text section, and each set +   element's value is stored into one word of the space. +   The first word of the space is the length of the set (number of elements). + +   The address of the set is made into an N_SETV symbol +   whose name is the same as the name of the set. +   This symbol acts like a N_DATA global symbol +   in that it can satisfy undefined external references.  */ + +/* These appear as input to LD, in a .o file.  */ +#define	N_SETA	0x14		/* Absolute set element symbol */ +#define	N_SETT	0x16		/* Text set element symbol */ +#define	N_SETD	0x18		/* Data set element symbol */ +#define	N_SETB	0x1A		/* Bss set element symbol */ + +/* This is output from LD.  */ +#define N_SETV	0x1C		/* Pointer to set vector in data area.  */ + +#if !defined (N_RELOCATION_INFO_DECLARED) +/* This structure describes a single relocation to be performed. +   The text-relocation section of the file is a vector of these structures, +   all of which apply to the text section. +   Likewise, the data-relocation section applies to the data section.  */ + +struct relocation_info +{ +  /* Address (within segment) to be relocated.  */ +  int r_address; +  /* The meaning of r_symbolnum depends on r_extern.  */ +  unsigned int r_symbolnum:24; +  /* Nonzero means value is a pc-relative offset +     and it should be relocated for changes in its own address +     as well as for changes in the symbol or section specified.  */ +  unsigned int r_pcrel:1; +  /* Length (as exponent of 2) of the field to be relocated. +     Thus, a value of 2 indicates 1<<2 bytes.  */ +  unsigned int r_length:2; +  /* 1 => relocate with value of symbol. +          r_symbolnum is the index of the symbol +	  in file's the symbol table. +     0 => relocate with the address of a segment. +          r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS +	  (the N_EXT bit may be set also, but signifies nothing).  */ +  unsigned int r_extern:1; +  /* Four bits that aren't used, but when writing an object file +     it is desirable to clear them.  */ +#ifdef NS32K +  unsigned r_bsr:1; +  unsigned r_disp:1; +  unsigned r_pad:2; +#else +  unsigned int r_pad:4; +#endif +}; +#endif /* no N_RELOCATION_INFO_DECLARED.  */ + + +#endif /* __A_OUT_GNU_H__ */ diff --git a/roms/openbios/include/arch/common/elf.h b/roms/openbios/include/arch/common/elf.h new file mode 100644 index 00000000..f2cca558 --- /dev/null +++ b/roms/openbios/include/arch/common/elf.h @@ -0,0 +1,227 @@ +#ifndef ELF_H +#define ELF_H + +#define EI_NIDENT	16	/* Size of e_ident array. */ + +/* Values for e_type. */ +#define ET_NONE		0	/* No file type */ +#define ET_REL		1	/* Relocatable file */ +#define ET_EXEC		2	/* Executable file */ +#define ET_DYN		3	/* Shared object file */ +#define ET_CORE		4	/* Core file */ + +/* Values for e_machine (architecute). */ +#define EM_NONE		 0		/* No machine */ +#define EM_M32		 1		/* AT&T WE 32100 */ +#define EM_SPARC	 2		/* SUN SPARC */ +#define EM_386		 3		/* Intel 80386+ */ +#define EM_68K		 4		/* Motorola m68k family */ +#define EM_88K		 5		/* Motorola m88k family */ +#define EM_486		 6		/* Perhaps disused */ +#define EM_860		 7		/* Intel 80860 */ +#define EM_MIPS		 8		/* MIPS R3000 big-endian */ +#define EM_S370		 9		/* IBM System/370 */ +#define EM_MIPS_RS3_LE	10		/* MIPS R3000 little-endian */ + +#define EM_PARISC	15		/* HPPA */ +#define EM_VPP500	17		/* Fujitsu VPP500 */ +#define EM_SPARC32PLUS	18		/* Sun's "v8plus" */ +#define EM_960		19		/* Intel 80960 */ +#define EM_PPC		20		/* PowerPC */ +#define EM_PPC64	21		/* PowerPC 64-bit */ +#define EM_S390		22		/* IBM S390 */ + +#define EM_V800		36		/* NEC V800 series */ +#define EM_FR20		37		/* Fujitsu FR20 */ +#define EM_RH32		38		/* TRW RH-32 */ +#define EM_RCE		39		/* Motorola RCE */ +#define EM_ARM		40		/* ARM */ +#define EM_FAKE_ALPHA	41		/* Digital Alpha */ +#define EM_SH		42		/* Hitachi SH */ +#define EM_SPARCV9	43		/* SPARC v9 64-bit */ +#define EM_TRICORE	44		/* Siemens Tricore */ +#define EM_ARC		45		/* Argonaut RISC Core */ +#define EM_H8_300	46		/* Hitachi H8/300 */ +#define EM_H8_300H	47		/* Hitachi H8/300H */ +#define EM_H8S		48		/* Hitachi H8S */ +#define EM_H8_500	49		/* Hitachi H8/500 */ +#define EM_IA_64	50		/* Intel Merced */ +#define EM_MIPS_X	51		/* Stanford MIPS-X */ +#define EM_COLDFIRE	52		/* Motorola Coldfire */ +#define EM_68HC12	53		/* Motorola M68HC12 */ +#define EM_MMA		54		/* Fujitsu MMA Multimedia Accelerator*/ +#define EM_PCP		55		/* Siemens PCP */ +#define EM_NCPU		56		/* Sony nCPU embeeded RISC */ +#define EM_NDR1		57		/* Denso NDR1 microprocessor */ +#define EM_STARCORE	58		/* Motorola Start*Core processor */ +#define EM_ME16		59		/* Toyota ME16 processor */ +#define EM_ST100	60		/* STMicroelectronic ST100 processor */ +#define EM_TINYJ	61		/* Advanced Logic Corp. Tinyj emb.fam*/ +#define EM_X86_64	62		/* AMD x86-64 architecture */ +#define EM_PDSP		63		/* Sony DSP Processor */ + +#define EM_FX66		66		/* Siemens FX66 microcontroller */ +#define EM_ST9PLUS	67		/* STMicroelectronics ST9+ 8/16 mc */ +#define EM_ST7		68		/* STmicroelectronics ST7 8 bit mc */ +#define EM_68HC16	69		/* Motorola MC68HC16 microcontroller */ +#define EM_68HC11	70		/* Motorola MC68HC11 microcontroller */ +#define EM_68HC08	71		/* Motorola MC68HC08 microcontroller */ +#define EM_68HC05	72		/* Motorola MC68HC05 microcontroller */ +#define EM_SVX		73		/* Silicon Graphics SVx */ +#define EM_AT19		74		/* STMicroelectronics ST19 8 bit mc */ +#define EM_VAX		75		/* Digital VAX */ +#define EM_CRIS		76		/* Axis Communications 32-bit embedded processor */ +#define EM_JAVELIN	77		/* Infineon Technologies 32-bit embedded processor */ +#define EM_FIREPATH	78		/* Element 14 64-bit DSP Processor */ +#define EM_ZSP		79		/* LSI Logic 16-bit DSP Processor */ +#define EM_MMIX		80		/* Donald Knuth's educational 64-bit processor */ +#define EM_HUANY	81		/* Harvard University machine-independent object files */ +#define EM_PRISM	82		/* SiTera Prism */ +#define EM_AVR		83		/* Atmel AVR 8-bit microcontroller */ +#define EM_FR30		84		/* Fujitsu FR30 */ +#define EM_D10V		85		/* Mitsubishi D10V */ +#define EM_D30V		86		/* Mitsubishi D30V */ +#define EM_V850		87		/* NEC v850 */ +#define EM_M32R		88		/* Mitsubishi M32R */ +#define EM_MN10300	89		/* Matsushita MN10300 */ +#define EM_MN10200	90		/* Matsushita MN10200 */ +#define EM_PJ		91		/* picoJava */ +#define EM_OPENRISC	92		/* OpenRISC 32-bit embedded processor */ +#define EM_ARC_A5	93		/* ARC Cores Tangent-A5 */ +#define EM_XTENSA	94		/* Tensilica Xtensa Architecture */ +#define EM_NUM		95 + +/* Values for p_type. */ +#define PT_NULL		0	/* Unused entry. */ +#define PT_LOAD		1	/* Loadable segment. */ +#define PT_DYNAMIC	2	/* Dynamic linking information segment. */ +#define PT_INTERP	3	/* Pathname of interpreter. */ +#define PT_NOTE		4	/* Auxiliary information. */ +#define PT_SHLIB	5	/* Reserved (not used). */ +#define PT_PHDR		6	/* Location of program header itself. */ + +/* Values for p_flags. */ +#define PF_X		0x1	/* Executable. */ +#define PF_W		0x2	/* Writable. */ +#define PF_R		0x4	/* Readable. */ + + +#define	ELF_PROGRAM_RETURNS_BIT	0x8000000	/* e_flags bit 31 */ + +#define EI_MAG0		0 +#define ELFMAG0		0x7f + +#define EI_MAG1		1 +#define ELFMAG1		'E' + +#define EI_MAG2		2 +#define ELFMAG2		'L' + +#define EI_MAG3		3 +#define ELFMAG3		'F' + +#define ELFMAG		"\177ELF" + +#define EI_CLASS	4	/* File class byte index */ +#define ELFCLASSNONE	0	/* Invalid class */ +#define ELFCLASS32	1	/* 32-bit objects */ +#define ELFCLASS64	2	/* 64-bit objects */ + +#define EI_DATA		5	/* Data encodeing byte index */ +#define ELFDATANONE	0	/* Invalid data encoding */ +#define ELFDATA2LSB	1	/* 2's complement little endian */ +#define ELFDATA2MSB	2	/* 2's complement big endian */ + +#define EI_VERSION	6	/* File version byte index */ +				/* Value must be EV_CURRENT */ + +#define EV_NONE		0	/* Invalid ELF Version */ +#define EV_CURRENT	1	/* Current version */ + +#define ELF32_PHDR_SIZE (8*4)	/* Size of an elf program header */ + +#ifndef __ASSEMBLY__ +#include "asm/types.h" +/* + * ELF definitions common to all 32-bit architectures. + */ + +typedef uint32_t	Elf32_Addr; +typedef uint16_t	Elf32_Half; +typedef uint32_t	Elf32_Off; +typedef int32_t		Elf32_Sword; +typedef uint32_t	Elf32_Word; +typedef uint32_t	Elf32_Size; + +typedef uint64_t	Elf64_Addr; +typedef uint16_t	Elf64_Half; +typedef uint64_t	Elf64_Off; +typedef int32_t		Elf64_Sword; +typedef uint32_t	Elf64_Word; +typedef uint64_t	Elf64_Size; + +/* + * ELF header. + */ +typedef struct { +	unsigned char	e_ident[EI_NIDENT];	/* File identification. */ +	Elf32_Half	e_type;		/* File type. */ +	Elf32_Half	e_machine;	/* Machine architecture. */ +	Elf32_Word	e_version;	/* ELF format version. */ +	Elf32_Addr	e_entry;	/* Entry point. */ +	Elf32_Off	e_phoff;	/* Program header file offset. */ +	Elf32_Off	e_shoff;	/* Section header file offset. */ +	Elf32_Word	e_flags;	/* Architecture-specific flags. */ +	Elf32_Half	e_ehsize;	/* Size of ELF header in bytes. */ +	Elf32_Half	e_phentsize;	/* Size of program header entry. */ +	Elf32_Half	e_phnum;	/* Number of program header entries. */ +	Elf32_Half	e_shentsize;	/* Size of section header entry. */ +	Elf32_Half	e_shnum;	/* Number of section header entries. */ +	Elf32_Half	e_shstrndx;	/* Section name strings section. */ +} Elf32_Ehdr; + +typedef struct { +	unsigned char	e_ident[EI_NIDENT];	/* File identification. */ +	Elf64_Half	e_type;		/* File type. */ +	Elf64_Half	e_machine;	/* Machine architecture. */ +	Elf64_Word	e_version;	/* ELF format version. */ +	Elf64_Addr	e_entry;	/* Entry point. */ +	Elf64_Off	e_phoff;	/* Program header file offset. */ +	Elf64_Off	e_shoff;	/* Section header file offset. */ +	Elf64_Word	e_flags;	/* Architecture-specific flags. */ +	Elf64_Half	e_ehsize;	/* Size of ELF header in bytes. */ +	Elf64_Half	e_phentsize;	/* Size of program header entry. */ +	Elf64_Half	e_phnum;	/* Number of program header entries. */ +	Elf64_Half	e_shentsize;	/* Size of section header entry. */ +	Elf64_Half	e_shnum;	/* Number of section header entries. */ +	Elf64_Half	e_shstrndx;	/* Section name strings section. */ +} Elf64_Ehdr; + +/* + * Program header. + */ +typedef struct { +	Elf32_Word	p_type;		/* Entry type. */ +	Elf32_Off	p_offset;	/* File offset of contents. */ +	Elf32_Addr	p_vaddr;	/* Virtual address (not used). */ +	Elf32_Addr	p_paddr;	/* Physical address. */ +	Elf32_Size	p_filesz;	/* Size of contents in file. */ +	Elf32_Size	p_memsz;	/* Size of contents in memory. */ +	Elf32_Word	p_flags;	/* Access permission flags. */ +	Elf32_Size	p_align;	/* Alignment in memory and file. */ +} Elf32_Phdr; + +typedef struct { +	Elf64_Word	p_type;		/* Entry type. */ +	Elf64_Word	p_flags;	/* Access permission flags. */ +	Elf64_Off	p_offset;	/* File offset of contents. */ +	Elf64_Addr	p_vaddr;	/* Virtual address (not used). */ +	Elf64_Addr	p_paddr;	/* Physical address. */ +	Elf64_Size	p_filesz;	/* Size of contents in file. */ +	Elf64_Size	p_memsz;	/* Size of contents in memory. */ +	Elf64_Size	p_align;	/* Alignment in memory and file. */ +} Elf64_Phdr; + +#endif /* __ASSEMBLY__ */ + +#endif /* ELF_H */ diff --git a/roms/openbios/include/arch/common/elf_boot.h b/roms/openbios/include/arch/common/elf_boot.h new file mode 100644 index 00000000..18487f6b --- /dev/null +++ b/roms/openbios/include/arch/common/elf_boot.h @@ -0,0 +1,105 @@ +#ifndef ELF_BOOT_H +#define ELF_BOOT_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_BHDR_MAGIC		0x0E1FB007 + +#ifndef __ASSEMBLY__ +typedef uint16_t Elf_Half; +typedef uint32_t Elf_Word; + +/* + * Elf boot notes... + */ + +typedef struct Elf_Bhdr +{ +	Elf_Word b_signature; /* "0x0E1FB007" */ +	Elf_Word b_size; +	Elf_Half b_checksum; +	Elf_Half b_records; +} Elf_Bhdr; + +/* + * ELF Notes. + */ + +typedef struct Elf_Nhdr +{ +	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; + +#endif /* __ASSEMBLY__ */ + +/* 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 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 */ + +/* Notes that are passed to a loaded image */ +/* For the standard elf boot notes n_namesz must be zero */ +#define EBN_FIRMWARE_TYPE	0x00000001 +/* ASCIZ name of the platform firmware. */ +#define EBN_BOOTLOADER_NAME	0x00000002 +/* This specifies just the ASCIZ name of the bootloader */ +#define EBN_BOOTLOADER_VERSION	0x00000003 +/* This specifies the version of the bootloader as an ASCIZ string */ +#define EBN_COMMAND_LINE	0x00000004 +/* This specifies a command line that can be set by user interaction, + * and is provided as a free form ASCIZ string to the loaded image. + */ +#define EBN_NOP			0x00000005 +/* A note nop note has no meaning, useful for inserting explicit padding */ +#define EBN_LOADED_IMAGE	0x00000006 +/* An ASCIZ string naming the loaded image */ + + +/* Etherboot specific notes */ +#define EB_PARAM_NOTE		"Etherboot" +#define EB_IA64_SYSTAB		0x00000001 +#define EB_IA64_MEMMAP		0x00000002 +#define EB_IA64_FPSWA		0x00000003 +#define EB_IA64_CONINFO		0x00000004 +#define EB_BOOTP_DATA		0x00000005 +#define EB_HEADER		0x00000006 +#define EB_IA64_IMAGE_HANDLE	0x00000007 +#define EB_I386_MEMMAP		0x00000008 + +extern const struct elf_image_note elf_image_notes; + +#endif /* ELF_BOOT_H */ diff --git a/roms/openbios/include/arch/common/fw_cfg.h b/roms/openbios/include/arch/common/fw_cfg.h new file mode 100644 index 00000000..df44c2e8 --- /dev/null +++ b/roms/openbios/include/arch/common/fw_cfg.h @@ -0,0 +1,90 @@ +#ifndef FW_CFG_H +#define FW_CFG_H + +#define FW_CFG_SIGNATURE        0x00 +#define FW_CFG_ID               0x01 +#define FW_CFG_UUID             0x02 +#define FW_CFG_RAM_SIZE         0x03 +#define FW_CFG_NOGRAPHIC        0x04 +#define FW_CFG_NB_CPUS          0x05 +#define FW_CFG_MACHINE_ID       0x06 +#define FW_CFG_KERNEL_ADDR      0x07 +#define FW_CFG_KERNEL_SIZE      0x08 +#define FW_CFG_KERNEL_CMDLINE   0x09 +#define FW_CFG_INITRD_ADDR      0x0a +#define FW_CFG_INITRD_SIZE      0x0b +#define FW_CFG_BOOT_DEVICE      0x0c +#define FW_CFG_NUMA             0x0d +#define FW_CFG_BOOT_MENU        0x0e +#define FW_CFG_MAX_CPUS         0x0f +#define FW_CFG_KERNEL_ENTRY     0x10 +#define FW_CFG_KERNEL_DATA      0x11 +#define FW_CFG_INITRD_DATA      0x12 +#define FW_CFG_CMDLINE_ADDR     0x13 +#define FW_CFG_CMDLINE_SIZE     0x14 +#define FW_CFG_CMDLINE_DATA     0x15 +#define FW_CFG_SETUP_ADDR       0x16 +#define FW_CFG_SETUP_SIZE       0x17 +#define FW_CFG_SETUP_DATA       0x18 +#define FW_CFG_FILE_DIR         0x19 + +#define FW_CFG_FILE_FIRST       0x20 +#define FW_CFG_FILE_SLOTS       0x10 +#define FW_CFG_MAX_ENTRY        (FW_CFG_FILE_FIRST+FW_CFG_FILE_SLOTS) + +#define FW_CFG_WRITE_CHANNEL    0x4000 +#define FW_CFG_ARCH_LOCAL       0x8000 +#define FW_CFG_ENTRY_MASK       ~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL) + +#define FW_CFG_PPC_WIDTH        (FW_CFG_ARCH_LOCAL + 0x00) +#define FW_CFG_PPC_HEIGHT       (FW_CFG_ARCH_LOCAL + 0x01) +#define FW_CFG_PPC_DEPTH        (FW_CFG_ARCH_LOCAL + 0x02) +#define FW_CFG_PPC_TBFREQ       (FW_CFG_ARCH_LOCAL + 0x03) +#define FW_CFG_PPC_CLOCKFREQ    (FW_CFG_ARCH_LOCAL + 0x04) +#define FW_CFG_PPC_IS_KVM	(FW_CFG_ARCH_LOCAL + 0x05) +#define FW_CFG_PPC_KVM_HC	(FW_CFG_ARCH_LOCAL + 0x06) +#define FW_CFG_PPC_KVM_PID	(FW_CFG_ARCH_LOCAL + 0x07) +#define FW_CFG_PPC_NVRAM_ADDR	(FW_CFG_ARCH_LOCAL + 0x08) +#define FW_CFG_PPC_BUSFREQ      (FW_CFG_ARCH_LOCAL + 0x09) +#define FW_CFG_PPC_NVRAM_FLAT   (FW_CFG_ARCH_LOCAL + 0x0a) + +#define FW_CFG_INVALID          0xffff + +#ifndef NO_QEMU_PROTOS +typedef struct FWCfgFile { +    uint32_t  size;        /* file size */ +    uint16_t  select;      /* write this to 0x510 to read it */ +    uint16_t  reserved; +    char      name[56]; +} FWCfgFile; + +typedef struct FWCfgFiles { +    uint32_t  count; +    FWCfgFile f[]; +} FWCfgFiles; + +typedef void (*FWCfgCallback)(void *opaque, uint8_t *data); + +typedef struct _FWCfgState FWCfgState; +int fw_cfg_add_bytes(FWCfgState *s, uint16_t key, uint8_t *data, uint32_t len); +int fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value); +int fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value); +int fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value); +int fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, +                        void *callback_opaque, uint8_t *data, size_t len); +int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename, +                    uint8_t *data, uint32_t len); +FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port, +                        target_phys_addr_t crl_addr, target_phys_addr_t data_addr); + +#endif /* NO_QEMU_PROTOS */ + +#ifndef NO_OPENBIOS_PROTOS +void fw_cfg_read(uint16_t cmd, char *buf, unsigned int nbytes); +uint64_t fw_cfg_read_i64(uint16_t cmd); +uint32_t fw_cfg_read_i32(uint16_t cmd); +uint16_t fw_cfg_read_i16(uint16_t cmd); +void fw_cfg_init(void); +#endif /* NO_OPENBIOS_PROTOS */ + +#endif diff --git a/roms/openbios/include/arch/common/nvram.h b/roms/openbios/include/arch/common/nvram.h new file mode 100644 index 00000000..41b31ca7 --- /dev/null +++ b/roms/openbios/include/arch/common/nvram.h @@ -0,0 +1,24 @@ +/* + *   Creation Date: <2003/12/20 01:04:25 samuel> + *   Time-stamp: <2004/01/07 19:59:11 samuel> + * + *	<nvram.h> + * + *	arch NVRAM interface + * + *   Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) + * + *   This program is free software; you can redistribute it and/or + *   modify it under the terms of the GNU General Public License + *   version 2 + * + */ + +#ifndef _H_NVRAM +#define _H_NVRAM + +extern int	arch_nvram_size( void ); +extern void	arch_nvram_get( char *buf ); +extern void	arch_nvram_put( char *buf ); + +#endif   /* _H_NVRAM */ diff --git a/roms/openbios/include/arch/common/xcoff.h b/roms/openbios/include/arch/common/xcoff.h new file mode 100644 index 00000000..99106fe8 --- /dev/null +++ b/roms/openbios/include/arch/common/xcoff.h @@ -0,0 +1,98 @@ +#ifndef XCOFF_H +#define XCOFF_H + +/* XCOFF executable loader */ + +typedef struct COFF_filehdr_t { +	uint16_t f_magic;	/* magic number			*/ +	uint16_t f_nscns;	/* number of sections		*/ +	uint32_t f_timdat;	/* time & date stamp		*/ +	uint32_t f_symptr;	/* file pointer to symtab	*/ +	uint32_t f_nsyms;	/* number of symtab entries	*/ +	uint16_t f_opthdr;	/* sizeof(optional hdr)		*/ +	uint16_t f_flags;	/* flags			*/ +} COFF_filehdr_t; + +/* IBM RS/6000 */ + +#define U802WRMAGIC	 0x02DA	/* writeable text segments **chh**	  */ +#define U802ROMAGIC	 0x02DF	/* readonly sharable text segments	  */ +#define U802TOCMAGIC	 0x02E1	/* readonly text segments and TOC	   */ +#define U802TOMAGIC	 0x01DF + +/* + *   Bits for f_flags: + * + *	F_RELFLG	relocation info stripped from file + *	F_EXEC		file is executable  (i.e. no unresolved external + *			references) + *	F_LNNO		line numbers stripped from file + *	F_LSYMS		local symbols stripped from file + *	F_MINMAL	this is a minimal object file (".m") output of fextract + *	F_UPDATE	this is a fully bound update file, output of ogen + *	F_SWABD		this file has had its bytes swabbed (in names) + *	F_AR16WR	this file has the byte ordering of an AR16WR + *			(e.g. 11/70) machine + *	F_AR32WR	this file has the byte ordering of an AR32WR machine + *			(e.g. vax and iNTEL 386) + *	F_AR32W		this file has the byte ordering of an AR32W machine + *			(e.g. 3b,maxi) + *	F_PATCH		file contains "patch" list in optional header + *	F_NODF		(minimal file only) no decision functions for + *			replaced functions + */ + +#define	COFF_F_RELFLG		0000001 +#define	COFF_F_EXEC		0000002 +#define	COFF_F_LNNO		0000004 +#define	COFF_F_LSYMS		0000010 +#define	COFF_F_MINMAL		0000020 +#define	COFF_F_UPDATE		0000040 +#define	COFF_F_SWABD		0000100 +#define	COFF_F_AR16WR		0000200 +#define	COFF_F_AR32WR		0000400 +#define	COFF_F_AR32W		0001000 +#define	COFF_F_PATCH		0002000 +#define	COFF_F_NODF		0002000 + +typedef struct COFF_aouthdr_t { +	uint16_t magic;	     /* type of file			      */ +	uint16_t vstamp;     /* version stamp			      */ +	uint32_t tsize;	     /* text size in bytes, padded to FW bdry */ +	uint32_t dsize;	     /* initialized data "  "		      */ +	uint32_t bsize;	     /* uninitialized data "   "	      */ +	uint32_t entry;	     /* entry pt.			      */ +	uint32_t text_start; /* base of text used for this file	      */ +	uint32_t data_start; /* base of data used for this file	      */ +	uint32_t o_toc;	     /* address of TOC			      */ +	uint16_t o_snentry;  /* section number of entry point	      */ +	uint16_t o_sntext;   /* section number of .text section	      */ +	uint16_t o_sndata;   /* section number of .data section	      */ +	uint16_t o_sntoc;    /* section number of TOC		      */ +	uint16_t o_snloader; /* section number of .loader section     */ +	uint16_t o_snbss;    /* section number of .bss section	      */ +	uint16_t o_algntext; /* .text alignment			      */ +	uint16_t o_algndata; /* .data alignment			      */ +	uint16_t o_modtype;  /* module type (??)		      */ +	uint16_t o_cputype;  /* cpu type			      */ +	uint32_t o_maxstack; /* max stack size (??)		      */ +	uint32_t o_maxdata;  /* max data size (??)		      */ +	char o_resv2[12];    /* reserved			      */ +} COFF_aouthdr_t; + +#define AOUT_MAGIC	0x010b + +typedef struct COFF_scnhdr_t { +	char s_name[8];		/* section name				*/ +	uint32_t s_paddr;	/* physical address, aliased s_nlib     */ +	uint32_t s_vaddr;	/* virtual address			*/ +	uint32_t s_size;	/* section size				*/ +	uint32_t s_scnptr;	/* file ptr to raw data for section     */ +	uint32_t s_relptr;	/* file ptr to relocation		*/ +	uint32_t s_lnnoptr;	/* file ptr to line numbers		*/ +	uint16_t s_nreloc;	/* number of relocation entries		*/ +	uint16_t s_nlnno;	/* number of line number entries	*/ +	uint32_t s_flags;	/* flags				*/ +} COFF_scnhdr_t; + +#endif /* XCOFF_H */ | 
