Let the BSP define TM27_INTERRUPT_VECTOR_DEFAULT to more efficiently and reliably get the TM27 default interrupt vector. --- bsps/include/dev/irq/arm-gic-tm27.h | 2 ++ bsps/sparc/leon3/include/tm27.h | 1 + cpukit/doxygen.h | 18 +++++++++++++++++- testsuites/validation/tx-call-within-isr.c | 8 +++++++- 4 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/bsps/include/dev/irq/arm-gic-tm27.h b/bsps/include/dev/irq/arm-gic-tm27.h index ad2c5e812c..f2a16afae3 100644 --- a/bsps/include/dev/irq/arm-gic-tm27.h +++ b/bsps/include/dev/irq/arm-gic-tm27.h @@ -55,6 +55,8 @@ #define ARM_GIC_TM27_IRQ_HIGH ARM_GIC_IRQ_SGI_13 #endif +#define TM27_INTERRUPT_VECTOR_DEFAULT ARM_GIC_TM27_IRQ_LOW + #define ARM_GIC_TM27_PRIO_LOW 0x80 #define ARM_GIC_TM27_PRIO_HIGH 0x00 diff --git a/bsps/sparc/leon3/include/tm27.h b/bsps/sparc/leon3/include/tm27.h index df30b738b2..3de349f363 100644 --- a/bsps/sparc/leon3/include/tm27.h +++ b/bsps/sparc/leon3/include/tm27.h @@ -89,6 +89,7 @@ extern uint32_t Interrupt_nest; #define TEST_INTERRUPT_SOURCE 5 #define TEST_INTERRUPT_SOURCE2 6 #define MUST_WAIT_FOR_INTERRUPT 1 +#define TM27_INTERRUPT_VECTOR_DEFAULT TEST_INTERRUPT_SOURCE static inline void Install_tm27_vector( rtems_interrupt_handler handler ) { diff --git a/cpukit/doxygen.h b/cpukit/doxygen.h index 661955a501..e61b207a7a 100644 --- a/cpukit/doxygen.h +++ b/cpukit/doxygen.h @@ -43,7 +43,23 @@ * * @ingroup RTEMSDeviceDrivers * - * @brief Time Test 27 Support + * @brief The Time Test 27 (TM27) support is used to measure the timing of + * the interrupt processing. + * + * The TMS27 support should provide two software generated interrupt requests, + * one low priority request raised by Cause_tm27_intr() and one higher priority + * request raised by Lower_tm27_intr(). Both requests should be cleared by + * Clear_tm27_intr(). A handler provided by the test should be installed + * through Install_tm27_vector(). This function should initialize the system + * so that the software generated interrupt requests can be raised and cleared. + * + * If the raise functions Cause_tm27_intr() and Lower_tm27_intr() do not + * trigger the interrupt immediately, then the TM27 support shall define + * MUST_WAIT_FOR_INTERRUPT to one, otherwise MUST_WAIT_FOR_INTERRUPT shall be + * defined to zero. + * + * The TM27 support may define TM27_INTERRUPT_VECTOR_DEFAULT to indicate the + * interrupt vector of the interrupt request raised by Cause_tm27_intr(). */ /** diff --git a/testsuites/validation/tx-call-within-isr.c b/testsuites/validation/tx-call-within-isr.c index 63a9a6dc26..a7fce4368d 100644 --- a/testsuites/validation/tx-call-within-isr.c +++ b/testsuites/validation/tx-call-within-isr.c @@ -140,6 +140,7 @@ void CallWithinISRWait( const CallWithinISRRequest *request ) } } +#if !defined( TM27_INTERRUPT_VECTOR_DEFAULT ) static void CallWithinISRIsHandlerInstalled( void *arg, const char *info, @@ -152,13 +153,17 @@ static void CallWithinISRIsHandlerInstalled( (void) option; (void) handler_arg; - if ( handler == CallWithinISRHandler ) { + if ( handler == CallWithinISRHandler && handler_arg == NULL ) { *(bool *) arg = true; } } +#endif rtems_vector_number CallWithinISRGetVector( void ) { +#if defined( TM27_INTERRUPT_VECTOR_DEFAULT ) + return TM27_INTERRUPT_VECTOR_DEFAULT; +#else rtems_vector_number vector; for ( vector = 0; vector < BSP_INTERRUPT_VECTOR_COUNT; ++vector ) { @@ -177,6 +182,7 @@ rtems_vector_number CallWithinISRGetVector( void ) } return UINT32_MAX; +#endif } static void CallWithinISRInitialize( void ) -- 2.35.3 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel