diff options
| -rw-r--r-- | README | 5 | ||||
| -rw-r--r-- | arch/x86/include/asm/realmode.h | 36 | ||||
| -rw-r--r-- | arch/x86/lib/Makefile | 10 | ||||
| -rw-r--r-- | arch/x86/lib/bios.S | 569 | ||||
| -rw-r--r-- | arch/x86/lib/bios.h | 3 | ||||
| -rw-r--r-- | arch/x86/lib/bios_pci.S | 447 | ||||
| -rw-r--r-- | arch/x86/lib/bios_setup.c | 179 | ||||
| -rw-r--r-- | arch/x86/lib/realmode.c | 93 | ||||
| -rw-r--r-- | arch/x86/lib/realmode_switch.S | 232 | ||||
| -rw-r--r-- | arch/x86/lib/video.c | 6 | ||||
| -rw-r--r-- | arch/x86/lib/video_bios.c | 196 | ||||
| -rw-r--r-- | arch/x86/lib/zimage.c | 23 | 
12 files changed, 0 insertions, 1799 deletions
| @@ -3820,11 +3820,6 @@ Low Level (hardware related) configuration options:  		If defined, the x86 reset vector code is included. This is not  		needed when U-Boot is running from Coreboot. -- CONFIG_X86_NO_REAL_MODE -		If defined, x86 real mode code is omitted. This assumes a -		32-bit environment where such code is not needed. You will -		need to do this when U-Boot is running from Coreboot. -  Freescale QE/FMAN Firmware Support:  ----------------------------------- diff --git a/arch/x86/include/asm/realmode.h b/arch/x86/include/asm/realmode.h deleted file mode 100644 index 0f12a893b..000000000 --- a/arch/x86/include/asm/realmode.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * (C) Copyright 2002 - * Daniel Engström, Omicron Ceti AB, daniel@omicron.se - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#ifndef __ASM_REALMODE_H_ -#define __ASM_REALMODE_H_ -#include <asm/ptrace.h> - -extern ulong __realmode_start; -extern ulong __realmode_size; -extern char realmode_enter; - -int bios_setup(void); -int enter_realmode(u16 seg, u16 off, struct pt_regs *in, struct pt_regs *out); -int enter_realmode_int(u8 lvl, struct pt_regs *in, struct pt_regs *out); - -#endif diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile index 0a52cc896..9b24dc5fd 100644 --- a/arch/x86/lib/Makefile +++ b/arch/x86/lib/Makefile @@ -25,16 +25,6 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(ARCH).o -ifeq ($(CONFIG_X86_NO_REAL_MODE),) -SOBJS-$(CONFIG_SYS_PC_BIOS)	+= bios.o -SOBJS-$(CONFIG_SYS_PCI_BIOS)	+= bios_pci.o -COBJS-y	+= realmode.o -SOBJS-y	+= realmode_switch.o - -COBJS-$(CONFIG_SYS_PC_BIOS)	+= bios_setup.o -COBJS-$(CONFIG_VIDEO_VGA)	+= video_bios.o -endif -  COBJS-y	+= board.o  COBJS-y	+= bootm.o  COBJS-y	+= cmd_boot.o diff --git a/arch/x86/lib/bios.S b/arch/x86/lib/bios.S deleted file mode 100644 index 239aaa9cf..000000000 --- a/arch/x86/lib/bios.S +++ /dev/null @@ -1,569 +0,0 @@ -/* - * (C) Copyright 2002 - * Daniel Engström, Omicron Ceti AB, <daniel@omicron.se> - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -/* - * Based on msbios.c from rolo 1.6: - *---------------------------------------------------------------------- - * (C) Copyright 2000 - * Sysgo Real-Time Solutions GmbH - * Klein-Winternheim, Germany - *---------------------------------------------------------------------- - */ - -#include "bios.h" - -/* - * During it's initialization phase, before switching to protected - * mode, the Linux Kernel makes a few BIOS calls. This won't work - * if the board does not have a BIOS. - * - * This is a very minimalisic BIOS that supplies just enough - * functionality to keep the Linux Kernel happy. It is NOT - * a general purpose replacement for a real BIOS !! - */ - -.section .bios, "ax" -.code16 -.org 0 -	/* a call to f000:0 should warmboot */ -	jmp	realmode_reset - -.globl rm_int00 -.hidden rm_int00 -.type rm_int00, @function -rm_int00: -	pushw	$0 -	jmp	any_interrupt16 -.globl rm_int01 -.hidden rm_int01 -.type rm_int01, @function -rm_int01: -	pushw	$1 -	jmp	any_interrupt16 -.globl rm_int02 -.hidden rm_int02 -.type rm_int02, @function -rm_int02: -	pushw	$2 -	jmp	any_interrupt16 -.globl rm_int03 -.hidden rm_int03 -.type rm_int03, @function -rm_int03: -	pushw	$3 -	jmp	any_interrupt16 -.globl rm_int04 -.hidden rm_int04 -.type rm_int04, @function -rm_int04: -	pushw	$4 -	jmp	any_interrupt16 -.globl rm_int05 -.hidden rm_int05 -.type rm_int05, @function -rm_int05: -	pushw	$5 -	jmp	any_interrupt16 -.globl rm_int06 -.hidden rm_int06 -.type rm_int06, @function -rm_int06: -	pushw	$6 -	jmp	any_interrupt16 -.globl rm_int07 -.hidden rm_int07 -.type rm_int07, @function -rm_int07: -	pushw	$7 -	jmp	any_interrupt16 -.globl rm_int08 -.hidden rm_int08 -.type rm_int08, @function -rm_int08: -	pushw	$8 -	jmp	any_interrupt16 -.globl rm_int09 -.hidden rm_int09 -.type rm_int09, @function -rm_int09: -	pushw	$9 -	jmp	any_interrupt16 -.globl rm_int0a -.hidden rm_int0a -.type rm_int0a, @function -rm_int0a: -	pushw	$10 -	jmp	any_interrupt16 -.globl rm_int0b -.hidden rm_int0b -.type rm_int0b, @function -rm_int0b: -	pushw	$11 -	jmp	any_interrupt16 -.globl rm_int0c -.hidden rm_int0c -.type rm_int0c, @function -rm_int0c: -	pushw	$12 -	jmp	any_interrupt16 -.globl rm_int0d -.hidden rm_int0d -.type rm_int0d, @function -rm_int0d: -	pushw	$13 -	jmp	any_interrupt16 -.globl rm_int0e -.hidden rm_int0e -.type rm_int0e, @function -rm_int0e: -	pushw	$14 -	jmp	any_interrupt16 -.globl rm_int0f -.hidden rm_int0f -.type rm_int0f, @function -rm_int0f: -	pushw	$15 -	jmp	any_interrupt16 -.globl rm_int10 -.hidden rm_int10 -.type rm_int10, @function -rm_int10: -	pushw	$16 -	jmp	any_interrupt16 -.globl rm_int11 -.hidden rm_int11 -.type rm_int11, @function -rm_int11: -	pushw	$17 -	jmp	any_interrupt16 -.globl rm_int12 -.hidden rm_int12 -.type rm_int12, @function -rm_int12: -	pushw	$18 -	jmp	any_interrupt16 -.globl rm_int13 -.hidden rm_int13 -.type rm_int13, @function -rm_int13: -	pushw	$19 -	jmp	any_interrupt16 -.globl rm_int14 -.hidden rm_int14 -.type rm_int14, @function -rm_int14: -	pushw	$20 -	jmp	any_interrupt16 -.globl rm_int15 -.hidden rm_int15 -.type rm_int15, @function -rm_int15: -	pushw	$21 -	jmp	any_interrupt16 -.globl rm_int16 -.hidden rm_int16 -.type rm_int16, @function -rm_int16: -	pushw	$22 -	jmp	any_interrupt16 -.globl rm_int17 -.hidden rm_int17 -.type rm_int17, @function -rm_int17: -	pushw	$23 -	jmp	any_interrupt16 -.globl rm_int18 -.hidden rm_int18 -.type rm_int18, @function -rm_int18: -	pushw	$24 -	jmp	any_interrupt16 -.globl rm_int19 -.hidden rm_int19 -.type rm_int19, @function -rm_int19: -	pushw	$25 -	jmp	any_interrupt16 -.globl rm_int1a -.hidden rm_int1a -.type rm_int1a, @function -rm_int1a: -	pushw	$26 -	jmp	any_interrupt16 -.globl rm_int1b -.hidden rm_int1b -.type rm_int1b, @function -rm_int1b: -	pushw	$27 -	jmp	any_interrupt16 -.globl rm_int1c -.hidden rm_int1c -.type rm_int1c, @function -rm_int1c: -	pushw	$28 -	jmp	any_interrupt16 -.globl rm_int1d -.hidden rm_int1d -.type rm_int1d, @function -rm_int1d: -	pushw	$29 -	jmp	any_interrupt16 -.globl rm_int1e -.hidden rm_int1e -.type rm_int1e, @function -rm_int1e: -	pushw	$30 -	jmp	any_interrupt16 -.globl rm_int1f -.hidden rm_int1f -.type rm_int1f, @function -rm_int1f: -	pushw	$31 -	jmp	any_interrupt16 -.globl rm_def_int -.hidden rm_def_int -.type rm_def_int, @function -rm_def_int: -	iret - -	/* -	 * All interrupt jumptable entries jump to here after pushing the -	 * interrupt vector number onto the stack. -	 */ -any_interrupt16: -	MAKE_BIOS_STACK - -gs	movw	OFFS_VECTOR(%bp), %ax -	cmpw	$0x10, %ax -	je	Lint_10h -	cmpw	$0x11, %ax -	je	Lint_11h -	cmpw	$0x12, %ax -	je	Lint_12h -	cmpw	$0x13, %ax -	je	Lint_13h -	cmpw	$0x15, %ax -	je	Lint_15h -	cmpw	$0x16, %ax -	je	Lint_16h -	cmpw	$0x1a, %ax -	je	Lint_1ah -	movw	$0xffff, %ax -	jmp	Lout -Lint_10h: -	/* VGA BIOS services */ -	call	bios_10h -	jmp	Lout -Lint_11h: -	call	bios_11h -	jmp	Lout -Lint_12h: -	call	bios_12h -	jmp	Lout -Lint_13h: -	/* BIOS disk services */ -	call	bios_13h -	jmp	Lout -Lint_15h: -	/* Misc. BIOS services */ -	call	bios_15h -	jmp	Lout -Lint_16h: -	/* keyboard services */ -	call	bios_16h -	jmp	Lout -Lint_1ah: -	/* PCI bios */ -	call	bios_1ah -	jmp	Lout -Lout: -	cmpw	$0, %ax -	je	Lhandeled - -	/* -	 * Insert code for unhandeled INTs here. -	 * -	 * ROLO prints a message to the console we could do that but then -	 * we're in 16bit mode so we'll have to get back into 32bit mode -	 * to use the console I/O routines (if we do this we should make -	 * int 0x10 and int 0x16 work as well) -	 */ -Lhandeled: -	RESTORE_CALLERS_STACK - -	/* dump vector number */ -	addw	$2,%sp - -	/* return from interrupt */ -	iret - -/* - ************************************************************ - * BIOS	interrupt 10h -- VGA services - ************************************************************ - */ -bios_10h: -gs	movw	OFFS_AX(%bp), %ax -	shrw	$8, %ax -	cmpw	$0x3, %ax -	je	Lcur_pos -	cmpw	$0xf, %ax -	je	Lvid_state -	cmpw	$0x12, %ax -	je	Lvid_cfg -	movw	$0xffff, %ax -	ret -Lcur_pos: -	/* Read Cursor Position and Size */ -gs	movw	$0, OFFS_CX(%bp) -gs	movw	$0, OFFS_DX(%bp) -	xorw	%ax, %ax -	ret -Lvid_state: -	/* Get Video State - 80 columns, 80x25, 16 colors */ -gs	movw	$(80 << 8|0x03), OFFS_AX(%bp) -gs	movw	$0, OFFS_BX(%bp) -	xorw	%ax, %ax -	ret -Lvid_cfg: -	/* Video Subsystem Configuration (EGA/VGA) - indicate CGA/MDA/HGA */ -gs	movw	$0x10, OFFS_BX(%bp) -	xorw	%ax, %ax -	ret - -/* - ************************************************************ - * BIOS interrupt 11h -- Equipment determination - ************************************************************ - */ - -bios_11h: -cs	movw	bios_equipment, %ax -gs	movw	%ax, OFFS_AX(%bp) -	xorw	%ax, %ax -	ret - -/* - ************************************************************ - * BIOS	interrupt 12h -- Get Memory Size - ************************************************************ - */ -bios_12h: -cs	movw	ram_in_64kb_chunks, %ax -	cmpw	$0xa, %ax -	ja	b12_more_than_640k -	shlw	$6, %ax -	jmp	b12_return -b12_more_than_640k: -	movw	$0x280, %ax -b12_return: -	/* return number of kilobytes in ax */ -gs	movw	%ax, OFFS_AX(%bp) - -gs	movw	OFFS_FLAGS(%bp), %ax - -	/* clear carry -- function succeeded */ -	andw	$0xfffe, %ax -gs	movw	%ax, OFFS_FLAGS(%bp) - -	xorw	%ax, %ax -	ret - -/* - ************************************************************ - * BIOS interrupt 13h -- Disk services - ************************************************************ - */ -bios_13h: -gs	movw	OFFS_AX(%bp), %ax -	shrw	$8, %ax -	cmpw	$0x15, %ax -	je	Lfunc_15h -	movw	$0xffff, %ax -	ret -Lfunc_15h: -gs	movw	OFFS_AX(%bp), %ax - -	/* return AH=0->drive not present */ -	andw	$0x00ff, %ax -gs	movw	%ax, OFFS_AX(%bp) -	xorw	%ax, %ax -	ret - -/* - *********************************************************** - * BIOS interrupt 15h -- Miscellaneous services - *********************************************************** - */ -bios_15h: -gs	movw	OFFS_AX(%bp), %ax -	shrw	$8, %ax -	cmpw	$0xc0, %ax -	je	Lfunc_c0h -	cmpw	$0xe8, %ax -	je	Lfunc_e8h -	cmpw	$0x88, %ax -	je	Lfunc_88h -	movw	$0xffff, %ax -	ret - -Lfunc_c0h: -	/* Return System Configuration Parameters (PS2 only) */ -gs	movw	OFFS_FLAGS(%bp), %ax - -	/* return carry -- function not supported */ -	orw	$1, %ax -gs	movw	%ax, OFFS_FLAGS(%bp) -	xorw	%ax, %ax -	ret - -Lfunc_e8h: -gs	movw	OFFS_AX(%bp), %ax -	andw	$0xff, %ax -	cmpw	$1, %ax -	je	Lfunc_e801h -gs	movw	OFFS_FLAGS(%bp), %ax - -	/* return carry -- function not supported */ -	orw	$1, %ax -gs	movw	%ax, OFFS_FLAGS(%bp) -	xorw	%ax, %ax -	ret - -Lfunc_e801h: -	/* Get memory size for >64M Configurations */ -cs	movw	ram_in_64kb_chunks, %ax -	cmpw	$0x100, %ax -	ja	e801_more_than_16mb - -	/* multiply by 64 */ -	shlw	$6, %ax - -	/* 1st meg does not count */ -	subw	$0x400, %ax - -	/* return memory size between 1M and 16M in 1kb chunks in AX and CX */ -gs	movw	%ax, OFFS_AX(%bp) -gs	movw	%ax, OFFS_CX(%bp) - -	/* set BX and DX to 0*/ -gs	movw	$0, OFFS_BX(%bp) -gs	movw	$0, OFFS_DX(%bp) -gs	movw	OFFS_FLAGS(%bp), %ax - -	/* clear carry -- function succeeded */ -	andw	$0xfffe, %ax -gs	movw	%ax, OFFS_FLAGS(%bp) -	xorw	%ax, %ax -	ret - -e801_more_than_16mb: -	/* subtract 16MB */ -	subw	$0x100, %ax - -	/* return 0x3c00 (16MB-1MB) in AX and CX */ -gs	movw	$0x3c00, OFFS_AX(%bp) -gs	movw	$0x3c00, OFFS_CX(%bp) - -	/* set BX and DX to number of 64kb chunks above 16MB */ -gs	movw	%ax, OFFS_BX(%bp) -gs	movw	%ax, OFFS_DX(%bp) - -gs	movw	OFFS_FLAGS(%bp), %ax - -	/* clear carry -- function succeeded */ -	andw	$0xfffe, %ax -gs	movw	%ax, OFFS_FLAGS(%bp) -	xorw	%ax, %ax -	ret - -Lfunc_88h: -cs	movw	ram_in_64kb_chunks, %ax -	cmpw	$0x100, %ax -	jna	b88_not_more_than16 -	movw	$0x100, %ax -b88_not_more_than16: -	shlw	$6, %ax - -	/* 1st meg does not count */ -	subw	$0x400, %ax - -	/* return number of kilobytes between 16MB and 16MB in ax */ -gs	movw	%ax, OFFS_AX(%bp) - -gs	movw	OFFS_FLAGS(%bp), %ax - -	/* clear carry -- function succeeded */ -	andw	$0xfffe, %ax -gs	movw	%ax, OFFS_FLAGS(%bp) - -	xorw	%ax, %ax -	ret - -/* - ************************************************************ - * BIOS interrupt 16h -- keyboard services - ************************************************************ - */ -bios_16h: -gs	movw	OFFS_AX(%bp), %ax -	shrw	$8, %ax -	cmpw	$0x03, %ax -	je	Lfunc_03h -	movw	$0xffff, %ax -	ret -Lfunc_03h: -	/* do nothing -- function not supported */ -	xorw	%ax, %ax -	ret - -/* - ************************************************************ - * BIOS interrupt 1ah -- PCI bios - ************************************************************ - */ -bios_1ah: -gs	movw	OFFS_AX(%bp), %ax -	cmpb	$0xb1, %ah -	je	Lfunc_b1h -	movw	$0xffff, %ax -	ret -Lfunc_b1h: -	call	realmode_pci_bios - -	/* do nothing -- function not supported */ -	xorw	%ax, %ax -	ret - - -.globl ram_in_64kb_chunks -.hidden ram_in_64kb_chunks -.type ram_in_64kb_chunks, @function -ram_in_64kb_chunks: -	.word	0 - -.globl bios_equipment -.hidden bios_equipment -.type bios_equipment, @function -bios_equipment: -	.word	0 diff --git a/arch/x86/lib/bios.h b/arch/x86/lib/bios.h index a220983df..96509b066 100644 --- a/arch/x86/lib/bios.h +++ b/arch/x86/lib/bios.h @@ -145,9 +145,6 @@ 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)) diff --git a/arch/x86/lib/bios_pci.S b/arch/x86/lib/bios_pci.S deleted file mode 100644 index 47c478b27..000000000 --- a/arch/x86/lib/bios_pci.S +++ /dev/null @@ -1,447 +0,0 @@ -/* - * (C) Copyright 2002 - * Daniel Engström, Omicron Ceti AB, daniel@omicron.se - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -/* - * x86 realmode assembly implementation of a PCI BIOS - * for platforms that use one PCI hose and configuration - * access type 1. (The common case for low-end PC's) - */ - -#include "bios.h" - -#define PCI_BIOS_DEBUG - -.section .bios, "ax" -.code16 -.globl realmode_pci_bios_call_entry -.hidden realmode_pci_bios_call_entry -.type realmode_pci_bios_call_entry, @function -realmode_pci_bios_call_entry: -	MAKE_BIOS_STACK -	call realmode_pci_bios -	RESTORE_CALLERS_STACK -	ret - - -.globl realmode_pci_bios -realmode_pci_bios: -gs	movw	OFFS_AX(%bp), %ax -	cmpb	$1, %al -	je	pci_bios_present -	cmpb	$2, %al -	je	pci_bios_find_device -	cmpb	$3, %al -	je	pci_bios_find_class -	cmpb	$6, %al -	je	pci_bios_generate_special_cycle -	cmpb	$8, %al -	je	pci_bios_read_cfg_byte -	cmpb	$9, %al -	je	pci_bios_read_cfg_word -	cmpb	$10, %al -	je	pci_bios_read_cfg_dword -	cmpb	$11, %al -	je	pci_bios_write_cfg_byte -	cmpb	$12, %al -	je	pci_bios_write_cfg_word -	cmpb	$13, %al -	je	pci_bios_write_cfg_dword -	cmpb	$14, %al -	je	pci_bios_get_irq_routing -	cmpb	$15, %al -	je	pci_bios_set_irq -	jmp	unknown_function - -/*****************************************************************************/ - -pci_bios_present: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_present -#endif -	movl	$0x20494350, %eax -gs	movl	%eax, OFFS_EDX(%bp) - -	/* We support cfg type 1 version 2.10 */ -	movb	$0x01, %al -gs	movb	%al, OFFS_AL(%bp) -	movw	$0x0210, %ax -gs	movw	%ax, OFFS_BX(%bp) - -	/* last bus number */ -cs	movb	pci_last_bus, %al -gs	movb	%al, OFFS_CL(%bp) -	jmp	clear_carry - -/*****************************************************************************/ - -/* device 0-31, function 0-7 */ -pci_bios_find_device: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_find_device -#endif -gs	movw	OFFS_CX(%bp), %di -	shll	$16, %edi -gs	movw	OFFS_DX(%bp), %di -	/* edi now holds device in upper 16 bits and vendor in lower 16 bits */ - -gs	movw	OFFS_SI(%bp), %si - -	/* start at bus 0 dev 0 function 0 */ -	xorw	%bx, %bx -pfd_loop: -	/* dword 0 is vendor/device */ -	xorw	%ax, %ax -	call	__pci_bios_select_register -	movw	$0xcfc, %dx -	inl	%dx, %eax - -	/* our device ? */ -	cmpl	%edi, %eax -	je	pfd_found_one -pfd_next_dev: -	/* check for multi function devices */ -	movw	%bx, %ax -	andw	$3, %ax -	jnz	pfd_function_not_zero -	movw	$0x000c, %ax -	call	__pci_bios_select_register -	movw	$0xcfe, %dx -	inb	%dx, %al -	andb	$0x80, %al -	jz	pfd_not_multi_function -pfd_function_not_zero: -	/* next function, overflows in to device number, then bus number */ -	incw	%bx -	jmp	pfd_check_bus - -pfd_not_multi_function: -	/* remove function bits */ -	andw	$0xfff8, %bx - -	/* next device, overflows in to bus number */ -	addw	$0x0008, %bx -pfd_check_bus: -cs	movb	pci_last_bus, %ah -	cmpb	%ah, %bh -	ja	pfd_not_found -	jmp	pfd_loop -pfd_found_one: -	decw	%si -	js	pfd_done -	jmp	pfd_next_dev - -pfd_done: -gs	movw	%bx, OFFS_BX(%bp) -	jmp	clear_carry - -pfd_not_found: -	/* device not found */ -	movb	$0x86, %ah -	jmp	set_carry - -/*****************************************************************************/ - -pci_bios_find_class: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_find_class -#endif -gs	movl	OFFS_ECX(%bp), %edi - -	/* edi now holds class-code in lower 24 bits */ -	andl	$0x00ffffff, %edi -gs	movw	OFFS_SI(%bp), %si - -	/* start at bus 0 dev 0 function 0 */ -	xorw	%bx, %bx -pfc_loop: -	/* dword 8 is class-code high 24bits */ -	movw	$8, %ax -	call	__pci_bios_select_register -	movw	$0xcfc, %dx -	inl	%dx, %eax -	shrl	$8, %eax -	andl	$0x00ffffff, %eax - -	/* our device ? */ -	cmpl	%edi, %eax -	je	pfc_found_one -pfc_next_dev: -	/* check for multi function devices */ -	andw	$3, %bx -	jnz	pfc_function_not_zero -	movw	$0x000c, %ax -	call	__pci_bios_select_register -	movw	$0xcfe, %dx -	inb	%dx, %al -	andb	$0x80, %al -	jz	pfc_not_multi_function -pfc_function_not_zero: -	/* next function, overflows in to device number, then bus number */ -	incw	%bx -	jmp	pfc_check_bus - -pfc_not_multi_function: -	/* remove function bits */ -	andw	$0xfff8, %bx - -	/* next device, overflows in to bus number */ -	addw	$0x0008, %bx -pfc_check_bus: -cs	movb	pci_last_bus, %ah -	cmpb	%ah, %bh -	ja	pfc_not_found -	jmp	pfc_loop -pfc_found_one: -	decw	%si -	js	pfc_done -	jmp	pfc_next_dev - -pfc_done: -gs	movw	%bx, OFFS_BX(%bp) -	jmp	clear_carry - -pfc_not_found: -	/* device not found */ -	movb	$0x86, %ah -	jmp	set_carry - -/*****************************************************************************/ - -pci_bios_generate_special_cycle: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_generate_special_cycle -#endif -	/* function not supported */ -	movb	$0x81, %ah -	jmp	set_carry - -/*****************************************************************************/ - -pci_bios_read_cfg_byte: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_read_cfg_byte -#endif -	call	pci_bios_select_register -gs	movw	OFFS_DI(%bp), %dx -	andw	$3, %dx -	addw	$0xcfc, %dx -	inb	%dx, %al -gs	movb	%al, OFFS_CL(%bp) -	jmp	clear_carry - -/*****************************************************************************/ - -pci_bios_read_cfg_word: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_read_cfg_word -#endif -	call	pci_bios_select_register -gs	movw	OFFS_DI(%bp), %dx -	andw	$2, %dx -	addw	$0xcfc, %dx -	inw	%dx, %ax -gs	movw	%ax, OFFS_CX(%bp) -	jmp	clear_carry - - -/*****************************************************************************/ - -pci_bios_read_cfg_dword: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_read_cfg_dword -#endif -	call	pci_bios_select_register -	movw	$0xcfc, %dx -	inl	%dx, %eax -gs	movl	%eax, OFFS_ECX(%bp) -	jmp	clear_carry - -/*****************************************************************************/ - -pci_bios_write_cfg_byte: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_write_cfg_byte -#endif -	call	pci_bios_select_register -gs	movw	OFFS_DI(%bp), %dx -gs	movb	OFFS_CL(%bp), %al -	andw	$3, %dx -	addw	$0xcfc, %dx -	outb	%al, %dx -	jmp	clear_carry - -/*****************************************************************************/ - -pci_bios_write_cfg_word: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_write_cfg_word -#endif -	call	pci_bios_select_register -gs	movw	OFFS_DI(%bp), %dx -gs	movw	OFFS_CX(%bp), %ax -	andw	$2, %dx -	addw	$0xcfc, %dx -	outw	%ax, %dx -	jmp	clear_carry - -/*****************************************************************************/ - -pci_bios_write_cfg_dword: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_write_cfg_dword -#endif -	call	pci_bios_select_register -gs	movl	OFFS_ECX(%bp), %eax -	movw	$0xcfc, %dx -	outl	%eax, %dx -	jmp	clear_carry - -/*****************************************************************************/ - -pci_bios_get_irq_routing: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_get_irq_routing -#endif -	/* function not supported */ -	movb	$0x81, %ah -	jmp	set_carry - -/*****************************************************************************/ - -pci_bios_set_irq: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_set_irq -#endif -	/* function not supported */ -	movb	$0x81, %ah -	jmp	set_carry - -/*****************************************************************************/ - -unknown_function: -#ifdef PCI_BIOS_DEBUG -cs	incl	num_pci_bios_unknown_function -#endif -	/* function not supported */ -	movb	$0x81, %ah -	jmp	set_carry - -/*****************************************************************************/ - -pci_bios_select_register: -gs	movw	OFFS_BX(%bp), %bx -gs	movw	OFFS_DI(%bp), %ax -/* destroys eax, dx */ -__pci_bios_select_register: -	/* BX holds device id, AX holds register index */ -	pushl	%ebx -	andl	$0xfc, %eax -	andl	$0xffff, %ebx -	shll	$8, %ebx -	orl	%ebx, %eax -	orl	$0x80000000, %eax -	movw	$0xcf8, %dx -	outl	%eax, %dx -	popl	%ebx -	ret - - -clear_carry: -gs	movw	OFFS_FLAGS(%bp), %ax - -	/* clear carry -- function succeeded */ -	andw	$0xfffe, %ax -gs	movw	%ax, OFFS_FLAGS(%bp) -	xorw	%ax, %ax -gs	movb	%ah, OFFS_AH(%bp) -	ret - -set_carry: -gs	movb	%ah, OFFS_AH(%bp) -gs	movw	OFFS_FLAGS(%bp), %ax - -	/* return carry -- function not supported */ -	orw	$1, %ax -gs	movw	%ax, OFFS_FLAGS(%bp) -	movw	$-1, %ax -	ret - -/*****************************************************************************/ - -.globl pci_last_bus -pci_last_bus: -	.byte	0 - -#ifdef PCI_BIOS_DEBUG -.globl num_pci_bios_present -num_pci_bios_present: -	.long	0 - -.globl num_pci_bios_find_device -num_pci_bios_find_device: -	.long	0 - -.globl num_pci_bios_find_class -num_pci_bios_find_class: -	.long	0 - -.globl num_pci_bios_generate_special_cycle -num_pci_bios_generate_special_cycle: -	.long 0 - -.globl num_pci_bios_read_cfg_byte -num_pci_bios_read_cfg_byte: -	.long	0 - -.globl num_pci_bios_read_cfg_word -num_pci_bios_read_cfg_word: -	.long	0 - -.globl num_pci_bios_read_cfg_dword -num_pci_bios_read_cfg_dword: -	.long	0 - -.globl num_pci_bios_write_cfg_byte -num_pci_bios_write_cfg_byte: -	.long	0 - -.globl num_pci_bios_write_cfg_word -num_pci_bios_write_cfg_word: -	.long	0 - -.globl num_pci_bios_write_cfg_dword -num_pci_bios_write_cfg_dword: -	.long	0 - -.globl num_pci_bios_get_irq_routing -num_pci_bios_get_irq_routing: -	.long	0 - -.globl num_pci_bios_set_irq -num_pci_bios_set_irq: -	.long	0 - -.globl num_pci_bios_unknown_function -num_pci_bios_unknown_function: -	.long	0 -#endif diff --git a/arch/x86/lib/bios_setup.c b/arch/x86/lib/bios_setup.c deleted file mode 100644 index 265f7d671..000000000 --- a/arch/x86/lib/bios_setup.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * (C) Copyright 2002 - * Daniel Engström, Omicron Ceti AB, <daniel@omicron.se> - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -/* - * Partly based on msbios.c from rolo 1.6: - *---------------------------------------------------------------------- - * (C) Copyright 2000 - * Sysgo Real-Time Solutions GmbH - * Klein-Winternheim, Germany - *---------------------------------------------------------------------- - */ - -#include <common.h> -#include <pci.h> -#include <asm/realmode.h> -#include <asm/io.h> -#include "bios.h" - -DECLARE_GLOBAL_DATA_PTR; - -#define NUMVECTS	256 - -static int set_jmp_vector(int entry_point, void *target) -{ -	if (entry_point & ~0xffff) -		return -1; - -	if (((u32)target - 0xf0000) & ~0xffff) -		return -1; - -	printf("set_jmp_vector: 0xf000:%04x -> %p\n", -			entry_point, target); - -	/* jmp opcode */ -	writeb(0xea, 0xf0000 + entry_point); - -	/* offset */ -	writew(((u32)target-0xf0000), 0xf0000 + entry_point + 1); - -	/* segment */ -	writew(0xf000, 0xf0000 + entry_point + 3); - -	return 0; -} - -/* Install an interrupt vector */ -static void setvector(int vector, u16 segment, void *handler) -{ -	u16 *ptr = (u16 *)(vector * 4); -	ptr[0] = ((u32)handler - (segment << 4)) & 0xffff; -	ptr[1] = segment; - -#if 0 -	printf("setvector: int%02x -> %04x:%04x\n", -			vector, ptr[1], ptr[0]); -#endif -} - -int bios_setup(void) -{ -	/* The BIOS section is not relocated and still in the ROM. */ -	ulong bios_start = (ulong)&__bios_start; -	ulong bios_size = (ulong)&__bios_size; - -	static int done; -	int vector; -#ifdef CONFIG_PCI -	struct pci_controller *pri_hose; -#endif -	if (done) -		return 0; - -	done = 1; - -	if (bios_size > 65536) { -		printf("BIOS too large (%ld bytes, max is 65536)\n", -				bios_size); -		return -1; -	} - -	memcpy(BIOS_BASE, (void *)bios_start, bios_size); - -	/* clear bda */ -	memset(BIOS_DATA, 0, BIOS_DATA_SIZE); - -	/* enter some values to the bda */ -	writew(0x3f8, BIOS_DATA);   /* com1 addr */ -	writew(0x2f8, BIOS_DATA+2); /* com2 addr */ -	writew(0x3e8, BIOS_DATA+4); /* com3 addr */ -	writew(0x2e8, BIOS_DATA+6); /* com4 addr */ -	writew(0x278, BIOS_DATA+8); /* lpt1 addr */ -	/* -	 * The kernel wants to read the base memory size -	 * from 40:13. Put a zero there to avoid an error message -	 */ -	writew(0, BIOS_DATA+0x13);  /* base memory size */ - - -	/* setup realmode interrupt vectors */ -	for (vector = 0; vector < NUMVECTS; vector++) -		setvector(vector, BIOS_CS, &rm_def_int); - -	setvector(0x00, BIOS_CS, &rm_int00); -	setvector(0x01, BIOS_CS, &rm_int01); -	setvector(0x02, BIOS_CS, &rm_int02); -	setvector(0x03, BIOS_CS, &rm_int03); -	setvector(0x04, BIOS_CS, &rm_int04); -	setvector(0x05, BIOS_CS, &rm_int05); -	setvector(0x06, BIOS_CS, &rm_int06); -	setvector(0x07, BIOS_CS, &rm_int07); -	setvector(0x08, BIOS_CS, &rm_int08); -	setvector(0x09, BIOS_CS, &rm_int09); -	setvector(0x0a, BIOS_CS, &rm_int0a); -	setvector(0x0b, BIOS_CS, &rm_int0b); -	setvector(0x0c, BIOS_CS, &rm_int0c); -	setvector(0x0d, BIOS_CS, &rm_int0d); -	setvector(0x0e, BIOS_CS, &rm_int0e); -	setvector(0x0f, BIOS_CS, &rm_int0f); -	setvector(0x10, BIOS_CS, &rm_int10); -	setvector(0x11, BIOS_CS, &rm_int11); -	setvector(0x12, BIOS_CS, &rm_int12); -	setvector(0x13, BIOS_CS, &rm_int13); -	setvector(0x14, BIOS_CS, &rm_int14); -	setvector(0x15, BIOS_CS, &rm_int15); -	setvector(0x16, BIOS_CS, &rm_int16); -	setvector(0x17, BIOS_CS, &rm_int17); -	setvector(0x18, BIOS_CS, &rm_int18); -	setvector(0x19, BIOS_CS, &rm_int19); -	setvector(0x1a, BIOS_CS, &rm_int1a); -	setvector(0x1b, BIOS_CS, &rm_int1b); -	setvector(0x1c, BIOS_CS, &rm_int1c); -	setvector(0x1d, BIOS_CS, &rm_int1d); -	setvector(0x1e, BIOS_CS, &rm_int1e); -	setvector(0x1f, BIOS_CS, &rm_int1f); - -	set_jmp_vector(0xfff0, &realmode_reset); -	set_jmp_vector(0xfe6e, &realmode_pci_bios_call_entry); - -	/* fill in data area */ -	RELOC_16_WORD(0xf000, ram_in_64kb_chunks) = gd->ram_size >> 16; -	RELOC_16_WORD(0xf000, bios_equipment) = 0; /* FixMe */ - -	/* If we assume only one PCI hose, this PCI hose -	 * will own PCI bus #0, and the last PCI bus of -	 * that PCI hose will be the last PCI bus in the -	 * system. -	 * (This, ofcause break on multi hose systems, -	 *  but our PCI BIOS only support one hose anyway) -	 */ -#ifdef CONFIG_PCI -	pri_hose = pci_bus_to_hose(0); -	if (NULL != pri_hose) { -		/* fill in last pci bus number for use by the realmode -		 * PCI BIOS */ -		RELOC_16_BYTE(0xf000, pci_last_bus) = pri_hose->last_busno; -	} -#endif -	return 0; -} diff --git a/arch/x86/lib/realmode.c b/arch/x86/lib/realmode.c deleted file mode 100644 index 75511b2bd..000000000 --- a/arch/x86/lib/realmode.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * (C) Copyright 2002 - * Daniel Engström, Omicron Ceti AB, <daniel@omicron.se> - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include <common.h> -#include <asm/io.h> -#include <asm/ptrace.h> -#include <asm/realmode.h> - -#define REALMODE_MAILBOX ((char *)0xe00) - -int realmode_setup(void) -{ -	/* The realmode section is not relocated and still in the ROM. */ -	ulong realmode_start = (ulong)&__realmode_start; -	ulong realmode_size = (ulong)&__realmode_size; - -	/* copy the realmode switch code */ -	if (realmode_size > (REALMODE_MAILBOX - (char *)REALMODE_BASE)) { -		printf("realmode switch too large (%ld bytes, max is %d)\n", -		       realmode_size, -		       (int)(REALMODE_MAILBOX - (char *)REALMODE_BASE)); -		return -1; -	} - -	memcpy((char *)REALMODE_BASE, (void *)realmode_start, realmode_size); -	asm("wbinvd\n"); - -	return 0; -} - -int enter_realmode(u16 seg, u16 off, struct pt_regs *in, struct pt_regs *out) -{ - -	/* setup out thin bios emulation */ -	if (bios_setup()) -		return -1; - -	if (realmode_setup()) -		return -1; - -	in->eip = off; -	in->xcs = seg; -	if ((in->esp & 0xffff) < 4) -		printf("Warning: entering realmode with sp < 4 will fail\n"); - -	memcpy(REALMODE_MAILBOX, in, sizeof(struct pt_regs)); -	asm("wbinvd\n"); - -	__asm__ volatile ( -		 "lcall $0x20,%0\n" : : "i" (&realmode_enter)); - -	asm("wbinvd\n"); -	memcpy(out, REALMODE_MAILBOX, sizeof(struct pt_regs)); - -	return out->eax; -} - -/* - * This code is supposed to access a realmode interrupt - * it does currently not work for me - */ -int enter_realmode_int(u8 lvl, struct pt_regs *in, struct pt_regs *out) -{ -	/* place two instructions at 0x700 */ -	writeb(0xcd, 0x700);  /* int $lvl */ -	writeb(lvl, 0x701); -	writeb(0xcb, 0x702);  /* lret */ -	asm("wbinvd\n"); - -	enter_realmode(0x00, 0x700, in, out); - -	return out->eflags & 0x00000001; -} diff --git a/arch/x86/lib/realmode_switch.S b/arch/x86/lib/realmode_switch.S deleted file mode 100644 index c4c4c4378..000000000 --- a/arch/x86/lib/realmode_switch.S +++ /dev/null @@ -1,232 +0,0 @@ -/* - * (C) Copyright 2002 - * Daniel Engström, Omicron Ceti AB, daniel@omicron.se - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -/* 32bit -> 16bit -> 32bit mode switch code */ - -/* - * Stack frame at 0xe00 - *	e00 ebx; - *	e04 ecx; - *	e08 edx; - *	e0c esi; - *	e10 edi; - *	e14 ebp; - *	e18 eax; - *	e1c ds; - *	e20 es; - *	e24 fs; - *	e28 gs; - *	e2c orig_eax; - *	e30 eip; - *	e34 cs; - *	e38 eflags; - *	e3c esp; - *	e40 ss; - */ - -#define a32		.byte 0x67;	/* address size prefix 32 */ -#define o32		.byte 0x66;	/* operand size prefix 32 */ - -.section .realmode, "ax" -.code16 - -	/* 16bit protected mode code here */ -.globl realmode_enter -realmode_enter: -o32	pusha -o32	pushf -	cli -	sidt	saved_idt -	sgdt	saved_gdt -	movl	%esp, %eax -	movl	%eax, saved_protected_mode_esp - -	movl	$0x10, %eax -	movl	%eax, %esp -	movw	$0x28, %ax -	movw	%ax, %ds -	movw	%ax, %es -	movw	%ax, %fs -	movw	%ax, %gs - -	lidt	realmode_idt_ptr -	/* Go back into real mode by clearing PE to 0 */ -	movl	%cr0, %eax -	andl	$0x7ffffffe, %eax -	movl	%eax, %cr0 - -	/* switch to real mode */ -	ljmp	$0x0,$do_realmode - -do_realmode: -	/* realmode code from here */ -	movw	%cs,%ax -	movw	%ax,%ds -	movw	%ax,%es -	movw	%ax,%fs -	movw	%ax,%gs - -	/* create a temporary stack */ -	movw	$0xc0, %ax -	movw	%ax, %ss -	movw	$0x200, %ax -	movw	%ax, %sp - -	popl	%ebx -	popl	%ecx -	popl	%edx -	popl	%esi -	popl	%edi -	popl	%ebp -	popl	%eax -	movl	%eax, temp_eax -	popl	%eax -	movw	%ax, %ds -	popl	%eax -	movw	%ax, %es -	popl	%eax -	movw	%ax, %fs -	popl	%eax -	movw	%ax, %gs -	popl	%eax				/* orig_eax */ -	popl	%eax -cs	movw	%ax, temp_ip -	popl	%eax -cs	movw	%ax, temp_cs -o32	popf -	popl	%eax -	popw	%ss -	movl	%eax, %esp -cs	movl	temp_eax, %eax - -	/* self-modifying code, better flush the cache */ -	wbinvd - -	.byte	0x9a				/* lcall */ -temp_ip: -	.word	0				/* new ip */ -temp_cs: -	.word	0				/* new cs */ - -realmode_ret: -	/* save eax, esp and ss */ -cs	movl	%eax, saved_eax -	movl	%esp, %eax -cs	movl	%eax, saved_esp -	movw	%ss, %ax -cs	movw	%ax, saved_ss - -	/* -	 * restore the stack, note that we set sp to 0x244; -	 * pt_regs is 0x44 bytes long and we push the structure -	 * backwards on to the stack, bottom first -	 */ -	movw	$0xc0, %ax -	movw	%ax, %ss -	movw	$0x244, %ax -	movw	%ax, %sp - -	xorl	%eax,%eax -cs	movw	saved_ss, %ax -	pushl	%eax -cs	movl	saved_esp, %eax -	pushl	%eax -o32	pushf -	xorl	%eax,%eax -cs	movw	temp_cs, %ax -	pushl	%eax -cs	movw	temp_ip, %ax -	pushl	%eax -	pushl	$0 -	movw	%gs, %ax -	pushl	%eax -	movw	%fs, %ax -	pushl	%eax -	movw	%es, %ax -	pushl	%eax -	movw	%ds, %ax -	pushl	%eax -	movl	saved_eax, %eax -	pushl	%eax -	pushl	%ebp -	pushl	%edi -	pushl	%esi -	pushl	%edx -	pushl	%ecx -	pushl	%ebx - -o32 cs	lidt	saved_idt -o32 cs	lgdt	saved_gdt - -	/* Go back into protected mode reset PE to 1 */ -	movl	%cr0, %eax -	orl	$1,%eax -	movl	%eax, %cr0 - -	/* flush prefetch queue */ -	jmp	next_line -next_line: -	movw	$return_ptr, %ax -	movw	%ax,%bp -o32 cs	ljmp	*(%bp) - -.code32 -protected_mode: -	/* Reload segment registers */ -	movl	$0x18, %eax -	movw	%ax, %fs -	movw	%ax, %ds -	movw	%ax, %gs -	movw	%ax, %es -	movw	%ax, %ss -	movl	saved_protected_mode_esp, %eax -	movl	%eax, %esp -	popf -	popa -	ret - -temp_eax: -	.long	0 - -saved_ss: -	.word	0 -saved_esp: -	.long	0 -saved_eax: -	.long	0 - -realmode_idt_ptr: -	.word	0x400 -	.word	0x0, 0x0 - -saved_gdt: -	.word	0, 0, 0, 0 -saved_idt: -	.word	0, 0, 0, 0 - -saved_protected_mode_esp: -	.long	0 - -return_ptr: -	.long	protected_mode -	.word	0x10 diff --git a/arch/x86/lib/video.c b/arch/x86/lib/video.c index 20e2416ae..81824f314 100644 --- a/arch/x86/lib/video.c +++ b/arch/x86/lib/video.c @@ -26,7 +26,6 @@  #include <stdio_dev.h>  #include <i8042.h>  #include <asm/ptrace.h> -#include <asm/realmode.h>  #include <asm/io.h>  #include <asm/pci.h> @@ -222,10 +221,5 @@ int video_init(void)  int drv_video_init(void)  { -#ifndef CONFIG_X86_NO_REAL_MODE -	if (video_bios_init()) -		return 1; -#endif -  	return video_init();  } diff --git a/arch/x86/lib/video_bios.c b/arch/x86/lib/video_bios.c deleted file mode 100644 index 1e06759d9..000000000 --- a/arch/x86/lib/video_bios.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * (C) Copyright 2002 - * Daniel Engström, Omicron Ceti AB, <daniel@omicron.se> - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#include <common.h> -#include <pci.h> -#include <malloc.h> -#include <asm/ptrace.h> -#include <asm/realmode.h> -#include <asm/io.h> -#include <asm/pci.h> -#include "bios.h" - -#undef PCI_BIOS_DEBUG -#undef VGA_BIOS_DEBUG - -#ifdef	VGA_BIOS_DEBUG -#define	PRINTF(fmt, args...)	printf(fmt, ##args) -#else -#define PRINTF(fmt, args...) -#endif - -#define PCI_CLASS_VIDEO			3 -#define PCI_CLASS_VIDEO_STD		0 -#define PCI_CLASS_VIDEO_PROG_IF_VGA	0 - -DEFINE_PCI_DEVICE_TABLE(supported) = { -	{PCI_VIDEO_VENDOR_ID, PCI_VIDEO_DEVICE_ID}, -	{} -}; - -static u32 probe_pci_video(void) -{ -	struct pci_controller *hose; -	pci_dev_t devbusfn = pci_find_devices(supported, 0); - -	if ((devbusfn != -1)) { -		u32 old; -		u32 addr; - -		/* PCI video device detected */ -		printf("Found PCI VGA device at %02x.%02x.%x\n", -		       PCI_BUS(devbusfn), -		       PCI_DEV(devbusfn), -		       PCI_FUNC(devbusfn)); - -		/* Enable I/O decoding as well, PCI viudeo boards -		 * support I/O accesses, but they provide no -		 * bar register for this since the ports are fixed. -		 */ -		pci_write_config_word(devbusfn, -				      PCI_COMMAND, -				      PCI_COMMAND_MEMORY | -				      PCI_COMMAND_IO | -				      PCI_COMMAND_MASTER); - -		/* Test the ROM decoder, do the device support a rom? */ -		pci_read_config_dword(devbusfn, PCI_ROM_ADDRESS, &old); -		pci_write_config_dword(devbusfn, PCI_ROM_ADDRESS, -				       (u32)PCI_ROM_ADDRESS_MASK); -		pci_read_config_dword(devbusfn, PCI_ROM_ADDRESS, &addr); -		pci_write_config_dword(devbusfn, PCI_ROM_ADDRESS, old); - -		if (!addr) { -			printf("PCI VGA have no ROM?\n"); -			return 0; -		} - -		/* device have a rom */ -		if (pci_shadow_rom(devbusfn, (void *)0xc0000)) { -			printf("Shadowing of PCI VGA BIOS failed\n"); -			return 0; -		} - -		/* Now enable lagacy VGA port access */ -		hose = pci_bus_to_hose(PCI_BUS(devbusfn)); -		if (pci_enable_legacy_video_ports(hose)) { -			printf("PCI VGA enable failed\n"); -			return 0; -		} - - -		/* return the pci device info, that we'll need later */ -		return PCI_BUS(devbusfn) << 8 | -			PCI_DEV(devbusfn) << 3 | (PCI_FUNC(devbusfn) & 7); -	} - -	return 0; -} - -static int probe_isa_video(void) -{ -	u32 ptr; -	char *buf; - -	ptr = isa_map_rom(0xc0000, 0x8000); - -	if (!ptr) -		return -1; - -	buf = malloc(0x8000); -	if (!buf) { -		isa_unmap_rom(ptr); -		return -1; -	} - -	if (readw(ptr) != 0xaa55) { -		free(buf); -		isa_unmap_rom(ptr); -		return -1; -	} - -	/* shadow the rom */ -	memcpy(buf, (void *)ptr, 0x8000); -	isa_unmap_rom(ptr); -	memcpy((void *)0xc0000, buf, 0x8000); - -	free(buf); - -	return 0; -} - -int video_bios_init(void) -{ -	struct pt_regs regs; -	int size; -	int i; -	u8 sum; - -	/* clear the video bios area in case we warmbooted */ -	memset((void *)0xc0000, 0, 0x8000); -	memset(®s, 0, sizeof(struct pt_regs)); - -	if (probe_isa_video()) -		/* No ISA board found, try the PCI bus */ -		regs.eax = probe_pci_video(); - -	/* Did we succeed in mapping any video bios */ -	if (readw(0xc0000) == 0xaa55) { -		PRINTF("Found video bios signature\n"); -		size = readb(0xc0002) * 512; -		PRINTF("size %d\n", size); -		sum = 0; - -		for (i = 0; i < size; i++) -			sum += readb(0xc0000 + i); - -		PRINTF("Checksum is %sOK\n", sum ? "NOT " : ""); - -		if (sum) -			return 1; - -		/* -		 * Some video bioses (ATI Mach64) seem to think that -		 * the original int 10 handler is always at -		 * 0xf000:0xf065 , place an iret instruction there -		 */ -		writeb(0xcf, 0xff065); - -		regs.esp = 0x8000; -		regs.xss = 0x2000; -		enter_realmode(0xc000, 3, ®s, ®s); - -		PRINTF("INT 0x10 vector after:  %04x:%04x\n", -		       readw(0x42), readw(0x40)); -		PRINTF("BIOS returned %scarry\n", -		       regs.eflags & 0x00000001 ? "" : "NOT "); -#ifdef PCI_BIOS_DEBUG -		print_bios_bios_stat(); -#endif -		return regs.eflags & 0x00000001; - -	} - -	return 1; - -} diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c index 46af391f2..4e9e1f77e 100644 --- a/arch/x86/lib/zimage.c +++ b/arch/x86/lib/zimage.c @@ -33,7 +33,6 @@  #include <asm/io.h>  #include <asm/ptrace.h>  #include <asm/zimage.h> -#include <asm/realmode.h>  #include <asm/byteorder.h>  #include <asm/bootparam.h>  #ifdef CONFIG_SYS_COREBOOT @@ -175,16 +174,9 @@ struct boot_params *load_zimage(char *image, unsigned long kernel_size,  	else  		*load_address = (void *)ZIMAGE_LOAD_ADDR; -#if (defined CONFIG_ZBOOT_32 || defined CONFIG_X86_NO_REAL_MODE)  	printf("Building boot_params at 0x%8.8lx\n", (ulong)setup_base);  	memset(setup_base, 0, sizeof(*setup_base));  	setup_base->hdr = params->hdr; -#else -	/* load setup */ -	printf("Moving Real-Mode Code to 0x%8.8lx (%d bytes)\n", -	       (ulong)setup_base, setup_size); -	memmove(setup_base, image, setup_size); -#endif  	if (bootproto >= 0x0204)  		kernel_size = hdr->syssize * 16; @@ -241,10 +233,8 @@ int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,  	struct setup_header *hdr = &setup_base->hdr;  	int bootproto = get_boot_protocol(hdr); -#if (defined CONFIG_ZBOOT_32 || defined CONFIG_X86_NO_REAL_MODE)  	setup_base->e820_entries = install_e820_map(  		ARRAY_SIZE(setup_base->e820_map), setup_base->e820_map); -#endif  	if (bootproto == 0x0100) {  		setup_base->screen_info.cl_magic = COMMAND_LINE_MAGIC; @@ -300,7 +290,6 @@ void boot_zimage(void *setup_base, void *load_address)  #ifdef CONFIG_SYS_COREBOOT  	timestamp_add_now(TS_U_BOOT_START_KERNEL);  #endif -#if defined CONFIG_ZBOOT_32  	/*  	 * Set %ebx, %ebp, and %edi to 0, %esi to point to the boot_params  	 * structure, and then jump to the kernel. We assume that %cs is @@ -317,18 +306,6 @@ void boot_zimage(void *setup_base, void *load_address)  	   "b"(0), "D"(0)  	:  "%ebp"  	); -#else -	struct pt_regs regs; - -	memset(®s, 0, sizeof(struct pt_regs)); -	regs.xds = (u32)setup_base >> 4; -	regs.xes = regs.xds; -	regs.xss = regs.xds; -	regs.esp = 0x9000; -	regs.eflags = 0; -	enter_realmode(((u32)setup_base + SETUP_START_OFFSET) >> 4, 0, -		       ®s, ®s); -#endif  }  void setup_pcat_compatibility(void) |