diff --git a/arch/amd64/openbios.c b/arch/amd64/openbios.c index d03c37c..3ae3c35 100644 --- a/arch/amd64/openbios.c +++ b/arch/amd64/openbios.c @@ -17,7 +17,6 @@ #include "relocate.h" void boot(void); -void ob_ide_init(void); static char intdict[256 * 1024]; @@ -42,7 +41,7 @@ arch_init( void ) modules_init(); #ifdef CONFIG_DRIVER_IDE setup_timers(); - ob_ide_init(); + ob_ide_init("/pci/pci-ata", 0x1f0, 0x3f4, 0x170, 0x374); #endif device_end(); bind_func("platform-boot", boot ); diff --git a/arch/ppc/briq/init.c b/arch/ppc/briq/init.c index 90ccac2..0fbaaa1 100644 --- a/arch/ppc/briq/init.c +++ b/arch/ppc/briq/init.c @@ -27,7 +27,6 @@ #include "openbios-version.h" extern void unexpected_excep( int vector ); -extern void ob_ide_init( void ); extern void setup_timers( void ); #if 0 @@ -91,15 +90,11 @@ arch_of_init( void ) devtree_init(); node_methods_init(); - nvram_init("/pci/mac-io/nvram"); modules_init(); + setup_timers(); #ifdef CONFIG_DRIVER_PCI ob_pci_init(); #endif -#ifdef CONFIG_DRIVER_IDE - setup_timers(); - ob_ide_init(); -#endif #if USE_RTAS if( !(ph=find_dev("/rtas")) ) diff --git a/arch/ppc/briq/tree.fs b/arch/ppc/briq/tree.fs index eeef903..ae50326 100644 --- a/arch/ppc/briq/tree.fs +++ b/arch/ppc/briq/tree.fs @@ -81,6 +81,65 @@ finish-device 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 diff --git a/arch/ppc/pearpc/init.c b/arch/ppc/pearpc/init.c index d0e1eed..06c83e5 100644 --- a/arch/ppc/pearpc/init.c +++ b/arch/ppc/pearpc/init.c @@ -28,7 +28,6 @@ #include "openbios-version.h" extern void unexpected_excep( int vector ); -extern void ob_ide_init( void ); extern void ob_pci_init( void ); extern void ob_adb_init( void ); extern void setup_timers( void ); @@ -95,17 +94,10 @@ arch_of_init( void ) devtree_init(); nvram_init("/pci/mac-io/nvram"); modules_init(); + setup_timers(); #ifdef CONFIG_DRIVER_PCI ob_pci_init(); #endif -#ifdef CONFIG_DRIVER_IDE - setup_timers(); - ob_ide_init(); -#endif -#ifdef CONFIG_DRIVER_ADB - ob_adb_init(); -#endif - node_methods_init(); init_video(); diff --git a/arch/ppc/pearpc/tree.fs b/arch/ppc/pearpc/tree.fs index e45ee44..d19b485 100644 --- a/arch/ppc/pearpc/tree.fs +++ b/arch/ppc/pearpc/tree.fs @@ -81,6 +81,65 @@ finish-device 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 diff --git a/arch/ppc/qemu/init.c b/arch/ppc/qemu/init.c index 6d737e3..6593b84 100644 --- a/arch/ppc/qemu/init.c +++ b/arch/ppc/qemu/init.c @@ -29,7 +29,6 @@ #include "openbios-version.h" extern void unexpected_excep( int vector ); -extern void ob_ide_init( void ); extern void ob_pci_init( void ); extern void setup_timers( void ); @@ -108,10 +107,6 @@ arch_of_init( void ) #ifdef CONFIG_DRIVER_PCI ob_pci_init(); #endif -#ifdef CONFIG_DRIVER_IDE - ob_ide_init(); -#endif - node_methods_init(); #ifdef USE_RTAS diff --git a/arch/ppc/qemu/tree.fs b/arch/ppc/qemu/tree.fs index 04bd1c5..f9e071b 100644 --- a/arch/ppc/qemu/tree.fs +++ b/arch/ppc/qemu/tree.fs @@ -81,6 +81,65 @@ finish-device 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 diff --git a/arch/sparc64/openbios.c b/arch/sparc64/openbios.c index c74dde5..7d7a0fe 100644 --- a/arch/sparc64/openbios.c +++ b/arch/sparc64/openbios.c @@ -865,7 +865,7 @@ arch_init( void ) #endif #ifdef CONFIG_DRIVER_IDE setup_timers(); - ob_ide_init(); + ob_ide_init("/pci/isa", 0x1f0, 0x3f4, 0x170, 0x374); #endif #ifdef CONFIG_DRIVER_FLOPPY ob_floppy_init(); diff --git a/arch/sparc64/tree.fs b/arch/sparc64/tree.fs index 5a47678..b02aeb9 100644 --- a/arch/sparc64/tree.fs +++ b/arch/sparc64/tree.fs @@ -32,3 +32,65 @@ finish-device " /openprom" find-device " OBP 3.10.24 1999/01/01 01:01" encode-string " version" property + +dev /pci + +\ simple isa bus node +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/isa/ide0/disk@0" ?devalias not if + " /pci/isa/ide0/disk@1" ?devalias not if + " /pci/isa/ide1/disk@0" ?devalias not if + " /pci/isa/ide1/disk@1" ?devalias not if + 2drop ." No disk found." cr + then + then + then + then + + " cdrom" + " /pci/isa/ide0/cdrom@0" ?devalias not if + " /pci/isa/ide0/cdrom@1" ?devalias not if + " /pci/isa/ide1/cdrom@0" ?devalias not if + " /pci/isa/ide1/cdrom@1" ?devalias not if + 2drop ." No cdrom found" cr + then + then + then + then +; SYSTEM-initializer diff --git a/arch/x86/init.fs b/arch/x86/init.fs index 12c75da..05713cb 100644 --- a/arch/x86/init.fs +++ b/arch/x86/init.fs @@ -75,3 +75,65 @@ finish-device " keyboard" input ; CONSOLE-IN-initializer + +dev /pci + +\ simple isa bus node +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/isa/ide0/disk@0" ?devalias not if + " /pci/isa/ide0/disk@1" ?devalias not if + " /pci/isa/ide1/disk@0" ?devalias not if + " /pci/isa/ide1/disk@1" ?devalias not if + 2drop ." No disk found." cr + then + then + then + then + + " cdrom" + " /pci/isa/ide0/cdrom@0" ?devalias not if + " /pci/isa/ide0/cdrom@1" ?devalias not if + " /pci/isa/ide1/cdrom@0" ?devalias not if + " /pci/isa/ide1/cdrom@1" ?devalias not if + 2drop ." No cdrom found" cr + then + then + then + then +; SYSTEM-initializer diff --git a/arch/x86/openbios.c b/arch/x86/openbios.c index b95e9b0..46812fc 100644 --- a/arch/x86/openbios.c +++ b/arch/x86/openbios.c @@ -45,7 +45,7 @@ arch_init( void ) #endif #ifdef CONFIG_DRIVER_IDE setup_timers(); - ob_ide_init(); + ob_ide_init("/pci/isa", 0x1f0, 0x3f4, 0x170, 0x374); #endif #ifdef CONFIG_DRIVER_FLOPPY ob_floppy_init(); diff --git a/config/examples/cross-ppc_config.xml b/config/examples/cross-ppc_config.xml index a243d9f..16a561f 100644 --- a/config/examples/cross-ppc_config.xml +++ b/config/examples/cross-ppc_config.xml @@ -66,7 +66,10 @@