source: rtems/bsps/sparc/leon3/include/tm27.h @ e01e499

Last change on this file since e01e499 was e01e499, checked in by Daniel Cederman <cederman@…>, on 11/14/22 at 09:59:44

bsps/sparc: Change license to BSD-2 for files with Gaisler copyright

This patch changes the license to BSD-2 for all source files where the
copyright is held by Aeroflex Gaisler, Cobham Gaisler, or Gaisler Research.
Some files also includes copyright right statements from OAR and/or
embedded Brains in addition to Gaisler.

Updates #3053.

  • Property mode set to 100644
File size: 4.0 KB
Line 
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/**
4 * @file
5 * @ingroup sparc_leon3
6 * @brief Implementations for interrupt mechanisms for Time Test 27
7 */
8
9/*
10 *  COPYRIGHT (c) 2006.
11 *  Aeroflex Gaisler AB.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 *    notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 *    notice, this list of conditions and the following disclaimer in the
20 *    documentation and/or other materials provided with the distribution.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 */
34
35#ifndef _RTEMS_TMTEST27
36#error "This is an RTEMS internal file you must not include directly."
37#endif
38
39#ifndef __tm27_h
40#define __tm27_h
41
42#include <bsp.h>
43#include <bsp/irq.h>
44
45#if defined(RTEMS_SMP)
46#include <rtems/score/smpimpl.h>
47#endif
48
49/*
50 *  Define the interrupt mechanism for Time Test 27
51 *
52 *  NOTE: Since the interrupt code for the SPARC supports both synchronous
53 *        and asynchronous trap handlers, support for testing with both
54 *        is included.
55 */
56
57#define SIS_USE_SYNCHRONOUS_TRAP  0
58
59/*
60 *  The synchronous trap is an arbitrarily chosen software trap.
61 */
62
63#if (SIS_USE_SYNCHRONOUS_TRAP == 1)
64
65#define TEST_VECTOR SPARC_SYNCHRONOUS_TRAP( 0x90 )
66
67#define MUST_WAIT_FOR_INTERRUPT 1
68
69#define Install_tm27_vector( handler ) \
70  set_vector( (handler), TEST_VECTOR, 1 );
71
72#define Cause_tm27_intr() \
73  __asm__ volatile( "ta 0x10; nop " );
74
75#define Clear_tm27_intr() /* empty */
76
77#define Lower_tm27_intr() /* empty */
78
79/*
80 *  The asynchronous trap is an arbitrarily chosen ERC32 interrupt source.
81 */
82
83#else   /* use a regular asynchronous trap */
84
85extern uint32_t Interrupt_nest;
86
87#define TEST_INTERRUPT_SOURCE 5
88#define TEST_INTERRUPT_SOURCE2 6
89#define MUST_WAIT_FOR_INTERRUPT 1
90
91static inline void Install_tm27_vector(
92  void ( *handler )( rtems_vector_number )
93)
94{
95  static rtems_interrupt_entry entry_low;
96  static rtems_interrupt_entry entry_high;
97
98#if defined(RTEMS_SMP)
99  bsp_interrupt_set_affinity(
100    TEST_INTERRUPT_SOURCE,
101    _SMP_Get_online_processors()
102  );
103  bsp_interrupt_set_affinity(
104    TEST_INTERRUPT_SOURCE2,
105    _SMP_Get_online_processors()
106  );
107#endif
108
109  rtems_interrupt_entry_initialize(
110    &entry_low,
111    (rtems_interrupt_handler) handler,
112    NULL,
113    "tm27 low"
114  );
115  (void) rtems_interrupt_entry_install(
116    TEST_INTERRUPT_SOURCE,
117    RTEMS_INTERRUPT_SHARED,
118    &entry_low
119  );
120  rtems_interrupt_entry_initialize(
121    &entry_high,
122    (rtems_interrupt_handler) handler,
123    NULL,
124    "tm27 high"
125  );
126  (void) rtems_interrupt_entry_install(
127    TEST_INTERRUPT_SOURCE2,
128    RTEMS_INTERRUPT_SHARED,
129    &entry_high
130  );
131}
132
133static inline void Cause_tm27_intr( void )
134{
135  rtems_vector_number vector;
136
137  vector = TEST_INTERRUPT_SOURCE + ( Interrupt_nest >> 1 );
138#if defined(RTEMS_SMP)
139  (void) rtems_interrupt_raise_on( vector, rtems_scheduler_get_processor() );
140#else
141  (void) rtems_interrupt_raise( vector );
142#endif
143  nop();
144  nop();
145  nop();
146}
147
148static inline void Clear_tm27_intr( void )
149{
150  (void) rtems_interrupt_clear( TEST_INTERRUPT_SOURCE );
151}
152
153#define Lower_tm27_intr() /* empty */
154
155#endif
156
157#endif
Note: See TracBrowser for help on using the repository browser.