summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-11-18 16:47:21 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-11-23 15:18:38 +0100
commit0a108456de0af81bfd297cdabf82e8958efee27e (patch)
treede99b87d0d8b91aa8f38a36c128db3c78f806856
parent6a7006e0adb8559fdb2a04fff71161303b355b3b (diff)
testsuites/validation/tc-intr.c
-rw-r--r--testsuites/validation/tc-intr.c150
1 files changed, 146 insertions, 4 deletions
diff --git a/testsuites/validation/tc-intr.c b/testsuites/validation/tc-intr.c
index 7361140d6a..e77b39e41a 100644
--- a/testsuites/validation/tc-intr.c
+++ b/testsuites/validation/tc-intr.c
@@ -77,18 +77,58 @@
* - Check that maskable interrupts are disabled before the call to
* rtems_interrupt_local_disable() and disabled afterwards.
*
- * - Check that maskable interrupt status is restored by the call to
+ * - Check that the maskable interrupt status is restored by the call to
* rtems_interrupt_local_enable() according to the ``_isr_cookie``
* parameter. In this case maskable interrupts are still disabled
* afterwards.
*
- * - Check that maskable interrupt status is restored by the call to
+ * - Check that the maskable interrupt status is restored by the call to
* rtems_interrupt_local_enable() according to the ``_isr_cookie``
* parameter. In this case maskable interrupts are enabled afterwards.
*
+ * - Validate the interrupt lock directives.
+ *
+ * - Check that maskable interrupts are disabled before the call to
+ * rtems_interrupt_lock_interrupt_disable() and disabled afterwards.
+ *
+ * - Check that the maskable interrupt status is not changed by the
+ * rtems_interrupt_lock_acquire_isr() call.
+ *
+ * - Check that the maskable interrupt status is restored by the call to
+ * rtems_interrupt_lock_release() according to the ``_lock_context``
+ * parameter.
+ *
+ * - Check that maskable interrupts are disabled before the call to
+ * rtems_interrupt_lock_acquire() and disabled afterwards.
+ *
+ * - Check that the maskable interrupt status is restored by the call to
+ * rtems_interrupt_lock_release() according to the ``_lock_context``
+ * parameter.
+ *
+ * - Check that the maskable interrupt status is not changed by the
+ * rtems_interrupt_lock_destroy() call.
+ *
+ * - Validate the interrupt entry initialization.
+ *
+ * - Check that the entry is properly initialized by
+ * RTEMS_INTERRUPT_ENTRY_INITIALIZER().
+ *
+ * - Call rtems_interrupt_entry_initialize(). Check that the entry is
+ * properly initialized by rtems_interrupt_entry_initialize().
+ *
* @{
*/
+static void EntryRoutine( void *arg )
+{
+ (void) arg;
+}
+
+static void EntryRoutine2( void *arg )
+{
+ (void) arg;
+}
+
/**
* @brief Validate rtems_interrupt_local_disable() and
* rtems_interrupt_local_enable().
@@ -115,7 +155,7 @@ static void RtemsIntrValIntr_Action_0( void )
T_false( AreInterruptsEnabled() );
/*
- * Check that maskable interrupt status is restored by the call to
+ * Check that the maskable interrupt status is restored by the call to
* rtems_interrupt_local_enable() according to the ``_isr_cookie`` parameter.
* In this case maskable interrupts are still disabled afterwards.
*/
@@ -124,7 +164,7 @@ static void RtemsIntrValIntr_Action_0( void )
T_false( AreInterruptsEnabled() );
/*
- * Check that maskable interrupt status is restored by the call to
+ * Check that the maskable interrupt status is restored by the call to
* rtems_interrupt_local_enable() according to the ``_isr_cookie`` parameter.
* In this case maskable interrupts are enabled afterwards.
*/
@@ -134,11 +174,113 @@ static void RtemsIntrValIntr_Action_0( void )
}
/**
+ * @brief Validate the interrupt lock directives.
+ */
+static void RtemsIntrValIntr_Action_1( void )
+{
+ RTEMS_INTERRUPT_LOCK_DEFINE( , lock, "name" );
+ rtems_interrupt_lock_context lock_context;
+
+ /*
+ * Check that maskable interrupts are disabled before the call to
+ * rtems_interrupt_lock_interrupt_disable() and disabled afterwards.
+ */
+ T_true( AreInterruptsEnabled() );
+ rtems_interrupt_lock_interrupt_disable( &lock_context );
+ T_false( AreInterruptsEnabled() );
+
+ /*
+ * Check that the maskable interrupt status is not changed by the
+ * rtems_interrupt_lock_acquire_isr() call.
+ */
+ T_false( AreInterruptsEnabled() );
+ rtems_interrupt_lock_acquire_isr( &lock, &lock_context );
+ T_false( AreInterruptsEnabled() );
+
+ /*
+ * Check that the maskable interrupt status is restored by the call to
+ * rtems_interrupt_lock_release() according to the ``_lock_context``
+ * parameter.
+ */
+ T_false( AreInterruptsEnabled() );
+ rtems_interrupt_lock_release( &lock, &lock_context );
+ T_true( AreInterruptsEnabled() );
+
+ /*
+ * Check that maskable interrupts are disabled before the call to
+ * rtems_interrupt_lock_acquire() and disabled afterwards.
+ */
+ T_true( AreInterruptsEnabled() );
+ rtems_interrupt_lock_acquire( &lock, &lock_context );
+ T_false( AreInterruptsEnabled() );
+
+ /*
+ * Check that the maskable interrupt status is restored by the call to
+ * rtems_interrupt_lock_release() according to the ``_lock_context``
+ * parameter.
+ */
+ T_false( AreInterruptsEnabled() );
+ rtems_interrupt_lock_release( &lock, &lock_context );
+ T_true( AreInterruptsEnabled() );
+
+ /*
+ * Check that the maskable interrupt status is not changed by the
+ * rtems_interrupt_lock_destroy() call.
+ */
+ T_true( AreInterruptsEnabled() );
+ rtems_interrupt_lock_destroy( &lock );
+ T_true( AreInterruptsEnabled() );
+}
+
+/**
+ * @brief Validate the interrupt entry initialization.
+ */
+static void RtemsIntrValIntr_Action_2( void )
+{
+ int entry_arg;
+ int entry_arg_2;
+ const char entry_info[] = "1";
+ const char entry_info_2[] = "1";
+ rtems_interrupt_entry entry = RTEMS_INTERRUPT_ENTRY_INITIALIZER(
+ EntryRoutine,
+ &entry_arg,
+ entry_info
+ );
+
+ /*
+ * Check that the entry is properly initialized by
+ * RTEMS_INTERRUPT_ENTRY_INITIALIZER().
+ */
+ T_eq_ptr( entry.handler, EntryRoutine );
+ T_eq_ptr( entry.arg, &entry_arg );
+ T_eq_ptr( entry.next, NULL );
+ T_eq_ptr( entry.info, entry_info );
+
+ /*
+ * Call rtems_interrupt_entry_initialize(). Check that the entry is properly
+ * initialized by rtems_interrupt_entry_initialize().
+ */
+ entry.next = &entry;
+ rtems_interrupt_entry_initialize(
+ &entry,
+ EntryRoutine2,
+ &entry_arg_2,
+ entry_info_2
+ );
+ T_eq_ptr( entry.handler, EntryRoutine2 );
+ T_eq_ptr( entry.arg, &entry_arg_2 );
+ T_eq_ptr( entry.next, NULL );
+ T_eq_ptr( entry.info, entry_info_2 );
+}
+
+/**
* @fn void T_case_body_RtemsIntrValIntr( void )
*/
T_TEST_CASE( RtemsIntrValIntr )
{
RtemsIntrValIntr_Action_0();
+ RtemsIntrValIntr_Action_1();
+ RtemsIntrValIntr_Action_2();
}
/** @} */