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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_HAL_INTR_H
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 #define CYGONCE_HAL_INTR_H
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 // hal_intr.h
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 // HAL Interrupt and clock support
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
9 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 // Author(s): nickg, gthomas
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 // Contributors: nickg, gthomas,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 // jlarmour
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 // Date: 1999-02-20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 // Purpose: Define Interrupt support
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 // Description: The macros defined here provide the HAL APIs for handling
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 // interrupts and the clock.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 // Usage: #include <cyg/hal/hal_intr.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54 // ...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 #include <pkgconf/hal.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 // ARM exception vectors.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 // These vectors correspond to VSRs. These values are the ones to use for
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 // HAL_VSR_GET/SET
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 // Exception vectors. These are the values used when passed out to an
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 // external exception handler using cyg_hal_deliver_exception()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 #define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 #define CYGNUM_HAL_EXCEPTION_INTERRUPT \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 CYGNUM_HAL_VECTOR_SOFTWARE_INTERRUPT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 #define CYGNUM_HAL_EXCEPTION_CODE_ACCESS CYGNUM_HAL_VECTOR_ABORT_PREFETCH
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 #define CYGNUM_HAL_EXCEPTION_DATA_ACCESS CYGNUM_HAL_VECTOR_ABORT_DATA
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 #define CYGNUM_HAL_EXCEPTION_COUNT (CYGNUM_HAL_EXCEPTION_MAX - \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115 CYGNUM_HAL_EXCEPTION_MIN + 1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 // Static data used by HAL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 // Interrupt state storage
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 typedef cyg_uint32 CYG_INTERRUPT_STATE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 // Interrupt control macros
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 #define HAL_DISABLE_INTERRUPTS(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 asm volatile ( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 "msr cpsr,r4" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 : "r4" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 #define HAL_ENABLE_INTERRUPTS() \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 asm volatile ( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 "msr cpsr,r3" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 : "r3" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 #define HAL_RESTORE_INTERRUPTS(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 asm volatile ( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 "orr r3,r3,r4;" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 "msr cpsr,r3" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 : "r3", "r4" \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 #define HAL_QUERY_INTERRUPTS(_old_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
349 // Vector translation.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
350
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 #ifndef HAL_TRANSLATE_VECTOR
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353 (_index_) = (_vector_)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357 // Interrupt and VSR attachment macros
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359 #define HAL_INTERRUPT_IN_USE( _vector_, _state_) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 cyg_uint32 _index_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 HAL_TRANSLATE_VECTOR ((_vector_), _index_); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 (_state_) = 0; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366 else \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367 (_state_) = 1; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 #define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 if( hal_interrupt_handlers[_vector_] == (CYG_ADDRESS)hal_default_isr ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373 { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374 hal_interrupt_handlers[_vector_] = (CYG_ADDRESS)_isr_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
375 hal_interrupt_data[_vector_] = (CYG_ADDRWORD) _data_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
376 hal_interrupt_objects[_vector_] = (CYG_ADDRESS)_object_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377 } \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380 #define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
381 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
382 if( hal_interrupt_handlers[_vector_] == (CYG_ADDRESS)_isr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
383 { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
384 hal_interrupt_handlers[_vector_] = (CYG_ADDRESS)hal_default_isr; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
385 hal_interrupt_data[_vector_] = 0; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
386 hal_interrupt_objects[_vector_] = 0; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
387 } \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
388 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
390 #define HAL_VSR_GET( _vector_, _pvsr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391 *(CYG_ADDRESS *)(_pvsr_) = hal_vsr_table[_vector_];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 #define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 if( _poldvsr_ != NULL ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397 *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_]; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398 hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399 CYG_MACRO_END
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
401 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 // Interrupt controller access
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 externC void hal_interrupt_mask(int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 externC void hal_interrupt_unmask(int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 externC void hal_interrupt_acknowledge(int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 externC void hal_interrupt_configure(int, int, int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408 externC void hal_interrupt_set_level(int, int);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410 #define HAL_INTERRUPT_MASK( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 hal_interrupt_mask( _vector_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 #define HAL_INTERRUPT_UNMASK( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413 hal_interrupt_unmask( _vector_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 #define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415 hal_interrupt_acknowledge( _vector_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
416 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
417 hal_interrupt_configure( _vector_, _level_, _up_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418 #define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419 hal_interrupt_set_level( _vector_, _level_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 // Clock control
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
423
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
424 externC void hal_clock_initialize(cyg_uint32);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
425 externC void hal_clock_read(cyg_uint32 *);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
426 externC void hal_clock_reset(cyg_uint32, cyg_uint32);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
428 #define HAL_CLOCK_INITIALIZE( _period_ ) hal_clock_initialize( _period_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429 #define HAL_CLOCK_RESET( _vec_, _period_ ) hal_clock_reset( _vec_, _period_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430 #define HAL_CLOCK_READ( _pvalue_ ) hal_clock_read( _pvalue_ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
436
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438 #endif // ifndef CYGONCE_HAL_INTR_H
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 // End of hal_intr.h