summaryrefslogblamecommitdiffstats
path: root/spec/rtems/intr/req/get-attributes.yml
blob: dd4fbe97a18bd9fbc4815b401fd4f15a12987f33 (plain) (tree)









































































































                                                                               
                                                                          







                                                                     
 




                                                   
                                                    



                                                                            















































































                                                                              
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;

      memset( &ctx->attributes_obj, 0xff, sizeof( ctx->attributes_obj ) );
      sc = rtems_interrupt_get_attributes( vector, ctx->attributes );

      if ( sc == RTEMS_INVALID_ID ) {
        continue;
      }

      T_rsc_success( sc );
      ctx->status = sc;

      if ( ctx->attributes_obj.can_enable ) {
        T_true( ctx->attributes_obj.maybe_enable );
      }

      if ( ctx->attributes_obj.can_disable ) {
        T_true( ctx->attributes_obj.maybe_disable );
        T_true(
          ctx->attributes_obj.can_enable || ctx->attributes_obj.maybe_enable
        );
      }
    }
  } 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