diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-08-05 08:31:03 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-09-24 13:27:22 +0200 |
commit | 89919bd29644828f88f2c64368c666c4ed3d4fd8 (patch) | |
tree | 44aa9938ff65470c44089239d3fb4a3f5d52272f | |
parent | 8f4684d61b0b5bfc7fd12e1856d31e20a150b8ee (diff) |
validation: Improve GetTestableInterruptVector()
Add optional required attributes.
-rw-r--r-- | testsuites/validation/tc-intr-entry-install.c | 2 | ||||
-rw-r--r-- | testsuites/validation/tc-intr-entry-remove.c | 2 | ||||
-rw-r--r-- | testsuites/validation/tc-intr-handler-iterate.c | 2 | ||||
-rw-r--r-- | testsuites/validation/tx-interrupt.c | 38 | ||||
-rw-r--r-- | testsuites/validation/tx-support.h | 4 |
5 files changed, 38 insertions, 10 deletions
diff --git a/testsuites/validation/tc-intr-entry-install.c b/testsuites/validation/tc-intr-entry-install.c index 66ad04a138..3b2e1b101d 100644 --- a/testsuites/validation/tc-intr-entry-install.c +++ b/testsuites/validation/tc-intr-entry-install.c @@ -1047,7 +1047,7 @@ static void RtemsIntrReqEntryInstall_Setup( rtems_status_code sc; ctx->initialized_during_setup = bsp_interrupt_is_initialized(); - ctx->test_vector = GetTestableInterruptVector(); + ctx->test_vector = GetTestableInterruptVector( NULL ); sc = rtems_interrupt_get_attributes( ctx->test_vector, &ctx->attributes ); T_rsc_success( sc ); } diff --git a/testsuites/validation/tc-intr-entry-remove.c b/testsuites/validation/tc-intr-entry-remove.c index 0993d18497..5ca0955ca3 100644 --- a/testsuites/validation/tc-intr-entry-remove.c +++ b/testsuites/validation/tc-intr-entry-remove.c @@ -1087,7 +1087,7 @@ static void RtemsIntrReqEntryRemove_Setup( rtems_status_code sc; ctx->initialized_during_setup = bsp_interrupt_is_initialized(); - ctx->test_vector = GetTestableInterruptVector(); + ctx->test_vector = GetTestableInterruptVector( NULL ); sc = rtems_interrupt_get_attributes( ctx->test_vector, &ctx->attributes ); T_rsc_success( sc ); } diff --git a/testsuites/validation/tc-intr-handler-iterate.c b/testsuites/validation/tc-intr-handler-iterate.c index 2014e829bf..e643eb5e50 100644 --- a/testsuites/validation/tc-intr-handler-iterate.c +++ b/testsuites/validation/tc-intr-handler-iterate.c @@ -505,7 +505,7 @@ static void RtemsIntrReqHandlerIterate_Setup( rtems_status_code sc; ctx->initialized_during_setup = bsp_interrupt_is_initialized(); - ctx->test_vector = GetTestableInterruptVector(); + ctx->test_vector = GetTestableInterruptVector( NULL ); rtems_interrupt_entry_initialize( &ctx->entry, EntryRoutine, diff --git a/testsuites/validation/tx-interrupt.c b/testsuites/validation/tx-interrupt.c index e75c7a2aa0..16f1e18c47 100644 --- a/testsuites/validation/tx-interrupt.c +++ b/testsuites/validation/tx-interrupt.c @@ -45,6 +45,30 @@ #include <bsp/irq-generic.h> +static bool HasRequiredAttributes( + const rtems_interrupt_attributes *required, + const rtems_interrupt_attributes *actual +) +{ + if ( required == NULL ) { + return true; + } + + if ( required->can_get_affinity && !actual->can_get_affinity ) { + return false; + } + + if ( required->can_raise && !actual->can_raise ) { + return false; + } + + if ( required->can_raise_on && !actual->can_raise_on ) { + return false; + } + + return true; +} + rtems_vector_number GetValidInterruptVectorNumber( const rtems_interrupt_attributes *required ) @@ -57,11 +81,7 @@ rtems_vector_number GetValidInterruptVectorNumber( sc = rtems_interrupt_get_attributes( vector, &attr ); - if ( - sc == RTEMS_SUCCESSFUL && - ( required == NULL || - !required->can_get_affinity || attr.can_get_affinity ) - ) { + if ( sc == RTEMS_SUCCESSFUL && HasRequiredAttributes( required, &attr ) ) { break; } } @@ -69,7 +89,9 @@ rtems_vector_number GetValidInterruptVectorNumber( return vector; } -rtems_vector_number GetTestableInterruptVector( void ) +rtems_vector_number GetTestableInterruptVector( + const rtems_interrupt_attributes *required +) { rtems_vector_number vector; @@ -87,6 +109,10 @@ rtems_vector_number GetTestableInterruptVector( void ) continue; } + if ( !HasRequiredAttributes( required, &attr ) ) { + continue; + } + if ( HasInterruptVectorEntriesInstalled( vector ) ) { continue; } diff --git a/testsuites/validation/tx-support.h b/testsuites/validation/tx-support.h index 9df6ea3441..3445f97b8e 100644 --- a/testsuites/validation/tx-support.h +++ b/testsuites/validation/tx-support.h @@ -395,7 +395,9 @@ rtems_vector_number GetValidInterruptVectorNumber( const rtems_interrupt_attributes *required ); -rtems_vector_number GetTestableInterruptVector( void ); +rtems_vector_number GetTestableInterruptVector( + const rtems_interrupt_attributes *required +); bool HasInterruptVectorEntriesInstalled( rtems_vector_number vector ); |