summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-08-05 08:31:03 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-08-06 14:06:50 +0200
commitb0924142cb343d46d872803b8712bea0a10983cc (patch)
treebd2149e06d86d1299b03ec7bf99fede521e6723e
parent52a905bdb25db63d64201ea7a4df4f95a2da9be4 (diff)
validation: Improve GetTestableInterruptVector()
Add optional required attributes.
-rw-r--r--testsuites/validation/tc-intr-entry-install.c2
-rw-r--r--testsuites/validation/tc-intr-entry-remove.c2
-rw-r--r--testsuites/validation/tc-intr-handler-iterate.c2
-rw-r--r--testsuites/validation/tx-interrupt.c38
-rw-r--r--testsuites/validation/tx-support.h4
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 );