Annotation of qemu/roms/openbios/arch/x86/openbios.c, revision 1.1.1.1

1.1       root        1: /* tag: openbios forth environment, executable code
                      2:  *
                      3:  * Copyright (C) 2003 Patrick Mauritz, Stefan Reinauer
                      4:  *
                      5:  * See the file "COPYING" for further information about
                      6:  * the copyright and warranty status of this work.
                      7:  */
                      8: 
                      9: #include "config.h"
                     10: #include "libopenbios/openbios.h"
                     11: #include "libopenbios/bindings.h"
                     12: #include "asm/types.h"
                     13: #include "dict.h"
                     14: #include "kernel/kernel.h"
                     15: #include "kernel/stack.h"
                     16: #include "drivers/drivers.h"
                     17: #include "drivers/pci.h"
                     18: #include "libopenbios/sys_info.h"
                     19: #include "openbios.h"
                     20: #include "relocate.h"
                     21: #include "boot.h"
                     22: 
                     23: void collect_sys_info(struct sys_info *info);
                     24: 
                     25: #ifdef CONFIG_DRIVER_PCI
                     26: static const pci_arch_t default_pci_host = {
                     27:     .name = "Intel,i440FX",
                     28:     .vendor_id = PCI_VENDOR_ID_INTEL,
                     29:     .device_id = PCI_DEVICE_ID_INTEL_82441,
                     30:     .io_base = 0x1000,
                     31: };
                     32: #endif
                     33: 
                     34: static void init_memory(void)
                     35: {
                     36:        /* push start and end of available memory to the stack
                     37:         * so that the forth word QUIT can initialize memory
                     38:         * management. For now we use hardcoded memory between
                     39:         * 0x10000 and 0x9ffff (576k). If we need more memory
                     40:         * than that we have serious bloat.
                     41:         */
                     42: 
                     43:        PUSH(0x10000);
                     44:        PUSH(0x9FFFF);
                     45: }
                     46: 
                     47: static void
                     48: arch_init( void )
                     49: {
                     50:        openbios_init();
                     51:        modules_init();
                     52: #ifdef CONFIG_DRIVER_PCI
                     53:         arch = &default_pci_host;
                     54:        ob_pci_init();
                     55: #endif
                     56: #ifdef CONFIG_DRIVER_IDE
                     57:        setup_timers();
                     58:        ob_ide_init("/pci/isa", 0x1f0, 0x3f4, 0x170, 0x374);
                     59: #endif
                     60: #ifdef CONFIG_DRIVER_FLOPPY
                     61:        ob_floppy_init("/isa", "floppy0", 0x3f0, 0);
                     62: #endif
                     63: #ifdef CONFIG_XBOX
                     64:        init_video(phys_to_virt(0x3C00000), 640, 480, 32, 2560);
                     65:        node_methods_init();
                     66: #endif
                     67:        device_end();
                     68:        bind_func("platform-boot", boot );
                     69:        bind_func("(go)", go );
                     70: }
                     71: 
                     72: int openbios(void)
                     73: {
                     74: #ifdef CONFIG_DEBUG_CONSOLE
                     75: #ifdef CONFIG_DEBUG_CONSOLE_SERIAL
                     76:        uart_init(CONFIG_SERIAL_PORT, CONFIG_SERIAL_SPEED);
                     77: #endif
                     78:        /* Clear the screen.  */
                     79:        cls();
                     80: #endif
                     81: 
                     82:         collect_sys_info(&sys_info);
                     83: 
                     84:         dict = (unsigned char *)sys_info.dict_start;
                     85:         dicthead = (cell)sys_info.dict_end;
                     86:         last = sys_info.dict_last;
                     87:         dictlimit = sys_info.dict_limit;
                     88: 
                     89:        forth_init();
                     90: 
                     91:        relocate(&sys_info);
                     92: 
                     93: #ifdef CONFIG_DEBUG_CONSOLE_VGA
                     94:        video_init();
                     95: #endif
                     96: #ifdef CONFIG_DEBUG_BOOT
                     97:        printk("forth started.\n");
                     98:        printk("initializing memory...");
                     99: #endif
                    100: 
                    101:        init_memory();
                    102: 
                    103: #ifdef CONFIG_DEBUG_BOOT
                    104:        printk("done\n");
                    105: #endif
                    106: 
                    107:        PUSH_xt( bind_noname_func(arch_init) );
                    108:        fword("PREPOST-initializer");
                    109: 
                    110:        PC = (ucell)findword("initialize-of");
                    111: 
                    112:        if (!PC) {
                    113:                printk("panic: no dictionary entry point.\n");
                    114:                return -1;
                    115:        }
                    116: #ifdef CONFIG_DEBUG_DICTIONARY
                    117:        printk("done (%d bytes).\n", dicthead);
                    118:        printk("Jumping to dictionary...\n");
                    119: #endif
                    120: 
                    121:        enterforth((xt_t)PC);
                    122: 
                    123:        return 0;
                    124: }

unix.superglobalmegacorp.com

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