diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-11-18 16:47:21 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-11-19 08:44:24 +0100 |
commit | baddab33e747123811ece00261bb60d6038bc5bb (patch) | |
tree | f816595a5b3e2304b5acec5792c045f7f1820285 | |
parent | 85de9416083525791bf7c116b6d5f30cf15305a1 (diff) |
testsuites/validation/tc-intr.c
-rw-r--r-- | testsuites/validation/tc-intr.c | 150 |
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(); } /** @} */ |