/************************************************************************************** Copyright (c) 2002 The UbixOS Project $Id$ **************************************************************************************/ #include <ubixos/io.h> #include <drivers/8259.h> unsigned int irqMask = 0xFFFF; /* Initializes The PIC */ void init8259() { outportByte(mPic, icw1); /* Initialize Master PIC */ outportByte(sPic, icw1); /* Initialize Seconary PIC */ outportByte(mPic+1, mVec); /* Master Interrup Vector */ outportByte(sPic+1, sVec); /* Secondary Interrupt Vector */ outportByte(mPic+1, 1<<2); /* Bitmask for cascade on IRQ 2 */ outportByte(sPic+1, 2); /* Cascade on IRQ 2 */ outportByte(mPic+1, icw4); /* Finish Primary Initialization */ outportByte(sPic+1, icw4); /* Finish Seconary Initialization */ outportByte(mImr, 0xff); /* Mask All Primary Interrupts */ outportByte(sImr, 0xff); /* Mask All Seconary Interrupts */ } /* Enable IRQ # */ void enableIrq(unsigned short irqNo) { irqMask &= ~(1 << irqNo); if (irqNo >= 8) { irqMask &= ~(1 << 2); } outportByte(mPic+1, irqMask & 0xFF); outportByte(sPic+1, (irqMask >> 8) & 0xFF); } /* Disables IRQ # */ void disableIrq(unsigned short irqNo) { irqMask |= (1 << irqNo); if ((irqMask & 0xFF00)==0xFF00) { irqMask |= (1 << 2); } outportByte(mPic+1, irqMask & 0xFF); outportByte(sPic+1, (irqMask >> 8) & 0xFF); }