annotate packages/hal/powerpc/arch/current/include/hal_intr.h @ 14:01ce82f3e11a ecos-sw-1999-06-11

Merge from eCos master repository on 1999-06-11-17:05:41-BST
author jlarmour
date Fri, 11 Jun 1999 09:36:56 +0000
parents d3fbcdfa1b2f
children 5f5102441818
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_HAL_INTR_H
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 #define CYGONCE_HAL_INTR_H
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4 //==========================================================================
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 // hal_intr.h
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 // HAL Interrupt and clock support
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
10 //==========================================================================
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
11 //####COPYRIGHTBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
12 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
13 // -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
14 // The contents of this file are subject to the Cygnus eCos Public License
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
15 // Version 1.0 (the "License"); you may not use this file except in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
16 // compliance with the License. You may obtain a copy of the License at
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
17 // http://sourceware.cygnus.com/ecos
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
18 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
19 // Software distributed under the License is distributed on an "AS IS"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
20 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
21 // License for the specific language governing rights and limitations under
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
22 // the License.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
23 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
24 // The Original Code is eCos - Embedded Cygnus Operating System, released
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
25 // September 30, 1998.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
26 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
27 // The Initial Developer of the Original Code is Cygnus. Portions created
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
28 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
29 // -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 //####COPYRIGHTEND####
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
32 //==========================================================================
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
35 // Author(s): nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
36 // Contributors: nickg, jskov,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
37 // jlarmour
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
38 // Date: 1999-02-19
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
39 // Purpose: Define Interrupt support
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
40 // Description: The macros defined here provide the HAL APIs for handling
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
41 // interrupts and the clock.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 // Usage:
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
44 // #include <cyg/hal/hal_intr.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
45 // ...
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
50 //==========================================================================
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 #include <pkgconf/hal.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 #include <cyg/infra/cyg_type.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
56 #include <cyg/hal/ppc_regs.h> // register definitions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
57 #include <cyg/hal/hal_io.h> // io macros
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
58 #include <cyg/infra/cyg_ass.h> // CYG_FAIL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
59
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
60 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
61 // PowerPC exception vectors. These correspond to VSRs and are the values
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
62 // to use for HAL_VSR_GET/SET
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
63
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
64 #define CYGNUM_HAL_VECTOR_RESERVED_0 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
65 #define CYGNUM_HAL_VECTOR_RESET 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
66 #define CYGNUM_HAL_VECTOR_MACHINE_CHECK 2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
67 #define CYGNUM_HAL_VECTOR_DSI 3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
68 #define CYGNUM_HAL_VECTOR_ISI 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
69 #define CYGNUM_HAL_VECTOR_INTERRUPT 5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
70 #define CYGNUM_HAL_VECTOR_ALIGNMENT 6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
71 #define CYGNUM_HAL_VECTOR_PROGRAM 7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
72 #define CYGNUM_HAL_VECTOR_FP_UNAVAILABLE 8
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
73 #define CYGNUM_HAL_VECTOR_DECREMENTER 9
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
74 #define CYGNUM_HAL_VECTOR_RESERVED_A 10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
75 #define CYGNUM_HAL_VECTOR_RESERVED_B 11
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
76 #define CYGNUM_HAL_VECTOR_SYSTEM_CALL 12
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
77 #define CYGNUM_HAL_VECTOR_TRACE 13
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
78 #define CYGNUM_HAL_VECTOR_FP_ASSIST 14
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
79
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
80 #define CYGNUM_HAL_VSR_MIN CYGNUM_HAL_VECTOR_RESERVED_0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
81 #define CYGNUM_HAL_VSR_MAX CYGNUM_HAL_VECTOR_FP_ASSIST
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
82 #define CYGNUM_HAL_VSR_COUNT ( CYGNUM_HAL_VSR_MAX + 1 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
83
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
84 // The decoded interrupts.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
85 // Define decrementer as the first interrupt since it is guaranteed to
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
86 // be defined on all PowerPCs. External may expand into several interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
87 // depending on interrupt controller capabilities.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
88 #define CYGNUM_HAL_INTERRUPT_DECREMENTER 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
89 #define CYGNUM_HAL_INTERRUPT_EXTERNAL 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
90
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
91 // CYGNUM_HAL_ISR_COUNT must match CYG_ISR_TABLE_SIZE defined in vectors.S.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
92 #define CYGNUM_HAL_ISR_MIN CYGNUM_HAL_INTERRUPT_DECREMENTER
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
93 #define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_EXTERNAL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
94 #define CYGNUM_HAL_ISR_COUNT ( CYGNUM_HAL_ISR_MAX + 1 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
95
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
96 // Exception vectors. These are the values used when passed out to an
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
97 // external exception handler using cyg_hal_deliver_exception()
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
99 #define CYGNUM_HAL_EXCEPTION_RESERVED_0 CYGNUM_HAL_VECTOR_RESERVED_0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
100 #define CYGNUM_HAL_EXCEPTION_MACHINE_CHECK CYGNUM_HAL_VECTOR_MACHINE_CHECK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
101 #define CYGNUM_HAL_EXCEPTION_DATA_ACCESS CYGNUM_HAL_VECTOR_DSI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
102 #define CYGNUM_HAL_EXCEPTION_CODE_ACCESS CYGNUM_HAL_VECTOR_ISI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
103 #define CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
104 CYGNUM_HAL_VECTOR_ALIGNMENT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
105 #define CYGNUM_HAL_EXCEPTION_FPU_NOT_AVAIL CYGNUM_HAL_VECTOR_FP_UNAVAILABLE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
106 #define CYGNUM_HAL_EXCEPTION_RESERVED_A CYGNUM_HAL_VECTOR_RESERVED_A
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
107 #define CYGNUM_HAL_EXCEPTION_RESERVED_B CYGNUM_HAL_VECTOR_RESERVED_B
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
108 #define CYGNUM_HAL_EXCEPTION_SYSTEM_CALL CYGNUM_HAL_VECTOR_SYSTEM_CALL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
109 #define CYGNUM_HAL_EXCEPTION_TRACE CYGNUM_HAL_VECTOR_TRACE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
110 #define CYGNUM_HAL_EXCEPTION_FP_ASSIST CYGNUM_HAL_VECTOR_FP_ASSIST
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
111
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
112 // decoded exception vectors
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
113 #define CYGNUM_HAL_EXCEPTION_TRAP (-1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
114 #define CYGNUM_HAL_EXCEPTION_PRIVILEGED_INSTRUCTION (-2)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
115 #define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION (-3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
116 #define CYGNUM_HAL_EXCEPTION_FPU (-4)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
117
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
118 #define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_EXCEPTION_FPU
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
119 #define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_VECTOR_FP_ASSIST
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
120 #define CYGNUM_HAL_EXCEPTION_COUNT \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
121 ( CYGNUM_HAL_EXCEPTION_MAX - CYGNUM_HAL_EXCEPTION_MIN + 1 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
122
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
123
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
124 #ifdef CYG_HAL_POWERPC_MPC8xx
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
125 // Additional exceptions on the MPC8xx
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
126 #define CYGNUM_HAL_VECTOR_RESERVED_F 15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
127 #define CYGNUM_HAL_VECTOR_SW_EMUL 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
128 #define CYGNUM_HAL_VECTOR_ITLB_MISS 17
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
129 #define CYGNUM_HAL_VECTOR_DTLB_MISS 18
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
130 #define CYGNUM_HAL_VECTOR_ITLB_ERROR 19
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
131 #define CYGNUM_HAL_VECTOR_DTLB_ERROR 20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
132 #define CYGNUM_HAL_VECTOR_RESERVED_15 21
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
133 #define CYGNUM_HAL_VECTOR_RESERVED_16 22
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
134 #define CYGNUM_HAL_VECTOR_RESERVED_17 23
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
135 #define CYGNUM_HAL_VECTOR_RESERVED_18 24
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
136 #define CYGNUM_HAL_VECTOR_RESERVED_19 25
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
137 #define CYGNUM_HAL_VECTOR_RESERVED_1A 26
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
138 #define CYGNUM_HAL_VECTOR_RESERVED_1B 27
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
139 #define CYGNUM_HAL_VECTOR_DATA_BP 28
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
140 #define CYGNUM_HAL_VECTOR_INSTRUCTION_BP 29
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
141 #define CYGNUM_HAL_VECTOR_PERIPHERAL_BP 30
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
142 #define CYGNUM_HAL_VECTOR_NMI 31
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
144 #define CYGNUM_HAL_EXCEPTION_RESERVED_F CYGNUM_HAL_VECTOR_RESERVED_F
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
145 #define CYGNUM_HAL_EXCEPTION_SW_EMUL CYGNUM_HAL_VECTOR_SW_EMUL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
146 #define CYGNUM_HAL_EXCEPTION_CODE_TLBMISS_ACCESS CYGNUM_HAL_VECTOR_ITLB_MISS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
147 #define CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_ACCESS CYGNUM_HAL_VECTOR_DTLB_MISS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
148 #define CYGNUM_HAL_EXCEPTION_CODE_TLBERROR_ACCESS \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
149 CYGNUM_HAL_VECTOR_ITLB_ERROR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
150 #define CYGNUM_HAL_EXCEPTION_DATA_TLBERROR_ACCESS \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
151 CYGNUM_HAL_VECTOR_DTLB_ERROR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
152 #define CYGNUM_HAL_EXCEPTION_RESERVED_15 CYGNUM_HAL_VECTOR_RESERVED_15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
153 #define CYGNUM_HAL_EXCEPTION_RESERVED_16 CYGNUM_HAL_VECTOR_RESERVED_16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
154 #define CYGNUM_HAL_EXCEPTION_RESERVED_17 CYGNUM_HAL_VECTOR_RESERVED_17
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
155 #define CYGNUM_HAL_EXCEPTION_RESERVED_18 CYGNUM_HAL_VECTOR_RESERVED_18
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
156 #define CYGNUM_HAL_EXCEPTION_RESERVED_19 CYGNUM_HAL_VECTOR_RESERVED_19
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
157 #define CYGNUM_HAL_EXCEPTION_RESERVED_1A CYGNUM_HAL_VECTOR_RESERVED_1A
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
158 #define CYGNUM_HAL_EXCEPTION_RESERVED_1B CYGNUM_HAL_VECTOR_RESERVED_1B
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
159 #define CYGNUM_HAL_EXCEPTION_DATA_BP CYGNUM_HAL_VECTOR_DATA_BP
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
160 #define CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP CYGNUM_HAL_VECTOR_INSTRUCTION_BP
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
161 #define CYGNUM_HAL_EXCEPTION_PERIPHERAL_BP CYGNUM_HAL_VECTOR_PERIPHERAL_BP
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
162 #define CYGNUM_HAL_EXCEPTION_NMI CYGNUM_HAL_VECTOR_NMI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
163
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
164 #undef CYGNUM_HAL_EXCEPTION_MAX
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
165 #define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_EXCEPTION_NMI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
166
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
167 // The first level of external interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
168 #define CYGNUM_HAL_INTERRUPT_SIU_IRQ0 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
169 #define CYGNUM_HAL_INTERRUPT_SIU_LVL0 2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
170 #define CYGNUM_HAL_INTERRUPT_SIU_IRQ1 3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
171 #define CYGNUM_HAL_INTERRUPT_SIU_LVL1 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
172 #define CYGNUM_HAL_INTERRUPT_SIU_IRQ2 5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
173 #define CYGNUM_HAL_INTERRUPT_SIU_LVL2 6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
174 #define CYGNUM_HAL_INTERRUPT_SIU_IRQ3 7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
175 #define CYGNUM_HAL_INTERRUPT_SIU_LVL3 8
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
176 #define CYGNUM_HAL_INTERRUPT_SIU_IRQ4 9
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
177 #define CYGNUM_HAL_INTERRUPT_SIU_LVL4 10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
178 #define CYGNUM_HAL_INTERRUPT_SIU_IRQ5 11
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
179 #define CYGNUM_HAL_INTERRUPT_SIU_LVL5 12
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
180 #define CYGNUM_HAL_INTERRUPT_SIU_IRQ6 13
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
181 #define CYGNUM_HAL_INTERRUPT_SIU_LVL6 14
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
182 #define CYGNUM_HAL_INTERRUPT_SIU_IRQ7 15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
183 #define CYGNUM_HAL_INTERRUPT_SIU_LVL7 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
184
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
185 // Further decoded interrups
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
186 #define CYGNUM_HAL_INTERRUPT_SIU_TB_A 17
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
187 #define CYGNUM_HAL_INTERRUPT_SIU_TB_B 18
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
188 #define CYGNUM_HAL_INTERRUPT_SIU_PIT 19
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
189 #define CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC 20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
190 #define CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR 21
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
191 #define CYGNUM_HAL_INTERRUPT_SIU_PCMCIA_A_IRQ 22
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
192 #define CYGNUM_HAL_INTERRUPT_SIU_PCMCIA_A_CHLVL 23
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
193 #define CYGNUM_HAL_INTERRUPT_SIU_PCMCIA_B_IRQ 24
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
194 #define CYGNUM_HAL_INTERRUPT_SIU_PCMCIA_B_CHLVL 25
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
195 #define CYGNUM_HAL_INTERRUPT_SIU_CPM 26
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
196
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
197 // Even further...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
198 #define CYGNUM_HAL_INTERRUPT_CPM_PC15 27
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
199 #define CYGNUM_HAL_INTERRUPT_CPM_SCC1 28
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
200 #define CYGNUM_HAL_INTERRUPT_CPM_SCC2 29
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
201 #define CYGNUM_HAL_INTERRUPT_CPM_SCC3 30
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
202 #define CYGNUM_HAL_INTERRUPT_CPM_SCC4 31
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
203 #define CYGNUM_HAL_INTERRUPT_CPM_PC14 32
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
204 #define CYGNUM_HAL_INTERRUPT_CPM_TIMER1 33
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
205 #define CYGNUM_HAL_INTERRUPT_CPM_PC13 34
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
206 #define CYGNUM_HAL_INTERRUPT_CPM_PC12 35
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
207 #define CYGNUM_HAL_INTERRUPT_CPM_SDMA 36
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
208 #define CYGNUM_HAL_INTERRUPT_CPM_IDMA1 37
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
209 #define CYGNUM_HAL_INTERRUPT_CPM_IDMA2 38
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
210 #define CYGNUM_HAL_INTERRUPT_CPM_RESERVED_13 39
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
211 #define CYGNUM_HAL_INTERRUPT_CPM_TIMER2 40
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
212 #define CYGNUM_HAL_INTERRUPT_CPM_RISCTT 41
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
213 #define CYGNUM_HAL_INTERRUPT_CPM_I2C 42
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
214 #define CYGNUM_HAL_INTERRUPT_CPM_PC11 43
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
215 #define CYGNUM_HAL_INTERRUPT_CPM_PC10 44
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
216 #define CYGNUM_HAL_INTERRUPT_CPM_RESERVED_0D 45
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
217 #define CYGNUM_HAL_INTERRUPT_CPM_TIMER3 46
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
218 #define CYGNUM_HAL_INTERRUPT_CPM_PC9 47
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
219 #define CYGNUM_HAL_INTERRUPT_CPM_PC8 48
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
220 #define CYGNUM_HAL_INTERRUPT_CPM_PC7 49
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
221 #define CYGNUM_HAL_INTERRUPT_CPM_RESERVED_08 50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
222 #define CYGNUM_HAL_INTERRUPT_CPM_TIMER4 51
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
223 #define CYGNUM_HAL_INTERRUPT_CPM_PC6 52
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
224 #define CYGNUM_HAL_INTERRUPT_CPM_SPI 53
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
225 #define CYGNUM_HAL_INTERRUPT_CPM_SMC1 54
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
226 #define CYGNUM_HAL_INTERRUPT_CPM_SMC2_PIP 55
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
227 #define CYGNUM_HAL_INTERRUPT_CPM_PC5 56
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
228 #define CYGNUM_HAL_INTERRUPT_CPM_PC4 57
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
229 #define CYGNUM_HAL_INTERRUPT_CPM_ERROR 58
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
230
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
231 #define CYGNUM_HAL_INTERRUPT_CPM_FIRST CYGNUM_HAL_INTERRUPT_CPM_PC15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
232 #define CYGNUM_HAL_INTERRUPT_CPM_LAST CYGNUM_HAL_INTERRUPT_CPM_ERROR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
233
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
234 #undef CYGNUM_HAL_ISR_MAX
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
235 #define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_CPM_LAST
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
238 // The vector used by the Real time clock
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
239 #define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_DECREMENTER
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
241 //--------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 // Static data used by HAL
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 // ISR tables
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
245 externC volatile CYG_ADDRESS hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
246 externC volatile CYG_ADDRWORD hal_interrupt_data[CYGNUM_HAL_ISR_COUNT];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
247 externC volatile CYG_ADDRESS hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
248 // VSR table
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
249 externC volatile CYG_ADDRESS hal_vsr_table[CYGNUM_HAL_VSR_COUNT];
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
251 //--------------------------------------------------------------------------
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
252 // Default ISRs
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254 externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data);
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
255 externC cyg_uint32 hal_default_decrementer_isr(CYG_ADDRWORD vector,
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
256 CYG_ADDRWORD data);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
258 //--------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 // Interrupt state storage
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 typedef cyg_uint32 CYG_INTERRUPT_STATE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
263 //--------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 // Interrupt control macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 #define HAL_DISABLE_INTERRUPTS(_old_) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 asm volatile ( \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 "mfmsr %0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269 "lis 4,0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270 "ori 4,4,0x8000 ;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 "not 5,4;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 "and 5,%0,5;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273 "mtmsr 5;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 "and %0,%0,4" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275 : "=r"(_old_) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 : \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 : "r4", "r5" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280 #define HAL_ENABLE_INTERRUPTS() \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 asm volatile ( \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 "mfmsr 3;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 "lis 4,0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 "ori 4,4,0x8000 ;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 "or 3,3,4;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 "mtmsr 3;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 : \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 : \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 : "r3", "r4" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 #define HAL_RESTORE_INTERRUPTS(_old_) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293 asm volatile ( \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 "mfmsr 3;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 "lis 4,0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 "ori 4,4,0x8000 ;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297 "and 4,%0,4;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 "or 4,3,4;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 "mtmsr 4;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 : \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301 : "r"(_old_) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302 : "r3", "r4" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 // FIXME: using andi with side-effect on cc would be better but causes
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 // compiler problem.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 #define HAL_QUERY_INTERRUPTS(_old_) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308 asm volatile ( \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 "mfmsr %0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310 "lis 4,0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 "ori 4,4,0x8000;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 "and %0,%0,4;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 : "=r"(_old_) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 : \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 : "r4" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
318 //--------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 // Vector translation.
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
320
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
321 #ifndef HAL_TRANSLATE_VECTOR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
322 // Basic PowerPC configuration only has two vectors; decrementer and
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
323 // external. Isr tables/chaining use same vector decoder.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
324 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
325 (_index_) = (_vector_)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
326 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
328 //--------------------------------------------------------------------------
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
329 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
330
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
331 externC void hal_interrupt_stack_call_pending_DSRs(void);
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
332 #define HAL_INTERRUPT_STACK_CALL_PENDING_DSRS() \
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
333 hal_interrupt_stack_call_pending_DSRs()
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
334
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
335 // these are offered solely for stack usage testing
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
336 // if they are not defined, then there is no interrupt stack.
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
337 #define HAL_INTERRUPT_STACK_BASE cyg_interrupt_stack_base
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
338 #define HAL_INTERRUPT_STACK_TOP cyg_interrupt_stack
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
339 // use them to declare these extern however you want:
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
340 // extern char HAL_INTERRUPT_STACK_BASE[];
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
341 // extern char HAL_INTERRUPT_STACK_TOP[];
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
342 // is recommended
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
343 #endif
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
344
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
345 //--------------------------------------------------------------------------
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
346 // Interrupt and VSR attachment macros
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
348 #define HAL_INTERRUPT_IN_USE( _vector_, _state_) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
349 CYG_MACRO_START \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
350 cyg_uint32 _index_; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
351 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
352 \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
353 if((hal_interrupt_handlers[_index_] \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
354 == (CYG_ADDRESS)hal_default_decrementer_isr) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
355 || (hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr)) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
356 (_state_) = 0; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
357 else \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
358 (_state_) = 1; \
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
359 CYG_MACRO_END
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
361 #define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
362 CYG_MACRO_START \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
363 cyg_uint32 _index_; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
364 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
365 \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
366 if((hal_interrupt_handlers[_index_] \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
367 == (CYG_ADDRESS)hal_default_decrementer_isr) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
368 || (hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr)) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
369 { \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
370 hal_interrupt_handlers[_index_] = (CYG_ADDRESS)_isr_; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
371 hal_interrupt_data[_index_] = (CYG_ADDRWORD) _data_; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
372 hal_interrupt_objects[_index_] = (CYG_ADDRESS)_object_; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
373 } \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
376 #define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
377 CYG_MACRO_START \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
378 cyg_uint32 _index_; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
379 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
380 \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
381 if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)_isr_ ) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
382 { \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
383 if (CYGNUM_HAL_INTERRUPT_DECREMENTER == (_vector_)) \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
384 hal_interrupt_handlers[_index_] = \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
385 (CYG_ADDRESS)hal_default_decrementer_isr; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
386 else \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
387 hal_interrupt_handlers[_index_] = (CYG_ADDRESS)hal_default_isr; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
388 hal_interrupt_data[_index_] = 0; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
389 hal_interrupt_objects[_index_] = 0; \
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
390 } \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 #define HAL_VSR_GET( _vector_, _pvsr_ ) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 *(CYG_ADDRESS *)(_pvsr_) = hal_vsr_table[_vector_];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397 #define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ ) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 CYG_MACRO_START \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 if( _poldvsr_ != NULL ) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_]; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
404 //--------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 // Interrupt controller access
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
407 #ifdef CYG_HAL_POWERPC_MPC860
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
408
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
409 // FIXME: Should probably be put in a separate .inl file?!?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
410
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
411 static __inline__ void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
412 cyg_hal_interrupt_mask ( cyg_uint32 vector )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
413 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
414 switch (vector) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
415 case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
416 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
417 // SIU interrupt vectors
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
418 cyg_uint32 simask;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
419
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
420 HAL_READ_UINT32 (CYGARC_REG_IMM_SIMASK, simask);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
421 simask &= ~(((cyg_uint32) CYGARC_REG_IMM_SIMASK_IRQ0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
422 >> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
423 HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIMASK, simask);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
424 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
425 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
426 case CYGNUM_HAL_INTERRUPT_SIU_TB_A:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
427 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
428 // TimeBase A interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
429 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
430
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
431 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
432 tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFAE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
433 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
434 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
435 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
436 case CYGNUM_HAL_INTERRUPT_SIU_TB_B:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
437 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
438 // TimeBase B interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
439 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
440
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
441 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
442 tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFBE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
443 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
444 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
445 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
446 case CYGNUM_HAL_INTERRUPT_SIU_PIT:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
447 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
448 // Periodic Interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
449 cyg_uint16 piscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
450
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
451 HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
452 piscr &= ~(CYGARC_REG_IMM_PISCR_PIE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
453 HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
454 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
455 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
456 case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
457 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
458 // Real Time Clock Second
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
459 cyg_uint16 rtcsc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
460
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
461 HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
462 rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SIE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
463 HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
464 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
465 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
466 case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
467 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
468 // Real Time Clock Alarm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
469 cyg_uint16 rtcsc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
470
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
471 HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
472 rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
473 HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
474 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
475 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
476 // PCMCIA_A_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
477 // PCMCIA_A_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
478 // PCMCIA_B_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
479 // PCMCIA_B_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
480 case CYGNUM_HAL_INTERRUPT_SIU_CPM:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
481 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
482 // Communications Processor Module
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
483 cyg_uint16 cicr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
484
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
485 HAL_READ_UINT16 (CYGARC_REG_IMM_CICR, cicr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
486 cicr &= ~(CYGARC_REG_IMM_CICR_IEN);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
487 HAL_WRITE_UINT16 (CYGARC_REG_IMM_CICR, cicr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
488 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
489 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
490 case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
491 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
492 // CPM interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
493 cyg_uint32 cimr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
494
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
495 HAL_READ_UINT32 (CYGARC_REG_IMM_CIMR, cimr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
496 cimr &= ~(((cyg_uint32) 0x80000000)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
497 >> (vector - CYGNUM_HAL_INTERRUPT_CPM_FIRST));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
498 HAL_WRITE_UINT32 (CYGARC_REG_IMM_CIMR, cimr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
499 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
500 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
501 default:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
502 CYG_FAIL("Unknown Interrupt!!!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
503 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
504 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
505 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
506
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
507 static __inline__ void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
508 cyg_hal_interrupt_unmask ( cyg_uint32 vector )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
509 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
510 switch (vector) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
511 case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
512 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
513 // SIU interrupt vectors
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
514 cyg_uint32 simask;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
515
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
516 HAL_READ_UINT32 (CYGARC_REG_IMM_SIMASK, simask);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
517 simask |= (((cyg_uint32) CYGARC_REG_IMM_SIMASK_IRQ0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
518 >> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
519 HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIMASK, simask);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
520 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
521 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
522 case CYGNUM_HAL_INTERRUPT_SIU_TB_A:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
523 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
524 // TimeBase A interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
525 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
526
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
527 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
528 tbscr |= CYGARC_REG_IMM_TBSCR_REFAE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
529 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
530 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
531 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
532 case CYGNUM_HAL_INTERRUPT_SIU_TB_B:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
533 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
534 // TimeBase B interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
535 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
536
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
537 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
538 tbscr |= CYGARC_REG_IMM_TBSCR_REFBE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
539 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
540 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
541 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
542 case CYGNUM_HAL_INTERRUPT_SIU_PIT:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
543 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
544 // Periodic Interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
545 cyg_uint16 piscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
546
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
547 HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
548 piscr |= CYGARC_REG_IMM_PISCR_PIE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
549 HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
550 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
551 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
552 case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
553 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
554 // Real Time Clock Second
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
555 cyg_uint16 rtcsc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
556
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
557 HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
558 rtcsc |= CYGARC_REG_IMM_RTCSC_SIE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
559 HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
560 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
561 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
562 case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
563 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
564 // Real Time Clock Alarm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
565 cyg_uint16 rtcsc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
566
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
567 HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
568 rtcsc |= CYGARC_REG_IMM_RTCSC_ALE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
569 HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
570 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
571 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
572 // PCMCIA_A_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
573 // PCMCIA_A_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
574 // PCMCIA_B_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
575 // PCMCIA_B_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
576 case CYGNUM_HAL_INTERRUPT_SIU_CPM:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
577 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
578 // Communications Processor Module
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
579 cyg_uint16 cicr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
580
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
581 HAL_READ_UINT16 (CYGARC_REG_IMM_CICR, cicr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
582 cicr |= CYGARC_REG_IMM_CICR_IEN;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
583 HAL_WRITE_UINT16 (CYGARC_REG_IMM_CICR, cicr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
584 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
585 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
586 case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
587 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
588 // CPM interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
589 cyg_uint32 cimr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
590
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
591 HAL_READ_UINT32 (CYGARC_REG_IMM_CIMR, cimr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
592 cimr |= (((cyg_uint32) 0x80000000)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
593 >> (vector - CYGNUM_HAL_INTERRUPT_CPM_FIRST));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
594 HAL_WRITE_UINT32 (CYGARC_REG_IMM_CIMR, cimr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
595 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
596 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
597 default:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
598 CYG_FAIL("Unknown Interrupt!!!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
599 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
600 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
601 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
602
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
603 static __inline__ void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
604 cyg_hal_interrupt_acknowledge ( cyg_uint32 vector )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
605 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
606 switch (vector) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
607 case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
608 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
609 // SIU interrupt vectors
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
610 cyg_uint32 sipend;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
611
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
612 // When IRQx is configured as an edge interrupt it needs to be
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
613 // cleared. Write to INTx and IRQ/level bits are ignore so
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
614 // it's safe to do always.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
615 HAL_READ_UINT32 (CYGARC_REG_IMM_SIPEND, sipend);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
616 sipend |= (((cyg_uint32) CYGARC_REG_IMM_SIPEND_IRQ0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
617 >> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
618 HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIPEND, sipend);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
619 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
620 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
621 case CYGNUM_HAL_INTERRUPT_SIU_TB_A:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
622 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
623 // TimeBase A interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
624 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
625
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
626 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
627 tbscr |= CYGARC_REG_IMM_TBSCR_REFA;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
628 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
629 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
630 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
631 case CYGNUM_HAL_INTERRUPT_SIU_TB_B:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
632 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
633 // TimeBase B interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
634 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
635
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
636 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
637 tbscr |= CYGARC_REG_IMM_TBSCR_REFB;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
638 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
639 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
640 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
641 case CYGNUM_HAL_INTERRUPT_SIU_PIT:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
642 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
643 // Periodic Interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
644 cyg_uint16 piscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
645
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
646 HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
647 piscr |= CYGARC_REG_IMM_PISCR_PS;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
648 HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
649 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
650 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
651 case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
652 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
653 // Real Time Clock Second
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
654 cyg_uint16 rtcsc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
655
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
656 HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
657 rtcsc |= CYGARC_REG_IMM_RTCSC_SEC;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
658 HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
659 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
660 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
661 case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
662 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
663 // Real Time Clock Alarm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
664 cyg_uint16 rtcsc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
665
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
666 HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
667 rtcsc |= CYGARC_REG_IMM_RTCSC_ALR;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
668 HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
669 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
670 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
671 // PCMCIA_A_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
672 // PCMCIA_A_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
673 // PCMCIA_B_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
674 // PCMCIA_B_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
675 case CYGNUM_HAL_INTERRUPT_SIU_CPM:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
676 // Communications Processor Module
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
677 // The CPM interrupts must be acknowledged individually.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
678 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
679 case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
680 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
681 // CPM interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
682 cyg_uint32 cisr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
683
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
684 HAL_READ_UINT32 (CYGARC_REG_IMM_CISR, cisr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
685 cisr |= (((cyg_uint32) 0x80000000)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
686 >> (vector - CYGNUM_HAL_INTERRUPT_CPM_FIRST));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
687 HAL_WRITE_UINT32 (CYGARC_REG_IMM_CISR, cisr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
688 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
689 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
690 default:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
691 CYG_FAIL("Unknown Interrupt!!!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
692 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
693 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
694 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
695
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
696 static __inline__ void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
697 cyg_hal_interrupt_configure ( cyg_uint32 vector,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
698 cyg_bool level,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
699 cyg_bool up )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
700 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
701 switch (vector) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
702 case CYGNUM_HAL_INTERRUPT_SIU_IRQ0:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
703 case CYGNUM_HAL_INTERRUPT_SIU_IRQ1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
704 case CYGNUM_HAL_INTERRUPT_SIU_IRQ2:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
705 case CYGNUM_HAL_INTERRUPT_SIU_IRQ3:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
706 case CYGNUM_HAL_INTERRUPT_SIU_IRQ4:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
707 case CYGNUM_HAL_INTERRUPT_SIU_IRQ5:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
708 case CYGNUM_HAL_INTERRUPT_SIU_IRQ6:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
709 case CYGNUM_HAL_INTERRUPT_SIU_IRQ7:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
710 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
711 // External interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
712 cyg_uint32 siel, bit;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
713
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
714 CYG_ASSERT( level || !up, "Only falling edge is supported");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
715
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
716 bit = (((cyg_uint32) CYGARC_REG_IMM_SIEL_IRQ0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
717 >> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
718
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
719 HAL_READ_UINT32 (CYGARC_REG_IMM_SIEL, siel);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
720 siel &= ~bit;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
721 if (!level) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
722 // Set edge detect bit.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
723 siel |= bit;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
724 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
725 HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIEL, siel);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
726 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
727 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
728 case CYGNUM_HAL_INTERRUPT_SIU_LVL0:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
729 case CYGNUM_HAL_INTERRUPT_SIU_LVL1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
730 case CYGNUM_HAL_INTERRUPT_SIU_LVL2:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
731 case CYGNUM_HAL_INTERRUPT_SIU_LVL3:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
732 case CYGNUM_HAL_INTERRUPT_SIU_LVL4:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
733 case CYGNUM_HAL_INTERRUPT_SIU_LVL5:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
734 case CYGNUM_HAL_INTERRUPT_SIU_LVL6:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
735 case CYGNUM_HAL_INTERRUPT_SIU_LVL7:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
736 case CYGNUM_HAL_INTERRUPT_SIU_TB_A:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
737 case CYGNUM_HAL_INTERRUPT_SIU_TB_B:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
738 case CYGNUM_HAL_INTERRUPT_SIU_PIT:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
739 case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
740 case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
741 // PCMCIA_A_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
742 // PCMCIA_A_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
743 // PCMCIA_B_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
744 // PCMCIA_B_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
745 case CYGNUM_HAL_INTERRUPT_SIU_CPM:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
746 case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
747 // These cannot be configured.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
748 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
749
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
750 default:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
751 CYG_FAIL("Unknown Interrupt!!!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
752 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
753 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
754 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
755
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
756 static __inline__ void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
757 cyg_hal_interrupt_set_level ( cyg_uint32 vector, cyg_uint32 level )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
758 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
759 // Note: highest priority has the lowest numerical value.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
760 CYG_ASSERT( level >= CYGARC_SIU_PRIORITY_HIGH, "Invalid priority");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
761 CYG_ASSERT( level <= CYGARC_SIU_PRIORITY_LOW, "Invalid priority");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
762
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
763 switch (vector) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
764 case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
765 // These cannot be configured.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
766 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
767 case CYGNUM_HAL_INTERRUPT_SIU_TB_A:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
768 case CYGNUM_HAL_INTERRUPT_SIU_TB_B:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
769 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
770 // TimeBase A+B interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
771 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
772
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
773 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
774 tbscr &= ~(CYGARC_REG_IMM_TBSCR_IRQMASK);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
775 tbscr |= CYGARC_REG_IMM_TBSCR_IRQ0 >> level;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
776 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
777 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
778 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
779 case CYGNUM_HAL_INTERRUPT_SIU_PIT:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
780 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
781 // Periodic Interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
782 cyg_uint16 piscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
783
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
784 HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
785 piscr &= ~(CYGARC_REG_IMM_PISCR_IRQMASK);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
786 piscr |= CYGARC_REG_IMM_PISCR_IRQ0 >> level;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
787 HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
788 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
789 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
790 case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
791 case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
792 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
793 // Real Time Clock Second & Real Time Clock Alarm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
794 cyg_uint16 rtcsc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
795
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
796 HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
797 rtcsc &= ~(CYGARC_REG_IMM_RTCSC_IRQMASK);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
798 rtcsc |= CYGARC_REG_IMM_RTCSC_IRQ0 >> level;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
799 HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
800 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
801 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
802 // PCMCIA_A_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
803 // PCMCIA_A_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
804 // PCMCIA_B_IRQ
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
805 // PCMCIA_B_CHLVL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
806 case CYGNUM_HAL_INTERRUPT_SIU_CPM:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
807 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
808 // Communications Processor Module
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
809 cyg_uint16 cicr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
810
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
811 HAL_READ_UINT16 (CYGARC_REG_IMM_CICR, cicr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
812 cicr &= ~(CYGARC_REG_IMM_CICR_IRQMASK);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
813 cicr |= level << CYGARC_REG_IMM_CICR_IRQ_SHIFT;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
814 HAL_WRITE_UINT16 (CYGARC_REG_IMM_CICR, cicr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
815 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
816 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
817 case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
818 // CPM interrupt levels are for internal priority. All interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
819 // fed to the CPU use the CPM level set above.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
820 // FIXME: Control of SCdP ordering.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
821 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
822 default:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
823 CYG_FAIL("Unknown Interrupt!!!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
824 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
825 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
826 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
827
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
828 // The decrementer interrupt cannnot be masked, configured or acknowledged.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
829
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
830 #define HAL_INTERRUPT_MASK( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
831 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
832 if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
833 cyg_hal_interrupt_mask ( (_vector_) ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
834 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
835
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
836 #define HAL_INTERRUPT_UNMASK( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
837 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
838 if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
839 cyg_hal_interrupt_unmask ( (_vector_) ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
840 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
841
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
842 #define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
843 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
844 if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
845 cyg_hal_interrupt_acknowledge ( (_vector_) ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
846 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
847
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
848 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
849 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
850 if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
851 cyg_hal_interrupt_configure ( (_vector_), (_level_), (_up_) ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
852 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
853
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
854 #define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
855 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
856 if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_)) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
857 cyg_hal_interrupt_set_level ( (_vector_) , (_level_) ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
858 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
859
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
860 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
861
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
862 // No interrupt configuration possible without interrupt controller.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
863
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
864 #define HAL_INTERRUPT_MASK( _vector_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
865
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
866 #define HAL_INTERRUPT_UNMASK( _vector_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
867
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
868 #define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
869
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
870 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
871
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
872 #define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
873
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
874 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
875
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
876 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
877 // Interrupt arbiters
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
878
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
879 #ifdef CYG_HAL_POWERPC_MPC860
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
880
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
881 externC cyg_uint32 hal_arbitration_isr_tb (CYG_ADDRWORD vector,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
882 CYG_ADDRWORD data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
883 externC cyg_uint32 hal_arbitration_isr_pit (CYG_ADDRWORD vector,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
884 CYG_ADDRWORD data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
885 externC cyg_uint32 hal_arbitration_isr_rtc (CYG_ADDRWORD vector,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
886 CYG_ADDRWORD data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
887 externC cyg_uint32 hal_arbitration_isr_cpm (CYG_ADDRWORD vector,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
888 CYG_ADDRWORD data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
889
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
890 #endif // ifdef CYG_HAL_POWERPC_MPC860
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
891
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
892 //--------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
893 // Clock control
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
894
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
895 #define HAL_CLOCK_INITIALIZE( _period_ ) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
896 asm volatile ( \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
897 "mtdec %0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
898 : \
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
899 : "r"(_period_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
900 );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
901
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
902 #define HAL_CLOCK_RESET( _vector_, _period_ ) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
903 asm volatile ( \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
904 "mtdec %0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
905 : \
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
906 : "r"(_period_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
907 );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
908
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
909 #define HAL_CLOCK_READ( _pvalue_ ) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
910 CYG_MACRO_START \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
911 register cyg_uint32 result; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
912 asm volatile( \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
913 "mfdec %0;" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
914 : "=r"(result) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
915 ); \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
916 *(_pvalue_) = CYGNUM_KERNEL_COUNTERS_RTC_PERIOD-result; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
917 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
918
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
919 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
920 #define HAL_CLOCK_LATENCY( _pvalue_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
921 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
922 register cyg_int32 result; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
923 asm volatile( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
924 "mfdec %0;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
925 : "=r"(result) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
926 ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
927 /* Pending DEC interrupts cannot be discarded. If dec is */ \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
928 /* positive it''s because a DEC interrupt occured while */ \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
929 /* eCos was getting ready to run. Just return 0 in that */ \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
930 /* case. */ \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
931 if (result > 0) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
932 result = 0; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
933 *(_pvalue_) = -result; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
934 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
935 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
936
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
937 //--------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
938 #endif // ifndef CYGONCE_HAL_INTR_H
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
939 // End of hal_intr.h