Index: c/src/lib/libbsp/arm/rtl22xx/ChangeLog
===================================================================
--- c/src/lib/libbsp/arm/rtl22xx/ChangeLog	(revision 12d853d54be8fd75a66a1e9582ce592ff35ed6e3)
+++ c/src/lib/libbsp/arm/rtl22xx/ChangeLog	(revision f560d0ac2228ecdc9d4c161172c5dddca3015a30)
@@ -1,2 +1,9 @@
+2008-09-14	Joel Sherrill <joel.sherrill@oarcorp.com>
+
+	* Makefile.am, configure.ac, startup/bspstart.c: Split out
+	bsp_get_work_area() into its own file and user BSP Framework to
+	perform more initialization. Use same shared implementation as
+	edb7312 and csb336.
+
 2008-05-14	Joel Sherrill <joel.sherrill@OARcorp.com>
 
Index: c/src/lib/libbsp/arm/rtl22xx/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/rtl22xx/Makefile.am	(revision 12d853d54be8fd75a66a1e9582ce592ff35ed6e3)
+++ c/src/lib/libbsp/arm/rtl22xx/Makefile.am	(revision f560d0ac2228ecdc9d4c161172c5dddca3015a30)
@@ -29,7 +29,8 @@
 include_HEADERS += ../../arm/shared/comm/uart.h
 startup_SOURCES = ../../shared/bsplibc.c ../../shared/bsppost.c \
-    ../../shared/bsppredriverhook.c \
-    startup/bspstart.c startup/bspclean.c ../../shared/bootcard.c \
-    ../../shared/sbrk.c ../../shared/gnatinstallhandler.c
+    ../../shared/bsppredriverhook.c ../../shared/bsppretaskinghook.c \
+    ../shared/bspgetworkarea.c startup/bspstart.c startup/bspclean.c \
+    ../../shared/bootcard.c ../../shared/sbrk.c \
+    ../../shared/gnatinstallhandler.c
 console_SOURCES = ../../shared/console.c
 simple_abort_SOURCES = ../shared/abort/simple_abort.c
Index: c/src/lib/libbsp/arm/rtl22xx/configure.ac
===================================================================
--- c/src/lib/libbsp/arm/rtl22xx/configure.ac	(revision 12d853d54be8fd75a66a1e9582ce592ff35ed6e3)
+++ c/src/lib/libbsp/arm/rtl22xx/configure.ac	(revision f560d0ac2228ecdc9d4c161172c5dddca3015a30)
@@ -19,4 +19,6 @@
 AM_CONDITIONAL(HAS_NETWORKING,test "$HAS_NETWORKING" = "yes")
 
+RTEMS_BSP_BOOTCARD_HANDLES_RAM_ALLOCATION
+
 # Explicitly list all Makefiles here
 AC_CONFIG_FILES([Makefile])
Index: c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c
===================================================================
--- c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c	(revision 12d853d54be8fd75a66a1e9582ce592ff35ed6e3)
+++ c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c	(revision f560d0ac2228ecdc9d4c161172c5dddca3015a30)
@@ -6,10 +6,8 @@
  *  The license and distribution terms for this file may be
  *  found in the file LICENSE in this distribution or at
- *
  *  http://www.rtems.com/license/LICENSE.
  *
- *
  *  $Id$
-*/
+ */
 
 #include <bsp.h>
@@ -18,206 +16,91 @@
 #include <lpc22xx.h>
 
-
-/*************************************************************/
-/* Macros                                                    */
-/*************************************************************/
-
-/*************************************************************/
-/* Data Structures                                           */
-/*************************************************************/
-
-/*************************************************************/
-/* Global Variables                                          */
-/*************************************************************/
-/*FIX ME:we do not have SDRAM, but can I define mutiple SRAM?*/
-
-extern void            *_flash_size;
-extern void            *_flash_base;
-extern void            *_sdram_size;
-extern void            *_sdram_base;
-extern void            *_bss_free_start;
-extern void            *_bss_start_;
-extern void            *_bss_end_;
-
-unsigned long           free_mem_start;
-unsigned long           free_mem_end;
-
-/*************************************************************/
-/* Function prototypes                                       */
-/*************************************************************/
+/*
+ * Function prototypes
+ */
 extern void rtems_irq_mngt_init(void);
 void bsp_libc_init( void *, uint32_t, int );
 extern void  UART0_Ini(void);
 extern void printi(unsigned long);
