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/obtain post-conditions: - name: Action states: - name: Timeout test-code: | ${/score/tq/req/timeout:/test-run}( &ctx->tq_ctx ); text: | The semaphore obtain timeout actions shall be done as specified by ${/score/tq/req/timeout}. - name: TimeoutPriorityInherit test-code: | ${/score/tq/req/timeout-priority-inherit:/test-run}( &ctx->tq_ctx ); text: | The semaphore obtain timeout actions shall be done as specified by ${/score/tq/req/timeout-priority-inherit}. test-epilogue: null test-prologue: null pre-conditions: - name: Class states: - name: Counting test-code: | ctx->attribute_set |= RTEMS_COUNTING_SEMAPHORE; ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; text: | While the semaphore object is a counting semaphore. - name: Simple test-code: | ctx->attribute_set |= RTEMS_SIMPLE_BINARY_SEMAPHORE; ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; text: | While the semaphore object is a simple binary semaphore. - name: Binary test-code: | ctx->attribute_set |= RTEMS_BINARY_SEMAPHORE; ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; text: | While the semaphore object is a binary semaphore. - name: PrioCeiling test-code: | ctx->attribute_set |= RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY_CEILING; ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; text: | While the semaphore object is a priority ceiling semaphore. - name: PrioInherit test-code: | ctx->attribute_set |= RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY; ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; text: | While the semaphore object is a priority inheritance semaphore. - name: MrsP test-code: | ctx->attribute_set |= RTEMS_BINARY_SEMAPHORE | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING; ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_STICKY; text: | While the semaphore object is a MrsP semaphore. test-epilogue: null test-prologue: null - name: Discipline states: - name: FIFO test-code: | ctx->attribute_set |= RTEMS_FIFO; ctx->tq_ctx.discipline = TQ_FIFO; text: | While the semaphore uses the FIFO task wait queue discipline. - name: Priority test-code: | ctx->attribute_set |= RTEMS_PRIORITY; ctx->tq_ctx.discipline = TQ_PRIORITY; text: | While the semaphore uses the priority task wait queue discipline. test-epilogue: null test-prologue: null rationale: null references: [] requirement-type: functional skip-reasons: NeedsPriorityDiscipline: | Binary semaphores with a locking protocol are required to use the priority task wait queue discipline. NoMrsP: | Where the system is build with SMP support disabled, the MrsP locking protocol is not available. test-action: | rtems_status_code sc; sc = rtems_semaphore_create( OBJECT_NAME, 1, ctx->attribute_set, PRIO_HIGH, &ctx->tq_ctx.thread_queue_id ); T_rsc_success( sc ); test-brief: null test-cleanup: if ( ctx->tq_ctx.thread_queue_id != 0 ) { rtems_status_code sc; sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id ); T_rsc_success( sc ); } test-context: - brief: | This member contains the thread queue test context. description: null member: | TQContext tq_ctx; - brief: | This member specifies if the attribute set of the semaphore. description: null member: | rtems_attribute attribute_set test-context-support: null test-description: null test-header: null test-includes: - rtems.h - string.h test-local-includes: - tr-tq-timeout.h - tr-tq-timeout-priority-inherit.h - tx-thread-queue.h - tx-support.h test-prepare: | ctx->attribute_set = RTEMS_DEFAULT_ATTRIBUTES; ctx->tq_ctx.thread_queue_id = 0; test-setup: brief: null code: | memset( ctx, 0, sizeof( *ctx ) ); ctx->tq_ctx.wait = TQ_WAIT_TICKS; ctx->tq_ctx.enqueue_prepare = TQEnqueuePrepareClassicSem; ctx->tq_ctx.enqueue_done = TQSurrenderClassicSem; ctx->tq_ctx.enqueue = TQEnqueueClassicSem; ctx->tq_ctx.surrender = TQSurrenderClassicSem; ctx->tq_ctx.convert_status = TQConvertStatusClassic; TQInitialize( &ctx->tq_ctx ); description: null test-stop: null test-support: null test-target: testsuites/validation/tc-sem-timeout.c test-teardown: brief: null code: | TQDestroy( &ctx->tq_ctx ); description: null text: | When a semaphore obtain timeout happens. transition-map: - enabled-by: true post-conditions: Action: - if: pre-conditions: Class: - PrioInherit - MrsP then: TimeoutPriorityInherit - else: Timeout pre-conditions: Class: all Discipline: all - enabled-by: true post-conditions: NeedsPriorityDiscipline pre-conditions: Class: - PrioCeiling - PrioInherit - MrsP Discipline: - FIFO - enabled-by: not: RTEMS_SMP post-conditions: NoMrsP pre-conditions: Class: - MrsP Discipline: - Priority type: requirement