Rev 513 | Rev 515 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 513 | Rev 514 | ||
---|---|---|---|
Line 69... | Line 69... | ||
69 | 69 | ||
70 | /** Interrupt Input Pin Polarities. */ |
70 | /** Interrupt Input Pin Polarities. */ |
71 | #define POLARITY_HIGH 0x0 |
71 | #define POLARITY_HIGH 0x0 |
72 | #define POLARITY_LOW 0x1 |
72 | #define POLARITY_LOW 0x1 |
73 | 73 | ||
- | 74 | /** Divide Values. (Bit 2 is always 0) */ |
|
- | 75 | #define DIVIDE_2 0x0 |
|
- | 76 | #define DIVIDE_4 0x1 |
|
- | 77 | #define DIVIDE_8 0x2 |
|
- | 78 | #define DIVIDE_16 0x3 |
|
- | 79 | #define DIVIDE_32 0x8 |
|
- | 80 | #define DIVIDE_64 0x9 |
|
- | 81 | #define DIVIDE_128 0xa |
|
- | 82 | #define DIVIDE_1 0xb |
|
- | 83 | ||
- | 84 | /** Timer Modes. */ |
|
- | 85 | #define TIMER_ONESHOT 0x0 |
|
- | 86 | #define TIMER_PERIODIC 0x1 |
|
- | 87 | ||
74 | #define SEND_PENDING (1<<12) |
88 | #define SEND_PENDING (1<<12) |
75 | 89 | ||
76 | /** Interrupt Command Register. */ |
90 | /** Interrupt Command Register. */ |
77 | #define ICRlo (0x300/sizeof(__u32)) |
91 | #define ICRlo (0x300/sizeof(__u32)) |
78 | #define ICRhi (0x310/sizeof(__u32)) |
92 | #define ICRhi (0x310/sizeof(__u32)) |
Line 103... | Line 117... | ||
103 | typedef struct icr icr_t; |
117 | typedef struct icr icr_t; |
104 | 118 | ||
105 | /* End Of Interrupt */ |
119 | /* End Of Interrupt */ |
106 | #define EOI (0x0b0/sizeof(__u32)) |
120 | #define EOI (0x0b0/sizeof(__u32)) |
107 | 121 | ||
108 | /* Error Status Register */ |
122 | /** Error Status Register. */ |
109 | #define ESR (0x280/sizeof(__u32)) |
123 | #define ESR (0x280/sizeof(__u32)) |
- | 124 | union esr { |
|
- | 125 | __u32 value; |
|
- | 126 | __u8 err_bitmap; |
|
- | 127 | struct { |
|
- | 128 | unsigned send_checksum_error : 1; |
|
- | 129 | unsigned receive_checksum_error : 1; |
|
- | 130 | unsigned send_accept_error : 1; |
|
- | 131 | unsigned receive_accept_error : 1; |
|
- | 132 | unsigned : 1; |
|
- | 133 | unsigned send_illegal_vector : 1; |
|
- | 134 | unsigned received_illegal_vector : 1; |
|
110 | #define ESRClear ((0xffffff<<8)|(1<<4)) |
135 | unsigned illegal_register_address : 1; |
- | 136 | unsigned : 24; |
|
- | 137 | } __attribute__ ((packed)); |
|
- | 138 | }; |
|
- | 139 | typedef union esr esr_t; |
|
111 | 140 | ||
112 | /* Task Priority Register */ |
141 | /* Task Priority Register */ |
113 | #define TPR (0x080/sizeof(__u32)) |
142 | #define TPR (0x080/sizeof(__u32)) |
114 | #define TPRClear 0xffffff00 |
143 | #define TPRClear 0xffffff00 |
115 | 144 | ||
Line 124... | Line 153... | ||
124 | unsigned : 22; /**< Reserved. */ |
153 | unsigned : 22; /**< Reserved. */ |
125 | } __attribute__ ((packed)); |
154 | } __attribute__ ((packed)); |
126 | }; |
155 | }; |
127 | typedef union svr svr_t; |
156 | typedef union svr svr_t; |
128 | 157 | ||
129 | /* Time Divide Configuration Register */ |
158 | /** Time Divide Configuration Register. */ |
130 | #define TDCR (0x3e0/sizeof(__u32)) |
159 | #define TDCR (0x3e0/sizeof(__u32)) |
- | 160 | union tdcr { |
|
- | 161 | __u32 value; |
|
- | 162 | struct { |
|
- | 163 | unsigned div_value : 4; /**< Divide Value, bit 2 is always 0. */ |
|
- | 164 | unsigned : 28; /**< Reserved. */ |
|
- | 165 | } __attribute__ ((packed)); |
|
- | 166 | }; |
|
131 | #define TDCRClear (~0xb) |
167 | typedef union tdcr tdcr_t; |
132 | 168 | ||
133 | /* Initial Count Register for Timer */ |
169 | /* Initial Count Register for Timer */ |
134 | #define ICRT (0x380/sizeof(__u32)) |
170 | #define ICRT (0x380/sizeof(__u32)) |
135 | 171 | ||
136 | /* Current Count Register for Timer */ |
172 | /* Current Count Register for Timer */ |
137 | #define CCRT (0x390/sizeof(__u32)) |
173 | #define CCRT (0x390/sizeof(__u32)) |
138 | 174 | ||
139 | /** Timer Modes. */ |
- | |
140 | #define TIMER_ONESHOT 0x0 |
- | |
141 | #define TIMER_PERIODIC 0x1 |
- | |
142 | - | ||
143 | /** LVT Timer register. */ |
175 | /** LVT Timer register. */ |
144 | #define LVT_Tm (0x320/sizeof(__u32)) |
176 | #define LVT_Tm (0x320/sizeof(__u32)) |
145 | union lvt_tm { |
177 | union lvt_tm { |
146 | __u32 value; |
178 | __u32 value; |
147 | struct { |
179 | struct { |
Line 188... | Line 220... | ||
188 | unsigned : 15; /**< Reserved. */ |
220 | unsigned : 15; /**< Reserved. */ |
189 | } __attribute__ ((packed)); |
221 | } __attribute__ ((packed)); |
190 | }; |
222 | }; |
191 | typedef union lvt_error lvt_error_t; |
223 | typedef union lvt_error lvt_error_t; |
192 | 224 | ||
193 | - | ||
194 | #define LVT_PCINT (0x340/sizeof(__u32)) |
- | |
195 | - | ||
196 | /* Local APIC ID Register */ |
225 | /** Local APIC ID Register. */ |
197 | #define L_APIC_ID (0x020/sizeof(__u32)) |
226 | #define L_APIC_ID (0x020/sizeof(__u32)) |
- | 227 | union lapic_id { |
|
- | 228 | __u32 value; |
|
- | 229 | struct { |
|
198 | #define L_APIC_IDClear (~(0xf<<24)) |
230 | unsigned : 24; /**< Reserved. */ |
- | 231 | __u8 apic_id; /**< Local APIC ID. */ |
|
199 | #define L_APIC_IDShift 24 |
232 | } __attribute__ ((packed)); |
- | 233 | }; |
|
200 | #define L_APIC_IDMask 0xf |
234 | typedef union lapic_id lapic_id_t; |
201 | 235 | ||
202 | /* Local APIC Version Register */ |
236 | /* Local APIC Version Register */ |
203 | #define LAVR (0x030/sizeof(__u32)) |
237 | #define LAVR (0x030/sizeof(__u32)) |
204 | #define LAVR_Mask 0xff |
238 | #define LAVR_Mask 0xff |
205 | #define is_local_apic(x) (((x)&LAVR_Mask&0xf0)==0x1) |
239 | #define is_local_apic(x) (((x)&LAVR_Mask&0xf0)==0x1) |
Line 213... | Line 247... | ||
213 | #define IOAPICID 0x00 |
247 | #define IOAPICID 0x00 |
214 | #define IOAPICVER 0x01 |
248 | #define IOAPICVER 0x01 |
215 | #define IOAPICARB 0x02 |
249 | #define IOAPICARB 0x02 |
216 | #define IOREDTBL 0x10 |
250 | #define IOREDTBL 0x10 |
217 | 251 | ||
- | 252 | /** I/O Register Select Register. */ |
|
- | 253 | union io_regsel { |
|
- | 254 | __u32 value; |
|
- | 255 | struct { |
|
- | 256 | __u8 reg_addr; /**< APIC Register Address. */ |
|
- | 257 | unsigned : 24; /**< Reserved. */ |
|
- | 258 | } __attribute__ ((packed)); |
|
- | 259 | }; |
|
- | 260 | typedef union io_regsel io_regsel_t; |
|
- | 261 | ||
218 | /** I/O Redirection Register. */ |
262 | /** I/O Redirection Register. */ |
219 | struct io_redirection_reg { |
263 | struct io_redirection_reg { |
220 | union { |
264 | union { |
221 | __u32 lo; |
265 | __u32 lo; |
222 | struct { |
266 | struct { |
Line 259... | Line 303... | ||
259 | extern void l_apic_timer_interrupt(__u8 n, __native stack[]); |
303 | extern void l_apic_timer_interrupt(__u8 n, __native stack[]); |
260 | extern __u8 l_apic_id(void); |
304 | extern __u8 l_apic_id(void); |
261 | 305 | ||
262 | extern __u32 io_apic_read(__u8 address); |
306 | extern __u32 io_apic_read(__u8 address); |
263 | extern void io_apic_write(__u8 address , __u32 x); |
307 | extern void io_apic_write(__u8 address , __u32 x); |
264 | extern void io_apic_change_ioredtbl(int signal, int dest, __u8 v, int flags); |
308 | extern void io_apic_change_ioredtbl(int pin, int dest, __u8 v, int flags); |
265 | extern void io_apic_disable_irqs(__u16 irqmask); |
309 | extern void io_apic_disable_irqs(__u16 irqmask); |
266 | extern void io_apic_enable_irqs(__u16 irqmask); |
310 | extern void io_apic_enable_irqs(__u16 irqmask); |
267 | 311 | ||
268 | #endif |
312 | #endif |