diff options
author | RajithaY <rajithax.yerrumsetty@intel.com> | 2017-04-25 03:31:15 -0700 |
---|---|---|
committer | Rajitha Yerrumchetty <rajithax.yerrumsetty@intel.com> | 2017-05-22 06:48:08 +0000 |
commit | bb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch) | |
tree | ca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/roms/openbios/arch/ppc | |
parent | a14b48d18a9ed03ec191cf16b162206998a895ce (diff) |
Adding qemu as a submodule of KVMFORNFV
This Patch includes the changes to add qemu as a submodule to
kvmfornfv repo and make use of the updated latest qemu for the
execution of all testcase
Change-Id: I1280af507a857675c7f81d30c95255635667bdd7
Signed-off-by:RajithaY<rajithax.yerrumsetty@intel.com>
Diffstat (limited to 'qemu/roms/openbios/arch/ppc')
66 files changed, 0 insertions, 10694 deletions
diff --git a/qemu/roms/openbios/arch/ppc/Kconfig b/qemu/roms/openbios/arch/ppc/Kconfig deleted file mode 100644 index f317c0a4d..000000000 --- a/qemu/roms/openbios/arch/ppc/Kconfig +++ /dev/null @@ -1,48 +0,0 @@ -mainmenu "OpenBIOS Configuration" - -config PPC - bool - default y - help - Building for PPC hardware. - -config BIG_ENDIAN - bool - default y - help - PPC hardware is big endian (per default) - -choice - prompt "Platform Type" - default MOL - -config MOL - bool "Mac-on-Linux" - help - Build an image for Mac-on-Linux - -config MPC107 - bool "MPC107 board (Crescendo)" - help - Build for Crescendo board. - -config BRIQ - bool "Total Impact briQ" - help - Build an image for the Total Impact briQ - -config NO_ARCH - bool "None" - help - Don't build any images. - -endchoice - -menu "Build hosted UNIX Binary" -source "arch/unix/Kconfig" -endmenu - -source "kernel/Kconfig" -source "forth/Kconfig" -source "libopenbios/Kconfig" -source "drivers/Kconfig" diff --git a/qemu/roms/openbios/arch/ppc/Makefile b/qemu/roms/openbios/arch/ppc/Makefile deleted file mode 100644 index e182825e5..000000000 --- a/qemu/roms/openbios/arch/ppc/Makefile +++ /dev/null @@ -1,79 +0,0 @@ - -include ../../config/Makefile.top - -SUBDIRS = -MOL = $(CONFIG_MOL:y=mol) -BRIQ = $(CONFIG_BRIQ:y=briq) -XTARGETS = $(MOL) $(BRIQ) ppc mollink -DICTIONARIES = $(MOL) $(BRIQ) - -INCLUDES = -I../../kernel -I../../kernel/include \ - -I../../include/molasm -I$(ODIR)/include - -############################################################################# - -mol-OBJS = mol/init.o mol/main.o mol/mol.o mol/console.o mol/osi-blk.o \ - mol/osi-scsi.o mol/pseudodisk.o mol/methods.o ofmem.o \ - mol/video.o mol/prom.o mol/tree.o misc.o mol/kernel.o - -briq-OBJS = briq/init.o briq/main.o briq/briq.o briq/vfd.o \ - ofmem.o briq/methods.o briq/tree.o \ - misc.o briq/kernel.o - -ppc-OBJS = $(KOBJS) $(MODULE_LIBS) \ - $(FS_LIBS) $(DRIVER_LIBS) $(LIBC_LIBS) - -all-$(CONFIG_MOL) += $(ODIR)/mol.image -all-$(CONFIG_BRIQ) += $(ODIR)/briq.image -all-$(CONFIG_MPC107) += $(ODIR)/mpc107.image - - -############################################################################# - -mol-SRC = ppc.fs tree.fs mol.fs $(ARCHDICT_SRC) -briq-SRC = ppc.fs briq/tree.fs briq/briq.fs $(ARCHDICT_SRC) - -$(ODIR)/mol/kernel.o: $(ODIR)/include/mol-dict.h -$(ODIR)/briq/kernel.o: $(ODIR)/include/briq-dict.h - -$(ODIR)/include/mol-dict.h: $(ODIR)/mol.dict - test -d $(dir $@) || $(INSTALL) -d $(dir $@) - @echo "static const char forth_dictionary[] = {" > $@ - @cat $< | hexdump -ve '1/0 "\t" 8/1 "0x%02x, " 1/0 "\n"' \ - | sed 's/0x ,//g' >> $@ - @echo "};" >> $@ - -$(ODIR)/include/briq-dict.h: $(ODIR)/briq.dict - test -d $(dir $@) || $(INSTALL) -d $(dir $@) - @echo "static const char forth_dictionary[] = {" > $@ - @cat $< | hexdump -ve '1/0 "\t" 8/1 "0x%02x, " 1/0 "\n"' \ - | sed 's/0x ,//g' >> $@ - @echo "};" >> $@ - -############################################################################# - -$(ODIR)/mol.image: $(ODIR)/start.o $(ODIR)/libmol.a $(ODIR)/libppc.a - @printf "= Building %-22s : " $@ - building= - $(LD) -Ttext=0x01e01000 -Bstatic $^ $(LIBGCC) -o $@ - @nm $@ | sort > $(ODIR)/mol.syms - strip -g $@ - @echo "ok" - -$(ODIR)/briq.image: $(ODIR)/start.o $(ODIR)/timebase.o $(ODIR)/libbriq.a $(ODIR)/libppc.a - @printf "= Building %-22s : " $@ - building= - $(LD) -g -Ttext=0x01e01000 -Bstatic $^ $(LIBGCC) -o $@ - @nm $@ | sort > $(ODIR)/briq.syms - #strip -g $@ - @echo "ok" - -$(ODIR)/mpc107.image: - @echo "BUILDING mpc107.image (not yet implemented)" - -clean-local: - $(RM) $(ODIR)/*.image $(ODIR)/*.syms $(ODIR)/include/mol-dict.h - -include Makefile.asm -include $(rules)/Rules.make -include $(rules)/Rules.forth diff --git a/qemu/roms/openbios/arch/ppc/Makefile.asm b/qemu/roms/openbios/arch/ppc/Makefile.asm deleted file mode 100644 index 32d43376d..000000000 --- a/qemu/roms/openbios/arch/ppc/Makefile.asm +++ /dev/null @@ -1,32 +0,0 @@ -# -*- makefile -*- -# -# Makefile.asm - assembly support -# -# Copyright (C) 2004 Samuel Rydh (samuel@ibrium.se) -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# version 2 - - -################################################# -# Rules for asm targets -################################################# - -ASMFLAGS = -D__ASSEMBLY__ -I$(top_srcdir) $(ALTIVEC) -FILTERBIN = $(top_srcdir)/scripts/asfilter -ASFILTER = $(shell if test -x $(FILTERBIN) ; then echo $(FILTERBIN) \ - ; else echo "tr ';' '\n'" ; fi) -INVOKE_M4 = | $(M4) -s $(M4_NO_GNU) | $(ASFILTER) - -$(ODIR)/%.o: %.S - @printf " Compiling %-20s: " $(notdir $@) - assembly= - @install -d $(dir $@) - @$(RM) $@ $@.s - @$(CPP) $(ASMFLAGS) $(IDIRS) $< > /dev/null - $(CPP) $(ASMFLAGS) $(IDIRS) $(DEPFLAGS) $< $(INVOKE_M4) > $@.s - $(AS) $@.s $(AS_FLAGS) -o $@ - @$(DEPEXTRA) - @$(RM) $@.s - @echo "ok" diff --git a/qemu/roms/openbios/arch/ppc/briq/briq.c b/qemu/roms/openbios/arch/ppc/briq/briq.c deleted file mode 100644 index a8541c370..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/briq.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <briq.c> - * - * Copyright (C) 2004, Greg Watson - * - * derived from mol.c - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "kernel/kernel.h" -#include "arch/common/nvram.h" -#include "libc/vsprintf.h" -#include "libc/string.h" -#include "briq/briq.h" -#include <stdarg.h> - -#define UART_BASE 0x3f8 - -unsigned long virt_offset = 0; - -void -exit( int status ) -{ - for (;;); -} - -void -fatal_error( const char *err ) -{ - printk("Fatal error: %s\n", err ); - exit(0); -} - -void -panic( const char *err ) -{ - printk("Panic: %s\n", err ); - exit(0); - - /* won't come here... this keeps the gcc happy */ - for( ;; ) - ; -} - - -/************************************************************************/ -/* print using OSI interface */ -/************************************************************************/ - -static int do_indent; - -int -printk( const char *fmt, ... ) -{ - char *p, buf[1024]; - va_list args; - int i; - - va_start(args, fmt); - i = vnsprintf(buf, sizeof(buf), fmt, args); - va_end(args); - - for( p=buf; *p; p++ ) { - if( *p == '\n' ) - do_indent = 0; - if( do_indent++ == 1 ) { - putchar( '>' ); - putchar( '>' ); - putchar( ' ' ); - } - putchar( *p ); - } - return i; -} - - -/************************************************************************/ -/* TTY iface */ -/************************************************************************/ - -static int ttychar = -1; - -static int -tty_avail( void ) -{ - return 1; -} - -static int -tty_putchar( int c ) -{ - if( tty_avail() ) { - while (!(inb(UART_BASE + 0x05) & 0x20)) - ; - outb(c, UART_BASE); - while (!(inb(UART_BASE + 0x05) & 0x40)) - ; - } - return c; -} - -int -availchar( void ) -{ - if( !tty_avail() ) - return 0; - - if( ttychar < 0 ) - ttychar = inb(UART_BASE); - return (ttychar >= 0); -} - -int -getchar( void ) -{ - int ch; - - if( !tty_avail() ) - return 0; - - if( ttychar < 0 ) - return inb(UART_BASE); - ch = ttychar; - ttychar = -1; - return ch; -} - -int -putchar( int c ) -{ - if (c == '\n') - tty_putchar('\r'); - return tty_putchar(c); -} - - -/************************************************************************/ -/* briQ specific stuff */ -/************************************************************************/ - -static char nvram[2048]; - -void -dump_nvram(void) -{ - static char hexdigit[] = "0123456789abcdef"; - int i; - for (i = 0; i < 16*4; i++) - { - printk ("%c", hexdigit[nvram[i] >> 4]); - printk ("%c", hexdigit[nvram[i] % 16]); - if (!((i + 1) % 16)) - { - printk ("\n"); - } - else - { - printk (" "); - } - } -} - - -int -arch_nvram_size( void ) -{ - return sizeof(nvram); -} - -void -arch_nvram_put( char *buf ) -{ - memcpy(nvram, buf, sizeof(nvram)); - printk("new nvram:\n"); - dump_nvram(); -} - -void -arch_nvram_get( char *buf ) -{ - memcpy(buf, nvram, sizeof(nvram)); - printk("current nvram:\n"); - dump_nvram(); -} diff --git a/qemu/roms/openbios/arch/ppc/briq/briq.fs b/qemu/roms/openbios/arch/ppc/briq/briq.fs deleted file mode 100644 index 78d77970c..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/briq.fs +++ /dev/null @@ -1,115 +0,0 @@ -\ briq specific initialization code -\ -\ Copyright (C) 2004 Greg Watson -\ -\ This program is free software; you can redistribute it and/or -\ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation -\ - - -\ ------------------------------------------------------------------------- -\ initialization -\ ------------------------------------------------------------------------- - -: make-openable ( path ) - find-dev if - begin ?dup while - \ install trivial open and close methods - dup active-package! is-open - parent - repeat - then -; - -: preopen ( chosen-str node-path ) - 2dup make-openable - - " /chosen" find-device - open-dev ?dup if - encode-int 2swap property - else - 2drop - then -; - -\ preopen device nodes (and store the ihandles under /chosen) -:noname - " rtc" " /pci/isa/rtc" preopen - " memory" " /memory" preopen - " mmu" " /cpu@0" preopen - " stdout" " /packages/terminal-emulator" preopen - " stdin" " keyboard" preopen - -; SYSTEM-initializer - - -\ ------------------------------------------------------------------------- -\ device tree fixing -\ ------------------------------------------------------------------------- - -\ add decode-address methods -: (make-decodable) ( phandle -- ) - - dup " #address-cells" rot get-package-property 0= if - decode-int nip nip - over " decode-unit" rot find-method if 2drop else - ( save phandle ncells ) - - over active-package! - case - 1 of ['] parse-hex " decode-unit" is-xt-func endof - 3 of - " bus-range" active-package get-package-property 0= if - decode-int nip nip - ['] encode-unit-pci " encode-unit" is-xt-func - " decode-unit" is-func-begin - ['] (lit) , , - ['] decode-unit-pci-bus , - is-func-end - then - endof - endcase - then - then - drop -; - -: init-briq-tree ( -- ) - active-package - - iterate-tree-begin - begin ?dup while - - dup (make-decodable) - - iterate-tree - repeat - - active-package! -; - -\ use the tty interface if available -: activate-tty-interface - " /packages/terminal-emulator" find-dev if drop - " /packages/terminal-emulator" " input-device" $setenv - " /packages/terminal-emulator" " output-device" $setenv - then -; - -:noname - " keyboard" input -; CONSOLE-IN-initializer - - -\ ------------------------------------------------------------------------- -\ pre-booting -\ ------------------------------------------------------------------------- - -: update-chosen - " /chosen" find-device - stdin @ encode-int " stdin" property - stdout @ encode-int " stdout" property - " /pci/isa/interrupt-controller" find-dev if encode-int " interrupt-controller" property then - device-end -; diff --git a/qemu/roms/openbios/arch/ppc/briq/briq.h b/qemu/roms/openbios/arch/ppc/briq/briq.h deleted file mode 100644 index 33a2cafa8..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/briq.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Creation Date: <2004/08/28 17:50:12 stepan> - * Time-stamp: <2004/08/28 17:50:12 stepan> - * - * <briq.h> - * - * Copyright (C) 2004 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#ifndef _H_BRIQ -#define _H_BRIQ - -/* vfd.c */ -extern int vfd_draw_str( const char *str ); -extern void vfd_close( void ); - -#include "kernel.h" - -#endif /* _H_BRIQ */ diff --git a/qemu/roms/openbios/arch/ppc/briq/init.c b/qemu/roms/openbios/arch/ppc/briq/init.c deleted file mode 100644 index b32e97aa2..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/init.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <init.c> - * - * Initialization for briq - * - * Copyright (C) 2004 Greg Watson - * - * based on mol/init.c: - * - * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Samuel & David Rydh - * (samuel@ibrium.se, dary@lindesign.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/openbios.h" -#include "libopenbios/bindings.h" -#include "arch/common/nvram.h" -#include "briq/briq.h" -#include "libopenbios/ofmem.h" -#include "openbios-version.h" - -extern void unexpected_excep( int vector ); -extern void setup_timers( void ); - -#if 0 -int -get_bool_res( const char *res ) -{ - char buf[8], *p; - - p = BootHGetStrRes( res, buf, sizeof(buf) ); - if( !p ) - return -1; - if( !strcasecmp(p,"true") || !strcasecmp(p,"yes") || !strcasecmp(p,"1") ) - return 1; - return 0; -} -#endif - -void -unexpected_excep( int vector ) -{ - printk("briQ panic: Unexpected exception %x\n", vector ); - for( ;; ) - ; -} - -unsigned long isa_io_base; - -void -entry( void ) -{ - isa_io_base = 0x80000000; - - printk("\n"); - printk("=============================================================\n"); - printk(PROGRAM_NAME " " OPENBIOS_VERSION_STR " [%s]\n", - OPENBIOS_BUILD_DATE); - - ofmem_init(); - initialize_forth(); - /* won't return */ - - printk("of_startup returned!\n"); - for( ;; ) - ; -} - -static void -setenv( char *env, char *value ) -{ - push_str( value ); - push_str( env ); - fword("$setenv"); -} - -void -arch_of_init( void ) -{ -#if CONFIG_RTAS - phandle_t ph; -#endif - int autoboot; - - devtree_init(); - node_methods_init(); - modules_init(); - setup_timers(); -#ifdef CONFIG_DRIVER_PCI - ob_pci_init(); -#endif - -#if CONFIG_RTAS - if( !(ph=find_dev("/rtas")) ) - printk("Warning: No /rtas node\n"); - else { - unsigned long size = 0x1000; - while( size < (unsigned long)of_rtas_end - (unsigned long)of_rtas_start ) - size *= 2; - set_property( ph, "rtas-size", (char*)&size, sizeof(size) ); - } -#endif - -#if 0 - /* tweak boot settings */ - autoboot = !!get_bool_res("autoboot"); -#endif - autoboot = 0; - if( !autoboot ) - printk("Autobooting disabled - dropping into OpenFirmware\n"); - setenv("auto-boot?", autoboot ? "true" : "false" ); - setenv("boot-command", "briqboot"); - -#if 0 - if( get_bool_res("tty-interface") == 1 ) -#endif - fword("activate-tty-interface"); - - /* hack */ - device_end(); - bind_func("briqboot", boot ); -} diff --git a/qemu/roms/openbios/arch/ppc/briq/kernel.c b/qemu/roms/openbios/arch/ppc/briq/kernel.c deleted file mode 100644 index e85134d43..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/kernel.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:03:25 stepan> - * Time-stamp: <2004/08/28 18:03:25 stepan> - * - * <briq/kernel.c> - * - * Copyright (C) 2004 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "briq-dict.h" -#include "../kernel.c" diff --git a/qemu/roms/openbios/arch/ppc/briq/main.c b/qemu/roms/openbios/arch/ppc/briq/main.c deleted file mode 100644 index fbb2a26de..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/main.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <main.c> - * - * Copyright (C) 2004 Greg Watson - * - * Based on MOL specific code which is - * Copyright (C) 2002, 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libopenbios/elfload.h" -#include "arch/common/nvram.h" -#include "libc/diskio.h" -#include "libc/vsprintf.h" -#include "briq/briq.h" -#include "libopenbios/ofmem.h" - -static void -transfer_control_to_elf( unsigned long entry ) -{ - extern void call_elf( unsigned long entry ); - printk("Starting ELF image at 0x%08lX\n", entry); - call_elf( 0x400000 ); - //call_elf( entry ); - - fatal_error("call_elf returned unexpectedly\n"); -} - -static int -load_elf_rom( unsigned long *entry, int fd ) -{ - int i, lszz_offs, elf_offs; - char buf[128], *addr; - Elf_ehdr ehdr; - Elf_phdr *phdr; - size_t s; - - printk("Loading '%s'\n", get_file_path(fd)); - - /* the ELF-image (usually) starts at offset 0x4000 */ - if( (elf_offs=find_elf(fd)) < 0 ) { - printk("----> %s is not an ELF image\n", buf ); - exit(1); - } - if( !(phdr=elf_readhdrs(fd, elf_offs, &ehdr)) ) - fatal_error("elf_readhdrs failed\n"); - - *entry = ehdr.e_entry; - - /* load segments. Compressed ROM-image assumed to be located immediately - * after the last segment */ - lszz_offs = elf_offs; - for( i=0; i<ehdr.e_phnum; i++ ) { - /* p_memsz, p_flags */ - s = MIN( phdr[i].p_filesz, phdr[i].p_memsz ); - seek_io( fd, elf_offs + phdr[i].p_offset ); - - /* printk("filesz: %08lX memsz: %08lX p_offset: %08lX p_vaddr %08lX\n", - phdr[i].p_filesz, phdr[i].p_memsz, phdr[i].p_offset, - phdr[i].p_vaddr ); */ - - if( phdr[i].p_vaddr != phdr[i].p_paddr ) - printk("WARNING: ELF segment virtual addr != physical addr\n"); - lszz_offs = MAX( lszz_offs, elf_offs + phdr[i].p_offset + phdr[i].p_filesz ); - if( !s ) - continue; - if( ofmem_claim( phdr[i].p_vaddr, phdr[i].p_memsz, 0 ) == -1 ) - fatal_error("Claim failed!\n"); - - addr = (char*)phdr[i].p_vaddr; - if( read_io(fd, addr, s) != s ) - fatal_error("read failed\n"); - -#if 0 - /* patch CODE segment */ - if( *entry >= phdr[i].p_vaddr && *entry < phdr[i].p_vaddr + s ) { - patch_newworld_rom( (char*)phdr[i].p_vaddr, s ); - newworld_timer_hack( (char*)phdr[i].p_vaddr, s ); - } -#endif - flush_icache_range( addr, addr+s ); - - /*printk("ELF ROM-section loaded at %08lX (size %08lX)\n", - (unsigned long)phdr[i].p_vaddr, (unsigned long)phdr[i].p_memsz );*/ - } - free( phdr ); - return lszz_offs; -} - - -static void -encode_bootpath( const char *spec, const char *args ) -{ - phandle_t chosen_ph = find_dev("/chosen"); - set_property( chosen_ph, "bootpath", spec, strlen(spec)+1 ); - set_property( chosen_ph, "bootargs", args, strlen(args)+1 ); -} - -/************************************************************************/ -/* briq booting */ -/************************************************************************/ - -static void -briq_startup( void ) -{ - const char *paths[] = { "hd:0,\\zImage.chrp", NULL }; - const char *args[] = { "root=/dev/hda2 console=ttyS0,115200", NULL }; - unsigned long entry; - int i, fd; - - for( i=0; paths[i]; i++ ) { - if( (fd=open_io(paths[i])) == -1 ) - continue; - (void) load_elf_rom( &entry, fd ); - close_io( fd ); - encode_bootpath( paths[i], args[i] ); - - update_nvram(); - transfer_control_to_elf( entry ); - /* won't come here */ - } - printk("*** Boot failure! No secondary bootloader specified ***\n"); -} - - -/************************************************************************/ -/* entry */ -/************************************************************************/ - -void -boot( void ) -{ - fword("update-chosen"); - briq_startup(); -} diff --git a/qemu/roms/openbios/arch/ppc/briq/methods.c b/qemu/roms/openbios/arch/ppc/briq/methods.c deleted file mode 100644 index 649e9bafa..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/methods.c +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <methods.c> - * - * Misc device node methods - * - * Copyright (C) 2004 Greg Watson - * - * Based on MOL specific code which is - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libc/string.h" -#include "briq/briq.h" -#include "libopenbios/ofmem.h" - -/************************************************************************/ -/* RTAS (run-time abstraction services) */ -/************************************************************************/ - -#ifdef CONFIG_RTAS -DECLARE_NODE( rtas, INSTALL_OPEN, 0, "+/rtas" ); - -/* ( physbase -- rtas_callback ) */ -static void -rtas_instantiate( void ) -{ - int physbase = POP(); - int s=0x1000, size = (int)of_rtas_end - (int)of_rtas_start; - unsigned long virt; - - while( s < size ) - s += 0x1000; - virt = ofmem_claim_virt( 0, s, 0x1000 ); - ofmem_map( physbase, virt, s, -1 ); - memcpy( (char*)virt, of_rtas_start, size ); - - printk("RTAS instantiated at %08x\n", physbase ); - flush_icache_range( (char*)virt, (char*)virt + size ); - - PUSH( physbase ); -} - -NODE_METHODS( rtas ) = { - { "instantiate", rtas_instantiate }, - { "instantiate-rtas", rtas_instantiate }, -}; -#endif - - -/************************************************************************/ -/* stdout */ -/************************************************************************/ - -DECLARE_NODE( vfd_stdout, INSTALL_OPEN, 0, "Tdisplay" ); - -/* ( addr len -- actual ) */ -static void -stdout_write( void ) -{ - int len = POP(); - char *addr = (char*)POP(); - char *s = malloc( len + 1 ); - - strncpy_nopad( s, addr, len ); - s[len]=0; - - printk( "%s", s ); - //vfd_draw_str( s ); - free( s ); - - PUSH( len ); -} - -NODE_METHODS( vfd_stdout ) = { - { "write", stdout_write }, -}; - - -/************************************************************************/ -/* tty */ -/************************************************************************/ - -DECLARE_NODE( tty, INSTALL_OPEN, 0, "/packages/terminal-emulator" ); - -/* ( addr len -- actual ) */ -static void -tty_read( void ) -{ - int ch, len = POP(); - char *p = (char*)POP(); - int ret=0; - - if( len > 0 ) { - ret = 1; - ch = getchar(); - if( ch >= 0 ) { - *p = ch; - } else { - ret = 0; - } - } - PUSH( ret ); -} - -/* ( addr len -- actual ) */ -static void -tty_write( void ) -{ - int i, len = POP(); - char *p = (char*)POP(); - for( i=0; i<len; i++ ) - putchar( *p++ ); - RET( len ); -} - -NODE_METHODS( tty ) = { - { "read", tty_read }, - { "write", tty_write }, -}; - -/************************************************************************/ -/* client interface 'quiesce' */ -/************************************************************************/ - -DECLARE_NODE( ciface, 0, 0, "/packages/client-iface" ); - -/* ( -- ) */ -static void -ciface_quiesce( unsigned long args[], unsigned long ret[] ) -{ -#if 0 - unsigned long msr; - /* This seems to be the correct thing to do - but I'm not sure */ - asm volatile("mfmsr %0" : "=r" (msr) : ); - msr &= ~(MSR_IR | MSR_DR); - asm volatile("mtmsr %0" :: "r" (msr) ); -#endif - printk("=============================================================\n\n"); -} - -/* ( -- ms ) */ -static void -ciface_milliseconds( unsigned long args[], unsigned long ret[] ) -{ - extern unsigned long get_timer_freq(); - static unsigned long mticks=0, usecs=0; - unsigned long t; - - asm volatile("mftb %0" : "=r" (t) : ); - if( mticks ) - usecs += get_timer_freq() / 1000000 * ( t-mticks ); - mticks = t; - - PUSH( usecs/1000 ); -} - - -NODE_METHODS( ciface ) = { - { "quiesce", ciface_quiesce }, - { "milliseconds", ciface_milliseconds }, -}; - - -/************************************************************************/ -/* MMU/memory methods */ -/************************************************************************/ - -DECLARE_NODE( memory, INSTALL_OPEN, 0, "/memory" ); -DECLARE_NODE( mmu, INSTALL_OPEN, 0, "/cpu@0" ); -DECLARE_NODE( mmu_ciface, 0, 0, "/packages/client-iface" ); - - -/* ( phys size align --- base ) */ -static void -mem_claim( void ) -{ - int align = POP(); - int size = POP(); - int phys = POP(); - int ret = ofmem_claim_phys( phys, size, align ); - - if( ret == -1 ) { - printk("MEM: claim failure\n"); - throw( -13 ); - return; - } - PUSH( ret ); -} - -/* ( phys size --- ) */ -static void -mem_release( void ) -{ - POP(); POP(); -} - -/* ( phys size align --- base ) */ -static void -mmu_claim( void ) -{ - int align = POP(); - int size = POP(); - int phys = POP(); - int ret = ofmem_claim_virt( phys, size, align ); - - if( ret == -1 ) { - printk("MMU: CLAIM failure\n"); - throw( -13 ); - return; - } - PUSH( ret ); -} - -/* ( phys size --- ) */ -static void -mmu_release( void ) -{ - POP(); POP(); -} - -/* ( phys virt size mode -- [ret???] ) */ -static void -mmu_map( void ) -{ - int mode = POP(); - int size = POP(); - int virt = POP(); - int phys = POP(); - int ret; - - /* printk("mmu_map: %x %x %x %x\n", phys, virt, size, mode ); */ - ret = ofmem_map( phys, virt, size, mode ); - - if( ret ) { - printk("MMU: map failure\n"); - throw( -13 ); - return; - } -} - -/* ( virt size -- ) */ -static void -mmu_unmap( void ) -{ - POP(); POP(); -} - -/* ( virt -- false | phys mode true ) */ -static void -mmu_translate( void ) -{ - ucell mode; - ucell virt = POP(); - ucell phys = ofmem_translate( virt, &mode ); - - if( phys == -1 ) { - PUSH( 0 ); - } else { - PUSH( phys ); - PUSH( mode ); - PUSH( -1 ); - } -} - -/* ( virt size align -- baseaddr|-1 ) */ -static void -ciface_claim( void ) -{ - int align = POP(); - int size = POP(); - int virt = POP(); - int ret = ofmem_claim( virt, size, align ); - - /* printk("ciface_claim: %08x %08x %x\n", virt, size, align ); */ - PUSH( ret ); -} - -/* ( virt size -- ) */ -static void -ciface_release( void ) -{ - POP(); - POP(); -} - - -NODE_METHODS( memory ) = { - { "claim", mem_claim }, - { "release", mem_release }, -}; - -NODE_METHODS( mmu ) = { - { "claim", mmu_claim }, - { "release", mmu_release }, - { "map", mmu_map }, - { "unmap", mmu_unmap }, - { "translate", mmu_translate }, -}; - -NODE_METHODS( mmu_ciface ) = { - { "cif-claim", ciface_claim }, - { "cif-release", ciface_release }, -}; - - -/************************************************************************/ -/* init */ -/************************************************************************/ - -void -node_methods_init( void ) -{ -#ifdef CONFIG_RTAS - REGISTER_NODE( rtas ); -#endif - REGISTER_NODE( vfd_stdout ); - REGISTER_NODE( ciface ); - REGISTER_NODE( memory ); - REGISTER_NODE( mmu ); - REGISTER_NODE( mmu_ciface ); - REGISTER_NODE( tty ); -} diff --git a/qemu/roms/openbios/arch/ppc/briq/tree.c b/qemu/roms/openbios/arch/ppc/briq/tree.c deleted file mode 100644 index 177183889..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/tree.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <tree.c> - * - * device tree setup - * - * Copyright (C) 2004 Greg Watson - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" - -void devtree_init( void ) -{ - fword("init-briq-tree"); -} diff --git a/qemu/roms/openbios/arch/ppc/briq/tree.fs b/qemu/roms/openbios/arch/ppc/briq/tree.fs deleted file mode 100644 index ae503266c..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/tree.fs +++ /dev/null @@ -1,305 +0,0 @@ -\ briq specific initialization code -\ -\ Copyright (C) 2004 Greg Watson -\ -\ This program is free software; you can redistribute it and/or -\ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation -\ - -\ ------------------------------------------------------------- -\ device-tree -\ ------------------------------------------------------------- - -" /" find-device - -" chrp" device-type -" TotalImpact,BRIQ-1" model -h# 80000000 encode-int " isa-io-base" property -1 encode-int " #interrupt-cells" property -1 encode-int " #size-cells" property - -new-device - " memory" device-name - " memory" device-type - 0 encode-int h# 1E00000 encode-int encode+ - h# 2000000 encode-int encode+ h# 40000000 encode-int encode+ - " available" property - 0 h# 40000000 reg - external - : open true ; - : close ; -finish-device - -new-device - " cpu" device-name - " cpu" device-type - " " encode-string " translations" property - 0 encode-phys h# 8000000 encode-int encode+ " available" property - d# 32 encode-int " d-cache-block-size" property - 8 encode-int " d-cache-sets" property - d# 32768 encode-int " d-cache-size" property - d# 32 encode-int " i-cache-block-size" property - 8 encode-int " i-cache-sets" property - d# 32768 encode-int " i-cache-size" property - " " encode-string " cache-unified" property - 2 encode-int " i-tlb-sets" property - d# 128 encode-int " i-tlb-size" property - 2 encode-int " d-tlb-sets" property - d# 128 encode-int " d-tlb-size" property - " " encode-string " tlb-split" property - 2 encode-int " tlb-sets" property - d# 256 encode-int " tlb-size" property - " " encode-string " performance-monitor" property - " " encode-string " graphics" property - 4 encode-int " reservation-granule-size" property - d# 25000000 encode-int " timebase-frequency" property - d# 300000000 encode-int " clock-frequency" property - d# 66000000 encode-int " bus-frequency" property - h# 88201 encode-int " cpu-version" property - 0 encode-int " reg" property -finish-device - -" /pci" find-device - h# 01000000 encode-int 0 encode-int encode+ 0 encode-int encode+ - h# 80000000 encode-int encode+ 0 encode-int encode+ - h# 01000000 encode-int encode+ - h# 02000000 encode-int encode+ 0 encode-int encode+ 0 encode-int encode+ - h# C0000000 encode-int encode+ 0 encode-int encode+ - h# 08000000 encode-int encode+ - " ranges" property - " IBM,CPC710" model - h# FF5F7700 encode-int " 8259-interrupt-acknowledge" property - h# 0000F800 encode-int 0 encode-int encode+ 0 encode-int encode+ - 7 encode-int encode+ - " interrupt-map-mask" property - 1 encode-int " #interrupt-cells" property - h# 80000000 encode-int " system-dma-base" property - d# 33333333 encode-int " clock-frequency" property - " " encode-string " primary-bridge" property - 0 encode-int " pci-bridge-number" property - h# FF500000 encode-int h# 100000 encode-int encode+ " reg" property - 0 encode-int 0 encode-int encode+ " bus-range" property - -new-device - " isa" device-name - " isa" device-type - 2 encode-int " #address-cells" property - 1 encode-int " #size-cells" property - - external - : open true ; - : close ; - -finish-device - -: ?devalias ( alias-str alias-len device-str device-len -- - \ alias-str alias-len false | true ) - active-package >r - " /aliases" find-device - \ 2dup ." Checking " type - 2dup find-dev if \ check if device exists - drop - 2over find-dev if \ do we already have an alias? - \ ." alias exists" cr - drop 2drop false - else - \ ." device exists" cr - encode-string - 2swap property - true - then - else - \ ." device doesn't exist" cr - 2drop false - then - r> active-package! - ; - -:noname - " hd" - " /pci/pci-ata/ata-1/disk@0" ?devalias not if - " /pci/pci-ata/ata-1/disk@1" ?devalias not if - " /pci/pci-ata/ata-2/disk@0" ?devalias not if - " /pci/pci-ata/ata-2/disk@1" ?devalias not if - 2drop ." No disk found." cr - then - then - then - then - - " cdrom" - " /pci/pci-ata/ata-1/cdrom@0" ?devalias not if - " /pci/pci-ata/ata-1/cdrom@1" ?devalias not if - " /pci/pci-ata/ata-2/cdrom@0" ?devalias not if - " /pci/pci-ata/ata-2/cdrom@1" ?devalias not if - 2drop ." No cdrom found" cr - then - then - then - then -; SYSTEM-initializer - -new-device - " ide" device-name - " ide" device-type - " WINBOND,82C553" model - h# 28 encode-int " max-latency" property - h# 2 encode-int " min-grant" property - h# 1 encode-int " devsel-speed" property - h# 0 encode-int " subsystem-vendor-id" property - h# 0 encode-int " subsystem-id" property - h# 1018A encode-int " class-code" property - h# 5 encode-int " revision-id" property - h# 105 encode-int " device-id" property - h# 10AD encode-int " vendor-id" property - h# 1003110 encode-int 0 encode-int encode+ h# 10020 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 1003114 encode-int 0 encode-int encode+ h# 10030 encode-int encode+ - h# 4 encode-int encode+ 0 encode-int encode+ - h# 1003118 encode-int 0 encode-int encode+ h# 10040 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 100311C encode-int 0 encode-int encode+ h# 10034 encode-int encode+ - h# 4 encode-int encode+ 0 encode-int encode+ - h# 1003120 encode-int 0 encode-int encode+ h# 10050 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 1003124 encode-int 0 encode-int encode+ h# 10060 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - " assigned-addresses" property - h# 3100 encode-int 0 encode-int encode+ 0 encode-int encode+ - 0 encode-int encode+ 0 encode-int encode+ - h# 1003110 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 1003114 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 4 encode-int encode+ 0 encode-int encode+ - h# 1003118 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 100311C encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 4 encode-int encode+ 0 encode-int encode+ - h# 1003120 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 1003124 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - " reg" property -finish-device - -new-device - " ethernet" device-name - " network" device-type - " AMD,79C973" model - h# 3800 encode-int 0 encode-int encode+ 0 encode-int encode+ - 0 encode-int encode+ 0 encode-int encode+ - " reg" property -finish-device - -" /pci/isa" find-device - 0 0 " assigned-addresses" property - 0 0 " ranges" property - 0 encode-int " slot-names" property - d# 8333333 encode-int " clock-frequency" property - 0 encode-int " eisa-slots" property - 2 encode-int " #interrupt-cells" property - " W83C553F" encode-string " compatible" property - " WINBOND,82C553" model - 0 encode-int " max-latency" property - 0 encode-int " min-grant" property - 1 encode-int " devsel-speed" property - 0 encode-int " subsystem-vendor-id" property - 0 encode-int " subsystem-id" property - h# 60100 encode-int " class-code" property - h# 10 encode-int " revision-id" property - h# 565 encode-int " device-id" property - h# 10AD encode-int " vendor-id" property - h# 3000 encode-int 0 encode-int encode+ 0 encode-int encode+ - 0 encode-int encode+ 0 encode-int encode+ " reg" property - -new-device - " rtc" device-name - " rtc" device-type - " DS17285S" model - " MC146818" encode-string - " DS17285S" encode-string encode+ - " pnpPNP,b00" encode-string encode+ " compatible" property - 8 encode-int 0 encode-int encode+ " interrupts" property - h# 70 encode-int 1 encode-int encode+ - 2 encode-int encode+ " reg" property -finish-device - -new-device - " interrupt-controller" device-name - " interrupt-controller" device-type - " 8259" model - " " encode-string " interrupt-controller" property - 2 encode-int " #interrupt-cells" property - 1 encode-int - 2 encode-int encode+ - 3 encode-int encode+ - 6 encode-int encode+ - " reserved-interrupts" property - " 8259" encode-string - " chrp,iic" encode-string encode+ - " compatible" property - h# 20 encode-int 1 encode-int encode+ - 2 encode-int encode+ " reg" property -finish-device - -new-device - " serial" device-name - " serial" device-type - " no" encode-string " ctsrts" property - " no" encode-string " xon" property - " no" encode-string " parity" property - d# 115200 encode-int " bps" property - 1 encode-int " stop-bits" property - 8 encode-int " data-bits" property - h# 70800 encode-int " divisor" property - h# 708000 encode-int " clock-frequency" property - 4 encode-int 0 encode-int encode+ " interrupts" property - h# 3F8 encode-int 1 encode-int encode+ - 8 encode-int encode+ " reg" property -finish-device - -" /pci" find-device - " /pci/isa/interrupt-controller" find-dev if - encode-int " interrupt-parent" property - then - h# 3800 encode-int 0 encode-int encode+ - 0 encode-int encode+ 1 encode-int encode+ - " /pci/isa/interrupt-controller" find-dev if - encode-int encode+ - then - h# 0C encode-int encode+ 1 encode-int encode+ - " interrupt-map" property - -" /pci/isa" find-device - " /pci/isa/interrupt-controller" find-dev if - encode-int " interrupt-parent" property - then - -\ ------------------------------------------------------------- -\ /packages -\ ------------------------------------------------------------- - -" /packages" find-device - - " packages" device-name - external - \ allow packages to be opened with open-dev - : open true ; - : close ; - -\ /packages/terminal-emulator -new-device - " terminal-emulator" device-name - external - : open true ; - : close ; - \ : write ( addr len -- actual ) - \ dup -rot type - \ ; -finish-device - -\ ------------------------------------------------------------- -\ The END -\ ------------------------------------------------------------- -device-end diff --git a/qemu/roms/openbios/arch/ppc/briq/vfd.c b/qemu/roms/openbios/arch/ppc/briq/vfd.c deleted file mode 100644 index ffc87a079..000000000 --- a/qemu/roms/openbios/arch/ppc/briq/vfd.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Creation Date: <2004/08/28 17:29:43 greg> - * Time-stamp: <2004/08/28 17:29:43 greg> - * - * <vfd.c> - * - * Simple text console - * - * Copyright (C) 2004 Greg Watson - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "briq/briq.h" - -static int vfd_is_open; - -static int -vfd_init( void ) -{ - vfd_is_open = 1; - return 0; -} - -void -vfd_close( void ) -{ -} - -int -vfd_draw_str( const char *str ) -{ - if (!vfd_is_open) - vfd_init(); - - return 0; -} diff --git a/qemu/roms/openbios/arch/ppc/build.xml b/qemu/roms/openbios/arch/ppc/build.xml deleted file mode 100644 index 29f6601f9..000000000 --- a/qemu/roms/openbios/arch/ppc/build.xml +++ /dev/null @@ -1,211 +0,0 @@ -<?xml version="1.0"?> -<build condition="PPC"> - - <dictionary name="openbios-briq" init="openbios" target="forth" condition="BRIQ"> - <object source="ppc.fs"/> - <object source="briq/tree.fs"/> - <object source="briq/briq.fs"/> - <object source="QEMU,VGA.bin" target="fcode" condition="DRIVER_VGA"/> - </dictionary> - - <dictionary name="openbios-pearpc" init="openbios" target="forth" condition="PEARPC"> - <object source="ppc.fs"/> - <object source="pearpc/tree.fs"/> - <object source="pearpc/pearpc.fs"/> - <object source="QEMU,VGA.bin" target="fcode" condition="DRIVER_VGA"/> - </dictionary> - - <dictionary name="openbios-qemu" init="openbios" target="forth" condition="QEMU"> - <object source="ppc.fs"/> - <object source="qemu/tree.fs"/> - <object source="qemu/qemu.fs"/> - <object source="QEMU,VGA.bin" target="fcode" condition="DRIVER_VGA"/> - </dictionary> - - <dictionary name="openbios-mol" init="openbios" target="forth" condition="MOL"> - <object source="ppc.fs"/> - <object source="mol/tree.fs"/> - <object source="mol/mol.fs"/> - <object source="QEMU,VGA.bin" target="fcode" condition="DRIVER_VGA"/> - </dictionary> - - <!-- HACK ALERT --> - - <executable name="target/include/briq-dict.h" target="target" condition="BRIQ"> - <rule><![CDATA[ - $(call quiet-command,true, " GEN $(TARGET_DIR)$@") - @echo "static const char forth_dictionary[] = {" > $@ - @cat $< | hexdump -ve '1/0 "\t" 8/1 "0x%02x, " 1/0 "\n"' \ - | sed 's/0x ,//g' >> $@ - @echo "};" >> $@]]></rule> - <external-object source="openbios-briq.dict"/> - </executable> - - <executable name="target/arch/ppc/briq/kernel.o" target="target" condition="BRIQ"> - <rule><![CDATA[ $(SRCDIR)/arch/ppc/briq/kernel.c $(ODIR)/target/include/static-dict.h - $(call quiet-command,$(CC) $$EXTRACFLAGS $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/arch/ppc/briq/kernel.c, " CC $(TARGET_DIR)$@")]]></rule> - </executable> - - - <executable name="target/include/pearpc-dict.h" target="target" condition="PEARPC"> - <rule><![CDATA[ - $(call quiet-command,true, " GEN $(TARGET_DIR)$@") - @echo "static const char forth_dictionary[] = {" > $@ - @cat $< | hexdump -ve '1/0 "\t" 8/1 "0x%02x, " 1/0 "\n"' \ - | sed 's/0x ,//g' >> $@ - @echo "};" >> $@]]></rule> - <external-object source="openbios-pearpc.dict"/> - </executable> - - <executable name="target/arch/ppc/pearpc/kernel.o" target="target" condition="PEARPC"> - <rule><![CDATA[ $(SRCDIR)/arch/ppc/pearpc/kernel.c $(ODIR)/target/include/pearpc-dict.h - $(call quiet-command,$(CC) $$EXTRACFLAGS $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/arch/ppc/pearpc/kernel.c, " CC $(TARGET_DIR)$@")]]></rule> - </executable> - - <executable name="target/include/qemu-dict.h" target="target" condition="QEMU"> - <rule><![CDATA[ - $(call quiet-command,$(ODIR)/forthstrap -x -D $@ -d $< </dev/null, " GEN $(TARGET_DIR)$@")]]></rule> - <external-object source="openbios-qemu.dict"/> - </executable> - - <executable name="target/arch/ppc/qemu/kernel.o" target="target" condition="QEMU"> - <rule><![CDATA[ $(SRCDIR)/arch/ppc/qemu/kernel.c $(ODIR)/target/include/qemu-dict.h - $(call quiet-command,$(CC) $$EXTRACFLAGS $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/arch/ppc/qemu/kernel.c, " CC $(TARGET_DIR)$@")]]></rule> - </executable> - - - <executable name="target/include/mol-dict.h" target="target" condition="MOL"> - <rule><![CDATA[ - $(call quiet-command,true, " GEN $(TARGET_DIR)$@") - @echo "static const char forth_dictionary[] = {" > $@ - @cat $< | hexdump -ve '1/0 "\t" 8/1 "0x%02x, " 1/0 "\n"' \ - | sed 's/0x ,//g' >> $@ - @echo "};" >> $@]]></rule> - <external-object source="openbios-mol.dict"/> - </executable> - - <executable name="target/arch/ppc/mol/kernel.o" target="target" condition="MOL"> - <rule><![CDATA[ - $(call quiet-command,$(CC) $$EXTRACFLAGS $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/arch/ppc/mol/kernel.c, " CC $(TARGET_DIR)$@")]]></rule> - </executable> - - <!-- END OF HACK ALERT --> - - <library name="briq" target="target" type="static" condition="BRIQ"> - <object source="misc.S"/> - <object source="ofmem.c"/> - <object source="briq/briq.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="briq/init.c" flags="-I$(SRCDIR)/arch/ppc"/> - <external-object source="target/arch/ppc/briq/kernel.o"/> - <object source="briq/main.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="briq/methods.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="briq/tree.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="briq/vfd.c" flags="-I$(SRCDIR)/arch/ppc"/> - </library> - - <library name="pearpc" target="target" type="static" condition="PEARPC"> - <object source="misc.S"/> - <object source="ofmem.c"/> - <object source="pearpc/pearpc.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="pearpc/init.c" flags="-I$(SRCDIR)/arch/ppc"/> - <external-object source="target/arch/ppc/pearpc/kernel.o"/> - <object source="pearpc/main.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="pearpc/methods.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="pearpc/tree.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="pearpc/vfd.c" flags="-I$(SRCDIR)/arch/ppc"/> - <!-- taken from mol: generalize --> - <object source="pearpc/console.c" flags="-I$(SRCDIR)/arch/ppc"/> - </library> - - <library name="qemu" target="target" type="static" condition="QEMU"> - <object source="qemu/ofmem.c"/> - <object source="qemu/qemu.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="qemu/init.c" flags="-I$(SRCDIR)/arch/ppc"/> - <external-object source="target/arch/ppc/qemu/kernel.o"/> - <object source="qemu/main.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="qemu/methods.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="qemu/vfd.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="qemu/console.c" flags="-I$(SRCDIR)/arch/ppc"/> - </library> - - <library name="mol" target="target" type="static" condition="MOL"> - <object source="misc.S"/> - <object source="ofmem.c"/> - <object source="mol/init.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/main.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/mol.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/console.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/osi-blk.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/osi-scsi.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/pseudodisk.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/methods.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/prom.c" flags="-I$(SRCDIR)/arch/ppc"/> - <object source="mol/tree.c" flags="-I$(SRCDIR)/arch/ppc"/> - <external-object source="target/arch/ppc/mol/kernel.o"/> - </library> - - <executable name="openbios-briq.elf" target="target" condition="BRIQ"> - <rule> - $(call quiet-command,$(LD) -g -Ttext=0x01e01000 -Bstatic $^ $(shell $(CC) -print-libgcc-file-name) -o $@.nostrip --whole-archive $^," LINK $(TARGET_DIR)$@") - $(call quiet-command,$(NM) $@.nostrip | sort > $(ODIR)/openbios-briq.syms," GEN $(TARGET_DIR)$@.syms") - $(call quiet-command,$(STRIP) $@.nostrip -o $@," STRIP $(TARGET_DIR)$@")</rule> - <object source="start.S"/> - <object source="timebase.S"/> - <external-object source="libbriq.a"/> - <external-object source="libbootstrap.a"/> - <external-object source="libopenbios.a"/> - <external-object source="libpackages.a"/> - <external-object source="libdrivers.a"/> - <external-object source="libfs.a"/> - <external-object source="liblibc.a"/> - </executable> - - <executable name="openbios-pearpc.elf" target="target" condition="PEARPC"> - <rule> - $(call quiet-command,$(LD) -g -Ttext=0x01e01000 -Bstatic $^ $(shell $(CC) -print-libgcc-file-name) -o $@.nostrip --whole-archive $^," LINK $(TARGET_DIR)$@") - $(call quiet-command,$(NM) $@.nostrip | sort > $(ODIR)/openbios-pearpc.syms," GEN $(TARGET_DIR)$@.syms") - $(call quiet-command,$(STRIP) $@.nostrip -o $@," STRIP $(TARGET_DIR)$@")</rule> - <object source="start.S"/> - <object source="timebase.S"/> - <external-object source="libpearpc.a"/> - <external-object source="libbootstrap.a"/> - <external-object source="libopenbios.a"/> - <external-object source="libpackages.a"/> - <external-object source="libdrivers.a"/> - <external-object source="libfs.a"/> - <external-object source="liblibc.a"/> - </executable> - - <executable name="openbios-qemu.elf" target="target" condition="QEMU"> - <rule> - $(call quiet-command,$(LD) --warn-common -N -T $(SRCDIR)/arch/$(ARCH)/qemu/ldscript -o $@.nostrip --whole-archive $^," LINK $(TARGET_DIR)$@") - $(call quiet-command,$(NM) $@.nostrip | sort > $(ODIR)/openbios-qemu.syms," GEN $(TARGET_DIR)$@.syms") - $(call quiet-command,$(STRIP) $@.nostrip -o $@," STRIP $(TARGET_DIR)$@")</rule> - <object source="qemu/start.S"/> - <object source="timebase.S"/> - <external-object source="libqemu.a"/> - <external-object source="libbootstrap.a"/> - <external-object source="libopenbios.a"/> - <external-object source="libpackages.a"/> - <external-object source="libdrivers.a"/> - <external-object source="libfs.a"/> - <external-object source="liblibc.a"/> - <external-object source="libgcc.a"/> - </executable> - - <executable name="openbios-mol.elf" target="target" condition="MOL"> - <rule> - $(call quiet-command,$(LD) -g -Ttext=0x01e01000 -Bstatic $^ $(shell $(CC) -print-libgcc-file-name) -o $@.nostrip --whole-archive $^," LINK $(TARGET_DIR)$@") - $(call quiet-command,$(NM) $@.nostrip | sort > $(ODIR)/openbios-mol.syms," GEN $(TARGET_DIR)$@.syms") - $(call quiet-command,$(STRIP) $@.nostrip -o $@," STRIP $(TARGET_DIR)$@")</rule> - <object source="start.S"/> - <external-object source="libmol.a"/> - <external-object source="libbootstrap.a"/> - <external-object source="libopenbios.a"/> - <external-object source="libpackages.a"/> - <external-object source="libdrivers.a"/> - <external-object source="libfs.a"/> - <external-object source="liblibc.a"/> - </executable> - -</build> diff --git a/qemu/roms/openbios/arch/ppc/defconfig b/qemu/roms/openbios/arch/ppc/defconfig deleted file mode 100644 index adfb181ea..000000000 --- a/qemu/roms/openbios/arch/ppc/defconfig +++ /dev/null @@ -1,48 +0,0 @@ -# -# Automatically generated make config: don't edit -# -CONFIG_PPC=y -CONFIG_MOL=y -# CONFIG_MPC107 is not set -# CONFIG_NO_ARCH is not set - -# -# Build hosted UNIX Binary -# -CONFIG_HOST_UNIX=y -# CONFIG_PLUGIN_PCI is not set - -# -# Kernel Debugging -# -CONFIG_DEBUG=y -CONFIG_DEBUG_BOOT=y -# CONFIG_DEBUG_DSTACK is not set -# CONFIG_DEBUG_RSTACK is not set -# CONFIG_DEBUG_DICTIONARY is not set -# CONFIG_DEBUG_INTERNAL is not set -# CONFIG_DEBUG_INTERPRETER is not set -CONFIG_DEBUG_CONSOLE=y -CONFIG_DEBUG_CONSOLE_SERIAL=y -CONFIG_SERIAL_PORT=1 -CONFIG_SERIAL_SPEED=115200 -CONFIG_DEBUG_CONSOLE_VGA=y - -# -# Packages -# -# CONFIG_PKG_DEBLOCKER is not set -# CONFIG_PKG_DISKLABEL is not set -# CONFIG_PKG_OBP_TFTP is not set -# CONFIG_PKG_TERMINAL_EMULATOR is not set - -# -# Module Configuration -# -CONFIG_DEBLOCKER=y -CONFIG_DISK_LABEL=y -CONFIG_PART_SUPPORT=y -CONFIG_MAC_PARTS=y -CONFIG_FS=y -CONFIG_HFS=y -CONFIG_HFSP=y diff --git a/qemu/roms/openbios/arch/ppc/kernel.c b/qemu/roms/openbios/arch/ppc/kernel.c deleted file mode 100644 index 28f2965bb..000000000 --- a/qemu/roms/openbios/arch/ppc/kernel.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Creation Date: <2003/10/25 14:07:17 samuel> - * Time-stamp: <2004/08/28 17:48:19 stepan> - * - * <kernel.c> - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * Copyright (C) 2003, 2004 Stefan Reinauer - * - * Based upon unix.c (from OpenBIOS): - * - * Copyright (C) 2003 Patrick Mauritz, Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "dict.h" -#include "libopenbios/bindings.h" -#include "kernel/stack.h" -#include "kernel/kernel.h" -#include "libc/string.h" -#include "kernel.h" - -#define MEMORY_SIZE (256*1024) /* 256K ram for hosted system */ -#define DICTIONARY_SIZE (512*1024) /* 512K for the dictionary */ - -static ucell *memory; - -/************************************************************************/ -/* F U N C T I O N S */ -/************************************************************************/ - -int -forth_segv_handler( char *segv_addr ) -{ - ucell addr = 0xdeadbeef; - - if( PC >= (ucell) dict && PC <= (ucell) dict + dicthead ) - addr = *(ucell *) PC; - - printk("panic: segmentation violation at %x\n", (int)segv_addr); - printk("dict=0x%x here=0x%x(dict+0x%x) pc=0x%x(dict+0x%x)\n", - (int)dict, (int)(dict + dicthead), dicthead, - PC, PC - (ucell) dict); - printk("dstackcnt=%d rstackcnt=%d instruction=%x\n", - dstackcnt, rstackcnt, addr); - -#ifdef DEBUG_DSTACK - printdstack(); -#endif -#ifdef DEBUG_RSTACK - printrstack(); -#endif - return -1; -} - -/* - * allocate memory and prepare engine for memory management. - */ - -static void -init_memory( void ) -{ - memory = malloc(MEMORY_SIZE); - if( !memory ) - panic("panic: not enough memory on host system.\n"); - - /* we push start and end of memory to the stack - * so that it can be used by the forth word QUIT - * to initialize the memory allocator - */ - - PUSH( (ucell)memory ); - PUSH( (ucell)memory + MEMORY_SIZE ); -} - -int -initialize_forth( void ) -{ - dict = malloc(DICTIONARY_SIZE); - load_dictionary( forth_dictionary, sizeof(forth_dictionary) ); - forth_init(); - - PUSH_xt( bind_noname_func(arch_of_init) ); - fword("PREPOST-initializer"); - - PC = (ucell)findword("initialize-of"); - if( PC ) { - init_memory(); - enterforth((xt_t)PC); - free( memory ); - } - free( dict ); - return 0; -} diff --git a/qemu/roms/openbios/arch/ppc/kernel.h b/qemu/roms/openbios/arch/ppc/kernel.h deleted file mode 100644 index 20cda489e..000000000 --- a/qemu/roms/openbios/arch/ppc/kernel.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Creation Date: <2004/08/28 17:50:12 stepan> - * Time-stamp: <2004/08/28 17:50:12 stepan> - * - * <kernel.h> - * - * Copyright (C) 2004 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#ifndef __KERNEL_H__ -#define __KERNEL_H__ - -/* misc.c */ -extern void fatal_error( const char *str ); -extern void exit( int status ); - -/* start.S */ -extern void flush_icache_range( char *start, char *stop ); -extern char of_rtas_start[], of_rtas_end[]; - -/* methods.c */ -extern void node_methods_init( void ); - -/* main.c */ -extern void boot( void ); - -/* init.c */ -extern void entry( void ); -extern void arch_of_init( void ); -extern int get_bool_res( const char *str ); - -/* tree.c */ -extern void devtree_init( void ); - - -#endif /* __KERNEL_H__ */ diff --git a/qemu/roms/openbios/arch/ppc/misc.S b/qemu/roms/openbios/arch/ppc/misc.S deleted file mode 100644 index 435ce0eca..000000000 --- a/qemu/roms/openbios/arch/ppc/misc.S +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Creation Date: <2002/10/20 15:54:50 samuel> - * Time-stamp: <2002/10/20 15:57:21 samuel> - * - * <misc.S> - * - * Low-level stuff - * - * Copyright (C) 2002, 2003 Samuel Rydh (samuel@ibrium.se) - * - * Based upon misc.S from the the linux kernel with the following - * copyrights: - * - * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org), - * Cort Dougan (cort@cs.nmt.edu), Paul Mackerras - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "asm/asmdefs.h" -#include "asm/processor.h" - - -/* - * Extended precision shifts. - * - * Updated to be valid for shift counts from 0 to 63 inclusive. - * -- Gabriel - * - * R3/R4 has 64 bit value - * R5 has shift count - * result in R3/R4 - * - * ashrdi3: arithmetic right shift (sign propagation) - * lshrdi3: logical right shift - * ashldi3: left shift - */ -GLOBL(__ashrdi3): - subfic r6,r5,32 - srw r4,r4,r5 # LSW = count > 31 ? 0 : LSW >> count - addi r7,r5,32 # could be xori, or addi with -32 - slw r6,r3,r6 # t1 = count > 31 ? 0 : MSW << (32-count) - rlwinm r8,r7,0,32 # t3 = (count < 32) ? 32 : 0 - sraw r7,r3,r7 # t2 = MSW >> (count-32) - or r4,r4,r6 # LSW |= t1 - slw r7,r7,r8 # t2 = (count < 32) ? 0 : t2 - sraw r3,r3,r5 # MSW = MSW >> count - or r4,r4,r7 # LSW |= t2 - blr - -GLOBL(__ashldi3): - subfic r6,r5,32 - slw r3,r3,r5 # MSW = count > 31 ? 0 : MSW << count - addi r7,r5,32 # could be xori, or addi with -32 - srw r6,r4,r6 # t1 = count > 31 ? 0 : LSW >> (32-count) - slw r7,r4,r7 # t2 = count < 32 ? 0 : LSW << (count-32) - or r3,r3,r6 # MSW |= t1 - slw r4,r4,r5 # LSW = LSW << count - or r3,r3,r7 # MSW |= t2 - blr - -GLOBL(__lshrdi3): - subfic r6,r5,32 - srw r4,r4,r5 # LSW = count > 31 ? 0 : LSW >> count - addi r7,r5,32 # could be xori, or addi with -32 - slw r6,r3,r6 # t1 = count > 31 ? 0 : MSW << (32-count) - srw r7,r3,r7 # t2 = count < 32 ? 0 : MSW >> (count-32) - or r4,r4,r6 # LSW |= t1 - srw r3,r3,r5 # MSW = MSW >> count - or r4,r4,r7 # LSW |= t2 - blr diff --git a/qemu/roms/openbios/arch/ppc/mmutypes.h b/qemu/roms/openbios/arch/ppc/mmutypes.h deleted file mode 100644 index 441d7f8bc..000000000 --- a/qemu/roms/openbios/arch/ppc/mmutypes.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Creation Date: <2002/01/13 13:53:14 samuel> - * Time-stamp: <2002/01/27 19:56:11 samuel> - * - * <mmutypes.h> - * - * MMU definitions - * - * Most of these declarations originate from the Linux Kernel - * - * Copyright (C) 2002 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#ifndef _H_MMUTYPES -#define _H_MMUTYPES - -/* Hardware Page Table Entry */ -typedef struct mPTE { - unsigned long v:1; /* Entry is valid */ - unsigned long vsid:24; /* Virtual segment identifier */ - unsigned long h:1; /* Hash algorithm indicator */ - unsigned long api:6; /* Abbreviated page index */ - - unsigned long rpn:20; /* Real (physical) page number */ - unsigned long :3; /* Unused */ - unsigned long r:1; /* Referenced */ - unsigned long c:1; /* Changed */ - unsigned long w:1; /* Write-thru cache mode */ - unsigned long i:1; /* Cache inhibited */ - unsigned long m:1; /* Memory coherence */ - unsigned long g:1; /* Guarded */ - unsigned long :1; /* Unused */ - unsigned long pp:2; /* Page protection */ -} mPTE_t; - - -typedef struct _mBATU { /* Upper part of BAT (all except 601) */ - unsigned long bepi:15; /* Effective page index (virtual address) */ - unsigned long :4; /* Unused */ - unsigned long bl:11; /* Block size mask */ - unsigned long vs:1; /* Supervisor valid */ - unsigned long vp:1; /* User valid */ -} mBATU; - -typedef struct _mBATL { /* Lower part of BAT (all except 601) */ - unsigned long brpn:15; /* Real page index (physical address) */ - unsigned long :10; /* Unused */ - unsigned long w:1; /* Write-thru cache */ - unsigned long i:1; /* Cache inhibit */ - unsigned long m:1; /* Memory coherence */ - unsigned long g:1; /* Guarded (MBZ in IBAT) */ - unsigned long :1; /* Unused */ - unsigned long pp:2; /* Page access protections */ -} mBATL; - -typedef struct _mBAT { - mBATU batu; /* Upper register */ - mBATL batl; /* Lower register */ -} mBAT; - -typedef struct _mSEGREG { - unsigned long t:1; /* Normal or I/O type */ - unsigned long ks:1; /* Supervisor 'key' (normally 0) */ - unsigned long kp:1; /* User 'key' (normally 1) */ - unsigned long n:1; /* No-execute */ - unsigned long :4; /* Unused */ - unsigned long vsid:24; /* Virtual Segment Identifier */ -} mSEGREG; - - -#endif /* _H_MMUTYPES */ diff --git a/qemu/roms/openbios/arch/ppc/mol/console.c b/qemu/roms/openbios/arch/ppc/mol/console.c deleted file mode 100644 index 966011e19..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/console.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Creation Date: <2002/10/29 18:59:05 samuel> - * Time-stamp: <2003/12/28 22:51:11 samuel> - * - * <console.c> - * - * Simple text console - * - * Copyright (C) 2002, 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * Copyright (C) 2005 Stefan Reinauer <stepan@openbios.org> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libc/diskio.h" -#include "osi_calls.h" -#include "libopenbios/ofmem.h" -#include "mol/mol.h" -#include "boothelper_sh.h" -#include "video_sh.h" - -#define openbios_GetFBInfo(x) OSI_GetFBInfo(x) - -#include "../../../packages/video.c" -#include "../../../libopenbios/console_common.c" diff --git a/qemu/roms/openbios/arch/ppc/mol/init.c b/qemu/roms/openbios/arch/ppc/mol/init.c deleted file mode 100644 index 15333b4e1..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/init.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Creation Date: <1999/11/16 00:49:26 samuel> - * Time-stamp: <2004/04/12 16:26:50 samuel> - * - * <init.c> - * - * Initialization - * - * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Samuel & David Rydh - # (samuel@ibrium.se, dary@lindesign.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/openbios.h" -#include "libopenbios/bindings.h" -#include "arch/common/nvram.h" -#include "mol/mol.h" -#include "libopenbios/ofmem.h" -#include "mol/prom.h" -#include "openbios-version.h" -#include "osi_calls.h" -#include "boothelper_sh.h" - -extern void unexpected_excep( int vector ); - -int -get_bool_res( const char *res ) -{ - char buf[8], *p; - - p = BootHGetStrRes( res, buf, sizeof(buf) ); - if( !p ) - return -1; - if( !strcasecmp(p,"true") || !strcasecmp(p,"yes") || !strcasecmp(p,"1") ) - return 1; - return 0; -} - -void -unexpected_excep( int vector ) -{ - printk("MOL panic: Unexpected exception %x\n", vector ); - for( ;; ) - ; -} - -unsigned long isa_io_base; - -void -entry( void ) -{ - isa_io_base = 0x80000000; - - printk("\n"); - printk("=============================================================\n"); - printk(PROGRAM_NAME " " OPENBIOS_VERSION_STR " [%s]\n", - OPENBIOS_BUILD_DATE); - - ofmem_init(); - initialize_forth(); - /* won't return */ - - printk("of_startup returned!\n"); - for( ;; ) - ; -} - -static void -setenv( char *env, char *value ) -{ - push_str( value ); - push_str( env ); - fword("$setenv"); -} - -void -arch_of_init( void ) -{ - mol_phandle_t ph; - int autoboot; - - devtree_init(); - node_methods_init(); - nvram_init("/pci/mac-io/nvram"); - openbios_init(); - modules_init(); - pseudodisk_init(); - osiblk_init(); - osiscsi_init(); - init_video(); - - if( (ph=prom_find_device("/rtas")) == -1 ) - printk("Warning: No /rtas node\n"); - else { - unsigned long size = 0x1000; - while( size < (unsigned long)of_rtas_end - (unsigned long)of_rtas_start ) - size *= 2; - prom_set_prop( ph, "rtas-size", (char*)&size, sizeof(size) ); - } - - /* tweak boot settings */ - autoboot = !!get_bool_res("autoboot"); - if( !autoboot ) - printk("Autobooting disabled - dropping into OpenFirmware\n"); - setenv("auto-boot?", autoboot ? "true" : "false" ); - setenv("boot-command", "molboot"); - - if( get_bool_res("tty-interface") == 1 ) - fword("activate-tty-interface"); - - /* hack */ - device_end(); - bind_func("molboot", boot ); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/kernel.c b/qemu/roms/openbios/arch/ppc/mol/kernel.c deleted file mode 100644 index 1454b8a85..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/kernel.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:03:25 stepan> - * Time-stamp: <2004/08/28 18:03:25 stepan> - * - * <mol/kernel.c> - * - * Copyright (C) 2004 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "mol-dict.h" -#include "../kernel.c" diff --git a/qemu/roms/openbios/arch/ppc/mol/main.c b/qemu/roms/openbios/arch/ppc/mol/main.c deleted file mode 100644 index f6ed934d0..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/main.c +++ /dev/null @@ -1,370 +0,0 @@ -/* - * Creation Date: <2002/10/02 22:24:24 samuel> - * Time-stamp: <2004/03/27 01:57:55 samuel> - * - * <main.c> - * - * - * - * Copyright (C) 2002, 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libopenbios/elfload.h" -#include "arch/common/nvram.h" -#include "libc/diskio.h" -#include "libc/vsprintf.h" -#include "mol/mol.h" -#include "libopenbios/ofmem.h" -#include "osi_calls.h" -#include "ablk_sh.h" -#include "boothelper_sh.h" - - -static void patch_newworld_rom( char *start, size_t size ); -static void newworld_timer_hack( char *start, size_t size ); - -static void -transfer_control_to_elf( unsigned long entry ) -{ - extern void call_elf( unsigned long entry ); - printk("Starting ELF boot loader\n"); - call_elf( entry ); - - fatal_error("call_elf returned unexpectedly\n"); -} - -static int -load_elf_rom( unsigned long *entry, int fd ) -{ - int i, lszz_offs, elf_offs; - char buf[128], *addr; - Elf_ehdr ehdr; - Elf_phdr *phdr; - size_t s; - - printk("Loading '%s' from '%s'\n", get_file_path(fd), - get_volume_name(fd) ); - - /* the ELF-image (usually) starts at offset 0x4000 */ - if( (elf_offs=find_elf(fd)) < 0 ) { - printk("----> %s is not an ELF image\n", buf ); - exit(1); - } - if( !(phdr=elf_readhdrs(fd, elf_offs, &ehdr)) ) - fatal_error("elf_readhdrs failed\n"); - - *entry = ehdr.e_entry; - - /* load segments. Compressed ROM-image assumed to be located immediately - * after the last segment */ - lszz_offs = elf_offs; - for( i=0; i<ehdr.e_phnum; i++ ) { - /* p_memsz, p_flags */ - s = MIN( phdr[i].p_filesz, phdr[i].p_memsz ); - seek_io( fd, elf_offs + phdr[i].p_offset ); - - /* printk("filesz: %08lX memsz: %08lX p_offset: %08lX p_vaddr %08lX\n", - phdr[i].p_filesz, phdr[i].p_memsz, phdr[i].p_offset, - phdr[i].p_vaddr ); */ - - if( phdr[i].p_vaddr != phdr[i].p_paddr ) - printk("WARNING: ELF segment virtual addr != physical addr\n"); - lszz_offs = MAX( lszz_offs, elf_offs + phdr[i].p_offset + phdr[i].p_filesz ); - if( !s ) - continue; - if( ofmem_claim( phdr[i].p_vaddr, phdr[i].p_memsz, 0 ) == -1 ) - fatal_error("Claim failed!\n"); - - addr = (char*)phdr[i].p_vaddr; - if( read_io(fd, addr, s) != s ) - fatal_error("read failed\n"); - - /* patch CODE segment */ - if( *entry >= phdr[i].p_vaddr && *entry < phdr[i].p_vaddr + s ) { - patch_newworld_rom( (char*)phdr[i].p_vaddr, s ); - newworld_timer_hack( (char*)phdr[i].p_vaddr, s ); - } - flush_icache_range( addr, addr+s ); - - /* printk("ELF ROM-section loaded at %08lX (size %08lX)\n", - (unsigned long)phdr[i].p_vaddr, (unsigned long)phdr[i].p_memsz );*/ - } - free( phdr ); - return lszz_offs; -} - - -/************************************************************************/ -/* newworld ROM loading */ -/************************************************************************/ - -#define ROM_BASE 0x1100000 /* where we decide to put things */ - -/* fix bug present in the 2.4 and the 3.0 Apple ROM */ -static void -patch_newworld_rom( char *start, size_t size ) -{ - int s; - unsigned long mark[] = { 0x7c7d1b78, /* mr r29,r3 */ - 0x7c9c2378, /* mr r28,r4 */ - 0x7cc33378, /* mr r3,r6 */ - 0x7c864214, /* add r4,r6,r8 <------ BUG -- */ - 0x80b10000, /* lwz r5,0(r17) */ - 0x38a500e8 }; /* addi r5,r5,232 */ - - /* Correcting add r4,r6,r8 ----> addi r4,r6,8 */ - for( s=0; s<size-sizeof(mark); s+=4 ) - if( memcmp( start+s, mark, sizeof(mark)) == 0 ) { - printk("FIXING ROM BUG @ %X!\n", s+12); - ((unsigned long*)(start+s))[3] = 0x38860008; /* addi r4,r6,8 */ - } -} - -/* This hack is only needed on machines with a timebase slower than 12.5 MHz - * (50 MHz bus frequency). Typically only old, accelerated machines fall - * into this category. The cause of the problem is an overflow in Apple's - * calibration routine. - */ -static void -newworld_timer_hack( char *start, size_t size ) -{ - int s; - unsigned long mark[] = { 0x7d0000a6, 0x5507045e, 0x7ce00124, 0x4c00012c, - 0x38e00000, 0x3c80000f, 0x6084ffff, 0x98830c00, - 0x7c0006ac, 0x98830a00, 0x7c0006ac, 0x7c9603a6, - 0x4c00012c, 0x7cb602a6, 0x2c050000, 0x4181fff8, - 0x7c0004ac, 0x88830a00, 0x7c0006ac, 0x88a30800, - 0x7c0006ac, 0x88c30a00, 0x7c0006ac, 0x7c043040, - 0x40a2ffe4, 0x5085442e, 0x7ca500d0, 0x54a5043e, - 0x7c053840, 0x7ca72b78, 0x4082ff9c, 0x7ca32b78, - 0x7d000124, 0x4c00012c, 0x4e800020 - }; - - /* return #via ticks corresponding to 0xfffff DEC ticks (VIA frequency == 47/60 MHz) */ - for( s=0; s < size-sizeof(mark); s+=4 ) { - if( !memcmp( start+s, mark, sizeof(mark)) ) { - extern char timer_calib_start[], timer_calib_end[]; - extern unsigned long nw_dec_calibration; - int hz = OSI_UsecsToMticks(1000); - nw_dec_calibration = OSI_MticksToUsecs(0xfffff*47)/60; - memcpy( start + s, timer_calib_start, timer_calib_end - timer_calib_start ); - - printk("Timer calibration fix: %d.%02d MHz [%ld]\n", - hz/1000, (hz/10)%100, nw_dec_calibration ); - break; - } - } -} - -static unsigned long -load_newworld_rom( int fd ) -{ - int lszz_offs, lszz_size; - unsigned long entry, data[2]; - phandle_t ph; - - lszz_offs = load_elf_rom( &entry, fd ); - seek_io( fd, -1 ); - lszz_size = tell(fd) - lszz_offs; - seek_io( fd, lszz_offs ); - - /* printk("Compressed ROM image: offset %08X, size %08X loaded at %08x\n", - lszz_offs, lszz_size, ROM_BASE ); */ - - if( ofmem_claim(ROM_BASE, lszz_size, 0) == -1 ) - fatal_error("Claim failure (lszz)!\n"); - - read_io( fd, (char*)ROM_BASE, lszz_size ); - - /* Fix the /rom/macos/AAPL,toolbox-image,lzss property (phys, size) */ -#if 0 - if( (ph=prom_create_node("/rom/macos/")) == -1 ) - fatal_error("Failed creating /rom/macos/"); -#else - ph = find_dev("/rom/macos"); -#endif - data[0] = ROM_BASE; - data[1] = lszz_size; - set_property( ph, "AAPL,toolbox-image,lzss", (char*)data, sizeof(data) ); - - /* The 7.8 rom (MacOS 9.2) uses AAPL,toolbox-parcels instead of - * AAPL,toolbox-image,lzss. It probably doesn't hurt to have it - * always present (we don't have an easy way to determine ROM version...) - */ - set_property( ph, "AAPL,toolbox-parcels", (char*)data, sizeof(data) ); - return entry; -} - -static int -search_nwrom( int fd, int fast ) -{ - char *s, buf[128]; - int found = 0; - - if( fast ) { - int ind; - found = !reopen( fd, "\\\\:tbxi" ); - for( ind=0; !found && (s=BootHGetStrResInd("macos_rompath", buf, sizeof(buf), ind++, 0)) ; ) - found = !reopen( fd, s ); - for( ind=0; !found && (s=BootHGetStrResInd("macos_rompath_", buf, sizeof(buf), ind++, 0)) ; ) - found = !reopen( fd, s ); - } else { - printk("Searching %s for a 'Mac OS ROM' file\n", get_volume_name(fd) ); - if( !(found=reopen_nwrom(fd)) ) { - printk(" \n**** HINT ***************************************************\n"); - printk("* The booting can be speeded up by adding the line\n"); - printk("* macos_rompath: '%s'\n", get_file_path(fd) ); - printk("* to the /etc/mol/molrc.macos (recommended).\n"); - printk("*************************************************************\n \n"); - } - } - return found; -} - -static void -encode_bootpath( const char *spec, const char *args ) -{ - phandle_t chosen_ph = find_dev("/chosen"); - set_property( chosen_ph, "bootpath", spec, strlen(spec)+1 ); - set_property( chosen_ph, "bootargs", args, strlen(args)+1 ); -} - -static char * -newworld_load( const char *node_path, const char *spec, int do_search ) -{ - char *p, *entry, buf[80]; - int fd, len; - - if( (fd=open_io(spec)) == -1 ) - return NULL; - - if( !search_nwrom(fd, do_search) ) { - close_io(fd); - return NULL; - } - printk("Boot Disk: %s [%s]\n", spec, get_fstype(fd) ); - - entry = (char*)load_newworld_rom( fd ); - -#if 1 - PUSH_ih( get_ih_from_fd(fd) ); - fword("get-instance-path"); - len = POP(); - p = (char*)POP(); - buf[0] = 0; - if( len < sizeof(buf) ) { - memcpy( buf, p, len ); - buf[len] =0; - } - strcat( buf, "/x@:" ); - printk("boot_path: %s\n", buf ); - encode_bootpath( buf, "" ); -#endif - close_io( fd ); - return entry; -} - -static void -newworld_startup( void ) -{ - int i, j, bootunit, type, fd; - ablk_disk_info_t info; - char *entry = NULL; - char spec[80]; - phandle_t ph; - - char path[]="/pci/pci-bridge/mol-blk"; - if( !(ph=find_dev(path)) ) - fatal_error("MOLBlockDriver node not found\n"); - - /* user-specified newworld ROMs take precedence */ - if( (fd=open_io("pseudo:,nwrom")) >= 0 ) { - entry = (char*)load_newworld_rom( fd ); - close_io( fd ); - } - - /* determine boot volume */ - for( bootunit=-1, type=0; bootunit==-1 && type<3 ; type++ ) { - for( i=0; !OSI_ABlkDiskInfo(0, i, &info) ; i++ ) { - if( type<=1 && !(info.flags & ABLK_BOOT_HINT) ) - continue; - if( type>1 && (info.flags & ABLK_BOOT_HINT) ) - continue; - - for( j=0; !entry && j<32; j++ ) { - snprintf( spec, sizeof(spec), "%s/disk@%x:%d", - path, i, j ); - entry = newworld_load( path, spec, (!type || type==2) ); - } - if( entry ) { - bootunit = i; - break; - } - } - } - - if( entry ) { - OSI_ABlkBlessDisk( 0 /*channel*/, bootunit ); - - update_nvram(); - transfer_control_to_elf( (unsigned long)entry ); - /* won't come here */ - return; - } - - printk("\n--- No bootable disk was found! -----------------------------\n"); - printk("If this is an oldworld machine, try booting from the MacOS\n"); - printk("install CD and install MacOS from within MOL.\n"); - printk("-------------------------------------------------------------\n"); - exit(1); -} - - -/************************************************************************/ -/* yaboot booting */ -/************************************************************************/ - -static void -yaboot_startup( void ) -{ - const char *paths[] = { "pseudo:,ofclient", "pseudo:,yaboot", NULL }; - unsigned long entry; - int i, fd; - - for( i=0; paths[i]; i++ ) { - if( (fd=open_io(paths[i])) == -1 ) - continue; - (void) load_elf_rom( &entry, fd ); - close_io( fd ); - encode_bootpath( paths[i], "" ); - - update_nvram(); - transfer_control_to_elf( entry ); - /* won't come here */ - } - printk("*** Boot failure! No secondary bootloader specified ***\n"); - exit(1); -} - - -/************************************************************************/ -/* entry */ -/************************************************************************/ - -void -boot( void ) -{ - fword("update-chosen"); - if( find_dev("/mol-platform") ) - yaboot_startup(); - else - newworld_startup(); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/methods.c b/qemu/roms/openbios/arch/ppc/mol/methods.c deleted file mode 100644 index bfaf51506..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/methods.c +++ /dev/null @@ -1,470 +0,0 @@ -/* - * Creation Date: <2003/10/18 13:24:29 samuel> - * Time-stamp: <2004/03/27 02:00:30 samuel> - * - * <methods.c> - * - * Misc device node methods - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libc/string.h" -#include "mol/mol.h" -#include "libopenbios/ofmem.h" -#include "mol/prom.h" -#include "osi_calls.h" -#include "kbd_sh.h" - -/************************************************************************/ -/* Power Management */ -/************************************************************************/ - -DECLARE_NODE( powermgt, INSTALL_OPEN, 0, "/pci/pci-bridge/mac-io/power-mgt" ); - -/* ( -- ) */ -static void -set_hybernot_flag( void ) -{ -} - -NODE_METHODS( powermgt ) = { - { "set-hybernot-flag", set_hybernot_flag }, -}; - - -/************************************************************************/ -/* RTAS (run-time abstraction services) */ -/************************************************************************/ - -DECLARE_NODE( rtas, INSTALL_OPEN, 0, "+/rtas" ); - -/* ( physbase -- rtas_callback ) */ -static void -rtas_instantiate( void ) -{ - int physbase = POP(); - int s=0x1000, size = (int)of_rtas_end - (int)of_rtas_start; - unsigned long virt; - - while( s < size ) - s += 0x1000; - virt = ofmem_claim_virt( 0, s, 0x1000 ); - ofmem_map( physbase, virt, s, -1 ); - memcpy( (char*)virt, of_rtas_start, size ); - - printk("RTAS instantiated at %08x\n", physbase ); - flush_icache_range( (char*)virt, (char*)virt + size ); - - PUSH( physbase ); -} - -NODE_METHODS( rtas ) = { - { "instantiate", rtas_instantiate }, - { "instantiate-rtas", rtas_instantiate }, -}; - - - -/************************************************************************/ -/* stdout */ -/************************************************************************/ - -DECLARE_NODE( video_stdout, INSTALL_OPEN, 0, "Tdisplay" ); - -/* ( addr len -- actual ) */ -static void -stdout_write( void ) -{ - int len = POP(); - char *addr = (char*)POP(); - - /* printk( "%s", s ); */ - console_draw_fstr(addr, len); - - PUSH( len ); -} - -NODE_METHODS( video_stdout ) = { - { "write", stdout_write }, -}; - - -/************************************************************************/ -/* tty */ -/************************************************************************/ - -DECLARE_NODE( tty, INSTALL_OPEN, 0, "+/mol/mol-tty" ); - -/* ( addr len -- actual ) */ -static void -tty_read( void ) -{ - int ch, len = POP(); - char *p = (char*)POP(); - int ret=0; - - if( len > 0 ) { - ret = 1; - ch = OSI_TTYGetc(); - if( ch >= 0 ) { - *p = ch; - } else { - ret = 0; - OSI_USleep(1); - } - } - PUSH( ret ); -} - -/* ( addr len -- actual ) */ -static void -tty_write( void ) -{ - int i, len = POP(); - char *p = (char*)POP(); - for( i=0; i<len; i++ ) - OSI_TTYPutc( *p++ ); - RET( len ); -} - -NODE_METHODS( tty ) = { - { "read", tty_read }, - { "write", tty_write }, -}; - - -/************************************************************************/ -/* keyboard */ -/************************************************************************/ - -typedef struct { - int cntrl; - int shift; - int meta; - int alt; - int save_key; - char keytable[32]; -} kbd_state_t; - -static const unsigned char adb_ascii_table[128] = - /* 0x00 */ "asdfhgzxcv`bqwer" - /* 0x10 */ "yt123465=97-80]o" - /* 0x20 */ "u[ip\nlj'k;\\,/nm." - /* 0x30 */ "\t <\b \e " - /* 0x40 */ " . * + / - " - /* 0x50 */ " =01234567 89 " - /* 0x60 */ " " - /* 0x70 */ " "; - -static const unsigned char adb_shift_table[128] = - /* 0x00 */ "ASDFHGZXCV~BQWER" - /* 0x10 */ "YT!@#$^%+(&_*)}O" - /* 0x20 */ "U{IP\nLJ\"K:|<?NM>" - /* 0x30 */ "\t <\b \e " - /* 0x40 */ " . * + / - " - /* 0x50 */ " =01234567 89 " - /* 0x60 */ " " - /* 0x70 */ " "; - -DECLARE_NODE( kbd, INSTALL_OPEN, sizeof(kbd_state_t), - "/psuedo-hid/keyboard", - "/mol/mol-keyboard", - "/mol/keyboard" -); - -/* ( -- keymap ) (?) */ -/* should return a pointer to an array with 32 bytes (256 bits) */ -static void -kbd_get_key_map( kbd_state_t *ks ) -{ - /* printk("met_kbd_get_key_map\n"); */ - - /* keytable[5] = 0x40; */ - PUSH( (int)ks->keytable ); -} - -/* ( buf len --- actlen ) */ -static void -kbd_read( kbd_state_t *ks ) -{ - int ret=0, len = POP(); - char *p = (char*)POP(); - int key; - - if( !p || !len ) { - PUSH( -1 ); - return; - } - - if( ks->save_key ) { - *p = ks->save_key; - ks->save_key = 0; - RET( 1 ); - } - OSI_USleep(1); /* be nice */ - - for( ; (key=OSI_GetAdbKey()) >= 0 ; ) { - int code = (key & 0x7f); - int down = !(key & 0x80); - - if( code == 0x36 /* ctrl */ ) { - ks->cntrl = down; - continue; - } - if( code == 0x38 /* shift */ || code == 0x7b) { - ks->shift = down; - continue; - } - if( code == 0x37 /* command */ ) { - ks->meta = down; - continue; - } - if( code == 0x3a /* alt */ ) { - ks->alt = down; - continue; - } - if( !down ) - continue; - - ret = 1; - if( ks->shift ) - key = adb_shift_table[ key & 0x7f ]; - else - key = adb_ascii_table[ key & 0x7f ]; - - if( ks->meta ) { - ks->save_key = key; - key = 27; - } else if( ks->cntrl ) { - key = key - 'a' + 1; - } - *p = key; - if( !*p ) - *p = 'x'; - break; - } - PUSH( ret ); -} - -NODE_METHODS( kbd ) = { - { "read", kbd_read }, - { "get-key-map", kbd_get_key_map }, -}; - - -/************************************************************************/ -/* client interface 'quiesce' */ -/************************************************************************/ - -DECLARE_NODE( ciface, 0, 0, "/packages/client-iface" ); - -/* ( -- ) */ -static void -ciface_quiesce( unsigned long args[], unsigned long ret[] ) -{ -#if 0 - unsigned long msr; - /* This seems to be the correct thing to do - but I'm not sure */ - asm volatile("mfmsr %0" : "=r" (msr) : ); - msr &= ~(MSR_IR | MSR_DR); - asm volatile("mtmsr %0" :: "r" (msr) ); -#endif - printk("=============================================================\n\n"); - prom_close(); - - OSI_KbdCntrl( kKbdCntrlSuspend ); -} - -/* ( -- ms ) */ -static void -ciface_milliseconds( unsigned long args[], unsigned long ret[] ) -{ - static unsigned long mticks=0, usecs=0; - unsigned long t; - - asm volatile("mftb %0" : "=r" (t) : ); - if( mticks ) - usecs += OSI_MticksToUsecs( t-mticks ); - mticks = t; - - PUSH( usecs/1000 ); -} - - -NODE_METHODS( ciface ) = { - { "quiesce", ciface_quiesce }, - { "milliseconds", ciface_milliseconds }, -}; - - -/************************************************************************/ -/* MMU/memory methods */ -/************************************************************************/ - -DECLARE_NODE( memory, INSTALL_OPEN, 0, "/memory" ); -DECLARE_NODE( mmu, INSTALL_OPEN, 0, "/cpus/@0" ); -DECLARE_NODE( mmu_ciface, 0, 0, "/packages/client-iface" ); - - -/* ( phys size align --- base ) */ -static void -mem_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - ucell phys = POP(); - ucell ret = ofmem_claim_phys( phys, size, align ); - - if( ret == -1 ) { - printk("MEM: claim failure\n"); - throw( -13 ); - return; - } - PUSH( ret ); -} - -/* ( phys size --- ) */ -static void -mem_release( void ) -{ - POP(); POP(); -} - -/* ( phys size align --- base ) */ -static void -mmu_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - ucell phys = POP(); - ucell ret = ofmem_claim_virt( phys, size, align ); - - if( ret == -1 ) { - printk("MMU: CLAIM failure\n"); - throw( -13 ); - return; - } - PUSH( ret ); -} - -/* ( phys size --- ) */ -static void -mmu_release( void ) -{ - POP(); POP(); -} - -/* ( phys virt size mode -- [ret???] ) */ -static void -mmu_map( void ) -{ - ucell mode = POP(); - ucell size = POP(); - ucell virt = POP(); - ucell phys = POP(); - ucell ret; - - /* printk("mmu_map: %x %x %x %x\n", phys, virt, size, mode ); */ - ret = ofmem_map( phys, virt, size, mode ); - - if( ret ) { - printk("MMU: map failure\n"); - throw( -13 ); - return; - } -} - -/* ( virt size -- ) */ -static void -mmu_unmap( void ) -{ - POP(); POP(); -} - -/* ( virt -- false | phys mode true ) */ -static void -mmu_translate( void ) -{ - ucell mode; - ucell virt = POP(); - ucell phys = ofmem_translate( virt, &mode ); - - if( phys == -1 ) { - PUSH( 0 ); - } else { - PUSH( phys ); - PUSH( mode ); - PUSH( -1 ); - } -} - -/* ( virt size align -- baseaddr|-1 ) */ -static void -ciface_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - ucell virt = POP(); - ucell ret = ofmem_claim( virt, size, align ); - - /* printk("ciface_claim: %08x %08x %x\n", virt, size, align ); */ - PUSH( ret ); -} - -/* ( virt size -- ) */ -static void -ciface_release( void ) -{ - POP(); - POP(); -} - - -NODE_METHODS( memory ) = { - { "claim", mem_claim }, - { "release", mem_release }, -}; - -NODE_METHODS( mmu ) = { - { "claim", mmu_claim }, - { "release", mmu_release }, - { "map", mmu_map }, - { "unmap", mmu_unmap }, - { "translate", mmu_translate }, -}; - -NODE_METHODS( mmu_ciface ) = { - { "cif-claim", ciface_claim }, - { "cif-release", ciface_release }, -}; - - -/************************************************************************/ -/* init */ -/************************************************************************/ - -void -node_methods_init( void ) -{ - REGISTER_NODE( rtas ); - REGISTER_NODE( powermgt ); - REGISTER_NODE( kbd ); - REGISTER_NODE( video_stdout ); - REGISTER_NODE( ciface ); - REGISTER_NODE( memory ); - REGISTER_NODE( mmu ); - REGISTER_NODE( mmu_ciface ); - - if( OSI_CallAvailable(OSI_TTY_GETC) ) - REGISTER_NODE( tty ); - - OSI_KbdCntrl( kKbdCntrlActivate ); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/mol.c b/qemu/roms/openbios/arch/ppc/mol/mol.c deleted file mode 100644 index 86b3b66bf..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/mol.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Creation Date: <2003/12/19 18:46:21 samuel> - * Time-stamp: <2004/04/12 16:27:12 samuel> - * - * <mol.c> - * - * - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "kernel/kernel.h" -#include "arch/common/nvram.h" -#include "libc/vsprintf.h" -#include "libc/string.h" -#include "mol/mol.h" -#include "osi_calls.h" -#include <stdarg.h> - -void -exit( int status ) -{ - OSI_Exit(); -} - -void -fatal_error( const char *err ) -{ - printk("Fatal error: %s\n", err ); - OSI_Exit(); -} - -void -panic( const char *err ) -{ - printk("Panic: %s\n", err ); - OSI_Exit(); - - /* won't come here... this keeps the gcc happy */ - for( ;; ) - ; -} - - -/************************************************************************/ -/* print using OSI interface */ -/************************************************************************/ - -static int do_indent; - -int -printk( const char *fmt, ... ) -{ - char *p, buf[1024]; - va_list args; - int i; - - va_start(args, fmt); - i = vnsprintf(buf, sizeof(buf), fmt, args); - va_end(args); - - for( p=buf; *p; p++ ) { - if( *p == '\n' ) - do_indent = 0; - if( do_indent++ == 1 ) { - OSI_PutC( '>' ); - OSI_PutC( '>' ); - OSI_PutC( ' ' ); - } - OSI_PutC( *p ); - } - return i; -} - - -/************************************************************************/ -/* TTY iface */ -/************************************************************************/ - -static int ttychar = -1; - -static int -tty_avail( void ) -{ - return OSI_CallAvailable( OSI_TTY_GETC ); -} - -int -availchar( void ) -{ - if( !tty_avail() ) - return 0; - - if( ttychar < 0 ) - ttychar = OSI_TTYGetc(); - if( ttychar < 0 ) - OSI_USleep(1); - return (ttychar >= 0); -} - -int -getchar( void ) -{ - int ch; - - if( !tty_avail() ) - return 0; - - if( ttychar < 0 ) - return OSI_TTYGetc(); - ch = ttychar; - ttychar = -1; - return ch; -} - -int -putchar( int c ) -{ - printk("%c", c ); - - if( tty_avail() ) - OSI_TTYPutc( c ); - return c; -} - - -/************************************************************************/ -/* MOL specific stuff */ -/************************************************************************/ - -int -arch_nvram_size( void ) -{ - return OSI_NVRamSize(); -} - -void -arch_nvram_put( char *buf ) -{ - int i, size = arch_nvram_size(); - - for( i=0; i<size; i++ ) - OSI_WriteNVRamByte( i, buf[i] ); -} - -void -arch_nvram_get( char *buf ) -{ - int i, size = arch_nvram_size(); - - /* support for zapping the nvram */ - if( get_bool_res("zap_nvram") == 1 ) { - memset( buf, 0, size ); - return; - } - - for( i=0; i<size; i++ ) - buf[i] = OSI_ReadNVRamByte( i ); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/mol.fs b/qemu/roms/openbios/arch/ppc/mol/mol.fs deleted file mode 100644 index 10c99bd79..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/mol.fs +++ /dev/null @@ -1,107 +0,0 @@ - - -\ ------------------------------------------------------------------------- -\ initialization -\ ------------------------------------------------------------------------- - -: make-openable ( path ) - find-dev if - begin ?dup while - \ install trivial open and close methods - dup active-package! is-open - parent - repeat - then -; - -: preopen ( chosen-str node-path ) - 2dup make-openable - - " /chosen" find-device - open-dev ?dup if - encode-int 2swap property - else - 2drop - then -; - -\ preopen device nodes (and store the ihandles under /chosen) -:noname - " memory" " /memory" preopen - " mmu" " /cpus/@0" preopen - " stdout" " /packages/mol-stdout" preopen - " stdin" " keyboard" preopen - " nvram" " /pci/pci-bridge/mac-io/nvram" preopen - " nvram" " /mol/nvram" preopen - -; SYSTEM-initializer - - -\ ------------------------------------------------------------------------- -\ device tree fixing -\ ------------------------------------------------------------------------- - -\ add decode-address methods -: (make-decodable) ( phandle -- ) - - dup " #address-cells" rot get-package-property 0= if - decode-int nip nip - over " decode-unit" rot find-method if 2drop else - ( save phandle ncells ) - - over active-package! - case - 1 of ['] parse-hex " decode-unit" is-xt-func endof - 3 of - " bus-range" active-package get-package-property 0= if - decode-int nip nip - ['] encode-unit-pci " encode-unit" is-xt-func - " decode-unit" is-func-begin - ['] (lit) , , - ['] decode-unit-pci-bus , - is-func-end - then - endof - endcase - then - then - drop -; - -: tree-fixes ( -- ) - active-package - - iterate-tree-begin - begin ?dup while - - dup (make-decodable) - - iterate-tree - repeat - - active-package! -; - -\ use the tty interface if available -: activate-tty-interface - " /mol/mol-tty" find-dev if drop - " /mol/mol-tty" " input-device" $setenv - " /mol/mol-tty" " output-device" $setenv - then -; - -:noname - " keyboard" input -; CONSOLE-IN-initializer - - -\ ------------------------------------------------------------------------- -\ pre-booting -\ ------------------------------------------------------------------------- - -: update-chosen - " /chosen" find-device - stdin @ encode-int " stdin" property - stdout @ encode-int " stdout" property - device-end -; diff --git a/qemu/roms/openbios/arch/ppc/mol/mol.h b/qemu/roms/openbios/arch/ppc/mol/mol.h deleted file mode 100644 index cea15a350..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/mol.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Creation Date: <2003/12/20 00:20:12 samuel> - * Time-stamp: <2004/03/27 01:52:50 samuel> - * - * <mol.h> - * - * - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#ifndef _H_MOL -#define _H_MOL - -/* video.c */ -extern void init_video( void ); -extern int video_get_res( int *w, int *h ); -extern void draw_pixel( int x, int y, int colind ); -extern void set_color( int index, unsigned long color ); - -/* console.c */ -extern int console_draw_fstr(const char *str, int len); -extern void console_close( void ); - -/* pseudodisk.c */ -extern void pseudodisk_init( void ); - -/* osi-blk.c */ -extern void osiblk_init( void ); - -/* osi-scsi.c */ -extern void osiscsi_init( void ); - -/* pseudofs.c */ -extern void pseudofs_init( void ); - -#include "../kernel.h" - -#endif /* _H_MOL */ diff --git a/qemu/roms/openbios/arch/ppc/mol/osi-blk.c b/qemu/roms/openbios/arch/ppc/mol/osi-blk.c deleted file mode 100644 index 4ed1b5ab3..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/osi-blk.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Creation Date: <2003/12/07 19:08:33 samuel> - * Time-stamp: <2004/01/07 19:38:36 samuel> - * - * <osi-blk.c> - * - * OSI-block interface - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "mol/mol.h" -#include "osi_calls.h" - -typedef struct { - int unit; - int channel; -} osiblk_data_t; - - -DECLARE_NODE( osiblk, INSTALL_OPEN, sizeof(osiblk_data_t), - "/pci/pci-bridge/mol-blk/disk", "/mol/mol-blk" ); - - -static void -osiblk_open( osiblk_data_t *pb ) -{ - phandle_t ph; - - fword("my-unit"); - pb->unit = POP(); - pb->channel = 0; /* FIXME */ - - selfword("open-deblocker"); - - /* interpose disk-label */ - ph = find_dev("/packages/disk-label"); - fword("my-args"); - PUSH_ph( ph ); - fword("interpose"); - - /* printk("osi-blk: open %d\n", pb->unit ); */ - PUSH( -1 ); -} - -static void -osiblk_close( osiblk_data_t *pb ) -{ - selfword("close-deblocker"); -} - - -/* ( buf blk nblks -- actual ) */ -static void -osiblk_read_blocks( osiblk_data_t *pb ) -{ - int i, n = POP(); - int blk = POP(); - char *dest = (char*)POP(); - - /* printk("osiblk_read_blocks %x block=%d n=%d\n", (int)dest, blk, n ); */ - - for( i=0; i<n; ) { - char buf[4096]; - int m = MIN( n-i, sizeof(buf)/512 ); - - if( OSI_ABlkSyncRead(pb->channel, pb->unit, blk+i, (int)buf, m*512) < 0 ) { - printk("SyncRead: error\n"); - RET(0); - } - memcpy( dest, buf, m * 512 ); - i += m; - dest += m * 512; - } - PUSH( n ); -} - -/* ( -- bs ) */ -static void -osiblk_block_size( osiblk_data_t *pb ) -{ - PUSH( 512 ); -} - -/* ( -- maxbytes ) */ -static void -osiblk_max_transfer( osiblk_data_t *pb ) -{ - PUSH( 1024*1024 ); -} - -static void -osiblk_initialize( osiblk_data_t *pb ) -{ - fword("is-deblocker"); -} - - -NODE_METHODS( osiblk ) = { - { NULL, osiblk_initialize }, - { "open", osiblk_open }, - { "close", osiblk_close }, - { "read-blocks", osiblk_read_blocks }, - { "block-size", osiblk_block_size }, - { "max-transfer", osiblk_max_transfer }, -}; - -void -osiblk_init( void ) -{ - REGISTER_NODE( osiblk ); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/osi-scsi.c b/qemu/roms/openbios/arch/ppc/mol/osi-scsi.c deleted file mode 100644 index 18f3dc577..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/osi-scsi.c +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Creation Date: <2003/12/11 21:23:54 samuel> - * Time-stamp: <2004/01/07 19:38:45 samuel> - * - * <osi-scsi.c> - * - * SCSI device node - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "mol/mol.h" -#include "scsi_sh.h" -#include "osi_calls.h" - -#define MAX_TARGETS 32 - -typedef struct { - int probed; - int valid; /* a useable device found */ - - int is_cd; - int blocksize; -} target_info_t; - -static target_info_t scsi_devs[ MAX_TARGETS ]; - -typedef struct { - int target; - target_info_t *info; -} instance_data_t; - - -DECLARE_NODE( scsi, INSTALL_OPEN, sizeof(instance_data_t), - "/pci/pci-bridge/mol-scsi/sd", "/mol/mol-scsi/sd" ); - - -static int -scsi_cmd_( instance_data_t *sd, const char *cmd, int cmdlen, char *dest, - int len, int prelen, int postlen ) -{ - char prebuf[4096], postbuf[4096]; - scsi_req_t r[2]; /* the [2] is a hack to get space for the sg-list */ - char sb[32]; - - /* memset( dest, 0, len ); */ - - if( (unsigned int)prelen > sizeof(prebuf) || (unsigned int)postlen > sizeof(postbuf) ) { - printk("bad pre/post len %d %d\n", prelen, postlen ); - return 1; - } - - memset( r, 0, sizeof(r[0]) ); - r->lun = 0; - r->target = sd->target; - r->is_write = 0; - memcpy( r->cdb, cmd, cmdlen ); - r->client_addr = (int)&r; - r->cdb_len = cmdlen; - r->sense[0].base = (int)&sb; - r->sense[0].size = sizeof(sb); - r->size = prelen + len + postlen; - r->n_sg = 3; - r->sglist.n_el = 3; - r->sglist.vec[0].base = (int)prebuf; - r->sglist.vec[0].size = prelen; - r->sglist.vec[1].base = (int)dest; - r->sglist.vec[1].size = len; - r->sglist.vec[2].base = (int)postbuf; - r->sglist.vec[2].size = postlen; - - if( OSI_SCSISubmit((int)&r) ) { - printk("OSI_SCSISubmit: error!\n"); - return 1; - } - while( !OSI_SCSIAck() ) - OSI_USleep( 10 ); - - if( r->adapter_status ) - return -1; - if( r->scsi_status ) - return ((sb[2] & 0xf) << 16) | (sb[12] << 8) | sb[13]; - return 0; -} - -static int -scsi_cmd( instance_data_t *sd, const char *cmd, int cmdlen ) -{ - return scsi_cmd_( sd, cmd, cmdlen, NULL, 0, 0, 0 ); -} - -/* ( buf blk nblks -- actual ) */ -static void -scsi_read_blocks( instance_data_t *sd ) -{ - int nblks = POP(); - int blk = POP(); - char *dest = (char*)POP(); - unsigned char cmd[10]; - int len = nblks * sd->info->blocksize; - - memset( dest, 0, len ); - - /* printk("READ: blk: %d length %d\n", blk, len ); */ - memset( cmd, 0, sizeof(cmd) ); - cmd[0] = 0x28; /* READ_10 */ - cmd[2] = blk >> 24; - cmd[3] = blk >> 16; - cmd[4] = blk >> 8; - cmd[5] = blk; - cmd[7] = nblks >> 8; - cmd[8] = nblks; - - if( scsi_cmd_(sd, cmd, 10, dest, len, 0, 0) ) { - printk("read: scsi_cmd failed\n"); - RET( -1 ); - } - PUSH( nblks ); -} - -static int -inquiry( instance_data_t *sd ) -{ - char inquiry_cmd[6] = { 0x12, 0, 0, 0, 32, 0 }; - char start_stop_unit_cmd[6] = { 0x1b, 0, 0, 0, 1, 0 }; - char test_unit_ready_cmd[6] = { 0x00, 0, 0, 0, 0, 0 }; - char prev_allow_medium_removal[6] = { 0x1e, 0, 0, 0, 1, 0 }; - char set_cd_speed_cmd[12] = { 0xbb, 0, 0xff, 0xff, 0xff, 0xff, - 0, 0, 0, 0, 0, 0 }; - target_info_t *info = &scsi_devs[sd->target]; - char ret[32]; - int i, sense; - - if( sd->target >= MAX_TARGETS ) - return -1; - sd->info = info; - - if( info->probed ) - return info->valid ? 0:-1; - info->probed = 1; - - if( (sense=scsi_cmd_(sd, inquiry_cmd, 6, ret, 2, 0, 0)) ) { - if( sense < 0 ) - return -1; - printk("INQUIRY failed\n"); - return -1; - } - - /* medium present? */ - if( (scsi_cmd(sd, test_unit_ready_cmd, 6) >> 8) == 0x23a ) { - printk("no media\n"); - return -1; - } - - info->is_cd = 0; - info->blocksize = 512; - - if( ret[0] == 5 /* CD/DVD */ ) { - info->blocksize = 2048; - info->is_cd = 1; - - scsi_cmd( sd, prev_allow_medium_removal, 6 ); - scsi_cmd( sd, set_cd_speed_cmd, 12 ); - scsi_cmd( sd, start_stop_unit_cmd, 6 ); - - } else if( ret[0] == 0 /* DISK */ ) { - scsi_cmd( sd, test_unit_ready_cmd, 6 ); - scsi_cmd( sd, start_stop_unit_cmd, 6 ); - } else { - /* don't boot from this device (could be a scanner :-)) */ - return -1; - } - - /* wait for spin-up (or whatever) to complete */ - for( i=0; ; i++ ) { - if( i > 300 ) { - printk("SCSI timeout (sense %x)\n", sense ); - return -1; - } - sense = scsi_cmd( sd, test_unit_ready_cmd, 6 ); - if( (sense & 0xf0000) == 0x20000 ) { - OSI_USleep( 10000 ); - continue; - } - break; - } - - info->valid = 1; - return 0; -} - -/* ( -- success? ) */ -static void -scsi_open( instance_data_t *sd ) -{ - static int once = 0; - phandle_t ph; - - fword("my-unit"); - sd->target = POP(); - - if( !once ) { - once++; - OSI_SCSIControl( SCSI_CTRL_INIT, 0 ); - } - - /* obtiain device information */ - if( inquiry(sd) ) - RET(0); - - selfword("open-deblocker"); - - /* interpose disk-label */ - ph = find_dev("/packages/disk-label"); - fword("my-args"); - PUSH_ph( ph ); - fword("interpose"); - - PUSH( -1 ); -} - -/* ( -- ) */ -static void -scsi_close( instance_data_t *pb ) -{ - selfword("close-deblocker"); -} - - -/* ( -- bs ) */ -static void -scsi_block_size( instance_data_t *sd ) -{ - PUSH( sd->info->blocksize ); -} - -/* ( -- maxbytes ) */ -static void -scsi_max_transfer( instance_data_t *sd ) -{ - PUSH( 1024*1024 ); -} - -static void -scsi_initialize( instance_data_t *sd ) -{ - fword("is-deblocker"); -} - - -NODE_METHODS( scsi ) = { - { NULL, scsi_initialize }, - { "open", scsi_open }, - { "close", scsi_close }, - { "read-blocks", scsi_read_blocks }, - { "block-size", scsi_block_size }, - { "max-transfer", scsi_max_transfer }, -}; - -void -osiscsi_init( void ) -{ - REGISTER_NODE( scsi ); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/prom.c b/qemu/roms/openbios/arch/ppc/mol/prom.c deleted file mode 100644 index 0bc8bcfbc..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/prom.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Creation Date: <2002/10/03 20:55:02 samuel> - * Time-stamp: <2002/10/29 13:00:23 samuel> - * - * <prom.c> - * - * oftree interface - * - * Copyright (C) 2002, 2003 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "osi_calls.h" -#include "mol/prom.h" - -/* OSI_PromClose (free linux side device tree) */ -int -prom_close( void ) -{ - return OSI_PromIface( kPromClose, 0 ); -} - -/* ret: 0 no more peers, -1 if error */ -mol_phandle_t -prom_peer( mol_phandle_t phandle ) -{ - return OSI_PromIface( kPromPeer, phandle ); -} - -/* ret: 0 no child, -1 if error */ -mol_phandle_t -prom_child( mol_phandle_t phandle ) -{ - return OSI_PromIface( kPromChild, phandle ); -} - -/* ret: 0 if root node, -1 if error */ -mol_phandle_t -prom_parent( mol_phandle_t phandle ) -{ - return OSI_PromIface( kPromParent, phandle ); -} - -/* ret: -1 error */ -int -prom_package_to_path( mol_phandle_t phandle, char *buf, long buflen ) -{ - return OSI_PromIface2( kPromPackageToPath, phandle, (int)buf, buflen ); -} - -/* ret: -1 error */ -int -prom_get_prop_len( mol_phandle_t phandle, const char *name ) -{ - return OSI_PromIface1( kPromGetPropLen, phandle, (int)name ); -} - -/* ret: prop len or -1 if error */ -int -prom_get_prop( mol_phandle_t phandle, const char *name, char *buf, long buflen ) -{ - return OSI_PromIface3( kPromGetProp, phandle, (int)name, (int)buf, buflen ); -} - -/* ret: prop len or -1 if error */ -int -prom_get_prop_by_path( const char *path, const char *name, char *buf, long buflen ) -{ - mol_phandle_t ph = prom_find_device(path); - return (ph != -1)? prom_get_prop( ph, name, buf, buflen) : -1; -} - -/* ret: -1 error, 0 last prop, 1 otherwise */ -int -prom_next_prop( mol_phandle_t phandle, const char *prev, char *buf ) -{ - return OSI_PromIface2( kPromNextProp, phandle, (int)prev, (int)buf ); -} - -/* ret: -1 if error */ -int -prom_set_prop( mol_phandle_t phandle, const char *name, char *buf, long buflen ) -{ - return OSI_PromIface3( kPromSetProp, phandle, (int)name, (int)buf, buflen ); -} - -/* ret: -1 if error */ -mol_phandle_t -prom_create_node( const char *path ) -{ - return OSI_PromPathIface( kPromCreateNode, path ); -} - -/* ret: -1 if not found */ -mol_phandle_t -prom_find_device( const char *path ) -{ - mol_phandle_t ph; - char buf2[256], ch, *p; - - if( !path ) - return -1; - - if( (ph=OSI_PromPathIface( kPromFindDevice, path )) != -1 ) - return ph; - else if( path[0] == '/' ) - return -1; - - /* might be an alias */ - if( !(p=strpbrk(path, "@:/")) ) - p = (char*)path + strlen(path); - - ch = *p; - *p = 0; - if( (ph=prom_get_prop(prom_find_device("/aliases"), path, buf2, sizeof(buf2))) == -1 ) - return -1; - *p = ch; - strncat( buf2, p, sizeof(buf2) ); - - if( buf2[0] != '/' ) { - printk("Error: aliases must be absolute!\n"); - return -1; - } - ph = OSI_PromPathIface( kPromFindDevice, buf2 ); - return ph; -} - - - -/************************************************************************/ -/* search the tree for nodes with matching device_type */ -/************************************************************************/ - -static mol_phandle_t -prom_find_device_type_( mol_phandle_t ph, const char *type, int *icount, int index ) -{ - char buf[64]; - int ph2; - - if( ph == -1 || !ph ) - return -1; - if( prom_get_prop( ph, "device_type", buf, sizeof(buf)) > 0 ) - if( !strcmp(buf, type) ) - if( (*icount)++ == index ) - return ph; - if( (ph2=prom_find_device_type_( prom_peer(ph), type, icount, index )) != -1 ) - return ph2; - if( (ph2=prom_find_device_type_( prom_child(ph), type, icount, index )) != -1 ) - return ph2; - return -1; -} - -mol_phandle_t -prom_find_device_type( const char *type, int index ) -{ - int count = 0; - return prom_find_device_type_( prom_peer(0), type, &count, index ); -} - - -/************************************************************************/ -/* device tree tweaking */ -/************************************************************************/ - -/* -1 if error */ -int -prom_change_phandle( mol_phandle_t old_ph, mol_phandle_t new_ph ) -{ - return OSI_PromIface1( kPromChangePHandle, old_ph, (int)new_ph ); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/prom.h b/qemu/roms/openbios/arch/ppc/mol/prom.h deleted file mode 100644 index 54a856c27..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/prom.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Creation Date: <2002/10/03 21:07:27 samuel> - * Time-stamp: <2003/10/22 22:45:26 samuel> - * - * <prom.h> - * - * device tree interface - * - * Copyright (C) 2002, 2003 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#ifndef _H_PROM -#define _H_PROM - -/* Note 1: MOL uses -1 as the invalid phandle while OpenFirmware uses 0 as the - * invalid phandle (it is also the root node). - * - * Note 2: phandles might be negative. For instance, phandles originating from - * a real Open Firmware tree might look like 0xff123000 (a ROM address)... - */ - -typedef enum { kGetRootPhandle=0 } mol_phandle_t; /* must promote to int */ - -extern int prom_close( void ); - -extern mol_phandle_t prom_peer( mol_phandle_t phandle ); -extern mol_phandle_t prom_child( mol_phandle_t phandle ); -extern mol_phandle_t prom_parent( mol_phandle_t phandle ); -extern int prom_package_to_path( mol_phandle_t phandle, char *buf, long buflen ); -extern int prom_get_prop_len( mol_phandle_t phandle, const char *name ); -extern int prom_get_prop( mol_phandle_t phandle, const char *name, char *buf, long buflen ); -extern int prom_get_prop_by_path( const char *path, const char *name, char *buf, long buflen ); -extern int prom_next_prop( mol_phandle_t phandle, const char *prev, char *buf ); -extern int prom_set_prop( mol_phandle_t phandle, const char *name, char *buf, long buflen ); -extern mol_phandle_t prom_create_node( const char *path ); -extern mol_phandle_t prom_find_device( const char *path ); - -extern mol_phandle_t prom_find_device_type( const char *type, int index ); - -extern int prom_change_phandle( mol_phandle_t old_ph, mol_phandle_t new_ph ); - -#endif /* _H_PROM */ diff --git a/qemu/roms/openbios/arch/ppc/mol/pseudodisk.c b/qemu/roms/openbios/arch/ppc/mol/pseudodisk.c deleted file mode 100644 index a98e54845..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/pseudodisk.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Creation Date: <2003/11/26 16:55:47 samuel> - * Time-stamp: <2004/01/07 19:41:54 samuel> - * - * <pseudodisk.c> - * - * pseudodisk (contains files exported from linux) - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "osi_calls.h" -#include "libc/string.h" -#include "libopenbios/ofmem.h" -#include "mol/prom.h" -#include "mol/mol.h" -#include "osi_calls.h" -#include "pseudofs_sh.h" - -typedef struct { - int seekpos; - int fd; - char *myargs; - char *name; - int size; -} pdisk_data_t; - - -DECLARE_NODE( pdisk, INSTALL_OPEN, sizeof(pdisk_data_t), "/mol/pseudo-disk/disk" ); - -static void -pdisk_open( pdisk_data_t *pb ) -{ - char *ep, *name = NULL; - int part; - - pb->myargs = my_args_copy(); - /* printk("pdisk-open: %s\n", pb->myargs ); */ - - part = strtol( pb->myargs, &ep, 10 ); - if( *ep ) { - if( (name=strchr(pb->myargs, ',')) ) { - *name = 0; - name++; - } else { - name = pb->myargs; - } - } - if( part ) - goto err; - - if( !name || !strlen(name) ) - pb->fd = -1; - else { - if( (pb->fd=PseudoFSOpen(name)) < 0 ) - goto err; - pb->size = PseudoFSGetSize( pb->fd ); - } - pb->name = name; - RET( -1 ); - err: - free( pb->myargs ); - RET(0); -} - -/* ( addr len -- actual ) */ -static void -pdisk_read( pdisk_data_t *pb ) -{ - int len = POP(); - char *dest = (char*)POP(); - int cnt; - - if( pb->fd < 0 ) { - memset( dest, 0, len ); - PUSH(len); - return; - } - /* dest is not "mol-DMA" safe (might have a nontrivial mapping) */ - for( cnt=0; cnt<len; ) { - char buf[2048]; - int n = MIN( len-cnt, sizeof(buf) ); - - n = PseudoFSRead( pb->fd, pb->seekpos, buf, n ); - if( n <= 0 ) - break; - - memcpy( dest+cnt, buf, n ); - cnt += n; - pb->seekpos += n; - } - PUSH( cnt ); -} - -/* ( addr len -- actual ) */ -static void -pdisk_write( pdisk_data_t *pb ) -{ - POP(); POP(); PUSH(-1); - printk("pdisk write\n"); -} - -/* ( pos.lo pos.hi -- status ) */ -static void -pdisk_seek( pdisk_data_t *pb ) -{ - int pos_lo; - POP(); - pos_lo = POP(); - - if( pb->fd >= 0 ) { - if( pos_lo == -1 ) - pos_lo = pb->size; - } - - pb->seekpos = pos_lo; - - PUSH(0); /* ??? */ -} - -/* ( -- pos.d ) */ -static void -pdisk_tell( pdisk_data_t *pb ) -{ - DPUSH( pb->seekpos ); -} - -/* ( -- cstr ) */ -static void -pdisk_get_path( pdisk_data_t *pb ) -{ - PUSH( (int)pb->name ); -} - -/* ( -- cstr ) */ -static void -pdisk_get_fstype( pdisk_data_t *pb ) -{ - PUSH( (int)"PSEUDO" ); -} - -/* ( -- cstr ) */ -static void -pdisk_volume_name( pdisk_data_t *pb ) -{ - PUSH( (int)"Virtual Volume" ); -} - -static void -pdisk_block_size( pdisk_data_t *pb ) -{ - PUSH(1); -} - -NODE_METHODS( pdisk ) = { - { "open", pdisk_open }, - { "read", pdisk_read }, - { "write", pdisk_write }, - { "seek", pdisk_seek }, - { "tell", pdisk_tell }, - { "block-size", pdisk_block_size }, - { "get-path", pdisk_get_path }, - { "get-fstype", pdisk_get_fstype }, - { "volume-name", pdisk_volume_name }, -}; - -void -pseudodisk_init( void ) -{ - REGISTER_NODE( pdisk ); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/tree.c b/qemu/roms/openbios/arch/ppc/mol/tree.c deleted file mode 100644 index b82c8c2c8..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/tree.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Creation Date: <2003/11/18 14:55:05 samuel> - * Time-stamp: <2004/03/27 02:03:55 samuel> - * - * <tree.c> - * - * device tree setup - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "mol/mol.h" -#include "mol/prom.h" - - -/************************************************************************/ -/* copy device tree */ -/************************************************************************/ - -static void -copy_node( mol_phandle_t molph ) -{ - char name[40], path[80]; - int exists; - phandle_t ph; - - if( !molph ) - return; - - prom_package_to_path( molph, path, sizeof(path) ); - - /* don't copy /options node */ - if( !strcmp("/options", path) ) { - copy_node( prom_peer(molph) ); - return; - } - - exists = 1; - if( !(ph=find_dev(path)) ) { - exists = 0; - fword("new-device"); - ph = get_cur_dev(); - } - activate_dev( ph ); - - name[0] = 0; - while( prom_next_prop(molph, name, name) > 0 ) { - int len = prom_get_prop_len( molph, name ); - char *p; -#if 0 - if( len > 0x1000 ) { - printk("prop to large (%d)\n", len ); - continue; - } -#endif - /* don't copy /chosen/{stdin,stdout} (XXX: ugly hack...) */ - if( !strcmp("/chosen", path) ) - if( !strcmp("stdio", name) || !strcmp("stdout", name) ) - continue; - - p = malloc( len ); - prom_get_prop( molph, name, p, len ); - set_property( ph, name, p, len ); - free( p ); - } - - set_int_property( ph, "MOL,phandle", molph ); - copy_node( prom_child(molph) ); - - if( !exists ) - fword("finish-device"); - else - activate_device(".."); - - copy_node( prom_peer(molph) ); -} - - - -/************************************************************************/ -/* device tree cloning and tweaking */ -/************************************************************************/ - -static phandle_t -translate_molph( mol_phandle_t molph ) -{ - static mol_phandle_t cached_molph; - static phandle_t cached_ph; - phandle_t ph=0; - - if( cached_molph == molph ) - return cached_ph; - - while( (ph=dt_iterate(ph)) ) - if( get_int_property(ph, "MOL,phandle", NULL) == molph ) - break; - cached_molph = molph; - cached_ph = ph; - - if( !ph ) - printk("failed to translate molph\n"); - return ph; -} - -static void -fix_phandles( void ) -{ - static char *pnames[] = { "interrupt-parent", "interrupt-controller", NULL } ; - int len, *map; - phandle_t ph=0; - char **pp; - - while( (ph=dt_iterate(ph)) ) { - for( pp=pnames; *pp; pp++ ) { - phandle_t *p = (phandle_t*)get_property( ph, *pp, &len ); - if( len == 4 ) - *p = translate_molph( *(int*)p ); - } - - /* need to fix interrupt map properties too */ - if( (map=(int*)get_property(ph, "interrupt-map", &len)) ) { - int i, acells = get_int_property(ph, "#address-cells", NULL); - int icells = get_int_property(ph, "#interrupt-cells", NULL); - - len /= sizeof(int); - for( i=0; i<len; i++ ) { - phandle_t ch_ph; - int ch_acells, ch_icells; - - i += acells + icells; - if( !(ch_ph=translate_molph(map[i])) ) - break; - map[i] = (int)ch_ph; - ch_acells = get_int_property(ch_ph, "#address-cells", NULL); - ch_icells = get_int_property(ch_ph, "#interrupt-cells", NULL); - i += ch_acells + icells; - } - if( i != len ) - printk("interrupt map fixing failure\n"); - } - } - /* delete MOL,phandle properties */ - for( ph=0; (ph=dt_iterate(ph)) ; ) { - push_str("MOL,phandle"); - PUSH_ph(ph); - fword("(delete-property)"); - } - fword("device-end"); -} - -void -devtree_init( void ) -{ - activate_device("/"); - copy_node( prom_peer(0) ); - fix_phandles(); - fword("tree-fixes"); -} diff --git a/qemu/roms/openbios/arch/ppc/mol/tree.fs b/qemu/roms/openbios/arch/ppc/mol/tree.fs deleted file mode 100644 index 228163ffc..000000000 --- a/qemu/roms/openbios/arch/ppc/mol/tree.fs +++ /dev/null @@ -1,103 +0,0 @@ - -: int-property ( val name -- ) - rot encode-int 2swap property -; - - -\ ------------------------------------------------------------- -\ device-tree -\ ------------------------------------------------------------- - -" /" find-device - - " device-tree" device-name - " bootrom" device-type - -\ ------------------------------------------------------------- -\ /memory -\ ------------------------------------------------------------- - -new-device - " memory" device-name - \ 12230 encode-int " reg" property - external - : open true ; - : close ; - \ claim ( phys size align -- base ) - \ release ( phys size -- ) -finish-device - -\ ------------------------------------------------------------- -\ /mol/ -\ ------------------------------------------------------------- - -new-device - " mol" device-name - 1 " #address-cells" int-property - 0 " #size-cells" int-property - - external - : open true ; - : close ; - -new-device - " test" device-name - - external - : open - ." /mol/test opened" cr - " argument-str" " ipose" find-package drop interpose - true - ; -finish-device -finish-device - -\ ------------------------------------------------------------- -\ /cpus/ -\ ------------------------------------------------------------- - -new-device - " cpus" device-name - 1 " #address-cells" int-property - 0 " #size-cells" int-property - - external - : open true ; - : close ; - : decode-unit parse-hex ; - -finish-device - -\ ------------------------------------------------------------- -\ /packages -\ ------------------------------------------------------------- - -" /packages" find-device - - " packages" device-name - external - \ allow packages to be opened with open-dev - : open true ; - : close ; - -\ /packages/mol-stdout -new-device - " mol-stdout" device-name - external - : open true ; - : close ; - : write ( addr len -- actual ) - dup -rot type - ; -finish-device - -\ XXXXXXXXXXXXXXXXXXXXXXX TESTING -" /" find-device -new-device - " test" device-name -finish-device - -\ ------------------------------------------------------------- -\ The END -\ ------------------------------------------------------------- -device-end diff --git a/qemu/roms/openbios/arch/ppc/ofmem.c b/qemu/roms/openbios/arch/ppc/ofmem.c deleted file mode 100644 index c9b066ed6..000000000 --- a/qemu/roms/openbios/arch/ppc/ofmem.c +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Creation Date: <1999/11/07 19:02:11 samuel> - * Time-stamp: <2004/01/07 19:42:36 samuel> - * - * <ofmem.c> - * - * OF Memory manager - * - * Copyright (C) 1999-2004 Samuel Rydh (samuel@ibrium.se) - * Copyright (C) 2004 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -/* TODO: Clean up MOLisms in a decent way */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libc/string.h" -#include "libopenbios/ofmem.h" -#include "kernel.h" -#ifdef I_WANT_MOLISMS -#include "mol/prom.h" -#include "mol/mol.h" -#endif -#include "mmutypes.h" -#include "asm/processor.h" -#ifdef I_WANT_MOLISMS -#include "osi_calls.h" -#endif - -#define BIT(n) (1U<<(31-(n))) - -/* called from assembly */ -extern void dsi_exception( void ); -extern void isi_exception( void ); -extern void setup_mmu( unsigned long code_base, unsigned long code_size, unsigned long ramsize ); - -/**************************************************************** - * Memory usage (before of_quiesce is called) - * - * Physical - * - * 0x00000000 Exception vectors - * 0x00004000 Free space - * 0x01e00000 Open Firmware (us) - * 0x01f00000 OF allocations - * 0x01ff0000 PTE Hash - * 0x02000000- Free space - * - * Allocations grow downwards from 0x01e00000 - * - ****************************************************************/ - -#define HASH_SIZE (2 << 15) -#define SEGR_BASE 0x400 /* segment number range to use */ - -#define FREE_BASE_1 0x00004000 -#define OF_CODE_START 0x01e00000 -/* #define OF_MALLOC_BASE 0x01f00000 */ -extern char _end[]; -#define OF_MALLOC_BASE _end - -#define HASH_BASE (0x02000000 - HASH_SIZE) -#define FREE_BASE_2 0x02000000 - -#define RAMSIZE 0x02000000 /* XXXXXXXXXXXXXXXXXXX FIXME XXXXXXXXXXXXXXX */ - -static ofmem_t s_ofmem; - -#define IO_BASE 0x80000000 -#define OFMEM (&s_ofmem) - -static inline unsigned long -get_hash_base( void ) -{ - return HASH_BASE; -} - -static inline unsigned long -get_hash_size( void ) -{ - return HASH_SIZE; -} - -static ucell get_heap_top( void ) -{ - return HASH_BASE; -} - -static inline size_t ALIGN_SIZE(size_t x, size_t a) -{ - return (x + a - 1) & ~(a-1); -} - -ofmem_t* ofmem_arch_get_private(void) -{ - return OFMEM; -} - -void* ofmem_arch_get_malloc_base(void) -{ - return OF_MALLOC_BASE; -} - -ucell ofmem_arch_get_heap_top(void) -{ - return get_heap_top(); -} - -ucell ofmem_arch_get_virt_top(void) -{ - return IO_BASE; -} - -void ofmem_arch_unmap_pages(ucell virt, ucell size) -{ - /* kill page mappings in provided range */ -} - -void ofmem_arch_map_pages(ucell phys, ucell virt, ucell size, ucell mode) -{ - /* none yet */ -} - -/************************************************************************/ -/* OF private allocations */ -/************************************************************************/ - -void * -malloc( int size ) -{ - return ofmem_malloc(size); -} - -void -free( void *ptr ) -{ - return ofmem_free(ptr); -} - -void * -realloc( void *ptr, size_t size ) -{ - return ofmem_realloc(ptr, size); -} - - -/************************************************************************/ -/* misc */ -/************************************************************************/ - -ucell ofmem_arch_default_translation_mode( ucell phys ) -{ - /* XXX: Guard bit not set as it should! */ - if( phys < IO_BASE || phys >= 0xffc00000 ) - return 0x02; /*0xa*/ /* wim GxPp */ - return 0x6a; /* WIm GxPp, I/O */ -} - - -/************************************************************************/ -/* page fault handler */ -/************************************************************************/ - -static ucell -ea_to_phys( ucell ea, ucell *mode ) -{ - ucell phys; - - /* hardcode our translation needs */ - if( ea >= OF_CODE_START && ea < FREE_BASE_2 ) { - *mode = ofmem_arch_default_translation_mode( ea ); - return ea; - } - - phys = ofmem_translate(ea, mode); - if( phys == (ucell)-1 ) { -#ifdef I_WANT_MOLISMS - if( ea != 0x80816c00 ) - printk("ea_to_phys: no translation for %08lx, using 1-1\n", ea ); -#endif - phys = ea; - *mode = ofmem_arch_default_translation_mode( phys ); - -#ifdef I_WANT_MOLISMS - forth_segv_handler( (char*)ea ); - OSI_Debugger(1); -#endif - /* print_virt_range(); */ - /* print_phys_range(); */ - /* print_trans(); */ - } - return phys; -} - -static void -hash_page( ucell ea, ucell phys, ucell mode ) -{ - static int next_grab_slot=0; - unsigned long *upte, cmp, hash1; - int i, vsid, found; - mPTE_t *pp; - - vsid = (ea>>28) + SEGR_BASE; - cmp = BIT(0) | (vsid << 7) | ((ea & 0x0fffffff) >> 22); - - hash1 = vsid; - hash1 ^= (ea >> 12) & 0xffff; - hash1 &= (get_hash_size() - 1) >> 6; - - pp = (mPTE_t*)(get_hash_base() + (hash1 << 6)); - upte = (unsigned long*)pp; - - /* replace old translation */ - for( found=0, i=0; !found && i<8; i++ ) - if( cmp == upte[i*2] ) - found=1; - - /* otherwise use a free slot */ - for( i=0; !found && i<8; i++ ) - if( !pp[i].v ) - found=1; - - /* out of slots, just evict one */ - if( !found ) { - i = next_grab_slot + 1; - next_grab_slot = (next_grab_slot + 1) % 8; - } - i--; - upte[i*2] = cmp; - upte[i*2+1] = (phys & ~0xfff) | mode; - - asm volatile( "tlbie %0" :: "r"(ea) ); -} - -void -dsi_exception( void ) -{ - unsigned long dar, dsisr; - ucell mode; - ucell phys; - - asm volatile("mfdar %0" : "=r" (dar) : ); - asm volatile("mfdsisr %0" : "=r" (dsisr) : ); - - //printk("dsi-exception @ %08lx <%08lx>\n", dar, dsisr ); - - phys = ea_to_phys(dar, &mode); - hash_page( dar, phys, mode ); -} - -void -isi_exception( void ) -{ - unsigned long nip, srr1; - ucell mode; - ucell phys; - - asm volatile("mfsrr0 %0" : "=r" (nip) : ); - asm volatile("mfsrr1 %0" : "=r" (srr1) : ); - - //printk("isi-exception @ %08lx <%08lx>\n", nip, srr1 ); - - phys = ea_to_phys(nip, &mode); - hash_page( nip, phys, mode ); -} - - -/************************************************************************/ -/* init / cleanup */ -/************************************************************************/ - -void -setup_mmu( unsigned long code_base, unsigned long code_size, unsigned long ramsize ) -{ - unsigned long sdr1 = HASH_BASE | ((HASH_SIZE-1) >> 16); - unsigned long sr_base = (0x20 << 24) | SEGR_BASE; - unsigned long msr; - int i; - - asm volatile("mtsdr1 %0" :: "r" (sdr1) ); - for( i=0; i<16; i++ ) { - int j = i << 28; - asm volatile("mtsrin %0,%1" :: "r" (sr_base + i), "r" (j) ); - } - asm volatile("mfmsr %0" : "=r" (msr) : ); - msr |= MSR_IR | MSR_DR; - asm volatile("mtmsr %0" :: "r" (msr) ); -} - -void -ofmem_init( void ) -{ - ofmem_t *ofmem = OFMEM; - /* In case we can't rely on memory being zero initialized */ - memset(ofmem, 0, sizeof(ofmem)); - - ofmem->ramsize = RAMSIZE; - - ofmem_claim_phys( 0, FREE_BASE_1, 0 ); - ofmem_claim_virt( 0, FREE_BASE_1, 0 ); - ofmem_claim_phys( OF_CODE_START, FREE_BASE_2 - OF_CODE_START, 0 ); - ofmem_claim_virt( OF_CODE_START, FREE_BASE_2 - OF_CODE_START, 0 ); -} diff --git a/qemu/roms/openbios/arch/ppc/osi.h b/qemu/roms/openbios/arch/ppc/osi.h deleted file mode 100644 index 3baae1575..000000000 --- a/qemu/roms/openbios/arch/ppc/osi.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Creation Date: <1999/03/18 03:19:43 samuel> - * Time-stamp: <2003/12/26 16:58:19 samuel> - * - * <os_interface.h> - * - * This file includes definitions for drivers - * running in the "emulated" OS. (Mainly the 'sc' - * mechanism of communicating) - * - * Copyright (C) 1999, 2000, 2001, 2002, 2003 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#ifndef _H_OSI -#define _H_OSI - -/* Magic register values loaded into r3 and r4 before the 'sc' assembly instruction */ -#define OSI_SC_MAGIC_R3 0x113724FA -#define OSI_SC_MAGIC_R4 0x77810F9B - - -/************************************************************************/ -/* Selectors (passed in r5) */ -/************************************************************************/ - -#define OSI_CALL_AVAILABLE 0 -#define OSI_DEBUGGER 1 /* enter debugger */ -/* obsolete OSI_LOG_STR 3 */ -#define OSI_CMOUNT_DRV_VOL 4 /* conditionally mount driver volume */ -/* obsolete OSI_SCSI_xxx 5-6 */ -#define OSI_GET_GMT_TIME 7 -#define OSI_MOUSE_CNTRL 8 -#define OSI_GET_LOCALTIME 9 /* return time in secs from 01/01/04 */ - -#define OSI_ENET_OPEN 10 -#define OSI_ENET_CLOSE 11 -#define OSI_ENET_GET_ADDR 12 -#define OSI_ENET_GET_STATUS 13 -#define OSI_ENET_CONTROL 14 -#define OSI_ENET_ADD_MULTI 16 -#define OSI_ENET_DEL_MULTI 17 -#define OSI_ENET_GET_PACKET 18 -#define OSI_ENET_SEND_PACKET 19 - -#define OSI_OF_INTERFACE 20 -#define OSI_OF_TRAP 21 -#define OSI_OF_RTAS 22 - -#define OSI_SCSI_CNTRL 23 -#define OSI_SCSI_SUBMIT 24 -#define OSI_SCSI_ACK 25 - -#define OSI_GET_MOUSE 26 /* -- r3 status, r4-r8 mouse data */ -#define OSI_ACK_MOUSE_IRQ 27 /* -- int */ - -#define OSI_SET_VMODE 28 /* modeID, depth -- error */ -#define OSI_GET_VMODE_INFO 29 /* mode, depth -- r3 status, r4-r9 pb */ -#define OSI_GET_MOUSE_DPI 30 /* -- mouse_dpi */ - -#define OSI_SET_VIDEO_POWER 31 -#define OSI_GET_FB_INFO 32 /* void -- r3 status, r4-r8 video data */ - -#define OSI_SOUND_WRITE 33 -/* #define OSI_SOUND_FORMAT 34 */ -#define OSI_SOUND_SET_VOLUME 35 -#define OSI_SOUND_CNTL 36 -/* obsolete OSI_SOUND call 37 */ - -#define OSI_VIDEO_ACK_IRQ 38 -#define OSI_VIDEO_CNTRL 39 - -#define OSI_SOUND_IRQ_ACK 40 -#define OSI_SOUND_START_STOP 41 - -#define OSI_REGISTER_IRQ 42 /* reg_property[0] appl_int -- irq_cookie */ -/* obsolete OSI_IRQ 43-46 */ - -#define OSI_LOG_PUTC 47 /* char -- */ - -#define OSI_KBD_CNTRL 50 -#define OSI_GET_ADB_KEY 51 /* -- adb_keycode (keycode | keycode_id in r4) */ - -#define OSI_WRITE_NVRAM_BYTE 52 /* offs, byte -- */ -#define OSI_READ_NVRAM_BYTE 53 /* offs -- byte */ - -#define OSI_EXIT 54 - -#define OSI_KEYCODE_TO_ADB 55 /* (keycode | keycode_id) -- adb_keycode */ -#define OSI_MAP_ADB_KEY 56 /* keycode, adbcode -- */ -#define OSI_SAVE_KEYMAPPING 57 /* -- */ -#define OSI_USLEEP 58 /* usecs -- */ -#define OSI_SET_COLOR 59 /* index value -- */ - -#define OSI_PIC_MASK_IRQ 60 /* irq -- */ -#define OSI_PIC_UNMASK_IRQ 61 /* irq -- */ -#define OSI_PIC_ACK_IRQ 62 /* irq mask_flag -- */ -#define OSI_PIC_GET_ACTIVE_IRQ 63 - -#define OSI_GET_COLOR 64 /* index -- value */ - -/* 65-67 old ablk implementation */ -#define OSI_IRQTEST 65 - -#define OSI_ENET2_OPEN 68 -#define OSI_ENET2_CLOSE 69 -#define OSI_ENET2_CNTRL 70 -#define OSI_ENET2_RING_SETUP 71 -#define OSI_ENET2_KICK 72 -#define OSI_ENET2_GET_HWADDR 73 -#define OSI_ENET2_IRQ_ACK 74 - -#define OSI_PROM_IFACE 76 -#define kPromClose 0 -#define kPromPeer 1 -#define kPromChild 2 -#define kPromParent 3 -#define kPromPackageToPath 4 -#define kPromGetPropLen 5 -#define kPromGetProp 6 -#define kPromNextProp 7 -#define kPromSetProp 8 -#define kPromChangePHandle 9 - -#define OSI_PROM_PATH_IFACE 77 -#define kPromCreateNode 16 -#define kPromFindDevice 17 - -#define OSI_BOOT_HELPER 78 -#define kBootHAscii2Unicode 32 -#define kBootHUnicode2Ascii 33 -#define kBootHGetStrResInd 34 /* key, buf, len -- buf */ -#define kBootHGetRAMSize 35 /* -- ramsize */ - -#define OSI_ABLK_RING_SETUP 79 -#define OSI_ABLK_CNTRL 80 -#define OSI_ABLK_DISK_INFO 81 -#define OSI_ABLK_KICK 82 -#define OSI_ABLK_IRQ_ACK 83 -#define OSI_ABLK_SYNC_READ 84 -#define OSI_ABLK_SYNC_WRITE 85 -#define OSI_ABLK_BLESS_DISK 86 - -#define OSI_EMUACCEL 89 /* EMULATE_xxx, nip -- index */ -#define OSI_MAPIN_MREGS 90 /* mphys */ -#define OSI_NVRAM_SIZE 91 - -#define OSI_MTICKS_TO_USECS 92 -#define OSI_USECS_TO_MTICKS 93 - -/* obsolete OSI_BLK 94-95 */ - -#define OSI_PSEUDO_FS 96 -#define kPseudoFSOpen 1 -#define kPseudoFSClose 2 -#define kPseudoFSGetSize 3 -#define kPseudoFSRead 4 -#define kPseudoFSIndex2Name 5 - -#define OSI_TTY_PUTC 97 -#define OSI_TTY_GETC 98 -#define OSI_TTY_IRQ_ACK 99 - -#define NUM_OSI_SELECTORS 100 /* remember to increase this... */ - -#endif /* _H_OSI */ diff --git a/qemu/roms/openbios/arch/ppc/osi_calls.h b/qemu/roms/openbios/arch/ppc/osi_calls.h deleted file mode 100644 index 1d6b3dc5e..000000000 --- a/qemu/roms/openbios/arch/ppc/osi_calls.h +++ /dev/null @@ -1,454 +0,0 @@ -/* - * Creation Date: <2002/06/16 01:40:57 samuel> - * Time-stamp: <2003/12/26 17:02:09 samuel> - * - * <osi_calls.h> - * - * OSI call inlines - * - * Copyright (C) 2002, 2003 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#ifndef _H_OSI_CALLS -#define _H_OSI_CALLS - -#include "osi.h" - -/* Old gcc versions have a limit on the number of registers used. - * Newer gcc versions (gcc 3.3) require that the clobber list does - * not overlap declared registers. - */ -#if __GNUC__ == 2 || ( __GNUC__ == 3 && __GNUC_MINOR__ < 3 ) -#define SHORT_REGLIST -#endif - - -/************************************************************************/ -/* OSI call instantiation macros */ -/************************************************************************/ - -#define dreg(n) __oc_##n __asm__ (#n) -#define ir(n) "r" (__oc_##n) -#define rr(n) "=r" (__oc_##n) - -#define _oc_head( input_regs... ) \ -{ \ - int _ret=0; \ - { \ - register unsigned long dreg(r3); \ - register unsigned long dreg(r4); \ - register unsigned long dreg(r5) \ - ,##input_regs ; - -#define _oc_syscall( number, extra_ret_regs... ) \ - __oc_r3 = OSI_SC_MAGIC_R3; \ - __oc_r4 = OSI_SC_MAGIC_R4; \ - __oc_r5 = number; \ - __asm__ __volatile__ ( \ - "sc " : rr(r3) ,## extra_ret_regs - -#define _oc_input( regs... ) \ - : ir(r3), ir(r4), ir(r5) \ - , ## regs \ - : "memory" ); - -/* the tail memory clobber is necessary since we violate the strict - * aliasing rules when we return structs through the registers. - */ -#define _oc_tail \ - asm volatile ( "" : : : "memory" ); \ - _ret = __oc_r3; \ - } \ - return _ret; \ -} - - -/************************************************************************/ -/* Alternatives */ -/************************************************************************/ - -#ifdef SHORT_REGLIST -#define _oc_syscall_r10w6( number, inputregs... ) \ - __oc_r3 = OSI_SC_MAGIC_R3; \ - __oc_r4 = OSI_SC_MAGIC_R4; \ - __oc_r5 = number; \ - __asm__ __volatile__ ( \ - "sc \n" \ - "stw 4,0(10) \n" \ - "stw 5,4(10) \n" \ - "stw 6,8(10) \n" \ - "stw 7,12(10) \n" \ - "stw 8,16(10) \n" \ - "stw 9,20(10) \n" \ - : rr(r3) \ - : ir(r3), ir(r4), ir(r5), ir(r10) \ - ,## inputregs \ - : "memory", \ - "r4", "r5", "r6", "r7", "r8", "r9" ); -#endif - - -/************************************************************************/ -/* Common helper functions */ -/************************************************************************/ - -#define _osi_call0( type, name, number ) \ -type name( void ) \ - _oc_head() \ - _oc_syscall( number ) \ - _oc_input() \ - _oc_tail - -#define _osi_call1( type, name, number, type1, arg1 ) \ -type name( type1 arg1 ) \ - _oc_head( dreg(r6) ) \ - __oc_r6 = (unsigned long)arg1; \ - _oc_syscall( number ) \ - _oc_input( ir(r6) ) \ - _oc_tail - -#define _osi_call2( type, name, number, t1, a1, t2, a2 ) \ -type name( t1 a1, t2 a2 ) \ - _oc_head( dreg(r6), dreg(r7) ) \ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - _oc_syscall( number ) \ - _oc_input( ir(r6), ir(r7) ) \ - _oc_tail - -#define _osi_call3( type, name, number, t1, a1, t2, a2, t3, a3 ) \ -type name( t1 a1, t2 a2, t3 a3 ) \ - _oc_head( dreg(r6), dreg(r7), dreg(r8) ) \ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - __oc_r8 = (unsigned long)a3; \ - _oc_syscall( number ) \ - _oc_input( ir(r6), ir(r7), ir(r8) ) \ - _oc_tail - -#define _osi_call4( type, name, number, t1, a1, t2, a2, t3, a3, t4, a4 ) \ -type name( t1 a1, t2 a2, t3 a3, t4 a4 ) \ - _oc_head( dreg(r6), dreg(r7), dreg(r8), dreg(r9) ) \ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - __oc_r8 = (unsigned long)a3; \ - __oc_r9 = (unsigned long)a4; \ - _oc_syscall( number ) \ - _oc_input( ir(r6), ir(r7), ir(r8), ir(r9) ) \ - _oc_tail - -#define _osi_call5( type, name, number, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5 ) \ -type name( t1 a1, t2 a2, t3 a3, t4 a4, t5 a5 ) \ - _oc_head( dreg(r6), dreg(r7), dreg(r8), dreg(r9), dreg(r10) ) \ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - __oc_r8 = (unsigned long)a3; \ - __oc_r9 = (unsigned long)a4; \ - __oc_r10 = (unsigned long)a5; \ - _oc_syscall( number ) \ - _oc_input( ir(r6), ir(r7), ir(r8), ir(r9), ir(r10) ) \ - _oc_tail - -#define _osi_call6( type, name, number, t1, a1, t2, a2, t3, a3, t4, a4, t5, a5, t6, a6 ) \ -type name( t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6 ) \ - _oc_head( dreg(r6), dreg(r7), dreg(r8), dreg(r9), dreg(r10), dreg(r11) )\ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - __oc_r8 = (unsigned long)a3; \ - __oc_r9 = (unsigned long)a4; \ - __oc_r10 = (unsigned long)a5; \ - __oc_r11 = (unsigned long)a6; \ - _oc_syscall( number ) \ - _oc_input( ir(r6), ir(r7), ir(r8), ir(r9), ir(r10), ir(r11) ) \ - _oc_tail - - -/************************************************************************/ -/* Special */ -/************************************************************************/ - -/* r4 returned in retarg1 pointer */ -#define _osi_call0_w1( type, name, number, type1, retarg1 ) \ -type name( type1 retarg1 ) \ - _oc_head() \ - _oc_syscall( number, rr(r4) ) \ - _oc_input() \ - *retarg1 = __oc_r4; \ - _oc_tail - -#define _osi_call0_w2( type, name, number, type1, retarg1 ) \ -type name( type1 retarg1 ) \ - _oc_head() \ - _oc_syscall( number, rr(r4), rr(r5) ) \ - _oc_input() \ - ((unsigned long*)retarg1)[0] = __oc_r4; \ - ((unsigned long*)retarg1)[1] = __oc_r5; \ - _oc_tail - -/* r4-r8 returned in retarg1 pointer */ -#define _osi_call0_w5( type, name, number, type1, retarg1 ) \ -type name( type1 retarg1 ) \ - _oc_head( dreg(r6), dreg(r7), dreg(r8) ) \ - _oc_syscall( number, \ - rr(r4), rr(r5), rr(r6), rr(r7), rr(r8) ) \ - _oc_input() \ - ((unsigned long*)retarg1)[0] = __oc_r4; \ - ((unsigned long*)retarg1)[1] = __oc_r5; \ - ((unsigned long*)retarg1)[2] = __oc_r6; \ - ((unsigned long*)retarg1)[3] = __oc_r7; \ - ((unsigned long*)retarg1)[4] = __oc_r8; \ - _oc_tail - -/* r4 returned in retarg pointer */ -#define _osi_call1_w1( type, name, number, t1, a1, t2, retarg ) \ -type name( t1 a1, t2 retarg ) \ - _oc_head( dreg(r6) ) \ - __oc_r6 = (unsigned long)a1; \ - _oc_syscall( number, rr(r4) ) \ - _oc_input( ir(r6) ) \ - ((unsigned long*)retarg)[0] = __oc_r4; \ - _oc_tail - -/* r4,r5 returned in retarg1, retarg2 */ -#define _osi_call1_w1w1( type, name, number, t1, a1, t2, retarg1, t3, retarg2 ) \ -type name( t1 a1, t2 retarg1, t3 retarg2 ) \ - _oc_head( dreg(r6) ) \ - __oc_r6 = (unsigned long)a1; \ - _oc_syscall( number, rr(r4), rr(r5) ) \ - _oc_input( ir(r6) ) \ - ((unsigned long*)retarg1)[0] = __oc_r4; \ - ((unsigned long*)retarg2)[0] = __oc_r5; \ - _oc_tail - -/* r4,r5 returned in retarg1, retarg2, retarg3 */ -#define _osi_call1_w1w1w1( type, name, number, t1, a1, t2, retarg1, t3, retarg2, t4, retarg3 ) \ -type name( t1 a1, t2 retarg1, t3 retarg2, t4 retarg3 ) \ - _oc_head( dreg(r6) ) \ - __oc_r6 = (unsigned long)a1; \ - _oc_syscall( number, rr(r4), rr(r5), rr(r6) ) \ - _oc_input( ir(r6) ) \ - ((unsigned long*)retarg1)[0] = __oc_r4; \ - ((unsigned long*)retarg2)[0] = __oc_r5; \ - ((unsigned long*)retarg3)[0] = __oc_r6; \ - _oc_tail - -/* r4,r5 returned in retarg pointer */ -#define _osi_call1_w2( type, name, number, t1, a1, t2, retarg ) \ -type name( t1 a1, t2 retarg ) \ - _oc_head( dreg(r6) ) \ - __oc_r6 = (unsigned long)a1; \ - _oc_syscall( number, rr(r4), rr(r5) ) \ - _oc_input( ir(r6) ) \ - ((unsigned long*)retarg)[0] = __oc_r4; \ - ((unsigned long*)retarg)[1] = __oc_r5; \ - _oc_tail - -/* r4-r7 returned in retarg pointer */ -#define _osi_call1_w4( type, name, number, t1, a1, t2, retarg ) \ -type name( t1 a1, t2 retarg ) \ - _oc_head( dreg(r6), dreg(r7) ) \ - __oc_r6 = (unsigned long)a1; \ - _oc_syscall( number, rr(r4), rr(r5), rr(r6), rr(r7) ) \ - _oc_input( ir(r6) ) \ - ((unsigned long*)retarg)[0] = __oc_r4; \ - ((unsigned long*)retarg)[1] = __oc_r5; \ - ((unsigned long*)retarg)[2] = __oc_r6; \ - ((unsigned long*)retarg)[3] = __oc_r7; \ - _oc_tail - - -/* r4-r5 returned in retarg pointer */ -#define _osi_call2_w2( type, name, number, t1, a1, t2, a2, t3, retarg ) \ -type name( t1 a1, t2 a2, t3 retarg ) \ - _oc_head( dreg(r6), dreg(r7) ) \ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - _oc_syscall( number, rr(r4), rr(r5) ) \ - _oc_input( ir(r6), ir(r7) ) \ - ((unsigned long*)retarg)[0] = __oc_r4; \ - ((unsigned long*)retarg)[1] = __oc_r5; \ - _oc_tail - -/* r4-r7 returned in retarg pointer */ -#define _osi_call2_w4( type, name, number, t1, a1, t2, a2, t3, retarg ) \ -type name( t1 a1, t2 a2, t3 retarg ) \ - _oc_head( dreg(r6), dreg(r7) ) \ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - _oc_syscall( number, rr(r4), rr(r5), rr(r6), rr(r7) ) \ - _oc_input( ir(r6), ir(r7) ) \ - ((unsigned long*)retarg)[0] = __oc_r4; \ - ((unsigned long*)retarg)[1] = __oc_r5; \ - ((unsigned long*)retarg)[2] = __oc_r6; \ - ((unsigned long*)retarg)[3] = __oc_r7; \ - _oc_tail - -#ifdef SHORT_REGLIST -/* r4-r9 returned in retarg pointer */ -#define _osi_call2_w6( type, name, number, t1, a1, t2, a2, t3, retarg ) \ -type name( t1 a1, t2 a2, t3 retarg ) \ - _oc_head( dreg(r6), dreg(r7), dreg(r10) ) \ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - __oc_r10 = (unsigned long)retarg; \ - _oc_syscall_r10w6( number, ir(r6), ir(r7) ) \ - _oc_tail - -#else /* SHORT_REGLIST */ - -/* r4-r9 returned in retarg pointer */ -#define _osi_call2_w6( type, name, number, t1, a1, t2, a2, t3, retarg ) \ -type name( t1 a1, t2 a2, t3 retarg ) \ - _oc_head( dreg(r6), dreg(r7), dreg(r8), dreg(r9) ) \ - __oc_r6 = (unsigned long)a1; \ - __oc_r7 = (unsigned long)a2; \ - _oc_syscall( number, rr(r4), rr(r5), rr(r6), rr(r7), rr(r8), rr(r9) ) \ - _oc_input( ir(r6), ir(r7) ) \ - ((unsigned long*)retarg)[0] = __oc_r4; \ - ((unsigned long*)retarg)[1] = __oc_r5; \ - ((unsigned long*)retarg)[2] = __oc_r6; \ - ((unsigned long*)retarg)[3] = __oc_r7; \ - ((unsigned long*)retarg)[4] = __oc_r8; \ - ((unsigned long*)retarg)[5] = __oc_r9; \ - _oc_tail - -#endif /* SHORT_REGLIST */ - - -/************************************************************************/ -/* OSI call inlines */ -/************************************************************************/ - -static inline _osi_call1( int, OSI_CallAvailable, OSI_CALL_AVAILABLE, int, osi_num ); - -static inline _osi_call1( int, OSI_PutC, OSI_LOG_PUTC, int, ch ); - -static inline _osi_call1( int, OSI_Debugger, OSI_DEBUGGER, int, num ); -static inline _osi_call0( int, OSI_Exit, OSI_EXIT ); - -/* misc */ -static inline _osi_call0( unsigned long, OSI_GetLocalTime, OSI_GET_LOCALTIME ); -static inline _osi_call0( unsigned long, OSI_GetGMTTime, OSI_GET_GMT_TIME ); -static inline _osi_call1( int, OSI_USleep, OSI_USLEEP, int, usecs ); - -/* NVRAM */ -static inline _osi_call0( int, OSI_NVRamSize, OSI_NVRAM_SIZE ); -static inline _osi_call1( int, OSI_ReadNVRamByte, OSI_READ_NVRAM_BYTE, int, offs ); -static inline _osi_call2( int, OSI_WriteNVRamByte, OSI_WRITE_NVRAM_BYTE, int, offs, - unsigned char, ch ); - -/* keyboard stuff */ -static inline _osi_call0_w1( int, OSI_GetAdbKey2, OSI_GET_ADB_KEY, int *, raw_key ); -static inline _osi_call1( int, OSI_KbdCntrl, OSI_KBD_CNTRL, int, cmd ); - -static inline int OSI_GetAdbKey( void ) - { int dummy_raw_key; return OSI_GetAdbKey2( &dummy_raw_key ); } -static inline _osi_call2( int, OSI_MapAdbKey, OSI_MAP_ADB_KEY, int, keycode, int, adbkey ) -static inline _osi_call1( int, OSI_KeycodeToAdb, OSI_KEYCODE_TO_ADB, int, keycode ); -static inline _osi_call0( int, OSI_SaveKeymapping, OSI_SAVE_KEYMAPPING ); - -/* mouse support */ -struct osi_mouse; -static inline _osi_call0_w5( int, OSI_GetMouse, OSI_GET_MOUSE, struct osi_mouse *, ret ); -static inline _osi_call0( int, OSI_GetMouseDPI, OSI_GET_MOUSE_DPI ); - -/* video */ -static inline _osi_call2( int, OSI_SetVMode_, OSI_SET_VMODE, int, mode, int, depth_mode ); -struct osi_get_vmode_info; -static inline _osi_call2_w6( int, OSI_GetVModeInfo_, OSI_GET_VMODE_INFO, int, mode, int, depth_mode, - struct osi_get_vmode_info *, ret ); -static inline _osi_call1( int, OSI_SetVPowerState, OSI_SET_VIDEO_POWER, int, power_state ); -static inline _osi_call2( int, OSI_SetColor, OSI_SET_COLOR, int, index, int, rgb ); -static inline _osi_call0_w1( int, OSI_VideoAckIRQ, OSI_VIDEO_ACK_IRQ, int *, events ); - -static inline void OSI_RefreshPalette( void ) { OSI_SetColor(-1,0); } - -/* PIC (mac-io replacement) */ -static inline _osi_call1( int, OSI_PICMaskIRQ, OSI_PIC_MASK_IRQ, int, irq ); -static inline _osi_call1( int, OSI_PICUnmaskIRQ, OSI_PIC_UNMASK_IRQ, int, irq ); -static inline _osi_call2( int, OSI_PICAckIRQ, OSI_PIC_ACK_IRQ, int, irq, int, mask_it ); -static inline _osi_call0( int, OSI_PICGetActiveIRQ, OSI_PIC_GET_ACTIVE_IRQ ); - -/* sound */ -static inline _osi_call1( int, OSI_SoundCntl, OSI_SOUND_CNTL, int, cmd ); -static inline _osi_call2( int, OSI_SoundCntl1, OSI_SOUND_CNTL, int, cmd, int, p1 ); -static inline _osi_call3( int, OSI_SoundCntl2, OSI_SOUND_CNTL, int, cmd, int, p1, int, p2 ); -static inline _osi_call0_w2( int, OSI_SoundIRQAck, OSI_SOUND_IRQ_ACK, unsigned long *, timestamp ); -static inline _osi_call3( int, OSI_SoundWrite, OSI_SOUND_WRITE, int, physbuf, int, len, int, restart ); -static inline _osi_call3( int, OSI_SoundSetVolume, OSI_SOUND_SET_VOLUME, int, hwvol, int, speakervol, int, mute ); - -/* async block driver */ -struct ablk_disk_info; -static inline _osi_call2_w4( int, OSI_ABlkDiskInfo, OSI_ABLK_DISK_INFO, int, channel, int, unit, - struct ablk_disk_info *, retinfo ); -static inline _osi_call1( int, OSI_ABlkKick, OSI_ABLK_KICK, int, channel ); -static inline _osi_call1_w1w1w1( int, OSI_ABlkIRQAck, OSI_ABLK_IRQ_ACK, int, channel, int *, req_count, - int *, active, int *, events ); -static inline _osi_call3( int, OSI_ABlkRingSetup, OSI_ABLK_RING_SETUP, int, channel, int, mphys, int, n_el ); -static inline _osi_call2( int, OSI_ABlkCntrl, OSI_ABLK_CNTRL, int, channel, int, cmd ); -static inline _osi_call3( int, OSI_ABlkCntrl1, OSI_ABLK_CNTRL, int, channel, int, cmd, int, param ); -static inline _osi_call5( int, OSI_ABlkSyncRead, OSI_ABLK_SYNC_READ, int, channel, int, unit, - int, blk, unsigned long, mphys, int, size ); -static inline _osi_call5( int, OSI_ABlkSyncWrite, OSI_ABLK_SYNC_WRITE, int, channel, int, unit, - int, blk, unsigned long, mphys, int, size ); -static inline _osi_call2( int, OSI_ABlkBlessDisk, OSI_ABLK_BLESS_DISK, int, channel, int, unit ); - -static inline _osi_call0( int, OSI_CMountDrvVol, OSI_CMOUNT_DRV_VOL ); - -/* enet2 */ -static inline _osi_call0( int, OSI_Enet2Open, OSI_ENET2_OPEN ); -static inline _osi_call0( int, OSI_Enet2Close, OSI_ENET2_CLOSE ); -static inline _osi_call3( int, OSI_Enet2RingSetup, OSI_ENET2_RING_SETUP, int, which_ring, - int, ring_mphys, int, n_el ); -static inline _osi_call2( int, OSI_Enet2Cntrl1, OSI_ENET2_CNTRL, int, cmd, int, param ); -static inline _osi_call1( int, OSI_Enet2Cntrl, OSI_ENET2_CNTRL, int, cmd ); -static inline _osi_call0( int, OSI_Enet2Kick, OSI_ENET2_KICK ); - -static inline _osi_call0_w2( int, OSI_Enet2GetHWAddr__, OSI_ENET2_GET_HWADDR, unsigned long *, retbuf ); -static inline int OSI_Enet2GetHWAddr( unsigned char *addr ) { - int ret; - unsigned long buf[2]; - - ret = OSI_Enet2GetHWAddr__( buf ); - - ((unsigned long*)addr)[0] = buf[0]; - ((unsigned short*)addr)[2] = (buf[1] >> 16); - return ret; -} -static inline _osi_call2( int, OSI_Enet2IRQAck, OSI_ENET2_IRQ_ACK, int, irq_enable, int, rx_head ); - -/* PROM (device-tree) */ -static inline _osi_call2( int, OSI_PromIface, OSI_PROM_IFACE, int, what, int, ph ); -static inline _osi_call3( int, OSI_PromIface1, OSI_PROM_IFACE, int, what, int, ph, int, p1 ); -static inline _osi_call4( int, OSI_PromIface2, OSI_PROM_IFACE, int, what, int, ph, int, p1, int, p2 ); -static inline _osi_call5( int, OSI_PromIface3, OSI_PROM_IFACE, int, what, int, ph, int, p1, int, p2, int, p3 ); -static inline _osi_call2( int, OSI_PromPathIface, OSI_PROM_PATH_IFACE, int, what, const char *, p ); - -/* emulation acceleration */ -static inline _osi_call1( int, OSI_MapinMregs, OSI_MAPIN_MREGS, unsigned long, mphys ); -static inline _osi_call3( int, OSI_EmuAccel, OSI_EMUACCEL, int, emuaccel_flags, int, param, int, inst_addr ); - -/* timer frequency */ -static inline _osi_call1( int, OSI_MticksToUsecs, OSI_MTICKS_TO_USECS, unsigned long, mticks ); -static inline _osi_call1( int, OSI_UsecsToMticks, OSI_USECS_TO_MTICKS, unsigned long, usecs ); - -/* fb info */ -struct osi_fb_info; -static inline _osi_call0_w5( int, OSI_GetFBInfo, OSI_GET_FB_INFO, struct osi_fb_info *, retinfo ); - -/* SCSI */ -static inline _osi_call0( int, OSI_SCSIAck, OSI_SCSI_ACK ); -static inline _osi_call1( int, OSI_SCSISubmit, OSI_SCSI_SUBMIT, int, req_mphys ); -static inline _osi_call2( int, OSI_SCSIControl, OSI_SCSI_CNTRL, int, sel, int, param ); - -/* TTY */ -static inline _osi_call0( int, OSI_TTYGetc, OSI_TTY_GETC ); -static inline _osi_call1( int, OSI_TTYPutc, OSI_TTY_PUTC, int, ch ); -static inline _osi_call0( int, OSI_TTYIRQAck, OSI_TTY_IRQ_ACK ); - -#endif /* _H_OSI_CALLS */ diff --git a/qemu/roms/openbios/arch/ppc/pearpc/console.c b/qemu/roms/openbios/arch/ppc/pearpc/console.c deleted file mode 100644 index 3869cbab5..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/console.c +++ /dev/null @@ -1,43 +0,0 @@ - -/* - * <console.c> - * - * Simple text console - * - * Copyright (C) 2005 Stefan Reinauer <stepan@openbios.org> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libc/diskio.h" -#include "libopenbios/ofmem.h" -#include "pearpc/pearpc.h" - - -typedef struct osi_fb_info { - unsigned long mphys; - int rb, w, h, depth; -} osi_fb_info_t; - - -int PearPC_GetFBInfo( osi_fb_info_t *fb ) -{ - - fb->w=1024; - fb->h=768; - fb->depth=15; - fb->rb=2048; - fb->mphys=0x84000000; - - return 0; -} - -#define openbios_GetFBInfo(x) PearPC_GetFBInfo(x) - -#include "../../../packages/video.c" -#include "../../../libopenbios/console_common.c" diff --git a/qemu/roms/openbios/arch/ppc/pearpc/init.c b/qemu/roms/openbios/arch/ppc/pearpc/init.c deleted file mode 100644 index ca6da0a44..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/init.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <init.c> - * - * Initialization for pearpc - * - * Copyright (C) 2004 Greg Watson - * Copyright (C) 2005 Stefan Reinauer - * - * based on mol/init.c: - * - * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Samuel & David Rydh - * (samuel@ibrium.se, dary@lindesign.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/openbios.h" -#include "libopenbios/bindings.h" -#include "arch/common/nvram.h" -#include "pearpc/pearpc.h" -#include "libopenbios/ofmem.h" -#include "openbios-version.h" - -extern void unexpected_excep( int vector ); -extern void ob_pci_init( void ); -extern void ob_adb_init( void ); -extern void setup_timers( void ); - -#if 0 -int -get_bool_res( const char *res ) -{ - char buf[8], *p; - - p = BootHGetStrRes( res, buf, sizeof(buf) ); - if( !p ) - return -1; - if( !strcasecmp(p,"true") || !strcasecmp(p,"yes") || !strcasecmp(p,"1") ) - return 1; - return 0; -} -#endif - -void -unexpected_excep( int vector ) -{ - printk("openbios panic: Unexpected exception %x\n", vector ); - for( ;; ) - ; -} - -unsigned long isa_io_base; - -void -entry( void ) -{ - isa_io_base = 0x80000000; - - printk("\n"); - printk("=============================================================\n"); - printk(PROGRAM_NAME " " OPENBIOS_VERSION_STR " [%s]\n", - OPENBIOS_BUILD_DATE); - - ofmem_init(); - initialize_forth(); - /* won't return */ - - printk("of_startup returned!\n"); - for( ;; ) - ; -} - -static void -setenv( char *env, char *value ) -{ - push_str( value ); - push_str( env ); - fword("$setenv"); -} - -void -arch_of_init( void ) -{ -#if CONFIG_RTAS - phandle_t ph; -#endif - int autoboot; - - devtree_init(); - nvram_init("/pci/mac-io/nvram"); - openbios_init(); - modules_init(); - setup_timers(); -#ifdef CONFIG_DRIVER_PCI - ob_pci_init(); -#endif - node_methods_init(); - init_video(); - -#if CONFIG_RTAS - if( !(ph=find_dev("/rtas")) ) - printk("Warning: No /rtas node\n"); - else { - unsigned long size = 0x1000; - while( size < (unsigned long)of_rtas_end - (unsigned long)of_rtas_start ) - size *= 2; - set_property( ph, "rtas-size", (char*)&size, sizeof(size) ); - } -#endif - -#if 0 - /* tweak boot settings */ - autoboot = !!get_bool_res("autoboot"); -#endif - autoboot = 0; - if( !autoboot ) - printk("Autobooting disabled - dropping into OpenFirmware\n"); - setenv("auto-boot?", autoboot ? "true" : "false" ); - setenv("boot-command", "pearpcboot"); - -#if 0 - if( get_bool_res("tty-interface") == 1 ) -#endif - fword("activate-tty-interface"); - - /* hack */ - device_end(); - bind_func("pearpcboot", boot ); -} diff --git a/qemu/roms/openbios/arch/ppc/pearpc/kernel.c b/qemu/roms/openbios/arch/ppc/pearpc/kernel.c deleted file mode 100644 index 6408e421e..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/kernel.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:03:25 stepan> - * Time-stamp: <2004/08/28 18:03:25 stepan> - * - * <pearpc/kernel.c> - * - * Copyright (C) 2005 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "pearpc-dict.h" -#include "../kernel.c" diff --git a/qemu/roms/openbios/arch/ppc/pearpc/main.c b/qemu/roms/openbios/arch/ppc/pearpc/main.c deleted file mode 100644 index 085494e56..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/main.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <main.c> - * - * Copyright (C) 2004 Greg Watson - * - * Based on MOL specific code which is - * Copyright (C) 2002, 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libopenbios/elfload.h" -#include "arch/common/nvram.h" -#include "libc/diskio.h" -#include "libc/vsprintf.h" -#include "pearpc/pearpc.h" -#include "libopenbios/ofmem.h" - -static void -transfer_control_to_elf( unsigned long entry ) -{ - extern void call_elf( unsigned long entry ); - printk("Starting ELF image at 0x%08lX\n", entry); - call_elf( 0x400000 ); - //call_elf( entry ); - - fatal_error("call_elf returned unexpectedly\n"); -} - -static int -load_elf_rom( unsigned long *entry, int fd ) -{ - int i, lszz_offs, elf_offs; - char buf[128], *addr; - Elf_ehdr ehdr; - Elf_phdr *phdr; - size_t s; - - printk("Loading '%s'\n", get_file_path(fd)); - - /* the ELF-image (usually) starts at offset 0x4000 */ - if( (elf_offs=find_elf(fd)) < 0 ) { - printk("----> %s is not an ELF image\n", buf ); - exit(1); - } - if( !(phdr=elf_readhdrs(fd, elf_offs, &ehdr)) ) - fatal_error("elf_readhdrs failed\n"); - - *entry = ehdr.e_entry; - - /* load segments. Compressed ROM-image assumed to be located immediately - * after the last segment */ - lszz_offs = elf_offs; - for( i=0; i<ehdr.e_phnum; i++ ) { - /* p_memsz, p_flags */ - s = MIN( phdr[i].p_filesz, phdr[i].p_memsz ); - seek_io( fd, elf_offs + phdr[i].p_offset ); - - /* printk("filesz: %08lX memsz: %08lX p_offset: %08lX p_vaddr %08lX\n", - phdr[i].p_filesz, phdr[i].p_memsz, phdr[i].p_offset, - phdr[i].p_vaddr ); */ - - if( phdr[i].p_vaddr != phdr[i].p_paddr ) - printk("WARNING: ELF segment virtual addr != physical addr\n"); - lszz_offs = MAX( lszz_offs, elf_offs + phdr[i].p_offset + phdr[i].p_filesz ); - if( !s ) - continue; - if( ofmem_claim( phdr[i].p_vaddr, phdr[i].p_memsz, 0 ) == -1 ) - fatal_error("Claim failed!\n"); - - addr = (char*)phdr[i].p_vaddr; - if( read_io(fd, addr, s) != s ) - fatal_error("read failed\n"); - -#if 0 - /* patch CODE segment */ - if( *entry >= phdr[i].p_vaddr && *entry < phdr[i].p_vaddr + s ) { - patch_newworld_rom( (char*)phdr[i].p_vaddr, s ); - newworld_timer_hack( (char*)phdr[i].p_vaddr, s ); - } -#endif - flush_icache_range( addr, addr+s ); - - /*printk("ELF ROM-section loaded at %08lX (size %08lX)\n", - (unsigned long)phdr[i].p_vaddr, (unsigned long)phdr[i].p_memsz );*/ - } - free( phdr ); - return lszz_offs; -} - - -static void -encode_bootpath( const char *spec, const char *args ) -{ - phandle_t chosen_ph = find_dev("/chosen"); - set_property( chosen_ph, "bootpath", spec, strlen(spec)+1 ); - set_property( chosen_ph, "bootargs", args, strlen(args)+1 ); -} - -/************************************************************************/ -/* pearpc booting */ -/************************************************************************/ - -static void -pearpc_startup( void ) -{ - const char *paths[] = { "hd:0,\\zImage.chrp", NULL }; - const char *args[] = { "root=/dev/hda2 console=ttyS0,115200", NULL }; - unsigned long entry; - int i, fd; - - for( i=0; paths[i]; i++ ) { - if( (fd=open_io(paths[i])) == -1 ) - continue; - (void) load_elf_rom( &entry, fd ); - close_io( fd ); - encode_bootpath( paths[i], args[i] ); - - update_nvram(); - transfer_control_to_elf( entry ); - /* won't come here */ - } - printk("*** Boot failure! No secondary bootloader specified ***\n"); -} - - -/************************************************************************/ -/* entry */ -/************************************************************************/ - -void -boot( void ) -{ - fword("update-chosen"); - pearpc_startup(); -} diff --git a/qemu/roms/openbios/arch/ppc/pearpc/methods.c b/qemu/roms/openbios/arch/ppc/pearpc/methods.c deleted file mode 100644 index f505b6cea..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/methods.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <methods.c> - * - * Misc device node methods - * - * Copyright (C) 2004 Greg Watson - * - * Based on MOL specific code which is - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libc/string.h" -#include "pearpc/pearpc.h" -#include "libopenbios/ofmem.h" - -/************************************************************************/ -/* RTAS (run-time abstraction services) */ -/************************************************************************/ - -#ifdef CONFIG_RTAS -DECLARE_NODE( rtas, INSTALL_OPEN, 0, "+/rtas" ); - -/* ( physbase -- rtas_callback ) */ -static void -rtas_instantiate( void ) -{ - int physbase = POP(); - int s=0x1000, size = (int)of_rtas_end - (int)of_rtas_start; - unsigned long virt; - - while( s < size ) - s += 0x1000; - virt = ofmem_claim_virt( 0, s, 0x1000 ); - ofmem_map( physbase, virt, s, -1 ); - memcpy( (char*)virt, of_rtas_start, size ); - - printk("RTAS instantiated at %08x\n", physbase ); - flush_icache_range( (char*)virt, (char*)virt + size ); - - PUSH( physbase ); -} - -NODE_METHODS( rtas ) = { - { "instantiate", rtas_instantiate }, - { "instantiate-rtas", rtas_instantiate }, -}; -#endif - - -/************************************************************************/ -/* stdout */ -/************************************************************************/ - -DECLARE_NODE( video_stdout, INSTALL_OPEN, 0, "Tdisplay" ); - -/* ( addr len -- actual ) */ -static void -stdout_write( void ) -{ - int len = POP(); - char *addr = (char*)POP(); - - printk( "%s", s ); - //vfd_draw_str( s ); - console_draw_fstr(addr, len); - - PUSH( len ); -} - -NODE_METHODS( video_stdout ) = { - { "write", stdout_write }, -}; - - -/************************************************************************/ -/* tty */ -/************************************************************************/ - -DECLARE_NODE( tty, INSTALL_OPEN, 0, "/packages/terminal-emulator" ); - -/* ( addr len -- actual ) */ -static void -tty_read( void ) -{ - int ch, len = POP(); - char *p = (char*)POP(); - int ret=0; - - if( len > 0 ) { - ret = 1; - ch = getchar(); - if( ch >= 0 ) { - *p = ch; - } else { - ret = 0; - } - } - PUSH( ret ); -} - -/* ( addr len -- actual ) */ -static void -tty_write( void ) -{ - int i, len = POP(); - char *p = (char*)POP(); - for( i=0; i<len; i++ ) - putchar( *p++ ); - RET( len ); -} - -NODE_METHODS( tty ) = { - { "read", tty_read }, - { "write", tty_write }, -}; - -/************************************************************************/ -/* client interface 'quiesce' */ -/************************************************************************/ - -DECLARE_NODE( ciface, 0, 0, "/packages/client-iface" ); - -/* ( -- ) */ -static void -ciface_quiesce( unsigned long args[], unsigned long ret[] ) -{ -#if 0 - unsigned long msr; - /* This seems to be the correct thing to do - but I'm not sure */ - asm volatile("mfmsr %0" : "=r" (msr) : ); - msr &= ~(MSR_IR | MSR_DR); - asm volatile("mtmsr %0" :: "r" (msr) ); -#endif - printk("=============================================================\n\n"); -} - -/* ( -- ms ) */ -static void -ciface_milliseconds( unsigned long args[], unsigned long ret[] ) -{ - extern unsigned long get_timer_freq(); - static unsigned long mticks=0, usecs=0; - unsigned long t; - - asm volatile("mftb %0" : "=r" (t) : ); - if( mticks ) - usecs += get_timer_freq() / 1000000 * ( t-mticks ); - mticks = t; - - PUSH( usecs/1000 ); -} - - -NODE_METHODS( ciface ) = { - { "quiesce", ciface_quiesce }, - { "milliseconds", ciface_milliseconds }, -}; - - -/************************************************************************/ -/* MMU/memory methods */ -/************************************************************************/ - -DECLARE_NODE( memory, INSTALL_OPEN, 0, "/memory" ); -DECLARE_NODE( mmu, INSTALL_OPEN, 0, "/cpu@0" ); -DECLARE_NODE( mmu_ciface, 0, 0, "/packages/client-iface" ); - - -/* ( phys size align --- base ) */ -static void -mem_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - ucell phys = POP(); - ucell ret = ofmem_claim_phys( phys, size, align ); - - if( ret == (ucell)-1 ) { - printk("MEM: claim failure\n"); - throw( -13 ); - return; - } - PUSH( ret ); -} - -/* ( phys size --- ) */ -static void -mem_release( void ) -{ - POP(); POP(); -} - -/* ( phys size align --- base ) */ -static void -mmu_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - ucell phys = POP(); - ucell ret = ofmem_claim_virt( phys, size, align ); - - if( ret == -1 ) { - printk("MMU: CLAIM failure\n"); - throw( -13 ); - return; - } - PUSH( ret ); -} - -/* ( phys size --- ) */ -static void -mmu_release( void ) -{ - POP(); POP(); -} - -/* ( phys virt size mode -- [ret???] ) */ -static void -mmu_map( void ) -{ - ucell mode = POP(); - ucell size = POP(); - ucell virt = POP(); - ucell phys = POP(); - ucell ret; - - /* printk("mmu_map: %x %x %x %x\n", phys, virt, size, mode ); */ - ret = ofmem_map( phys, virt, size, mode ); - - if( ret ) { - printk("MMU: map failure\n"); - throw( -13 ); - return; - } -} - -/* ( virt size -- ) */ -static void -mmu_unmap( void ) -{ - POP(); POP(); -} - -/* ( virt -- false | phys mode true ) */ -static void -mmu_translate( void ) -{ - ucell mode; - ucell virt = POP(); - ucell phys = ofmem_translate( virt, &mode ); - - if( phys == -1 ) { - PUSH( 0 ); - } else { - PUSH( phys ); - PUSH( mode ); - PUSH( -1 ); - } -} - -/* ( virt size align -- baseaddr|-1 ) */ -static void -ciface_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - ucell virt = POP(); - ucell ret = ofmem_claim( virt, size, align ); - - /* printk("ciface_claim: %08x %08x %x\n", virt, size, align ); */ - PUSH( ret ); -} - -/* ( virt size -- ) */ -static void -ciface_release( void ) -{ - POP(); - POP(); -} - - -NODE_METHODS( memory ) = { - { "claim", mem_claim }, - { "release", mem_release }, -}; - -NODE_METHODS( mmu ) = { - { "claim", mmu_claim }, - { "release", mmu_release }, - { "map", mmu_map }, - { "unmap", mmu_unmap }, - { "translate", mmu_translate }, -}; - -NODE_METHODS( mmu_ciface ) = { - { "cif-claim", ciface_claim }, - { "cif-release", ciface_release }, -}; - - -/************************************************************************/ -/* init */ -/************************************************************************/ - -void -node_methods_init( void ) -{ -#ifdef CONFIG_RTAS - REGISTER_NODE( rtas ); -#endif - REGISTER_NODE( video_stdout ); - REGISTER_NODE( ciface ); - REGISTER_NODE( memory ); - REGISTER_NODE( mmu ); - REGISTER_NODE( mmu_ciface ); - REGISTER_NODE( tty ); -} diff --git a/qemu/roms/openbios/arch/ppc/pearpc/pearpc.c b/qemu/roms/openbios/arch/ppc/pearpc/pearpc.c deleted file mode 100644 index 234052ce4..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/pearpc.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <pearpc.c> - * - * Copyright (C) 2004, Greg Watson - * - * derived from mol.c - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "kernel/kernel.h" -#include "arch/common/nvram.h" -#include "libc/vsprintf.h" -#include "libc/string.h" -#include "pearpc/pearpc.h" -#include <stdarg.h> - -#define UART_BASE 0x3f8 - -// FIXME -unsigned long virt_offset = 0; - - -void -exit( int status ) -{ - for (;;); -} - -void -fatal_error( const char *err ) -{ - printk("Fatal error: %s\n", err ); - exit(0); -} - -void -panic( const char *err ) -{ - printk("Panic: %s\n", err ); - exit(0); - - /* won't come here... this keeps the gcc happy */ - for( ;; ) - ; -} - - -/************************************************************************/ -/* print using OSI interface */ -/************************************************************************/ - -static int do_indent; - -int -printk( const char *fmt, ... ) -{ - char *p, buf[1024]; - va_list args; - int i; - - va_start(args, fmt); - i = vsnprintf(buf, sizeof(buf), fmt, args); - va_end(args); - - for( p=buf; *p; p++ ) { - if( *p == '\n' ) - do_indent = 0; - if( do_indent++ == 1 ) { - putchar( '>' ); - putchar( '>' ); - putchar( ' ' ); - } - putchar( *p ); - } - return i; -} - - -/************************************************************************/ -/* TTY iface */ -/************************************************************************/ - -static int ttychar = -1; - -static int -tty_avail( void ) -{ - return 1; -} - -static int -tty_putchar( int c ) -{ - if( tty_avail() ) { - while (!(inb(UART_BASE + 0x05) & 0x20)) - ; - outb(c, UART_BASE); - while (!(inb(UART_BASE + 0x05) & 0x40)) - ; - } - return c; -} - -int -availchar( void ) -{ - if( !tty_avail() ) - return 0; - - if( ttychar < 0 ) - ttychar = inb(UART_BASE); - return (ttychar >= 0); -} - -int -getchar( void ) -{ - int ch; - - if( !tty_avail() ) - return 0; - - if( ttychar < 0 ) - return inb(UART_BASE); - ch = ttychar; - ttychar = -1; - return ch; -} - -int -putchar( int c ) -{ - if (c == '\n') - tty_putchar('\r'); - return tty_putchar(c); -} - - -/************************************************************************/ -/* briQ specific stuff */ -/************************************************************************/ - -#define IO_NVRAM_PA_START 0x80860000 -#define IO_NVRAM_PA_END 0x80880000 - -static char *nvram=(char *)IO_NVRAM_PA_START; - -void -dump_nvram(void) -{ - static char hexdigit[] = "0123456789abcdef"; - int i; - for (i = 0; i < 16*4; i++) - { - printk ("%c", hexdigit[nvram[i<<4] >> 4]); - printk ("%c", hexdigit[nvram[i<<4] % 16]); - if (!((i + 1) % 16)) - { - printk ("\n"); - } - else - { - printk (" "); - } - } -} - - -int -arch_nvram_size( void ) -{ - return (IO_NVRAM_PA_END-IO_NVRAM_PA_START)>>4; -} - -void -arch_nvram_put( char *buf ) -{ - int i; - for (i=0; i<(IO_NVRAM_PA_END-IO_NVRAM_PA_START)>>4; i++) - nvram[i<<4]=buf[i]; - // memcpy(nvram, buf, IO_NVRAM_PA_END-IO_NVRAM_PA_START); - printk("new nvram:\n"); - dump_nvram(); -} - -void -arch_nvram_get( char *buf ) -{ - int i; - for (i=0; i<(IO_NVRAM_PA_END-IO_NVRAM_PA_START)>>4; i++) - buf[i]=nvram[i<<4]; - - //memcpy(buf, nvram, IO_NVRAM_PA_END-IO_NVRAM_PA_START); - printk("current nvram:\n"); - dump_nvram(); -} diff --git a/qemu/roms/openbios/arch/ppc/pearpc/pearpc.fs b/qemu/roms/openbios/arch/ppc/pearpc/pearpc.fs deleted file mode 100644 index 0d018b1c3..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/pearpc.fs +++ /dev/null @@ -1,116 +0,0 @@ -\ pearpc specific initialization code -\ -\ Copyright (C) 2005 Stefan Reinauer -\ -\ This program is free software; you can redistribute it and/or -\ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation -\ - - -\ ------------------------------------------------------------------------- -\ initialization -\ ------------------------------------------------------------------------- - -: make-openable ( path ) - find-dev if - begin ?dup while - \ install trivial open and close methods - dup active-package! is-open - parent - repeat - then -; - -: preopen ( chosen-str node-path ) - 2dup make-openable - - " /chosen" find-device - open-dev ?dup if - encode-int 2swap property - else - 2drop - then -; - -\ preopen device nodes (and store the ihandles under /chosen) -:noname - " rtc" " /pci/isa/rtc" preopen - " memory" " /memory" preopen - " mmu" " /cpu@0" preopen - \ " stdout" " /packages/terminal-emulator" preopen - " stdout" " /pci/pci6666,6666" preopen - " stdin" " /pci/via-cuda/adb" preopen - -; SYSTEM-initializer - - -\ ------------------------------------------------------------------------- -\ device tree fixing -\ ------------------------------------------------------------------------- - -\ add decode-address methods -: (make-decodable) ( phandle -- ) - - dup " #address-cells" rot get-package-property 0= if - decode-int nip nip - over " decode-unit" rot find-method if 2drop else - ( save phandle ncells ) - - over active-package! - case - 1 of ['] parse-hex " decode-unit" is-xt-func endof - 3 of - " bus-range" active-package get-package-property 0= if - decode-int nip nip - ['] encode-unit-pci " encode-unit" is-xt-func - " decode-unit" is-func-begin - ['] (lit) , , - ['] decode-unit-pci-bus , - is-func-end - then - endof - endcase - then - then - drop -; - -: init-pearpc-tree ( -- ) - active-package - - iterate-tree-begin - begin ?dup while - - dup (make-decodable) - - iterate-tree - repeat - - active-package! -; - -\ use the tty interface if available -: activate-tty-interface - " /packages/terminal-emulator" find-dev if drop - " /pci/via-cuda/adb" " input-device" $setenv - " /pci/pci6666,6666" " output-device" $setenv - then -; - -:noname - " keyboard" input -; CONSOLE-IN-initializer - - -\ ------------------------------------------------------------------------- -\ pre-booting -\ ------------------------------------------------------------------------- - -: update-chosen - " /chosen" find-device - stdin @ encode-int " stdin" property - stdout @ encode-int " stdout" property - " /pci/isa/interrupt-controller" find-dev if encode-int " interrupt-controller" property then - device-end -; diff --git a/qemu/roms/openbios/arch/ppc/pearpc/pearpc.h b/qemu/roms/openbios/arch/ppc/pearpc/pearpc.h deleted file mode 100644 index 44497d79e..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/pearpc.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Creation Date: <2004/08/28 17:50:12 stepan> - * Time-stamp: <2004/08/28 17:50:12 stepan> - * - * <pearpc.h> - * - * Copyright (C) 2005 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#ifndef _H_PEARPC -#define _H_PEARPC - -/* vfd.c */ -extern int vfd_draw_str( const char *str ); -extern void vfd_close( void ); - -extern int console_draw_fstr(const char *str, int len); - -#include "kernel.h" - -#endif /* _H_PEARPC */ diff --git a/qemu/roms/openbios/arch/ppc/pearpc/tree.c b/qemu/roms/openbios/arch/ppc/pearpc/tree.c deleted file mode 100644 index abd1bf024..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/tree.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <tree.c> - * - * device tree setup - * - * Copyright (C) 2004 Greg Watson - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" - -void devtree_init( void ) -{ - fword("init-pearpc-tree"); -} diff --git a/qemu/roms/openbios/arch/ppc/pearpc/tree.fs b/qemu/roms/openbios/arch/ppc/pearpc/tree.fs deleted file mode 100644 index d19b485f8..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/tree.fs +++ /dev/null @@ -1,305 +0,0 @@ -\ PearPC specific initialization code -\ -\ Copyright (C) 2005 Stefan Reinauer -\ -\ This program is free software; you can redistribute it and/or -\ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation -\ - -\ ------------------------------------------------------------- -\ device-tree -\ ------------------------------------------------------------- - -" /" find-device - -" chrp" device-type -" OpenSource,PEARPC" model -h# 80000000 encode-int " isa-io-base" property -1 encode-int " #interrupt-cells" property -1 encode-int " #size-cells" property - -new-device - " memory" device-name - " memory" device-type - 0 encode-int h# 1E00000 encode-int encode+ - h# 2000000 encode-int encode+ h# 40000000 encode-int encode+ - " available" property - 0 h# 40000000 reg - external - : open true ; - : close ; -finish-device - -new-device - " cpu" device-name - " cpu" device-type - " " encode-string " translations" property - 0 encode-phys h# 8000000 encode-int encode+ " available" property - d# 32 encode-int " d-cache-block-size" property - 8 encode-int " d-cache-sets" property - d# 32768 encode-int " d-cache-size" property - d# 32 encode-int " i-cache-block-size" property - 8 encode-int " i-cache-sets" property - d# 32768 encode-int " i-cache-size" property - " " encode-string " cache-unified" property - 2 encode-int " i-tlb-sets" property - d# 128 encode-int " i-tlb-size" property - 2 encode-int " d-tlb-sets" property - d# 128 encode-int " d-tlb-size" property - " " encode-string " tlb-split" property - 2 encode-int " tlb-sets" property - d# 256 encode-int " tlb-size" property - " " encode-string " performance-monitor" property - " " encode-string " graphics" property - 4 encode-int " reservation-granule-size" property - d# 25000000 encode-int " timebase-frequency" property - d# 300000000 encode-int " clock-frequency" property - d# 66000000 encode-int " bus-frequency" property - h# 88201 encode-int " cpu-version" property - 0 encode-int " reg" property -finish-device - -" /pci" find-device - h# 01000000 encode-int 0 encode-int encode+ 0 encode-int encode+ - h# 80000000 encode-int encode+ 0 encode-int encode+ - h# 01000000 encode-int encode+ - h# 02000000 encode-int encode+ 0 encode-int encode+ 0 encode-int encode+ - h# C0000000 encode-int encode+ 0 encode-int encode+ - h# 08000000 encode-int encode+ - " ranges" property - " IBM,CPC710" model - h# FF5F7700 encode-int " 8259-interrupt-acknowledge" property - h# 0000F800 encode-int 0 encode-int encode+ 0 encode-int encode+ - 7 encode-int encode+ - " interrupt-map-mask" property - 1 encode-int " #interrupt-cells" property - h# 80000000 encode-int " system-dma-base" property - d# 33333333 encode-int " clock-frequency" property - " " encode-string " primary-bridge" property - 0 encode-int " pci-bridge-number" property - h# FEC00000 encode-int h# 100000 encode-int encode+ " reg" property - 0 encode-int 0 encode-int encode+ " bus-range" property - -new-device - " isa" device-name - " isa" device-type - 2 encode-int " #address-cells" property - 1 encode-int " #size-cells" property - - external - : open true ; - : close ; - -finish-device - -: ?devalias ( alias-str alias-len device-str device-len -- - \ alias-str alias-len false | true ) - active-package >r - " /aliases" find-device - \ 2dup ." Checking " type - 2dup find-dev if \ check if device exists - drop - 2over find-dev if \ do we already have an alias? - \ ." alias exists" cr - drop 2drop false - else - \ ." device exists" cr - encode-string - 2swap property - true - then - else - \ ." device doesn't exist" cr - 2drop false - then - r> active-package! - ; - -:noname - " hd" - " /pci/pci-ata/ata-1/disk@0" ?devalias not if - " /pci/pci-ata/ata-1/disk@1" ?devalias not if - " /pci/pci-ata/ata-2/disk@0" ?devalias not if - " /pci/pci-ata/ata-2/disk@1" ?devalias not if - 2drop ." No disk found." cr - then - then - then - then - - " cdrom" - " /pci/pci-ata/ata-1/cdrom@0" ?devalias not if - " /pci/pci-ata/ata-1/cdrom@1" ?devalias not if - " /pci/pci-ata/ata-2/cdrom@0" ?devalias not if - " /pci/pci-ata/ata-2/cdrom@1" ?devalias not if - 2drop ." No cdrom found" cr - then - then - then - then -; SYSTEM-initializer - -new-device - " ide" device-name - " ide" device-type - " WINBOND,82C553" model - h# 28 encode-int " max-latency" property - h# 2 encode-int " min-grant" property - h# 1 encode-int " devsel-speed" property - h# 0 encode-int " subsystem-vendor-id" property - h# 0 encode-int " subsystem-id" property - h# 1018A encode-int " class-code" property - h# 5 encode-int " revision-id" property - h# 105 encode-int " device-id" property - h# 10AD encode-int " vendor-id" property - h# 1003110 encode-int 0 encode-int encode+ h# 10020 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 1003114 encode-int 0 encode-int encode+ h# 10030 encode-int encode+ - h# 4 encode-int encode+ 0 encode-int encode+ - h# 1003118 encode-int 0 encode-int encode+ h# 10040 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 100311C encode-int 0 encode-int encode+ h# 10034 encode-int encode+ - h# 4 encode-int encode+ 0 encode-int encode+ - h# 1003120 encode-int 0 encode-int encode+ h# 10050 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 1003124 encode-int 0 encode-int encode+ h# 10060 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - " assigned-addresses" property - h# 3100 encode-int 0 encode-int encode+ 0 encode-int encode+ - 0 encode-int encode+ 0 encode-int encode+ - h# 1003110 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 1003114 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 4 encode-int encode+ 0 encode-int encode+ - h# 1003118 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 100311C encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 4 encode-int encode+ 0 encode-int encode+ - h# 1003120 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - h# 1003124 encode-int 0 encode-int encode+ h# 0 encode-int encode+ - h# 10 encode-int encode+ 0 encode-int encode+ - " reg" property -finish-device - -new-device - " ethernet" device-name - " network" device-type - " AMD,79C973" model - h# 3800 encode-int 0 encode-int encode+ 0 encode-int encode+ - 0 encode-int encode+ 0 encode-int encode+ - " reg" property -finish-device - -" /pci/isa" find-device - 0 0 " assigned-addresses" property - 0 0 " ranges" property - 0 encode-int " slot-names" property - d# 8333333 encode-int " clock-frequency" property - 0 encode-int " eisa-slots" property - 2 encode-int " #interrupt-cells" property - " W83C553F" encode-string " compatible" property - " WINBOND,82C553" model - 0 encode-int " max-latency" property - 0 encode-int " min-grant" property - 1 encode-int " devsel-speed" property - 0 encode-int " subsystem-vendor-id" property - 0 encode-int " subsystem-id" property - h# 60100 encode-int " class-code" property - h# 10 encode-int " revision-id" property - h# 565 encode-int " device-id" property - h# 10AD encode-int " vendor-id" property - h# 3000 encode-int 0 encode-int encode+ 0 encode-int encode+ - 0 encode-int encode+ 0 encode-int encode+ " reg" property - -new-device - " rtc" device-name - " rtc" device-type - " DS17285S" model - " MC146818" encode-string - " DS17285S" encode-string encode+ - " pnpPNP,b00" encode-string encode+ " compatible" property - 8 encode-int 0 encode-int encode+ " interrupts" property - h# 70 encode-int 1 encode-int encode+ - 2 encode-int encode+ " reg" property -finish-device - -new-device - " interrupt-controller" device-name - " interrupt-controller" device-type - " 8259" model - " " encode-string " interrupt-controller" property - 2 encode-int " #interrupt-cells" property - 1 encode-int - 2 encode-int encode+ - 3 encode-int encode+ - 6 encode-int encode+ - " reserved-interrupts" property - " 8259" encode-string - " chrp,iic" encode-string encode+ - " compatible" property - h# 20 encode-int 1 encode-int encode+ - 2 encode-int encode+ " reg" property -finish-device - -new-device - " serial" device-name - " serial" device-type - " no" encode-string " ctsrts" property - " no" encode-string " xon" property - " no" encode-string " parity" property - d# 115200 encode-int " bps" property - 1 encode-int " stop-bits" property - 8 encode-int " data-bits" property - h# 70800 encode-int " divisor" property - h# 708000 encode-int " clock-frequency" property - 4 encode-int 0 encode-int encode+ " interrupts" property - h# 3F8 encode-int 1 encode-int encode+ - 8 encode-int encode+ " reg" property -finish-device - -" /pci" find-device - " /pci/isa/interrupt-controller" find-dev if - encode-int " interrupt-parent" property - then - h# 3800 encode-int 0 encode-int encode+ - 0 encode-int encode+ 1 encode-int encode+ - " /pci/isa/interrupt-controller" find-dev if - encode-int encode+ - then - h# 0C encode-int encode+ 1 encode-int encode+ - " interrupt-map" property - -" /pci/isa" find-device - " /pci/isa/interrupt-controller" find-dev if - encode-int " interrupt-parent" property - then - -\ ------------------------------------------------------------- -\ /packages -\ ------------------------------------------------------------- - -" /packages" find-device - - " packages" device-name - external - \ allow packages to be opened with open-dev - : open true ; - : close ; - -\ /packages/terminal-emulator -new-device - " terminal-emulator" device-name - external - : open true ; - : close ; - \ : write ( addr len -- actual ) - \ dup -rot type - \ ; -finish-device - -\ ------------------------------------------------------------- -\ The END -\ ------------------------------------------------------------- -device-end diff --git a/qemu/roms/openbios/arch/ppc/pearpc/vfd.c b/qemu/roms/openbios/arch/ppc/pearpc/vfd.c deleted file mode 100644 index 06485f2dc..000000000 --- a/qemu/roms/openbios/arch/ppc/pearpc/vfd.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Creation Date: <2004/08/28 17:29:43 greg> - * Time-stamp: <2004/08/28 17:29:43 greg> - * - * <vfd.c> - * - * Simple text console - * - * Copyright (C) 2004 Greg Watson - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "pearpc/pearpc.h" - -static int vfd_is_open; - -static int -vfd_init( void ) -{ - vfd_is_open = 1; - return 0; -} - -void -vfd_close( void ) -{ -} - -int -vfd_draw_str( const char *str ) -{ - if (!vfd_is_open) - vfd_init(); - - return 0; -} diff --git a/qemu/roms/openbios/arch/ppc/ppc.fs b/qemu/roms/openbios/arch/ppc/ppc.fs deleted file mode 100644 index 0414f22c4..000000000 --- a/qemu/roms/openbios/arch/ppc/ppc.fs +++ /dev/null @@ -1,68 +0,0 @@ -include config.fs - -\ ------------------------------------------------------------------------- -\ registers -\ ------------------------------------------------------------------------- - -0 value %cr -0 value %ctr -0 value %lr -0 value %msr -0 value %srr0 -0 value %srr1 -0 value %pc \ should be an alias for %srr0 - -0 value %r0 -0 value %r1 -0 value %r2 -0 value %r3 -0 value %r4 -0 value %r5 -0 value %r6 -0 value %r7 -0 value %r8 -0 value %r9 -0 value %r10 -0 value %r11 -0 value %r12 -0 value %r13 -0 value %r14 -0 value %r15 -0 value %r16 -0 value %r17 -0 value %r18 -0 value %r19 -0 value %r20 -0 value %r21 -0 value %r22 -0 value %r23 -0 value %r24 -0 value %r25 -0 value %r26 -0 value %r27 -0 value %r28 -0 value %r29 -0 value %r30 -0 value %r31 - -0 value %xer -0 value %sprg0 -0 value %sprg1 -0 value %sprg2 -0 value %sprg3 - -\ ------------------------------------------------------------------------- -\ Load VGA FCode driver blob -\ ------------------------------------------------------------------------- - -[IFDEF] CONFIG_DRIVER_VGA - -1 value vga-driver-fcode - " QEMU,VGA.bin" $encode-file to vga-driver-fcode -[THEN] - -\ ------------------------------------------------------------------------- -\ other -\ ------------------------------------------------------------------------- - -\ Set by BootX when booting Mac OS X -defer spin diff --git a/qemu/roms/openbios/arch/ppc/qemu/console.c b/qemu/roms/openbios/arch/ppc/qemu/console.c deleted file mode 100644 index 53a321525..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/console.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * <console.c> - * - * Simple text console - * - * Copyright (C) 2005 Stefan Reinauer <stepan@openbios.org> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libopenbios/console.h" -#include "drivers/drivers.h" - -#ifdef CONFIG_DEBUG_CONSOLE -/* ****************************************************************** - * common functions, implementing simple concurrent console - * ****************************************************************** */ - -static int mac_putchar(int c) -{ -#ifdef CONFIG_DEBUG_CONSOLE_SERIAL - escc_uart_putchar(c & 0xff); -#endif - return c; -} - -static int mac_availchar(void) -{ -#ifdef CONFIG_DEBUG_CONSOLE_SERIAL - if (escc_uart_charav(CONFIG_SERIAL_PORT)) - return 1; -#endif - return 0; -} - -static int mac_getchar(void) -{ -#ifdef CONFIG_DEBUG_CONSOLE_SERIAL - if (escc_uart_charav(CONFIG_SERIAL_PORT)) - return (escc_uart_getchar(CONFIG_SERIAL_PORT)); -#endif - return 0; -} - -struct _console_ops mac_console_ops = { - .putchar = mac_putchar, - .availchar = mac_availchar, - .getchar = mac_getchar -}; - -static int prep_putchar(int c) -{ -#ifdef CONFIG_DEBUG_CONSOLE_SERIAL - uart_putchar(c & 0xff); -#endif - return c; -} - -static int prep_availchar(void) -{ -#ifdef CONFIG_DEBUG_CONSOLE_SERIAL - if (uart_charav(CONFIG_SERIAL_PORT)) - return 1; -#endif - return 0; -} - -static int prep_getchar(void) -{ -#ifdef CONFIG_DEBUG_CONSOLE_SERIAL - if (uart_charav(CONFIG_SERIAL_PORT)) - return (uart_getchar(CONFIG_SERIAL_PORT)); -#endif - return 0; -} - -struct _console_ops prep_console_ops = { - .putchar = prep_putchar, - .availchar = prep_availchar, - .getchar = prep_getchar -}; - -#endif // CONFIG_DEBUG_CONSOLE diff --git a/qemu/roms/openbios/arch/ppc/qemu/init.c b/qemu/roms/openbios/arch/ppc/qemu/init.c deleted file mode 100644 index b76c5706f..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/init.c +++ /dev/null @@ -1,1018 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <init.c> - * - * Initialization for qemu - * - * Copyright (C) 2004 Greg Watson - * Copyright (C) 2005 Stefan Reinauer - * - * based on mol/init.c: - * - * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Samuel & David Rydh - * (samuel@ibrium.se, dary@lindesign.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/openbios.h" -#include "libopenbios/bindings.h" -#include "libopenbios/console.h" -#include "drivers/pci.h" -#include "arch/common/nvram.h" -#include "drivers/drivers.h" -#include "qemu/qemu.h" -#include "libopenbios/ofmem.h" -#include "openbios-version.h" -#include "libc/byteorder.h" -#include "libc/vsprintf.h" -#define NO_QEMU_PROTOS -#include "arch/common/fw_cfg.h" -#include "arch/ppc/processor.h" - -#define UUID_FMT "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x" - -struct cpudef { - unsigned int iu_version; - const char *name; - int icache_size, dcache_size; - int icache_sets, dcache_sets; - int icache_block_size, dcache_block_size; - int tlb_sets, tlb_size; - void (*initfn)(const struct cpudef *cpu); -}; - -static uint16_t machine_id = 0; - -extern void unexpected_excep(int vector); - -void -unexpected_excep(int vector) -{ - printk("openbios panic: Unexpected exception %x\n", vector); - for (;;) { - } -} - -extern void __divide_error(void); - -void -__divide_error(void) -{ - return; -} - -enum { - ARCH_PREP = 0, - ARCH_MAC99, - ARCH_HEATHROW, - ARCH_MAC99_U3, -}; - -int is_apple(void) -{ - return is_oldworld() || is_newworld(); -} - -int is_oldworld(void) -{ - return machine_id == ARCH_HEATHROW; -} - -int is_newworld(void) -{ - return (machine_id == ARCH_MAC99) || - (machine_id == ARCH_MAC99_U3); -} - -static const pci_arch_t known_arch[] = { - [ARCH_PREP] = { - .name = "PREP", - .vendor_id = PCI_VENDOR_ID_MOTOROLA, - .device_id = PCI_DEVICE_ID_MOTOROLA_RAVEN, - .cfg_addr = 0x80000cf8, - .cfg_data = 0x80000cfc, - .cfg_base = 0x80000000, - .cfg_len = 0x00100000, - .host_pci_base = 0xc0000000, - .pci_mem_base = 0x100000, /* avoid VGA at 0xa0000 */ - .mem_len = 0x10000000, - .io_base = 0x80000000, - .io_len = 0x00010000, - .rbase = 0x00000000, - .rlen = 0x00400000, - .irqs = { 9, 11, 9, 11 } - }, - [ARCH_MAC99] = { - .name = "MAC99", - .vendor_id = PCI_VENDOR_ID_APPLE, - .device_id = PCI_DEVICE_ID_APPLE_UNI_N_PCI, - .cfg_addr = 0xf2800000, - .cfg_data = 0xf2c00000, - .cfg_base = 0xf2000000, - .cfg_len = 0x02000000, - .host_pci_base = 0x0, - .pci_mem_base = 0x80000000, - .mem_len = 0x10000000, - .io_base = 0xf2000000, - .io_len = 0x00800000, - .rbase = 0x00000000, - .rlen = 0x01000000, - .irqs = { 0x1b, 0x1c, 0x1d, 0x1e } - }, - [ARCH_MAC99_U3] = { - .name = "MAC99_U3", - .vendor_id = PCI_VENDOR_ID_APPLE, - .device_id = PCI_DEVICE_ID_APPLE_U3_AGP, - .cfg_addr = 0xf0800000, - .cfg_data = 0xf0c00000, - .cfg_base = 0xf0000000, - .cfg_len = 0x02000000, - .host_pci_base = 0x0, - .pci_mem_base = 0x80000000, - .mem_len = 0x10000000, - .io_base = 0xf2000000, - .io_len = 0x00800000, - .rbase = 0x00000000, - .rlen = 0x01000000, - .irqs = { 0x1b, 0x1c, 0x1d, 0x1e } - }, - [ARCH_HEATHROW] = { - .name = "HEATHROW", - .vendor_id = PCI_VENDOR_ID_MOTOROLA, - .device_id = PCI_DEVICE_ID_MOTOROLA_MPC106, - .cfg_addr = 0xfec00000, - .cfg_data = 0xfee00000, - .cfg_base = 0x80000000, - .cfg_len = 0x7f000000, - .host_pci_base = 0x0, - .pci_mem_base = 0x80000000, - .mem_len = 0x10000000, - .io_base = 0xfe000000, - .io_len = 0x00800000, - .rbase = 0xfd000000, - .rlen = 0x01000000, - .irqs = { 21, 22, 23, 24 } - }, -}; -unsigned long isa_io_base; - -extern struct _console_ops mac_console_ops, prep_console_ops; - -void -entry(void) -{ - uint32_t temp = 0; - char buf[5]; - - arch = &known_arch[ARCH_HEATHROW]; - - fw_cfg_init(); - - fw_cfg_read(FW_CFG_SIGNATURE, buf, 4); - buf[4] = '\0'; - if (strncmp(buf, "QEMU", 4) == 0) { - temp = fw_cfg_read_i32(FW_CFG_ID); - if (temp == 1) { - machine_id = fw_cfg_read_i16(FW_CFG_MACHINE_ID); - arch = &known_arch[machine_id]; - } - } - - isa_io_base = arch->io_base; - -#ifdef CONFIG_DEBUG_CONSOLE - if (is_apple()) { - init_console(mac_console_ops); - } else { - init_console(prep_console_ops); - } -#endif - - if (temp != 1) { - printk("Incompatible configuration device version, freezing\n"); - for (;;) { - } - } - - ofmem_init(); - initialize_forth(); - /* won't return */ - - printk("of_startup returned!\n"); - for (;;) { - } -} - -/* -- phys.lo ... phys.hi */ -static void -push_physaddr(phys_addr_t value) -{ - PUSH(value); -#ifdef CONFIG_PPC64 - PUSH(value >> 32); -#endif -} - -/* From drivers/timer.c */ -extern unsigned long timer_freq; - -static void -cpu_generic_init(const struct cpudef *cpu) -{ - push_str("/cpus"); - fword("find-device"); - - fword("new-device"); - - push_str(cpu->name); - fword("device-name"); - - push_str("cpu"); - fword("device-type"); - - PUSH(mfpvr()); - fword("encode-int"); - push_str("cpu-version"); - fword("property"); - - PUSH(cpu->dcache_size); - fword("encode-int"); - push_str("d-cache-size"); - fword("property"); - - PUSH(cpu->icache_size); - fword("encode-int"); - push_str("i-cache-size"); - fword("property"); - - PUSH(cpu->dcache_sets); - fword("encode-int"); - push_str("d-cache-sets"); - fword("property"); - - PUSH(cpu->icache_sets); - fword("encode-int"); - push_str("i-cache-sets"); - fword("property"); - - PUSH(cpu->dcache_block_size); - fword("encode-int"); - push_str("d-cache-block-size"); - fword("property"); - - PUSH(cpu->icache_block_size); - fword("encode-int"); - push_str("i-cache-block-size"); - fword("property"); - - PUSH(cpu->tlb_sets); - fword("encode-int"); - push_str("tlb-sets"); - fword("property"); - - PUSH(cpu->tlb_size); - fword("encode-int"); - push_str("tlb-size"); - fword("property"); - - timer_freq = fw_cfg_read_i32(FW_CFG_PPC_TBFREQ); - PUSH(timer_freq); - fword("encode-int"); - push_str("timebase-frequency"); - fword("property"); - - PUSH(fw_cfg_read_i32(FW_CFG_PPC_CLOCKFREQ)); - fword("encode-int"); - push_str("clock-frequency"); - fword("property"); - - PUSH(fw_cfg_read_i32(FW_CFG_PPC_BUSFREQ)); - fword("encode-int"); - push_str("bus-frequency"); - fword("property"); - - push_str("running"); - fword("encode-string"); - push_str("state"); - fword("property"); - - PUSH(0x20); - fword("encode-int"); - push_str("reservation-granule-size"); - fword("property"); -} - -static void -cpu_add_pir_property(void) -{ - unsigned long pir; - - asm("mfspr %0, 1023\n" - : "=r"(pir) :); - PUSH(pir); - fword("encode-int"); - push_str("reg"); - fword("property"); -} - -static void -cpu_604_init(const struct cpudef *cpu) -{ - cpu_generic_init(cpu); - cpu_add_pir_property(); - - fword("finish-device"); -} - -static void -cpu_750_init(const struct cpudef *cpu) -{ - cpu_generic_init(cpu); - - PUSH(0); - fword("encode-int"); - push_str("reg"); - fword("property"); - - fword("finish-device"); -} - -static void -cpu_g4_init(const struct cpudef *cpu) -{ - cpu_generic_init(cpu); - cpu_add_pir_property(); - - fword("finish-device"); -} - -#ifdef CONFIG_PPC_64BITSUPPORT -/* In order to get 64 bit aware handlers that rescue all our - GPRs from getting truncated to 32 bits, we need to patch the - existing handlers so they jump to our 64 bit aware ones. */ -static void -ppc64_patch_handlers(void) -{ - uint32_t *dsi = (uint32_t *)0x300UL; - uint32_t *isi = (uint32_t *)0x400UL; - - // Patch the first DSI handler instruction to: ba 0x2000 - *dsi = 0x48002002; - - // Patch the first ISI handler instruction to: ba 0x2200 - *isi = 0x48002202; - - // Invalidate the cache lines - asm ("icbi 0, %0" : : "r"(dsi)); - asm ("icbi 0, %0" : : "r"(isi)); -} -#endif - -static void -cpu_970_init(const struct cpudef *cpu) -{ - cpu_generic_init(cpu); - - PUSH(0); - fword("encode-int"); - push_str("reg"); - fword("property"); - - PUSH(0); - PUSH(0); - fword("encode-bytes"); - push_str("64-bit"); - fword("property"); - - fword("finish-device"); - -#ifdef CONFIG_PPC_64BITSUPPORT - /* The 970 is a PPC64 CPU, so we need to activate - * 64bit aware interrupt handlers */ - - ppc64_patch_handlers(); -#endif - - /* The 970 also implements the HIOR which we need to set to 0 */ - - mtspr(S_HIOR, 0); -} - -static const struct cpudef ppc_defs[] = { - { - .iu_version = 0x00040000, - .name = "PowerPC,604", - .icache_size = 0x4000, - .dcache_size = 0x4000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_604_init, - }, - { // XXX find out real values - .iu_version = 0x00090000, - .name = "PowerPC,604e", - .icache_size = 0x4000, - .dcache_size = 0x4000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_604_init, - }, - { // XXX find out real values - .iu_version = 0x000a0000, - .name = "PowerPC,604r", - .icache_size = 0x4000, - .dcache_size = 0x4000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_604_init, - }, - { // XXX find out real values - .iu_version = 0x80040000, - .name = "PowerPC,MPC86xx", - .icache_size = 0x8000, - .dcache_size = 0x8000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_750_init, - }, - { - .iu_version = 0x000080000, - .name = "PowerPC,750", - .icache_size = 0x8000, - .dcache_size = 0x8000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_750_init, - }, - { // XXX find out real values - .iu_version = 0x10080000, - .name = "PowerPC,750", - .icache_size = 0x8000, - .dcache_size = 0x8000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_750_init, - }, - { // XXX find out real values - .iu_version = 0x70000000, - .name = "PowerPC,750", - .icache_size = 0x8000, - .dcache_size = 0x8000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_750_init, - }, - { // XXX find out real values - .iu_version = 0x70020000, - .name = "PowerPC,750", - .icache_size = 0x8000, - .dcache_size = 0x8000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_750_init, - }, - { // XXX find out real values - .iu_version = 0x800c0000, - .name = "PowerPC,74xx", - .icache_size = 0x8000, - .dcache_size = 0x8000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_750_init, - }, - { - .iu_version = 0x0000c0000, - .name = "PowerPC,G4", - .icache_size = 0x8000, - .dcache_size = 0x8000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x20, - .dcache_block_size = 0x20, - .tlb_sets = 0x40, - .tlb_size = 0x80, - .initfn = cpu_g4_init, - }, - { - .iu_version = 0x00390000, - .name = "PowerPC,970", - .icache_size = 0x10000, - .dcache_size = 0x8000, - .icache_sets = 0x200, - .dcache_sets = 0x80, - .icache_block_size = 0x80, - .dcache_block_size = 0x80, - .tlb_sets = 0x100, - .tlb_size = 0x1000, - .initfn = cpu_970_init, - }, - { // XXX find out real values - .iu_version = 0x003C0000, - .name = "PowerPC,970FX", - .icache_size = 0x10000, - .dcache_size = 0x8000, - .icache_sets = 0x80, - .dcache_sets = 0x80, - .icache_block_size = 0x80, - .dcache_block_size = 0x80, - .tlb_sets = 0x100, - .tlb_size = 0x1000, - .initfn = cpu_970_init, - }, - { - .iu_version = 0x00350000, - .name = "PowerPC,POWER4", - .icache_size = 0x10000, - .dcache_size = 0x8000, - .icache_sets = 0x100, - .dcache_sets = 0x40, - .icache_block_size = 0x80, - .dcache_block_size = 0x80, - .tlb_sets = 0x100, - .tlb_size = 0x1000, - .initfn = cpu_970_init, - }, -}; - -static const struct cpudef * -id_cpu(void) -{ - unsigned int iu_version; - unsigned int i; - - iu_version = mfpvr() & 0xffff0000; - - for (i = 0; i < sizeof(ppc_defs) / sizeof(struct cpudef); i++) { - if (iu_version == ppc_defs[i].iu_version) - return &ppc_defs[i]; - } - printk("Unknown cpu (pvr %x), freezing!\n", iu_version); - for (;;) { - } -} - -static void go(void); - -static void -go(void) -{ - ucell addr; - - /* Insert copyright property for MacOS 9 and below */ - if (find_dev("/rom/macos")) { - fword("insert-copyright-property"); - } - - feval("saved-program-state >sps.entry @"); - addr = POP(); - - call_elf(0, 0, addr); -} - -static void kvm_of_init(void) -{ - char hypercall[4 * 4]; - uint32_t *hc32; - - /* Don't expose /hypervisor when not in KVM */ - if (!fw_cfg_read_i32(FW_CFG_PPC_IS_KVM)) - return; - - push_str("/"); - fword("find-device"); - - fword("new-device"); - - push_str("hypervisor"); - fword("device-name"); - - push_str("hypervisor"); - fword("device-type"); - - /* compatible */ - - push_str("linux,kvm"); - fword("encode-string"); - push_str("epapr,hypervisor-0.2"); - fword("encode-string"); - fword("encode+"); - push_str("compatible"); - fword("property"); - - /* Tell the guest about the hypercall instructions */ - fw_cfg_read(FW_CFG_PPC_KVM_HC, hypercall, 4 * 4); - hc32 = (uint32_t*)hypercall; - PUSH(hc32[0]); - fword("encode-int"); - PUSH(hc32[1]); - fword("encode-int"); - fword("encode+"); - PUSH(hc32[2]); - fword("encode-int"); - fword("encode+"); - PUSH(hc32[3]); - fword("encode-int"); - fword("encode+"); - push_str("hcall-instructions"); - fword("property"); - - /* ePAPR requires us to provide a unique guest id */ - PUSH(fw_cfg_read_i32(FW_CFG_PPC_KVM_PID)); - fword("encode-int"); - push_str("guest-id"); - fword("property"); - - /* ePAPR requires us to provide a guest name */ - push_str("KVM guest"); - fword("encode-string"); - push_str("guest-name"); - fword("property"); - - fword("finish-device"); -} - -/* - * filll ( addr bytes quad -- ) - */ - -static void ffilll(void) -{ - const u32 longval = POP(); - u32 bytes = POP(); - u32 *laddr = (u32 *)cell2pointer(POP()); - u32 len; - - for (len = 0; len < bytes / sizeof(u32); len++) { - *laddr++ = longval; - } -} - -/* - * adler32 ( adler buf len -- checksum ) - * - * Adapted from Mark Adler's original implementation (zlib license) - * - * Both OS 9 and BootX require this word for payload validation. - */ - -#define DO1(buf,i) {s1 += buf[i]; s2 += s1;} -#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); -#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); -#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); -#define DO16(buf) DO8(buf,0); DO8(buf,8); - -static void adler32(void) -{ - uint32_t len = (uint32_t)POP(); - char *buf = (char *)POP(); - uint32_t adler = (uint32_t)POP(); - - if (buf == NULL) { - RET(-1); - } - - uint32_t base = 65521; - uint32_t nmax = 5552; - - uint32_t s1 = adler & 0xffff; - uint32_t s2 = (adler >> 16) & 0xffff; - - uint32_t k; - while (len > 0) { - k = (len < nmax ? len : nmax); - len -= k; - - while (k >= 16) { - DO16(buf); - buf += 16; - k -= 16; - } - if (k != 0) { - do { - s1 += *buf++; - s2 += s1; - } while (--k); - } - - s1 %= base; - s2 %= base; - } - - RET(s2 << 16 | s1); -} - -void -arch_of_init(void) -{ -#ifdef CONFIG_RTAS - phandle_t ph; -#endif - uint64_t ram_size; - const struct cpudef *cpu; - char buf[64], qemu_uuid[16]; - const char *stdin_path, *stdout_path, *boot_path; - uint32_t temp = 0; - char *boot_device; - ofmem_t *ofmem = ofmem_arch_get_private(); - - openbios_init(); - modules_init(); - setup_timers(); -#ifdef CONFIG_DRIVER_PCI - ob_pci_init(); -#endif - - printk("\n"); - printk("=============================================================\n"); - printk(PROGRAM_NAME " " OPENBIOS_VERSION_STR " [%s]\n", - OPENBIOS_BUILD_DATE); - - fw_cfg_read(FW_CFG_SIGNATURE, buf, 4); - buf[4] = '\0'; - printk("Configuration device id %s", buf); - - temp = fw_cfg_read_i32(FW_CFG_ID); - printk(" version %d machine id %d\n", temp, machine_id); - - temp = fw_cfg_read_i32(FW_CFG_NB_CPUS); - - printk("CPUs: %x\n", temp); - - ram_size = ofmem->ramsize; - - printk("Memory: %lldM\n", ram_size / 1024 / 1024); - - fw_cfg_read(FW_CFG_UUID, qemu_uuid, 16); - - printk("UUID: " UUID_FMT "\n", qemu_uuid[0], qemu_uuid[1], qemu_uuid[2], - qemu_uuid[3], qemu_uuid[4], qemu_uuid[5], qemu_uuid[6], - qemu_uuid[7], qemu_uuid[8], qemu_uuid[9], qemu_uuid[10], - qemu_uuid[11], qemu_uuid[12], qemu_uuid[13], qemu_uuid[14], - qemu_uuid[15]); - - /* set device tree root info */ - - push_str("/"); - fword("find-device"); - - switch(machine_id) { - case ARCH_HEATHROW: /* OldWorld */ - - /* model */ - - push_str("Power Macintosh"); - fword("model"); - - /* compatible */ - - push_str("AAPL,PowerMac G3"); - fword("encode-string"); - push_str("MacRISC"); - fword("encode-string"); - fword("encode+"); - push_str("compatible"); - fword("property"); - - /* misc */ - - push_str("device-tree"); - fword("encode-string"); - push_str("AAPL,original-name"); - fword("property"); - - PUSH(0); - fword("encode-int"); - push_str("AAPL,cpu-id"); - fword("property"); - - PUSH(66 * 1000 * 1000); - fword("encode-int"); - push_str("clock-frequency"); - fword("property"); - break; - - case ARCH_MAC99: - case ARCH_MAC99_U3: - case ARCH_PREP: - default: - - /* model */ - - push_str("PowerMac3,1"); - fword("model"); - - /* compatible */ - - push_str("PowerMac3,1"); - fword("encode-string"); - push_str("MacRISC"); - fword("encode-string"); - fword("encode+"); - push_str("MacRISC2"); - fword("encode-string"); - fword("encode+"); - push_str("Power Macintosh"); - fword("encode-string"); - fword("encode+"); - push_str("compatible"); - fword("property"); - - /* misc */ - - push_str("bootrom"); - fword("device-type"); - - PUSH(100 * 1000 * 1000); - fword("encode-int"); - push_str("clock-frequency"); - fword("property"); - break; - } - - /* Perhaps we can store UUID here ? */ - - push_str("0000000000000"); - fword("encode-string"); - push_str("system-id"); - fword("property"); - - /* memory info */ - - push_str("/memory"); - fword("find-device"); - - /* all memory */ - - push_physaddr(0); - fword("encode-phys"); - /* This needs adjusting if #size-cells gets increased. - Alternatively use multiple (address, size) tuples. */ - PUSH(ram_size & 0xffffffff); - fword("encode-int"); - fword("encode+"); - push_str("reg"); - fword("property"); - - cpu = id_cpu(); - cpu->initfn(cpu); - printk("CPU type %s\n", cpu->name); - - snprintf(buf, sizeof(buf), "/cpus/%s", cpu->name); - ofmem_register(find_dev("/memory"), find_dev(buf)); - node_methods_init(buf); - -#ifdef CONFIG_RTAS - /* OldWorld Macs don't have an /rtas node. */ - switch (machine_id) { - case ARCH_MAC99: - case ARCH_MAC99_U3: - if (!(ph = find_dev("/rtas"))) { - printk("Warning: No /rtas node\n"); - } else { - unsigned long size = 0x1000; - while (size < (unsigned long)of_rtas_end - (unsigned long)of_rtas_start) - size *= 2; - set_property(ph, "rtas-size", (char*)&size, sizeof(size)); - set_int_property(ph, "rtas-version", is_apple() ? 0x41 : 1); - } - break; - } -#endif - - if (fw_cfg_read_i16(FW_CFG_NOGRAPHIC)) { - if (is_apple()) { - if (CONFIG_SERIAL_PORT) { - stdin_path = "scca"; - stdout_path = "scca"; - } else { - stdin_path = "sccb"; - stdout_path = "sccb"; - } - } else { - stdin_path = "ttya"; - stdout_path = "ttya"; - } - - /* Some bootloaders force the output to the screen device, so - let's create a screen alias for the serial device too */ - - push_str("/aliases"); - fword("find-device"); - - push_str(stdout_path); - fword("pathres-resolve-aliases"); - fword("encode-string"); - push_str("screen"); - fword("property"); - } else { - if (is_apple()) { - stdin_path = "adb-keyboard"; - stdout_path = "screen"; - } else { - stdin_path = "keyboard"; - stdout_path = "screen"; - } - } - - kvm_of_init(); - - /* Setup nvram variables */ - push_str("/options"); - fword("find-device"); - - /* Setup default boot devices (not overriding user settings) */ - fword("boot-device"); - boot_device = pop_fstr_copy(); - if (boot_device && strcmp(boot_device, "disk") == 0) { - switch (fw_cfg_read_i16(FW_CFG_BOOT_DEVICE)) { - case 'c': - boot_path = "hd"; - break; - default: - case 'd': - boot_path = "cd"; - break; - } - - snprintf(buf, sizeof(buf), "%s:,\\\\:tbxi %s:,\\ppc\\bootinfo.txt %s:,%%BOOT", boot_path, boot_path, boot_path); - push_str(buf); - fword("encode-string"); - push_str("boot-device"); - fword("property"); - } - free(boot_device); - - /* Set up other properties */ - - push_str("/chosen"); - fword("find-device"); - - push_str(stdin_path); - fword("pathres-resolve-aliases"); - push_str("input-device"); - fword("$setenv"); - - push_str(stdout_path); - fword("pathres-resolve-aliases"); - push_str("output-device"); - fword("$setenv"); - -#if 0 - if(getbool("tty-interface?") == 1) -#endif - fword("activate-tty-interface"); - - device_end(); - - /* Implementation of filll word (required by BootX) */ - bind_func("filll", ffilll); - - /* Implementation of adler32 word (required by OS 9, BootX) */ - bind_func("(adler32)", adler32); - - bind_func("platform-boot", boot); - bind_func("(go)", go); -} diff --git a/qemu/roms/openbios/arch/ppc/qemu/kernel.c b/qemu/roms/openbios/arch/ppc/qemu/kernel.c deleted file mode 100644 index b26fba5f7..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/kernel.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Creation Date: <2003/10/25 14:07:17 samuel> - * Time-stamp: <2004/08/28 17:48:19 stepan> - * - * <kernel.c> - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * Copyright (C) 2003, 2004 Stefan Reinauer - * - * Based upon unix.c (from OpenBIOS): - * - * Copyright (C) 2003 Patrick Mauritz, Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "dict.h" -#include "libopenbios/bindings.h" -#include "kernel/stack.h" -#include "kernel/kernel.h" -#include "libc/string.h" -#include "kernel.h" - -#define MEMORY_SIZE (256*1024) /* 256K ram for hosted system */ -/* 512K for the dictionary */ -#define DICTIONARY_SIZE (512 * 1024 / sizeof(ucell)) -#ifdef __powerpc64__ -#define DICTIONARY_BASE 0xfff08000 /* this must match the value in ldscript! */ -#define DICTIONARY_SECTION __attribute__((section(".data.dict"))) -#else -#define DICTIONARY_BASE ((ucell)((char *)&forth_dictionary)) -#define DICTIONARY_SECTION -#endif - -static ucell forth_dictionary[DICTIONARY_SIZE] DICTIONARY_SECTION = { -#include "qemu-dict.h" -}; - -static ucell *memory; - -/************************************************************************/ -/* F U N C T I O N S */ -/************************************************************************/ - -int -forth_segv_handler( char *segv_addr ) -{ - ucell addr = 0xdeadbeef; - - if( PC >= pointer2cell(dict) && PC <= pointer2cell(dict) + dicthead ) - addr = *(ucell *)cell2pointer(PC); - - printk("panic: segmentation violation at 0x%p\n", segv_addr); - printk("dict=0x%p here=0x%p(dict+0x%x) pc=0x%x(dict+0x%x)\n", - dict, (char*)dict + dicthead, dicthead, - PC, PC - pointer2cell(dict)); - printk("dstackcnt=%d rstackcnt=%d instruction=%x\n", - dstackcnt, rstackcnt, addr); - -#ifdef DEBUG_DSTACK - printdstack(); -#endif -#ifdef DEBUG_RSTACK - printrstack(); -#endif - return -1; -} - -/* - * allocate memory and prepare engine for memory management. - */ - -static void -init_memory( void ) -{ - memory = malloc(MEMORY_SIZE); - if( !memory ) - panic("panic: not enough memory on host system.\n"); - - /* we push start and end of memory to the stack - * so that it can be used by the forth word QUIT - * to initialize the memory allocator - */ - - PUSH( pointer2cell(memory) ); - PUSH( pointer2cell(memory) + MEMORY_SIZE ); -} - -int -initialize_forth( void ) -{ - dict = (unsigned char *)forth_dictionary; - dicthead = (ucell)FORTH_DICTIONARY_END; - last = (ucell *)((unsigned char *)forth_dictionary + - FORTH_DICTIONARY_LAST); - dictlimit = sizeof(forth_dictionary); - - forth_init(); - - PUSH_xt( bind_noname_func(arch_of_init) ); - fword("PREPOST-initializer"); - - PC = (ucell)findword("initialize-of"); - if( PC ) { - init_memory(); - enterforth((xt_t)PC); - free( memory ); - } - free( dict ); - return 0; -} diff --git a/qemu/roms/openbios/arch/ppc/qemu/kernel.h b/qemu/roms/openbios/arch/ppc/qemu/kernel.h deleted file mode 100644 index fe9be83d9..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/kernel.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Creation Date: <2004/08/28 17:50:12 stepan> - * Time-stamp: <2004/08/28 17:50:12 stepan> - * - * <kernel.h> - * - * Copyright (C) 2004 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#ifndef __KERNEL_H__ -#define __KERNEL_H__ - -/* misc.c */ -extern void fatal_error( const char *str ); -extern void exit( int status ) __attribute__ ((noreturn)); - -/* start.S */ -extern void flush_icache_range( char *start, char *stop ); -extern char of_rtas_start[], of_rtas_end[]; -extern void call_elf( unsigned long arg1, unsigned long arg2, unsigned long elf_entry ); - -/* methods.c */ -extern void node_methods_init( const char *cpuname ); - -/* main.c */ -extern void boot( void ); - -/* init.c */ -extern void entry( void ); -extern void arch_of_init( void ); -extern int get_bool_res( const char *str ); - -/* tree.c */ -extern void devtree_init( void ); - - -#endif /* __KERNEL_H__ */ diff --git a/qemu/roms/openbios/arch/ppc/qemu/ldscript b/qemu/roms/openbios/arch/ppc/qemu/ldscript deleted file mode 100644 index 8027b39db..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/ldscript +++ /dev/null @@ -1,68 +0,0 @@ -OUTPUT_FORMAT(elf32-powerpc) -OUTPUT_ARCH(powerpc:common) - -/* Initial load address - */ -BASE_ADDR = 0xfff00000; - -/* As NVRAM is at 0xfff04000, the .text needs to be after that - */ -TEXT_ADDR = 0xfff08000; - -/* Hard reset vector address - */ -HRESET_ADDR = 0xfffffffc; - -CSTACK_SIZE = 32768; /* client stack size */ - -SECTIONS -{ - . = BASE_ADDR; - - _start = BASE_ADDR + 0x0100; - .text.vectors ALIGN(4096): { - *(.text.vectors) - } - - . = TEXT_ADDR; - /* Normal sections */ - .text ALIGN(4096): { - *(.text) - *(.text.*) - } - - .rodata ALIGN(4096): { - _rodata = .; - *(.rodata) - *(.rodata.*) - *(.note.ELFBoot) - } - .data ALIGN(4096): { - _data = .; - *(.data) - *(.data.*) - _edata = .; - } - - .bss ALIGN(4096): { - _bss = .; - *(.sbss) - *(.sbss.*) - *(.bss) - *(.bss.*) - *(COMMON) - _ebss = .; - } - - . = HRESET_ADDR; - - .romentry : { *(.romentry) } - - . = ALIGN(4096); - _end = .; - - /* We discard .note sections other than .note.ELFBoot, - * because some versions of GCC generates useless ones. */ - - /DISCARD/ : { *(.comment*) *(.note.*) } -} diff --git a/qemu/roms/openbios/arch/ppc/qemu/main.c b/qemu/roms/openbios/arch/ppc/qemu/main.c deleted file mode 100644 index 44b16666b..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/main.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Creation Date: <2002/10/02 22:24:24 samuel> - * Time-stamp: <2004/03/27 01:57:55 samuel> - * - * <main.c> - * - * - * - * Copyright (C) 2002, 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libopenbios/elf_load.h" -#include "arch/common/nvram.h" -#include "packages/nvram.h" -#include "libc/diskio.h" -#include "libc/vsprintf.h" -#include "kernel.h" -#include "drivers/drivers.h" -#include "libopenbios/ofmem.h" -#define NO_QEMU_PROTOS -#include "arch/common/fw_cfg.h" - -//#define DEBUG_QEMU - -#ifdef DEBUG_QEMU -#define SUBSYS_DPRINTF(subsys, fmt, args...) \ - do { printk("%s - %s: " fmt, subsys, __func__ , ##args); } while (0) -#else -#define SUBSYS_DPRINTF(subsys, fmt, args...) \ - do { } while (0) -#endif -#define CHRP_DPRINTF(fmt, args...) SUBSYS_DPRINTF("CHRP", fmt, ##args) -#define ELF_DPRINTF(fmt, args...) SUBSYS_DPRINTF("ELF", fmt, ##args) -#define NEWWORLD_DPRINTF(fmt, args...) SUBSYS_DPRINTF("NEWWORLD", fmt, ##args) - -static void check_preloaded_kernel(void) -{ - unsigned long kernel_image, kernel_size; - unsigned long initrd_image, initrd_size; - const char * kernel_cmdline; - - kernel_size = fw_cfg_read_i32(FW_CFG_KERNEL_SIZE); - if (kernel_size) { - kernel_image = fw_cfg_read_i32(FW_CFG_KERNEL_ADDR); - kernel_cmdline = (const char *)(uintptr_t) fw_cfg_read_i32(FW_CFG_KERNEL_CMDLINE); - initrd_image = fw_cfg_read_i32(FW_CFG_INITRD_ADDR); - initrd_size = fw_cfg_read_i32(FW_CFG_INITRD_SIZE); - printk("[ppc] Kernel already loaded (0x%8.8lx + 0x%8.8lx) " - "(initrd 0x%8.8lx + 0x%8.8lx)\n", - kernel_image, kernel_size, initrd_image, initrd_size); - if (kernel_cmdline) { - phandle_t ph; - printk("[ppc] Kernel command line: %s\n", kernel_cmdline); - ph = find_dev("/chosen"); - set_property(ph, "bootargs", strdup(kernel_cmdline), strlen(kernel_cmdline) + 1); - } - call_elf(initrd_image, initrd_size, kernel_image); - } -} - -/************************************************************************/ -/* entry */ -/************************************************************************/ - -void -boot( void ) -{ - uint16_t boot_device = fw_cfg_read_i16(FW_CFG_BOOT_DEVICE); - - fword("update-chosen"); - if (boot_device == 'm') { - check_preloaded_kernel(); - } - - if (is_apple()) { - update_nvram(); - } -} diff --git a/qemu/roms/openbios/arch/ppc/qemu/methods.c b/qemu/roms/openbios/arch/ppc/qemu/methods.c deleted file mode 100644 index 930b47c4e..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/methods.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <methods.c> - * - * Misc device node methods - * - * Copyright (C) 2004 Greg Watson - * - * Based on MOL specific code which is - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "drivers/drivers.h" -#include "libc/string.h" -#include "qemu/qemu.h" -#include "libopenbios/ofmem.h" -#include "arch/ppc/processor.h" -#include "drivers/usb.h" - -/************************************************************************/ -/* RTAS (run-time abstraction services) */ -/************************************************************************/ - -#ifdef CONFIG_RTAS -DECLARE_NODE( rtas, INSTALL_OPEN, 0, "+/rtas" ); - -/* ( physbase -- rtas_callback ) */ -static void -rtas_instantiate( void ) -{ - ucell physbase = POP(); - ucell s=0x1000, size = (ucell)of_rtas_end - (ucell)of_rtas_start; - unsigned long virt; - - while( s < size ) - s += 0x1000; - virt = ofmem_claim_virt( 0, s, 0x1000 ); - ofmem_map( physbase, virt, s, -1 ); - memcpy( (char*)virt, of_rtas_start, size ); - - printk("RTAS instantiated at %08x\n", physbase ); - flush_icache_range( (char*)virt, (char*)virt + size ); - - PUSH( physbase ); -} - -NODE_METHODS( rtas ) = { - { "instantiate", rtas_instantiate }, - { "instantiate-rtas", rtas_instantiate }, -}; -#endif - - -/************************************************************************/ -/* tty */ -/************************************************************************/ - -DECLARE_NODE( tty, INSTALL_OPEN, 0, "/packages/terminal-emulator" ); - -/* ( addr len -- actual ) */ -static void -tty_read( void ) -{ - int ch, len = POP(); - char *p = (char*)cell2pointer(POP()); - int ret=0; - - if( len > 0 ) { - ret = 1; - ch = getchar(); - if( ch >= 0 ) { - *p = ch; - } else { - ret = 0; - } - } - PUSH( ret ); -} - -/* ( addr len -- actual ) */ -static void -tty_write( void ) -{ - int i, len = POP(); - char *p = (char*)cell2pointer(POP()); - for( i=0; i<len; i++ ) - putchar( *p++ ); - RET( len ); -} - -NODE_METHODS( tty ) = { - { "read", tty_read }, - { "write", tty_write }, -}; - -/************************************************************************/ -/* client interface 'quiesce' */ -/************************************************************************/ - -DECLARE_NODE( ciface, 0, 0, "+/openprom/client-services" ); - -/* ( -- ) */ -static void -ciface_quiesce( unsigned long args[], unsigned long ret[] ) -{ - usb_exit(); - - ob_ide_quiesce(); -#if 0 - unsigned long msr; - /* This seems to be the correct thing to do - but I'm not sure */ - asm volatile("mfmsr %0" : "=r" (msr) : ); - msr &= ~(MSR_IR | MSR_DR); - asm volatile("mtmsr %0" :: "r" (msr) ); -#endif -} - -/* ( -- ms ) */ -#define TIMER_FREQUENCY 16600000ULL - -static void -ciface_milliseconds( unsigned long args[], unsigned long ret[] ) -{ - unsigned long tbu, tbl, temp; - unsigned long long ticks, msecs; - - asm volatile( - "1:\n" - "mftbu %2\n" - "mftb %0\n" - "mftbu %1\n" - "cmpw %2,%1\n" - "bne 1b\n" - : "=r"(tbl), "=r"(tbu), "=r"(temp) - : - : "cc"); - - ticks = (((unsigned long long)tbu) << 32) | (unsigned long long)tbl; - msecs = (1000 * ticks) / TIMER_FREQUENCY; - PUSH( msecs ); -} - - -NODE_METHODS( ciface ) = { - { "quiesce", ciface_quiesce }, - { "milliseconds", ciface_milliseconds }, -}; - - -/************************************************************************/ -/* MMU/memory methods */ -/************************************************************************/ - -DECLARE_NODE( memory, INSTALL_OPEN, 0, "/memory" ); -DECLARE_UNNAMED_NODE( mmu, INSTALL_OPEN, 0 ); -DECLARE_NODE( mmu_ciface, 0, 0, "+/openprom/client-services" ); - - -/* ( [phys] size align --- base ) */ -static void -mem_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - phys_addr_t phys = -1; - - if (!align) { - phys = POP(); - } - - phys = ofmem_claim_phys(phys, size, align); - - PUSH(phys); -} - -/* ( phys size --- ) */ -static void -mem_release( void ) -{ - POP(); POP(); -} - -/* ( [virt] size align --- base ) */ -static void -mmu_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - ucell virt = -1; - - if (!align) { - virt = POP(); - } - - virt = ofmem_claim_virt(virt, size, align); - - PUSH(virt); -} - -/* ( virt size --- ) */ -static void -mmu_release( void ) -{ - POP(); POP(); -} - -/* ( phys virt size mode -- [ret???] ) */ -static void -mmu_map( void ) -{ - ucell mode = POP(); - ucell size = POP(); - ucell virt = POP(); - ucell phys = POP(); - ucell ret; - - /* printk("mmu_map: %x %x %x %x\n", phys, virt, size, mode ); */ - ret = ofmem_map( phys, virt, size, mode ); - - if( ret ) { - printk("MMU: map failure\n"); - throw( -13 ); - return; - } -} - -/* ( virt size -- ) */ -static void -mmu_unmap( void ) -{ - POP(); POP(); -} - -/* ( virt -- false | phys mode true ) */ -static void -mmu_translate( void ) -{ - ucell mode; - ucell virt = POP(); - ucell phys = ofmem_translate( virt, &mode ); - - if( phys == -1 ) { - PUSH( 0 ); - } else { - PUSH( phys ); - PUSH( mode ); - PUSH( -1 ); - } -} - -/* ( virt size align -- baseaddr|-1 ) */ -static void -ciface_claim( void ) -{ - ucell align = POP(); - ucell size = POP(); - ucell virt = POP(); - ucell ret = ofmem_claim( virt, size, align ); - - /* printk("ciface_claim: %08x %08x %x\n", virt, size, align ); */ - PUSH( ret ); -} - -/* ( virt size -- ) */ -static void -ciface_release( void ) -{ - ucell size = POP(); - ucell virt = POP(); - ofmem_release(virt, size); -} - - -NODE_METHODS( memory ) = { - { "claim", mem_claim }, - { "release", mem_release }, -}; - -NODE_METHODS( mmu ) = { - { "claim", mmu_claim }, - { "release", mmu_release }, - { "map", mmu_map }, - { "unmap", mmu_unmap }, - { "translate", mmu_translate }, -}; - -NODE_METHODS( mmu_ciface ) = { - { "cif-claim", ciface_claim }, - { "cif-release", ciface_release }, -}; - - -/************************************************************************/ -/* init */ -/************************************************************************/ - -void -node_methods_init( const char *cpuname ) -{ - phandle_t chosen, ph; -#ifdef CONFIG_RTAS - if (is_newworld()) { - REGISTER_NODE( rtas ); - } -#endif - REGISTER_NODE( ciface ); - REGISTER_NODE( memory ); - REGISTER_NODE_METHODS( mmu, cpuname ); - REGISTER_NODE( mmu_ciface ); - REGISTER_NODE( tty ); - - chosen = find_dev("/chosen"); - if (chosen) { - push_str(cpuname); - fword("open-dev"); - ph = POP(); - set_int_property(chosen, "mmu", ph); - } -} diff --git a/qemu/roms/openbios/arch/ppc/qemu/mmutypes.h b/qemu/roms/openbios/arch/ppc/qemu/mmutypes.h deleted file mode 100644 index 512c23d0e..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/mmutypes.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Creation Date: <2002/01/13 13:53:14 samuel> - * Time-stamp: <2002/01/27 19:56:11 samuel> - * - * <mmutypes.h> - * - * MMU definitions - * - * Most of these declarations originate from the Linux Kernel - * - * Copyright (C) 2002 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#ifndef _H_MMUTYPES -#define _H_MMUTYPES - -/* Hardware Page Table Entry */ -typedef struct mPTE { - unsigned long v:1; /* Entry is valid */ - unsigned long vsid:24; /* Virtual segment identifier */ - unsigned long h:1; /* Hash algorithm indicator */ - unsigned long api:6; /* Abbreviated page index */ - - unsigned long rpn:20; /* Real (physical) page number */ - unsigned long :3; /* Unused */ - unsigned long r:1; /* Referenced */ - unsigned long c:1; /* Changed */ - unsigned long w:1; /* Write-thru cache mode */ - unsigned long i:1; /* Cache inhibited */ - unsigned long m:1; /* Memory coherence */ - unsigned long g:1; /* Guarded */ - unsigned long :1; /* Unused */ - unsigned long pp:2; /* Page protection */ -} mPTE_t; - -typedef struct mPTE_64 { - uint32_t avpn_low; /* Abbreviated Virtual Page Number (unused) */ - uint32_t avpn:25; /* Abbreviated Virtual Page Number */ - uint32_t sw:4; /* Software Use */ - uint32_t :1; /* Reserved */ - uint32_t h:1; /* Hash algorithm indicator */ - uint32_t v:1; /* Entry is valid */ - - uint32_t rpn_low; /* Real (physical) page number (unused) */ - uint32_t rpn:20; /* Real (physical) page number */ - uint32_t :2; /* Reserved */ - uint32_t ac:1; /* Address Compare*/ - uint32_t r:1; /* Referenced */ - uint32_t c:1; /* Changed */ - uint32_t w:1; /* Write-thru cache mode */ - uint32_t i:1; /* Cache inhibited */ - uint32_t m:1; /* Memory coherence */ - uint32_t g:1; /* Guarded */ - uint32_t n:1; /* No-Execute */ - uint32_t pp:2; /* Page protection */ -} mPTE_64_t; - -typedef struct _mBATU { /* Upper part of BAT (all except 601) */ - unsigned long bepi:15; /* Effective page index (virtual address) */ - unsigned long :4; /* Unused */ - unsigned long bl:11; /* Block size mask */ - unsigned long vs:1; /* Supervisor valid */ - unsigned long vp:1; /* User valid */ -} mBATU; - -typedef struct _mBATL { /* Lower part of BAT (all except 601) */ - unsigned long brpn:15; /* Real page index (physical address) */ - unsigned long :10; /* Unused */ - unsigned long w:1; /* Write-thru cache */ - unsigned long i:1; /* Cache inhibit */ - unsigned long m:1; /* Memory coherence */ - unsigned long g:1; /* Guarded (MBZ in IBAT) */ - unsigned long :1; /* Unused */ - unsigned long pp:2; /* Page access protections */ -} mBATL; - -typedef struct _mBAT { - mBATU batu; /* Upper register */ - mBATL batl; /* Lower register */ -} mBAT; - -typedef struct _mSEGREG { - unsigned long t:1; /* Normal or I/O type */ - unsigned long ks:1; /* Supervisor 'key' (normally 0) */ - unsigned long kp:1; /* User 'key' (normally 1) */ - unsigned long n:1; /* No-execute */ - unsigned long :4; /* Unused */ - unsigned long vsid:24; /* Virtual Segment Identifier */ -} mSEGREG; - - -#endif /* _H_MMUTYPES */ diff --git a/qemu/roms/openbios/arch/ppc/qemu/ofmem.c b/qemu/roms/openbios/arch/ppc/qemu/ofmem.c deleted file mode 100644 index 6f346a3d4..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/ofmem.c +++ /dev/null @@ -1,563 +0,0 @@ -/* - * Creation Date: <1999/11/07 19:02:11 samuel> - * Time-stamp: <2004/01/07 19:42:36 samuel> - * - * <ofmem.c> - * - * OF Memory manager - * - * Copyright (C) 1999-2004 Samuel Rydh (samuel@ibrium.se) - * Copyright (C) 2004 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "libc/string.h" -#include "libopenbios/ofmem.h" -#include "kernel.h" -#include "mmutypes.h" -#include "asm/processor.h" - -#define BIT(n) (1U << (31 - (n))) - -#define SLB_VSID_SHIFT 12 - -/* called from assembly */ -extern void dsi_exception(void); -extern void isi_exception(void); -extern void setup_mmu(unsigned long code_base); - -/* - * From Apple's BootX source comments: - * - * 96 MB map (currently unused - 4363357 tracks re-adoption) - * 00000000 - 00003FFF : Exception Vectors - * 00004000 - 03FFFFFF : Kernel Image, Boot Struct and Drivers (~64 MB) - * 04000000 - 04FFFFFF : File Load Area (16 MB) [80 MB] - * 05000000 - 053FFFFF : FS Cache (4 MB) [84 MB] - * 05400000 - 055FFFFF : Malloc Zone (2 MB) [86 MB] - * 05600000 - 057FFFFF : BootX Image (2 MB) [88 MB] - * 05800000 - 05FFFFFF : Unused/OF (8 MB) [96 MB] - * - */ - -#define FREE_BASE 0x00004000UL -#define OF_CODE_START 0xfff00000UL -#define OF_CODE_SIZE 0x00100000 -#define IO_BASE 0x80000000UL - -#ifdef __powerpc64__ -#define HASH_BITS 18 -#else -#define HASH_BITS 15 -#endif -#define HASH_SIZE (2 << HASH_BITS) -#define OFMEM_SIZE (1 * 1024 * 1024 + 512 * 1024) - -#define SEGR_USER BIT(2) -#define SEGR_BASE 0x0400 - -static inline unsigned long -get_hash_base(void) -{ - return (mfsdr1() & SDR1_HTABORG_MASK); -} - -static inline unsigned long -get_rom_base(void) -{ - ofmem_t *ofmem = ofmem_arch_get_private(); - return ofmem->ramsize - OF_CODE_SIZE; -} - -static unsigned long -get_ram_top(void) -{ - return get_hash_base() - (32 + 64 + 64) * 1024 - OFMEM_SIZE; -} - -static unsigned long -get_ram_bottom(void) -{ - return FREE_BASE; -} - -static unsigned long get_heap_top(void) -{ - return get_hash_base() - (32 + 64 + 64) * 1024; -} - -static inline size_t ALIGN_SIZE(size_t x, size_t a) -{ - return (x + a - 1) & ~(a - 1); -} - -ofmem_t* ofmem_arch_get_private(void) -{ - return (ofmem_t*)cell2pointer(get_heap_top() - OFMEM_SIZE); -} - -void* ofmem_arch_get_malloc_base(void) -{ - return (char*)ofmem_arch_get_private() + ALIGN_SIZE(sizeof(ofmem_t), 4); -} - -ucell ofmem_arch_get_heap_top(void) -{ - return get_heap_top(); -} - -ucell ofmem_arch_get_virt_top(void) -{ - return IO_BASE; -} - -void ofmem_arch_unmap_pages(ucell virt, ucell size) -{ - /* kill page mappings in provided range */ -} - -void ofmem_arch_map_pages(phys_addr_t phys, ucell virt, ucell size, ucell mode) -{ - /* none yet */ -} - -ucell ofmem_arch_get_iomem_base(void) -{ - /* Currently unused */ - return 0; -} - -ucell ofmem_arch_get_iomem_top(void) -{ - /* Currently unused */ - return 0; -} - -retain_t *ofmem_arch_get_retained(void) -{ - /* not implemented */ - return NULL; -} - -int ofmem_arch_get_physaddr_cellsize(void) -{ -#ifdef CONFIG_PPC64 - return 2; -#else - return 1; -#endif -} - -int ofmem_arch_encode_physaddr(ucell *p, phys_addr_t value) -{ - int n = 0; -#ifdef CONFIG_PPC64 - p[n++] = value >> 32; -#endif - p[n++] = value; - return n; -} - -/* Return size of a single MMU package translation property entry in cells */ -int ofmem_arch_get_translation_entry_size(void) -{ - return 3 + ofmem_arch_get_physaddr_cellsize(); -} - -/* Generate translation property entry for PPC. - * According to the platform bindings for PPC - * (http://www.openfirmware.org/1275/bindings/ppc/release/ppc-2_1.html#REF34579) - * a translation property entry has the following layout: - * - * virtual address - * length - * physical address - * mode - */ -void ofmem_arch_create_translation_entry(ucell *transentry, translation_t *t) -{ - int i = 0; - - transentry[i++] = t->virt; - transentry[i++] = t->size; - i += ofmem_arch_encode_physaddr(&transentry[i], t->phys); - transentry[i++] = t->mode; -} - -/* Return the size of a memory available entry given the phandle in cells */ -int ofmem_arch_get_available_entry_size(phandle_t ph) -{ - if (ph == s_phandle_memory) { - return 1 + ofmem_arch_get_physaddr_cellsize(); - } else { - return 1 + 1; - } -} - -/* Generate memory available property entry for PPC */ -void ofmem_arch_create_available_entry(phandle_t ph, ucell *availentry, phys_addr_t start, ucell size) -{ - int i = 0; - - if (ph == s_phandle_memory) { - i += ofmem_arch_encode_physaddr(availentry, start); - } else { - availentry[i++] = start; - } - - availentry[i] = size; -} - -/************************************************************************/ -/* OF private allocations */ -/************************************************************************/ - -/* Private functions for mapping between physical/virtual addresses */ -phys_addr_t -va2pa(unsigned long va) -{ - if (va >= OF_CODE_START && va < OF_CODE_START + OF_CODE_SIZE) { - return (phys_addr_t)get_rom_base() - OF_CODE_START + va; - } else { - return (phys_addr_t)va; - } -} - -unsigned long -pa2va(phys_addr_t pa) -{ - if ((pa - get_rom_base() + OF_CODE_START >= OF_CODE_START) && - (pa - get_rom_base() + OF_CODE_START < OF_CODE_START + OF_CODE_SIZE)) - return (unsigned long)pa - get_rom_base() + OF_CODE_START; - else - return (unsigned long)pa; -} - -void * -malloc(int size) -{ - return ofmem_malloc(size); -} - -void -free(void *ptr) -{ - ofmem_free(ptr); -} - -void * -realloc(void *ptr, size_t size) -{ - return ofmem_realloc(ptr, size); -} - - -/************************************************************************/ -/* misc */ -/************************************************************************/ - -ucell ofmem_arch_default_translation_mode(phys_addr_t phys) -{ - /* XXX: Guard bit not set as it should! */ - if (phys < IO_BASE) - return 0x02; /*0xa*/ /* wim GxPp */ - return 0x6a; /* WIm GxPp, I/O */ -} - -ucell ofmem_arch_io_translation_mode(phys_addr_t phys) -{ - return 0x6a; /* WIm GxPp, I/O */ -} - -/************************************************************************/ -/* page fault handler */ -/************************************************************************/ - -static phys_addr_t -ea_to_phys(unsigned long ea, ucell *mode) -{ - phys_addr_t phys; - - if (ea >= OF_CODE_START && ea <= 0xffffffffUL) { - /* ROM into RAM */ - ea -= OF_CODE_START; - phys = get_rom_base() + ea; - *mode = 0x02; - return phys; - } - - phys = ofmem_translate(ea, mode); - if (phys == -1) { - phys = ea; - *mode = ofmem_arch_default_translation_mode(phys); - - /* print_virt_range(); */ - /* print_phys_range(); */ - /* print_trans(); */ - } - return phys; -} - -/* Converts a global variable (from .data or .bss) into a pointer that - can be accessed from real mode */ -static void * -global_ptr_real(void *p) -{ - return (void*)((uintptr_t)p - OF_CODE_START + get_rom_base()); -} - -/* Return the next slot to evict, in the range of [0..7] */ -static int -next_evicted_slot(void) -{ - static int next_grab_slot; - int *next_grab_slot_va; - int r; - - next_grab_slot_va = global_ptr_real(&next_grab_slot); - r = *next_grab_slot_va; - *next_grab_slot_va = (r + 1) % 8; - - return r; -} - -static void -hash_page_64(unsigned long ea, phys_addr_t phys, ucell mode) -{ - uint64_t vsid_mask, page_mask, pgidx, hash; - uint64_t htab_mask, mask, avpn; - unsigned long pgaddr; - int i, found; - unsigned int vsid, vsid_sh, sdr, sdr_sh, sdr_mask; - mPTE_64_t *pp; - - vsid = (ea >> 28) + SEGR_BASE; - vsid_sh = 7; - vsid_mask = 0x00003FFFFFFFFF80ULL; - sdr = mfsdr1(); - sdr_sh = 18; - sdr_mask = 0x3FF80; - page_mask = 0x0FFFFFFF; // XXX correct? - pgidx = (ea & page_mask) >> PAGE_SHIFT; - avpn = (vsid << 12) | ((pgidx >> 4) & 0x0F80);; - - hash = ((vsid ^ pgidx) << vsid_sh) & vsid_mask; - htab_mask = 0x0FFFFFFF >> (28 - (sdr & 0x1F)); - mask = (htab_mask << sdr_sh) | sdr_mask; - pgaddr = sdr | (hash & mask); - pp = (mPTE_64_t *)pgaddr; - - /* replace old translation */ - for (found = 0, i = 0; !found && i < 8; i++) - if (pp[i].avpn == avpn) - found = 1; - - /* otherwise use a free slot */ - for (i = 0; !found && i < 8; i++) - if (!pp[i].v) - found = 1; - - /* out of slots, just evict one */ - if (!found) - i = next_evicted_slot() + 1; - i--; - { - mPTE_64_t p = { - // .avpn_low = avpn, - .avpn = avpn >> 7, - .h = 0, - .v = 1, - - .rpn = (phys & ~0xfffUL) >> 12, - .r = mode & (1 << 8) ? 1 : 0, - .c = mode & (1 << 7) ? 1 : 0, - .w = mode & (1 << 6) ? 1 : 0, - .i = mode & (1 << 5) ? 1 : 0, - .m = mode & (1 << 4) ? 1 : 0, - .g = mode & (1 << 3) ? 1 : 0, - .n = mode & (1 << 2) ? 1 : 0, - .pp = mode & 3, - }; - pp[i] = p; - } - - asm volatile("tlbie %0" :: "r"(ea)); -} - -static void -hash_page_32(unsigned long ea, phys_addr_t phys, ucell mode) -{ -#ifndef __powerpc64__ - unsigned long *upte, cmp, hash1; - int i, vsid, found; - mPTE_t *pp; - - vsid = (ea >> 28) + SEGR_BASE; - cmp = BIT(0) | (vsid << 7) | ((ea & 0x0fffffff) >> 22); - - hash1 = vsid; - hash1 ^= (ea >> 12) & 0xffff; - hash1 &= (((mfsdr1() & 0x1ff) << 16) | 0xffff) >> 6; - - pp = (mPTE_t*)(get_hash_base() + (hash1 << 6)); - upte = (unsigned long*)pp; - - /* replace old translation */ - for (found = 0, i = 0; !found && i < 8; i++) - if (cmp == upte[i*2]) - found = 1; - - /* otherwise use a free slot */ - for (i = 0; !found && i < 8; i++) - if (!pp[i].v) - found = 1; - - /* out of slots, just evict one */ - if (!found) - i = next_evicted_slot() + 1; - i--; - upte[i * 2] = cmp; - upte[i * 2 + 1] = (phys & ~0xfff) | mode; - - asm volatile("tlbie %0" :: "r"(ea)); -#endif -} - -static int is_ppc64(void) -{ -#ifdef __powerpc64__ - return 1; -#elif defined(CONFIG_PPC_64BITSUPPORT) - unsigned int pvr = mfpvr(); - return ((pvr >= 0x330000) && (pvr < 0x70330000)); -#else - return 0; -#endif -} - -/* XXX Remove these ugly constructs when legacy 64-bit support is dropped. */ -static void hash_page(unsigned long ea, phys_addr_t phys, ucell mode) -{ - if (is_ppc64()) - hash_page_64(ea, phys, mode); - else - hash_page_32(ea, phys, mode); -} - -void -dsi_exception(void) -{ - unsigned long dar, dsisr; - ucell mode; - phys_addr_t phys; - - asm volatile("mfdar %0" : "=r" (dar) : ); - asm volatile("mfdsisr %0" : "=r" (dsisr) : ); - - phys = ea_to_phys(dar, &mode); - hash_page(dar, phys, mode); -} - -void -isi_exception(void) -{ - unsigned long nip, srr1; - ucell mode; - phys_addr_t phys; - - asm volatile("mfsrr0 %0" : "=r" (nip) : ); - asm volatile("mfsrr1 %0" : "=r" (srr1) : ); - - phys = ea_to_phys(nip, &mode); - hash_page(nip, phys, mode); -} - - -/************************************************************************/ -/* init / cleanup */ -/************************************************************************/ - -void -setup_mmu(unsigned long ramsize) -{ - ofmem_t *ofmem; -#ifndef __powerpc64__ - unsigned long sr_base; -#endif - unsigned long hash_base; - unsigned long hash_mask = ~0x000fffffUL; /* alignment for ppc64 */ - int i; - - /* SDR1: Storage Description Register 1 */ - - hash_base = (ramsize - OF_CODE_SIZE - HASH_SIZE) & hash_mask; - memset((void *)hash_base, 0, HASH_SIZE); - if (is_ppc64()) - mtsdr1(hash_base | MAX(HASH_BITS - 18, 0)); - else - mtsdr1(hash_base | ((HASH_SIZE - 1) >> 16)); - -#ifdef __powerpc64__ - - /* Segment Lookaside Buffer */ - - slbia(); /* Invalidate all SLBs except SLB 0 */ - for (i = 0; i < 16; i++) { - unsigned long rs = (0x400 + i) << SLB_VSID_SHIFT; - unsigned long rb = ((unsigned long)i << 28) | (1 << 27) | i; - slbmte(rs, rb); - } - -#else - - /* Segment Register */ - - sr_base = SEGR_USER | SEGR_BASE ; - for (i = 0; i < 16; i++) { - int j = i << 28; - asm volatile("mtsrin %0,%1" :: "r" (sr_base + i), "r" (j)); - } - -#endif - - ofmem = ofmem_arch_get_private(); - memset(ofmem, 0, sizeof(ofmem_t)); - ofmem->ramsize = ramsize; - - memcpy((void *)get_rom_base(), (void *)OF_CODE_START, OF_CODE_SIZE); - - /* Enable MMU */ - - mtmsr(mfmsr() | MSR_IR | MSR_DR); -} - -void -ofmem_init(void) -{ - ofmem_t *ofmem = ofmem_arch_get_private(); - - /* Map the memory (don't map page 0 to allow catching of NULL dereferences) */ - ofmem_claim_phys(PAGE_SIZE, get_ram_bottom() - PAGE_SIZE, 0); - ofmem_claim_virt(PAGE_SIZE, get_ram_bottom() - PAGE_SIZE, 0); - ofmem_map(PAGE_SIZE, PAGE_SIZE, get_ram_bottom() - PAGE_SIZE, 0); - - /* Mark the first page as non-free */ - ofmem_claim_phys(0, PAGE_SIZE, 0); - ofmem_claim_virt(0, PAGE_SIZE, 0); - - /* Map everything at the top of physical RAM 1:1, minus the OpenBIOS ROM in RAM copy */ - ofmem_claim_phys(get_ram_top(), get_hash_base() + HASH_SIZE - get_ram_top(), 0); - ofmem_claim_virt(get_ram_top(), get_hash_base() + HASH_SIZE - get_ram_top(), 0); - ofmem_map(get_ram_top(), get_ram_top(), get_hash_base() + HASH_SIZE - get_ram_top(), 0); - - /* Map the OpenBIOS ROM in RAM copy */ - ofmem_claim_phys(ofmem->ramsize - OF_CODE_SIZE, OF_CODE_SIZE, 0); - ofmem_claim_virt(OF_CODE_START, OF_CODE_SIZE, 0); - ofmem_map(ofmem->ramsize - OF_CODE_SIZE, OF_CODE_START, OF_CODE_SIZE, 0); -} diff --git a/qemu/roms/openbios/arch/ppc/qemu/qemu.c b/qemu/roms/openbios/arch/ppc/qemu/qemu.c deleted file mode 100644 index 381affb77..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/qemu.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Creation Date: <2004/08/28 18:38:22 greg> - * Time-stamp: <2004/08/28 18:38:22 greg> - * - * <qemu.c> - * - * Copyright (C) 2004, Greg Watson - * - * derived from mol.c - * - * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#include "config.h" -#include "kernel/kernel.h" -#include "arch/common/nvram.h" -#include "libopenbios/bindings.h" -#include "drivers/drivers.h" -#include "libc/vsprintf.h" -#include "libc/string.h" -#include "libc/byteorder.h" -#include "qemu/qemu.h" -#include <stdarg.h> - -//#define DUMP_NVRAM - -unsigned long virt_offset = 0; - -void -exit( int status __attribute__ ((unused))) -{ - for (;;); -} - -void -fatal_error( const char *err ) -{ - printk("Fatal error: %s\n", err ); - exit(0); -} - -void -panic( const char *err ) -{ - printk("Panic: %s\n", err ); - exit(0); -} - -static int do_indent; - -int -printk( const char *fmt, ... ) -{ - char *p, buf[1024]; - va_list args; - int i; - - va_start(args, fmt); - i = vsnprintf(buf, sizeof(buf), fmt, args); - va_end(args); - - for( p=buf; *p; p++ ) { - if( *p == '\n' ) - do_indent = 0; - if( do_indent++ == 1 ) { - putchar( '>' ); - putchar( '>' ); - putchar( ' ' ); - } - putchar( *p ); - } - return i; -} - -int arch_nvram_size(void) -{ - if (is_apple()) { - return macio_get_nvram_size(); - } else { - // not implemented - } - return 0; -} - -void arch_nvram_put(char *buf) -{ - if (is_apple()) { - macio_nvram_put(buf); - } else { - // not implemented - } -} - -void arch_nvram_get(char *buf) -{ - if (is_apple()) { - macio_nvram_get(buf); - } else { - // not implemented - } -} diff --git a/qemu/roms/openbios/arch/ppc/qemu/qemu.fs b/qemu/roms/openbios/arch/ppc/qemu/qemu.fs deleted file mode 100644 index 3d99a34a1..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/qemu.fs +++ /dev/null @@ -1,140 +0,0 @@ -\ qemu specific initialization code -\ -\ Copyright (C) 2005 Stefan Reinauer -\ -\ This program is free software; you can redistribute it and/or -\ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation -\ - - -\ ------------------------------------------------------------------------- -\ initialization -\ ------------------------------------------------------------------------- - -: make-openable ( path ) - find-dev if - begin ?dup while - \ install trivial open and close methods - dup active-package! is-open - parent - repeat - then -; - -: preopen ( chosen-str node-path ) - 2dup make-openable - - " /chosen" find-device - open-dev ?dup if - encode-int 2swap property - else - 2drop - then -; - -\ preopen device nodes (and store the ihandles under /chosen) -:noname - " rtc" " rtc" preopen - " memory" " /memory" preopen -; SYSTEM-initializer - - -\ use the tty interface if available -: activate-tty-interface - " /packages/terminal-emulator" find-dev if drop - then -; - -variable keyboard-phandle 0 keyboard-phandle ! - -: (find-keyboard-device) ( phandle -- ) - recursive - keyboard-phandle @ 0= if \ Return first match - >dn.child @ - begin ?dup while - dup dup " device_type" rot get-package-property 0= if - drop dup cstrlen - " keyboard" strcmp 0= if - dup to keyboard-phandle - then - then - (find-keyboard-device) - >dn.peer @ - repeat - else - drop - then -; - -\ create the keyboard devalias -:noname - device-tree @ (find-keyboard-device) - keyboard-phandle @ if - active-package - " /aliases" find-device - keyboard-phandle @ get-package-path - encode-string " keyboard" property - active-package! - then -; SYSTEM-initializer - -\ ------------------------------------------------------------------------- -\ pre-booting -\ ------------------------------------------------------------------------- - -: update-chosen - " /chosen" find-device - stdin @ encode-int " stdin" property - stdout @ encode-int " stdout" property - device-end -; - -:noname - set-defaults -; PREPOST-initializer - -\ ------------------------------------------------------------------------- -\ copyright property handling -\ ------------------------------------------------------------------------- - -: insert-copyright-property - \ As required for MacOS 9 and below - " Pbclevtug 1983-2001 Nccyr Pbzchgre, Vap. GUVF ZRFFNTR SBE PBZCNGVOVYVGL BAYL" - rot13-str encode-string " copyright" - " /" find-package if - " set-property" $find if - execute - else - 3drop drop - then - then -; - -: delete-copyright-property - \ Remove copyright property created above - active-package - " /" find-package if - active-package! - " copyright" delete-property - then - active-package! -; - -: (exit) - \ Clean up before returning to the interpreter - delete-copyright-property -; - -\ ------------------------------------------------------------------------- -\ Adler-32 wrapper -\ ------------------------------------------------------------------------- - -: adler32 ( adler buf len -- checksum ) - " (adler32)" $find if - execute - else - ." Can't find " ( adler32-name ) type cr - 3drop 0 - then -; diff --git a/qemu/roms/openbios/arch/ppc/qemu/qemu.h b/qemu/roms/openbios/arch/ppc/qemu/qemu.h deleted file mode 100644 index 6edf4d451..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/qemu.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Creation Date: <2004/08/28 17:50:12 stepan> - * Time-stamp: <2004/08/28 17:50:12 stepan> - * - * <qemu.h> - * - * Copyright (C) 2005 Stefan Reinauer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 - * - */ - -#ifndef _H_QEMU -#define _H_QEMU - -/* vfd.c */ -extern int vfd_draw_str( const char *str ); -extern void vfd_close( void ); - -#include "kernel.h" - -#endif /* _H_QEMU */ diff --git a/qemu/roms/openbios/arch/ppc/qemu/start.S b/qemu/roms/openbios/arch/ppc/qemu/start.S deleted file mode 100644 index ae2fd53dc..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/start.S +++ /dev/null @@ -1,729 +0,0 @@ -/* - * Creation Date: <2001/06/16 21:30:18 samuel> - * Time-stamp: <2003/04/04 16:32:06 samuel> - * - * <init.S> - * - * Asm glue for ELF images - * - * Copyright (C) 2001, 2002, 2003 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "autoconf.h" -#include "asm/asmdefs.h" -#include "asm/processor.h" - -/************************************************************************/ -/* Macros */ -/************************************************************************/ - -#define ILLEGAL_VECTOR( v ) .org __vectors + v ; vector__##v: bl trap_error ; -#define VECTOR( v, dummystr ) .org __vectors + v ; vector__##v - -#ifdef CONFIG_PPC_64BITSUPPORT - -/* We're trying to use the same code for the ppc32 and ppc64 handlers here. - * On ppc32 we only save/restore the registers, C considers volatile. - * - * On ppc64 on the other hand, we have to save/restore all registers, because - * all OF code is 32 bits, which only saves/restores the low 32 bits of the - * registers it clobbers. - */ - -#define EXCEPTION_PREAMBLE_TEMPLATE \ - mtsprg1 r1 ; /* scratch */ \ - mfcr r1 ; \ - mtsprg2 r1 ; /* scratch */ \ - lis r1, 0x8000 ; /* r1=0x80000000 */ \ - add. r1,r1,r1 ; /* r1=r1+r1 (high 32bit !0) */ \ - beq 1f; \ - \ - mfmsr r1 ; /* unset MSR_SF */ \ - clrldi r1,r1,1 ; \ - mtmsrd r1 ; \ -1: \ - mfsprg0 r1 ; /* exception stack in sprg0 */ \ -.ifc ULONG_SIZE, 8 ; \ - addi r1,r1,-(40 * ULONG_SIZE) ; /* push exception frame */ \ -.else ; \ - addi r1,r1,-(20 * ULONG_SIZE) ; /* push exception frame */ \ -.endif ; \ - \ - stl r0,(0 * ULONG_SIZE)(r1) ; /* save r0 */ \ - mfsprg1 r0 ; \ - stl r0,(1 * ULONG_SIZE)(r1) ; /* save r1 */ \ - stl r2,(2 * ULONG_SIZE)(r1) ; /* save r2 */ \ - stl r3,(3 * ULONG_SIZE)(r1) ; /* save r3 */ \ - stl r4,(4 * ULONG_SIZE)(r1) ; \ - stl r5,(5 * ULONG_SIZE)(r1) ; \ - stl r6,(6 * ULONG_SIZE)(r1) ; \ - stl r7,(7 * ULONG_SIZE)(r1) ; \ - stl r8,(8 * ULONG_SIZE)(r1) ; \ - stl r9,(9 * ULONG_SIZE)(r1) ; \ - stl r10,(10 * ULONG_SIZE)(r1) ; \ - stl r11,(11 * ULONG_SIZE)(r1) ; \ - stl r12,(12 * ULONG_SIZE)(r1) ; \ -.ifc ULONG_SIZE, 8 ; \ - stl r13,(17 * ULONG_SIZE)(r1) ; \ - stl r14,(18 * ULONG_SIZE)(r1) ; \ - stl r15,(19 * ULONG_SIZE)(r1) ; \ - stl r16,(20 * ULONG_SIZE)(r1) ; \ - stl r17,(21 * ULONG_SIZE)(r1) ; \ - stl r18,(22 * ULONG_SIZE)(r1) ; \ - stl r19,(23 * ULONG_SIZE)(r1) ; \ - stl r20,(24 * ULONG_SIZE)(r1) ; \ - stl r21,(25 * ULONG_SIZE)(r1) ; \ - stl r22,(26 * ULONG_SIZE)(r1) ; \ - stl r23,(27 * ULONG_SIZE)(r1) ; \ - stl r24,(28 * ULONG_SIZE)(r1) ; \ - stl r25,(29 * ULONG_SIZE)(r1) ; \ - stl r26,(30 * ULONG_SIZE)(r1) ; \ - stl r27,(31 * ULONG_SIZE)(r1) ; \ - stl r28,(32 * ULONG_SIZE)(r1) ; \ - stl r29,(33 * ULONG_SIZE)(r1) ; \ - stl r30,(34 * ULONG_SIZE)(r1) ; \ - stl r31,(35 * ULONG_SIZE)(r1) ; \ -.endif ; \ - \ - mflr r0 ; \ - stl r0,(13 * ULONG_SIZE)(r1) ; \ - mfsprg2 r0 ; \ - stl r0,(14 * ULONG_SIZE)(r1) ; \ - mfctr r0 ; \ - stl r0,(15 * ULONG_SIZE)(r1) ; \ - mfxer r0 ; \ - stl r0,(16 * ULONG_SIZE)(r1) ; \ - \ - /* 76(r1) unused */ \ - addi r1,r1,-16 ; /* C ABI uses 0(r1) and 4(r1)... */ - -#define EXCEPTION_EPILOGUE_TEMPLATE \ - addi r1,r1,16 ; /* pop ABI frame */ \ -\ - ll r0,(13 * ULONG_SIZE)(r1) ; \ - mtlr r0 ; \ - ll r0,(14 * ULONG_SIZE)(r1) ; \ - mtcr r0 ; \ - ll r0,(15 * ULONG_SIZE)(r1) ; \ - mtctr r0 ; \ - ll r0,(16 * ULONG_SIZE)(r1) ; \ - mtxer r0 ; \ -\ - ll r0,(0 * ULONG_SIZE)(r1) ; \ - ll r2,(2 * ULONG_SIZE)(r1) ; \ - ll r3,(3 * ULONG_SIZE)(r1) ; \ - ll r4,(4 * ULONG_SIZE)(r1) ; \ - ll r5,(5 * ULONG_SIZE)(r1) ; \ - ll r6,(6 * ULONG_SIZE)(r1) ; \ - ll r7,(7 * ULONG_SIZE)(r1) ; \ - ll r8,(8 * ULONG_SIZE)(r1) ; \ - ll r9,(9 * ULONG_SIZE)(r1) ; \ - ll r10,(10 * ULONG_SIZE)(r1) ; \ - ll r11,(11 * ULONG_SIZE)(r1) ; \ - ll r12,(12 * ULONG_SIZE)(r1) ; \ -.ifc ULONG_SIZE, 8 ; \ - ll r13,(17 * ULONG_SIZE)(r1) ; \ - ll r14,(18 * ULONG_SIZE)(r1) ; \ - ll r15,(19 * ULONG_SIZE)(r1) ; \ - ll r16,(20 * ULONG_SIZE)(r1) ; \ - ll r17,(21 * ULONG_SIZE)(r1) ; \ - ll r18,(22 * ULONG_SIZE)(r1) ; \ - ll r19,(23 * ULONG_SIZE)(r1) ; \ - ll r20,(24 * ULONG_SIZE)(r1) ; \ - ll r21,(25 * ULONG_SIZE)(r1) ; \ - ll r22,(26 * ULONG_SIZE)(r1) ; \ - ll r23,(27 * ULONG_SIZE)(r1) ; \ - ll r24,(28 * ULONG_SIZE)(r1) ; \ - ll r25,(29 * ULONG_SIZE)(r1) ; \ - ll r26,(30 * ULONG_SIZE)(r1) ; \ - ll r27,(31 * ULONG_SIZE)(r1) ; \ - ll r28,(32 * ULONG_SIZE)(r1) ; \ - ll r29,(33 * ULONG_SIZE)(r1) ; \ - ll r30,(34 * ULONG_SIZE)(r1) ; \ - ll r31,(35 * ULONG_SIZE)(r1) ; \ -.endif ; \ - ll r1,(1 * ULONG_SIZE)(r1) ; /* restore stack at last */ \ - rfi - -// PPC32 - -#define ULONG_SIZE 4 -#define stl stw -#define ll lwz - -.macro EXCEPTION_PREAMBLE - EXCEPTION_PREAMBLE_TEMPLATE -.endm - -.macro EXCEPTION_EPILOGUE - EXCEPTION_EPILOGUE_TEMPLATE -.endm - -#undef ULONG_SIZE -#undef stl -#undef ll - -// PPC64 - -#define ULONG_SIZE 8 -#define stl std -#define ll ld - -.macro EXCEPTION_PREAMBLE_64 - EXCEPTION_PREAMBLE_TEMPLATE -.endm - -.macro EXCEPTION_EPILOGUE_64 - EXCEPTION_EPILOGUE_TEMPLATE -.endm - -#undef ULONG_SIZE -#undef stl -#undef ll - -#define ULONG_SIZE 4 -#define STACKFRAME_MINSIZE 16 - -#else /* !CONFIG_PPC_64BITSUPPORT */ - -#ifdef __powerpc64__ - -#define ULONG_SIZE 8 -#define STACKFRAME_MINSIZE 48 -#define stl std -#define ll ld - -#else - -#define ULONG_SIZE 4 -#define STACKFRAME_MINSIZE 16 -#define stl stw -#define ll lwz - -#endif - -.macro EXCEPTION_PREAMBLE - mtsprg1 r1 /* scratch */ - mfsprg0 r1 /* exception stack in sprg0 */ - addi r1, r1, -(20 * ULONG_SIZE) /* push exception frame */ - - stl r0, ( 0 * ULONG_SIZE)(r1) /* save r0 */ - mfsprg1 r0 - stl r0, ( 1 * ULONG_SIZE)(r1) /* save r1 */ - stl r2, ( 2 * ULONG_SIZE)(r1) /* save r2 */ - stl r3, ( 3 * ULONG_SIZE)(r1) /* save r3 */ - stl r4, ( 4 * ULONG_SIZE)(r1) - stl r5, ( 5 * ULONG_SIZE)(r1) - stl r6, ( 6 * ULONG_SIZE)(r1) - stl r7, ( 7 * ULONG_SIZE)(r1) - stl r8, ( 8 * ULONG_SIZE)(r1) - stl r9, ( 9 * ULONG_SIZE)(r1) - stl r10, (10 * ULONG_SIZE)(r1) - stl r11, (11 * ULONG_SIZE)(r1) - stl r12, (12 * ULONG_SIZE)(r1) - - mflr r0 - stl r0, (13 * ULONG_SIZE)(r1) - mfcr r0 - stl r0, (14 * ULONG_SIZE)(r1) - mfctr r0 - stl r0, (15 * ULONG_SIZE)(r1) - mfxer r0 - stl r0, (16 * ULONG_SIZE)(r1) - - addi r1, r1, -STACKFRAME_MINSIZE /* C ABI saves LR and SP */ -.endm - -.macro EXCEPTION_EPILOGUE - addi r1, r1, STACKFRAME_MINSIZE /* pop ABI frame */ - - ll r0, (13 * ULONG_SIZE)(r1) - mtlr r0 - ll r0, (14 * ULONG_SIZE)(r1) - mtcr r0 - ll r0, (15 * ULONG_SIZE)(r1) - mtctr r0 - ll r0, (16 * ULONG_SIZE)(r1) - mtxer r0 - - ll r0, ( 0 * ULONG_SIZE)(r1) - ll r2, ( 2 * ULONG_SIZE)(r1) - ll r3, ( 3 * ULONG_SIZE)(r1) - ll r4, ( 4 * ULONG_SIZE)(r1) - ll r5, ( 5 * ULONG_SIZE)(r1) - ll r6, ( 6 * ULONG_SIZE)(r1) - ll r7, ( 7 * ULONG_SIZE)(r1) - ll r8, ( 8 * ULONG_SIZE)(r1) - ll r9, ( 9 * ULONG_SIZE)(r1) - ll r10, (10 * ULONG_SIZE)(r1) - ll r11, (11 * ULONG_SIZE)(r1) - ll r12, (12 * ULONG_SIZE)(r1) - - ll r1, ( 1 * ULONG_SIZE)(r1) /* restore stack at last */ - RFI -.endm - -#endif /* !CONFIG_PPC_64BITSUPPORT */ - -/************************************************************************/ -/* vectors */ -/************************************************************************/ - - .section .text.vectors, "ax" -GLOBL(__vectors): - nop // NULL-jmp trap -1: nop // - b 1b - -VECTOR( 0x100, "SRE" ): - b _entry - -trap_error: - lis r1, 0x8000 /* r1=0x80000000 */ - add. r1,r1,r1 /* r1=r1+r1 (high 32bit !0) */ - beq 1f - - mfmsr r1 /* unset MSR_SF */ - clrldi r1,r1,1 - mtmsrd r1 -1: - mflr r3 - LOAD_REG_FUNC(r4, unexpected_excep) - mtctr r4 - bctr - -ILLEGAL_VECTOR( 0x200 ) - -VECTOR( 0x300, "DSI" ): - b real_dsi - -ILLEGAL_VECTOR( 0x380 ) - -VECTOR( 0x400, "ISI" ): - b real_isi - -ILLEGAL_VECTOR( 0x480 ) - - ILLEGAL_VECTOR( 0x500 ) - ILLEGAL_VECTOR( 0x600 ) - ILLEGAL_VECTOR( 0x700 ) - -VECTOR( 0x800, "FPU" ): - mtsprg1 r3 - mfsrr1 r3 - ori r3,r3,0x2000 - mtsrr1 r3 - mfsprg1 r3 - RFI - -ILLEGAL_VECTOR( 0x900 ) -ILLEGAL_VECTOR( 0xa00 ) -ILLEGAL_VECTOR( 0xb00 ) -ILLEGAL_VECTOR( 0xc00 ) -ILLEGAL_VECTOR( 0xd00 ) -ILLEGAL_VECTOR( 0xe00 ) -ILLEGAL_VECTOR( 0xf00 ) -ILLEGAL_VECTOR( 0xf20 ) -ILLEGAL_VECTOR( 0x1000 ) -ILLEGAL_VECTOR( 0x1100 ) -ILLEGAL_VECTOR( 0x1200 ) -ILLEGAL_VECTOR( 0x1300 ) -ILLEGAL_VECTOR( 0x1400 ) -ILLEGAL_VECTOR( 0x1500 ) -ILLEGAL_VECTOR( 0x1600 ) -ILLEGAL_VECTOR( 0x1700 ) - -#ifdef CONFIG_PPC_64BITSUPPORT - -VECTOR( 0x2000, "DSI_64" ): - EXCEPTION_PREAMBLE_64 - LOAD_REG_IMMEDIATE(r3, dsi_exception) - mtctr r3 - bctrl - EXCEPTION_EPILOGUE_64 - -VECTOR( 0x2200, "ISI_64" ): - EXCEPTION_PREAMBLE_64 - LOAD_REG_IMMEDIATE(r3, isi_exception) - mtctr r3 - bctrl - EXCEPTION_EPILOGUE_64 - -#endif - -real_dsi: - EXCEPTION_PREAMBLE - LOAD_REG_FUNC(r3, dsi_exception) - mtctr r3 - bctrl - b exception_return - -real_isi: - EXCEPTION_PREAMBLE - LOAD_REG_FUNC(r3, isi_exception) - mtctr r3 - bctrl - b exception_return - -exception_return: - EXCEPTION_EPILOGUE - -GLOBL(__vectors_end): - -/************************************************************************/ -/* entry */ -/************************************************************************/ - -GLOBL(_entry): - -#ifdef CONFIG_PPC_64BITSUPPORT - li r0,0 - - lis r3, 0x8000 /* r1=0x80000000 */ - add. r3,r3,r3 /* r1=r1+r1 (high 32bit !0) */ - beq no_64bit /* only true when !MSR_SF */ - - /* clear MSR, disable MMU, SF */ - mtmsrd r0 - b real_entry - -no_64bit: - /* clear MSR, disable MMU */ - mtmsr r0 - -real_entry: -#endif - - /* copy exception vectors */ - - LOAD_REG_IMMEDIATE(r3, __vectors) - li r4,0 - li r5,__vectors_end - __vectors + 16 - rlwinm r5,r5,0,0,28 -1: lwz r6,0(r3) - lwz r7,4(r3) - lwz r8,8(r3) - lwz r9,12(r3) - stw r6,0(r4) - stw r7,4(r4) - stw r8,8(r4) - stw r9,12(r4) - dcbst 0,r4 - sync - icbi 0,r4 - sync - addi r5,r5,-16 - addi r3,r3,16 - addi r4,r4,16 - cmpwi r5,0 - bgt 1b - isync - - bl compute_ramsize - - /* Memory map: - * - * Top +-------------------------+ - * | | - * | ROM into RAM (1 MB) | - * | | - * +-------------------------+ - * | | - * | MMU Hash Table (64 kB) | - * | | - * +-------------------------+ - * | | - * | Exception Stack (32 kB) | - * | | - * +-------------------------+ - * | | - * | Stack (64 kB) | - * | | - * +-------------------------+ - * | | - * | Client Stack (64 kB) | - * | | - * +-------------------------+ - * | | - * | Malloc Zone (2 MiB) | - * | | - * +-------------------------+ - * : : - * Bottom - */ - - addis r1, r3, -16 /* ramsize - 1MB */ - - /* setup hash table */ - - addis r1, r1, -1 /* - 64 kB */ - clrrwi r1, r1, 5*4 /* & ~0xfffff */ - - /* setup exception stack */ - - mtsprg0 r1 - - /* setup stack */ - - addi r1, r1, -32768 /* - 32 kB */ - - /* save memory size in stack */ - -#ifdef __powerpc64__ - /* set up TOC pointer */ - - LOAD_REG_IMMEDIATE(r2, setup_mmu) - ld r2, 8(r2) -#endif - - bl BRANCH_LABEL(setup_mmu) - bl BRANCH_LABEL(entry) -1: nop - b 1b - - - /* According to IEEE 1275, PPC bindings: - * - * MSR = FP, ME + (DR|IR) - * r1 = stack (32 K + 32 bytes link area above) - * r5 = client interface handler - * r6 = address of client program arguments (unused) - * r7 = length of client program arguments (unused) - * - * Yaboot and Linux use r3 and r4 for initrd address and size - */ - .data -saved_stack: - DATA_LONG(0) - .previous - /* void call_elf( arg1, arg2, entry ) */ -_GLOBAL(call_elf): - mflr r0 - PPC_STLU r1, -STACKFRAME_MINSIZE(r1) - PPC_STL r0, (STACKFRAME_MINSIZE + PPC_LR_STKOFF)(r1) - mtlr r5 - LOAD_REG_IMMEDIATE(r8, saved_stack) // save our stack pointer - PPC_STL r1,0(r8) - mfsdr1 r1 - addi r1, r1, -32768 /* - 32 KiB exception stack */ - addis r1, r1, -1 /* - 64 KiB stack */ - LOAD_REG_IMMEDIATE(r5, of_client_callback) // r5 = callback - li r6,0 // r6 = address of client program arguments (unused) - li r7,0 // r7 = length of client program arguments (unused) - li r0,MSR_FP | MSR_ME | MSR_DR | MSR_IR - MTMSRD(r0) - blrl - -#ifdef CONFIG_PPC64 - /* Restore SF bit */ - LOAD_REG_IMMEDIATE(r0, MSR_SF | MSR_FP | MSR_ME | MSR_DR | MSR_IR) - MTMSRD(r0) -#endif - LOAD_REG_IMMEDIATE(r8, saved_stack) // restore stack pointer - mr r1,r8 - PPC_LL r0, (STACKFRAME_MINSIZE + PPC_LR_STKOFF)(r1) - mtlr r0 - addi r1, r1, STACKFRAME_MINSIZE - // XXX: should restore r12-r31 etc.. - // we should not really come here though - blr - -#ifdef __powerpc64__ -#define STKOFF STACKFRAME_MINSIZE -#define SAVE_SPACE 320 -#else -#define STKOFF 8 -#define SAVE_SPACE 144 -#endif -GLOBL(of_client_callback): - -#ifdef CONFIG_PPC64 - PPC_STLU r1, -(STACKFRAME_MINSIZE + 16)(r1) -#else - PPC_STLU r1, -STACKFRAME_MINSIZE(r1) /* fits within alignment */ -#endif - - /* save r4 */ - - PPC_STL r4, STKOFF(r1) - - /* save lr */ - - mflr r4 - PPC_STL r4, PPC_LR_STKOFF(r1) - - /* restore OF stack */ - - LOAD_REG_IMMEDIATE(r4, saved_stack) - PPC_LL r4, 0(r4) - - PPC_STLU r4,-SAVE_SPACE(r4) - PPC_STL r1,(STKOFF)(r4) // save caller stack - mr r1,r4 - - PPC_STL r2, (STKOFF + 1 * ULONG_SIZE)(r1) - PPC_STL r0, (STKOFF + 2 * ULONG_SIZE)(r1) - - /* save ctr, cr and xer */ - - mfctr r2 - PPC_STL r2, (STKOFF + 3 * ULONG_SIZE)(r1) - mfcr r2 - PPC_STL r2, (STKOFF + 4 * ULONG_SIZE)(r1) - mfxer r2 - PPC_STL r2, (STKOFF + 5 * ULONG_SIZE)(r1) - - /* save r5 - r31 */ - - PPC_STL r5, (STKOFF + 6 * ULONG_SIZE)(r1) - PPC_STL r6, (STKOFF + 7 * ULONG_SIZE)(r1) - PPC_STL r7, (STKOFF + 8 * ULONG_SIZE)(r1) - PPC_STL r8, (STKOFF + 9 * ULONG_SIZE)(r1) - PPC_STL r9, (STKOFF + 10 * ULONG_SIZE)(r1) - PPC_STL r10, (STKOFF + 11 * ULONG_SIZE)(r1) - PPC_STL r11, (STKOFF + 12 * ULONG_SIZE)(r1) - PPC_STL r12, (STKOFF + 13 * ULONG_SIZE)(r1) - PPC_STL r13, (STKOFF + 14 * ULONG_SIZE)(r1) - PPC_STL r14, (STKOFF + 15 * ULONG_SIZE)(r1) - PPC_STL r15, (STKOFF + 16 * ULONG_SIZE)(r1) - PPC_STL r16, (STKOFF + 17 * ULONG_SIZE)(r1) - PPC_STL r17, (STKOFF + 18 * ULONG_SIZE)(r1) - PPC_STL r18, (STKOFF + 19 * ULONG_SIZE)(r1) - PPC_STL r19, (STKOFF + 20 * ULONG_SIZE)(r1) - PPC_STL r20, (STKOFF + 21 * ULONG_SIZE)(r1) - PPC_STL r21, (STKOFF + 22 * ULONG_SIZE)(r1) - PPC_STL r22, (STKOFF + 23 * ULONG_SIZE)(r1) - PPC_STL r23, (STKOFF + 24 * ULONG_SIZE)(r1) - PPC_STL r24, (STKOFF + 25 * ULONG_SIZE)(r1) - PPC_STL r25, (STKOFF + 26 * ULONG_SIZE)(r1) - PPC_STL r26, (STKOFF + 27 * ULONG_SIZE)(r1) - PPC_STL r27, (STKOFF + 28 * ULONG_SIZE)(r1) - PPC_STL r28, (STKOFF + 29 * ULONG_SIZE)(r1) - PPC_STL r29, (STKOFF + 30 * ULONG_SIZE)(r1) - PPC_STL r30, (STKOFF + 31 * ULONG_SIZE)(r1) - PPC_STL r31, (STKOFF + 32 * ULONG_SIZE)(r1) - -#ifdef CONFIG_PPC64 - LOAD_REG_IMMEDIATE(r2, of_client_interface) - ld r2, 8(r2) -#endif - bl BRANCH_LABEL(of_client_interface) - - /* restore r5 - r31 */ - - PPC_LL r5, (STKOFF + 6 * ULONG_SIZE)(r1) - PPC_LL r6, (STKOFF + 7 * ULONG_SIZE)(r1) - PPC_LL r7, (STKOFF + 8 * ULONG_SIZE)(r1) - PPC_LL r8, (STKOFF + 9 * ULONG_SIZE)(r1) - PPC_LL r9, (STKOFF + 10 * ULONG_SIZE)(r1) - PPC_LL r10, (STKOFF + 11 * ULONG_SIZE)(r1) - PPC_LL r11, (STKOFF + 12 * ULONG_SIZE)(r1) - PPC_LL r12, (STKOFF + 13 * ULONG_SIZE)(r1) - PPC_LL r13, (STKOFF + 14 * ULONG_SIZE)(r1) - PPC_LL r14, (STKOFF + 15 * ULONG_SIZE)(r1) - PPC_LL r15, (STKOFF + 16 * ULONG_SIZE)(r1) - PPC_LL r16, (STKOFF + 17 * ULONG_SIZE)(r1) - PPC_LL r17, (STKOFF + 18 * ULONG_SIZE)(r1) - PPC_LL r18, (STKOFF + 19 * ULONG_SIZE)(r1) - PPC_LL r19, (STKOFF + 20 * ULONG_SIZE)(r1) - PPC_LL r20, (STKOFF + 21 * ULONG_SIZE)(r1) - PPC_LL r21, (STKOFF + 22 * ULONG_SIZE)(r1) - PPC_LL r22, (STKOFF + 23 * ULONG_SIZE)(r1) - PPC_LL r23, (STKOFF + 24 * ULONG_SIZE)(r1) - PPC_LL r24, (STKOFF + 25 * ULONG_SIZE)(r1) - PPC_LL r25, (STKOFF + 26 * ULONG_SIZE)(r1) - PPC_LL r26, (STKOFF + 27 * ULONG_SIZE)(r1) - PPC_LL r27, (STKOFF + 28 * ULONG_SIZE)(r1) - PPC_LL r28, (STKOFF + 29 * ULONG_SIZE)(r1) - PPC_LL r29, (STKOFF + 30 * ULONG_SIZE)(r1) - PPC_LL r30, (STKOFF + 31 * ULONG_SIZE)(r1) - PPC_LL r31, (STKOFF + 32 * ULONG_SIZE)(r1) - - /* restore ctr, cr and xer */ - - PPC_LL r2, (STKOFF + 3 * ULONG_SIZE)(r1) - mtctr r2 - PPC_LL r2, (STKOFF + 4 * ULONG_SIZE)(r1) - mtcr r2 - PPC_LL r2, (STKOFF + 5 * ULONG_SIZE)(r1) - mtxer r2 - - /* restore r0 and r2 */ - - PPC_LL r2, (STKOFF + 1 * ULONG_SIZE)(r1) - PPC_LL r0, (STKOFF + 2 * ULONG_SIZE)(r1) - - /* restore caller stack */ - - PPC_LL r1, (STKOFF)(r1) - - PPC_LL r4, PPC_LR_STKOFF(r1) - mtlr r4 - PPC_LL r4, STKOFF(r1) - PPC_LL r1, 0(r1) - - blr - - /* rtas glue (must be reloctable) */ -GLOBL(of_rtas_start): - /* r3 = argument buffer, r4 = of_rtas_start */ - /* according to the CHRP standard, cr must be preserved (cr0/cr1 too?) */ - blr -GLOBL(of_rtas_end): - - -#define CACHE_LINE_SIZE 32 -#define LG_CACHE_LINE_SIZE 5 - -/* flush_icache_range( unsigned long start, unsigned long stop) */ -_GLOBAL(flush_icache_range): - li r5,CACHE_LINE_SIZE-1 - andc r3,r3,r5 - subf r4,r3,r4 - add r4,r4,r5 - srwi. r4,r4,LG_CACHE_LINE_SIZE - beqlr - mtctr r4 - mr r6,r3 -1: dcbst 0,r3 - addi r3,r3,CACHE_LINE_SIZE - bdnz 1b - sync /* wait for dcbst's to get to ram */ - mtctr r4 -2: icbi 0,r6 - addi r6,r6,CACHE_LINE_SIZE - bdnz 2b - sync /* additional sync needed on g4 */ - isync - blr - - /* Get RAM size from QEMU configuration device */ - -#define CFG_ADDR 0xf0000510 -#define FW_CFG_RAM_SIZE 0x03 - -compute_ramsize: - LOAD_REG_IMMEDIATE(r9, CFG_ADDR) - li r0,FW_CFG_RAM_SIZE - sth r0,0(r9) - LOAD_REG_IMMEDIATE(r9, CFG_ADDR + 2) - lbz r1,0(r9) - lbz r0,0(r9) - slwi r0,r0,8 - or r1,r1,r0 - lbz r0,0(r9) - slwi r0,r0,16 - or r1,r1,r0 - lbz r0,0(r9) - slwi r0,r0,24 - or r3,r1,r0 - blr - - /* Hard reset vector */ - .section .romentry,"ax" - bl _entry diff --git a/qemu/roms/openbios/arch/ppc/qemu/tree.fs b/qemu/roms/openbios/arch/ppc/qemu/tree.fs deleted file mode 100644 index 5b6bbc6f7..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/tree.fs +++ /dev/null @@ -1,79 +0,0 @@ -\ QEMU specific initialization code -\ -\ This program is free software; you can redistribute it and/or -\ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation -\ - -include config.fs - -\ ------------------------------------------------------------- -\ device-tree -\ ------------------------------------------------------------- - -" /" find-device -\ Apple calls the root node device-tree -" device-tree" device-name -[IFDEF] CONFIG_PPC64 2 [ELSE] 1 [THEN] encode-int " #address-cells" property -1 encode-int " #size-cells" property -h# 05f5e100 encode-int " clock-frequency" property - -new-device - " cpus" device-name - 1 encode-int " #address-cells" property - 0 encode-int " #size-cells" property - external - - : encode-unit ( unit -- str len ) - pocket tohexstr - ; - - : decode-unit ( str len -- unit ) - parse-hex - ; - -finish-device - -new-device - " memory" device-name - " memory" device-type - external - : open true ; - : close ; -finish-device - -new-device - " rom" device-name - h# ff800000 encode-int 0 encode-int encode+ " reg" property - 1 encode-int " #address-cells" property - h# ff800000 encode-int h# 800000 encode-int encode+ - h# ff800000 encode-int encode+ " ranges" property -finish-device - -\ ------------------------------------------------------------- -\ /packages -\ ------------------------------------------------------------- - -" /packages" find-device - - " packages" device-name - external - \ allow packages to be opened with open-dev - : open true ; - : close ; - -\ /packages/terminal-emulator -new-device - " terminal-emulator" device-name - external - : open true ; - : close ; - \ : write ( addr len -- actual ) - \ dup -rot type - \ ; -finish-device - -\ ------------------------------------------------------------- -\ The END -\ ------------------------------------------------------------- -device-end diff --git a/qemu/roms/openbios/arch/ppc/qemu/vfd.c b/qemu/roms/openbios/arch/ppc/qemu/vfd.c deleted file mode 100644 index 308d0e338..000000000 --- a/qemu/roms/openbios/arch/ppc/qemu/vfd.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Creation Date: <2004/08/28 17:29:43 greg> - * Time-stamp: <2004/08/28 17:29:43 greg> - * - * <vfd.c> - * - * Simple text console - * - * Copyright (C) 2004 Greg Watson - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libopenbios/bindings.h" -#include "qemu/qemu.h" - -static int vfd_is_open; - -static int -vfd_init( void ) -{ - vfd_is_open = 1; - return 0; -} - -void -vfd_close( void ) -{ -} - -int -vfd_draw_str( const char *str ) -{ - if (!vfd_is_open) - vfd_init(); - - return 0; -} diff --git a/qemu/roms/openbios/arch/ppc/start.S b/qemu/roms/openbios/arch/ppc/start.S deleted file mode 100644 index 40ee08963..000000000 --- a/qemu/roms/openbios/arch/ppc/start.S +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Creation Date: <2001/06/16 21:30:18 samuel> - * Time-stamp: <2003/04/04 16:32:06 samuel> - * - * <init.S> - * - * Asm glue for ELF images run inside MOL - * - * Copyright (C) 2001, 2002, 2003 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "asm/asmdefs.h" -#include "asm/processor.h" -#include "osi.h" - -/************************************************************************/ -/* Macros */ -/************************************************************************/ - -#define ILLEGAL_VECTOR( v ) .org __vectors + v ; bl trap_error ; -#define VECTOR( v, dummystr ) .org __vectors + v ; vector__##v - -#define EXCEPTION_PREAMBLE \ - mtsprg1 r1 ; /* scratch */ \ - mfsprg0 r1 ; /* exception stack in sprg0 */ \ - addi r1,r1,-80 ; /* push exception frame */ \ - \ - stw r0,0(r1) ; /* save r0 */ \ - mfsprg1 r0 ; \ - stw r0,4(r1) ; /* save r1 */ \ - stw r2,8(r1) ; /* save r2 */ \ - stw r3,12(r1) ; /* save r3 */ \ - stw r4,16(r1) ; \ - stw r5,20(r1) ; \ - stw r6,24(r1) ; \ - stw r7,28(r1) ; \ - stw r8,32(r1) ; \ - stw r9,36(r1) ; \ - stw r10,40(r1) ; \ - stw r11,44(r1) ; \ - stw r12,48(r1) ; \ - \ - mflr r0 ; \ - stw r0,52(r1) ; \ - mfcr r0 ; \ - stw r0,56(r1) ; \ - mfctr r0 ; \ - stw r0,60(r1) ; \ - mfxer r0 ; \ - stw r0,64(r1) ; \ - \ - /* 76(r1) unused */ \ - addi r1,r1,-16 ; /* call conventions uses 0(r1) and 4(r1)... */ - - -/************************************************************************/ -/* stack space */ -/************************************************************************/ - - .section .bss - .balign 32 - .space 32*1024 // 32 K client stack -client_stack: - .space 128 - - .space 64*1024 // 64 K stack -stack: .space 64 - - .space 32*1024 // 32 K exception stack -estack: .space 128 - - -/************************************************************************/ -/* entry */ -/************************************************************************/ - - .text -GLOBL(_start): - li r0,0 - mtmsr r0 - - lis r1,HA(estack) - addi r1,r1,LO(estack) - mtsprg0 r1 // setup exception stack - lis r1,HA(stack) - addi r1,r1,LO(stack) - - // copy exception vectors - lis r3,HA(__vectors) - addi r3,r3,LO(__vectors) - li r4,0 - li r5,__vectors_end - __vectors + 16 - rlwinm r5,r5,0,0,28 -1: lwz r6,0(r3) - lwz r7,4(r3) - lwz r8,8(r3) - lwz r9,12(r3) - stw r6,0(r4) - stw r7,4(r4) - stw r8,8(r4) - stw r9,12(r4) - dcbst 0,r4 - sync - icbi 0,r4 - sync - addi r5,r5,-16 - addi r3,r3,16 - addi r4,r4,16 - cmpwi r5,0 - bgt 1b - isync - - bl setup_mmu - bl entry -1: nop - b 1b - - - /* According to IEEE 1275, PPC bindings: - * - * MSR = FP, ME + (DR|IR) - * r1 = stack (32 K + 32 bytes link area above) - * r5 = clint interface handler - * r6 = address of client program arguments (unused) - * r7 = length of client program arguments (unsed) - */ -saved_stack: - .long 0 - /* void call_elf( entry ) */ -GLOBL(call_elf): - mflr r0 - stwu r1,-16(r1) - stw r0,20(r1) - mtlr r3 - lis r8,HA(saved_stack) - addi r8,r8,LO(saved_stack) // save our stack pointer - stw r1,0(r8) - lis r1,HA(client_stack) - addi r1,r1,LO(client_stack) - lis r5,HA(of_client_callback) - addi r5,r5,LO(of_client_callback) // r5 = callback - li r6,0 // r6 = address of client program arguments (unused) - li r7,0 // r7 = length of client program arguments (unused) - li r0,MSR_FP | MSR_ME | MSR_DR | MSR_IR - mtmsr r0 - blrl - - lis r8,HA(saved_stack) - addi r8,r8,LO(saved_stack) // restore stack pointer - mr r1,r8 - lwz r0,20(r1) - mtlr r0 - addi r1,r1,16 - // XXX: should restore r12-r31 etc.. - // we should not really come here though - blr - -GLOBL(of_client_callback): - lis r4,HA(saved_stack) - addi r4,r4,LO(saved_stack) - lwz r4,0(r4) - stwu r4,-32(r4) - mflr r5 - stw r5,32+4(r4) - stw r1,8(r4) // save caller stack - mr r1,r4 - stw r2,12(r1) - stw r0,16(r1) - mfctr r2 - stw r2,20(r1) - mfcr r2 - stw r2,24(r1) - mfxer r2 - stw r2,28(r1) - // do we need to save more registers? - bl of_client_interface - lwz r4,32+4(r1) - mtlr r4 - lwz r2,20(r1) - mtctr r2 - lwz r2,24(r1) - mtcr r2 - lwz r2,28(r1) - mtxer r2 - lwz r2,12(r1) - lwz r0,16(r1) - lwz r1,8(r1) // restore caller stack - blr - - /* rtas glue (must be reloctable) */ -GLOBL(of_rtas_start): - /* r3 = argument buffer, r4 = of_rtas_start */ - /* according to the CHRP standard, cr must be preserved (cr0/cr1 too?) */ - mr r6,r3 - lis r3,HA(OSI_SC_MAGIC_R3) - addi r3,r3,LO(OSI_SC_MAGIC_R3) - lis r4,HA(OSI_SC_MAGIC_R4) - addi r4,r4,LO(OSI_SC_MAGIC_R4) - li r5,OSI_OF_RTAS - sc - blr -GLOBL(of_rtas_end): - - - /* used in a hack to the newworld calibration */ -GLOBL(nw_dec_calibration): - .long 0 -GLOBL(timer_calib_start): - lis r3,HA(nw_dec_calibration) - addi r3,r3,LO(nw_dec_calibration) - lwz r3,0(r3) - blr -GLOBL(timer_calib_end): - - -/************************************************************************/ -/* vectors */ -/************************************************************************/ - -GLOBL(__vectors): - nop // NULL-jmp trap -1: nop // - b 1b - -exception_return: - addi r1,r1,16 // pop ABI frame - - lwz r0,52(r1) - mtlr r0 - lwz r0,56(r1) - mtcr r0 - lwz r0,60(r1) - mtctr r0 - lwz r0,64(r1) - mtxer r0 - - lwz r0,0(r1) // restore r0 - lwz r2,8(r1) // restore r2 - lwz r3,12(r1) // restore r3 - lwz r4,16(r1) - lwz r5,20(r1) - lwz r6,24(r1) - lwz r7,28(r1) - lwz r8,32(r1) - lwz r9,36(r1) - lwz r10,40(r1) - lwz r11,44(r1) - lwz r12,48(r1) - lwz r1,4(r1) // restore r1 - rfi - -trap_error: - mflr r3 - b unexpected_excep - -ILLEGAL_VECTOR( 0x100 ) -ILLEGAL_VECTOR( 0x200 ) - -VECTOR( 0x300, "DSI" ): - EXCEPTION_PREAMBLE - lis r3,HA(dsi_exception) - addi r3,r3,LO(dsi_exception) - mtctr r3 - bctrl - b exception_return - -VECTOR( 0x400, "ISI" ): - EXCEPTION_PREAMBLE - lis r3,HA(isi_exception) - addi r3,r3,LO(isi_exception) - mtctr r3 - bctrl - b exception_return - - ILLEGAL_VECTOR( 0x500 ) - ILLEGAL_VECTOR( 0x600 ) - ILLEGAL_VECTOR( 0x700 ) - -VECTOR( 0x800, "FPU" ): - mtsprg1 r3 - mfsrr1 r3 - ori r3,r3,0x2000 - mtsrr1 r3 - mfsprg1 r3 - rfi - -ILLEGAL_VECTOR( 0x900 ) -ILLEGAL_VECTOR( 0xa00 ) -ILLEGAL_VECTOR( 0xb00 ) -ILLEGAL_VECTOR( 0xc00 ) -ILLEGAL_VECTOR( 0xd00 ) -ILLEGAL_VECTOR( 0xe00 ) -ILLEGAL_VECTOR( 0xf00 ) -ILLEGAL_VECTOR( 0xf20 ) -ILLEGAL_VECTOR( 0x1000 ) -ILLEGAL_VECTOR( 0x1100 ) -ILLEGAL_VECTOR( 0x1200 ) -ILLEGAL_VECTOR( 0x1300 ) -ILLEGAL_VECTOR( 0x1400 ) -ILLEGAL_VECTOR( 0x1500 ) -ILLEGAL_VECTOR( 0x1600 ) -ILLEGAL_VECTOR( 0x1700 ) - -GLOBL(__vectors_end): - - -#define CACHE_LINE_SIZE 32 -#define LG_CACHE_LINE_SIZE 5 - -/* flush_icache_range( unsigned long start, unsigned long stop) */ -GLOBL(flush_icache_range): - li r5,CACHE_LINE_SIZE-1 - andc r3,r3,r5 - subf r4,r3,r4 - add r4,r4,r5 - srwi. r4,r4,LG_CACHE_LINE_SIZE - beqlr - mtctr r4 - mr r6,r3 -1: dcbst 0,r3 - addi r3,r3,CACHE_LINE_SIZE - bdnz 1b - sync /* wait for dcbst's to get to ram */ - mtctr r4 -2: icbi 0,r6 - addi r6,r6,CACHE_LINE_SIZE - bdnz 2b - sync /* additional sync needed on g4 */ - isync - blr diff --git a/qemu/roms/openbios/arch/ppc/timebase.S b/qemu/roms/openbios/arch/ppc/timebase.S deleted file mode 100644 index 19faed49d..000000000 --- a/qemu/roms/openbios/arch/ppc/timebase.S +++ /dev/null @@ -1,33 +0,0 @@ -#include "asm/asmdefs.h" -#include "asm/processor.h" - -/* - * unsigned long long _get_ticks(void); - */ -_GLOBAL(_get_ticks): -1: mftbu r3 - mftb r4 - mftbu r5 - cmpw 0,r3,r5 - bne 1b - blr - -/* - * Delay for a number of ticks - */ -_GLOBAL(_wait_ticks): - mflr r8 /* save link register */ - mr r7, r3 /* save tick count */ - bl BRANCH_LABEL(_get_ticks) /* Get start time */ - - /* Calculate end time */ - addc r7, r4, r7 /* Compute end time lower */ - addze r6, r3 /* and end time upper */ - -1: bl BRANCH_LABEL(_get_ticks) /* Get current time */ - subfc r4, r4, r7 /* Subtract current time from end time */ - subfe. r3, r3, r6 - bge 1b /* Loop until time expired */ - - mtlr r8 /* restore link register */ - blr |