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-08-17 09:10:28 +0200 |
commit | 4b6014ead3bca5ead83648f51a63f33d36a8af43 (patch) | |
tree | 156b3745f924f5be296b718b2b1aaaf8c30bcde1 | |
parent | 155f6213ab739f4c317575777da37418e60e2cf1 (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 37583249aa..f5280c1e73 100644 --- a/testsuites/validation/tc-intr-entry-install.c +++ b/testsuites/validation/tc-intr-entry-install.c @@ -1041,7 +1041,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 65cbbb28d3..ad07464de6 100644 --- a/testsuites/validation/tc-intr-entry-remove.c +++ b/testsuites/validation/tc-intr-entry-remove.c @@ -1081,7 +1081,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 c1f1e2062c..f12291c044 100644 --- a/testsuites/validation/tx-support.h +++ b/testsuites/validation/tx-support.h @@ -358,7 +358,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 ); |