changeset 145:2e9a636d9de9 ecos-sw-2000-12-21

Merge from eCos master repository on 2000-12-21-14:18:40-GMT
author jlarmour
date Fri, 22 Dec 2000 02:37:28 +0000
parents da1052144c56
children bd918119cf0b
files packages/devs/serial/generic/16x5x/current/ChangeLog packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c packages/devs/serial/powerpc/quicc/current/ChangeLog packages/devs/serial/powerpc/quicc/current/src/quicc_smc_serial.c packages/hal/arm/arch/current/ChangeLog packages/hal/arm/arch/current/include/hal_intr.h packages/hal/arm/arch/current/src/vectors.S packages/hal/arm/ebsa285/current/ChangeLog packages/hal/arm/ebsa285/current/cdl/hal_arm_ebsa285.cdl packages/hal/arm/sa11x0/assabet/current/ChangeLog packages/hal/arm/sa11x0/assabet/current/cdl/hal_arm_sa11x0_assabet.cdl packages/hal/arm/sa11x0/assabet/current/include/hal_platform_ints.h packages/hal/arm/sa11x0/assabet/current/src/assabet_misc.c packages/hal/arm/sa11x0/brutus/current/ChangeLog packages/hal/arm/sa11x0/brutus/current/cdl/hal_arm_sa11x0_brutus.cdl packages/hal/arm/sa11x0/brutus/current/include/hal_platform_ints.h packages/hal/arm/sa11x0/brutus/current/src/brutus_misc.c packages/hal/arm/sa11x0/sa1100mm/current/ChangeLog packages/hal/arm/sa11x0/sa1100mm/current/include/hal_platform_ints.h packages/hal/arm/sa11x0/sa1100mm/current/src/sa1100mm_misc.c packages/hal/arm/sa11x0/var/current/ChangeLog packages/hal/arm/sa11x0/var/current/cdl/hal_arm_sa11x0.cdl packages/hal/arm/sa11x0/var/current/include/hal_mm.h packages/hal/arm/sa11x0/var/current/include/hal_var_ints.h packages/hal/common/current/ChangeLog packages/hal/common/current/include/hal_stub.h packages/hal/common/current/src/generic-stub.c packages/hal/common/current/src/hal_if.c packages/hal/powerpc/mbx/current/cdl/hal_powerpc_mbx.cdl packages/hal/sh/arch/current/ChangeLog packages/hal/sh/arch/current/src/vectors.S packages/infra/current/ChangeLog packages/infra/current/include/clist.hxx packages/infra/current/include/cyg_type.h packages/io/eth/current/ChangeLog packages/io/eth/current/src/net/eth_drv.c packages/io/fileio/current/ChangeLog packages/io/fileio/current/src/misc.cxx packages/isoinfra/current/ChangeLog packages/isoinfra/current/cdl/isoinfra.cdl packages/isoinfra/current/include/dlfcn.h packages/kernel/current/ChangeLog packages/kernel/current/cdl/thread.cdl packages/redboot/current/ChangeLog packages/redboot/current/cdl/redboot.cdl packages/redboot/current/src/flash.c packages/redboot/current/src/main.c packages/redboot/current/src/version.c
diffstat 48 files changed, 1034 insertions(+), 747 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/serial/generic/16x5x/current/ChangeLog
+++ b/packages/devs/serial/generic/16x5x/current/ChangeLog
@@ -1,3 +1,8 @@
+2000-12-19   Dave Airlie <airlied@parthus.com>
+
+	* src/ser_16x5x.c: Add defines for FIFO control register
+	(serial_config_port): Use these defines.
+
 2000-12-07  Jesper Skov  <jskov@redhat.com>
 
 	* src/ser_16x5x.c (ISR_LS): Corrected value. Spotted by Dave Airlie.
--- a/packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c
+++ b/packages/devs/serial/generic/16x5x/current/src/ser_16x5x.c
@@ -132,6 +132,17 @@
 #define MSR_RI   0x40
 #define MSR_CD   0x80
 
