Mercurial > ecos
annotate packages/hal/arm/arch/current/include/hal_intr.h @ 3173:afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
are disabled in critical sections, or only IRQs. The default is to
disable both and translate any FIQs into IRQs for delivery. The
alternative is for FIQs to essentially exist outside eCos.
* include/hal_arch.h (CPSR_THREAD_INITIAL):
* include/hal_intr.h (CPSR_INTR_MASK, HAL_*_INTERRUPTS)
(HAL_*_FIQ): Add definitions for separating FIQ from IRQ.
* src/hal_mk_defs.c (main):
* src/vectors.S (start, FIQ, IRQ, spurious_IRQ):
(hal_*_interrupts, hal_*_FIQ, __fiq_stack_base): Add support for
separating FIQ from IRQ in critical section processing.
| author | nickg |
|---|---|
| date | Fri, 11 May 2012 10:24:33 +0000 |
| parents | 74dbf4c3f2e1 |
| children |
| rev | line source |
|---|---|
| 2 | 1 #ifndef CYGONCE_HAL_INTR_H |
| 2 #define CYGONCE_HAL_INTR_H | |
| 3 | |
| 4 //========================================================================== | |
| 5 // | |
| 6 // hal_intr.h | |
| 7 // | |
| 8 // HAL Interrupt and clock support | |
| 9 // | |
| 10 //========================================================================== | |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
11 // ####ECOSGPLCOPYRIGHTBEGIN#### |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
12 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
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:
210
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:
181
diff
changeset
|
15 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
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:
210
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:
210
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:
210
diff
changeset
|
19 // version. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
181
diff
changeset
|
20 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
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:
210
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:
210
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:
210
diff
changeset
|
24 // for more details. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
181
diff
changeset
|
25 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
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:
210
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:
210
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:
181
diff
changeset
|
29 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
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:
210
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:
210
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:
210
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:
210
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:
210
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:
210
diff
changeset
|
36 // General Public License v2. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
181
diff
changeset
|
37 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
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:
210
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:
210
diff
changeset
|
40 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
41 // ####ECOSGPLCOPYRIGHTEND#### |
| 2 | 42 //========================================================================== |
| 43 //#####DESCRIPTIONBEGIN#### | |
| 44 // | |
| 45 // Author(s): nickg, gthomas | |
| 46 // Contributors: nickg, gthomas, | |
| 47 // jlarmour | |
| 48 // Date: 1999-02-20 | |
| 49 // Purpose: Define Interrupt support | |
| 50 // Description: The macros defined here provide the HAL APIs for handling | |
| 51 // interrupts and the clock. | |
| 52 // | |
| 53 // Usage: #include <cyg/hal/hal_intr.h> | |
| 54 // ... | |
| 55 // | |
| 56 // | |
| 57 //####DESCRIPTIONEND#### | |
| 58 // | |
| 59 //========================================================================== | |
| 60 | |
| 61 #include <pkgconf/hal.h> | |
| 62 | |
| 63 #include <cyg/infra/cyg_type.h> | |
|
145
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
64 |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
65 #include <cyg/hal/hal_arch.h> |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
66 |
|
145
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
67 // This is to allow a variant to decide that there is no platform-specific |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
68 // interrupts file; and that in turn can be overridden by a platform that |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
69 // refines the variant's ideas. |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
70 #ifdef CYGBLD_HAL_PLF_INTS_H |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
71 # include CYGBLD_HAL_PLF_INTS_H // should include variant data as required |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
72 #else |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
73 # ifdef CYGBLD_HAL_VAR_INTS_H |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
74 # include CYGBLD_HAL_VAR_INTS_H |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
75 # else |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
76 # include <cyg/hal/hal_platform_ints.h> // default less-complex platforms |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
77 # endif |
|
2e9a636d9de9
Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents:
115
diff
changeset
|
78 #endif |
| 2 | 79 |
|
152
f935b880e96c
Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents:
148
diff
changeset
|
80 // Spurious interrupt (no interrupt source could be found) |
|
f935b880e96c
Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents:
148
diff
changeset
|
81 #define CYGNUM_HAL_INTERRUPT_NONE -1 |
|
f935b880e96c
Merge from eCos master repository on 2001-02-14-01:27:14-GMT
jlarmour
parents:
148
diff
changeset
|
82 |
| 2 | 83 //-------------------------------------------------------------------------- |
| 84 // ARM exception vectors. | |
| 85 | |
| 86 // These vectors correspond to VSRs. These values are the ones to use for | |
| 87 // HAL_VSR_GET/SET | |
| 88 | |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
89 #define CYGNUM_HAL_VECTOR_RESET 0 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
90 #define CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION 1 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
91 #define CYGNUM_HAL_VECTOR_SOFTWARE_INTERRUPT 2 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
92 #define CYGNUM_HAL_VECTOR_ABORT_PREFETCH 3 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
93 #define CYGNUM_HAL_VECTOR_ABORT_DATA 4 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
94 #define CYGNUM_HAL_VECTOR_reserved 5 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
95 #define CYGNUM_HAL_VECTOR_IRQ 6 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
96 #define CYGNUM_HAL_VECTOR_FIQ 7 |
| 2 | 97 |
| 98 #define CYGNUM_HAL_VSR_MIN 0 | |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
99 #define CYGNUM_HAL_VSR_MAX 7 |
|
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
100 #define CYGNUM_HAL_VSR_COUNT 8 |
| 2 | 101 |
| 102 // Exception vectors. These are the values used when passed out to an | |
| 103 // external exception handler using cyg_hal_deliver_exception() | |
| 104 | |
| 105 #define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION \ | |
| 106 CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION | |
| 107 #define CYGNUM_HAL_EXCEPTION_INTERRUPT \ | |
| 108 CYGNUM_HAL_VECTOR_SOFTWARE_INTERRUPT | |
| 109 #define CYGNUM_HAL_EXCEPTION_CODE_ACCESS CYGNUM_HAL_VECTOR_ABORT_PREFETCH | |
| 110 #define CYGNUM_HAL_EXCEPTION_DATA_ACCESS CYGNUM_HAL_VECTOR_ABORT_DATA | |
| 111 | |
| 112 #define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION | |
|
171
42f843b391aa
Merge from eCos master repository on 2001-07-18-03:13:25-BST
jlarmour
parents:
152
diff
changeset
|
113 #define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_EXCEPTION_DATA_ACCESS |
| 2 | 114 #define CYGNUM_HAL_EXCEPTION_COUNT (CYGNUM_HAL_EXCEPTION_MAX - \ |
| 115 CYGNUM_HAL_EXCEPTION_MIN + 1) | |
| 116 | |
| 117 //-------------------------------------------------------------------------- | |
| 118 // Static data used by HAL | |
| 119 | |
| 120 // ISR tables | |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
121 externC CYG_ADDRESS hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT]; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
122 externC CYG_ADDRWORD hal_interrupt_data[CYGNUM_HAL_ISR_COUNT]; |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
123 externC CYG_ADDRESS hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT]; |
| 2 | 124 |
| 125 // VSR table | |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
126 externC CYG_ADDRESS hal_vsr_table[CYGNUM_HAL_VSR_COUNT]; |
|
26
4741a3c3496a
Merge from eCos master repository on 1999-07-23-05:47:06-BST
jlarmour
parents:
8
diff
changeset
|
127 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
128 // Platform setup memory size (0 if unknown by hardware) |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
129 externC CYG_ADDRWORD hal_dram_size; |
|
148
8f2f7615e727
Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents:
145
diff
changeset
|
130 // what, if anything, this means, is platform dependent: |
|
8f2f7615e727
Merge from eCos master repository on 2001-01-12-06:43:03-GMT
jlarmour
parents:
145
diff
changeset
|
131 externC CYG_ADDRWORD hal_dram_type; |
| 2 | 132 |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
103
diff
changeset
|
133 #if CYGINT_HAL_ARM_MEM_REAL_REGION_TOP |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
103
diff
changeset
|
134 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
103
diff
changeset
|
135 externC cyg_uint8 *hal_arm_mem_real_region_top( cyg_uint8 *_regionend_ ); |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
103
diff
changeset
|
136 |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
103
diff
changeset
|
137 # define HAL_MEM_REAL_REGION_TOP( _regionend_ ) \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
103
diff
changeset
|
138 hal_arm_mem_real_region_top( _regionend_ ) |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
103
diff
changeset
|
139 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
103
diff
changeset
|
140 |
| 2 | 141 //-------------------------------------------------------------------------- |
| 142 // Default ISR | |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
143 // The #define is used to test whether this routine exists, and to allow |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
144 // code outside the HAL to call it. |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
145 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
146 externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data); |
| 2 | 147 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
76
diff
changeset
|
148 #define HAL_DEFAULT_ISR hal_default_isr |
| 2 | 149 |
| 150 //-------------------------------------------------------------------------- | |
| 151 // Interrupt state storage | |
| 152 | |
| 153 typedef cyg_uint32 CYG_INTERRUPT_STATE; | |
| 154 | |
| 155 //-------------------------------------------------------------------------- | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
156 // Interrupt disable mask |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
157 // |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
158 // This is used to control which of IRQ and FIQ is enabled/disabled by |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
159 // the HAL interrupt control macros, and other places in the HAL. |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
160 |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
161 #ifdef CYGOPT_HAL_ARM_FIQ_DISABLE |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
162 #define CPSR_INTR_MASK (CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE) |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
163 #else |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
164 #define CPSR_INTR_MASK (CPSR_IRQ_DISABLE) |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
165 #endif |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
166 |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
167 //-------------------------------------------------------------------------- |
| 2 | 168 // Interrupt control macros |
| 169 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
170 #ifndef __thumb__ |
| 2 | 171 #define HAL_DISABLE_INTERRUPTS(_old_) \ |
| 172 asm volatile ( \ | |
| 173 "mrs %0,cpsr;" \ | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
174 "orr r4,%0,%1;" \ |
| 2 | 175 "msr cpsr,r4" \ |
| 176 : "=r"(_old_) \ | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
177 : "i"(CPSR_INTR_MASK) \ |
| 2 | 178 : "r4" \ |
| 179 ); | |
| 180 | |
| 181 #define HAL_ENABLE_INTERRUPTS() \ | |
| 182 asm volatile ( \ | |
| 183 "mrs r3,cpsr;" \ | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
184 "bic r3,r3,%0;" \ |
| 2 | 185 "msr cpsr,r3" \ |
| 186 : \ | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
187 : "i"(CPSR_INTR_MASK) \ |
| 2 | 188 : "r3" \ |
| 189 ); | |
| 190 | |
| 191 #define HAL_RESTORE_INTERRUPTS(_old_) \ | |
| 192 asm volatile ( \ | |
| 193 "mrs r3,cpsr;" \ | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
194 "and r4,%0,%1;" \ |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
195 "bic r3,r3,%1;" \ |
| 2 | 196 "orr r3,r3,r4;" \ |
| 197 "msr cpsr,r3" \ | |
| 198 : \ | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
199 : "r"(_old_),"i"(CPSR_INTR_MASK) \ |
| 2 | 200 : "r3", "r4" \ |
| 201 ); | |
| 202 | |
| 203 #define HAL_QUERY_INTERRUPTS(_old_) \ | |
| 204 asm volatile ( \ | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
205 "mrs %0,cpsr;" \ |
| 2 | 206 : "=r"(_old_) \ |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
207 : "i"(CPSR_INTR_MASK) \ |
| 2 | 208 ); |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
209 #else // __thumb__ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
210 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
211 // Thumb mode does not have access to the PSR registers; |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
212 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
213 #if 0 // These don't seem to always work |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
214 #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:
66
diff
changeset
|
215 asm volatile ( \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
216 "ldr r4,=10f;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
217 "bx r4;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
218 ".code 32;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
219 "10:;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
220 "mrs %0,cpsr;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
221 "mrs r4,cpsr;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
222 "orr r4,r4,#0xC0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
223 "msr cpsr,r4;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
224 "ldr r4,=10f+1;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
225 "bx r4;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
226 ".code 16;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
227 "10:;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
228 : "=r"(_old_) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
229 : \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
230 : "r4" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
231 ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
232 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
233 #define HAL_ENABLE_INTERRUPTS() \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
234 asm volatile ( \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
235 "ldr r3,=10f;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
236 "bx r3;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
237 ".code 32;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
238 "10:;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
239 "mrs r3,cpsr;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
240 "bic r3,r3,#0xC0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
241 "msr cpsr,r3;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
242 "ldr r3,=10f+1;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
243 "bx r3;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
244 ".code 16;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
245 "10:;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
246 : \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
247 : \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
248 : "r3" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
249 ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
250 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
251 #define HAL_RESTORE_INTERRUPTS(_old_) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
252 asm volatile ( \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
253 "ldr r3,=10f;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
254 "bx r3;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
255 ".code 32;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
256 "10:;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
257 "mrs r3,cpsr;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
258 "and r4,%0,#0xC0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
259 "bic r3,r3,#0xC0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
260 "orr r3,r3,r4;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
261 "msr cpsr,r3;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
262 "ldr r3,=10f+1;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
263 "bx r3;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
264 ".code 16;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
265 "10:;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
266 : \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
267 : "r"(_old_) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
268 : "r3", "r4" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
269 ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
270 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
271 #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:
66
diff
changeset
|
272 asm volatile ( \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
273 "ldr r4,=10f;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
274 "bx r4;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
275 ".code 32;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
276 "10:;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
277 "mrs r4,cpsr;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
278 "and r4,r4,#0xC0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
279 "eor %0,r4,#0xC0;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
280 "ldr r4,=10f+1;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
281 "bx r4;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
282 ".code 16;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
283 "10:;" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
284 : "=r"(_old_) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
285 : \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
286 : "r4" \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
287 ); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
288 #else |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
289 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
290 externC cyg_uint32 hal_disable_interrupts(void); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
291 externC void hal_enable_interrupts(void); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
292 externC void hal_restore_interrupts(cyg_uint32); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
293 externC cyg_uint32 hal_query_interrupts(void); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
294 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
295 #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:
66
diff
changeset
|
296 _old_ = hal_disable_interrupts(); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
297 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
298 #define HAL_ENABLE_INTERRUPTS() \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
299 hal_enable_interrupts(); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
300 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
301 #define HAL_RESTORE_INTERRUPTS(_old_) \ |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
302 hal_restore_interrupts(_old_); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
303 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
304 #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:
66
diff
changeset
|
305 _old_ = hal_query_interrupts(); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
306 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
307 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
308 #endif // __thumb__ |
| 2 | 309 |
| 310 //-------------------------------------------------------------------------- | |
|
3173
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
311 // FIQ interrupt control |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
312 // |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
313 // If eCos is not masking FIQs then the user can enable/disable them |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
314 // independently. |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
315 |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
316 #ifndef CYGOPT_HAL_ARM_FIQ_DISABLE |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
317 |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
318 externC cyg_uint32 hal_disable_FIQ(void); |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
319 externC void hal_enable_FIQ(void); |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
320 externC void hal_restore_FIQ(cyg_uint32); |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
321 externC cyg_uint32 hal_query_FIQ(void); |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
322 |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
323 #define HAL_DISABLE_FIQ(_old_) _old_ = hal_disable_FIQ() |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
324 #define HAL_ENABLE_FIQ() hal_enable_FIQ() |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
325 #define HAL_RESTORE_FIQ(_old_) hal_restore_FIQ(_old_) |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
326 #define HAL_QUERY_FIQ(_old_) _old_ = hal_query_FIQ() |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
327 |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
328 #endif |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
329 |
|
afb59e9b7339
* cdl/hal_arm.cdl: Add CDL to control whether both IRQs and FIQs
nickg
parents:
2729
diff
changeset
|
330 //-------------------------------------------------------------------------- |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
331 // Routine to execute DSRs using separate interrupt stack |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
332 |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
333 #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
|
334 externC void hal_interrupt_stack_call_pending_DSRs(void); |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
335 #define HAL_INTERRUPT_STACK_CALL_PENDING_DSRS() \ |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
336 hal_interrupt_stack_call_pending_DSRs() |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
337 |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
338 // 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
|
339 // 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
|
340 #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
|
341 #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
|
342 // 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
|
343 // 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
|
344 // 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
|
345 // is recommended |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
346 #endif |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
347 |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
2
diff
changeset
|
348 //-------------------------------------------------------------------------- |
| 2 | 349 // Vector translation. |
| 350 | |
| 351 #ifndef HAL_TRANSLATE_VECTOR | |
| 352 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) \ | |
| 353 (_index_) = (_vector_) | |
| 354 #endif | |
| 355 | |
| 356 //-------------------------------------------------------------------------- | |
| 357 // Interrupt and VSR attachment macros | |
| 358 | |
| 359 #define HAL_INTERRUPT_IN_USE( _vector_, _state_) \ | |
| 360 CYG_MACRO_START \ | |
| 361 cyg_uint32 _index_; \ | |
| 362 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ | |
| 363 \ | |
| 364 if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr ) \ | |
| 365 (_state_) = 0; \ | |
| 366 else \ | |
| 367 (_state_) = 1; \ | |
| 368 CYG_MACRO_END | |
| 369 | |
| 370 #define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \ | |
| 371 CYG_MACRO_START \ | |
| 372 if( hal_interrupt_handlers[_vector_] == (CYG_ADDRESS)hal_default_isr ) \ | |
| 373 { \ | |
| 374 hal_interrupt_handlers[_vector_] = (CYG_ADDRESS)_isr_; \ | |
| 375 hal_interrupt_data[_vector_] = (CYG_ADDRWORD) _data_; \ | |
| 376 hal_interrupt_objects[_vector_] = (CYG_ADDRESS)_object_; \ | |
| 377 } \ | |
| 378 CYG_MACRO_END | |
| 379 | |
| 380 #define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \ | |
| 381 CYG_MACRO_START \ | |
| 382 if( hal_interrupt_handlers[_vector_] == (CYG_ADDRESS)_isr_ ) \ | |
| 383 { \ | |
| 384 hal_interrupt_handlers[_vector_] = (CYG_ADDRESS)hal_default_isr; \ | |
| 385 hal_interrupt_data[_vector_] = 0; \ | |
| 386 hal_interrupt_objects[_vector_] = 0; \ | |
| 387 } \ | |
| 388 CYG_MACRO_END | |
| 389 | |
| 390 #define HAL_VSR_GET( _vector_, _pvsr_ ) \ | |
| 391 *(CYG_ADDRESS *)(_pvsr_) = hal_vsr_table[_vector_]; | |
| 392 | |
| 393 | |
| 394 #define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ ) \ | |
| 395 CYG_MACRO_START \ | |
| 396 if( _poldvsr_ != NULL ) \ | |
| 397 *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_]; \ | |
| 398 hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_; \ | |
| 399 CYG_MACRO_END | |
| 400 | |
| 401 //-------------------------------------------------------------------------- | |
| 402 // Interrupt controller access | |
| 403 | |
| 404 externC void hal_interrupt_mask(int); | |
| 405 externC void hal_interrupt_unmask(int); | |
| 406 externC void hal_interrupt_acknowledge(int); | |
| 407 externC void hal_interrupt_configure(int, int, int); | |
| 408 externC void hal_interrupt_set_level(int, int); | |
| 409 | |
| 410 #define HAL_INTERRUPT_MASK( _vector_ ) \ | |
| 411 hal_interrupt_mask( _vector_ ) | |
| 412 #define HAL_INTERRUPT_UNMASK( _vector_ ) \ | |
| 413 hal_interrupt_unmask( _vector_ ) | |
| 414 #define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \ | |
| 415 hal_interrupt_acknowledge( _vector_ ) | |
| 416 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) \ | |
| 417 hal_interrupt_configure( _vector_, _level_, _up_ ) | |
| 418 #define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) \ | |
| 419 hal_interrupt_set_level( _vector_, _level_ ) | |
| 420 | |
| 421 //-------------------------------------------------------------------------- | |
| 422 // Clock control | |
| 423 | |
| 424 externC void hal_clock_initialize(cyg_uint32); | |
| 425 externC void hal_clock_read(cyg_uint32 *); | |
| 426 externC void hal_clock_reset(cyg_uint32, cyg_uint32); | |
| 427 | |
| 428 #define HAL_CLOCK_INITIALIZE( _period_ ) hal_clock_initialize( _period_ ) | |
| 429 #define HAL_CLOCK_RESET( _vec_, _period_ ) hal_clock_reset( _vec_, _period_ ) | |
| 430 #define HAL_CLOCK_READ( _pvalue_ ) hal_clock_read( _pvalue_ ) | |
| 431 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY | |
|
181
d61da071934c
Merge from eCos master repository on 2001-08-22-06:38:55-BST
jlarmour
parents:
171
diff
changeset
|
432 # ifndef HAL_CLOCK_LATENCY |
|
d61da071934c
Merge from eCos master repository on 2001-08-22-06:38:55-BST
jlarmour
parents:
171
diff
changeset
|
433 # define HAL_CLOCK_LATENCY( _pvalue_ ) HAL_CLOCK_READ( (cyg_uint32 *)_pvalue_ ) |
|
d61da071934c
Merge from eCos master repository on 2001-08-22-06:38:55-BST
jlarmour
parents:
171
diff
changeset
|
434 # endif |
| 2 | 435 #endif |
| 436 | |
| 437 //-------------------------------------------------------------------------- | |
| 438 #endif // ifndef CYGONCE_HAL_INTR_H | |
| 439 // End of hal_intr.h |
