diff options
Diffstat (limited to 'arch/x86/boot/compressed')
| -rw-r--r-- | arch/x86/boot/compressed/eboot.c | 21 | ||||
| -rw-r--r-- | arch/x86/boot/compressed/head_32.S | 8 | ||||
| -rw-r--r-- | arch/x86/boot/compressed/head_64.S | 8 | ||||
| -rw-r--r-- | arch/x86/boot/compressed/misc.c | 2 | ||||
| -rw-r--r-- | arch/x86/boot/compressed/misc.h | 1 | 
5 files changed, 23 insertions, 17 deletions
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c index b1942e22276..f8fa41190c3 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c @@ -256,10 +256,10 @@ static efi_status_t setup_efi_pci(struct boot_params *params)  	int i;  	struct setup_data *data; -	data = (struct setup_data *)params->hdr.setup_data; +	data = (struct setup_data *)(unsigned long)params->hdr.setup_data;  	while (data && data->next) -		data = (struct setup_data *)data->next; +		data = (struct setup_data *)(unsigned long)data->next;  	status = efi_call_phys5(sys_table->boottime->locate_handle,  				EFI_LOCATE_BY_PROTOCOL, &pci_proto, @@ -295,16 +295,18 @@ static efi_status_t setup_efi_pci(struct boot_params *params)  		if (!pci)  			continue; +#ifdef CONFIG_X86_64  		status = efi_call_phys4(pci->attributes, pci,  					EfiPciIoAttributeOperationGet, 0,  					&attributes); - +#else +		status = efi_call_phys5(pci->attributes, pci, +					EfiPciIoAttributeOperationGet, 0, 0, +					&attributes); +#endif  		if (status != EFI_SUCCESS)  			continue; -		if (!attributes & EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM) -			continue; -  		if (!pci->romimage || !pci->romsize)  			continue; @@ -345,9 +347,9 @@ static efi_status_t setup_efi_pci(struct boot_params *params)  		memcpy(rom->romdata, pci->romimage, pci->romsize);  		if (data) -			data->next = (uint64_t)rom; +			data->next = (unsigned long)rom;  		else -			params->hdr.setup_data = (uint64_t)rom; +			params->hdr.setup_data = (unsigned long)rom;  		data = (struct setup_data *)rom; @@ -432,10 +434,9 @@ static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto,  			 * Once we've found a GOP supporting ConOut,  			 * don't bother looking any further.  			 */ +			first_gop = gop;  			if (conout_found)  				break; - -			first_gop = gop;  		}  	} diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S index aa4aaf1b238..1e3184f6072 100644 --- a/arch/x86/boot/compressed/head_32.S +++ b/arch/x86/boot/compressed/head_32.S @@ -35,11 +35,11 @@ ENTRY(startup_32)  #ifdef CONFIG_EFI_STUB  	jmp	preferred_addr -	.balign	0x10  	/*  	 * We don't need the return address, so set up the stack so -	 * efi_main() can find its arugments. +	 * efi_main() can find its arguments.  	 */ +ENTRY(efi_pe_entry)  	add	$0x4, %esp  	call	make_boot_params @@ -50,8 +50,10 @@ ENTRY(startup_32)  	pushl	%eax  	pushl	%esi  	pushl	%ecx +	sub	$0x4, %esp -	.org 0x30,0x90 +ENTRY(efi_stub_entry) +	add	$0x4, %esp  	call	efi_main  	cmpl	$0, %eax  	movl	%eax, %esi diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index 2c4b171eec3..f5d1aaa0dec 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S @@ -201,12 +201,12 @@ ENTRY(startup_64)  	 */  #ifdef CONFIG_EFI_STUB  	/* -	 * The entry point for the PE/COFF executable is 0x210, so only -	 * legacy boot loaders will execute this jmp. +	 * The entry point for the PE/COFF executable is efi_pe_entry, so +	 * only legacy boot loaders will execute this jmp.  	 */  	jmp	preferred_addr -	.org 0x210 +ENTRY(efi_pe_entry)  	mov	%rcx, %rdi  	mov	%rdx, %rsi  	pushq	%rdi @@ -218,7 +218,7 @@ ENTRY(startup_64)  	popq	%rsi  	popq	%rdi -	.org 0x230,0x90 +ENTRY(efi_stub_entry)  	call	efi_main  	movq	%rax,%rsi  	cmpq	$0,%rax diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c index 88f7ff6da40..7cb56c6ca35 100644 --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c @@ -325,6 +325,8 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap,  {  	real_mode = rmode; +	sanitize_boot_params(real_mode); +  	if (real_mode->screen_info.orig_video_mode == 7) {  		vidmem = (char *) 0xb0000;  		vidport = 0x3b4; diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h index 0e6dc0ee0ee..674019d8e23 100644 --- a/arch/x86/boot/compressed/misc.h +++ b/arch/x86/boot/compressed/misc.h @@ -18,6 +18,7 @@  #include <asm/page.h>  #include <asm/boot.h>  #include <asm/bootparam.h> +#include <asm/bootparam_utils.h>  #define BOOT_BOOT_H  #include "../ctype.h"  |