diff options
Diffstat (limited to 'arch/x86/lib/bios.h')
| -rw-r--r-- | arch/x86/lib/bios.h | 201 | 
1 files changed, 141 insertions, 60 deletions
| diff --git a/arch/x86/lib/bios.h b/arch/x86/lib/bios.h index 4a9cdb591..a220983df 100644 --- a/arch/x86/lib/bios.h +++ b/arch/x86/lib/bios.h @@ -24,69 +24,150 @@  #ifndef _BIOS_H_  #define _BIOS_H_ -#define OFFS_ES      0     /* 16bit */ -#define OFFS_GS      2     /* 16bit */ -#define OFFS_DS      4     /* 16bit */ -#define OFFS_EDI     6     /* 32bit */ -#define OFFS_DI      6     /* low 16 bits of EDI */ -#define OFFS_ESI     10    /* 32bit */ -#define OFFS_SI      10    /* low 16 bits of ESI */ -#define OFFS_EBP     14    /* 32bit */ -#define OFFS_BP      14    /* low 16 bits of EBP */ -#define OFFS_ESP     18    /* 32bit */ -#define OFFS_SP      18    /* low 16 bits of ESP */ -#define OFFS_EBX     22    /* 32bit */ -#define OFFS_BX      22    /* low 16 bits of EBX */ -#define OFFS_BL      22    /* low  8 bits of BX */ -#define OFFS_BH      23    /* high 8 bits of BX */ -#define OFFS_EDX     26    /* 32bit */ -#define OFFS_DX      26    /* low 16 bits of EBX */ -#define OFFS_DL      26    /* low  8 bits of BX */ -#define OFFS_DH      27    /* high 8 bits of BX */ -#define OFFS_ECX     30    /* 32bit */ -#define OFFS_CX      30    /* low 16 bits of EBX */ -#define OFFS_CL      30    /* low  8 bits of BX */ -#define OFFS_CH      31    /* high 8 bits of BX */ -#define OFFS_EAX     34    /* 32bit */ -#define OFFS_AX      34    /* low 16 bits of EBX */ -#define OFFS_AL      34    /* low  8 bits of BX */ -#define OFFS_AH      35    /* high 8 bits of BX */ -#define OFFS_VECTOR  38    /* 16bit */ -#define OFFS_IP      40    /* 16bit */ -#define OFFS_CS      42    /* 16bit */ -#define OFFS_FLAGS   44    /* 16bit */ +#define OFFS_ES		0	/* 16bit */ +#define OFFS_GS		2	/* 16bit */ +#define OFFS_DS		4	/* 16bit */ +#define OFFS_EDI	6	/* 32bit */ +#define OFFS_DI		6	/* low 16 bits of EDI */ +#define OFFS_ESI	10	/* 32bit */ +#define OFFS_SI		10	/* low 16 bits of ESI */ +#define OFFS_EBP	14	/* 32bit */ +#define OFFS_BP		14	/* low 16 bits of EBP */ +#define OFFS_ESP	18	/* 32bit */ +#define OFFS_SP		18	/* low 16 bits of ESP */ +#define OFFS_EBX	22	/* 32bit */ +#define OFFS_BX		22	/* low 16 bits of EBX */ +#define OFFS_BL		22	/* low  8 bits of BX */ +#define OFFS_BH		23	/* high 8 bits of BX */ +#define OFFS_EDX	26	/* 32bit */ +#define OFFS_DX		26	/* low 16 bits of EBX */ +#define OFFS_DL		26	/* low  8 bits of BX */ +#define OFFS_DH		27	/* high 8 bits of BX */ +#define OFFS_ECX	30	/* 32bit */ +#define OFFS_CX		30	/* low 16 bits of EBX */ +#define OFFS_CL		30	/* low  8 bits of BX */ +#define OFFS_CH		31	/* high 8 bits of BX */ +#define OFFS_EAX	34	/* 32bit */ +#define OFFS_AX		34	/* low 16 bits of EBX */ +#define OFFS_AL		34	/* low  8 bits of BX */ +#define OFFS_AH		35	/* high 8 bits of BX */ +#define OFFS_VECTOR	38	/* 16bit */ +#define OFFS_IP		40	/* 16bit */ +#define OFFS_CS		42	/* 16bit */ +#define OFFS_FLAGS	44	/* 16bit */ -#define SEGMENT      0x40 -#define STACK	     0x800	/* stack at 0x40:0x800 -> 0x800 */ +/* stack at 0x40:0x800 -> 0x800 */ +#define SEGMENT		0x40 +#define STACK		0x800 -/* save general registers */ -/* save some segments     */ -/* save callers stack segment .. */ -/* ... in gs */ -	/* setup my segments */ -	/* setup BIOS stackpointer */ - -#define MAKE_BIOS_STACK \ -	pushal; \ -	pushw	%ds; \ -	pushw	%gs; \ -	pushw	%es; \ -	pushw	%ss; \ -	popw	%gs; \ -	movw	$SEGMENT, %ax; \ -	movw	%ax, %ds; \ -	movw	%ax, %es; \ -	movw	%ax, %ss; \ -	movw	%sp, %bp; \ +/* + * save general registers + * save some segments + * save callers stack segment + * setup BIOS segments + * setup BIOS stackpointer + */ +#define MAKE_BIOS_STACK		\ +	pushal;			\ +	pushw	%ds;		\ +	pushw	%gs;		\ +	pushw	%es;		\ +	pushw	%ss;		\ +	popw	%gs;		\ +	movw	$SEGMENT, %ax;	\ +	movw	%ax, %ds;	\ +	movw	%ax, %es;	\ +	movw	%ax, %ss;	\ +	movw	%sp, %bp;	\  	movw	$STACK, %sp -#define RESTORE_CALLERS_STACK \ -	pushw	%gs;		/* restore callers stack segment */ \ -	popw	%ss; \ -	movw	%bp, %sp;	/* restore stackpointer */ \ -	popw	%es;		/* restore segment selectors */ \ -	popw	%gs; \ -	popw	%ds; \ -	popal			/* restore GP registers */ +/* + * restore callers stack segment + * restore some segments + * restore general registers + */ +#define RESTORE_CALLERS_STACK	\ +	pushw	%gs;		\ +	popw	%ss;		\ +	movw	%bp, %sp;	\ +	popw	%es;		\ +	popw	%gs;		\ +	popw	%ds;		\ +	popal + +#ifndef __ASSEMBLY__ +#define BIOS_DATA	((char *)0x400) +#define BIOS_DATA_SIZE	256 +#define BIOS_BASE	((char *)0xf0000) +#define BIOS_CS		0xf000 + +extern ulong __bios_start; +extern ulong __bios_size; + +/* these are defined in a 16bit segment and needs + * to be accessed with the RELOC_16_xxxx() macros below + */ +extern u16 ram_in_64kb_chunks; +extern u16 bios_equipment; +extern u8  pci_last_bus; + +extern void *rm_int00; +extern void *rm_int01; +extern void *rm_int02; +extern void *rm_int03; +extern void *rm_int04; +extern void *rm_int05; +extern void *rm_int06; +extern void *rm_int07; +extern void *rm_int08; +extern void *rm_int09; +extern void *rm_int0a; +extern void *rm_int0b; +extern void *rm_int0c; +extern void *rm_int0d; +extern void *rm_int0e; +extern void *rm_int0f; +extern void *rm_int10; +extern void *rm_int11; +extern void *rm_int12; +extern void *rm_int13; +extern void *rm_int14; +extern void *rm_int15; +extern void *rm_int16; +extern void *rm_int17; +extern void *rm_int18; +extern void *rm_int19; +extern void *rm_int1a; +extern void *rm_int1b; +extern void *rm_int1c; +extern void *rm_int1d; +extern void *rm_int1e; +extern void *rm_int1f; +extern void *rm_def_int; + +extern void *realmode_reset; +extern void *realmode_pci_bios_call_entry; + +#define RELOC_16_LONG(seg, off) (*(u32 *)(seg << 4 | (u32)&off)) +#define RELOC_16_WORD(seg, off) (*(u16 *)(seg << 4 | (u32)&off)) +#define RELOC_16_BYTE(seg, off) (*(u8 *)(seg << 4 | (u32)&off)) + +#ifdef PCI_BIOS_DEBUG +extern u32 num_pci_bios_present; +extern u32 num_pci_bios_find_device; +extern u32 num_pci_bios_find_class; +extern u32 num_pci_bios_generate_special_cycle; +extern u32 num_pci_bios_read_cfg_byte; +extern u32 num_pci_bios_read_cfg_word; +extern u32 num_pci_bios_read_cfg_dword; +extern u32 num_pci_bios_write_cfg_byte; +extern u32 num_pci_bios_write_cfg_word; +extern u32 num_pci_bios_write_cfg_dword; +extern u32 num_pci_bios_get_irq_routing; +extern u32 num_pci_bios_set_irq; +extern u32 num_pci_bios_unknown_function; +#endif + +#endif  #endif |