From: Michael Brown Date: Thu, 11 Jan 2007 18:41:15 +0000 (+0000) Subject: Capable of starting a multiboot kernel (albeit without the multiboot X-Git-Tag: v0.9.3~682 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dc51af59a4630d73add1ceadfdbc8bd780a2850f;p=thirdparty%2Fipxe.git Capable of starting a multiboot kernel (albeit without the multiboot information table yet). --- diff --git a/src/arch/i386/image/multiboot.c b/src/arch/i386/image/multiboot.c index cbab6a5c3..cfe4589a2 100644 --- a/src/arch/i386/image/multiboot.c +++ b/src/arch/i386/image/multiboot.c @@ -74,8 +74,21 @@ struct multiboot_header_info { * @v image ELF file * @ret rc Return status code */ -static int multiboot_execute ( struct image *image __unused ) { - return -ENOTSUP; +static int multiboot_execute ( struct image *image ) { + struct multiboot_info mbinfo; + + /* Populate multiboot information structure */ + memset ( &mbinfo, 0, sizeof ( mbinfo ) ); + + + /* Jump to OS with flat physical addressing */ + __asm__ ( PHYS_CODE ( "call *%%edi\n\t" ) + : : "a" ( MULTIBOOT_BOOTLOADER_MAGIC ), + "b" ( virt_to_phys ( &mbinfo ) ), + "D" ( image->entry ) + : "ecx", "edx", "esi", "ebp" ); + + return -ECANCELED; } /**