Index: c/src/lib/libbsp/powerpc/mbx8xx/ChangeLog
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/ChangeLog	(revision bf71e25ee4492ebb0e7732fffe397f6b133f361c)
+++ c/src/lib/libbsp/powerpc/mbx8xx/ChangeLog	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -1,2 +1,7 @@
+2003-03-25	Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
+
+	PR 368/filesystem
+	* ide/*: added BSP support for libchip standard ide driver
+
 2003-03-06	Ralf Corsepius <corsepiu@faw.uni-ulm.de>
 
Index: c/src/lib/libbsp/powerpc/mbx8xx/Makefile.am
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/Makefile.am	(revision bf71e25ee4492ebb0e7732fffe397f6b133f361c)
+++ c/src/lib/libbsp/powerpc/mbx8xx/Makefile.am	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -7,6 +7,6 @@
 # wrapup is the one that actually builds and installs the library
 #  from the individual .rel files built in other directories
-SUBDIRS = include clock console irq network startup vectors \
-    @exceptions@ wrapup
+SUBDIRS = include clock console irq network ide startup vectors \
+    @exceptions@ wrapup 
 
 include $(top_srcdir)/../../bsp.am
Index: c/src/lib/libbsp/powerpc/mbx8xx/configure.ac
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/configure.ac	(revision bf71e25ee4492ebb0e7732fffe397f6b133f361c)
+++ c/src/lib/libbsp/powerpc/mbx8xx/configure.ac	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -123,4 +123,5 @@
 include/Makefile
 irq/Makefile
+ide/Makefile
 network/Makefile
 startup/Makefile
Index: c/src/lib/libbsp/powerpc/mbx8xx/ide/Makefile.am
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/ide/Makefile.am	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
+++ c/src/lib/libbsp/powerpc/mbx8xx/ide/Makefile.am	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -0,0 +1,32 @@
+##
+## Makefile.am,v 1.5 2002/08/11 06:59:03 ralf Exp
+##
+
+
+PGM = # $(ARCH)/console.rel
+
+C_FILES = idecfg.c pcmcia_ide.c
+C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.$(OBJEXT))
+
+OBJS = $(C_O_FILES)
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../../../../../../automake/compile.am
+include $(top_srcdir)/../../../../../../automake/lib.am
+
+#
+# (OPTIONAL) Add local stuff here using +=
+#
+
+$(PGM): $(OBJS)
+	$(make-rel)
+
+# the .rel file built here will be put into libbsp.a by ../wrapup/Makefile
+
+all-local: $(ARCH) $(OBJS) $(PGM)
+
+.PRECIOUS: $(PGM)
+
+EXTRA_DIST = idecfg.c
+
+include $(top_srcdir)/../../../../../../automake/local.am
Index: c/src/lib/libbsp/powerpc/mbx8xx/ide/idecfg.c
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/ide/idecfg.c	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
+++ c/src/lib/libbsp/powerpc/mbx8xx/ide/idecfg.c	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -0,0 +1,51 @@
+/*===============================================================*\
+| Project: RTEMS MBX8xx IDE harddisc driver tables                |
++-----------------------------------------------------------------+
+| File: idecfg.c                                                  |
++-----------------------------------------------------------------+
+|                    Copyright (c) 2003 IMD                       |
+|      Ingenieurbuero fuer Microcomputertechnik Th. Doerfler      |
+|               <Thomas.Doerfler@imd-systems.de>                  |
+|                       all rights reserved                       |
++-----------------------------------------------------------------+
+| this file contains the table of functions for the BSP layer     |
+| for IDE access below the libchip IDE harddisc driver            |
+|                                                                 |
++-----------------------------------------------------------------+
+|   date                      history                        ID   |
+| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
+| 01.14.03  creation                                         doe  |
+\*===============================================================*/
+
+#include <rtems.h>
+#include <bsp.h>
+#include <bsp/mbx.h>
+#include <mpc8xx.h>
+#include <libchip/ide_ctrl.h>
+#include <libchip/ide_ctrl_cfg.h>
+#include <libchip/ide_ctrl_io.h>
+
+
+/*
+ * The following table configures the IDE driver used in this BSP.
+ */
+extern ide_ctrl_fns_t mbx8xx_pcmciaide_ctrl_fns;
+
+/* IDE controllers Table */
+ide_controller_bsp_table_t IDE_Controller_Table[] = {
+  {"/dev/idepcmcia",
+   IDE_STD, /* PCMCIA Flash cards emulate standard IDE controller */
+   &mbx8xx_pcmciaide_ctrl_fns,
+   NULL,  /* no BSP dependent probe needed */
+   FALSE, /* not (yet) initialized */
+   PCMCIA_MEM_ADDR,  /* access address for register set */
+   FALSE,0, /* not (yet) interrupt driven */
+   NULL
+  }
+};
+
+/* Number of rows in IDE_Controller_Table */
+unsigned long IDE_Controller_Count = 
+   sizeof(IDE_Controller_Table)/sizeof(IDE_Controller_Table[0]);
+
+
Index: c/src/lib/libbsp/powerpc/mbx8xx/ide/pcmcia_ide.c
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/ide/pcmcia_ide.c	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
+++ c/src/lib/libbsp/powerpc/mbx8xx/ide/pcmcia_ide.c	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -0,0 +1,385 @@
+/*===============================================================*\
+| Project: RTEMS MBX8xx PCMCIA IDE harddisc driver                |
++-----------------------------------------------------------------+
+| File: pcmcia_ide.c                                              |
++-----------------------------------------------------------------+
+|                    Copyright (c) 2003 IMD                       |
+|      Ingenieurbuero fuer Microcomputertechnik Th. Doerfler      |
+|               <Thomas.Doerfler@imd-systems.de>                  |
+|                       all rights reserved                       |
++-----------------------------------------------------------------+
+| this file contains the BSP layer for PCMCIA IDE access below the|
+| libchip IDE harddisc driver                                     |
+| based on a board specific driver from                           |
+| Eugeny S. Mints, Oktet                                          |
+|                                                                 |
+|  The license and distribution terms for this file may be        |
+|  found in the file LICENSE in this distribution or at           |
+|  http://www.OARcorp.com/rtems/license.html.                     |
+|                                                                 |
++-----------------------------------------------------------------+
+|   date                      history                        ID   |
+| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
+| 01.14.03  creation                                         doe  |
+\*===============================================================*/
+
+#include <rtems.h>
+#include <bsp.h>
+#include <bsp/mbx.h>
+#include <mpc8xx.h>
+#include <libchip/ide_ctrl.h>
+#include <libchip/ide_ctrl_cfg.h>
+#include <libchip/ide_ctrl_io.h>
+
+/* #define DATAREG_16BIT */ /* 16 bit mode not yet working */
+/* #define DEBUG_OUT */
+/* 
+ * support functions for PCMCIA IDE IF 
+ */
+/*=========================================================================*\
+| Function:                                                                 |
+\*-------------------------------------------------------------------------*/
+boolean mbx8xx_pcmciaide_probe
+(
+/*-------------------------------------------------------------------------*\
+| Purpose:                                                                  |
+|  This function should probe, whether a PCMCIA flash disk is available     |
++---------------------------------------------------------------------------+
+| Input Parameters:                                                         |
+\*-------------------------------------------------------------------------*/
+ int minor
+ )
+/*-------------------------------------------------------------------------*\
+| Return Value:                                                             |
+|    TRUE, when flash disk available                                        |
+\*=========================================================================*/
+{
+  boolean ide_card_plugged = TRUE; /* assume: we have a card plugged in */
+  
+  /*
+   * check, that the CD# pins are low -> a PCMCIA card is plugged in
+   */
+  if ((m8xx.pipr 
+       & (M8xx_PCMCIA_PIPR_CACD1 | M8xx_PCMCIA_PIPR_CACD2)) != 0x00) {
+    ide_card_plugged = FALSE;
+  }
+  /*
+   * set supply voltage to 3.3V
+   * FIXME: this should be depending on state of VS1/2 pins
+   * FIXME: there should be a shadow variable for the BSP for CSR2 access
+   */
+  *((volatile unsigned8 *)MBX_CSR2) = 0xb0;
+  /*
+   * check card information service whether card is a ATA like disk
+   * -> scan for tuple of type 0x21 with content 0x04 0xXX (fixed disk)
+   * -> scan for tuple of type 0x22 with content 0x01 0x01
+   */
+  if (ide_card_plugged) {
+#define CIS_BYTE(pos) (((unsigned8 *)PCMCIA_ATTRB_ADDR)[(pos)*2])
+    int cis_pos = 0;
+    boolean fixed_disk_tuple_found = FALSE;
+    boolean ata_disk_tuple_found   = FALSE;
+    
+    while ((cis_pos < 256) &&
+	   (CIS_BYTE(cis_pos) != 0xff) &&
+	   (!fixed_disk_tuple_found || !ata_disk_tuple_found)) {
+      /*
+       * check for neede tuples
+       */
+      if ((CIS_BYTE(cis_pos  ) == 0x21) &&
+	  (CIS_BYTE(cis_pos+2) == 0x04)) {
+	fixed_disk_tuple_found = TRUE;
+      }
+      else if ((CIS_BYTE(cis_pos  ) == 0x22) &&
+	       (CIS_BYTE(cis_pos+2) == 0x01) &&
+	       (CIS_BYTE(cis_pos+3) == 0x01)) {
+	ata_disk_tuple_found = TRUE;
+      }
+      /* 
+       * advance using the length field 
+       */
+      cis_pos += CIS_BYTE(cis_pos+1)+2; 
+    }
+    ide_card_plugged = fixed_disk_tuple_found && ata_disk_tuple_found;
+  }
+  return ide_card_plugged;
+}
+
+/*=========================================================================*\
+| Function:                                                                 |
+\*-------------------------------------------------------------------------*/
+void mbx8xx_pcmciaide_initialize
+(
+/*-------------------------------------------------------------------------*\
+| Purpose:                                                                  |
+|  initialize PCMCIA IDE flash card access                                  |
++---------------------------------------------------------------------------+
+| Input Parameters:                                                         |
+\*-------------------------------------------------------------------------*/
+ int  minor                              /* controller minor number       */
+ )
+/*-------------------------------------------------------------------------*\
+| Return Value:                                                             |
+|    <none>                                                                 |
+\*=========================================================================*/
+{
+  /*
+   * FIXME: enable interrupts, if needed
+   */
+  /*
+   * FIXME: set programming voltage as requested 
+   */
+}
+
+/*=========================================================================*\
+| Function:                                                                 |
+\*-------------------------------------------------------------------------*/
+void mbx8xx_pcmciaide_read_reg
+(
+/*-------------------------------------------------------------------------*\
+| Purpose:                                                                  |
+|  read a PCMCIA IDE controller register                                    |
++---------------------------------------------------------------------------+
+| Input Parameters:                                                         |
+\*-------------------------------------------------------------------------*/
+ int                        minor,  /* controller minor number       */
+ int                        reg,    /* register index to access      */
+ unsigned16                *value   /* ptr to return value location  */
+ )
+/*-------------------------------------------------------------------------*\
+| Return Value:                                                             |
+|    <none>                                                                 |
+\*=========================================================================*/
+{
+  unsigned32  port = IDE_Controller_Table[minor].port1;
+
+  if (reg == IDE_REGISTER_DATA_WORD) {
+#ifdef DATAREG_16BIT
+    *value = *(volatile unsigned16 *)(port+reg);    
+#else
+    *value = ((*(volatile unsigned8 *)(port+reg) << 8) + 
+	      (*(volatile unsigned8 *)(port+reg+1) ));    
+#endif
+  }
+  else {
+    *value = *(volatile unsigned8 *)(port+reg);    
+  }
+#ifdef DEBUG_OUT
+  printk("mbx8xx_pcmciaide_read_reg(0x%x)=0x%x\r\n",reg,*value & 0xff);
+#endif
+}
+
+/*=========================================================================*\
+| Function:                                                                 |
+\*-------------------------------------------------------------------------*/
+void mbx8xx_pcmciaide_write_reg
+(
+/*-------------------------------------------------------------------------*\
+| Purpose:                                                                  |
+|  write a PCMCIA IDE controller register                                   |
++---------------------------------------------------------------------------+
+| Input Parameters:                                                         |
+\*-------------------------------------------------------------------------*/
+ int                        minor,  /* controller minor number       */
+ int                        reg,    /* register index to access      */
+ unsigned16                 value   /* value to write                */
+ )
+/*-------------------------------------------------------------------------*\
+| Return Value:                                                             |
+|    <none>                                                                 |
+\*=========================================================================*/
+{
+  unsigned32  port = IDE_Controller_Table[minor].port1;
+
+#ifdef DEBUG_OUT
+  printk("mbx8xx_pcmciaide_write_reg(0x%x,0x%x)\r\n",reg,value & 0xff);
+#endif
+  if (reg == IDE_REGISTER_DATA_WORD) {
+#ifdef DATAREG_16BIT
+    *(volatile unsigned16 *)(port+reg) = value;    
+#else
+    *(volatile unsigned8 *)(port+reg) = value >> 8;    
+    *(volatile unsigned8 *)(port+reg+1) = value;    
+#endif
+  }
+  else {
+    *(volatile unsigned8 *)(port+reg)= value;    
+  }
+}
+
+/*=========================================================================*\
+| Function:                                                                 |
+\*-------------------------------------------------------------------------*/
+void mbx8xx_pcmciaide_read_block
+(
+/*-------------------------------------------------------------------------*\
+| Purpose:                                                                  |
+|  read a PCMCIA IDE controller register                                    |
++---------------------------------------------------------------------------+
+| Input Parameters:                                                         |
+\*-------------------------------------------------------------------------*/
+ int minor, 
+ unsigned16 block_size, 
+ blkdev_sg_buffer *bufs, 
+ rtems_unsigned32 *cbuf,
+ rtems_unsigned32 *pos
+ )
+/*-------------------------------------------------------------------------*\
+| Return Value:                                                             |
+|    <none>                                                                 |
+\*=========================================================================*/
+{
+  unsigned32  port = IDE_Controller_Table[minor].port1;
+  unsigned16  cnt = 0;
+#ifdef DEBUG_OUT
+  printk("mbx8xx_pcmciaide_read_block()\r\n");
+#endif
+#ifdef DATAREG_16BIT
+  unsigned16 *lbuf = (unsigned16 *)
+    ((unsigned8 *)(bufs[(*cbuf)].buffer) + (*pos));
+#else
+  unsigned8 *lbuf = (unsigned8 *)
+    ((unsigned8 *)(bufs[(*cbuf)].buffer) + (*pos));
+#endif
+  unsigned32  llength = bufs[(*cbuf)].length;
+    
+  while (((*(volatile unsigned8 *)(port+IDE_REGISTER_STATUS)) 
+	  & IDE_REGISTER_STATUS_DRQ) && 
+	 (cnt < block_size)) {
+#ifdef DATAREG_16BIT
+    *lbuf++ = *(volatile unsigned16 *)(port+8); /* 16 bit data port */
+    cnt += 2; 
+    (*pos) += 2;
+#else
+    *lbuf++ = *(volatile unsigned8 *)(port+IDE_REGISTER_DATA);
+    cnt += 1; 
+    (*pos) += 1;
+#endif
+    if ((*pos) == llength) {
+      (*pos) = 0;
+      (*cbuf)++;
+      lbuf = bufs[(*cbuf)].buffer;
+      llength = bufs[(*cbuf)].length;
+    }
+  } 
+}
+
+/*=========================================================================*\
+| Function:                                                                 |
+\*-------------------------------------------------------------------------*/
+void mbx8xx_pcmciaide_write_block
+(
+/*-------------------------------------------------------------------------*\
+| Purpose:                                                                  |
+|  write a PCMCIA IDE controller register                                   |
++---------------------------------------------------------------------------+
+| Input Parameters:                                                         |
+\*-------------------------------------------------------------------------*/
+ int minor, 
+ unsigned16 block_size, 
+ blkdev_sg_buffer *bufs, 
+ rtems_unsigned32 *cbuf,
+ rtems_unsigned32 *pos
+ )
+/*-------------------------------------------------------------------------*\
+| Return Value:                                                             |
+|    <none>                                                                 |
+\*=========================================================================*/
+{
+  unsigned32  port = IDE_Controller_Table[minor].port1;
+  unsigned16  cnt = 0;
+
+#ifdef DEBUG_OUT
+  printk("mbx8xx_pcmciaide_write_block()\r\n");
+#endif
+#ifdef DATA_REG_16BIT
+  unsigned16 *lbuf = (unsigned16 *)
+    ((unsigned8 *)(bufs[(*cbuf)].buffer) + (*pos));
+#else
+  unsigned8 *lbuf = (unsigned8 *)
+    ((unsigned8 *)(bufs[(*cbuf)].buffer) + (*pos));
+#endif
+  unsigned32  llength = bufs[(*cbuf)].length;
+    
+  while (((*(volatile unsigned8 *)(port+IDE_REGISTER_STATUS)) 
+	  & IDE_REGISTER_STATUS_DRQ) && 
+	 (cnt < block_size)) {
+#ifdef DATAREG_16BIT
+    *(volatile unsigned16 *)(port+8) = *lbuf++; /* 16 bit data port */
+    cnt += 2; 
+    (*pos) += 2;
+#else
+    *(volatile unsigned8 *)(port+IDE_REGISTER_DATA) = *lbuf++;
+    cnt += 1; 
+    (*pos) += 1;
+#endif
+    if ((*pos) == llength) {
+      (*pos) = 0;
+      (*cbuf)++;
+      lbuf = bufs[(*cbuf)].buffer;
+      llength = bufs[(*cbuf)].length;
+    }
+  } 
+}
+
+/*=========================================================================*\
+| Function:                                                                 |
+\*-------------------------------------------------------------------------*/
+int mbx8xx_pcmciaide_control
+(
+/*-------------------------------------------------------------------------*\
+| Purpose:                                                                  |
+|  control interface for controller                                         |
++---------------------------------------------------------------------------+
+| Input Parameters:                                                         |
+\*-------------------------------------------------------------------------*/
+ int  minor,                        /* controller minor number       */
+ unsigned32 cmd,                    /* command to send               */
+ void * arg                         /* optional argument             */
+ )
+/*-------------------------------------------------------------------------*\
+| Return Value:                                                             |
+|    <none>                                                                 |
+\*=========================================================================*/
+{
+  return 0;
+}
+
+/*=========================================================================*\
+| Function:                                                                 |
+\*-------------------------------------------------------------------------*/
+rtems_status_code mbx8xx_pcmciaide_config_io_speed
+(
+/*-------------------------------------------------------------------------*\
+| Purpose:                                                                  |
+|  set up transfer speed, if possible                                       |
++---------------------------------------------------------------------------+
+| Input Parameters:                                                         |
+\*-------------------------------------------------------------------------*/
+ int       minor,                   /* controller minor number       */
+ unsigned8 modes_avail              /* optional argument             */
+ )
+/*-------------------------------------------------------------------------*\
+| Return Value:                                                             |
+|    rtems_status_code                                                      |
+\*=========================================================================*/
+{
+  return RTEMS_SUCCESSFUL;
+}
+
+/*
+ * The following table configures the functions used for IDE drivers 
+ * in this BSP.
+ */
+
+ide_ctrl_fns_t mbx8xx_pcmciaide_ctrl_fns = {
+  mbx8xx_pcmciaide_probe,
+  mbx8xx_pcmciaide_initialize,
+  mbx8xx_pcmciaide_control,
+  mbx8xx_pcmciaide_read_reg,
+  mbx8xx_pcmciaide_write_reg,
+  mbx8xx_pcmciaide_read_block,
+  mbx8xx_pcmciaide_write_block,
+  mbx8xx_pcmciaide_config_io_speed
+};
+
Index: c/src/lib/libbsp/powerpc/mbx8xx/include/bsp.h
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/include/bsp.h	(revision bf71e25ee4492ebb0e7732fffe397f6b133f361c)
+++ c/src/lib/libbsp/powerpc/mbx8xx/include/bsp.h	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -114,4 +114,9 @@
 
 /*
+ * indicate, that BSP has IDE driver
+ */
+#define RTEMS_BSP_HAS_IDE_DRIVER
+
+/*
  * How many libio files we want
  */
