Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


imported SEABIOS source tree
[palacios.git] / bios / seabios / src / pic.c
1 // Helpers for working with i8259 interrupt controller.
2 //
3 // Copyright (C) 2008  Kevin O'Connor <kevin@koconnor.net>
4 // Copyright (C) 2002  MandrakeSoft S.A.
5 //
6 // This file may be distributed under the terms of the GNU LGPLv3 license.
7
8 #include "pic.h" // get_pic1_isr
9 #include "util.h" // dprintf
10 #include "config.h" // CONFIG_*
11
12 void
13 set_pics(u8 irq0, u8 irq8)
14 {
15     // Send ICW1 (select OCW1 + will send ICW4)
16     outb(0x11, PORT_PIC1_CMD);
17     outb(0x11, PORT_PIC2_CMD);
18     // Send ICW2 (base irqs: 0x08-0x0f for irq0-7, 0x70-0x77 for irq8-15)
19     outb(irq0, PORT_PIC1_DATA);
20     outb(irq8, PORT_PIC2_DATA);
21     // Send ICW3 (cascaded pic ids)
22     outb(0x04, PORT_PIC1_DATA);
23     outb(0x02, PORT_PIC2_DATA);
24     // Send ICW4 (enable 8086 mode)
25     outb(0x01, PORT_PIC1_DATA);
26     outb(0x01, PORT_PIC2_DATA);
27     // Mask all irqs (except cascaded PIC2 irq)
28     outb(~PIC1_IRQ2, PORT_PIC1_DATA);
29     outb(~0, PORT_PIC2_DATA);
30 }
31
32 void
33 pic_setup(void)
34 {
35     dprintf(3, "init pic\n");
36     set_pics(0x08, 0x70);
37 }
38
39 // Handler for otherwise unused hardware irqs.
40 void VISIBLE16
41 handle_hwpic1(struct bregs *regs)
42 {
43     dprintf(DEBUG_ISR_hwpic1, "handle_hwpic1 irq=%x\n", get_pic1_isr());
44     eoi_pic1();
45 }
46
47 void VISIBLE16
48 handle_hwpic2(struct bregs *regs)
49 {
50     dprintf(DEBUG_ISR_hwpic2, "handle_hwpic2 irq=%x\n", get_pic2_isr());
51     eoi_pic2();
52 }