diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-12-18 12:02:30 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-12-19 08:22:37 +0100 |
commit | 2e71bd08bae61cd7259d8c362818b4a268a393e9 (patch) | |
tree | fc0e9690a1e70595e221b8fcd58c139ff1b889cd | |
parent | ftpd: Fix set but not used warning (diff) | |
download | rtems-2e71bd08bae61cd7259d8c362818b4a268a393e9.tar.bz2 |
tm27: Add optional TM27_INTERRUPT_VECTOR_DEFAULT
Let the BSP define TM27_INTERRUPT_VECTOR_DEFAULT to more efficiently and
reliably get the TM27 default interrupt vector.
Update #3716.
-rw-r--r-- | bsps/include/dev/irq/arm-gic-tm27.h | 2 | ||||
-rw-r--r-- | bsps/sparc/leon3/include/tm27.h | 1 | ||||
-rw-r--r-- | cpukit/doxygen.h | 18 | ||||
-rw-r--r-- | 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 ) |