From dc51af59a4630d73add1ceadfdbc8bd780a2850f Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 11 Jan 2007 18:41:15 +0000 Subject: [PATCH] Capable of starting a multiboot kernel (albeit without the multiboot information table yet). --- src/arch/i386/image/multiboot.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/arch/i386/image/multiboot.c b/src/arch/i386/image/multiboot.c index cbab6a5c..cfe4589a 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; } /**