summaryrefslogtreecommitdiffstats
path: root/testsuites/validation/tc-bsp-interrupt-spurious.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/validation/tc-bsp-interrupt-spurious.c')
-rw-r--r--testsuites/validation/tc-bsp-interrupt-spurious.c636
1 files changed, 0 insertions, 636 deletions
diff --git a/testsuites/validation/tc-bsp-interrupt-spurious.c b/testsuites/validation/tc-bsp-interrupt-spurious.c
deleted file mode 100644
index f5e992a51d..0000000000
--- a/testsuites/validation/tc-bsp-interrupt-spurious.c
+++ /dev/null
@@ -1,636 +0,0 @@
-/* SPDX-License-Identifier: BSD-2-Clause */
-
-/**
- * @file
- *
- * @ingroup RTEMSTestCaseBspReqInterruptSpurious
- */
-
-/*
- * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * This file is part of the RTEMS quality process and was automatically
- * generated. If you find something that needs to be fixed or
- * worded better please post a report or patch to an RTEMS mailing list
- * or raise a bug report:
- *
- * https://www.rtems.org/bugs.html
- *
- * For information on updating and regenerating please refer to the How-To
- * section in the Software Requirements Engineering chapter of the
- * RTEMS Software Engineering manual. The manual is provided as a part of
- * a release. For development sources please refer to the online
- * documentation at:
- *
- * https://docs.rtems.org
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <setjmp.h>
-#include <bsp/irq-generic.h>
-
-#include "tx-support.h"
-
-#include <rtems/test.h>
-
-/**
- * @defgroup RTEMSTestCaseBspReqInterruptSpurious \
- * spec:/bsp/req/interrupt-spurious
- *
- * @ingroup RTEMSTestSuiteTestsuitesValidationIntr
- *
- * @{
- */
-
-typedef enum {
- BspReqInterruptSpurious_Pre_First_Null,
- BspReqInterruptSpurious_Pre_First_Entry,
- BspReqInterruptSpurious_Pre_First_NA
-} BspReqInterruptSpurious_Pre_First;
-
-typedef enum {
- BspReqInterruptSpurious_Pre_FirstAgain_Null,
- BspReqInterruptSpurious_Pre_FirstAgain_Entry,
- BspReqInterruptSpurious_Pre_FirstAgain_NA
-} BspReqInterruptSpurious_Pre_FirstAgain;
-
-typedef enum {
- BspReqInterruptSpurious_Post_Result_FatalError,
- BspReqInterruptSpurious_Post_Result_Dispatch,
- BspReqInterruptSpurious_Post_Result_NA
-} BspReqInterruptSpurious_Post_Result;
-
-typedef enum {
- BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt,
- BspReqInterruptSpurious_Post_FatalSource_NA
-} BspReqInterruptSpurious_Post_FatalSource;
-
-typedef enum {
- BspReqInterruptSpurious_Post_FatalCode_Vector,
- BspReqInterruptSpurious_Post_FatalCode_NA
-} BspReqInterruptSpurious_Post_FatalCode;
-
-typedef struct {
- uint8_t Skip : 1;
- uint8_t Pre_First_NA : 1;
- uint8_t Pre_FirstAgain_NA : 1;
- uint8_t Post_Result : 2;
- uint8_t Post_FatalSource : 1;
- uint8_t Post_FatalCode : 1;
-} BspReqInterruptSpurious_Entry;
-
-/**
- * @brief Test context for spec:/bsp/req/interrupt-spurious test case.
- */
-typedef struct {
- /**
- * @brief This member provides a jump buffer to return from the fatal error.
- */
- jmp_buf before_call;
-
- /**
- * @brief This member provides an interrupt entry to be dispatched.
- */
- rtems_interrupt_entry entry;
-
- /**
- * @brief If this member is true, then the interrupt shall be cleared.
- */
- bool do_clear;
-
- /**
- * @brief This member is true, then an interrupt occurred.
- */
- volatile bool interrupt_occurred;
-
- /**
- * @brief This member provides an entry dispatch counter.
- */
- uint32_t entry_counter;
-
- /**
- * @brief This member provides a fatal error counter.
- */
- uint32_t fatal_counter;
-
- /**
- * @brief This member contains the fatal source.
- */
- rtems_fatal_source fatal_source;
-
- /**
- * @brief This member contains a fatal code.
- */
- rtems_fatal_code fatal_code;
-
- /**
- * @brief This member contains the vector number of a testable interrupt.
- */
- rtems_vector_number test_vector;
-
- /**
- * @brief This member references the pointer to the first entry of the
- * interrupt vector.
- */
- rtems_interrupt_entry **first;
-
- /**
- * @brief This member references an interrupt entry for the first entry of
- * the interrupt vector or is NULL.
- */
- rtems_interrupt_entry *first_again;
-
- struct {
- /**
- * @brief This member defines the pre-condition indices for the next
- * action.
- */
- size_t pci[ 2 ];
-
- /**
- * @brief This member defines the pre-condition states for the next action.
- */
- size_t pcs[ 2 ];
-
- /**
- * @brief If this member is true, then the test action loop is executed.
- */
- bool in_action_loop;
-
- /**
- * @brief This member contains the next transition map index.
- */
- size_t index;
-
- /**
- * @brief This member contains the current transition map entry.
- */
- BspReqInterruptSpurious_Entry entry;
-
- /**
- * @brief If this member is true, then the current transition variant
- * should be skipped.
- */
- bool skip;
- } Map;
-} BspReqInterruptSpurious_Context;
-
-static BspReqInterruptSpurious_Context
- BspReqInterruptSpurious_Instance;
-
-static const char * const BspReqInterruptSpurious_PreDesc_First[] = {
- "Null",
- "Entry",
- "NA"
-};
-
-static const char * const BspReqInterruptSpurious_PreDesc_FirstAgain[] = {
- "Null",
- "Entry",
- "NA"
-};
-
-static const char * const * const BspReqInterruptSpurious_PreDesc[] = {
- BspReqInterruptSpurious_PreDesc_First,
- BspReqInterruptSpurious_PreDesc_FirstAgain,
- NULL
-};
-
-typedef BspReqInterruptSpurious_Context Context;
-
-static bool test_case_active;
-
-static void Disable( const Context *ctx )
-{
- (void) rtems_interrupt_vector_disable( ctx->test_vector );
-}
-
-static void ProcessInterrupt( Context *ctx )
-{
- ctx->interrupt_occurred = true;
-
- if ( ctx->do_clear ) {
- rtems_status_code sc;
-
- sc = rtems_interrupt_clear( ctx->test_vector );
- T_rsc_success( sc );
- }
-
- Disable( ctx );
-}
-
-static void EntryRoutine( void *arg )
-{
- Context *ctx;
-
- ctx = arg;
- ++ctx->entry_counter;
- ProcessInterrupt( ctx );
-}
-
-static void Fatal(
- rtems_fatal_source source,
- rtems_fatal_code code,
- void *arg
-)
-{
- Context *ctx;
-
- ctx = arg;
- ctx->fatal_source = source;
- ctx->fatal_code = code;
- ++ctx->fatal_counter;
- longjmp( ctx->before_call, 1 );
-}
-
-void __real_bsp_interrupt_handler_default( rtems_vector_number vector );
-
-void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector );
-
-void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector )
-{
- if ( test_case_active ) {
- Context *ctx;
-
- ctx = T_fixture_context();
- ProcessInterrupt( ctx );
-
- if ( setjmp( ctx->before_call ) == 0 ) {
- __real_bsp_interrupt_handler_default( vector );
- }
- } else {
- __real_bsp_interrupt_handler_default( vector );
- }
-}
-
-static void BspReqInterruptSpurious_Pre_First_Prepare(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Pre_First state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Pre_First_Null: {
- /*
- * While the first loaded value of the pointer to the first interrupt
- * entry of the interrupt vector specified by the ``vector`` parameter is
- * equal to NULL.
- */
- *ctx->first = NULL;
- break;
- }
-
- case BspReqInterruptSpurious_Pre_First_Entry: {
- /*
- * While the first loaded value of the pointer to the first interrupt
- * entry of the interrupt vector specified by the ``vector`` parameter
- * references an object of type rtems_interrupt_entry.
- */
- *ctx->first = &ctx->entry;
- break;
- }
-
- case BspReqInterruptSpurious_Pre_First_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Pre_FirstAgain_Prepare(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Pre_FirstAgain state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Pre_FirstAgain_Null: {
- /*
- * While the second loaded value of the pointer to the first interrupt
- * entry of the interrupt vector specified by the ``vector`` parameter is
- * equal to NULL.
- */
- ctx->first_again = NULL;
- break;
- }
-
- case BspReqInterruptSpurious_Pre_FirstAgain_Entry: {
- /*
- * While the second loaded value of the pointer to the first interrupt
- * entry of the interrupt vector specified by the ``vector`` parameter
- * references an object of type rtems_interrupt_entry.
- */
- ctx->first_again = &ctx->entry;
- break;
- }
-
- case BspReqInterruptSpurious_Pre_FirstAgain_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Post_Result_Check(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Post_Result state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Post_Result_FatalError: {
- /*
- * A fatal error shall occur.
- */
- T_eq_u32( ctx->entry_counter, 0 );
- T_eq_u32( ctx->fatal_counter, 1 );
- break;
- }
-
- case BspReqInterruptSpurious_Post_Result_Dispatch: {
- /*
- * The interrupt entries installed at the interrupt vector specified by
- * the ``vector`` parameter shall be dispatched.
- */
- T_eq_u32( ctx->entry_counter, 1 );
- T_eq_u32( ctx->fatal_counter, 0 );
- break;
- }
-
- case BspReqInterruptSpurious_Post_Result_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Post_FatalSource_Check(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Post_FatalSource state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt: {
- /*
- * The fatal source shall be equal to
- * RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT.
- */
- T_eq_int( ctx->fatal_source, RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT );
- break;
- }
-
- case BspReqInterruptSpurious_Post_FatalSource_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Post_FatalCode_Check(
- BspReqInterruptSpurious_Context *ctx,
- BspReqInterruptSpurious_Post_FatalCode state
-)
-{
- switch ( state ) {
- case BspReqInterruptSpurious_Post_FatalCode_Vector: {
- /*
- * The fatal code shall be equal to the ``vector`` parameter.
- */
- T_eq_ulong( ctx->fatal_code, ctx->test_vector );
- break;
- }
-
- case BspReqInterruptSpurious_Post_FatalCode_NA:
- break;
- }
-}
-
-static void BspReqInterruptSpurious_Setup(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- rtems_interrupt_attributes attr = {
- .can_raise = true
- };
- rtems_status_code sc;
-
- ctx->test_vector = GetTestableInterruptVector( &attr );
- T_assert_lt_u32( ctx->test_vector, BSP_INTERRUPT_VECTOR_COUNT );
- ctx->first = &bsp_interrupt_handler_table[
- bsp_interrupt_handler_index( ctx->test_vector )
- ];
-
- sc = rtems_interrupt_get_attributes( ctx->test_vector, &attr );
- T_rsc_success( sc );
- ctx->do_clear = attr.can_clear && !attr.cleared_by_acknowledge;
-
- rtems_interrupt_entry_initialize( &ctx->entry, EntryRoutine, ctx, "Info" );
- test_case_active = true;
- SetFatalHandler( Fatal, ctx );
-}
-
-static void BspReqInterruptSpurious_Setup_Wrap( void *arg )
-{
- BspReqInterruptSpurious_Context *ctx;
-
- ctx = arg;
- ctx->Map.in_action_loop = false;
- BspReqInterruptSpurious_Setup( ctx );
-}
-
-static void BspReqInterruptSpurious_Teardown(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- SetFatalHandler( NULL, NULL );
- test_case_active = false;
-}
-
-static void BspReqInterruptSpurious_Teardown_Wrap( void *arg )
-{
- BspReqInterruptSpurious_Context *ctx;
-
- ctx = arg;
- ctx->Map.in_action_loop = false;
- BspReqInterruptSpurious_Teardown( ctx );
-}
-
-static void BspReqInterruptSpurious_Action(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- ctx->interrupt_occurred = false;
- ctx->entry_counter = 0;
- ctx->fatal_counter = 0;
- ctx->fatal_source = RTEMS_FATAL_SOURCE_LAST;
- ctx->fatal_code = UINT32_MAX;
-
- #if defined(RTEMS_SMP)
- if ( *ctx->first == NULL && ctx->first_again != NULL ) {
- *ctx->first = ctx->first_again;
- bsp_interrupt_spurious( ctx->test_vector );
- } else
- #endif
- {
- rtems_status_code sc;
-
- (void) rtems_interrupt_vector_enable( ctx->test_vector );
-
- sc = rtems_interrupt_raise( ctx->test_vector );
- T_rsc_success( sc );
-
- while ( !ctx->interrupt_occurred ) {
- /* Wait */
- }
-
- Disable( ctx );
- }
-}
-
-static const BspReqInterruptSpurious_Entry
-BspReqInterruptSpurious_Entries[] = {
- { 0, 0, 1, BspReqInterruptSpurious_Post_Result_Dispatch,
- BspReqInterruptSpurious_Post_FatalSource_NA,
- BspReqInterruptSpurious_Post_FatalCode_NA },
-#if defined(RTEMS_SMP)
- { 0, 0, 0, BspReqInterruptSpurious_Post_Result_FatalError,
- BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt,
- BspReqInterruptSpurious_Post_FatalCode_Vector },
-#else
- { 0, 0, 1, BspReqInterruptSpurious_Post_Result_FatalError,
- BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt,
- BspReqInterruptSpurious_Post_FatalCode_Vector },
-#endif
-#if defined(RTEMS_SMP)
- { 0, 0, 0, BspReqInterruptSpurious_Post_Result_Dispatch,
- BspReqInterruptSpurious_Post_FatalSource_NA,
- BspReqInterruptSpurious_Post_FatalCode_NA }
-#else
- { 0, 0, 1, BspReqInterruptSpurious_Post_Result_FatalError,
- BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt,
- BspReqInterruptSpurious_Post_FatalCode_Vector }
-#endif
-};
-
-static const uint8_t
-BspReqInterruptSpurious_Map[] = {
- 1, 2, 0, 0
-};
-
-static size_t BspReqInterruptSpurious_Scope( void *arg, char *buf, size_t n )
-{
- BspReqInterruptSpurious_Context *ctx;
-
- ctx = arg;
-
- if ( ctx->Map.in_action_loop ) {
- return T_get_scope(
- BspReqInterruptSpurious_PreDesc,
- buf,
- n,
- ctx->Map.pcs
- );
- }
-
- return 0;
-}
-
-static T_fixture BspReqInterruptSpurious_Fixture = {
- .setup = BspReqInterruptSpurious_Setup_Wrap,
- .stop = NULL,
- .teardown = BspReqInterruptSpurious_Teardown_Wrap,
- .scope = BspReqInterruptSpurious_Scope,
- .initial_context = &BspReqInterruptSpurious_Instance
-};
-
-static inline BspReqInterruptSpurious_Entry BspReqInterruptSpurious_PopEntry(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- size_t index;
-
- index = ctx->Map.index;
- ctx->Map.index = index + 1;
- return BspReqInterruptSpurious_Entries[
- BspReqInterruptSpurious_Map[ index ]
- ];
-}
-
-static void BspReqInterruptSpurious_SetPreConditionStates(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- ctx->Map.pcs[ 0 ] = ctx->Map.pci[ 0 ];
-
- if ( ctx->Map.entry.Pre_FirstAgain_NA ) {
- ctx->Map.pcs[ 1 ] = BspReqInterruptSpurious_Pre_FirstAgain_NA;
- } else {
- ctx->Map.pcs[ 1 ] = ctx->Map.pci[ 1 ];
- }
-}
-
-static void BspReqInterruptSpurious_TestVariant(
- BspReqInterruptSpurious_Context *ctx
-)
-{
- BspReqInterruptSpurious_Pre_First_Prepare( ctx, ctx->Map.pcs[ 0 ] );
- BspReqInterruptSpurious_Pre_FirstAgain_Prepare( ctx, ctx->Map.pcs[ 1 ] );
- BspReqInterruptSpurious_Action( ctx );
- BspReqInterruptSpurious_Post_Result_Check( ctx, ctx->Map.entry.Post_Result );
- BspReqInterruptSpurious_Post_FatalSource_Check(
- ctx,
- ctx->Map.entry.Post_FatalSource
- );
- BspReqInterruptSpurious_Post_FatalCode_Check(
- ctx,
- ctx->Map.entry.Post_FatalCode
- );
-}
-
-/**
- * @fn void T_case_body_BspReqInterruptSpurious( void )
- */
-T_TEST_CASE_FIXTURE(
- BspReqInterruptSpurious,
- &BspReqInterruptSpurious_Fixture
-)
-{
- BspReqInterruptSpurious_Context *ctx;
-
- ctx = T_fixture_context();
- ctx->Map.in_action_loop = true;
- ctx->Map.index = 0;
-
- for (
- ctx->Map.pci[ 0 ] = BspReqInterruptSpurious_Pre_First_Null;
- ctx->Map.pci[ 0 ] < BspReqInterruptSpurious_Pre_First_NA;
- ++ctx->Map.pci[ 0 ]
- ) {
- for (
- ctx->Map.pci[ 1 ] = BspReqInterruptSpurious_Pre_FirstAgain_Null;
- ctx->Map.pci[ 1 ] < BspReqInterruptSpurious_Pre_FirstAgain_NA;
- ++ctx->Map.pci[ 1 ]
- ) {
- ctx->Map.entry = BspReqInterruptSpurious_PopEntry( ctx );
- BspReqInterruptSpurious_SetPreConditionStates( ctx );
- BspReqInterruptSpurious_TestVariant( ctx );
- }
- }
-}
-
-/** @} */