|
|
1.1 ! root 1: /* tag: openbios boot command for x86 ! 2: * ! 3: * Copyright (C) 2003-2004 Stefan Reinauer ! 4: * ! 5: * See the file "COPYING" for further information about ! 6: * the copyright and warranty status of this work. ! 7: */ ! 8: ! 9: #undef BOOTSTRAP ! 10: #include "config.h" ! 11: #include "libopenbios/bindings.h" ! 12: #include "arch/common/nvram.h" ! 13: #include "libc/diskio.h" ! 14: #include "libopenbios/sys_info.h" ! 15: #include "boot.h" ! 16: ! 17: void go(void) ! 18: { ! 19: ucell address, type, size; ! 20: int image_retval = 0; ! 21: ! 22: /* Get the entry point and the type (see forth/debugging/client.fs) */ ! 23: feval("saved-program-state >sps.entry @"); ! 24: address = POP(); ! 25: feval("saved-program-state >sps.file-type @"); ! 26: type = POP(); ! 27: feval("saved-program-state >sps.file-size @"); ! 28: size = POP(); ! 29: ! 30: printk("\nJumping to entry point " FMT_ucellx " for type " FMT_ucellx "...\n", address, type); ! 31: ! 32: switch (type) { ! 33: case 0x0: ! 34: /* Start ELF boot image */ ! 35: image_retval = start_elf(address, (uint32_t)&elf_boot_notes); ! 36: break; ! 37: ! 38: case 0x1: ! 39: /* Start ELF image */ ! 40: image_retval = start_elf(address, (uint32_t)NULL); ! 41: break; ! 42: ! 43: case 0x5: ! 44: /* Start a.out image */ ! 45: image_retval = start_elf(address, (uint32_t)NULL); ! 46: break; ! 47: ! 48: case 0x10: ! 49: /* Start Fcode image */ ! 50: printk("Evaluating FCode...\n"); ! 51: PUSH(address); ! 52: PUSH(1); ! 53: fword("byte-load"); ! 54: image_retval = 0; ! 55: break; ! 56: ! 57: case 0x11: ! 58: /* Start Forth image */ ! 59: PUSH(address); ! 60: PUSH(size); ! 61: fword("eval2"); ! 62: image_retval = 0; ! 63: break; ! 64: } ! 65: ! 66: printk("Image returned with return value %#x\n", image_retval); ! 67: } ! 68: ! 69: ! 70: void boot(void) ! 71: { ! 72: /* No platform-specific boot code */ ! 73: return; ! 74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.