Mercurial > ecos-v3_0-branch
annotate packages/hal/powerpc/arch/current/include/hal_intr.h @ 2729:74dbf4c3f2e1 after-copyright-change-20090129
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
| author | jlarmour |
|---|---|
| date | Thu, 29 Jan 2009 17:47:46 +0000 |
| parents | dbadab9b4441 |
| children |
| rev | line source |
|---|---|
| 0 | 1 #ifndef CYGONCE_HAL_INTR_H |
| 2 #define CYGONCE_HAL_INTR_H | |
| 3 | |
| 2 | 4 //========================================================================== |
| 0 | 5 // |
| 6 // hal_intr.h | |
| 7 // | |
| 8 // HAL Interrupt and clock support | |
| 9 // | |
| 2 | 10 //========================================================================== |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
11 // ####ECOSGPLCOPYRIGHTBEGIN#### |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
12 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
13 // This file is part of eCos, the Embedded Configurable Operating System. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
136
diff
changeset
|
15 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
16 // eCos is free software; you can redistribute it and/or modify it under |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
17 // the terms of the GNU General Public License as published by the Free |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
18 // Software Foundation; either version 2 or (at your option) any later |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
19 // version. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
136
diff
changeset
|
20 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
21 // eCos is distributed in the hope that it will be useful, but WITHOUT |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
22 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
23 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
24 // for more details. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
136
diff
changeset
|
25 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
26 // You should have received a copy of the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
27 // along with eCos; if not, write to the Free Software Foundation, Inc., |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
28 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
136
diff
changeset
|
29 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
30 // As a special exception, if other files instantiate templates or use |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
31 // macros or inline functions from this file, or you compile this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
32 // and link it with other works to produce a work based on this file, |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
33 // this file does not by itself cause the resulting work to be covered by |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
34 // the GNU General Public License. However the source code for this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
35 // must still be made available in accordance with section (3) of the GNU |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
36 // General Public License v2. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
136
diff
changeset
|
37 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
38 // This exception does not invalidate any other reasons why a work based |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
39 // on this file might be covered by the GNU General Public License. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
40 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1441
diff
changeset
|
41 // ####ECOSGPLCOPYRIGHTEND#### |
| 2 | 42 //========================================================================== |
| 0 | 43 //#####DESCRIPTIONBEGIN#### |
| 44 // | |
| 2 | 45 // Author(s): nickg |
| 46 // Contributors: nickg, jskov, | |
| 47 // jlarmour | |
| 48 // Date: 1999-02-19 | |
| 49 // Purpose: Define Interrupt support | |
| 50 // Description: The macros defined here provide the HAL APIs for handling | |
| 51 // interrupts and the clock. | |
| 0 | 52 // |
| 53 // Usage: | |
| 2 | 54 // #include <cyg/hal/hal_intr.h> |
| 55 // ... | |
| 0 | 56 // |
| 57 // | |
| 58 //####DESCRIPTIONEND#### | |
| 59 // | |
| 2 | 60 //========================================================================== |
| 0 | 61 |
| 62 #include <pkgconf/hal.h> | |
| 63 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
64 #include <cyg/infra/cyg_type.h> // types |
| 0 | 65 |
| 2 | 66 #include <cyg/hal/ppc_regs.h> // register definitions |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
67 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
68 #include <cyg/hal/var_intr.h> // variant extensions |
| 2 | 69 |
| 70 //-------------------------------------------------------------------------- | |
| 71 // PowerPC exception vectors. These correspond to VSRs and are the values | |
| 72 // to use for HAL_VSR_GET/SET | |
| 73 | |
| 74 #define CYGNUM_HAL_VECTOR_RESERVED_0 0 | |
| 75 #define CYGNUM_HAL_VECTOR_RESET 1 | |
| 76 #define CYGNUM_HAL_VECTOR_MACHINE_CHECK 2 | |
| 77 #define CYGNUM_HAL_VECTOR_DSI 3 | |
| 78 #define CYGNUM_HAL_VECTOR_ISI 4 | |
| 79 #define CYGNUM_HAL_VECTOR_INTERRUPT 5 | |
| 80 #define CYGNUM_HAL_VECTOR_ALIGNMENT 6 | |
| 81 #define CYGNUM_HAL_VECTOR_PROGRAM 7 | |
| 82 #define CYGNUM_HAL_VECTOR_FP_UNAVAILABLE 8 | |
| 83 #define CYGNUM_HAL_VECTOR_DECREMENTER 9 | |
| 84 #define CYGNUM_HAL_VECTOR_RESERVED_A 10 | |
| 85 #define CYGNUM_HAL_VECTOR_RESERVED_B 11 | |
| 86 #define CYGNUM_HAL_VECTOR_SYSTEM_CALL 12 | |
| 87 #define CYGNUM_HAL_VECTOR_TRACE 13 | |
| 88 #define CYGNUM_HAL_VECTOR_FP_ASSIST 14 | |
| 89 | |
| 90 #define CYGNUM_HAL_VSR_MIN CYGNUM_HAL_VECTOR_RESERVED_0 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
91 #ifndef CYGNUM_HAL_VSR_MAX |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
92 # define CYGNUM_HAL_VSR_MAX CYGNUM_HAL_VECTOR_FP_ASSIST |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
93 #endif |
| 2 | 94 #define CYGNUM_HAL_VSR_COUNT ( CYGNUM_HAL_VSR_MAX + 1 ) |
| 95 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
96 #ifndef CYG_VECTOR_IS_INTERRUPT |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
97 # define CYG_VECTOR_IS_INTERRUPT(v) \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
98 (CYGNUM_HAL_VECTOR_INTERRUPT == (v) \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
99 || CYGNUM_HAL_VECTOR_DECREMENTER == (v)) |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
100 #endif |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
101 |
| 2 | 102 // The decoded interrupts. |
| 103 // Define decrementer as the first interrupt since it is guaranteed to | |
| 104 // be defined on all PowerPCs. External may expand into several interrupts | |
| 105 // depending on interrupt controller capabilities. | |
| 106 #define CYGNUM_HAL_INTERRUPT_DECREMENTER 0 | |
| 107 #define CYGNUM_HAL_INTERRUPT_EXTERNAL 1 | |
| 108 | |
| 109 #define CYGNUM_HAL_ISR_MIN CYGNUM_HAL_INTERRUPT_DECREMENTER | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
110 #ifndef CYGNUM_HAL_ISR_MAX |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
111 # define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_EXTERNAL |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
112 #endif |
| 2 | 113 #define CYGNUM_HAL_ISR_COUNT ( CYGNUM_HAL_ISR_MAX + 1 ) |
| 114 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
115 #ifndef CYGHWR_HAL_EXCEPTION_VECTORS_DEFINED |
| 2 | 116 // Exception vectors. These are the values used when passed out to an |
| 117 // external exception handler using cyg_hal_deliver_exception() | |
| 0 | 118 |
| 2 | 119 #define CYGNUM_HAL_EXCEPTION_RESERVED_0 CYGNUM_HAL_VECTOR_RESERVED_0 |
| 120 #define CYGNUM_HAL_EXCEPTION_MACHINE_CHECK CYGNUM_HAL_VECTOR_MACHINE_CHECK | |
| 121 #define CYGNUM_HAL_EXCEPTION_DATA_ACCESS CYGNUM_HAL_VECTOR_DSI | |
| 122 #define CYGNUM_HAL_EXCEPTION_CODE_ACCESS CYGNUM_HAL_VECTOR_ISI | |
| 123 #define CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS \ | |
| 124 CYGNUM_HAL_VECTOR_ALIGNMENT | |
| 125 #define CYGNUM_HAL_EXCEPTION_FPU_NOT_AVAIL CYGNUM_HAL_VECTOR_FP_UNAVAILABLE | |
| 126 #define CYGNUM_HAL_EXCEPTION_RESERVED_A CYGNUM_HAL_VECTOR_RESERVED_A | |
| 127 #define CYGNUM_HAL_EXCEPTION_RESERVED_B CYGNUM_HAL_VECTOR_RESERVED_B | |
| 128 #define CYGNUM_HAL_EXCEPTION_SYSTEM_CALL CYGNUM_HAL_VECTOR_SYSTEM_CALL | |
| 129 #define CYGNUM_HAL_EXCEPTION_TRACE CYGNUM_HAL_VECTOR_TRACE | |
| 130 #define CYGNUM_HAL_EXCEPTION_FP_ASSIST CYGNUM_HAL_VECTOR_FP_ASSIST | |
| 131 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
132 #define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_EXCEPTION_RESERVED_0 |
| 473 | 133 #ifndef CYGNUM_HAL_EXCEPTION_MAX |
| 134 #define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_VSR_MAX | |
| 135 #endif | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
136 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
137 #define CYGHWR_HAL_EXCEPTION_VECTORS_DEFINED |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
138 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
139 #endif // CYGHWR_HAL_EXCEPTION_VECTORS_DEFINED |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
140 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
141 // FIXME: This is still rather ugly. Should probably be made variant |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
142 // specific using a decode_hal_exception macro or somesuch. |
| 2 | 143 // decoded exception vectors |
| 144 #define CYGNUM_HAL_EXCEPTION_TRAP (-1) | |
| 145 #define CYGNUM_HAL_EXCEPTION_PRIVILEGED_INSTRUCTION (-2) | |
| 146 #define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION (-3) | |
| 147 #define CYGNUM_HAL_EXCEPTION_FPU (-4) | |
| 148 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
149 #undef CYGNUM_HAL_EXCEPTION_MIN |
| 2 | 150 #define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_EXCEPTION_FPU |
| 151 | |
| 152 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
153 #define CYGNUM_HAL_EXCEPTION_COUNT \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
154 ( CYGNUM_HAL_EXCEPTION_MAX - CYGNUM_HAL_EXCEPTION_MIN + 1 ) |
| 0 | 155 |
| 2 | 156 //-------------------------------------------------------------------------- |
| 0 | 157 // Static data used by HAL |
| 158 | |
| 159 // ISR tables | |
| 2 | 160 externC volatile CYG_ADDRESS hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT]; |
| 161 externC volatile CYG_ADDRWORD hal_interrupt_data[CYGNUM_HAL_ISR_COUNT]; | |
| 162 externC volatile CYG_ADDRESS hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT]; | |
| 163 // VSR table | |
| 164 externC volatile CYG_ADDRESS hal_vsr_table[CYGNUM_HAL_VSR_COUNT]; | |
| 0 | 165 |
| 2 | 166 //-------------------------------------------------------------------------- |
|
14
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
167 // Default ISRs |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
80
diff
changeset
|
168 // The #define is used to test whether this routine exists, and to allow |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
80
diff
changeset
|
169 // us to call it. |
| 0 | 170 |
| 171 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
|
172 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
|
173 CYG_ADDRWORD data); |
| 0 | 174 |
|
101
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
80
diff
changeset
|
175 #define HAL_DEFAULT_ISR hal_default_isr |
|
c37d3a9e1b28
Merge from eCos master repository on 2000-06-16-07:47:03-BST
jlarmour
parents:
80
diff
changeset
|
176 |
| 2 | 177 //-------------------------------------------------------------------------- |
| 0 | 178 // Interrupt state storage |
| 179 | |
| 180 typedef cyg_uint32 CYG_INTERRUPT_STATE; | |
| 181 | |
| 2 | 182 //-------------------------------------------------------------------------- |
| 0 | 183 // Interrupt control macros |
| 184 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
185 #define HAL_DISABLE_INTERRUPTS(_old_) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
186 CYG_MACRO_START \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
187 cyg_uint32 tmp1, tmp2; \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
188 asm volatile ( \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
189 "mfmsr %0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
190 "mr %2,%0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
191 "li %1,0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
192 "rlwimi %2,%1,0,16,16;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
193 "mtmsr %2;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
194 : "=r"(_old_), "=r" (tmp1), "=r" (tmp2)); \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
195 CYG_MACRO_END |
| 0 | 196 |
| 197 #define HAL_ENABLE_INTERRUPTS() \ | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
198 CYG_MACRO_START \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
199 cyg_uint32 tmp1, tmp2; \ |
| 0 | 200 asm volatile ( \ |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
201 "mfmsr %0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
202 "ori %1,%1,0x8000;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
203 "rlwimi %0,%1,0,16,16;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
204 "mtmsr %0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
205 : "=r" (tmp1), "=r" (tmp2)); \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
206 CYG_MACRO_END |
| 0 | 207 |
| 208 #define HAL_RESTORE_INTERRUPTS(_old_) \ | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
209 CYG_MACRO_START \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
210 cyg_uint32 tmp; \ |
| 0 | 211 asm volatile ( \ |
| 212 "mfmsr %0;" \ | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
213 "rlwimi %0,%1,0,16,16;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
214 "mtmsr %0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
215 : "=&r" (tmp) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
216 : "r" (_old_)); \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
217 CYG_MACRO_END |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
218 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
219 #define HAL_QUERY_INTERRUPTS(_old_) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
220 CYG_MACRO_START \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
221 cyg_uint32 tmp; \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
222 asm volatile ( \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
223 "mfmsr %0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
224 "lis %1,0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
225 "ori %1,%1,0x8000;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
226 "and %0,%0,%1;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
227 : "=&r"(_old_), "=r" (tmp)); \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
228 CYG_MACRO_END |
| 0 | 229 |
| 2 | 230 //-------------------------------------------------------------------------- |
| 1441 | 231 // Machine check manipulation |
| 232 #define HAL_DISABLE_MACHINE_CHECK(_old_) \ | |
| 233 CYG_MACRO_START \ | |
| 234 cyg_uint32 tmp1, tmp2; \ | |
| 235 asm volatile ( \ | |
| 236 "mfmsr %0;" \ | |
| 237 "mr %2,%0;" \ | |
| 238 "li %1,0;" \ | |
| 239 "rlwimi %2,%1,0,19,19;" \ | |
| 240 "mtmsr %2;" \ | |
| 241 : "=r"(_old_), "=r" (tmp1), "=r" (tmp2)); \ | |
| 242 CYG_MACRO_END | |
| 243 | |
| 244 #define HAL_ENABLE_MACHINE_CHECK() \ | |
| 245 CYG_MACRO_START \ | |
| 246 cyg_uint32 tmp1, tmp2; \ | |
| 247 asm volatile ( \ | |
| 248 "mfmsr %0;" \ | |
| 249 "lis %1,%1,0x0001;" \ | |
| 250 "rlwimi %0,%1,0,19,19;" \ | |
| 251 "mtmsr %0;" \ | |
| 252 : "=r" (tmp1), "=r" (tmp2)); \ | |
| 253 CYG_MACRO_END | |
| 254 | |
| 255 #define HAL_QUERY_MACHINE_CHECK(_old_) \ | |
| 256 CYG_MACRO_START \ | |
| 257 cyg_uint32 tmp; \ | |
| 258 asm volatile ( \ | |
| 259 "mfmsr %0;" \ | |
| 260 "lis %1,0x0001;" \ | |
| 261 "and %0,%0,%1;" \ | |
| 262 : "=&r"(_old_), "=r" (tmp)); \ | |
| 263 CYG_MACRO_END | |
| 264 | |
| 265 //-------------------------------------------------------------------------- | |
| 0 | 266 // Vector translation. |
| 2 | 267 |
| 268 #ifndef HAL_TRANSLATE_VECTOR | |
| 269 // Basic PowerPC configuration only has two vectors; decrementer and | |
| 270 // external. Isr tables/chaining use same vector decoder. | |
| 271 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) \ | |
| 272 (_index_) = (_vector_) | |
| 273 #endif | |
| 0 | 274 |
| 2 | 275 //-------------------------------------------------------------------------- |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
276 #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
|
277 |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
8
diff
changeset
|
278 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
|
279 #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
|
280 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
|
281 |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
282 // 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
|
283 // 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
|
284 #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
|
285 #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
|
286 // 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
|
287 // 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
|
288 // 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
|
289 // is recommended |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
290 #endif |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
291 |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
292 //-------------------------------------------------------------------------- |
| 2 | 293 // Interrupt and VSR attachment macros |
| 0 | 294 |
|
14
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
295 #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
|
296 CYG_MACRO_START \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
297 cyg_uint32 _index_; \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
298 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
299 \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
300 if((hal_interrupt_handlers[_index_] \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
301 == (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
|
302 || (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
|
303 (_state_) = 0; \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
304 else \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
305 (_state_) = 1; \ |
| 2 | 306 CYG_MACRO_END |
| 0 | 307 |
|
14
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
308 #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
|
309 CYG_MACRO_START \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
310 cyg_uint32 _index_; \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
311 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
312 \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
313 if((hal_interrupt_handlers[_index_] \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
314 == (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
|
315 || (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
|
316 { \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
317 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
|
318 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
|
319 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
|
320 } \ |
| 0 | 321 CYG_MACRO_END |
| 322 | |
|
14
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
323 #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
|
324 CYG_MACRO_START \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
325 cyg_uint32 _index_; \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
326 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
327 \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
328 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
|
329 { \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
330 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
|
331 hal_interrupt_handlers[_index_] = \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
332 (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
|
333 else \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
334 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
|
335 hal_interrupt_data[_index_] = 0; \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
336 hal_interrupt_objects[_index_] = 0; \ |
|
01ce82f3e11a
Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents:
10
diff
changeset
|
337 } \ |
| 0 | 338 CYG_MACRO_END |
| 339 | |
| 340 #define HAL_VSR_GET( _vector_, _pvsr_ ) \ | |
| 341 *(CYG_ADDRESS *)(_pvsr_) = hal_vsr_table[_vector_]; | |
| 342 | |
| 343 | |
| 344 #define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ ) \ | |
| 345 CYG_MACRO_START \ | |
| 346 if( _poldvsr_ != NULL ) \ | |
| 347 *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_]; \ | |
| 348 hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_; \ | |
| 349 CYG_MACRO_END | |
| 350 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
351 // This is an ugly name, but what it means is: grab the VSR back to eCos |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
352 // internal handling, or if you like, the default handler. But if |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
353 // cooperating with GDB and CygMon, the default behaviour is to pass most |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
354 // exceptions to CygMon. This macro undoes that so that eCos handles the |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
355 // exception. So use it with care. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
356 externC void cyg_hal_default_interrupt_vsr( void ); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
357 externC void cyg_hal_default_exception_vsr( void ); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
358 #define HAL_VSR_SET_TO_ECOS_HANDLER( _vector_, _poldvsr_ ) \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
359 CYG_MACRO_START \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
360 if( (void*)_poldvsr_ != (void*)NULL ) \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
361 *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_]; \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
362 hal_vsr_table[_vector_] = ( CYG_VECTOR_IS_INTERRUPT( _vector_ ) \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
363 ? (CYG_ADDRESS)cyg_hal_default_interrupt_vsr \ |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
364 : (CYG_ADDRESS)cyg_hal_default_exception_vsr ); \ |
| 2 | 365 CYG_MACRO_END |
| 366 | |
| 367 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
368 #ifndef CYGHWR_HAL_INTERRUPT_CONTROLLER_ACCESS_DEFINED |
| 0 | 369 |
| 370 #define HAL_INTERRUPT_MASK( _vector_ ) | |
| 371 | |
| 372 #define HAL_INTERRUPT_UNMASK( _vector_ ) | |
| 373 | |
| 374 #define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) | |
| 375 | |
| 376 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) | |
| 377 | |
| 378 #define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) | |
| 379 | |
| 2 | 380 #endif |
| 381 | |
| 382 //-------------------------------------------------------------------------- | |
| 0 | 383 // Clock control |
| 384 | |
|
136
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
385 #ifndef CYGHWR_HAL_CLOCK_DEFINED |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
386 // Note: variant or platform allowed to override these definitions |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
387 |
| 0 | 388 #define HAL_CLOCK_INITIALIZE( _period_ ) \ |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
389 CYG_MACRO_START \ |
| 0 | 390 asm volatile ( \ |
| 391 "mtdec %0;" \ | |
| 392 : \ | |
| 2 | 393 : "r"(_period_) \ |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
394 ); \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
395 CYG_MACRO_END |
| 0 | 396 |
| 397 #define HAL_CLOCK_RESET( _vector_, _period_ ) \ | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
398 CYG_MACRO_START \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
399 cyg_uint32 tmp; \ |
| 0 | 400 asm volatile ( \ |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
401 "mfdec %0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
402 "add. %0,%0,%1;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
403 "bgt 1f;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
404 "mr %0,%1;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
405 "1: mtdec %0;" \ |
|
80
2085233a121a
Merge from eCos master repository on 2000-04-07-07:52:29-BST
jlarmour
parents:
76
diff
changeset
|
406 : "=&r" (tmp) \ |
| 2 | 407 : "r"(_period_) \ |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
408 : "cc" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
409 ); \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
70
diff
changeset
|
410 CYG_MACRO_END |
| 0 | 411 |
| 412 #define HAL_CLOCK_READ( _pvalue_ ) \ | |
| 413 CYG_MACRO_START \ | |
| 414 register cyg_uint32 result; \ | |
| 415 asm volatile( \ | |
| 416 "mfdec %0;" \ | |
| 417 : "=r"(result) \ | |
| 418 ); \ | |
| 419 *(_pvalue_) = CYGNUM_KERNEL_COUNTERS_RTC_PERIOD-result; \ | |
| 420 CYG_MACRO_END | |
| 421 | |
| 2 | 422 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY |
| 423 #define HAL_CLOCK_LATENCY( _pvalue_ ) \ | |
| 424 CYG_MACRO_START \ | |
| 425 register cyg_int32 result; \ | |
| 426 asm volatile( \ | |
| 427 "mfdec %0;" \ | |
| 428 : "=r"(result) \ | |
| 429 ); \ | |
| 430 /* Pending DEC interrupts cannot be discarded. If dec is */ \ | |
| 431 /* positive it''s because a DEC interrupt occured while */ \ | |
| 432 /* eCos was getting ready to run. Just return 0 in that */ \ | |
| 433 /* case. */ \ | |
| 434 if (result > 0) \ | |
| 435 result = 0; \ | |
| 436 *(_pvalue_) = -result; \ | |
| 437 CYG_MACRO_END | |
| 438 #endif | |
| 439 | |
| 473 | 440 #ifndef HAL_DELAY_US |
| 1418 | 441 externC void hal_delay_us(int); |
|
130
eb9fd8c04db3
Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents:
101
diff
changeset
|
442 #define HAL_DELAY_US(n) hal_delay_us(n) |
| 473 | 443 #endif |
|
130
eb9fd8c04db3
Merge from eCos master repository on 2000-10-23-17:01:37-BST
jlarmour
parents:
101
diff
changeset
|
444 |
|
136
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
445 // The vector used by the Real time clock |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
446 #ifndef CYGNUM_HAL_INTERRUPT_RTC |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
447 #define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_DECREMENTER |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
448 #endif // CYGNUM_HAL_INTERRUPT_RTC |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
449 |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
450 #endif // CYGHWR_HAL_CLOCK_DEFINED |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
130
diff
changeset
|
451 |
| 2 | 452 //-------------------------------------------------------------------------- |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
453 // Variant functions |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
454 externC void hal_variant_IRQ_init(void); |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
455 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
68
diff
changeset
|
456 //-------------------------------------------------------------------------- |
| 0 | 457 #endif // ifndef CYGONCE_HAL_INTR_H |
| 458 // End of hal_intr.h |
