changeset 1230:7d2ca52b341a

Improve IDE handling - better for systems where IDE may be missing
author gthomas
date Sat, 20 Sep 2003 19:22:19 +0000
parents 2159dd1d9220
children 3c221a743075
files packages/hal/arm/xscale/picasso/current/ChangeLog packages/hal/arm/xscale/picasso/current/src/picasso_ide.c packages/hal/arm/xscale/uE250/current/ChangeLog packages/hal/arm/xscale/uE250/current/src/uE250_ide.c packages/hal/i386/pcmb/current/ChangeLog packages/hal/i386/pcmb/current/include/pcmb_io.h packages/hal/mips/malta/current/ChangeLog packages/hal/mips/malta/current/src/plf_misc.c packages/redboot/current/ChangeLog packages/redboot/current/src/fs/ide.c
diffstat 10 files changed, 33 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/arm/xscale/picasso/current/ChangeLog
+++ b/packages/hal/arm/xscale/picasso/current/ChangeLog
@@ -1,3 +1,7 @@
+2003-09-20  Gary Thomas  <gary@mlbassoc.com>
+
+	* src/picasso_ide.c: IDE init needs to return number of controllers found.
+
 2003-08-22  Gary Thomas  <gary@mind.be>
 
 	* src/xilinx-load.c: 
--- a/packages/hal/arm/xscale/picasso/current/src/picasso_ide.c
+++ b/packages/hal/arm/xscale/picasso/current/src/picasso_ide.c
@@ -108,7 +108,7 @@ cyg_hal_plf_ide_write_control(int ctlr, 
     pci_io_write_8(ide_ctrl[ctlr].ctl_bar + reg, val);
 }
 
-void 
+int
 cyg_hal_plf_ide_init(void)
 {
     int i;
@@ -129,8 +129,10 @@ cyg_hal_plf_ide_init(void)
             ide_ctrl[i].cmd_bar = ide_info.base_map[(2*i)+0] & 0xFFFFFFFE;
             ide_ctrl[i].ctl_bar = ide_info.base_map[(2*i)+1] & 0xFFFFFFFE;
         }
+        return HAL_IDE_NUM_CONTROLLERS;
     } else {
         diag_printf("Can't find IDE controller!\n");
+        return 0;
     }
 }
 
--- a/packages/hal/arm/xscale/uE250/current/ChangeLog
+++ b/packages/hal/arm/xscale/uE250/current/ChangeLog
@@ -1,3 +1,7 @@
+2003-09-20  Gary Thomas  <gary@mlbassoc.com>
+
+	* src/uE250_ide.c: IDE init needs to return number of controllers found.
+
 2003-08-08  Gary Thomas  <gary@mind.be>
 
 	* src/uE250_pci.c: 
--- a/packages/hal/arm/xscale/uE250/current/src/uE250_ide.c
+++ b/packages/hal/arm/xscale/uE250/current/src/uE250_ide.c
@@ -108,7 +108,7 @@ cyg_hal_plf_ide_write_control(int ctlr, 
     pci_io_write_8(ide_ctrl[ctlr].ctl_bar + reg, val);
 }
 
-void 
+int
 cyg_hal_plf_ide_init(void)
 {
     int i;
@@ -129,8 +129,10 @@ cyg_hal_plf_ide_init(void)
             ide_ctrl[i].cmd_bar = ide_info.base_map[(2*i)+0] & 0xFFFFFFFE;
             ide_ctrl[i].ctl_bar = ide_info.base_map[(2*i)+1] & 0xFFFFFFFE;
         }
+        return HAL_IDE_NUM_CONTROLLERS;
     } else {
         diag_printf("Can't find IDE controller!\n");
+        return 0;
     }
 }
 
--- a/packages/hal/i386/pcmb/current/ChangeLog
+++ b/packages/hal/i386/pcmb/current/ChangeLog
@@ -1,3 +1,7 @@
+2003-09-20  Gary Thomas  <gary@mlbassoc.com>
+
+	* include/pcmb_io.h: IDE init needs to return number of controllers found.
+
 2003-07-23  Nick Garnett  <nickg@balti.calivar.com>
 
 	* include/pcmb_serial.h: Fixed bogus test on
--- a/packages/hal/i386/pcmb/current/include/pcmb_io.h
+++ b/packages/hal/i386/pcmb/current/include/pcmb_io.h
@@ -218,7 +218,7 @@ CYG_MACRO_END
 #define HAL_IDE_NUM_CONTROLLERS 2
 
 // Initialize the IDE controller(s).
-#define HAL_IDE_INIT()
+#define HAL_IDE_INIT() (HAL_IDE_NUM_CONTROLLERS)
 
 #define __PCMB_IDE_PRI_CMD   0x1f0
 #define __PCMB_IDE_PRI_CTL   0x3f4
--- a/packages/hal/mips/malta/current/ChangeLog
+++ b/packages/hal/mips/malta/current/ChangeLog
@@ -1,3 +1,7 @@
+2003-09-20  Gary Thomas  <gary@mlbassoc.com>
+
+	* src/plf_misc.c: IDE init needs to return number of controllers found.
+
 2003-07-18  Nick Garnett  <nickg@balti.calivar.com>
 
 	* cdl/hal_mips_malta.cdl:
--- a/packages/hal/mips/malta/current/src/plf_misc.c
+++ b/packages/hal/mips/malta/current/src/plf_misc.c
@@ -450,7 +450,8 @@ void cyg_hal_plf_pci_cfg_write_byte (cyg
 /*------------------------------------------------------------------------*/
 /* IDE support                                                            */
 
-void cyg_hal_plf_ide_init(void)
+int
+cyg_hal_plf_ide_init(void)
 {
     cyg_uint32 v;
 
@@ -460,6 +461,7 @@ void cyg_hal_plf_ide_init(void)
     v |= (CYG_PCI_CFG_PIIX4_IDETIM_IDE << 16) | CYG_PCI_CFG_PIIX4_IDETIM_IDE;
     cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_IDE),
                                     CYG_PCI_CFG_PIIX4_IDETIM, v);
+    return HAL_IDE_NUM_CONTROLLERS;
 }
 
 
--- a/packages/redboot/current/ChangeLog
+++ b/packages/redboot/current/ChangeLog
@@ -1,5 +1,9 @@
 2003-09-20  Gary Thomas  <gary@mlbassoc.com>
 
+	* src/fs/ide.c: Improve IDE handling by having init function return
+	actual number of controllers detected.  This avoids really long times
+	for startup if the controller is missing.
+
 	* src/net/bootp.c: Rework to use full DHCP protocol.  Previously,
 	once an offer came in, RedBoot was happy, without actually making
 	the address reservation and waiting for the final acknowledgement.
--- a/packages/redboot/current/src/fs/ide.c
+++ b/packages/redboot/current/src/fs/ide.c
@@ -408,18 +408,18 @@ ide_init(void)
     cyg_uint32 buf[SECTOR_SIZE/sizeof(cyg_uint32)], u32;
     cyg_uint16 u16;
     cyg_uint8 u8;
-    int i, j;
+    int i, j, num_controllers;
     disk_t disk;
     struct ide_priv *priv;
 
 #define DEV_INIT_VAL ((j << 4) | 0xA0)
 
-    HAL_IDE_INIT();
+    num_controllers = HAL_IDE_INIT();
 
     CYGACC_CALL_IF_DELAY_US(5);
 
     priv = ide_privs;
-    for (i = 0; i < HAL_IDE_NUM_CONTROLLERS; i++) {
+    for (i = 0; i < num_controllers; i++) {
 
 	// soft reset the devices on this controller
 	if (!ide_reset(i))