X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fpic.h;h=c75af3e665d08efffc93db87f4ad5099689cdf14;hb=refs%2Fheads%2Fcoreboot;hp=8775191abf44f9eafa7cf04d36eb49b20c22ff34;hpb=c541e1bebde711975477f2314106d7b0799fccd7;p=seabios.git diff --git a/src/pic.h b/src/pic.h index 8775191..c75af3e 100644 --- a/src/pic.h +++ b/src/pic.h @@ -3,12 +3,12 @@ // Copyright (C) 2008 Kevin O'Connor // Copyright (C) 2002 MandrakeSoft S.A. // -// This file may be distributed under the terms of the GNU GPLv3 license. +// This file may be distributed under the terms of the GNU LGPLv3 license. #ifndef __PIC_H #define __PIC_H #include "ioport.h" // PORT_PIC* -#include "util.h" // dprintf +#include "biosvar.h" // SET_IVT // PORT_PIC1 bitdefs #define PIC1_IRQ0 (1<<0) @@ -23,14 +23,14 @@ #define PIC2_IRQ14 (1<<6) static inline void -eoi_pic1() +eoi_pic1(void) { // Send eoi (select OCW2 + eoi) outb(0x20, PORT_PIC1_CMD); } static inline void -eoi_pic2() +eoi_pic2(void) { // Send eoi (select OCW2 + eoi) outb(0x20, PORT_PIC2_CMD); @@ -62,7 +62,7 @@ mask_pic2(u8 irq) } static inline u8 -get_pic1_isr() +get_pic1_isr(void) { // 0x0b == select OCW1 + read ISR outb(0x0b, PORT_PIC1_CMD); @@ -70,13 +70,28 @@ get_pic1_isr() } static inline u8 -get_pic2_isr() +get_pic2_isr(void) { // 0x0b == select OCW1 + read ISR outb(0x0b, PORT_PIC2_CMD); return inb(PORT_PIC2_CMD); } -void pic_setup(); +static inline void +enable_hwirq(int hwirq, struct segoff_s func) +{ + int vector; + if (hwirq < 8) { + unmask_pic1(1 << hwirq); + vector = 0x08 + hwirq; + } else { + unmask_pic2(1 << (hwirq - 8)); + vector = 0x70 + hwirq - 8; + } + SET_IVT(vector, func); +} + +void set_pics(u8 irq0, u8 irq8); +void pic_setup(void); #endif // pic.h