Index: c/src/lib/libbsp/powerpc/mbx8xx/include/mbx.h
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/include/mbx.h	(revision bf71e25ee4492ebb0e7732fffe397f6b133f361c)
+++ c/src/lib/libbsp/powerpc/mbx8xx/include/mbx.h	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -60,3 +60,5 @@
 #define PCI_CSR_ADDR		((unsigned int)0xfa210000)
 #define PCI_CSR_SIZE		((unsigned int)(64 * 1024))
+
+#define MBX_CSR2 	        (MBX_CSR_ADDR+1)
 #endif
Index: c/src/lib/libbsp/powerpc/mbx8xx/startup/imbx8xx.c
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/startup/imbx8xx.c	(revision bf71e25ee4492ebb0e7732fffe397f6b133f361c)
+++ c/src/lib/libbsp/powerpc/mbx8xx/startup/imbx8xx.c	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -12,4 +12,5 @@
 
 #include <bsp.h>
+#include <bsp/mbx.h>
 
 /*
@@ -157,9 +158,4 @@
   extern unsigned32 simask_copy;
 
-  /*
-   *  Get the SIU interrupt mask.
-   */
-   simask_copy = m8xx.simask;
-  
   /*			
    *  Initialize the Debug Enable Register (DER) to an appropriate
@@ -214,4 +210,10 @@
   _mtspr( M8xx_IMMR, r1 );
 
+  /*
+   *  Get the SIU interrupt mask.
+   *  imd: accessing m8xx.* should not occure before setting up the immr !
+   */
+   simask_copy = m8xx.simask;
+  
   /* 
    * Initialize the SIU Module Configuration Register (SIUMCR) 
@@ -275,5 +277,14 @@
 #if ( defined(mbx821_001) || defined(mbx821_001b) || defined(mbx860_001b) )
   m8xx.plprcr = 0x5F500000;
-#elif ( defined(mbx860_005b) )
+#elif ( defined(mbx860_005b) || \
+        defined(mbx860_002b) || \
+        defined(mbx860_003b) || \
+        defined(mbx860_004b) || \
+        defined(mbx860_006b) || \
+        defined(mbx821_002b) || \
+        defined(mbx821_003b) || \
+        defined(mbx821_004b) || \
+        defined(mbx821_005b) || \
+        defined(mbx821_006b) )
   /* Set the multiplication factor to 0 and clear the timer interrupt status*/
   m8xx.plprcr = 0x00005000;
