summaryrefslogtreecommitdiff
path: root/i386/pc/i16/i16_pic.c
diff options
context:
space:
mode:
authorThomas Bushnell <thomas@gnu.org>1997-02-25 21:28:37 +0000
committerThomas Bushnell <thomas@gnu.org>1997-02-25 21:28:37 +0000
commitf07a4c844da9f0ecae5bbee1ab94be56505f26f7 (patch)
tree12b07c7e578fc1a5f53dbfde2632408491ff2a70 /i386/pc/i16/i16_pic.c
Initial source
Diffstat (limited to 'i386/pc/i16/i16_pic.c')
-rw-r--r--i386/pc/i16/i16_pic.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/i386/pc/i16/i16_pic.c b/i386/pc/i16/i16_pic.c
new file mode 100644
index 0000000..3ff2697
--- /dev/null
+++ b/i386/pc/i16/i16_pic.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1995 The University of Utah and
+ * the Computer Systems Laboratory at the University of Utah (CSL).
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify and distribute this software is hereby
+ * granted provided that (1) source code retains these copyright, permission,
+ * and disclaimer notices, and (2) redistributions including binaries
+ * reproduce the notices in supporting documentation, and (3) all advertising
+ * materials mentioning features or use of this software display the following
+ * acknowledgement: ``This product includes software developed by the
+ * Computer Systems Laboratory at the University of Utah.''
+ *
+ * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
+ * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
+ * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * CSL requests users of this software to return to csl-dist@cs.utah.edu any
+ * improvements that they make and grant CSL redistribution rights.
+ *
+ * Author: Bryan Ford, University of Utah CSL
+ */
+
+#include <mach/machine/pio.h>
+
+#include "pic.h"
+#include "i16.h"
+
+CODE16
+
+/* Program the PICs to use a different set of interrupt vectors.
+ Assumes processor I flag is off. */
+void i16_pic_set_master(int base)
+{
+ unsigned char old_mask;
+
+ /* Save the original interrupt mask. */
+ old_mask = inb(MASTER_OCW); PIC_DELAY();
+
+ /* Initialize the master PIC. */
+ outb(MASTER_ICW, PICM_ICW1); PIC_DELAY();
+ outb(MASTER_OCW, base); PIC_DELAY();
+ outb(MASTER_OCW, PICM_ICW3); PIC_DELAY();
+ outb(MASTER_OCW, PICM_ICW4); PIC_DELAY();
+
+ /* Restore the original interrupt mask. */
+ outb(MASTER_OCW, old_mask); PIC_DELAY();
+}
+
+void i16_pic_set_slave(int base)
+{
+ unsigned char old_mask;
+
+ /* Save the original interrupt mask. */
+ old_mask = inb(SLAVES_OCW); PIC_DELAY();
+
+ /* Initialize the slave PIC. */
+ outb(SLAVES_ICW, PICS_ICW1); PIC_DELAY();
+ outb(SLAVES_OCW, base); PIC_DELAY();
+ outb(SLAVES_OCW, PICS_ICW3); PIC_DELAY();
+ outb(SLAVES_OCW, PICS_ICW4); PIC_DELAY();
+
+ /* Restore the original interrupt mask. */
+ outb(SLAVES_OCW, old_mask); PIC_DELAY();
+}
+