Mercurial > flash_v2
changeset 145:2e9a636d9de9 ecos-sw-2000-12-21
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
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__;