+// FIFO Control Register
+#define FCR_FE   0x01    // FIFO enable
+#define FCR_CRF  0x02    // Clear receive FIFO
+#define FCR_CTF  0x04    // Clear transmit FIFO
+#define FCR_DMA  0x08    // DMA mode select
+#define FCR_F64  0x20    // Enable 64 byte fifo (16750+)
+#define FCR_RT14 0xC0    // Set Rx trigger at 14
+#define FCR_RT8  0x80    // Set Rx trigger at 8
+#define FCR_RT4  0x40    // Set Rx trigger at 4
+#define FCR_RT1  0x00    // Set Rx trigger at 1
+
 static unsigned char select_word_length[] = {
     LCR_WL5,    // 5 bits / word (char)
     LCR_WL6,
@@ -212,7 +223,7 @@ serial_config_port(serial_channel *chan,
     HAL_WRITE_UINT8(base+REG_ldl, baud_divisor & 0xFF);
     HAL_WRITE_UINT8(base+REG_lcr, _lcr);
     if (init) {
-        HAL_WRITE_UINT8(base+REG_fcr, 0x07);  // Enable and clear FIFO
+        HAL_WRITE_UINT8(base+REG_fcr, FCR_FE|FCR_CRF|FCR_CTF|FCR_RT1);  // Enable and clear FIFO
         if (chan->out_cbuf.len != 0) {
             _ier = IER_RCV;
         } else {
--- a/packages/devs/serial/powerpc/quicc/current/ChangeLog
+++ b/packages/devs/serial/powerpc/quicc/current/ChangeLog
@@ -1,3 +1,10 @@
+2000-12-13  Daniel Lind <daniel.lind@sth.frontec.se>
+
+	* src/quicc_smc_serial.c (quicc_smc_serial_flush): 
+	Don't mark a buffer ready unless it has been fully serviced - in
+	particular, the interrupt bit must be clear.
+	[2000-12-13] committed by Gary Thomas <gthomas@redhat.com>
+
 2000-12-06  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/quicc_smc_serial.c: Remove unread tx_enabled variable from
--- a/packages/devs/serial/powerpc/quicc/current/src/quicc_smc_serial.c
+++ b/packages/devs/serial/powerpc/quicc/current/src/quicc_smc_serial.c
@@ -475,7 +475,8 @@ static void
 quicc_smc_serial_flush(quicc_smc_serial_info *smc_chan)
 {
     volatile struct cp_bufdesc *txbd = smc_chan->txbd;
-    if ((txbd->length > 0) && ((txbd->ctrl & QUICC_BD_CTL_Ready) == 0)) {
+    if ((txbd->length > 0) && 
+        ((txbd->ctrl & (QUICC_BD_CTL_Ready|QUICC_BD_CTL_Int)) == 0)) {
         txbd->ctrl |= QUICC_BD_CTL_Ready|QUICC_BD_CTL_Int;  // Signal buffer ready
         if (txbd->ctrl & QUICC_BD_CTL_Wrap) {
             txbd = smc_chan->tbase;
--- a/packages/hal/arm/arch/current/ChangeLog
+++ b/packages/hal/arm/arch/current/ChangeLog
@@ -1,3 +1,15 @@
+2000-12-13  Hugo Tyson  <hmt@redhat.com>
+
+	* include/hal_intr.h: Handle variant-, and possible overriding
+	platform-, specific interrupt files <cyg/hal/hal_platform_ints.h>.
+	This is to simplify the multiple SA11x0 targets which have no
+	variation there.	
+
+2000-12-11  Gary Thomas  <gthomas@redhat.com>
+
+	* src/vectors.S (warm_reset): 'hal_dram_size' is now only set in
+	platform code - no need to mess with (pure pollution) it here.
+
 2000-11-19  Gary Thomas  <gthomas@redhat.com>
 
 	* include/hal_io.h: Use CYGBLD_HAL_PLATFORM_IO_H for those platforms
--- a/packages/hal/arm/arch/current/include/hal_intr.h
+++ b/packages/hal/arm/arch/current/include/hal_intr.h
@@ -53,7 +53,19 @@
 #include <pkgconf/hal.h>
 
 #include <cyg/infra/cyg_type.h>
-#include <cyg/hal/hal_platform_ints.h>
+
+// This is to allow a variant to decide that there is no platform-specific
+// interrupts file; and that in turn can be overridden by a platform that
+// refines the variant's ideas.
+#ifdef    CYGBLD_HAL_PLF_INTS_H
+# include CYGBLD_HAL_PLF_INTS_H // should include variant data as required
+#else 
+# ifdef    CYGBLD_HAL_VAR_INTS_H
+#  include CYGBLD_HAL_VAR_INTS_H
+# else
+#  include <cyg/hal/hal_platform_ints.h> // default less-complex platforms
+# endif
+#endif
 
 //--------------------------------------------------------------------------
 // ARM exception vectors.
--- a/packages/hal/arm/arch/current/src/vectors.S
+++ b/packages/hal/arm/arch/current/src/vectors.S
@@ -229,14 +229,6 @@ warm_reset:
         LED 7
 
         mov     r0,#0           // move vectors
-        // We cannot perform a store until after PLATFORM_SETUP1
-#ifndef CYGPKG_HAL_ARM_EBSA285  // EBSA285 sets the DRAM size above
-#ifndef CYGPKG_HAL_ARM_SA11X0   // SA11x0 also uses this
-        ldr     r1,=hal_dram_size
-        str     r0, [r1]        // DRAM size to zero => unknown
-#endif
-#endif
-
         ldr     r1,=__exception_handlers
 #ifndef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
         // Wait with this if stubs are included (see further down).
--- a/packages/hal/arm/ebsa285/current/ChangeLog
+++ b/packages/hal/arm/ebsa285/current/ChangeLog
@@ -1,3 +1,13 @@
+2000-12-11  Gary Thomas  <gthomas@redhat.com>
+
+	* cdl/hal_arm_ebsa285.cdl: 
+	Enable CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED - required
+	to fully support RedBoot networking I/O and ^C.
+
+2000-12-08  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* cdl/hal_arm_ebsa285.cdl: Build redboot_cmds.c in the right place.
+
 2000-12-04  Hugo Tyson  <hmt@redhat.com>
 
 	* include/hal_cache.h: Consistently ensure that ARM registers used
--- a/packages/hal/arm/ebsa285/current/cdl/hal_arm_ebsa285.cdl
+++ b/packages/hal/arm/ebsa285/current/cdl/hal_arm_ebsa285.cdl
@@ -2,7 +2,7 @@
 #
 #      hal_arm_ebsa285.cdl
 #
-#      AEB1 board HAL package configuration data
+#      Intel SA110/285 (EBSA285) HAL package configuration data
 #
 # ====================================================================
 #####COPYRIGHTBEGIN####
@@ -54,6 +54,7 @@ cdl_package CYGPKG_HAL_ARM_EBSA285 {
     implements    CYGINT_HAL_DEBUG_GDB_STUBS
     implements    CYGINT_HAL_DEBUG_GDB_STUBS_BREAK
     implements    CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT
+    implements    CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED
     implements    CYGINT_HAL_ARM_MEM_REAL_REGION_TOP
 
     define_proc {
@@ -359,7 +360,9 @@ cdl_package CYGPKG_HAL_ARM_EBSA285 {
         description   "
             This option lists the target's requirements for a valid Redboot
             configuration."
-    
+
+        compile -library=libextras.a redboot_cmds.c
+
         cdl_option CYGBLD_BUILD_REDBOOT_BIN {
             display       "Build Redboot ROM binary image"
             active_if     CYGBLD_BUILD_REDBOOT
@@ -368,8 +371,6 @@ cdl_package CYGPKG_HAL_ARM_EBSA285 {
             description "This option enables the conversion of the Redboot ELF
                          image to a binary image suitable for ROM programming."
     
-            compile -library=libextras.a redboot_cmds.c
-
             make -priority 325 {
                 <PREFIX>/bin/redboot.bin : <PREFIX>/bin/redboot.elf
                 $(OBJCOPY) --strip-debug $< $(@:.bin=.img) 
--- a/packages/hal/arm/sa11x0/assabet/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/assabet/current/ChangeLog
@@ -1,3 +1,17 @@
+2000-12-13  Hugo Tyson  <hmt@redhat.com>
+
+	* src/assabet_misc.c: Use <cyg/hal/hal_mm.h> from the variant HAL
+	for definitions of all MM tables and so on.
+
+	* include/hal_platform_ints.h: Removed; it was the same in all
+	platforms so is now in the common variant hal, "hal_var_ints.h"
+	and accessible as CYGBLD_HAL_VAR_INTS_H <cyg/hal/hal_var_ints.h>
+	
+2000-12-08  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* cdl/hal_arm_sa11x0_assabet.cdl: Build redboot_cmds.c in the
+	right place.
+
 2000-11-30  Gary Thomas  <gthomas@redhat.com>
 
 	* src/redboot_cmds.c (do_exec): Use new _GETS_xxx return codes.
--- a/packages/hal/arm/sa11x0/assabet/current/cdl/hal_arm_sa11x0_assabet.cdl
+++ b/packages/hal/arm/sa11x0/assabet/current/cdl/hal_arm_sa11x0_assabet.cdl
@@ -321,6 +321,8 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_ASSABE
             This option lists the target's requirements for a valid Redboot
             configuration."
 
+        compile -library=libextras.a redboot_cmds.c
+    
         cdl_option CYGBLD_BUILD_REDBOOT_BIN {
             display       "Build Redboot ROM binary image"
             active_if     CYGBLD_BUILD_REDBOOT
@@ -329,8 +331,6 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_ASSABE
             description "This option enables the conversion of the Redboot ELF
                          image to a binary image suitable for ROM programming."
 
-            compile -library=libextras.a redboot_cmds.c
-    
             make -priority 325 {
                 <PREFIX>/bin/redboot.bin : <PREFIX>/bin/redboot.elf
                 $(OBJCOPY) --strip-debug $< $(@:.bin=.img) 
deleted file mode 100644
--- a/packages/hal/arm/sa11x0/assabet/current/include/hal_platform_ints.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef CYGONCE_HAL_PLATFORM_INTS_H
-#define CYGONCE_HAL_PLATFORM_INTS_H
-//==========================================================================
-//
-//      hal_platform_ints.h
-//
-//      HAL Interrupt and clock support
-//
-//==========================================================================
-//####COPYRIGHTBEGIN####
-//                                                                          
-// -------------------------------------------                              
-// The contents of this file are subject to the Red Hat eCos Public License 
-// Version 1.1 (the "License"); you may not use this file except in         
-// compliance with the License.  You may obtain a copy of the License at    
-// http://www.redhat.com/                                                   
-//                                                                          
-// Software distributed under the License is distributed on an "AS IS"      
-// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
-// License for the specific language governing rights and limitations under 
-// the License.                                                             
-//                                                                          
-// The Original Code is eCos - Embedded Configurable Operating System,      
-// released September 30, 1998.                                             
-//                                                                          
-// The Initial Developer of the Original Code is Red Hat.                   
-// Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
-// All Rights Reserved.                                                     
-// -------------------------------------------                              
-//                                                                          
-//####COPYRIGHTEND####
-//==========================================================================
-//#####DESCRIPTIONBEGIN####
-//
-// Author(s):    gthomas
-// Contributors: gthomas
-// Date:         2000-05-08
-// Purpose:      Define Interrupt support
-// Description:  The interrupt details for the SA1110/Assabet are defined here.
-// Usage:
-//               #include <cyg/hal/hal_platform_ints.h>
-//               ...
-//              
-//
-//####DESCRIPTIONEND####
-//
-//==========================================================================
-
-#define CYGNUM_HAL_INTERRUPT_GPIO0   0
-#define CYGNUM_HAL_INTERRUPT_GPIO1   1
-#define CYGNUM_HAL_INTERRUPT_GPIO2   2
-#define CYGNUM_HAL_INTERRUPT_GPIO3   3
-#define CYGNUM_HAL_INTERRUPT_GPIO4   4
-#define CYGNUM_HAL_INTERRUPT_GPIO5   5
-#define CYGNUM_HAL_INTERRUPT_GPIO6   6
-#define CYGNUM_HAL_INTERRUPT_GPIO7   7
-#define CYGNUM_HAL_INTERRUPT_GPIO8   8
-#define CYGNUM_HAL_INTERRUPT_GPIO9   9
-#define CYGNUM_HAL_INTERRUPT_GPIO10  10
-#define CYGNUM_HAL_INTERRUPT_GPIO    11  // Don't use directly!
-#define CYGNUM_HAL_INTERRUPT_LCD     12
-#define CYGNUM_HAL_INTERRUPT_UDC     13
-#define CYGNUM_HAL_INTERRUPT_UART1   15
-#define CYGNUM_HAL_INTERRUPT_UART2   16
-#define CYGNUM_HAL_INTERRUPT_UART3   17
-#define CYGNUM_HAL_INTERRUPT_MCP     18
-#define CYGNUM_HAL_INTERRUPT_SSP     19
-#define CYGNUM_HAL_INTERRUPT_TIMER0  26
-#define CYGNUM_HAL_INTERRUPT_TIMER1  27
-#define CYGNUM_HAL_INTERRUPT_TIMER2  28
-#define CYGNUM_HAL_INTERRUPT_TIMER3  29
-#define CYGNUM_HAL_INTERRUPT_HZ      30
-#define CYGNUM_HAL_INTERRUPT_ALARM   31
-
-// GPIO bits 31..11 can generate interrupts as well, but they all
-// end up clumped into interrupt signal #11.  Using the symbols
-// below allow for detection of these separately.
-
-#define CYGNUM_HAL_INTERRUPT_GPIO11  (32+11)
-#define CYGNUM_HAL_INTERRUPT_GPIO12  (32+12)
-#define CYGNUM_HAL_INTERRUPT_GPIO13  (32+13)
-#define CYGNUM_HAL_INTERRUPT_GPIO14  (32+14)
-#define CYGNUM_HAL_INTERRUPT_GPIO15  (32+15)
-#define CYGNUM_HAL_INTERRUPT_GPIO16  (32+16)
-#define CYGNUM_HAL_INTERRUPT_GPIO17  (32+17)
-#define CYGNUM_HAL_INTERRUPT_GPIO18  (32+18)
-#define CYGNUM_HAL_INTERRUPT_GPIO19  (32+19)
-#define CYGNUM_HAL_INTERRUPT_GPIO20  (32+20)
-#define CYGNUM_HAL_INTERRUPT_GPIO21  (32+21)
-#define CYGNUM_HAL_INTERRUPT_GPIO22  (32+22)
-#define CYGNUM_HAL_INTERRUPT_GPIO23  (32+23)
-#define CYGNUM_HAL_INTERRUPT_GPIO24  (32+24)
-#define CYGNUM_HAL_INTERRUPT_GPIO25  (32+25)
-#define CYGNUM_HAL_INTERRUPT_GPIO26  (32+26)
-#define CYGNUM_HAL_INTERRUPT_GPIO27  (32+27)
-
-#define CYGNUM_HAL_INTERRUPT_NONE    -1
-
-#define CYGNUM_HAL_ISR_MIN            0
-#define CYGNUM_HAL_ISR_MAX           (27+32)
-
-#define CYGNUM_HAL_ISR_COUNT            (CYGNUM_HAL_ISR_MAX+1)
-
-// The vector used by the Real time clock
-#define CYGNUM_HAL_INTERRUPT_RTC        CYGNUM_HAL_INTERRUPT_TIMER0
-
-#endif // CYGONCE_HAL_PLATFORM_INTS_H
--- a/packages/hal/arm/sa11x0/assabet/current/src/assabet_misc.c
+++ b/packages/hal/arm/sa11x0/assabet/current/src/assabet_misc.c
@@ -60,106 +60,8 @@
 
 #include <cyg/infra/diag.h>             // diag_printf
 
-// -------------------------------------------------------------------------
-// MMU initialization:
-// 
-// These structures are laid down in memory to define the translation
-// table.
-// 
-
-/*
- * SA-1100 Translation Table Base Bit Masks */
-#define ARM_TRANSLATION_TABLE_MASK               0xFFFFC000
-
-/*
- * SA-1100 Domain Access Control Bit Masks
- */
-#define ARM_ACCESS_TYPE_NO_ACCESS(domain_num)    (0x0 << (domain_num)*2)
-#define ARM_ACCESS_TYPE_CLIENT(domain_num)       (0x1 << (domain_num)*2)
-#define ARM_ACCESS_TYPE_MANAGER(domain_num)      (0x3 << (domain_num)*2)
-
-struct ARM_MMU_FIRST_LEVEL_FAULT {
-    int id : 2;
-    int sbz : 30;
-};
-#define ARM_MMU_FIRST_LEVEL_FAULT_ID 0x0
-
-struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE {
-    int id : 2;
-    int imp : 2;
-    int domain : 4;
-    int sbz : 1;
-    int base_address : 23;
-};
-#define ARM_MMU_FIRST_LEVEL_PAGE_TABLE_ID 0x1
-
-struct ARM_MMU_FIRST_LEVEL_SECTION {
-    int id : 2;
-    int b : 1;
-    int c : 1;
-    int imp : 1;
-    int domain : 4;
-    int sbz0 : 1;
-    int ap : 2;
-    int sbz1 : 8;
-    int base_address : 12;
-};
-#define ARM_MMU_FIRST_LEVEL_SECTION_ID 0x2
-
-struct ARM_MMU_FIRST_LEVEL_RESERVED {
-    int id : 2;
-    int sbz : 30;
-};
-#define ARM_MMU_FIRST_LEVEL_RESERVED_ID 0x3
-
-#define ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, table_index) \
-   (unsigned long *)((unsigned long)(ttb_base) + ((table_index) << 2))
-
-#define ARM_FIRST_LEVEL_PAGE_TABLE_SIZE 0x4000
-
-#define ARM_MMU_SECTION(ttb_base, actual_base, virtual_base,              \
-                        cacheable, bufferable, perm)                      \
-    CYG_MACRO_START                                                       \
-        register union ARM_MMU_FIRST_LEVEL_DESCRIPTOR desc;               \
-                                                                          \
-        desc.word = 0;                                                    \
-        desc.section.id = ARM_MMU_FIRST_LEVEL_SECTION_ID;                 \
-        desc.section.domain = 0;                                          \
-        desc.section.c = (cacheable);                                     \
-        desc.section.b = (bufferable);                                    \
-        desc.section.ap = (perm);                                         \
-        desc.section.base_address = (actual_base);                        \
-        *ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, (virtual_base)) \
-                            = desc.word;                                  \
-    CYG_MACRO_END
-
-#define X_ARM_MMU_SECTION(abase,vbase,size,cache,buff,access)      \
-    { int i; int j = abase; int k = vbase;                         \
-      for (i = size; i > 0 ; i--,j++,k++)                          \
-      {                                                            \
-        ARM_MMU_SECTION(ttb_base, j, k, cache, buff, access);      \
-      }                                                            \
-    }
-
-union ARM_MMU_FIRST_LEVEL_DESCRIPTOR {
-    unsigned long word;
-    struct ARM_MMU_FIRST_LEVEL_FAULT fault;
-    struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE page_table;
-    struct ARM_MMU_FIRST_LEVEL_SECTION section;
-    struct ARM_MMU_FIRST_LEVEL_RESERVED reserved;
-};
-
-#define ARM_UNCACHEABLE                         0
-#define ARM_CACHEABLE                           1
-#define ARM_UNBUFFERABLE                        0
-#define ARM_BUFFERABLE                          1
-
-#define ARM_ACCESS_PERM_NONE_NONE               0
-#define ARM_ACCESS_PERM_RO_NONE                 0
-#define ARM_ACCESS_PERM_RO_RO                   0
-#define ARM_ACCESS_PERM_RW_NONE                 1
-#define ARM_ACCESS_PERM_RW_RO                   2
-#define ARM_ACCESS_PERM_RW_RW                   3
+// All the MM table layout is here:
+#include <cyg/hal/hal_mm.h>
 
 void
 hal_mmu_init(void)
@@ -175,22 +77,7 @@ hal_mmu_init(void)
     /*
      * Set the Domain Access Control Register
      */
-    i = ARM_ACCESS_TYPE_MANAGER(0)    | 
-        ARM_ACCESS_TYPE_NO_ACCESS(1)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(2)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(3)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(4)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(5)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(6)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(7)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(8)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(9)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(10) |
-        ARM_ACCESS_TYPE_NO_ACCESS(11) |
-        ARM_ACCESS_TYPE_NO_ACCESS(12) |
-        ARM_ACCESS_TYPE_NO_ACCESS(13) |
-        ARM_ACCESS_TYPE_NO_ACCESS(14) |
-        ARM_ACCESS_TYPE_NO_ACCESS(15);
+    i = ARM_ACCESS_DACR_DEFAULT;
     asm volatile ("mcr  p15,0,%0,c3,c0,0" : : "r"(i) /*:*/);
 
     /*
@@ -261,3 +148,6 @@ void assabet_program_new_stack(void *fun
     stack_ptr = old_stack;
     return;
 }
+
+// ------------------------------------------------------------------------
+// EOF assabet_misc.c
--- a/packages/hal/arm/sa11x0/brutus/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/brutus/current/ChangeLog
@@ -1,3 +1,12 @@
+2000-12-13  Hugo Tyson  <hmt@redhat.com>
+
+	* src/brutus_misc.c: Use <cyg/hal/hal_mm.h> from the variant HAL
+	for definitions of all MM tables and so on.
+
+	* include/hal_platform_ints.h: Removed; it was the same in all
+	platforms so is now in the common variant hal, "hal_var_ints.h"
+	and accessible as CYGBLD_HAL_VAR_INTS_H <cyg/hal/hal_var_ints.h>
+
 2000-11-28  Drew Moseley  <dmoseley@redhat.com>
 
 	* misc/redboot_RAM.cfg: Implement CYGSEM_REDBOOT_BSP_SYSCALLS.
--- a/packages/hal/arm/sa11x0/brutus/current/cdl/hal_arm_sa11x0_brutus.cdl
+++ b/packages/hal/arm/sa11x0/brutus/current/cdl/hal_arm_sa11x0_brutus.cdl
@@ -315,6 +315,8 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_BRUTUS
             This option lists the target's requirements for a valid Redboot
             configuration."
 
+#            compile -library=libextras.a redboot_cmds.c
+    
         cdl_option CYGBLD_BUILD_REDBOOT_BIN {
             display       "Build Redboot ROM binary image"
             active_if     CYGBLD_BUILD_REDBOOT
@@ -323,8 +325,6 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_BRUTUS
             description "This option enables the conversion of the Redboot ELF
                          image to a binary image suitable for ROM programming."
 
-#            compile -library=libextras.a redboot_cmds.c
-    
             make -priority 325 {
                 <PREFIX>/bin/redboot.bin : <PREFIX>/bin/redboot.elf
                 $(OBJCOPY) --strip-debug $< $(@:.bin=.img) 
deleted file mode 100644
--- a/packages/hal/arm/sa11x0/brutus/current/include/hal_platform_ints.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef CYGONCE_HAL_PLATFORM_INTS_H
-#define CYGONCE_HAL_PLATFORM_INTS_H
-//==========================================================================
-//
-//      hal_platform_ints.h
-//
-//      HAL Interrupt and clock support
-//
-//==========================================================================
-//####COPYRIGHTBEGIN####
-//                                                                          
-// -------------------------------------------                              
-// The contents of this file are subject to the Red Hat eCos Public License 
-// Version 1.1 (the "License"); you may not use this file except in         
-// compliance with the License.  You may obtain a copy of the License at    
-// http://www.redhat.com/                                                   
-//                                                                          
-// Software distributed under the License is distributed on an "AS IS"      
-// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
-// License for the specific language governing rights and limitations under 
-// the License.                                                             
-//                                                                          
-// The Original Code is eCos - Embedded Configurable Operating System,      
-// released September 30, 1998.                                             
-//                                                                          
-// The Initial Developer of the Original Code is Red Hat.                   
-// Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
-// All Rights Reserved.                                                     
-// -------------------------------------------                              
-//                                                                          
-//####COPYRIGHTEND####
-//==========================================================================
-//#####DESCRIPTIONBEGIN####
-//
-// Author(s):    gthomas
-// Contributors: gthomas
-// Date:         2000-05-08
-// Purpose:      Define Interrupt support
-// Description:  The interrupt details for the SA1100/Brutus are defined here.
-// Usage:
-//               #include <cyg/hal/hal_platform_ints.h>
-//               ...
-//              
-//
-//####DESCRIPTIONEND####
-//
-//==========================================================================
-
-#define CYGNUM_HAL_INTERRUPT_GPIO0   0
-#define CYGNUM_HAL_INTERRUPT_GPIO1   1
-#define CYGNUM_HAL_INTERRUPT_GPIO2   2
-#define CYGNUM_HAL_INTERRUPT_GPIO3   3
-#define CYGNUM_HAL_INTERRUPT_GPIO4   4
-#define CYGNUM_HAL_INTERRUPT_GPIO5   5
-#define CYGNUM_HAL_INTERRUPT_GPIO6   6
-#define CYGNUM_HAL_INTERRUPT_GPIO7   7
-#define CYGNUM_HAL_INTERRUPT_GPIO8   8
-#define CYGNUM_HAL_INTERRUPT_GPIO9   9
-#define CYGNUM_HAL_INTERRUPT_GPIO10  10
-#define CYGNUM_HAL_INTERRUPT_GPIO    11  // Don't use directly
-#define CYGNUM_HAL_INTERRUPT_LCD     12
-#define CYGNUM_HAL_INTERRUPT_UDC     13
-#define CYGNUM_HAL_INTERRUPT_UART1   15
-#define CYGNUM_HAL_INTERRUPT_UART2   16
-#define CYGNUM_HAL_INTERRUPT_UART3   17
-#define CYGNUM_HAL_INTERRUPT_MCP     18
-#define CYGNUM_HAL_INTERRUPT_SSP     19
-#define CYGNUM_HAL_INTERRUPT_TIMER0  26
-#define CYGNUM_HAL_INTERRUPT_TIMER1  27
-#define CYGNUM_HAL_INTERRUPT_TIMER2  28
-#define CYGNUM_HAL_INTERRUPT_TIMER3  29
-#define CYGNUM_HAL_INTERRUPT_HZ      30
-#define CYGNUM_HAL_INTERRUPT_ALARM   31
-
-// GPIO bits 31..11 can generate interrupts as well, but they all
-// end up clumped into interrupt signal #11.  Using the symbols
-// below allow for detection of these separately.
-
-#define CYGNUM_HAL_INTERRUPT_GPIO11  (32+11)
-#define CYGNUM_HAL_INTERRUPT_GPIO12  (32+12)
-#define CYGNUM_HAL_INTERRUPT_GPIO13  (32+13)
-#define CYGNUM_HAL_INTERRUPT_GPIO14  (32+14)
-#define CYGNUM_HAL_INTERRUPT_GPIO15  (32+15)
-#define CYGNUM_HAL_INTERRUPT_GPIO16  (32+16)
-#define CYGNUM_HAL_INTERRUPT_GPIO17  (32+17)
-#define CYGNUM_HAL_INTERRUPT_GPIO18  (32+18)
-#define CYGNUM_HAL_INTERRUPT_GPIO19  (32+19)
-#define CYGNUM_HAL_INTERRUPT_GPIO20  (32+20)
-#define CYGNUM_HAL_INTERRUPT_GPIO21  (32+21)
-#define CYGNUM_HAL_INTERRUPT_GPIO22  (32+22)
-#define CYGNUM_HAL_INTERRUPT_GPIO23  (32+23)
-#define CYGNUM_HAL_INTERRUPT_GPIO24  (32+24)
-#define CYGNUM_HAL_INTERRUPT_GPIO25  (32+25)
-#define CYGNUM_HAL_INTERRUPT_GPIO26  (32+26)
-#define CYGNUM_HAL_INTERRUPT_GPIO27  (32+27)
-
-#define CYGNUM_HAL_INTERRUPT_NONE    -1
-
-#define CYGNUM_HAL_ISR_MIN            0
-#define CYGNUM_HAL_ISR_MAX           (27+32)
-
-#define CYGNUM_HAL_ISR_COUNT            (CYGNUM_HAL_ISR_MAX+1)
-
-// The vector used by the Real time clock
-#define CYGNUM_HAL_INTERRUPT_RTC        CYGNUM_HAL_INTERRUPT_TIMER0
-
-#endif // CYGONCE_HAL_PLATFORM_INTS_H
--- a/packages/hal/arm/sa11x0/brutus/current/src/brutus_misc.c
+++ b/packages/hal/arm/sa11x0/brutus/current/src/brutus_misc.c
@@ -60,106 +60,8 @@
 
 #include <cyg/infra/diag.h>             // diag_printf
 
-// -------------------------------------------------------------------------
-// MMU initialization:
-// 
-// These structures are laid down in memory to define the translation
-// table.
-// 
-
-/*
- * SA-1100 Translation Table Base Bit Masks */
-#define ARM_TRANSLATION_TABLE_MASK               0xFFFFC000
-
-/*
- * SA-1100 Domain Access Control Bit Masks
- */
-#define ARM_ACCESS_TYPE_NO_ACCESS(domain_num)    (0x0 << (domain_num)*2)
-#define ARM_ACCESS_TYPE_CLIENT(domain_num)       (0x1 << (domain_num)*2)
-#define ARM_ACCESS_TYPE_MANAGER(domain_num)      (0x3 << (domain_num)*2)
-
-struct ARM_MMU_FIRST_LEVEL_FAULT {
-    int id : 2;
-    int sbz : 30;
-};
-#define ARM_MMU_FIRST_LEVEL_FAULT_ID 0x0
-
-struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE {
-    int id : 2;
-    int imp : 2;
-    int domain : 4;
-    int sbz : 1;
-    int base_address : 23;
-};
-#define ARM_MMU_FIRST_LEVEL_PAGE_TABLE_ID 0x1
-
-struct ARM_MMU_FIRST_LEVEL_SECTION {
-    int id : 2;
-    int b : 1;
-    int c : 1;
-    int imp : 1;
-    int domain : 4;
-    int sbz0 : 1;
-    int ap : 2;
-    int sbz1 : 8;
-    int base_address : 12;
-};
-#define ARM_MMU_FIRST_LEVEL_SECTION_ID 0x2
-
-struct ARM_MMU_FIRST_LEVEL_RESERVED {
-    int id : 2;
-    int sbz : 30;
-};
-#define ARM_MMU_FIRST_LEVEL_RESERVED_ID 0x3
-
-#define ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, table_index) \
-   (unsigned long *)((unsigned long)(ttb_base) + ((table_index) << 2))
-
-#define ARM_FIRST_LEVEL_PAGE_TABLE_SIZE 0x4000
-
-#define ARM_MMU_SECTION(ttb_base, actual_base, virtual_base,              \
-                        cacheable, bufferable, perm)                      \
-    CYG_MACRO_START                                                       \
-        register union ARM_MMU_FIRST_LEVEL_DESCRIPTOR desc;               \
-                                                                          \
-        desc.word = 0;                                                    \
-        desc.section.id = ARM_MMU_FIRST_LEVEL_SECTION_ID;                 \
-        desc.section.domain = 0;                                          \
-        desc.section.c = (cacheable);                                     \
-        desc.section.b = (bufferable);                                    \
-        desc.section.ap = (perm);                                         \
-        desc.section.base_address = (actual_base);                        \
-        *ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, (virtual_base)) \
-                            = desc.word;                                  \
-    CYG_MACRO_END
-
-#define X_ARM_MMU_SECTION(abase,vbase,size,cache,buff,access)      \
-    { int i; int j = abase; int k = vbase;                         \
-      for (i = size; i > 0 ; i--,j++,k++)                          \
-      {                                                            \
-        ARM_MMU_SECTION(ttb_base, j, k, cache, buff, access);      \
-      }                                                            \
-    }
-
-union ARM_MMU_FIRST_LEVEL_DESCRIPTOR {
-    unsigned long word;
-    struct ARM_MMU_FIRST_LEVEL_FAULT fault;
-    struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE page_table;
-    struct ARM_MMU_FIRST_LEVEL_SECTION section;
-    struct ARM_MMU_FIRST_LEVEL_RESERVED reserved;
-};
-
-#define ARM_UNCACHEABLE                         0
-#define ARM_CACHEABLE                           1
-#define ARM_UNBUFFERABLE                        0
-#define ARM_BUFFERABLE                          1
-
-#define ARM_ACCESS_PERM_NONE_NONE               0
-#define ARM_ACCESS_PERM_RO_NONE                 0
-#define ARM_ACCESS_PERM_RO_RO                   0
-#define ARM_ACCESS_PERM_RW_NONE                 1
-#define ARM_ACCESS_PERM_RW_RO                   2
-#define ARM_ACCESS_PERM_RW_RW                   3
+// All the MM table layout is here:
+#include <cyg/hal/hal_mm.h>
 
 void
 hal_mmu_init(void)
@@ -175,22 +77,7 @@ hal_mmu_init(void)
     /*
      * Set the Domain Access Control Register
      */
-    i = ARM_ACCESS_TYPE_MANAGER(0)    | 
-        ARM_ACCESS_TYPE_NO_ACCESS(1)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(2)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(3)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(4)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(5)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(6)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(7)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(8)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(9)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(10) |
-        ARM_ACCESS_TYPE_NO_ACCESS(11) |
-        ARM_ACCESS_TYPE_NO_ACCESS(12) |
-        ARM_ACCESS_TYPE_NO_ACCESS(13) |
-        ARM_ACCESS_TYPE_NO_ACCESS(14) |
-        ARM_ACCESS_TYPE_NO_ACCESS(15);
+    i = ARM_ACCESS_DACR_DEFAULT;
     asm volatile ("mcr  p15,0,%0,c3,c0,0" : : "r"(i) /*:*/);
 
     /*
@@ -240,3 +127,6 @@ void brutus_program_new_stack(void *func
     stack_ptr = old_stack;
     return;
 }
+
+// ------------------------------------------------------------------------
+// EOF brutus_misc.c
--- a/packages/hal/arm/sa11x0/sa1100mm/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/sa1100mm/current/ChangeLog
@@ -1,3 +1,12 @@
+2000-12-13  Hugo Tyson  <hmt@redhat.com>
+
+	* src/sa1100mm_misc.c: Use <cyg/hal/hal_mm.h> from the variant HAL
+	for definitions of all MM tables and so on.
+
+	* include/hal_platform_ints.h: Removed; it was the same in all
+	platforms so is now in the common variant hal, "hal_var_ints.h"
+	and accessible as CYGBLD_HAL_VAR_INTS_H <cyg/hal/hal_var_ints.h>
+
 2000-11-27  Drew Moseley  <dmoseley@redhat.com>
 
 	* src/sa1100mm_misc.c (sa1100mm_program_new_stack): New function
deleted file mode 100644
--- a/packages/hal/arm/sa11x0/sa1100mm/current/include/hal_platform_ints.h
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef CYGONCE_HAL_PLATFORM_INTS_H
-#define CYGONCE_HAL_PLATFORM_INTS_H
-//==========================================================================
-//
-//      hal_platform_ints.h
-//
-//      HAL Interrupt and clock support
-//
-//==========================================================================
-//####COPYRIGHTBEGIN####
-//                                                                          
-// -------------------------------------------                              
-// The contents of this file are subject to the Red Hat eCos Public License 
-// Version 1.1 (the "License"); you may not use this file except in         
-// compliance with the License.  You may obtain a copy of the License at    
-// http://www.redhat.com/                                                   
-//                                                                          
-// Software distributed under the License is distributed on an "AS IS"      
-// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
-// License for the specific language governing rights and limitations under 
-// the License.                                                             
-//                                                                          
-// The Original Code is eCos - Embedded Configurable Operating System,      
-// released September 30, 1998.                                             
-//                                                                          
-// The Initial Developer of the Original Code is Red Hat.                   
-// Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
-// All Rights Reserved.                                                     
-// -------------------------------------------                              
-//                                                                          
-//####COPYRIGHTEND####
-//==========================================================================
-//#####DESCRIPTIONBEGIN####
-//
-// Author(s):    gthomas
-// Contributors: gthomas, dmoseley
-// Date:         2000-05-08
-// Purpose:      Define Interrupt support
-// Description:  The interrupt details for the SA1100/Multimedia are defined here.
-// Usage:
-//               #include <cyg/hal/hal_platform_ints.h>
-//               ...
-//              
-//
-//####DESCRIPTIONEND####
-//
-//==========================================================================
-
-#define CYGNUM_HAL_INTERRUPT_GPIO0   0
-#define CYGNUM_HAL_INTERRUPT_GPIO1   1
-#define CYGNUM_HAL_INTERRUPT_GPIO2   2
-#define CYGNUM_HAL_INTERRUPT_GPIO3   3
-#define CYGNUM_HAL_INTERRUPT_GPIO4   4
-#define CYGNUM_HAL_INTERRUPT_GPIO5   5
-#define CYGNUM_HAL_INTERRUPT_GPIO6   6
-#define CYGNUM_HAL_INTERRUPT_GPIO7   7
-#define CYGNUM_HAL_INTERRUPT_GPIO8   8
-#define CYGNUM_HAL_INTERRUPT_GPIO9   9
-#define CYGNUM_HAL_INTERRUPT_GPIO10  10
-#define CYGNUM_HAL_INTERRUPT_GPIO    11  // Don't use directly
-#define CYGNUM_HAL_INTERRUPT_LCD     12
-#define CYGNUM_HAL_INTERRUPT_UDC     13
-#define CYGNUM_HAL_INTERRUPT_UART1   15
-#define CYGNUM_HAL_INTERRUPT_UART2   16
-#define CYGNUM_HAL_INTERRUPT_UART3   17
-#define CYGNUM_HAL_INTERRUPT_MCP     18
-#define CYGNUM_HAL_INTERRUPT_SSP     19
-#define CYGNUM_HAL_INTERRUPT_TIMER0  26
-#define CYGNUM_HAL_INTERRUPT_TIMER1  27
-#define CYGNUM_HAL_INTERRUPT_TIMER2  28
-#define CYGNUM_HAL_INTERRUPT_TIMER3  29
-#define CYGNUM_HAL_INTERRUPT_HZ      30
-#define CYGNUM_HAL_INTERRUPT_ALARM   31
-
-// GPIO bits 31..11 can generate interrupts as well, but they all
-// end up clumped into interrupt signal #11.  Using the symbols
-// below allow for detection of these separately.
-
-#define CYGNUM_HAL_INTERRUPT_GPIO11  (32+11)
-#define CYGNUM_HAL_INTERRUPT_GPIO12  (32+12)
-#define CYGNUM_HAL_INTERRUPT_GPIO13  (32+13)
-#define CYGNUM_HAL_INTERRUPT_GPIO14  (32+14)
-#define CYGNUM_HAL_INTERRUPT_GPIO15  (32+15)
-#define CYGNUM_HAL_INTERRUPT_GPIO16  (32+16)
-#define CYGNUM_HAL_INTERRUPT_GPIO17  (32+17)
-#define CYGNUM_HAL_INTERRUPT_GPIO18  (32+18)
-#define CYGNUM_HAL_INTERRUPT_GPIO19  (32+19)
-#define CYGNUM_HAL_INTERRUPT_GPIO20  (32+20)
-#define CYGNUM_HAL_INTERRUPT_GPIO21  (32+21)
-#define CYGNUM_HAL_INTERRUPT_GPIO22  (32+22)
-#define CYGNUM_HAL_INTERRUPT_GPIO23  (32+23)
-#define CYGNUM_HAL_INTERRUPT_GPIO24  (32+24)
-#define CYGNUM_HAL_INTERRUPT_GPIO25  (32+25)
-#define CYGNUM_HAL_INTERRUPT_GPIO26  (32+26)
-#define CYGNUM_HAL_INTERRUPT_GPIO27  (32+27)
-
-#define CYGNUM_HAL_INTERRUPT_NONE    -1
-
-#define CYGNUM_HAL_ISR_MIN            0
-#define CYGNUM_HAL_ISR_MAX           (27+32)
-
-#define CYGNUM_HAL_ISR_COUNT            (CYGNUM_HAL_ISR_MAX+1)
-
-// The vector used by the Real time clock
-#define CYGNUM_HAL_INTERRUPT_RTC        CYGNUM_HAL_INTERRUPT_TIMER0
-
-#endif // CYGONCE_HAL_PLATFORM_INTS_H
--- a/packages/hal/arm/sa11x0/sa1100mm/current/src/sa1100mm_misc.c
+++ b/packages/hal/arm/sa11x0/sa1100mm/current/src/sa1100mm_misc.c
@@ -60,106 +60,8 @@
 
 #include <cyg/infra/diag.h>             // diag_printf
 
-// -------------------------------------------------------------------------
-// MMU initialization:
-// 
-// These structures are laid down in memory to define the translation
-// table.
-// 
-
-/*
- * SA-1100 Translation Table Base Bit Masks */
-#define ARM_TRANSLATION_TABLE_MASK               0xFFFFC000
-
-/*
- * SA-1100 Domain Access Control Bit Masks
- */
-#define ARM_ACCESS_TYPE_NO_ACCESS(domain_num)    (0x0 << (domain_num)*2)
-#define ARM_ACCESS_TYPE_CLIENT(domain_num)       (0x1 << (domain_num)*2)
-#define ARM_ACCESS_TYPE_MANAGER(domain_num)      (0x3 << (domain_num)*2)
-
-struct ARM_MMU_FIRST_LEVEL_FAULT {
-    int id : 2;
-    int sbz : 30;
-};
-#define ARM_MMU_FIRST_LEVEL_FAULT_ID 0x0
-
-struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE {
-    int id : 2;
-    int imp : 2;
-    int domain : 4;
-    int sbz : 1;
-    int base_address : 23;
-};
-#define ARM_MMU_FIRST_LEVEL_PAGE_TABLE_ID 0x1
-
-struct ARM_MMU_FIRST_LEVEL_SECTION {
-    int id : 2;
-    int b : 1;
-    int c : 1;
-    int imp : 1;
-    int domain : 4;
-    int sbz0 : 1;
-    int ap : 2;
-    int sbz1 : 8;
-    int base_address : 12;
-};
-#define ARM_MMU_FIRST_LEVEL_SECTION_ID 0x2
-
-struct ARM_MMU_FIRST_LEVEL_RESERVED {
-    int id : 2;
-    int sbz : 30;
-};
-#define ARM_MMU_FIRST_LEVEL_RESERVED_ID 0x3
-
-#define ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, table_index) \
-   (unsigned long *)((unsigned long)(ttb_base) + ((table_index) << 2))
-
-#define ARM_FIRST_LEVEL_PAGE_TABLE_SIZE 0x4000
-
-#define ARM_MMU_SECTION(ttb_base, actual_base, virtual_base,              \
-                        cacheable, bufferable, perm)                      \
-    CYG_MACRO_START                                                       \
-        register union ARM_MMU_FIRST_LEVEL_DESCRIPTOR desc;               \
-                                                                          \
-        desc.word = 0;                                                    \
-        desc.section.id = ARM_MMU_FIRST_LEVEL_SECTION_ID;                 \
-        desc.section.domain = 0;                                          \
-        desc.section.c = (cacheable);                                     \
-        desc.section.b = (bufferable);                                    \
-        desc.section.ap = (perm);                                         \
-        desc.section.base_address = (actual_base);                        \
-        *ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, (virtual_base)) \
-                            = desc.word;                                  \
-    CYG_MACRO_END
-
-#define X_ARM_MMU_SECTION(abase,vbase,size,cache,buff,access)      \
-    { int i; int j = abase; int k = vbase;                         \
-      for (i = size; i > 0 ; i--,j++,k++)                          \
-      {                                                            \
-        ARM_MMU_SECTION(ttb_base, j, k, cache, buff, access);      \
-      }                                                            \
-    }
-
-union ARM_MMU_FIRST_LEVEL_DESCRIPTOR {
-    unsigned long word;
-    struct ARM_MMU_FIRST_LEVEL_FAULT fault;
-    struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE page_table;
-    struct ARM_MMU_FIRST_LEVEL_SECTION section;
-    struct ARM_MMU_FIRST_LEVEL_RESERVED reserved;
-};
-
-#define ARM_UNCACHEABLE                         0
-#define ARM_CACHEABLE                           1
-#define ARM_UNBUFFERABLE                        0
-#define ARM_BUFFERABLE                          1
-
-#define ARM_ACCESS_PERM_NONE_NONE               0
-#define ARM_ACCESS_PERM_RO_NONE                 0
-#define ARM_ACCESS_PERM_RO_RO                   0
-#define ARM_ACCESS_PERM_RW_NONE                 1
-#define ARM_ACCESS_PERM_RW_RO                   2
-#define ARM_ACCESS_PERM_RW_RW                   3
+// All the MM table layout is here:
+#include <cyg/hal/hal_mm.h>
 
 void
 hal_mmu_init(void)
@@ -175,22 +77,7 @@ hal_mmu_init(void)
     /*
      * Set the Domain Access Control Register
      */
-    i = ARM_ACCESS_TYPE_MANAGER(0)    | 
-        ARM_ACCESS_TYPE_NO_ACCESS(1)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(2)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(3)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(4)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(5)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(6)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(7)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(8)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(9)  |
-        ARM_ACCESS_TYPE_NO_ACCESS(10) |
-        ARM_ACCESS_TYPE_NO_ACCESS(11) |
-        ARM_ACCESS_TYPE_NO_ACCESS(12) |
-        ARM_ACCESS_TYPE_NO_ACCESS(13) |
-        ARM_ACCESS_TYPE_NO_ACCESS(14) |
-        ARM_ACCESS_TYPE_NO_ACCESS(15);
+    i = ARM_ACCESS_DACR_DEFAULT;
     asm volatile ("mcr  p15,0,%0,c3,c0,0" : : "r"(i) /*:*/);
 
     /*
@@ -240,3 +127,6 @@ void sa1100mm_program_new_stack(void *fu
     stack_ptr = old_stack;
     return;
 }
+
+// ------------------------------------------------------------------------
+// EOF sa1100mm_misc.c
--- a/packages/hal/arm/sa11x0/var/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/var/current/ChangeLog
@@ -1,3 +1,19 @@
+2000-12-13  Hugo Tyson  <hmt@redhat.com>
+
+	* cdl/hal_arm_sa11x0.cdl: Define a symbol CYGBLD_HAL_VAR_INTS_H so
+	that the architectural HAL can see <cyg/hal/hal_var_ints.h> below.
+
+	* include/hal_var_ints.h: New file; actually a copy of all the
+	platforms' hal_platform_ints.h for all the sa11x0 platforms.
+
+	* include/hal_mm.h: New file; actually an excerpt from all the
+	platforms' $PLATFORM_misc.h for all the sa11x0 platforms, which
+	describes MM table layout and macros for initializing it.
+
+2000-12-12  Gary Thomas  <gthomas@redhat.com>
+
+	* cdl/hal_arm_sa11x0.cdl: Allow RTC clock rate to be changable.
+
 2000-12-04  Hugo Tyson  <hmt@redhat.com>
 
 	* include/hal_cache.h: Consistently ensure that ARM registers used
--- a/packages/hal/arm/sa11x0/var/current/cdl/hal_arm_sa11x0.cdl
+++ b/packages/hal/arm/sa11x0/var/current/cdl/hal_arm_sa11x0.cdl
@@ -51,11 +51,18 @@ cdl_package CYGPKG_HAL_ARM_SA11X0 {
         necessary to select a specific target platform HAL
         package."
 
+    # Let the architectural HAL see this variant's interrupts file -
+    # the SA11x0 has no variation between targets here.
+    define_proc {
+        puts $::cdl_header \
+       "#define CYGBLD_HAL_VAR_INTS_H <cyg/hal/hal_var_ints.h>"
+    }
 
     compile       hal_diag.c sa11x0_misc.c
 
     cdl_option CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK {
         display       "Processor clock rate"
+        active_if     { CYG_HAL_STARTUP == "ROM" }
         flavor        data
         legal_values  59000 73700 88500 103200 118000 132700 147500 162200 176900 191700 206400 221200
         default_value 221200
@@ -81,12 +88,18 @@ cdl_package CYGPKG_HAL_ARM_SA11X0 {
         cdl_option CYGNUM_HAL_RTC_DENOMINATOR {
             display       "Real-time clock denominator"
             flavor        data
-            calculated    100
+            default_value 100
+            description   "
+              This option selects the heartbeat rate for the real-time clock.
+              The rate is specified in ticks per second.  Change this value
+              with caution - too high and your system will become saturated
+              just handling clock interrupts, too low and some operations
+              such as thread scheduling may become sluggish."
         }
         cdl_option CYGNUM_HAL_RTC_PERIOD {
             display       "Real-time clock period"
             flavor        data
-            calculated    36864        ;# Clock for OS Timer is 3.6864MHz
+            calculated    (3686400/CYGNUM_HAL_RTC_DENOMINATOR)        ;# Clock for OS Timer is 3.6864MHz
         }
     }
 
new file mode 100644
--- /dev/null
+++ b/packages/hal/arm/sa11x0/var/current/include/hal_mm.h
@@ -0,0 +1,184 @@
+#ifndef CYGONCE_HAL_MM_H
+#define CYGONCE_HAL_MM_H
+
+//=============================================================================
+//
+//      hal_mm.h
+//
+//      ARM SA11x0 MM common definitions 
+//
+//=============================================================================
+//####COPYRIGHTBEGIN####
+//
+// -------------------------------------------
+// The contents of this file are subject to the Red Hat eCos Public License
+// Version 1.1 (the "License"); you may not use this file except in
+// compliance with the License.  You may obtain a copy of the License at
+// http://www.redhat.com/
+//
+// Software distributed under the License is distributed on an "AS IS"
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the
+// License for the specific language governing rights and limitations under
+// the License.
+//
+// The Original Code is eCos - Embedded Configurable Operating System,
+// released September 30, 1998.
+//
+// The Initial Developer of the Original Code is Red Hat.
+// Portions created by Red Hat are
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+// All Rights Reserved.
+// -------------------------------------------
+//
+//####COPYRIGHTEND####
+//=============================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    gthomas
+// Contributors: hmt
+//               Travis C. Furrer <furrer@mit.edu>
+// Date:         2000-12-13
+// Purpose:      ARM SA11x0 MM common definitions
+// Description:  The macros defined here provide common definitions for
+//		 memory management initialization.
+// Usage:
+//               #include <cyg/hal/hal_mm.h>
+//               ...
+//              
+//
+//####DESCRIPTIONEND####
+//
+//=============================================================================
+
+
+// -------------------------------------------------------------------------
+// MMU initialization:
+// 
+// These structures are laid down in memory to define the translation
+// table.
+// 
+
+/*
+ * SA-1100 Translation Table Base Bit Masks
+ */
+#define ARM_TRANSLATION_TABLE_MASK               0xFFFFC000
+
+/*
+ * SA-1100 Domain Access Control Bit Masks
+ */
+#define ARM_ACCESS_TYPE_NO_ACCESS(domain_num)    (0x0 << (domain_num)*2)
+#define ARM_ACCESS_TYPE_CLIENT(domain_num)       (0x1 << (domain_num)*2)
+#define ARM_ACCESS_TYPE_MANAGER(domain_num)      (0x3 << (domain_num)*2)
+
+struct ARM_MMU_FIRST_LEVEL_FAULT {
+    int id : 2;
+    int sbz : 30;
+};
+#define ARM_MMU_FIRST_LEVEL_FAULT_ID 0x0
+
+struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE {
+    int id : 2;
+    int imp : 2;
+    int domain : 4;
+    int sbz : 1;
+    int base_address : 23;
+};
+#define ARM_MMU_FIRST_LEVEL_PAGE_TABLE_ID 0x1
+
+struct ARM_MMU_FIRST_LEVEL_SECTION {
+    int id : 2;
+    int b : 1;
+    int c : 1;
+    int imp : 1;
+    int domain : 4;
+    int sbz0 : 1;
+    int ap : 2;
+    int sbz1 : 8;
+    int base_address : 12;
+};
+#define ARM_MMU_FIRST_LEVEL_SECTION_ID 0x2
+
+struct ARM_MMU_FIRST_LEVEL_RESERVED {
+    int id : 2;
+    int sbz : 30;
+};
+#define ARM_MMU_FIRST_LEVEL_RESERVED_ID 0x3
+
+#define ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, table_index) \
+   (unsigned long *)((unsigned long)(ttb_base) + ((table_index) << 2))
+
+#define ARM_FIRST_LEVEL_PAGE_TABLE_SIZE 0x4000
+
+#define ARM_MMU_SECTION(ttb_base, actual_base, virtual_base,              \
+                        cacheable, bufferable, perm)                      \
+    CYG_MACRO_START                                                       \
+        register union ARM_MMU_FIRST_LEVEL_DESCRIPTOR desc;               \
+                                                                          \
+        desc.word = 0;                                                    \
+        desc.section.id = ARM_MMU_FIRST_LEVEL_SECTION_ID;                 \
+        desc.section.domain = 0;                                          \
+        desc.section.c = (cacheable);                                     \
+        desc.section.b = (bufferable);                                    \
+        desc.section.ap = (perm);                                         \
+        desc.section.base_address = (actual_base);                        \
+        *ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, (virtual_base)) \
+                            = desc.word;                                  \
+    CYG_MACRO_END
+
+#define X_ARM_MMU_SECTION(abase,vbase,size,cache,buff,access)      \
+    { int i; int j = abase; int k = vbase;                         \
+      for (i = size; i > 0 ; i--,j++,k++)                          \
+      {                                                            \
+        ARM_MMU_SECTION(ttb_base, j, k, cache, buff, access);      \
+      }                                                            \
+    }
+
+union ARM_MMU_FIRST_LEVEL_DESCRIPTOR {
+    unsigned long word;
+    struct ARM_MMU_FIRST_LEVEL_FAULT fault;
+    struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE page_table;
+    struct ARM_MMU_FIRST_LEVEL_SECTION section;
+    struct ARM_MMU_FIRST_LEVEL_RESERVED reserved;
+};
+
+#define ARM_UNCACHEABLE                         0
+#define ARM_CACHEABLE                           1
+#define ARM_UNBUFFERABLE                        0
+#define ARM_BUFFERABLE                          1
+
+#define ARM_ACCESS_PERM_NONE_NONE               0
+#define ARM_ACCESS_PERM_RO_NONE                 0
+#define ARM_ACCESS_PERM_RO_RO                   0
+#define ARM_ACCESS_PERM_RW_NONE                 1
+#define ARM_ACCESS_PERM_RW_RO                   2
+#define ARM_ACCESS_PERM_RW_RW                   3
+
+/*
+ * Initialization for the Domain Access Control Register
+ */
+#define ARM_ACCESS_DACR_DEFAULT      (          \
+        ARM_ACCESS_TYPE_MANAGER(0)    |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(1)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(2)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(3)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(4)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(5)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(6)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(7)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(8)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(9)  |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(10) |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(11) |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(12) |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(13) |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(14) |         \
+        ARM_ACCESS_TYPE_NO_ACCESS(15)  )
+
+// ------------------------------------------------------------------------
+#endif // ifndef CYGONCE_HAL_MM_H
+// End of hal_mm.h
+
+
+
+
+
new file mode 100644
--- /dev/null
+++ b/packages/hal/arm/sa11x0/var/current/include/hal_var_ints.h
@@ -0,0 +1,111 @@
+#ifndef CYGONCE_HAL_VAR_INTS_H
+#define CYGONCE_HAL_VAR_INTS_H
+//==========================================================================
+//
+//      hal_var_ints.h
+//
+//      HAL Interrupt and clock support
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    gthomas
+// Contributors: gthomas
+// Date:         2000-05-08
+// Purpose:      Define Interrupt support
+// Description:  The interrupt details for the SA1110/Assabet are defined here.
+// Usage:
+//		 #include <pkgconf/system.h>
+//		 #include CYGBLD_HAL_VARIANT_H
+//               #include CYGBLD_HAL_VAR_INTS_H
+//
+//               ...
+//              
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#define CYGNUM_HAL_INTERRUPT_GPIO0   0
+#define CYGNUM_HAL_INTERRUPT_GPIO1   1
+#define CYGNUM_HAL_INTERRUPT_GPIO2   2
+#define CYGNUM_HAL_INTERRUPT_GPIO3   3
+#define CYGNUM_HAL_INTERRUPT_GPIO4   4
+#define CYGNUM_HAL_INTERRUPT_GPIO5   5
+#define CYGNUM_HAL_INTERRUPT_GPIO6   6
+#define CYGNUM_HAL_INTERRUPT_GPIO7   7
+#define CYGNUM_HAL_INTERRUPT_GPIO8   8
+#define CYGNUM_HAL_INTERRUPT_GPIO9   9
+#define CYGNUM_HAL_INTERRUPT_GPIO10  10
+#define CYGNUM_HAL_INTERRUPT_GPIO    11  // Don't use directly!
+#define CYGNUM_HAL_INTERRUPT_LCD     12
+#define CYGNUM_HAL_INTERRUPT_UDC     13
+#define CYGNUM_HAL_INTERRUPT_UART1   15
+#define CYGNUM_HAL_INTERRUPT_UART2   16
+#define CYGNUM_HAL_INTERRUPT_UART3   17
+#define CYGNUM_HAL_INTERRUPT_MCP     18
+#define CYGNUM_HAL_INTERRUPT_SSP     19
+#define CYGNUM_HAL_INTERRUPT_TIMER0  26
+#define CYGNUM_HAL_INTERRUPT_TIMER1  27
+#define CYGNUM_HAL_INTERRUPT_TIMER2  28
+#define CYGNUM_HAL_INTERRUPT_TIMER3  29
+#define CYGNUM_HAL_INTERRUPT_HZ      30
+#define CYGNUM_HAL_INTERRUPT_ALARM   31
+
+// GPIO bits 31..11 can generate interrupts as well, but they all
+// end up clumped into interrupt signal #11.  Using the symbols
+// below allow for detection of these separately.
+
+#define CYGNUM_HAL_INTERRUPT_GPIO11  (32+11)
+#define CYGNUM_HAL_INTERRUPT_GPIO12  (32+12)
+#define CYGNUM_HAL_INTERRUPT_GPIO13  (32+13)
+#define CYGNUM_HAL_INTERRUPT_GPIO14  (32+14)
+#define CYGNUM_HAL_INTERRUPT_GPIO15  (32+15)
+#define CYGNUM_HAL_INTERRUPT_GPIO16  (32+16)
+#define CYGNUM_HAL_INTERRUPT_GPIO17  (32+17)
+#define CYGNUM_HAL_INTERRUPT_GPIO18  (32+18)
+#define CYGNUM_HAL_INTERRUPT_GPIO19  (32+19)
+#define CYGNUM_HAL_INTERRUPT_GPIO20  (32+20)
+#define CYGNUM_HAL_INTERRUPT_GPIO21  (32+21)
+#define CYGNUM_HAL_INTERRUPT_GPIO22  (32+22)
+#define CYGNUM_HAL_INTERRUPT_GPIO23  (32+23)
+#define CYGNUM_HAL_INTERRUPT_GPIO24  (32+24)
+#define CYGNUM_HAL_INTERRUPT_GPIO25  (32+25)
+#define CYGNUM_HAL_INTERRUPT_GPIO26  (32+26)
+#define CYGNUM_HAL_INTERRUPT_GPIO27  (32+27)
+
+#define CYGNUM_HAL_INTERRUPT_NONE    -1
+
+#define CYGNUM_HAL_ISR_MIN            0
+#define CYGNUM_HAL_ISR_MAX           (27+32)
+
+#define CYGNUM_HAL_ISR_COUNT            (CYGNUM_HAL_ISR_MAX+1)
+
+// The vector used by the Real time clock
+#define CYGNUM_HAL_INTERRUPT_RTC        CYGNUM_HAL_INTERRUPT_TIMER0
+
+#endif // CYGONCE_HAL_VAR_INTS_H
--- a/packages/hal/common/current/ChangeLog
+++ b/packages/hal/common/current/ChangeLog
@@ -1,3 +1,16 @@
+2000-12-15  Gary Thomas  <gthomas@redhat.com>
+
+	* src/generic-stub.c: Define 'version' string to be a weak
+	symbol that can be easily overridden (e.g. by RedBoot).
+
+2000-12-11  Gary Thomas  <gthomas@redhat.com>
+
+	* src/hal_if.c: Remove unnecessary (polluting) include file.
+
+	* include/hal_stub.h: Support platform/variant supplied
+	include files.  <cyg/hal/plf_XXX.h> can now be layered
+	as <cyg/hal/var_XXX.h> which includes <cyg/hal/plf_XXX.h>.
+
 2000-12-06  Jesper Skov  <jskov@redhat.com>
 
 	* src/hal_if.c (delay_us): Ensure proper _GP save/restore.
--- a/packages/hal/common/current/include/hal_stub.h
+++ b/packages/hal/common/current/include/hal_stub.h
@@ -67,7 +67,11 @@ typedef cyg_uint32 uint32;
 typedef cyg_int32  int32;
 #endif // __CYGMON_TYPES
 
+#ifdef CYGBLD_HAL_PLATFORM_STUB_H
+#include CYGBLD_HAL_PLATFORM_STUB_H
+#else
 #include <cyg/hal/plf_stub.h>
+#endif
 #include <cyg/hal/generic-stub.h>
 
 #ifdef __cplusplus
--- a/packages/hal/common/current/src/generic-stub.c
+++ b/packages/hal/common/current/src/generic-stub.c
@@ -17,6 +17,10 @@ static uint32 crc32 (unsigned char *ptr,
 #include "thread-pkts.h"
   /* Defines function macros if thread support is not selected in board.h */
 
+#ifdef __ECOS__
+char GDB_stubs_version[] CYGBLD_ATTRIB_WEAK = 
+    "eCos GDB stubs - built " __DATE__ " / " __TIME__;
+#endif
 
 /****************************************************************************
 
@@ -1038,11 +1042,7 @@ int
 #endif
     case 'd':
       /* toggle debug flag */
-      strcpy(remcomOutBuffer, "eCos GDB stubs" 
-#ifdef CYGPKG_REDBOOT
-             " [with RedBoot]"
-#endif
-             " - built " __DATE__ " / " __TIME__);
+      strcpy(remcomOutBuffer, GDB_stubs_version);
       break;
 #endif
 #endif // __ECOS__
--- a/packages/hal/common/current/src/hal_if.c
+++ b/packages/hal/common/current/src/hal_if.c
@@ -56,7 +56,6 @@
 #include <cyg/hal/hal_misc.h>           // User break
 
 #include <cyg/hal/hal_stub.h>           // stub functionality
-#include <cyg/hal/plf_stub.h>           // reset entry - FIXME, should be moved
 
 #include <cyg/hal/hal_intr.h>           // hal_vsr_table and others
 
@@ -444,7 +443,7 @@ hal_ctrlc_check(CYG_ADDRWORD vector, CYG
     if (CYGNUM_CALL_IF_TABLE_VERSION+1 == CYGACC_CALL_IF_VERSION()) {
         gdb_vector = CYGACC_COMM_IF_CONTROL(*chan, __COMMCTL_DBG_ISR_VECTOR);
     }
-    if( vector == gdb_vector ) {
+    if (vector == gdb_vector) {
         isr_ret = CYGACC_COMM_IF_DBG_ISR(*chan, &ctrlc, vector, data);
         if (ctrlc)
             cyg_hal_user_break( (CYG_ADDRWORD *)hal_saved_interrupt_state );
--- a/packages/hal/powerpc/mbx/current/cdl/hal_powerpc_mbx.cdl
+++ b/packages/hal/powerpc/mbx/current/cdl/hal_powerpc_mbx.cdl
@@ -332,6 +332,8 @@ cdl_package CYGPKG_HAL_POWERPC_MBX {
             This option lists the target's requirements for a valid Redboot
             configuration."
 
+#            compile -library=libextras.a redboot_cmds.c
+    
         cdl_option CYGBLD_BUILD_REDBOOT_BIN {
             display       "Build Redboot ROM binary image"
             active_if     CYGBLD_BUILD_REDBOOT
@@ -340,8 +342,6 @@ cdl_package CYGPKG_HAL_POWERPC_MBX {
             description "This option enables the conversion of the Redboot ELF
                          image to a binary image suitable for ROM programming."
 
-#            compile -library=libextras.a redboot_cmds.c
-    
             make -priority 325 {
                 <PREFIX>/bin/redboot.bin : <PREFIX>/bin/redboot.elf
                 $(OBJCOPY) --strip-debug $< $(@:.bin=.img) 
--- a/packages/hal/sh/arch/current/ChangeLog
+++ b/packages/hal/sh/arch/current/ChangeLog
@@ -1,3 +1,14 @@
+2000-12-13  Jesper Skov  <jskov@redhat.com>
+2000-12-13  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* src/vectors.S (__reset): Use proper entry pointer for ROMRAM
+	startup type.
+
+2000-12-08  Jesper Skov  <jskov@redhat.com>
+
+	* src/vectors.S (cyg_scheduler_sched_lock): Changed to use
+	SYM_PTR_REF. Brian Danilko spotted this.
+
 2000-11-24  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/sh.ld: _reset should be adorned with CYG_LABEL_DEFN
--- a/packages/hal/sh/arch/current/src/vectors.S
+++ b/packages/hal/sh/arch/current/src/vectors.S
@@ -51,7 +51,8 @@
 #ifdef CYGPKG_KERNEL
 #include <pkgconf/kernel.h>     // CYGPKG_KERNEL_INSTRUMENT
 #endif
-
+#include CYGHWR_MEMORY_LAYOUT_H
+        
 #include <cyg/hal/arch.inc>
 #include <cyg/hal/variant.inc>
 #include <cyg/hal/sh_regs.h>
@@ -94,6 +95,9 @@ FUNC_START(_reset)
 $_reset_platform:
 #ifdef CYG_HAL_STARTUP_RAM
         .long   CYG_LABEL_DEFN(_reset_platform)
+#elif defined(CYG_HAL_STARTUP_ROMRAM)
+        // Uncached "shadow" address but adjusted for VMA/LMA differences
+        .long   __reset_platform+0x20000000-CYGMEM_REGION_ram+CYGMEM_REGION_rom
 #else
         // Uncached "shadow" address
         .long   CYG_LABEL_DEFN(_reset_platform)+0x20000000
@@ -615,11 +619,7 @@ FUNC_START(hal_interrupt_stack_call_pend
 #ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
         SYM_PTR_REF(cyg_interrupt_call_pending_DSRs)
         SYM_PTR_REF(interrupt_end)
-        # cyg_scheduler_sched_lock is special as it is defined as an asm alias
-        
-        .globl cyg_scheduler_sched_lock
-$cyg_scheduler_sched_lock:	.long	cyg_scheduler_sched_lock
-        
+        SYM_PTR_REF(cyg_scheduler_sched_lock)
 #endif
 
 #---------------------------------------------------------------------------
--- a/packages/infra/current/ChangeLog
+++ b/packages/infra/current/ChangeLog
@@ -1,3 +1,15 @@
+2000-12-15  Nick Garnett  <nickg@cygnus.co.uk>
+
+	* include/clist.hxx: Added this implementation of simple circular
+	list classes. This is not immediately useful, except to the
+	dynamic loader, but it is intended to simplify the MLQ scheduler
+	with these classes eventually.
+
+2000-12-13  Jesper Skov  <jskov@redhat.com>
+
+	* include/cyg_type.h (CYGBLD_ATTRIB_ASM_ALIAS): Mangle assembler
+	symbols properly.
+
 2000-09-08  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/cyg_type.h (CYGBLD_ATTRIB_SECTION): Don't stringify arg.
new file mode 100644
--- /dev/null
+++ b/packages/infra/current/include/clist.hxx
@@ -0,0 +1,287 @@
+#ifndef CYGONCE_INFRA_CLIST_HXX
+#define CYGONCE_INFRA_CLIST_HXX
+
+//==========================================================================
+//
+//      clist.hxx
+//
+//      Standard types, and some useful coding macros.
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):     nickg
+// Contributors:  nickg
+// Date:        2000-11-08
+// Purpose:     Simple circular list implementation
+// Description: A simple implementation of circular lists.
+// Usage:       #include "cyg/infra/clist.hxx"
+//              ...
+//              
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <cyg/infra/cyg_type.h>
+
+// -------------------------------------------------------------------------
+// Class and structure conversion macros.
+// CYG_CLASSFROMFIELD translates a pointer to a field of a struct or
+// class into a pointer to the class.
+// CYG_OFFSETOFBASE yields the offset of a base class of a derived
+// class.
+// CYG_CLASSFROMBASE translates a pointer to a base class into a pointer
+// to a selected derived class. The base class object _must_ be part of
+// the specified derived class. This is essentially a poor mans version
+// of the RTTI dynamic_cast operator.
+// Caveat: These macros do not work for virtual base classes.
+
+// Note: These definitions are exact duplicates of definitions in
+// ktypes.h. If either definition is changed, the other should be too
+// to avoid compiler messages.
+
+#define CYG_CLASSFROMFIELD(_type_,_member_,_ptr_)\
+    ((_type_ *)((char *)(_ptr_)-((char *)&(((_type_ *)0)->_member_))))
+
+#define CYG_OFFSETOFBASE(_type_,_base_)\
+    ((char *)((_base_ *)((_type_ *)4)) - (char *)4)
+
+# define CYG_CLASSFROMBASE(_class_,_base_,_ptr_)\
+    ((_class_ *)((char *)(_ptr_) - CYG_OFFSETOFBASE(_class_,_base_)))
+
+
+// -------------------------------------------------------------------------
+// Cyg_DNode class.
+// This simply represents a double linked node that is intended to
+// be a base member of the class that is being managed.
+
+class Cyg_DNode
+{
+    Cyg_DNode   *next;
+    Cyg_DNode   *prev;
+
+public:
+
+    Cyg_DNode()
+    {
+        // Initialize pointers to point here
+        next = prev = this;
+    };
+
+    ~Cyg_DNode()
+    {
+        // If this node is still linked, unlink it.
+        if( next != this )
+            unlink();
+    };
+
+    // Accessor and test functions
+    Cyg_DNode *get_next() { return next; };
+    Cyg_DNode *get_prev() { return prev; };
+    cyg_bool  in_list() { return next != this; };
+    
+    // Insert a node into the list before this one.
+    void insert( Cyg_DNode *node )
+    {
+        node->next = this;
+        node->prev = prev;
+        prev->next = node;
+        prev = node;
+    };
+
+    // Append a node after this one
+    void append( Cyg_DNode *node )
+    {
+        node->prev = this;
+        node->next = next;
+        next->prev = node;
+        next = node;
+    };
+
+    // Unlink this node from it's list. It is safe to apply this to an
+    // already unlinked node.
+    void unlink()
+    {
+        next->prev = prev;
+        prev->next = next;
+        next = prev = this;
+    };
+};
+
+// -------------------------------------------------------------------------
+// Cyg_CList class.
+
+// This is a simple class that manages a circular list of DNodes. This
+// object points to the head of the list and provides functions to
+// manipulate the head and tail of the list.
+
+class Cyg_CList
+{
+    Cyg_DNode   *head;                  // list head pointer
+
+public:
+
+    Cyg_CList()
+    {
+        head = NULL;
+    };
+
+    ~Cyg_CList()
+    {
+        while( head != NULL )
+            rem_head();
+    };
+
+    // Accessor and test functions
+    Cyg_DNode *get_head() { return head; };
+    Cyg_DNode *get_tail() { return head?head->get_prev():NULL; };
+    cyg_bool empty() { return head == NULL; };
+    
+    // Add a node at the head of the list
+    void add_head( Cyg_DNode *node )
+    {
+        if( head == NULL )
+            head = node;
+        else
+        {
+            head->append( node );
+            head = node;
+        }
+    };
+
+    // Remove the node at the head of the list
+    Cyg_DNode *rem_head()
+    {
+        Cyg_DNode *node = head;
+        if( node != NULL )
+        {
+            // There is a node available
+            Cyg_DNode *next = node->get_next();
+            if( next == node )
+            {
+                // Only node on list
+                head = NULL;
+            }
+            else
+            {
+                // remove head node and move head to next.
+                node->unlink();
+                head = next;
+            }
+        }
+        return node;
+    };
+
+
+    // Add a node at the tail of the list
+    void add_tail( Cyg_DNode *node )
+    {
+        if( head == NULL )
+            head = node;
+        else
+            head->append( node );
+    };
+
+    // Remove the node at the tail of the list
+    Cyg_DNode *rem_tail()
+    {
+        if( head == NULL )
+            return NULL;
+
+        Cyg_DNode *node = head->get_prev();
+
+        if( node == head )
+            head = NULL;
+        else node->unlink();
+        
+        return node;
+    };
+
+    // General removal. Deals with what happend if this is only
+    // object on list, or is the head.
+    void remove( Cyg_DNode *node )
+    {
+        if( node == head )
+            rem_head();
+        else node->unlink();
+    };
+};
+
+// -------------------------------------------------------------------------
+// Cyg_CList_T
+// Template class that allows us to make use of the CList class in a
+// type-specific way.
+
+template <class T> class Cyg_CList_T
+    : public Cyg_CList
+{
+public:
+
+    Cyg_CList_T<T>() {};
+    ~Cyg_CList_T<T>() {};
+
+    T *get_head() { return CYG_CLASSFROMBASE( T, Cyg_DNode, Cyg_CList::get_head() ); };
+    T *get_tail() { return CYG_CLASSFROMBASE( T, Cyg_DNode, Cyg_CList::get_tail() ); };
+    
+    T *rem_head()
+    {
+        Cyg_DNode *node = Cyg_CList::rem_head();
+        return CYG_CLASSFROMBASE( T, Cyg_DNode, node );
+    };
+
+    T *rem_tail()
+    {
+        Cyg_DNode *node = Cyg_CList::rem_tail();
+        return CYG_CLASSFROMBASE( T, Cyg_DNode, node );
+    };
+
+    // The rest just default to the Cyg_CList class operations.
+};
+
+// -------------------------------------------------------------------------
+// Cyg_DNode_T
+// Template class that allows us to make use of the DNode class in a
+// type-specific way.
+
+template <class T> class Cyg_DNode_T
+    : public Cyg_DNode
+{
+public:
+
+    Cyg_DNode_T<T>() {};
+    ~Cyg_DNode_T<T>() {};
+
+    T *get_next() { return CYG_CLASSFROMBASE( T, Cyg_DNode, Cyg_DNode::get_next() ); };
+    T *get_prev() { return CYG_CLASSFROMBASE( T, Cyg_DNode, Cyg_DNode::get_prev() ); };
+
+    // The rest just default to the Cyg_DNode class operations.
+};
+
+// -------------------------------------------------------------------------
+#endif // CYGONCE_INFRA_CLIST_HXX multiple inclusion protection
+// EOF clist.hxx
+
--- a/packages/infra/current/include/cyg_type.h
+++ b/packages/infra/current/include/cyg_type.h
@@ -272,6 +272,28 @@ typedef cyg_haladdrword CYG_ADDRWORD;
 #define CYG_INIT_DEFAULT                65535
 
 // -------------------------------------------------------------------------
+// Label name macros. Some toolsets generate labels with initial
+// underscores and others don't. CYG_LABEL_NAME should be used on
+// labels in C/C++ code that are defined in assembly code or linker
+// scripts. CYG_LABEL_DEFN is for use in assembly code and linker
+// scripts where we need to manufacture labels that can be used from
+// C/C++.
+// These are default implementations that should work for most targets.
+// They may be overridden in basetype.h if necessary.
+
+#ifndef CYG_LABEL_NAME
+
+#define CYG_LABEL_NAME(_name_) _name_
+
+#endif
+
+#ifndef CYG_LABEL_DEFN
+
+#define CYG_LABEL_DEFN(_label) _label
+
+#endif
+
+// -------------------------------------------------------------------------
 // COMPILER-SPECIFIC STUFF
 
 #ifdef __GNUC__
@@ -293,8 +315,10 @@ typedef cyg_haladdrword CYG_ADDRWORD;
 // This effectively does the reverse of the previous macro. It defines
 // a name that the attributed variable or function will actually have
 // in assembler.
+#define __Str(x) #x
+#define __Xstr(x) __Str(x)
 # define CYGBLD_ATTRIB_ASM_ALIAS(__symbol__) \
-            __asm__ ( #__symbol__ )
+            __asm__ ( __Xstr( CYG_LABEL_DEFN( __symbol__ ) ) )
 
 // Shows that a function returns the same value when given the same args, but
 // note this can't be used if there are pointer args
@@ -334,28 +358,6 @@ typedef cyg_haladdrword CYG_ADDRWORD;
         CYGBLD_ATTRIB_WEAK CYGBLD_ATTRIB_ALIAS(__symbol__)
 
 // -------------------------------------------------------------------------
-// Label name macros. Some toolsets generate labels with initial
-// underscores and others don't. CYG_LABEL_NAME should be used on
-// labels in C/C++ code that are defined in assembly code or linker
-// scripts. CYG_LABEL_DEFN is for use in assembly code and linker
-// scripts where we need to manufacture labels that can be used from
-// C/C++.
-// These are default implementations that should work for most targets.
-// They may be overridden in basetype.h if necessary.
-
-#ifndef CYG_LABEL_NAME
-
-#define CYG_LABEL_NAME(_name_) _name_
-
-#endif
-
-#ifndef CYG_LABEL_DEFN
-
-#define CYG_LABEL_DEFN(_label) _label
-
-#endif
-
-// -------------------------------------------------------------------------
 // Various "flavours" of memory regions that can be described by the 
 // Memory Layout Tool (MLT).
 
--- a/packages/io/eth/current/ChangeLog
+++ b/packages/io/eth/current/ChangeLog
@@ -1,3 +1,8 @@
+2000-12-11  Gary Thomas  <gthomas@redhat.com>
+
+	* src/net/eth_drv.c (eth_drv_run_deliveries): Support ^C when
+	using network based debug channel.
+
 2000-12-02  Gary Thomas  <gthomas@redhat.com>
 
 	* src/stand_alone/eth_drv.c (eth_drv_write): Debug: dump packet
--- a/packages/io/eth/current/src/net/eth_drv.c
+++ b/packages/io/eth/current/src/net/eth_drv.c
@@ -741,7 +741,14 @@ void eth_drv_run_deliveries( void )
     for (t = &__NETDEVTAB__[0]; t != &__NETDEVTAB_END__; t++) {
         struct eth_drv_sc *sc = (struct eth_drv_sc *)t->device_instance;
         if ( ETH_DRV_NEEDS_DELIVERY & sc->state ) {
+#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT)
+            cyg_bool was_ctrlc_int;
+#endif
             sc->state &=~ETH_DRV_NEEDS_DELIVERY;
+#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT)
+            was_ctrlc_int = HAL_CTRLC_CHECK((*sc->funs->int_vector)(sc), sc);
+            if (!was_ctrlc_int) // Fall through and run normal code
+#endif
             (*sc->funs->deliver)(sc);
         }
     }
@@ -750,10 +757,6 @@ void eth_drv_run_deliveries( void )
 
 // ------------------------------------------------------------------------
 
-
-
-
-
 #ifdef CYGPKG_IO_PCMCIA
 // Lookup a 'netdev' entry, assuming that it is an ethernet device.
 cyg_netdevtab_entry_t * 
--- a/packages/io/fileio/current/ChangeLog
+++ b/packages/io/fileio/current/ChangeLog
@@ -1,3 +1,8 @@
+2000-12-15  Nick Garnett  <nickg@cygnus.co.uk>
+
+	* src/misc.cxx: Fixed some bugs in initialization of timestamp
+	function when Wallclock and POSIX packages are absent.
+
 2000-11-01  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/io.cxx (readwrite): Ensure we call FILEIO_RETURN_VALUE() to
--- a/packages/io/fileio/current/src/misc.cxx
+++ b/packages/io/fileio/current/src/misc.cxx
@@ -62,6 +62,8 @@
 # include <cyg/io/wallclock.hxx>       // Wallclock class
 #endif
 
+#include <cyg/kernel/clock.inl>         // Clock inlines
+
 #include "fio.h"                       // Private header
 
 //==========================================================================
@@ -400,7 +402,7 @@ void cyg_fs_unlock( cyg_mtab_entry *mte,
     // convert it to seconds ourself.
     
     static struct Cyg_Clock::converter sec_converter;
-    struct cyg_bool initialized = false;
+    static cyg_bool initialized = false;
     cyg_tick_count ticks;
     
     if( !initialized )
@@ -411,7 +413,7 @@ void cyg_fs_unlock( cyg_mtab_entry *mte,
 
     ticks = Cyg_Clock::real_time_clock->current_value();
     
-    return (time_t) Cyg_Clock::convert( ticks, &sec_converter )
+    return (time_t) Cyg_Clock::convert( ticks, &sec_converter );
         
 #endif    
     
--- a/packages/isoinfra/current/ChangeLog
+++ b/packages/isoinfra/current/ChangeLog
@@ -1,3 +1,9 @@
+2000-12-15  Nick Garnett  <nickg@cygnus.co.uk>
+
+	* include/dlfcn.h: 
+	* cdl/isoinfra.cdl:
+	Added support for dlfcn.h header that defines dynamic load API.
+
 2000-11-01  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* cdl/isoinfra.cdl: Add CYGINT_ISO_STDIO_STREAMS and
--- a/packages/isoinfra/current/cdl/isoinfra.cdl
+++ b/packages/isoinfra/current/cdl/isoinfra.cdl
@@ -999,6 +999,25 @@ cdl_package CYGPKG_ISOINFRA {
     }
 
 # ====================================================================
+
+    cdl_component CYGPKG_ISO_DLFCN {
+        display       "Dynamic load API"
+        flavor        none
+        no_define
+
+        cdl_interface CYGINT_ISO_DLFCN {
+            display       "Dynamic load implementations"
+            requires      { 1 >= CYGINT_ISO_DLFCN }
+        }
+    
+        cdl_option CYGBLD_ISO_DLFCN_HEADER {
+            display       "Dynamic load implementation header"
+            flavor        booldata
+            default_value 0
+        }
+    }
+    
+# ====================================================================
     
         cdl_component CYGPKG_ISOINFRA_OPTIONS {
         display "Build options"
new file mode 100644
--- /dev/null
+++ b/packages/isoinfra/current/include/dlfcn.h
@@ -0,0 +1,56 @@
+#ifndef CYGONCE_ISO_DLFCN_H
+#define CYGONCE_ISO_DLFCN_H
+/*========================================================================
+//
+//      dlfcn.h
+//
+//      Dynamic load functions
+//
+//========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):     nickg
+// Contributors:  
+// Date:          2000-12-13
+// Purpose:       This file provides the dynamic loading macros, types and functions
+//                required by POSIX 1003.1.
+// Usage:         #include <dlfcn.h>
+//
+//####DESCRIPTIONEND####
+//
+//======================================================================
+*/
+
+#include <pkgconf/isoinfra.h>           /* Configuration header */
+
+#ifdef CYGBLD_ISO_DLFCN_HEADER
+# include CYGBLD_ISO_DLFCN_HEADER
+#endif
+
+//======================================================================
+#endif /* CYGONCE_ISO_DLFCN_H multiple inclusion protection */
+/* EOF dlfcn.h */
--- a/packages/kernel/current/ChangeLog
+++ b/packages/kernel/current/ChangeLog
@@ -1,3 +1,9 @@
+2000-12-08  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* cdl/thread.cdl (CYGFUN_KERNEL_ALL_THREADS_STACK_CHECKING): 
+	Requires threads list, rather than active_if them so that
+	inference engine can do its thang.
+
 2000-12-07  Jesper Skov  <jskov@redhat.com>
 
 	* src/debug/dbg-thread-demux.c: Add comment about the use of
--- a/packages/kernel/current/cdl/thread.cdl
+++ b/packages/kernel/current/cdl/thread.cdl
@@ -94,7 +94,7 @@ cdl_component CYGFUN_KERNEL_THREADS_STAC
 
     cdl_option CYGFUN_KERNEL_ALL_THREADS_STACK_CHECKING {
 	display   "Check all threads whenever possible"
-	active_if  CYGVAR_KERNEL_THREADS_LIST
+	requires  CYGVAR_KERNEL_THREADS_LIST
 	default_value 0
 	description "
 	This option enables more active checking of all threads for
--- a/packages/redboot/current/ChangeLog
+++ b/packages/redboot/current/ChangeLog
@@ -1,3 +1,32 @@
+2000-12-15  Gary Thomas  <gthomas@redhat.com>
+
+	* src/version.c: Define GDB stubs version here as well.  Also
+	add warnings and informationabout how all of this works.
+
+2000-12-13  Gary Thomas  <gthomas@redhat.com>
+
+	* src/version.c: New file.
+
+	* src/main.c: 
+	* cdl/redboot.cdl: Reorg - main.c is now treated like all other
+	files.  New file 'version.c' holds the special stuff used at
+	build time to get interesting version information into the
+	final product.
+
+2000-12-12  Gary Thomas  <gthomas@redhat.com>
+
+	* src/flash.c (get_config): Increase size of input buffer used
+	during 'fconfig' command.
+
+2000-12-11  Gary Thomas  <gthomas@redhat.com>
+
+	* src/main.c: Change in HAL layering - need to include proper
+	file to get 'reset' definition.
+
+2000-12-08  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* cdl/redboot.cdl: Tweak CYGPKG_REDBOOT_MAX_CMD_LINE description.
+
 2000-12-07  Gary Thomas  <gthomas@redhat.com>
 
 	* src/main.c (cyg_start): Make CLI command buffer static.
--- a/packages/redboot/current/cdl/redboot.cdl
+++ b/packages/redboot/current/cdl/redboot.cdl
@@ -74,17 +74,18 @@ cdl_package CYGPKG_REDBOOT {
                      stripping before being converted to a binary image.
                      This is handled by a rule in the target CDL."
 
+        compile main.c
 	compile printf.c misc_funs.c io.c parse.c ticks.c xyzModem.c syscall.c
-        compile -library=libextras.a load.c
+        compile -library=libextras.a load.c 
 
         make -priority 320 {
-            <PREFIX>/bin/redboot.elf : $(PREFIX)/lib/target.ld $(PREFIX)/lib/vectors.o $(PREFIX)/lib/libtarget.a $(PREFIX)/lib/libextras.a main.o
+            <PREFIX>/bin/redboot.elf : $(PREFIX)/lib/target.ld $(PREFIX)/lib/vectors.o $(PREFIX)/lib/libtarget.a $(PREFIX)/lib/libextras.a version.o
                     @sh -c "mkdir -p $(dir $@)"
-	            $(CC) $(LDFLAGS) -L$(PREFIX)/lib -Ttarget.ld -o $@ main.o
+	            $(CC) $(LDFLAGS) -L$(PREFIX)/lib -Ttarget.ld -o $@ version.o
         }
 	make -priority 319 {
-           main.o: $(REPOSITORY)/$(PACKAGE)/src/main.c $(PREFIX)/lib/libtarget.a
-             $(CC) -c $(INCLUDE_PATH) $(CFLAGS) -o main.o $(REPOSITORY)/$(PACKAGE)/src/main.c
+           version.o: $(REPOSITORY)/$(PACKAGE)/src/version.c $(PREFIX)/lib/libtarget.a
+             $(CC) -c $(INCLUDE_PATH) $(CFLAGS) -o version.o $(REPOSITORY)/$(PACKAGE)/src/version.c
 	}
     }
 
@@ -143,8 +144,8 @@ cdl_package CYGPKG_REDBOOT {
         default_value 256
         description   "
           This option allows control over how long the CLI command line
-          should be.  As such, it allows control over how much stack space 
-          is required by RedBoot during command processing."
+          should be.  This space will be allocated statically
+          rather than from RedBoot's stack."
     }
 
     cdl_component CYGPKG_REDBOOT_FLASH {
--- a/packages/redboot/current/src/flash.c
+++ b/packages/redboot/current/src/flash.c
@@ -844,7 +844,7 @@ extern struct config_option __CONFIG_opt
 static int
 get_config(struct config_option *opt, int offset, bool list_only)
 {
-    char line[80], *sp, *lp;
+    char line[256], *sp, *lp;
     int ret;
     bool hold_bool_val, enable;
     unsigned long hold_int_val;
--- a/packages/redboot/current/src/main.c
+++ b/packages/redboot/current/src/main.c
@@ -51,7 +51,11 @@
 #include CYGHWR_MEMORY_LAYOUT_H
 
 #include <cyg/hal/hal_tables.h>
+#ifdef CYGBLD_HAL_PLATFORM_STUB_H
+#include CYGBLD_HAL_PLATFORM_STUB_H
+#else
 #include <cyg/hal/plf_stub.h>
+#endif
 
 // Builtin Self Test (BIST)
 externC void bist(void);
@@ -108,7 +112,8 @@ extern void HAL_ARCH_PROGRAM_NEW_STACK(v
 void
 do_version(int argc, char *argv[])
 {
-    printf("\nRedBoot(tm) debug environment - built %s, %s\n", __TIME__, __DATE__);
+    extern char RedBoot_version[];
+    printf(RedBoot_version);
 #ifdef HAL_PLATFORM_CPU
     printf("Platform: %s (%s) %s\n", HAL_PLATFORM_BOARD, HAL_PLATFORM_CPU, HAL_PLATFORM_EXTRA);
 #endif
new file mode 100644
--- /dev/null
+++ b/packages/redboot/current/src/version.c
@@ -0,0 +1,69 @@
+//==========================================================================
+//
+//      version.c
+//
+//      RedBoot version "string"
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    gthomas
+// Contributors: gthomas
+// Date:         2000-12-13
+// Purpose:      
+// Description:  
+//              
+// This code is part of RedBoot (tm).
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <cyg/hal/hal_arch.h>
+
+//
+// These strings are used for informational purposes only.  If the end
+// user wishes to replace them, simply redefine them in a platform specific
+// file, e.g. in a local file used to provide additional local RedBoot
+// customization.  Examples of such are platforms which define a special
+// 'exec' command used to start a Linux kernel.
+//
+// CAUTION! Since this file is compiled using very special rules, it is not
+// possible to replace it with a local version contained in the "build" tree.
+// Replacing the information exported herein is accomplished via the techniques
+// outlined above.
+//
+
+char RedBoot_version[] CYGBLD_ATTRIB_WEAK = 
+  "\nRedBoot(tm) debug environment - built " __TIME__ ", " __DATE__ "\n";
+
+// Override default GDB stubs 'info'
+// Note: this can still be a "weak" symbol since it will occur in the .o
+// file explicitly mentioned in the link command.  User programs will 
+// still be allowed to override it.
+char GDB_stubs_version[] CYGBLD_ATTRIB_WEAK = 
+    "eCos GDB stubs [via RedBoot] - built " __DATE__ " / " __TIME__;