@@ -283,17 +294,8 @@
         defined(mbx860_004) || \
         defined(mbx860_005) || \
-        defined(mbx860_002b) || \
-        defined(mbx860_003b) || \
-        defined(mbx860_004b) || \
-        defined(mbx860_006b) || \
         defined(mbx821_002) || \
         defined(mbx821_003) || \
         defined(mbx821_004) || \
-        defined(mbx821_005) || \
-        defined(mbx821_002b) || \
-        defined(mbx821_003b) || \
-        defined(mbx821_004b) || \
-        defined(mbx821_005b) || \
-        defined(mbx821_006b) )
+        defined(mbx821_005))
   m8xx.plprcr = 0x4C400000;
 #else
@@ -583,3 +585,51 @@
   m8xx.memc[7]._br = M8xx_BR_BA(0xFC000000) | M8xx_BR_AT(0) | M8xx_BR_PS8 |
 		M8xx_BR_MS_GPCM | M8xx_MEMC_BR_V;
+  /*
+   * PCMCIA initialization
+   */
+  /*
+   * PCMCIA region 0: common memory
+   */
+  m8xx.pbr0 = PCMCIA_MEM_ADDR;
+  m8xx.por0 = (M8xx_PCMCIA_POR_BSIZE_64MB 
+	       | M8xx_PCMCIA_POR_PSHT(15) | M8xx_PCMCIA_POR_PSST(15) 
+	       | M8xx_PCMCIA_POR_PSL(32)  
+	       | M8xx_PCMCIA_POR_PPS_16   | M8xx_PCMCIA_POR_PRS_MEM 
+	       |M8xx_PCMCIA_POR_PSLOT_A   |  M8xx_PCMCIA_POR_VALID);
+  /*
+   * PCMCIA region 1: dma memory
+   */
+  m8xx.pbr1 = PCMCIA_DMA_ADDR;
+  m8xx.por1 = (M8xx_PCMCIA_POR_BSIZE_64MB 
+	       | M8xx_PCMCIA_POR_PSHT(15) | M8xx_PCMCIA_POR_PSST(15) 
+	       | M8xx_PCMCIA_POR_PSL(32)  
+	       | M8xx_PCMCIA_POR_PPS_16   | M8xx_PCMCIA_POR_PRS_DMA 
+	       |M8xx_PCMCIA_POR_PSLOT_A   |  M8xx_PCMCIA_POR_VALID);
+  /*
+   * PCMCIA region 2: attribute memory
+   */
+  m8xx.pbr2 = PCMCIA_ATTRB_ADDR;
+  m8xx.por2 = (M8xx_PCMCIA_POR_BSIZE_64MB 
+	       | M8xx_PCMCIA_POR_PSHT(15) | M8xx_PCMCIA_POR_PSST(15) 
+	       | M8xx_PCMCIA_POR_PSL(32)  
+	       | M8xx_PCMCIA_POR_PPS_16   | M8xx_PCMCIA_POR_PRS_ATT
+	       |M8xx_PCMCIA_POR_PSLOT_A   |  M8xx_PCMCIA_POR_VALID);
+  /*
+   * PCMCIA region 3: I/O access
+   */
+  m8xx.pbr3 = PCMCIA_IO_ADDR;
+  m8xx.por3 = (M8xx_PCMCIA_POR_BSIZE_64MB 
+	       | M8xx_PCMCIA_POR_PSHT(15) | M8xx_PCMCIA_POR_PSST(15) 
+	       | M8xx_PCMCIA_POR_PSL(32)  
+	       | M8xx_PCMCIA_POR_PPS_16   | M8xx_PCMCIA_POR_PRS_IO
+	       |M8xx_PCMCIA_POR_PSLOT_A   |  M8xx_PCMCIA_POR_VALID);
+
+  /*
+   * PCMCIA interface general control reg
+   */
+  m8xx.pgcra = 0; /* no special options set */
+  /*
+   * PCMCIA interface enable reg
+   */
+  m8xx.per   =0; /* no interrupts enabled now */
 }
