Mercurial > ecos
annotate packages/hal/arm/arch/current/include/hal_intr.h @ 3292:7f8e529b4d82 default tip
Fix FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF() so it works with negative offsets.
| author | vae |
|---|---|
| date | Wed, 29 Apr 2015 23:31:48 +0000 |
| parents | afb59e9b7339 |
| 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 |
