/* * This file is part of the coreboot project. * * It is based on the arch/i386/boot/setup.S file from the Linux kernel. */ /* ! setup.S Copyright (C) 1991, 1992 Linus Torvalds ! ! some changes and additional features by Christoph Niemann, ! March 1993/June 1994 (Christoph.Niemann@linux.org) */ #include /* ! well, that went ok, I hope. Now we have to reprogram the interrupts :-( ! we put them right after the intel-reserved hardware interrupts, at ! int 0x20-0x2F. There they won't mess up anything. Sadly IBM really ! messed this up with the original PC, and they haven't been able to ! rectify it afterwards. Thus the bios puts interrupts at 0x08-0x0f, ! which is used for the internal hardware interrupts as well. We just ! have to reprogram the 8259's, and it isn't fun. */ void setup_i8259(void) { outb(0x11, 0x20); /* Initialization sequence (8259A-1). */ outb(0x11, 0xA0); /* Initialization sequence (8259A-2). */ outb(0x20, 0x21); /* Start of hardware INTs (0x20). */ outb(0x28, 0xA1); /* Start of hardware INTs 2 (0x28). */ outb(0x04, 0x21); /* 8259-1 is master. */ outb(0x02, 0xA1); /* 8259-2 is slave. */ outb(0x01, 0x21); /* 8086 mode for both. */ outb(0x01, 0xA1); outb(0xFF, 0xA1); /* Mask off all interrupts for now. */ outb(0xFB, 0x21); /* Mask all IRQs but IRQ2 which is cascaded. */ }