summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-12-18 12:02:30 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-12-19 08:22:37 +0100
commit2e71bd08bae61cd7259d8c362818b4a268a393e9 (patch)
treefc0e9690a1e70595e221b8fcd58c139ff1b889cd
parentftpd: Fix set but not used warning (diff)
downloadrtems-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.h2
-rw-r--r--bsps/sparc/leon3/include/tm27.h1
-rw-r--r--cpukit/doxygen.h18
-rw-r--r--testsuites/validation/tx-call-within-isr.c8
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 )