+void set_pic_mask(int pic, unsigned char mask)
+{
+ outb(mask, pic > 0 ? PIC2_DATA : PIC1_DATA);
+}
+
+unsigned char get_pic_mask(int pic)
+{
+ return inb(pic > 0 ? PIC2_DATA : PIC1_DATA);
+}
+
+void mask_irq(int irq)
+{
+ int port;
+ unsigned char mask;
+
+ if(irq < 8) {
+ port = PIC1_DATA;
+ } else {
+ port = PIC2_DATA;
+ irq -= 8;
+ }
+
+ mask = inb(port) | (1 << irq);
+ outb(mask, port);
+}
+
+void unmask_irq(int irq)
+{
+ int port;
+ unsigned char mask;
+
+ if(irq < 8) {
+ port = PIC1_DATA;
+ } else {
+ port = PIC2_DATA;
+ irq -= 8;
+ }
+
+ mask = inb(port) & ~(1 << irq);
+ outb(mask, port);
+}
+
+