Author: blueswirl Date: 2008-12-20 15:48:40 +0100 (Sat, 20 Dec 2008) New Revision: 292
Modified: openbios-devel/arch/amd64/openbios.c openbios-devel/arch/ppc/briq/init.c openbios-devel/arch/ppc/briq/tree.fs openbios-devel/arch/ppc/pearpc/init.c openbios-devel/arch/ppc/pearpc/tree.fs openbios-devel/arch/ppc/qemu/init.c openbios-devel/arch/ppc/qemu/tree.fs openbios-devel/arch/sparc64/openbios.c openbios-devel/arch/sparc64/tree.fs openbios-devel/arch/x86/init.fs openbios-devel/arch/x86/openbios.c openbios-devel/config/examples/cross-ppc_config.xml openbios-devel/config/xml/config-c.xsl openbios-devel/config/xml/config-forth.xsl openbios-devel/drivers/build.xml openbios-devel/drivers/ide.c openbios-devel/drivers/pci.c openbios-devel/include/openbios/drivers.h Log: IDE fixes for PPC (Laurent Vivier)
Modified: openbios-devel/arch/amd64/openbios.c =================================================================== --- openbios-devel/arch/amd64/openbios.c 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/amd64/openbios.c 2008-12-20 14:48:40 UTC (rev 292) @@ -17,7 +17,6 @@ #include "relocate.h"
void boot(void); -void ob_ide_init(void);
static char intdict[256 * 1024];
@@ -42,7 +41,7 @@ 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 );
Modified: openbios-devel/arch/ppc/briq/init.c =================================================================== --- openbios-devel/arch/ppc/briq/init.c 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/ppc/briq/init.c 2008-12-20 14:48:40 UTC (rev 292) @@ -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 @@
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")) )
Modified: openbios-devel/arch/ppc/briq/tree.fs =================================================================== --- openbios-devel/arch/ppc/briq/tree.fs 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/ppc/briq/tree.fs 2008-12-20 14:48:40 UTC (rev 292) @@ -82,6 +82,65 @@ 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
Modified: openbios-devel/arch/ppc/pearpc/init.c =================================================================== --- openbios-devel/arch/ppc/pearpc/init.c 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/ppc/pearpc/init.c 2008-12-20 14:48:40 UTC (rev 292) @@ -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 @@ 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();
Modified: openbios-devel/arch/ppc/pearpc/tree.fs =================================================================== --- openbios-devel/arch/ppc/pearpc/tree.fs 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/ppc/pearpc/tree.fs 2008-12-20 14:48:40 UTC (rev 292) @@ -82,6 +82,65 @@ 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
Modified: openbios-devel/arch/ppc/qemu/init.c =================================================================== --- openbios-devel/arch/ppc/qemu/init.c 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/ppc/qemu/init.c 2008-12-20 14:48:40 UTC (rev 292) @@ -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 @@ #ifdef CONFIG_DRIVER_PCI ob_pci_init(); #endif -#ifdef CONFIG_DRIVER_IDE - ob_ide_init(); -#endif - node_methods_init();
#ifdef USE_RTAS
Modified: openbios-devel/arch/ppc/qemu/tree.fs =================================================================== --- openbios-devel/arch/ppc/qemu/tree.fs 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/ppc/qemu/tree.fs 2008-12-20 14:48:40 UTC (rev 292) @@ -82,6 +82,65 @@ 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
Modified: openbios-devel/arch/sparc64/openbios.c =================================================================== --- openbios-devel/arch/sparc64/openbios.c 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/sparc64/openbios.c 2008-12-20 14:48:40 UTC (rev 292) @@ -865,7 +865,7 @@ #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();
Modified: openbios-devel/arch/sparc64/tree.fs =================================================================== --- openbios-devel/arch/sparc64/tree.fs 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/sparc64/tree.fs 2008-12-20 14:48:40 UTC (rev 292) @@ -32,3 +32,65 @@
" /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
Modified: openbios-devel/arch/x86/init.fs =================================================================== --- openbios-devel/arch/x86/init.fs 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/x86/init.fs 2008-12-20 14:48:40 UTC (rev 292) @@ -75,3 +75,65 @@ " 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
Modified: openbios-devel/arch/x86/openbios.c =================================================================== --- openbios-devel/arch/x86/openbios.c 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/arch/x86/openbios.c 2008-12-20 14:48:40 UTC (rev 292) @@ -45,7 +45,7 @@ #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();
Modified: openbios-devel/config/examples/cross-ppc_config.xml =================================================================== --- openbios-devel/config/examples/cross-ppc_config.xml 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/config/examples/cross-ppc_config.xml 2008-12-20 14:48:40 UTC (rev 292) @@ -66,7 +66,10 @@ <option name="CONFIG_DRIVER_PCI" type="boolean" value="true"/> <option name="CONFIG_DEBUG_PCI" type="boolean" value="true"/> <option name="CONFIG_DRIVER_IDE" type="boolean" value="true"/> - <option name="CONFIG_IDE_NUM_CHANNELS" type="integer" value="4"/> + <option name="CONFIG_IDE_NUM_CHANNELS" type="integer" value="2"/> + <option name="CONFIG_IDE_FIRST_UNIT" type="integer" value="1"/> + <option name="CONFIG_IDE_DEV_NAME" type="string" value="ata-%d"/> + <option name="CONFIG_IDE_DEV_TYPE" type="string" value="ata"/> <option name="CONFIG_DEBUG_IDE" type="boolean" value="false"/> <option name="CONFIG_DRIVER_ADB" type="boolean" value="true"/> <option name="CONFIG_DRIVER_VGA" type="boolean" value="true"/>
Modified: openbios-devel/config/xml/config-c.xsl =================================================================== --- openbios-devel/config/xml/config-c.xsl 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/config/xml/config-c.xsl 2008-12-20 14:48:40 UTC (rev 292) @@ -34,6 +34,11 @@ <xsl:value-of select="@name"/>xsl:text </xsl:text> <xsl:value-of select="@value"/> </xsl:when> + + <!-- config option "string" --> + <xsl:when test="@type='string'"> + xsl:text#define </xsl:text> + <xsl:value-of select="@name"/>xsl:text </xsl:text> "<xsl:value-of select="@value"/>" </xsl:when>
<!-- unsupported config option: bail out --> xsl:otherwise
Modified: openbios-devel/config/xml/config-forth.xsl =================================================================== --- openbios-devel/config/xml/config-forth.xsl 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/config/xml/config-forth.xsl 2008-12-20 14:48:40 UTC (rev 292) @@ -26,6 +26,9 @@ <xsl:value-of select="@name"/> xsl:text </xsl:text> </xsl:when> + <!-- config option "string" --> + <xsl:when test="@type='string'"> + </xsl:when> xsl:otherwise <xsl:message terminate="yes"> ERROR: configuration option '<xsl:value-of select="@name"/>' has unsupported type '<xsl:value-of select="@type"/>'.</xsl:message> </xsl:otherwise>
Modified: openbios-devel/drivers/build.xml =================================================================== --- openbios-devel/drivers/build.xml 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/drivers/build.xml 2008-12-20 14:48:40 UTC (rev 292) @@ -19,7 +19,6 @@
<dictionary name="openbios" target="forth"> <object source="pci.fs" condition="DRIVER_PCI"/> - <object source="ide.fs" condition="DRIVER_IDE"/> <object source="sbus.fs" condition="DRIVER_SBUS"/> <object source="esp.fs" condition="DRIVER_ESP"/> </dictionary>
Modified: openbios-devel/drivers/ide.c =================================================================== --- openbios-devel/drivers/ide.c 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/drivers/ide.c 2008-12-20 14:48:40 UTC (rev 292) @@ -13,11 +13,6 @@ * */
-/* - * TODO: - * - Really probe for interfaces, don't just rely on legacy - */ - #include "openbios/config.h" #include "openbios/bindings.h" #include "openbios/kernel.h" @@ -43,13 +38,30 @@ #endif #define IDE_MAX_CHANNELS 4
+#ifndef CONFIG_IDE_FIRST_UNIT +#define FIRST_UNIT 0 +#else +#define FIRST_UNIT CONFIG_IDE_FIRST_UNIT +#endif + +#ifndef CONFIG_IDE_DEV_TYPE +#define DEV_TYPE "ide" +#else +#define DEV_TYPE CONFIG_IDE_DEV_TYPE +#endif + +#ifndef CONFIG_IDE_DEV_NAME +#define DEV_NAME "ide%d" +#else +#define DEV_NAME CONFIG_IDE_DEV_NAME +#endif + +static int current_channel = FIRST_UNIT; + static struct ide_channel ob_ide_channels[IDE_MAX_CHANNELS];
-/* - * FIXME: probe, we just hardwire legacy ports for now - */ -static const int io_ports[IDE_MAX_CHANNELS] = { 0x1f0, 0x170, 0x1e8, 0x168 }; -static const int ctl_ports[IDE_MAX_CHANNELS] = { 0x3f6, 0x376, 0x3ee, 0x36e }; +static int io_ports[IDE_MAX_CHANNELS]; +static int ctl_ports[IDE_MAX_CHANNELS];
/* * don't be pedantic @@ -634,6 +646,9 @@ struct atapi_command *cmd = &drive->channel->atapi_cmd; struct atapi_capacity cap;
+#ifdef CONFIG_DEBUG_IDE + printk("ob_ide_atapi_drive_ready\n"); +#endif /* * Test Unit Ready is like a ping */ @@ -835,7 +850,8 @@ return 1;
#ifdef CONFIG_DEBUG_IDE - printk("ob_ide_read_sectors: block=%Ld sectors=%u\n", (unsigned long) block, sectors); + printk("ob_ide_read_sectors: block=%lu sectors=%u\n", + (unsigned long) block, sectors); #endif
if (drive->type == ide_type_ata) @@ -1133,6 +1149,9 @@ ob_ide_max_transfer(int *idx) { struct ide_drive *drive=&ob_ide_channels[idx[1]].drives[idx[0]]; +#ifdef CONFIG_DEBUG_IDE + printk("max_transfer %x\n", drive->max_sectors * drive->bs); +#endif
PUSH(drive->max_sectors * drive->bs); } @@ -1171,6 +1190,9 @@ ob_ide_block_size(int *idx) { struct ide_drive *drive=&ob_ide_channels[idx[1]].drives[idx[0]]; +#ifdef CONFIG_DEBUG_IDE + printk("ob_ide_block_size: block size %x\n", drive->bs); +#endif PUSH(drive->bs); }
@@ -1184,6 +1206,10 @@ fword("device-type");
// Set dummy reg properties + + set_int_property(ph, "#address-cells", 1); + set_int_property(ph, "#size-cells", 0); + props[0] = __cpu_to_be32(0); props[1] = __cpu_to_be32(0); props[2] = __cpu_to_be32(0); set_property(ph, "reg", (char *)&props, 3*sizeof(int));
@@ -1205,7 +1231,7 @@ fword("ihandle>phandle"); ph=(phandle_t)POP(); idename=get_property(ph, "name", &len); - idx[1]=idename[3]-0x30; + idx[1]=(idename[strlen(idename) - 1] - '0' - FIRST_UNIT) % 2;
#ifdef CONFIG_DEBUG_IDE printk("opening channel %d unit %d\n", idx[1], idx[0]); @@ -1249,20 +1275,21 @@ phandle_t ph=get_cur_dev(); char *idename;
- set_int_property(ph, "#address-cells", 1); - set_int_property(ph, "#size-cells", 0); - /* set device type */ - push_str("ide"); + push_str(DEV_TYPE); fword("device-type");
idename=get_property(ph, "name", &len); - devnum=idename[3]-0x30; + devnum=idename[strlen(idename) - 1] - '0' - FIRST_UNIT;
/* Create interrupt properties. */ props[0]=14; props[1]=0; set_property(ph, "interrupts", (char *)&props, 2*sizeof(int));
+ set_property(ph, "compatible", "pci1095,646\0pci1095,646\0pciclass,01018f", 40); + set_int_property(ph, "#address-cells", 1); + set_int_property(ph, "#size-cells", 0); + props[0] = __cpu_to_be32(io_ports[devnum]); props[1] = __cpu_to_be32(1); props[2] = __cpu_to_be32(8); props[3] = __cpu_to_be32(ctl_ports[devnum]); @@ -1281,16 +1308,21 @@ { "decode-unit", ob_ide_ctrl_decodeunit }, };
-int ob_ide_init(void) +int ob_ide_init(const char *path, uint32_t io_port0, uint32_t ctl_port0, + uint32_t io_port1, uint32_t ctl_port1) { int i, j; - - const char *nodetemp_chan = "/pci/isa/ide%d"; - const char *nodetemp = "/pci/isa/ide%d/%s"; + const char * nodetemp_chan = "%s/"DEV_NAME; + const char * nodetemp = "%s/"DEV_NAME"/%s"; char nodebuff[32]; phandle_t dnode;
- for (i = 0; i < IDE_NUM_CHANNELS; i++) { + io_ports[0] = io_port0; + ctl_ports[0] = ctl_port0 + 2; + io_ports[1] = io_port1; + ctl_ports[1] = ctl_port1 + 2; + + for (i = 0; i < IDE_NUM_CHANNELS; i++, current_channel++) { struct ide_channel *chan = &ob_ide_channels[i];
chan->mmio = 0; @@ -1330,10 +1362,13 @@
ob_ide_identify_drives(chan);
- snprintf(nodebuff, sizeof(nodebuff), nodetemp_chan, i); + snprintf(nodebuff, sizeof(nodebuff), nodetemp_chan, path, + current_channel); REGISTER_NAMED_NODE(ob_ide_ctrl, nodebuff); + printk(DEV_NAME": [io ports 0x%x-0x%x,0x%x]\n", + current_channel, chan->io_regs[0], + chan->io_regs[0] + 7, chan->io_regs[8]);
- printk("ide%d: [io ports 0x%x-0x%x,0x%x]\n", i, chan->io_regs[0], chan->io_regs[0] + 7, chan->io_regs[8]); for (j = 0; j < 2; j++) { struct ide_drive *drive = &chan->drives[j]; const char *media = "UNKNOWN"; @@ -1357,8 +1392,8 @@ break; } printk("%s]: %s\n", media, drive->model); - snprintf(nodebuff, sizeof(nodebuff), nodetemp, i, - media); + snprintf(nodebuff, sizeof(nodebuff), nodetemp, path, + current_channel, media); REGISTER_NAMED_NODE(ob_ide, nodebuff); dnode=find_dev(nodebuff); set_int_property(dnode, "reg", j);
Modified: openbios-devel/drivers/pci.c =================================================================== --- openbios-devel/drivers/pci.c 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/drivers/pci.c 2008-12-20 14:48:40 UTC (rev 292) @@ -147,13 +147,11 @@
static int ide_config_cb2 (const pci_config_t *config) { -#if 0 - ide_init(config->path, - config->regions[0] & ~0x0000000F, - config->regions[1] & ~0x0000000F, - config->regions[2] & ~0x0000000F, - config->regions[3] & ~0x0000000F); -#endif + ob_ide_init(config->path, + config->regions[0] & ~0x0000000F, + config->regions[1] & ~0x0000000F, + config->regions[2] & ~0x0000000F, + config->regions[3] & ~0x0000000F); return 0; }
@@ -1092,6 +1090,7 @@ phandle_t pic_handle; static int macio_config_cb (const pci_config_t *config) { +#ifdef CONFIG_PPC char buf[64]; phandle_t ph; cell props[2]; @@ -1108,21 +1107,10 @@ set_property(ph, "reg", &props, sizeof(props)); pic_handle = ph;
-#if 0 cuda_init(config->path, config->regions[0]); macio_nvram_init(config->path, config->regions[0]); - ide_init(config->path, - config->regions[0] + 0x1f000, - config->regions[0] + 0x1f000 + 0x1000, - config->regions[0] + 0x1f000 + 0x2000, - config->regions[0] + 0x1f000 + 0x3000); #endif -#if 0 - OF_finalize_pci_macio(device->common.OF_private, - device->regions[0] & ~0x0000000F, device->sizes[0], - private_data); -#endif - return 0; + return 0; }
static const pci_dev_t misc_pci[] = {
Modified: openbios-devel/include/openbios/drivers.h =================================================================== --- openbios-devel/include/openbios/drivers.h 2008-12-18 20:44:20 UTC (rev 291) +++ openbios-devel/include/openbios/drivers.h 2008-12-20 14:48:40 UTC (rev 292) @@ -26,7 +26,8 @@ #endif #endif #ifdef CONFIG_DRIVER_IDE -int ob_ide_init(void); +int ob_ide_init(const char *path, uint32_t io_port0, uint32_t ctl_port0, + uint32_t io_port1, uint32_t ctl_port1); #endif #ifdef CONFIG_DRIVER_ESP int ob_esp_init(unsigned int slot, uint64_t base, unsigned long espoffset,