annotate packages/hal/i386/linux/current/include/plf_intr.h @ 76:435cced73e2f ecos-v1_3_1-release

eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
author jlarmour
date Tue, 28 Mar 2000 14:10:45 +0000
parents da3908c9cd10
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_HAL_PLF_INTR_H
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
2 #define CYGONCE_HAL_PLF_INTR_H
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
3
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
4 //==========================================================================
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
5 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
6 // plf_intr.h
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
7 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
8 // i386/Linux Interrupt and clock support
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
9 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
10 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
11 //==========================================================================
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
12 //####COPYRIGHTBEGIN####
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
13 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
14 // -------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
15 // The contents of this file are subject to the Red Hat eCos Public License
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
16 // Version 1.1 (the "License"); you may not use this file except in
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
17 // compliance with the License. You may obtain a copy of the License at
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
18 // http://www.redhat.com/
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
19 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
20 // Software distributed under the License is distributed on an "AS IS"
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
21 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
22 // License for the specific language governing rights and limitations under
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
23 // the License.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
24 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
25 // The Original Code is eCos - Embedded Configurable Operating System,
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
26 // released September 30, 1998.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
27 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
28 // The Initial Developer of the Original Code is Red Hat.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
29 // Portions created by Red Hat are
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
30 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
31 // All Rights Reserved.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
32 // -------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
33 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
34 //####COPYRIGHTEND####
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
35 //==========================================================================
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
36 //#####DESCRIPTIONBEGIN####
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
37 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
38 // Author(s): proven
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
39 // Contributors: proven, jskov, pjo
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
40 // Date: 1999-10-15
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
41 // Purpose: Define Interrupt support
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
42 // Description: The macros defined here provide the HAL APIs for handling
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
43 // interrupts and the clock.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
44 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
45 // Usage:
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
46 // #include <cyg/hal/plf_intr.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
47 // ...
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
48 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
49 //####DESCRIPTIONEND####
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
50 //
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
51 //==========================================================================
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
52
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
53 #include <pkgconf/hal.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
54 #include <pkgconf/hal_i386.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
55 #include <cyg/infra/cyg_type.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
56
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
57 #include <pkgconf/hal_i386_linux.h>
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
58
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
59 //--------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
60 // Interrupt vectors.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
61
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
62 // Additional vectors on Linux. These match the Linux signals.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
63 #define CYGNUM_HAL_VECTOR_SIGHUP 1
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
64 #define CYGNUM_HAL_VECTOR_SIGINT 2
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
65 #define CYGNUM_HAL_VECTOR_SIGQUIT 3
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
66 #define CYGNUM_HAL_VECTOR_SIGILL 4
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
67 #define CYGNUM_HAL_VECTOR_SIGTRAP 5
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
68 #define CYGNUM_HAL_VECTOR_SIGIOT 6
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
69 #define CYGNUM_HAL_VECTOR_SIGBUS 7
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
70 #define CYGNUM_HAL_VECTOR_SIGFPE 8
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
71 #define CYGNUM_HAL_VECTOR_SIGKILL 9
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
72 #define CYGNUM_HAL_VECTOR_SIGUSR1 10
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
73 #define CYGNUM_HAL_VECTOR_SIGSEGV 11
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
74 #define CYGNUM_HAL_VECTOR_SIGUSR2 12
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
75 #define CYGNUM_HAL_VECTOR_SIGPIPE 13
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
76 #define CYGNUM_HAL_VECTOR_SIGALRM 14
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
77 #define CYGNUM_HAL_VECTOR_SIGTERM 15
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
78 #define CYGNUM_HAL_VECTOR_SIGCHLD 17
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
79 #define CYGNUM_HAL_VECTOR_SIGCONT 18
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
80 #define CYGNUM_HAL_VECTOR_SIGSTOP 19
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
81 #define CYGNUM_HAL_VECTOR_SIGTSTP 20
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
82 #define CYGNUM_HAL_VECTOR_SIGTTIN 21
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
83 #define CYGNUM_HAL_VECTOR_SIGTTOU 22
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
84 #define CYGNUM_HAL_VECTOR_SIGURG 23
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
85 #define CYGNUM_HAL_VECTOR_SIGXCPU 24
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
86 #define CYGNUM_HAL_VECTOR_SIGXFSZ 25
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
87 #define CYGNUM_HAL_VECTOR_SIGVTALRM 26
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
88 #define CYGNUM_HAL_VECTOR_SIGPROF 27
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
89 #define CYGNUM_HAL_VECTOR_SIGWINCH 28
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
90 #define CYGNUM_HAL_VECTOR_SIGIO 29
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
91 #define CYGNUM_HAL_VECTOR_SIGPWR 30
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
92
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
93 #define CYGNUM_HAL_ISR_MIN 0
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
94 #define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_VECTOR_SIGPWR
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
95 #define CYGNUM_HAL_ISR_COUNT ( CYGNUM_HAL_ISR_MAX + 1 )
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
96
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
97 // Generic exception vector names
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
98 #define CYGNUM_HAL_EXCEPTION_INTERRUPT CYGNUM_HAL_VECTOR_SIGINT
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
99 #define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION CYGNUM_HAL_VECTOR_SIGILL
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
100 #define CYGNUM_HAL_EXCEPTION_TRAP CYGNUM_HAL_VECTOR_SIGTRAP
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
101 #define CYGNUM_HAL_EXCEPTION_DATA_ACCESS CYGNUM_HAL_VECTOR_SIGBUS
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
102 #define CYGNUM_HAL_EXCEPTION_FPU CYGNUM_HAL_VECTOR_SIGFPE
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
103 #define CYGNUM_HAL_EXCEPTION_STACK_OVERFLOW CYGNUM_HAL_VECTOR_SIGSEGV
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
104
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
105 #define CYGNUM_HAL_EXCEPTION_MIN 0
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
106 #define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_EXCEPTION_STACK_OVERFLOW
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
107 #define CYGNUM_HAL_EXCEPTION_COUNT ( CYGNUM_HAL_EXCEPTION_MAX + 1 )
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
108
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
109 // The vector used by the Real time clock
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
110 #ifdef CYGSEM_HAL_I386_LINUX_REAL_TIME
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
111 #define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_VECTOR_SIGALRM
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
112 #else
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
113 #define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_VECTOR_SIGVTALRM
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
114 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
115
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
116 //--------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
117 // Static data used by HAL
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
118
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
119 // Interrupt controler emulation variables.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
120 externC volatile int cyg_hal_interrupts_disabled;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
121 externC volatile int cyg_hal_interrupts_deferred;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
122 externC volatile int cyg_hal_interrupts_unhandled[CYGNUM_HAL_ISR_COUNT];
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
123
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
124 //--------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
125 // Interrupt control macros
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
126
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
127 externC void cyg_hal_default_interrupt_vsr(int vector);
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
128 externC void cyg_hal_default_exception_vsr(int vector);
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
129 externC int cyg_hal_sys_sigprocmask(int, const long*, long*);
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
130
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
131 // FIXME: These should use block/unblock of the signals instead of
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
132 // cyg_hal_interrupts_disabled.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
133
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
134 #define HAL_ENABLE_INTERRUPTS() \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
135 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
136 cyg_ucount8 _i_; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
137 cyg_hal_interrupts_disabled = 0; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
138 if (cyg_hal_interrupts_deferred) { \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
139 cyg_hal_interrupts_deferred = 0; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
140 for (_i_ = CYGNUM_HAL_ISR_MIN; _i_ <= CYGNUM_HAL_ISR_MAX; _i_++) { \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
141 if (cyg_hal_interrupts_unhandled[_i_]) { \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
142 cyg_hal_default_interrupt_vsr(_i_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
143 } \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
144 } \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
145 } \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
146 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
147
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
148 #define HAL_DISABLE_INTERRUPTS(_old_) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
149 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
150 (_old_) = cyg_hal_interrupts_disabled++; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
151 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
152
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
153 #define HAL_RESTORE_INTERRUPTS(_old_) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
154 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
155 cyg_ucount8 _i_; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
156 cyg_hal_interrupts_disabled = (_old_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
157 if (0 == cyg_hal_interrupts_disabled) { \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
158 if (cyg_hal_interrupts_deferred) { \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
159 cyg_hal_interrupts_deferred = 0; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
160 for (_i_ = CYGNUM_HAL_ISR_MIN; _i_ <= CYGNUM_HAL_ISR_MAX; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
161 _i_++){ \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
162 if (cyg_hal_interrupts_unhandled[_i_]) { \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
163 cyg_hal_default_interrupt_vsr(_i_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
164 } \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
165 } \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
166 } \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
167 } \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
168 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
169
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
170 #define HAL_QUERY_INTERRUPTS(_old_) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
171 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
172 (_old_) = !cyg_hal_interrupts_disabled; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
173 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
174
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
175 #define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
176 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
177 cyg_hal_interrupts_unhandled[_vector_] = 0; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
178 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
179
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
180 //---------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
181 // Translate a vector number into an ISR table index.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
182
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
183 // The native linux port doesn't support chained interrupts --proven 19981005
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
184 #define HAL_TRANSLATE_VECTOR(_vector_,_index_) (_index_) = (_vector_)
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
185
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
186 //---------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
187 // Interrupt controller access
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
188
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
189 #define LINUX_SIG_BLOCK 0
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
190 #define LINUX_SIG_UNBLOCK 1
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
191
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
192 #define HAL_INTERRUPT_MASK( _vector_ ) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
193 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
194 long _old_, _new_; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
195 _new_ = 1 << (_vector_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
196 cyg_hal_sys_sigprocmask(LINUX_SIG_BLOCK, &_new_, &_old_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
197 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
198
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
199 #define HAL_INTERRUPT_UNMASK( _vector_ ) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
200 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
201 long _old_, _new_; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
202 _new_ = 1 << (_vector_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
203 cyg_hal_sys_sigprocmask(LINUX_SIG_UNBLOCK, &_new_, &_old_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
204 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
205
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
206 // The native linux port doesn't have configurable interrupts.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
207 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ )
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
208
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
209 // The native linux port doesn't have interrupt levels.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
210 #define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ )
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
211
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
212 //---------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
213 // Clock control
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
214
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
215 struct hal_timeval {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
216 long tv_sec;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
217 long tv_usec;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
218 };
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
219 struct hal_itimerval {
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
220 struct hal_timeval it_interval;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
221 struct hal_timeval it_value;
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
222 };
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
223
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
224 externC int cyg_hal_sys_setitimer(int, const struct hal_itimerval*,
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
225 struct hal_itimerval*);
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
226 externC int cyg_hal_sys_getitimer(int, struct hal_itimerval*);
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
227
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
228 #ifdef CYGSEM_HAL_I386_LINUX_REAL_TIME
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
229 #define CYGNUM_HAL_TIMER_TYPE 0 // ITIMER_REAL
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
230 #else
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
231 #define CYGNUM_HAL_TIMER_TYPE 1 // ITIMER_VIRTUAL
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
232 #endif
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
233
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
234 #define HAL_CLOCK_INITIALIZE( _period_ ) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
235 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
236 struct hal_itimerval new_itimerval, old; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
237 \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
238 new_itimerval.it_interval.tv_sec = 0; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
239 new_itimerval.it_interval.tv_usec = (_period_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
240 new_itimerval.it_value.tv_sec = 0; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
241 new_itimerval.it_value.tv_usec = (_period_); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
242 /* Use setitimer to set the realtime clock */ \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
243 cyg_hal_sys_setitimer(CYGNUM_HAL_TIMER_TYPE, &new_itimerval, &old); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
244 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
245
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
246 // The sigalarm runs in one-shot mode. We have to re-enable it
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
247 #define HAL_CLOCK_RESET( _vector_, _period_ ) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
248 HAL_INTERRUPT_UNMASK( _vector_ )
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
249
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
250 // This timer counts down, so subtract from set value.
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
251 #define HAL_CLOCK_READ( _pvalue_ ) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
252 CYG_MACRO_START \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
253 struct hal_itimerval old_itimerval; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
254 cyg_hal_sys_getitimer(CYGNUM_HAL_TIMER_TYPE, &old_itimerval); \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
255 *(_pvalue_) = old_itimerval.it_interval.tv_usec - \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
256 old_itimerval.it_value.tv_usec; \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
257 CYG_MACRO_END
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
258
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
259 #define HAL_CLOCK_LATENCY( _pvalue_ ) \
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
260 HAL_CLOCK_READ((_pvalue_))
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
261
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
262 //---------------------------------------------------------------------------
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
263 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
diff changeset
264 // End of plf_intr.h