|
@@ -0,0 +1,54 @@
|
|
|
+/*
|
|
|
+ * linux/arch/alpha/kernel/sys_cabriolet.c
|
|
|
+ *
|
|
|
+ * Copyright (C) 1995 David A Rusling
|
|
|
+ * Copyright (C) 1996 Jay A Estabrook
|
|
|
+ * Copyright (C) 1998, 1999, 2000 Richard Henderson
|
|
|
+ *
|
|
|
+ * Code supporting the Cabriolet (AlphaPC64), EB66+, and EB164,
|
|
|
+ * PC164 and LX164.
|
|
|
+ */
|
|
|
+
|
|
|
+#include <linux/kernel.h>
|
|
|
+#include <linux/types.h>
|
|
|
+#include <linux/mm.h>
|
|
|
+#include <linux/sched.h>
|
|
|
+#include <linux/pci.h>
|
|
|
+#include <linux/init.h>
|
|
|
+#include <linux/bitops.h>
|
|
|
+
|
|
|
+#include <asm/ptrace.h>
|
|
|
+#include <asm/dma.h>
|
|
|
+#include <asm/irq.h>
|
|
|
+#include <asm/mmu_context.h>
|
|
|
+#include <asm/io.h>
|
|
|
+#include <asm/pgtable.h>
|
|
|
+#include <asm/core_apecs.h>
|
|
|
+#include <asm/core_cia.h>
|
|
|
+#include <asm/core_lca.h>
|
|
|
+#include <asm/tlbflush.h>
|
|
|
+
|
|
|
+#include "proto.h"
|
|
|
+#include "irq_impl.h"
|
|
|
+#include "pci_impl.h"
|
|
|
+#include "machvec_impl.h"
|
|
|
+#include "pc873xx.h"
|
|
|
+
|
|
|
+/* Note mask bit is true for DISABLED irqs. */
|
|
|
+static unsigned long cached_irq_mask = ~0UL;
|
|
|
+
|
|
|
+static inline void
|
|
|
+cabriolet_update_irq_hw(unsigned int irq, unsigned long mask)
|
|
|
+{
|
|
|
+ int ofs = (irq - 16) / 8;
|
|
|
+ outb(mask >> (16 + ofs * 8), 0x804 + ofs);
|
|
|
+}
|
|
|
+
|
|
|
+static inline void
|
|
|
+cabriolet_enable_irq(struct irq_data *d)
|
|
|
+{
|
|
|
+ cabriolet_update_irq_hw(d->irq, cached_irq_mask &= ~(1UL << d->irq));
|
|
|
+}
|
|
|
+
|
|
|
+static void
|
|
|
+cabriolet_disable_irq(struct irq_data *d)
|