-/**************************************************************************/
-/*                                                                        */
-/* NAME: bps_pretasking_hook - Function to setup system before startup    */
-/*                                                                        */
-/* DESCRIPTION:                                                           */
-/*   This function is called before drivers are initialized and used      */
-/*   to setup libc and BSP extensions. It configures non cacheable        */
-/*   SDRAM, SRAM, AIM, and ADM regions and sets up the CPU's memory       */
-/*   protection unit.                                                     */
-/*                                                                        */
-/* GLOBALS USED:                                                          */
-/*   free_mem_start                                                 */
-/*   free_mem_end                                                   */
-/*                                                                        */
-/* RESTRICTIONS/LIMITATIONS:                                              */
-/*   Since this function is setting up libc, it cannot use and libc       */
-/*   functions.                                                           */
-/*                                                                        */
-/**************************************************************************/
-void bsp_pretasking_hook(void)
-{
-    uint32_t   heap_start;
-    uint32_t   heap_size;
 
-    /*
-     * Set up the heap. It uses all free SDRAM except that reserved
-     * for non-cached uses.
-     */
-    heap_start =  free_mem_start;
-
-    /*   heap_size = (free_mem_end - heap_start - MEM_NOCACHE_SIZE); */
-    /*the board seems to have only 512K memory, we use 256K as heap, 256K to 
-    store the .text*/
-    heap_size = 0x40000;
-
-    bsp_libc_init((void *)heap_start, heap_size, 0);
-} /* bsp_pretasking_hook */
-
-/**************************************************************************/
-/*                                                                        */
-/* NAME: bsp_start_default - BSP initialization function                  */
-/*                                                                        */
-/* DESCRIPTION:                                                           */
-/*   This function is called before RTEMS is initialized and used         */
-/*   adjust the kernel's configuration.                                   */
-/*                                                                        */
-/*   This function also configures the CPU's memory protection unit.      */
-/*                                                                        */
-/* GLOBALS USED:                                                          */
-/*    Configuration                                                       */
-/*    free_mem_start                                                      */
-/*    free_mem_end                                                        */
-/*    free_mem_nocache_start                                              */
-/*    _bss_free_start                                                     */
-/*    mpu_region_tbl                                                      */
-/*                                                                        */
-/*                                                                        */
-/*                                                                        */
-/*                                                                        */
-/* RESTRICTIONS/LIMITATIONS:                                              */
-/*   Since RTEMS is not configured, no RTEMS functions can be called.     */
-/*                                                                        */
-/**************************************************************************/
+/*
+ * bsp_start_default - BSP initialization function
+ *
+ * This function is called before RTEMS is initialized and used
+ * adjust the kernel's configuration.
+ *
+ * This function also configures the CPU's memory protection unit.
+ *
+ * RESTRICTIONS/LIMITATIONS:
+ *   Since RTEMS is not configured, no RTEMS functions can be called.
+ *
+ */
 void bsp_start_default( void )
 {
-    PINSEL2 =0x0f814914;
-    BCFG0 = 0x1000ffef;
-    BCFG1 = 0x1000ffef;
+  PINSEL2 =0x0f814914;
+  BCFG0 = 0x1000ffef;
+  BCFG1 = 0x1000ffef;
 
-    MEMMAP = 0x2;  //debug and excute outside chip
+  MEMMAP = 0x2;  //debug and excute outside chip
 
-    PLLCON = 1;
-#if (Fpclk / (Fcclk / 4)) == 1
+  PLLCON = 1;
+  #if (Fpclk / (Fcclk / 4)) == 1
     VPBDIV = 0;
-#endif
-#if (Fpclk / (Fcclk / 4)) == 2
+  #endif
+  #if (Fpclk / (Fcclk / 4)) == 2
     VPBDIV = 2;
-#endif
-#if (Fpclk / (Fcclk / 4)) == 4
+  #endif
+  #if (Fpclk / (Fcclk / 4)) == 4
     VPBDIV = 1;
-#endif
+  #endif
 
-#if (Fcco / Fcclk) == 2
+  #if (Fcco / Fcclk) == 2
     PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
-#endif
-#if (Fcco / Fcclk) == 4
+  #endif
+  #if (Fcco / Fcclk) == 4
     PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
-#endif
-#if (Fcco / Fcclk) == 8
+  #endif
+  #if (Fcco / Fcclk) == 8
     PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
-#endif
-#if (Fcco / Fcclk) == 16
+  #endif
+  #if (Fcco / Fcclk) == 16
     PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
-#endif
-    PLLFEED = 0xaa;
-    PLLFEED = 0x55;
-    while((PLLSTAT & (1 << 10)) == 0);
-    PLLCON = 3;
-    PLLFEED = 0xaa;
-    PLLFEED = 0x55;
+  #endif
+  PLLFEED = 0xaa;
+  PLLFEED = 0x55;
+  while((PLLSTAT & (1 << 10)) == 0);
+  PLLCON = 3;
+  PLLFEED = 0xaa;
+  PLLFEED = 0x55;
 
-    /* memory configure */
-    /* it is not needed in my formatter board */
-    //MAMCR = 0;
-    // MAMTIM = 3;
-    //MAMCR = 2;
+  /* memory configure */
+  /* it is not needed in my formatter board */
+  //MAMCR = 0;
+  // MAMTIM = 3;
+  //MAMCR = 2;
 
-    /* init VIC */
-    VICIntEnClr = 0xffffffff;
-    VICVectAddr = 0;
-    VICIntSelect = 0;
+  /* init VIC */
+  VICIntEnClr = 0xffffffff;
+  VICVectAddr = 0;
+  VICIntSelect = 0;
 
-    /* disable interrupts */
-    /* Setup interrupt controller.*/
-    VICProtection = 0;
+  /* disable interrupts */
+  /* Setup interrupt controller.*/
+  VICProtection = 0;
 
-    /* Place RTEMS workspace at beginning of free memory. */
-    Configuration.work_space_start = (void *)&_bss_free_start;
+  UART0_Ini();
 
-    free_mem_start = ((uint32_t)&_bss_free_start +
-                      rtems_configuration_get_work_space_size());
+  /*
+   * Init rtems exceptions management
+   */
+  rtems_exception_init_mngt();
 
-    free_mem_end = ((uint32_t)&_sdram_base + (uint32_t)&_sdram_size);
-
-    UART0_Ini();
-
-    #if 0
-    printk(" bsp_start_default 0x%08x\n", (int)&bsp_start_defalt);
-    printk(" _bss_free_start 0x%08x\n", (int)&_bss_free_start);
-    printk(" free_mem_start 0x%08x\n", (int)free_mem_start);
-    printk(" _sdram_base 0x%08x\n", (int)&_sdram_base);
-    printk(" _sdram_size 0x%08x\n", (int)&_sdram_size);
-    printk(" free_mem_end 0x%08x\n", (int)free_mem_end);
-    #endif
-
-    /*
-     * Init rtems exceptions management
-     */
-    rtems_exception_init_mngt();
-
-    /*
-     * Init rtems interrupt management
-     */
-    rtems_irq_mngt_init();
-
-    /*
-     *  The following information is very useful when debugging.
-     */
-#if 0
-
-    printk( "work_space_size = 0x%x\n",
-            rtems_configuration_get_work_space_size() );
-    printk( "microseconds_per_tick = 0x%x\n",
-            rtems_configuration_get_microseconds_per_tick() );
-    printk( "ticks_per_timeslice = 0x%x\n",
-            rtems_configuration_get_ticks_per_timeslice() );
-
-    /*  printk( "_stack_size = 0x%x\n", _stack_size );*/
-    printk( "work_space_start = 0x%x\n", Configuration.work_space_start );
-    printk( "work_space_size = 0x%x\n", rtems_configuration_get_work_space_size() );
-#endif
+  /*
+   * Init rtems interrupt management
+   */
+  rtems_irq_mngt_init();
 } /* bsp_start */
 
 
-/**
- *  Reset the system.
- *
- *  This functions enables the watchdog and waits for it to 
- *  fire, thus resetting the system.
- */
 /**
  *  Reset the system.