Index: c/src/lib/libbsp/powerpc/mbx8xx/startup/mmutlbtab.c
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/startup/mmutlbtab.c	(revision bf71e25ee4492ebb0e7732fffe397f6b133f361c)
+++ c/src/lib/libbsp/powerpc/mbx8xx/startup/mmutlbtab.c	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -13,5 +13,5 @@
 #include <bsp.h>
 #include <mpc8xx/mmu.h>
-
+#include <bsp/mbx.h>
 /*
  * This MMU_TLB_table is used to statically initialize the Table Lookaside
@@ -167,5 +167,25 @@
 	 * EPN		TWC	RPN
 	 */
-	{ 0xFA210200,	0x11,	0xFA2109F7 } 	/* QSPAN - PS=4K */
+	{ 0xFA210200,	0x11,	0xFA2109F7 },	/* QSPAN - PS=4K */
+	/*
+	 *
+	 * PCMCIA Spaces: Start address 0xE0000000, 256M?
+	 * For each space (MEM/DMA/ATTRIB/IO) only the first 8MB are mapped
+	 *	ASID=0x0, APG=0x0, guarded memory,
+	 *	R/W,X for all, no ASID comparison, cache-inhibited.
+	 * EPN		                           TWC	
+	 * RPN
+	 */
+	{ (PCMCIA_MEM_ADDR & 0xfffff000) | 0x200, 0x1D,	
+	  (PCMCIA_MEM_ADDR & 0xfffff000) | 0x9F7 },/* PCMCIA Memory - PS=8M */
+
+	{ (PCMCIA_DMA_ADDR & 0xfffff000) | 0x200, 0x1D,	
+	  (PCMCIA_DMA_ADDR & 0xfffff000) | 0x9F7 },/* PCMCIA DMA - PS=8M */
+
+	{ (PCMCIA_ATTRB_ADDR & 0xfffff000) | 0x200, 0x1D,	
+	  (PCMCIA_ATTRB_ADDR & 0xfffff000) | 0x9F7 },/* PCMCIA ATTRIB-PS=8M*/
+
+	{ (PCMCIA_IO_ADDR & 0xfffff000) | 0x200, 0x1D,	
+	  (PCMCIA_IO_ADDR & 0xfffff000) | 0x9F7 }     /* PCMCIA I/O - PS=8M */
 };
 
Index: c/src/lib/libbsp/powerpc/mbx8xx/wrapup/Makefile.am
===================================================================
--- c/src/lib/libbsp/powerpc/mbx8xx/wrapup/Makefile.am	(revision bf71e25ee4492ebb0e7732fffe397f6b133f361c)
+++ c/src/lib/libbsp/powerpc/mbx8xx/wrapup/Makefile.am	(revision 086e708d3f7e1fc2159cea0dbd60f0aa6033d7d0)
@@ -8,5 +8,5 @@
 endif
 
-BSP_PIECES = clock irq startup console vectors $(NETWORKING)
+BSP_PIECES = clock irq ide startup console vectors $(NETWORKING)
 # pieces to pick up out of libcpu/ppc
 # CPU_PIECES = mpc8xx/clock mpc8xx/console-generic mpc8xx/cpm \
