RTEMS 5.2
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
tm27.h
Go to the documentation of this file.
1
7/*
8 * COPYRIGHT (c) 2006.
9 * Aeroflex Gaisler AB.
10 *
11 * The license and distribution terms for this file may be
12 * found in the file LICENSE in this distribution or at
13 * http://www.rtems.org/license/LICENSE.
14 */
15
16#ifndef _RTEMS_TMTEST27
17#error "This is an RTEMS internal file you must not include directly."
18#endif
19
20#ifndef __tm27_h
21#define __tm27_h
22
23/*
24 * Define the interrupt mechanism for Time Test 27
25 *
26 * NOTE: Since the interrupt code for the SPARC supports both synchronous
27 * and asynchronous trap handlers, support for testing with both
28 * is included.
29 */
30
31#define SIS_USE_SYNCHRONOUS_TRAP 0
32
33/*
34 * The synchronous trap is an arbitrarily chosen software trap.
35 */
36
37#if (SIS_USE_SYNCHRONOUS_TRAP == 1)
38
39#define TEST_VECTOR SPARC_SYNCHRONOUS_TRAP( 0x90 )
40
41#define MUST_WAIT_FOR_INTERRUPT 1
42
43#define Install_tm27_vector( handler ) \
44 set_vector( (handler), TEST_VECTOR, 1 );
45
46#define Cause_tm27_intr() \
47 __asm__ volatile( "ta 0x10; nop " );
48
49#define Clear_tm27_intr() /* empty */
50
51#define Lower_tm27_intr() /* empty */
52
53/*
54 * The asynchronous trap is an arbitrarily chosen ERC32 interrupt source.
55 */
56
57#else /* use a regular asynchronous trap */
58
59#define TEST_INTERRUPT_SOURCE LEON_INTERRUPT_EXTERNAL_1
60#define TEST_VECTOR LEON_TRAP_TYPE( TEST_INTERRUPT_SOURCE )
61#define TEST_INTERRUPT_SOURCE2 LEON_INTERRUPT_EXTERNAL_1+1
62#define TEST_VECTOR2 LEON_TRAP_TYPE( TEST_INTERRUPT_SOURCE2 )
63#define MUST_WAIT_FOR_INTERRUPT 1
64
65#define Install_tm27_vector( handler ) \
66 set_vector( (handler), TEST_VECTOR, 1 ); \
67 set_vector( (handler), TEST_VECTOR2, 1 );
68
69#define Cause_tm27_intr() \
70 do { \
71 LEON_Force_interrupt( TEST_INTERRUPT_SOURCE+(Interrupt_nest>>1)); \
72 nop(); \
73 nop(); \
74 nop(); \
75 } while (0)
76
77#define Clear_tm27_intr() \
78 LEON_Clear_interrupt( TEST_INTERRUPT_SOURCE )
79
80#define Lower_tm27_intr() /* empty */
81
82#endif
83
84#endif