]> Git Repo - u-boot.git/blame - arch/x86/cpu/i386/interrupt.c
common: Drop asm/global_data.h from common header
[u-boot.git] / arch / x86 / cpu / i386 / interrupt.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
2262cfee 2/*
dbf7115a
GR
3 * (C) Copyright 2008-2011
4 * Graeme Russ, <[email protected]>
564a9984 5 *
2262cfee 6 * (C) Copyright 2002
fa82f871 7 * Daniel Engström, Omicron Ceti AB, <[email protected]>
2262cfee 8 *
433ff2bd
GR
9 * Portions of this file are derived from the Linux kernel source
10 * Copyright (C) 1991, 1992 Linus Torvalds
2262cfee
WD
11 */
12
13#include <common.h>
12d6929e 14#include <dm.h>
74b76357 15#include <efi_loader.h>
db41d65a 16#include <hang.h>
35a3f871 17#include <init.h>
69c2dc93 18#include <irq.h>
c30b7adb 19#include <irq_func.h>
095593c0 20#include <asm/control_regs.h>
401d1c4f 21#include <asm/global_data.h>
e2126711 22#include <asm/i8259.h>
9933d609 23#include <asm/interrupt.h>
ca56a4ce 24#include <asm/io.h>
e2126711 25#include <asm/lapic.h>
e2126711 26#include <asm/processor-flags.h>
25a5818f 27#include <asm/ptrace.h>
2262cfee 28
7282d834
SG
29DECLARE_GLOBAL_DATA_PTR;
30
564a9984
GR
31#define DECLARE_INTERRUPT(x) \
32 ".globl irq_"#x"\n" \
0fc1b49e
GR
33 ".hidden irq_"#x"\n" \
34 ".type irq_"#x", @function\n" \
564a9984 35 "irq_"#x":\n" \
564a9984 36 "pushl $"#x"\n" \
3c03f492 37 "jmp.d32 irq_common_entry\n"
2262cfee 38
3ccd49ca
BM
39static char *exceptions[] = {
40 "Divide Error",
41 "Debug",
42 "NMI Interrupt",
43 "Breakpoint",
44 "Overflow",
45 "BOUND Range Exceeded",
46 "Invalid Opcode (Undefined Opcode)",
048a92ea 47 "Device Not Available (No Math Coprocessor)",
3ccd49ca
BM
48 "Double Fault",
49 "Coprocessor Segment Overrun",
50 "Invalid TSS",
51 "Segment Not Present",
52 "Stack Segment Fault",
8aba36d8 53 "General Protection",
3ccd49ca
BM
54 "Page Fault",
55 "Reserved",
56 "x87 FPU Floating-Point Error",
57 "Alignment Check",
58 "Machine Check",
59 "SIMD Floating-Point Exception",
60 "Virtualization Exception",
61 "Reserved",
62 "Reserved",
63 "Reserved",
64 "Reserved",
65 "Reserved",
66 "Reserved",
67 "Reserved",
68 "Reserved",
69 "Reserved",
70 "Reserved",
71 "Reserved"
72};
73
74b76357
HS
74/**
75 * show_efi_loaded_images() - show loaded UEFI images
76 *
77 * List all loaded UEFI images.
78 *
79 * @eip: instruction pointer
80 */
81static void show_efi_loaded_images(uintptr_t eip)
82{
83 efi_print_image_infos((void *)eip);
84}
85
e1ffd817 86static void dump_regs(struct irq_regs *regs)
433ff2bd 87{
013cf483 88 unsigned long cs, eip, eflags;
433ff2bd
GR
89 unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
90 unsigned long d0, d1, d2, d3, d6, d7;
ca56a4ce 91 unsigned long sp;
433ff2bd 92
013cf483
BM
93 /*
94 * Some exceptions cause an error code to be saved on the current stack
95 * after the EIP value. We should extract CS/EIP/EFLAGS from different
96 * position on the stack based on the exception number.
97 */
98 switch (regs->irq_id) {
99 case EXC_DF:
100 case EXC_TS:
101 case EXC_NP:
102 case EXC_SS:
103 case EXC_GP:
104 case EXC_PF:
105 case EXC_AC:
106 cs = regs->context.ctx2.xcs;
107 eip = regs->context.ctx2.eip;
108 eflags = regs->context.ctx2.eflags;
109 /* We should fix up the ESP due to error code */
110 regs->esp += 4;
111 break;
112 default:
113 cs = regs->context.ctx1.xcs;
114 eip = regs->context.ctx1.eip;
115 eflags = regs->context.ctx1.eflags;
116 break;
117 }
118
433ff2bd 119 printf("EIP: %04x:[<%08lx>] EFLAGS: %08lx\n",
013cf483 120 (u16)cs, eip, eflags);
7399515d
SG
121 if (gd->flags & GD_FLG_RELOC)
122 printf("Original EIP :[<%08lx>]\n", eip - gd->reloc_off);
433ff2bd
GR
123
124 printf("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
125 regs->eax, regs->ebx, regs->ecx, regs->edx);
126 printf("ESI: %08lx EDI: %08lx EBP: %08lx ESP: %08lx\n",
127 regs->esi, regs->edi, regs->ebp, regs->esp);
128 printf(" DS: %04x ES: %04x FS: %04x GS: %04x SS: %04x\n",
717979fd
GR
129 (u16)regs->xds, (u16)regs->xes, (u16)regs->xfs,
130 (u16)regs->xgs, (u16)regs->xss);
433ff2bd
GR
131
132 cr0 = read_cr0();
133 cr2 = read_cr2();
134 cr3 = read_cr3();
135 cr4 = read_cr4();
136
137 printf("CR0: %08lx CR2: %08lx CR3: %08lx CR4: %08lx\n",
138 cr0, cr2, cr3, cr4);
139
140 d0 = get_debugreg(0);
141 d1 = get_debugreg(1);
142 d2 = get_debugreg(2);
143 d3 = get_debugreg(3);
144
145 printf("DR0: %08lx DR1: %08lx DR2: %08lx DR3: %08lx\n",
146 d0, d1, d2, d3);
147
148 d6 = get_debugreg(6);
149 d7 = get_debugreg(7);
150 printf("DR6: %08lx DR7: %08lx\n",
151 d6, d7);
ca56a4ce
GR
152
153 printf("Stack:\n");
154 sp = regs->esp;
155
156 sp += 64;
157
158 while (sp > (regs->esp - 16)) {
159 if (sp == regs->esp)
160 printf("--->");
161 else
162 printf(" ");
163 printf("0x%8.8lx : 0x%8.8lx\n", sp, (ulong)readl(sp));
164 sp -= 4;
165 }
74b76357 166 show_efi_loaded_images(eip);
433ff2bd
GR
167}
168
3ccd49ca
BM
169static void do_exception(struct irq_regs *regs)
170{
171 printf("%s\n", exceptions[regs->irq_id]);
172 dump_regs(regs);
173 hang();
174}
175
2262cfee
WD
176struct idt_entry {
177 u16 base_low;
178 u16 selector;
179 u8 res;
180 u8 access;
181 u16 base_high;
717979fd 182} __packed;
2262cfee 183
58c7a675 184struct idt_entry idt[256] __aligned(16);
2262cfee 185
a0ed8003 186struct idt_ptr idt_ptr;
2262cfee 187
a0ed8003 188static inline void load_idt(const struct idt_ptr *dtr)
564a9984 189{
717979fd 190 asm volatile("cs lidt %0" : : "m" (*dtr));
564a9984 191}
2262cfee 192
abf0cd3d 193void set_vector(u8 intnum, void *routine)
2262cfee 194{
21b3b66a
SG
195 idt[intnum].base_high = (u16)((ulong)(routine) >> 16);
196 idt[intnum].base_low = (u16)((ulong)(routine) & 0xffff);
2262cfee
WD
197}
198
717979fd
GR
199/*
200 * Ideally these would be defined static to avoid a checkpatch warning, but
201 * the compiler cannot see them in the inline asm and complains that they
202 * aren't defined
203 */
564a9984
GR
204void irq_0(void);
205void irq_1(void);
2262cfee 206
abf0cd3d 207int cpu_init_interrupts(void)
2262cfee
WD
208{
209 int i;
8bde7f77 210
564a9984
GR
211 int irq_entry_size = irq_1 - irq_0;
212 void *irq_entry = (void *)irq_0;
213
2262cfee 214 /* Setup the IDT */
717979fd 215 for (i = 0; i < 256; i++) {
2262cfee 216 idt[i].access = 0x8e;
8bde7f77 217 idt[i].res = 0;
8aba36d8 218 idt[i].selector = X86_GDT_ENTRY_32BIT_CS * X86_GDT_ENTRY_SIZE;
564a9984
GR
219 set_vector(i, irq_entry);
220 irq_entry += irq_entry_size;
8bde7f77
WD
221 }
222
8aba36d8 223 idt_ptr.size = 256 * 8 - 1;
564a9984 224 idt_ptr.address = (unsigned long) idt;
564a9984
GR
225
226 load_idt(&idt_ptr);
8bde7f77 227
2262cfee
WD
228 return 0;
229}
230
a0ed8003
SG
231void interrupt_read_idt(struct idt_ptr *ptr)
232{
233 asm volatile("sidt %0" : : "m" (*ptr));
234}
235
6f41e0e7
SG
236void *x86_get_idt(void)
237{
238 return &idt_ptr;
239}
240
564a9984
GR
241void __do_irq(int irq)
242{
243 printf("Unhandled IRQ : %d\n", irq);
244}
245void do_irq(int irq) __attribute__((weak, alias("__do_irq")));
246
2262cfee
WD
247void enable_interrupts(void)
248{
249 asm("sti\n");
250}
251
252int disable_interrupts(void)
253{
254 long flags;
8bde7f77 255
34722da6 256#if CONFIG_IS_ENABLED(X86_64)
35233da9
SG
257 asm volatile ("pushfq ; popq %0 ; cli\n" : "=g" (flags) : );
258#else
2262cfee 259 asm volatile ("pushfl ; popl %0 ; cli\n" : "=g" (flags) : );
35233da9 260#endif
717979fd 261 return flags & X86_EFLAGS_IF;
2262cfee 262}
564a9984 263
1dae2e0e
BM
264int interrupt_init(void)
265{
12d6929e
SG
266 struct udevice *dev;
267 int ret;
268
526aabec
SG
269 if (!ll_boot_init())
270 return 0;
271
12d6929e 272 /* Try to set up the interrupt router, but don't require one */
69c2dc93 273 ret = irq_first_device_type(X86_IRQT_BASE, &dev);
12d6929e
SG
274 if (ret && ret != -ENODEV)
275 return ret;
276
3dcdd17b
BS
277 /*
278 * When running as an EFI application we are not in control of
279 * interrupts and should leave them alone.
280 */
281#ifndef CONFIG_EFI_APP
1dae2e0e
BM
282 /* Just in case... */
283 disable_interrupts();
284
da3fe247 285#ifdef CONFIG_I8259_PIC
1dae2e0e
BM
286 /* Initialize the master/slave i8259 pic */
287 i8259_init();
288#endif
289
da4cfa6b 290#ifdef CONFIG_APIC
e2126711 291 lapic_setup();
da4cfa6b 292#endif
e2126711 293
1dae2e0e
BM
294 /* Initialize core interrupt and exception functionality of CPU */
295 cpu_init_interrupts();
296
e49cceac
SG
297 /*
298 * It is now safe to enable interrupts.
299 *
300 * TODO([email protected]): But we don't handle these correctly when
301 * booted from EFI.
302 */
526aabec 303 enable_interrupts();
3dcdd17b 304#endif
1dae2e0e
BM
305
306 return 0;
307}
308
564a9984 309/* IRQ Low-Level Service Routine */
7228efa3 310void irq_llsr(struct irq_regs *regs)
564a9984
GR
311{
312 /*
313 * For detailed description of each exception, refer to:
fa82f871 314 * Intel® 64 and IA-32 Architectures Software Developer's Manual
564a9984
GR
315 * Volume 1: Basic Architecture
316 * Order Number: 253665-029US, November 2008
317 * Table 6-1. Exceptions and Interrupts
318 */
3ccd49ca
BM
319 if (regs->irq_id < 32) {
320 /* Architecture defined exception */
321 do_exception(regs);
322 } else {
564a9984 323 /* Hardware or User IRQ */
7228efa3 324 do_irq(regs->irq_id);
564a9984
GR
325 }
326}
327
328/*
329 * OK - This looks really horrible, but it serves a purpose - It helps create
330 * fully relocatable code.
331 * - The call to irq_llsr will be a relative jump
332 * - The IRQ entries will be guaranteed to be in order
433ff2bd
GR
333 * Interrupt entries are now very small (a push and a jump) but they are
334 * now slower (all registers pushed on stack which provides complete
335 * crash dumps in the low level handlers
7228efa3
GR
336 *
337 * Interrupt Entry Point:
338 * - Interrupt has caused eflags, CS and EIP to be pushed
339 * - Interrupt Vector Handler has pushed orig_eax
340 * - pt_regs.esp needs to be adjusted by 40 bytes:
341 * 12 bytes pushed by CPU (EFLAGSF, CS, EIP)
342 * 4 bytes pushed by vector handler (irq_id)
343 * 24 bytes pushed before SP (SS, GS, FS, ES, DS, EAX)
344 * NOTE: Only longs are pushed on/popped off the stack!
564a9984
GR
345 */
346asm(".globl irq_common_entry\n" \
0fc1b49e
GR
347 ".hidden irq_common_entry\n" \
348 ".type irq_common_entry, @function\n" \
564a9984 349 "irq_common_entry:\n" \
433ff2bd 350 "cld\n" \
7228efa3 351 "pushl %ss\n" \
433ff2bd
GR
352 "pushl %gs\n" \
353 "pushl %fs\n" \
354 "pushl %es\n" \
355 "pushl %ds\n" \
356 "pushl %eax\n" \
7228efa3
GR
357 "movl %esp, %eax\n" \
358 "addl $40, %eax\n" \
359 "pushl %eax\n" \
433ff2bd
GR
360 "pushl %ebp\n" \
361 "pushl %edi\n" \
362 "pushl %esi\n" \
363 "pushl %edx\n" \
364 "pushl %ecx\n" \
365 "pushl %ebx\n" \
366 "mov %esp, %eax\n" \
564a9984 367 "call irq_llsr\n" \
433ff2bd
GR
368 "popl %ebx\n" \
369 "popl %ecx\n" \
370 "popl %edx\n" \
371 "popl %esi\n" \
372 "popl %edi\n" \
373 "popl %ebp\n" \
374 "popl %eax\n" \
7228efa3 375 "popl %eax\n" \
433ff2bd
GR
376 "popl %ds\n" \
377 "popl %es\n" \
378 "popl %fs\n" \
379 "popl %gs\n" \
7228efa3 380 "popl %ss\n" \
433ff2bd 381 "add $4, %esp\n" \
564a9984
GR
382 "iret\n" \
383 DECLARE_INTERRUPT(0) \
384 DECLARE_INTERRUPT(1) \
385 DECLARE_INTERRUPT(2) \
386 DECLARE_INTERRUPT(3) \
387 DECLARE_INTERRUPT(4) \
388 DECLARE_INTERRUPT(5) \
389 DECLARE_INTERRUPT(6) \
390 DECLARE_INTERRUPT(7) \
391 DECLARE_INTERRUPT(8) \
392 DECLARE_INTERRUPT(9) \
393 DECLARE_INTERRUPT(10) \
394 DECLARE_INTERRUPT(11) \
395 DECLARE_INTERRUPT(12) \
396 DECLARE_INTERRUPT(13) \
397 DECLARE_INTERRUPT(14) \
398 DECLARE_INTERRUPT(15) \
399 DECLARE_INTERRUPT(16) \
400 DECLARE_INTERRUPT(17) \
401 DECLARE_INTERRUPT(18) \
402 DECLARE_INTERRUPT(19) \
403 DECLARE_INTERRUPT(20) \
404 DECLARE_INTERRUPT(21) \
405 DECLARE_INTERRUPT(22) \
406 DECLARE_INTERRUPT(23) \
407 DECLARE_INTERRUPT(24) \
408 DECLARE_INTERRUPT(25) \
409 DECLARE_INTERRUPT(26) \
410 DECLARE_INTERRUPT(27) \
411 DECLARE_INTERRUPT(28) \
412 DECLARE_INTERRUPT(29) \
413 DECLARE_INTERRUPT(30) \
414 DECLARE_INTERRUPT(31) \
415 DECLARE_INTERRUPT(32) \
416 DECLARE_INTERRUPT(33) \
417 DECLARE_INTERRUPT(34) \
418 DECLARE_INTERRUPT(35) \
419 DECLARE_INTERRUPT(36) \
420 DECLARE_INTERRUPT(37) \
421 DECLARE_INTERRUPT(38) \
422 DECLARE_INTERRUPT(39) \
423 DECLARE_INTERRUPT(40) \
424 DECLARE_INTERRUPT(41) \
425 DECLARE_INTERRUPT(42) \
426 DECLARE_INTERRUPT(43) \
427 DECLARE_INTERRUPT(44) \
428 DECLARE_INTERRUPT(45) \
429 DECLARE_INTERRUPT(46) \
430 DECLARE_INTERRUPT(47) \
431 DECLARE_INTERRUPT(48) \
432 DECLARE_INTERRUPT(49) \
433 DECLARE_INTERRUPT(50) \
434 DECLARE_INTERRUPT(51) \
435 DECLARE_INTERRUPT(52) \
436 DECLARE_INTERRUPT(53) \
437 DECLARE_INTERRUPT(54) \
438 DECLARE_INTERRUPT(55) \
439 DECLARE_INTERRUPT(56) \
440 DECLARE_INTERRUPT(57) \
441 DECLARE_INTERRUPT(58) \
442 DECLARE_INTERRUPT(59) \
443 DECLARE_INTERRUPT(60) \
444 DECLARE_INTERRUPT(61) \
445 DECLARE_INTERRUPT(62) \
446 DECLARE_INTERRUPT(63) \
447 DECLARE_INTERRUPT(64) \
448 DECLARE_INTERRUPT(65) \
449 DECLARE_INTERRUPT(66) \
450 DECLARE_INTERRUPT(67) \
451 DECLARE_INTERRUPT(68) \
452 DECLARE_INTERRUPT(69) \
453 DECLARE_INTERRUPT(70) \
454 DECLARE_INTERRUPT(71) \
455 DECLARE_INTERRUPT(72) \
456 DECLARE_INTERRUPT(73) \
457 DECLARE_INTERRUPT(74) \
458 DECLARE_INTERRUPT(75) \
459 DECLARE_INTERRUPT(76) \
460 DECLARE_INTERRUPT(77) \
461 DECLARE_INTERRUPT(78) \
462 DECLARE_INTERRUPT(79) \
463 DECLARE_INTERRUPT(80) \
464 DECLARE_INTERRUPT(81) \
465 DECLARE_INTERRUPT(82) \
466 DECLARE_INTERRUPT(83) \
467 DECLARE_INTERRUPT(84) \
468 DECLARE_INTERRUPT(85) \
469 DECLARE_INTERRUPT(86) \
470 DECLARE_INTERRUPT(87) \
471 DECLARE_INTERRUPT(88) \
472 DECLARE_INTERRUPT(89) \
473 DECLARE_INTERRUPT(90) \
474 DECLARE_INTERRUPT(91) \
475 DECLARE_INTERRUPT(92) \
476 DECLARE_INTERRUPT(93) \
477 DECLARE_INTERRUPT(94) \
478 DECLARE_INTERRUPT(95) \
479 DECLARE_INTERRUPT(97) \
480 DECLARE_INTERRUPT(96) \
481 DECLARE_INTERRUPT(98) \
482 DECLARE_INTERRUPT(99) \
483 DECLARE_INTERRUPT(100) \
484 DECLARE_INTERRUPT(101) \
485 DECLARE_INTERRUPT(102) \
486 DECLARE_INTERRUPT(103) \
487 DECLARE_INTERRUPT(104) \
488 DECLARE_INTERRUPT(105) \
489 DECLARE_INTERRUPT(106) \
490 DECLARE_INTERRUPT(107) \
491 DECLARE_INTERRUPT(108) \
492 DECLARE_INTERRUPT(109) \
493 DECLARE_INTERRUPT(110) \
494 DECLARE_INTERRUPT(111) \
495 DECLARE_INTERRUPT(112) \
496 DECLARE_INTERRUPT(113) \
497 DECLARE_INTERRUPT(114) \
498 DECLARE_INTERRUPT(115) \
499 DECLARE_INTERRUPT(116) \
500 DECLARE_INTERRUPT(117) \
501 DECLARE_INTERRUPT(118) \
502 DECLARE_INTERRUPT(119) \
503 DECLARE_INTERRUPT(120) \
504 DECLARE_INTERRUPT(121) \
505 DECLARE_INTERRUPT(122) \
506 DECLARE_INTERRUPT(123) \
507 DECLARE_INTERRUPT(124) \
508 DECLARE_INTERRUPT(125) \
509 DECLARE_INTERRUPT(126) \
510 DECLARE_INTERRUPT(127) \
511 DECLARE_INTERRUPT(128) \
512 DECLARE_INTERRUPT(129) \
513 DECLARE_INTERRUPT(130) \
514 DECLARE_INTERRUPT(131) \
515 DECLARE_INTERRUPT(132) \
516 DECLARE_INTERRUPT(133) \
517 DECLARE_INTERRUPT(134) \
518 DECLARE_INTERRUPT(135) \
519 DECLARE_INTERRUPT(136) \
520 DECLARE_INTERRUPT(137) \
521 DECLARE_INTERRUPT(138) \
522 DECLARE_INTERRUPT(139) \
523 DECLARE_INTERRUPT(140) \
524 DECLARE_INTERRUPT(141) \
525 DECLARE_INTERRUPT(142) \
526 DECLARE_INTERRUPT(143) \
527 DECLARE_INTERRUPT(144) \
528 DECLARE_INTERRUPT(145) \
529 DECLARE_INTERRUPT(146) \
530 DECLARE_INTERRUPT(147) \
531 DECLARE_INTERRUPT(148) \
532 DECLARE_INTERRUPT(149) \
533 DECLARE_INTERRUPT(150) \
534 DECLARE_INTERRUPT(151) \
535 DECLARE_INTERRUPT(152) \
536 DECLARE_INTERRUPT(153) \
537 DECLARE_INTERRUPT(154) \
538 DECLARE_INTERRUPT(155) \
539 DECLARE_INTERRUPT(156) \
540 DECLARE_INTERRUPT(157) \
541 DECLARE_INTERRUPT(158) \
542 DECLARE_INTERRUPT(159) \
543 DECLARE_INTERRUPT(160) \
544 DECLARE_INTERRUPT(161) \
545 DECLARE_INTERRUPT(162) \
546 DECLARE_INTERRUPT(163) \
547 DECLARE_INTERRUPT(164) \
548 DECLARE_INTERRUPT(165) \
549 DECLARE_INTERRUPT(166) \
550 DECLARE_INTERRUPT(167) \
551 DECLARE_INTERRUPT(168) \
552 DECLARE_INTERRUPT(169) \
553 DECLARE_INTERRUPT(170) \
554 DECLARE_INTERRUPT(171) \
555 DECLARE_INTERRUPT(172) \
556 DECLARE_INTERRUPT(173) \
557 DECLARE_INTERRUPT(174) \
558 DECLARE_INTERRUPT(175) \
559 DECLARE_INTERRUPT(176) \
560 DECLARE_INTERRUPT(177) \
561 DECLARE_INTERRUPT(178) \
562 DECLARE_INTERRUPT(179) \
563 DECLARE_INTERRUPT(180) \
564 DECLARE_INTERRUPT(181) \
565 DECLARE_INTERRUPT(182) \
566 DECLARE_INTERRUPT(183) \
567 DECLARE_INTERRUPT(184) \
568 DECLARE_INTERRUPT(185) \
569 DECLARE_INTERRUPT(186) \
570 DECLARE_INTERRUPT(187) \
571 DECLARE_INTERRUPT(188) \
572 DECLARE_INTERRUPT(189) \
573 DECLARE_INTERRUPT(190) \
574 DECLARE_INTERRUPT(191) \
575 DECLARE_INTERRUPT(192) \
576 DECLARE_INTERRUPT(193) \
577 DECLARE_INTERRUPT(194) \
578 DECLARE_INTERRUPT(195) \
579 DECLARE_INTERRUPT(196) \
580 DECLARE_INTERRUPT(197) \
581 DECLARE_INTERRUPT(198) \
582 DECLARE_INTERRUPT(199) \
583 DECLARE_INTERRUPT(200) \
584 DECLARE_INTERRUPT(201) \
585 DECLARE_INTERRUPT(202) \
586 DECLARE_INTERRUPT(203) \
587 DECLARE_INTERRUPT(204) \
588 DECLARE_INTERRUPT(205) \
589 DECLARE_INTERRUPT(206) \
590 DECLARE_INTERRUPT(207) \
591 DECLARE_INTERRUPT(208) \
592 DECLARE_INTERRUPT(209) \
593 DECLARE_INTERRUPT(210) \
594 DECLARE_INTERRUPT(211) \
595 DECLARE_INTERRUPT(212) \
596 DECLARE_INTERRUPT(213) \
597 DECLARE_INTERRUPT(214) \
598 DECLARE_INTERRUPT(215) \
599 DECLARE_INTERRUPT(216) \
600 DECLARE_INTERRUPT(217) \
601 DECLARE_INTERRUPT(218) \
602 DECLARE_INTERRUPT(219) \
603 DECLARE_INTERRUPT(220) \
604 DECLARE_INTERRUPT(221) \
605 DECLARE_INTERRUPT(222) \
606 DECLARE_INTERRUPT(223) \
607 DECLARE_INTERRUPT(224) \
608 DECLARE_INTERRUPT(225) \
609 DECLARE_INTERRUPT(226) \
610 DECLARE_INTERRUPT(227) \
611 DECLARE_INTERRUPT(228) \
612 DECLARE_INTERRUPT(229) \
613 DECLARE_INTERRUPT(230) \
614 DECLARE_INTERRUPT(231) \
615 DECLARE_INTERRUPT(232) \
616 DECLARE_INTERRUPT(233) \
617 DECLARE_INTERRUPT(234) \
618 DECLARE_INTERRUPT(235) \
619 DECLARE_INTERRUPT(236) \
620 DECLARE_INTERRUPT(237) \
621 DECLARE_INTERRUPT(238) \
622 DECLARE_INTERRUPT(239) \
623 DECLARE_INTERRUPT(240) \
624 DECLARE_INTERRUPT(241) \
625 DECLARE_INTERRUPT(242) \
626 DECLARE_INTERRUPT(243) \
627 DECLARE_INTERRUPT(244) \
628 DECLARE_INTERRUPT(245) \
629 DECLARE_INTERRUPT(246) \
630 DECLARE_INTERRUPT(247) \
631 DECLARE_INTERRUPT(248) \
632 DECLARE_INTERRUPT(249) \
633 DECLARE_INTERRUPT(250) \
634 DECLARE_INTERRUPT(251) \
635 DECLARE_INTERRUPT(252) \
636 DECLARE_INTERRUPT(253) \
637 DECLARE_INTERRUPT(254) \
638 DECLARE_INTERRUPT(255));
This page took 0.439387 seconds and 4 git commands to generate.