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-06 14:06:50 +0200 |
commit | b0924142cb343d46d872803b8712bea0a10983cc (patch) | |
tree | bd2149e06d86d1299b03ec7bf99fede521e6723e | |
parent | 52a905bdb25db63d64201ea7a4df4f95a2da9be4 (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 20d06df997..32430a037a 100644 --- a/testsuites/validation/tc-intr-entry-install.c +++ b/testsuites/validation/tc-intr-entry-install.c @@ -1009,7 +1009,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 64f6e46de7..93f57ff57e 100644 --- a/testsuites/validation/tc-intr-entry-remove.c +++ b/testsuites/validation/tc-intr-entry-remove.c @@ -1048,7 +1048,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 707ea44527..9c70a5974b 100644 --- a/testsuites/validation/tc-intr-handler-iterate.c +++ b/testsuites/validation/tc-intr-handler-iterate.c @@ -478,7 +478,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 fa60b76b65..1c78bf2c18 100644 --- a/testsuites/validation/tx-support.h +++ b/testsuites/validation/tx-support.h @@ -338,7 +338,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 ); |