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 |