summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-06-29 09:29:25 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-12 14:53:01 +0200
commit00862d3418171c8c9237e194ed59561471dae98b (patch)
treecbd11c2a840244175d6f6f7b8b5e2ff4d6432a6c
parentspec: Specify rtems_interrupt_vector_is_enabled() (diff)
downloadrtems-central-00862d3418171c8c9237e194ed59561471dae98b.tar.bz2
spec: Specify rtems_interrupt_get_attributes()
-rw-r--r--spec/rtems/intr/req/get-attributes.yml194
1 files changed, 194 insertions, 0 deletions
diff --git a/spec/rtems/intr/req/get-attributes.yml b/spec/rtems/intr/req/get-attributes.yml
new file mode 100644
index 00000000..50e6070c
--- /dev/null
+++ b/spec/rtems/intr/req/get-attributes.yml
@@ -0,0 +1,194 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+functional-type: action
+links:
+- role: interface-function
+ uid: ../if/get-attributes
+post-conditions:
+- name: Status
+ states:
+ - name: Ok
+ test-code: |
+ T_rsc_success( ctx->status );
+ text: |
+ The return status of ${../if/get-attributes:/name} shall be
+ ${../../status/if/successful:/name}.
+ - name: InvAddr
+ test-code: |
+ T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
+ text: |
+ The return status of ${../if/get-attributes:/name} shall be
+ ${../../status/if/invalid-address:/name}.
+ - name: InvId
+ test-code: |
+ T_rsc( ctx->status, RTEMS_INVALID_ID );
+ text: |
+ The return status of ${../if/get-attributes:/name} shall be
+ ${../../status/if/invalid-id:/name}.
+ test-epilogue: null
+ test-prologue: null
+- name: Attributes
+ states:
+ - name: Nop
+ test-code: |
+ memset( &attr, 0xa5, sizeof( attr ) );
+ T_eq_mem( &ctx->attributes_obj, &attr, sizeof( attr ) );
+ text: |
+ Objects referenced by the ${../if/get-attributes:/params[1]/name}
+ parameter in past calls to ${../if/get-attributes:/name} shall not be
+ accessed by the ${../if/get-attributes:/name} call.
+ - name: Zero
+ test-code: |
+ memset( &attr, 0, sizeof( attr ) );
+ T_eq_mem( &ctx->attributes_obj, &attr, sizeof( attr ) );
+ text: |
+ The object referenced by the ${../if/get-attributes:/params[1]/name}
+ parameter shall cleared to zero.
+ - name: Set
+ test-code: |
+ memset( &attr, 0xa5, sizeof( attr ) );
+ T_ne_mem( &ctx->attributes_obj, &attr, sizeof( attr ) );
+ text: |
+ The members of the object referenced by the
+ ${../if/get-attributes:/params[1]/name} parameter shall be set to the
+ attributes of the interrupt vector specified by
+ ${../if/get-attributes:/params[0]/name}.
+ test-epilogue: null
+ test-prologue: |
+ rtems_interrupt_attributes attr;
+pre-conditions:
+- name: Vector
+ states:
+ - name: Valid
+ test-code: |
+ ctx->valid_vector = true;
+ text: |
+ While the ${../if/get-attributes:/params[0]/name} parameter is
+ associated with an interrupt vector.
+ - name: Invalid
+ test-code: |
+ ctx->valid_vector = false;
+ text: |
+ While the ${../if/get-attributes:/params[0]/name} parameter is
+ not associated with an interrupt vector.
+ test-epilogue: null
+ test-prologue: null
+- name: Attributes
+ states:
+ - name: Obj
+ test-code: |
+ ctx->attributes = &ctx->attributes_obj;
+ text: |
+ While the ${../if/get-attributes:/params[1]/name} parameter references an
+ object of type ${../if/attributes:/name}.
+ - name: 'Null'
+ test-code: |
+ ctx->attributes = NULL;
+ text: |
+ While the ${../if/get-attributes:/params[1]/name} parameter is equal
+ to ${/c/if/null:/name}.
+ test-epilogue: null
+ test-prologue: null
+rationale: null
+references: []
+requirement-type: functional
+skip-reasons: {}
+test-action: |
+ rtems_vector_number vector;
+
+ if ( ctx->valid_vector && ctx->attributes != NULL ) {
+ ctx->status = RTEMS_INTERNAL_ERROR;
+
+ for ( vector = 0; vector < BSP_INTERRUPT_VECTOR_COUNT; ++vector ) {
+ rtems_status_code sc;
+
+ sc = rtems_interrupt_get_attributes( vector, ctx->attributes );
+
+ if ( sc == RTEMS_INVALID_ID ) {
+ continue;
+ }
+
+ T_rsc_success( sc );
+ ctx->status = sc;
+ }
+ } else {
+ if ( ctx->valid_vector ) {
+ vector = 0;
+ } else {
+ vector = BSP_INTERRUPT_VECTOR_COUNT;
+ }
+
+ ctx->status = rtems_interrupt_get_attributes( vector, ctx->attributes );
+ }
+test-brief: null
+test-cleanup: null
+test-context:
+- brief: |
+ This member provides the ${../if/attributes:/name} object.
+ description: null
+ member: |
+ rtems_interrupt_attributes attributes_obj
+- brief: |
+ If this member is true, then the ${../if/get-attributes:/params[0]/name}
+ parameter shall be valid.
+ description: null
+ member: |
+ bool valid_vector
+- brief: |
+ This member specifies if the ${../if/get-attributes:/params[1]/name}
+ parameter value.
+ description: null
+ member: |
+ rtems_interrupt_attributes *attributes;
+- brief: |
+ This member contains the return value of the ${../if/get-attributes:/name}
+ call.
+ description: null
+ member: |
+ rtems_status_code status
+test-context-support: null
+test-description: null
+test-header: null
+test-includes:
+- rtems/irq-extension.h
+- bsp/irq-generic.h
+- string.h
+test-local-includes: []
+test-prepare: |
+ memset( &ctx->attributes_obj, 0xa5, sizeof( ctx->attributes_obj ) );
+test-setup: null
+test-stop: null
+test-support: null
+test-target: testsuites/validation/tc-intr-get-attributes.c
+test-teardown: null
+text: ${.:text-template}
+transition-map:
+- enabled-by: true
+ post-conditions:
+ Status: Ok
+ Attributes: Set
+ pre-conditions:
+ Vector:
+ - Valid
+ Attributes:
+ - Obj
+- enabled-by: true
+ post-conditions:
+ Status: InvAddr
+ Attributes: Nop
+ pre-conditions:
+ Vector: all
+ Attributes:
+ - 'Null'
+- enabled-by: true
+ post-conditions:
+ Status: InvId
+ Attributes: Zero
+ pre-conditions:
+ Vector:
+ - Invalid
+ Attributes:
+ - Obj
+type: requirement