--- c/src/lib/libbsp/mips/malta/irq/maxvectors.c | 3 +- c/src/lib/libbsp/mips/shared/irq/maxvectors.c | 2 +- cpukit/sapi/include/confdefs.h | 28 --------------------- cpukit/score/cpu/mips/rtems/score/cpu.h | 8 +++-- cpukit/score/cpu/nios2/Makefile.am | 1 - cpukit/score/cpu/nios2/nios2-initialize-vectors.c | 25 ------------------ cpukit/score/cpu/nios2/rtems/score/cpu.h | 2 +- cpukit/score/cpu/no_cpu/rtems/score/cpu.h | 17 ++++++++---- cpukit/score/include/rtems/score/isr.h | 14 +--------- cpukit/score/src/isr.c | 12 ++++++--- testsuites/sptests/spfatal07/testcase.h | 4 --- testsuites/sptests/spintr_err01/init.c | 2 +- 12 files changed, 29 insertions(+), 89 deletions(-) delete mode 100644 cpukit/score/cpu/nios2/nios2-initialize-vectors.c
diff --git a/c/src/lib/libbsp/mips/malta/irq/maxvectors.c b/c/src/lib/libbsp/mips/malta/irq/maxvectors.c index c17583e..f2aee55 100644 --- a/c/src/lib/libbsp/mips/malta/irq/maxvectors.c +++ b/c/src/lib/libbsp/mips/malta/irq/maxvectors.c @@ -20,5 +20,4 @@ #include <rtems.h> -unsigned int mips_interrupt_number_of_vectors = 13; - +uint32_t _MIPS_Interrupt_maximum_vector_number = 12; diff --git a/c/src/lib/libbsp/mips/shared/irq/maxvectors.c b/c/src/lib/libbsp/mips/shared/irq/maxvectors.c index 273253b..80f7f02 100644 --- a/c/src/lib/libbsp/mips/shared/irq/maxvectors.c +++ b/c/src/lib/libbsp/mips/shared/irq/maxvectors.c @@ -17,4 +17,4 @@ #include <rtems.h> #include <bsp/irq.h> -unsigned int mips_interrupt_number_of_vectors = BSP_INTERRUPT_VECTOR_MAX; +uint32_t _MIPS_Interrupt_maximum_vector_number = BSP_INTERRUPT_VECTOR_MAX; diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h index 69c74f7..0dc9137 100644 --- a/cpukit/sapi/include/confdefs.h +++ b/cpukit/sapi/include/confdefs.h @@ -2245,31 +2245,6 @@ const rtems_libio_helper rtems_fs_init_helper = #endif /** - * On architectures that use Simple Vectored Interrupts, it is RTEMS - * responsibility to allocate the vector table. This avoids reserving - * the memory on architectures that use the Programmable Interrupt - * Controller Vectored Interrupts. - */ -#if (CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE) - /* - * This is a (hopefully) temporary hack. On the mips, the number of - * vectors is NOT statically defined. But it has to be statically - * defined for this to work. This is an issue looking for a nice - * solution. - */ - #if defined(__mips__) - #define CONFIGURE_INTERRUPT_VECTOR_TABLE \ - _Configure_From_workspace( (sizeof(ISR_Handler_entry) * 256)) - #else - #define CONFIGURE_INTERRUPT_VECTOR_TABLE \ - _Configure_From_workspace( \ - (sizeof(ISR_Handler_entry) * ISR_NUMBER_OF_VECTORS)) - #endif -#else - #define CONFIGURE_INTERRUPT_VECTOR_TABLE 0 -#endif - -/** * RTEMS uses two instance of an internal mutex class. This accounts * for these mutexes. */ @@ -2298,7 +2273,6 @@ const rtems_libio_helper rtems_fs_init_helper = */ #define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \ ( CONFIGURE_MEMORY_FOR_IDLE_TASK + /* IDLE and stack */ \ - CONFIGURE_INTERRUPT_VECTOR_TABLE + /* interrupt vectors */ \ CONFIGURE_INTERRUPT_STACK_MEMORY + /* interrupt stack */ \ CONFIGURE_API_MUTEX_MEMORY /* allocation mutex */ \ ) @@ -2716,7 +2690,6 @@ const rtems_libio_helper rtems_fs_init_helper = uint32_t POSIX; /* System overhead pieces */ - uint32_t INTERRUPT_VECTOR_TABLE; uint32_t INTERRUPT_STACK_MEMORY; uint32_t MEMORY_FOR_IDLE_TASK; @@ -2771,7 +2744,6 @@ const rtems_libio_helper rtems_fs_init_helper = CONFIGURE_MEMORY_FOR_POSIX, /* System overhead pieces */ - CONFIGURE_INTERRUPT_VECTOR_TABLE, CONFIGURE_INTERRUPT_STACK_MEMORY, CONFIGURE_MEMORY_FOR_IDLE_TASK, diff --git a/cpukit/score/cpu/mips/rtems/score/cpu.h b/cpukit/score/cpu/mips/rtems/score/cpu.h index b871969..42c5508 100644 --- a/cpukit/score/cpu/mips/rtems/score/cpu.h +++ b/cpukit/score/cpu/mips/rtems/score/cpu.h @@ -664,9 +664,11 @@ SCORE_EXTERN Context_Control_fp _CPU_Null_fp_context; * by RTEMS. */ -extern unsigned int mips_interrupt_number_of_vectors; -#define CPU_INTERRUPT_NUMBER_OF_VECTORS (mips_interrupt_number_of_vectors) -#define CPU_INTERRUPT_MAXIMUM_VECTOR_NUMBER (CPU_INTERRUPT_NUMBER_OF_VECTORS - 1) +#define CPU_INTERRUPT_NUMBER_OF_VECTORS 256 + +extern uint32_t _MIPS_Interrupt_maximum_vector_number; + +#define CPU_INTERRUPT_MAXIMUM_VECTOR_NUMBER _MIPS_Interrupt_maximum_vector_number /* * Should be large enough to run all RTEMS tests. This ensures diff --git a/cpukit/score/cpu/nios2/Makefile.am b/cpukit/score/cpu/nios2/Makefile.am index 62286cd..6004467 100644 --- a/cpukit/score/cpu/nios2/Makefile.am +++ b/cpukit/score/cpu/nios2/Makefile.am @@ -33,7 +33,6 @@ libscorecpu_a_SOURCES += nios2-fatal-halt.c libscorecpu_a_SOURCES += nios2-iic-low-level.S libscorecpu_a_SOURCES += nios2-iic-irq.c libscorecpu_a_SOURCES += nios2-initialize.c -libscorecpu_a_SOURCES += nios2-initialize-vectors.c libscorecpu_a_SOURCES += nios2-isr-get-level.c libscorecpu_a_SOURCES += nios2-isr-install-raw-handler.c libscorecpu_a_SOURCES += nios2-isr-install-vector.c diff --git a/cpukit/score/cpu/nios2/nios2-initialize-vectors.c b/cpukit/score/cpu/nios2/nios2-initialize-vectors.c deleted file mode 100644 index da1ee4b..0000000 --- a/cpukit/score/cpu/nios2/nios2-initialize-vectors.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2011 embedded brains GmbH - * - * Copyright (c) 2006 Kolja Waschk (rtemsdev/ixo.de) - * - * COPYRIGHT (c) 1989-2006 - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#ifdef HAVE_CONFIG_H - #include "config.h" -#endif - -#include <rtems/score/isr.h> - -#include <string.h> - -void _CPU_Initialize_vectors( void ) -{ - memset(_ISR_Vector_table, 0, sizeof(ISR_Handler_entry) * ISR_NUMBER_OF_VECTORS); -} diff --git a/cpukit/score/cpu/nios2/rtems/score/cpu.h b/cpukit/score/cpu/nios2/rtems/score/cpu.h index 6c62a1f..fcfef8d 100644 --- a/cpukit/score/cpu/nios2/rtems/score/cpu.h +++ b/cpukit/score/cpu/nios2/rtems/score/cpu.h @@ -192,7 +192,7 @@ typedef struct { uint32_t ipending; } CPU_Exception_frame; -void _CPU_Initialize_vectors( void ); +#define _CPU_Initialize_vectors() /** * @brief Macro to disable interrupts. diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h index 959fb58..fbf207a 100644 --- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h +++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h @@ -686,19 +686,24 @@ SCORE_EXTERN Context_Control_fp _CPU_Null_fp_context; /** * @ingroup CPUInterrupt * - * This defines the number of entries in the @ref _ISR_Vector_table managed - * by RTEMS. + * This defines the number of entries in the _ISR_Vector_table managed by RTEMS + * in case CPU_SIMPLE_VECTORED_INTERRUPTS is defined to TRUE. It must be a + * compile-time constant. * - * Port Specific Information: - * - * XXX document implementation including references if appropriate + * It must be undefined in case CPU_SIMPLE_VECTORED_INTERRUPTS is defined to + * FALSE. */ #define CPU_INTERRUPT_NUMBER_OF_VECTORS 32 /** * @ingroup CPUInterrupt * - * This defines the highest interrupt vector number for this port. + * This defines the highest interrupt vector number for this port in case + * CPU_SIMPLE_VECTORED_INTERRUPTS is defined to TRUE. It must be less than + * CPU_INTERRUPT_NUMBER_OF_VECTORS. It may be not a compile-time constant. + * + * It must be undefined in case CPU_SIMPLE_VECTORED_INTERRUPTS is defined to + * FALSE. */ #define CPU_INTERRUPT_MAXIMUM_VECTOR_NUMBER (CPU_INTERRUPT_NUMBER_OF_VECTORS - 1) diff --git a/cpukit/score/include/rtems/score/isr.h b/cpukit/score/include/rtems/score/isr.h index f1ac5ae..dcb25e1 100644 --- a/cpukit/score/include/rtems/score/isr.h +++ b/cpukit/score/include/rtems/score/isr.h @@ -71,22 +71,10 @@ typedef ISR_Handler ( *ISR_Handler_entry )( #endif /** - * This constant promotes out the number of vectors truly supported by - * the current CPU being used. This is usually the number of distinct vectors - * the cpu can vector. - */ -#define ISR_NUMBER_OF_VECTORS CPU_INTERRUPT_NUMBER_OF_VECTORS - -/** - * This constant promotes out the highest valid interrupt vector number. - */ -#define ISR_INTERRUPT_MAXIMUM_VECTOR_NUMBER CPU_INTERRUPT_MAXIMUM_VECTOR_NUMBER - -/** * The following declares the Vector Table. Application * interrupt service routines are vectored by the ISR Handler via this table. */ -SCORE_EXTERN ISR_Handler_entry *_ISR_Vector_table; +extern ISR_Handler_entry _ISR_Vector_table[ CPU_INTERRUPT_NUMBER_OF_VECTORS ]; #endif /** diff --git a/cpukit/score/src/isr.c b/cpukit/score/src/isr.c index 07f3e61..1ae6e59 100644 --- a/cpukit/score/src/isr.c +++ b/cpukit/score/src/isr.c @@ -26,15 +26,19 @@ #include <rtems/score/wkspace.h> #include <rtems/config.h> +#if (CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE) + ISR_Handler_entry _ISR_Vector_table[ CPU_INTERRUPT_NUMBER_OF_VECTORS ]; +#elif defined(CPU_INTERRUPT_NUMBER_OF_VECTORS) + #error "CPU_INTERRUPT_NUMBER_OF_VECTORS is defined for non-simple vectored interrupts" +#elif defined(CPU_INTERRUPT_MAXIMUM_VECTOR_NUMBER) + #error "CPU_INTERRUPT_MAXIMUM_VECTOR_NUMBER is defined for non-simple vectored interrupts" +#endif + void _ISR_Handler_initialization( void ) { _ISR_Nest_level = 0; #if (CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE) - _ISR_Vector_table = _Workspace_Allocate_or_fatal_error( - sizeof(ISR_Handler_entry) * ISR_NUMBER_OF_VECTORS - ); - _CPU_Initialize_vectors(); #endif diff --git a/testsuites/sptests/spfatal07/testcase.h b/testsuites/sptests/spfatal07/testcase.h index 25fc8f2..e18563c 100644 --- a/testsuites/sptests/spfatal07/testcase.h +++ b/testsuites/sptests/spfatal07/testcase.h @@ -37,10 +37,6 @@ rtems_initialization_tasks_table Initialization_tasks[] = { #define FATAL_ERROR_EXPECTED_ERROR \ INTERNAL_ERROR_INTERRUPT_STACK_TOO_SMALL -#if CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE - #define CONFIGURE_MEMORY_OVERHEAD (sizeof(ISR_Handler_entry) * ISR_NUMBER_OF_VECTORS) -#endif - #if CPU_ALLOCATE_INTERRUPT_STACK == TRUE #define CONFIGURE_INTERRUPT_STACK_SIZE (STACK_MINIMUM_SIZE - 1) #endif diff --git a/testsuites/sptests/spintr_err01/init.c b/testsuites/sptests/spintr_err01/init.c index c2c39ae..84ebfdb 100644 --- a/testsuites/sptests/spintr_err01/init.c +++ b/testsuites/sptests/spintr_err01/init.c @@ -36,7 +36,7 @@ rtems_task Init( rtems_isr_entry old_service_routine; status = rtems_interrupt_catch( Service_routine, - ISR_INTERRUPT_MAXIMUM_VECTOR_NUMBER + 10, + CPU_INTERRUPT_MAXIMUM_VECTOR_NUMBER + 1, &old_service_routine ); fatal_directive_status( -- 1.7.7 _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel