Annotation of qemu/roms/openbios/arch/sparc64/boot.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *
        !             3:  */
        !             4: #undef BOOTSTRAP
        !             5: #include "config.h"
        !             6: #include "libopenbios/bindings.h"
        !             7: #include "arch/common/nvram.h"
        !             8: #include "libc/diskio.h"
        !             9: #include "libc/vsprintf.h"
        !            10: #include "libopenbios/sys_info.h"
        !            11: #include "boot.h"
        !            12: 
        !            13: uint64_t kernel_image;
        !            14: uint64_t kernel_size;
        !            15: uint64_t qemu_cmdline;
        !            16: uint64_t cmdline_size;
        !            17: char boot_device;
        !            18: 
        !            19: extern int sparc64_of_client_interface( int *params );
        !            20: 
        !            21: 
        !            22: void go(void)
        !            23: {
        !            24:        ucell address, type, size;
        !            25:        int image_retval = 0;
        !            26: 
        !            27:        /* Get the entry point and the type (see forth/debugging/client.fs) */
        !            28:        feval("saved-program-state >sps.entry @");
        !            29:        address = POP();
        !            30:        feval("saved-program-state >sps.file-type @");
        !            31:        type = POP();
        !            32:        feval("saved-program-state >sps.file-size @");
        !            33:        size = POP();
        !            34: 
        !            35:        printk("\nJumping to entry point " FMT_ucellx " for type " FMT_ucellx "...\n", address, type);
        !            36: 
        !            37:        switch (type) {
        !            38:                case 0x0:
        !            39:                        /* Start ELF boot image */
        !            40:                        image_retval = start_elf(address, (uint64_t)&elf_boot_notes);
        !            41:                        break;
        !            42: 
        !            43:                case 0x1:
        !            44:                        /* Start ELF image */
        !            45:                        image_retval = start_client_image(address, (uint64_t)&sparc64_of_client_interface);
        !            46:                        break;
        !            47: 
        !            48:                case 0x5:
        !            49:                        /* Start a.out image */
        !            50:                        image_retval = start_client_image(address, (uint64_t)&sparc64_of_client_interface);
        !            51:                        break;
        !            52: 
        !            53:                case 0x10:
        !            54:                        /* Start Fcode image */
        !            55:                        printk("Evaluating FCode...\n");
        !            56:                        PUSH(address);
        !            57:                        PUSH(1);
        !            58:                        fword("byte-load");
        !            59:                        image_retval = 0;
        !            60:                        break;
        !            61: 
        !            62:                case 0x11:
        !            63:                        /* Start Forth image */
        !            64:                        PUSH(address);
        !            65:                        PUSH(size);
        !            66:                        fword("eval2");
        !            67:                        image_retval = 0;
        !            68:                        break;
        !            69:        }
        !            70: 
        !            71:        printk("Image returned with return value %#x\n", image_retval);
        !            72: }
        !            73: 
        !            74: 
        !            75: void boot(void)
        !            76: {
        !            77:        char *path, *param;
        !            78: 
        !            79:        /* Copy the incoming path */
        !            80:        fword("2dup");
        !            81:        path = pop_fstr_copy();
        !            82: 
        !            83:        /* Boot preloaded kernel */
        !            84:         if (kernel_size) {
        !            85:             void (*entry)(unsigned long p1, unsigned long p2, unsigned long p3,
        !            86:                           unsigned long p4, unsigned long p5);
        !            87: 
        !            88:             printk("[sparc64] Kernel already loaded\n");
        !            89:             entry = (void *) (unsigned long)kernel_image;
        !            90:             entry(0, 0, 0, 0, (unsigned long)&sparc64_of_client_interface);
        !            91:         }
        !            92: 
        !            93:        /* Invoke Linux directly -- probably not supported */
        !            94:        if(!path) {
        !            95:             /* No path specified, so grab defaults from /chosen */
        !            96:             push_str("bootpath");
        !            97:            push_str("/chosen");
        !            98:             fword("(find-dev)");
        !            99:             POP();
        !           100:             fword("get-package-property");
        !           101:             POP();
        !           102:             path = pop_fstr_copy();
        !           103:        }
        !           104: 
        !           105:        param = strchr(path, ' ');
        !           106:        if(param) {
        !           107:                *param = '\0';
        !           108:                param++;
        !           109:        } else if (cmdline_size) {
        !           110:             param = (char *)qemu_cmdline;
        !           111:         } else {
        !           112:             push_str("boot-args");
        !           113:             push_str("/options");
        !           114:             fword("(find-dev)");
        !           115:             POP();
        !           116:             fword("get-package-property");
        !           117:             POP();
        !           118:             param = pop_fstr_copy();
        !           119:         }
        !           120:        
        !           121:        /* Invoke platform-specific Linux loader */
        !           122:        linux_load(&sys_info, path, param);
        !           123: 
        !           124:        free(path);
        !           125: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.