/* tag: openbios boot command for x86 * * Copyright (C) 2003-2004 Stefan Reinauer * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #undef BOOTSTRAP #include "config.h" #include "libopenbios/bindings.h" #include "arch/common/nvram.h" #include "libc/diskio.h" #include "libopenbios/sys_info.h" #include "boot.h" void go(void) { ucell address, type, size; int image_retval = 0; /* Get the entry point and the type (see forth/debugging/client.fs) */ feval("saved-program-state >sps.entry @"); address = POP(); feval("saved-program-state >sps.file-type @"); type = POP(); feval("saved-program-state >sps.file-size @"); size = POP(); printk("\nJumping to entry point " FMT_ucellx " for type " FMT_ucellx "...\n", address, type); switch (type) { case 0x0: /* Start ELF boot image */ image_retval = start_elf(address, (uint32_t)&elf_boot_notes); break; case 0x1: /* Start ELF image */ image_retval = start_elf(address, (uint32_t)NULL); break; case 0x5: /* Start a.out image */ image_retval = start_elf(address, (uint32_t)NULL); break; case 0x10: /* Start Fcode image */ printk("Evaluating FCode...\n"); PUSH(address); PUSH(1); fword("byte-load"); image_retval = 0; break; case 0x11: /* Start Forth image */ PUSH(address); PUSH(size); fword("eval2"); image_retval = 0; break; } printk("Image returned with return value %#x\n", image_retval); } void boot(void) { /* No platform-specific boot code */ return; }