patch-2.4.23 linux-2.4.23/include/asm-i386/hc_sl811-hw.h

Next file: linux-2.4.23/include/asm-i386/io_apic.h
Previous file: linux-2.4.23/include/asm-i386/hardirq.h
Back to the patch index
Back to the overall index

diff -urN linux-2.4.22/include/asm-i386/hc_sl811-hw.h linux-2.4.23/include/asm-i386/hc_sl811-hw.h
@@ -0,0 +1,139 @@
+/*
+File: include/asm-i386/hc_sl811-hw.h
+
+18.11.2002 hne@ist1.de
+Use Kernel 2.4.19 and Prepatch 2.4.20
+Splitt hardware depenc into file hc_sl811-x86.c and hc_sl811-arm.c.
+
+20.11.2002 HNE
+READ/WRITE_(INDEX_)DATA using for fast hardware access.
+
+02.09.2003 HNE
+IO Region size only 2 (old 16)
+
+18.09.2003 HNE
+Handle multi instances. For two controller on one board.
+Portcheck in low level source (DEBUG) only.
+
+03.10.2003 HNE
+Low level only for port io into hardware-include.
+
+*/
+
+#ifdef MODULE
+
+#define MAX_CONTROLERS	2	/* Max number of SL811 controllers per module */
+static int io_base	= 0x220;
+static int irq	= 12;
+
+MODULE_PARM(io_base,"i");
+MODULE_PARM_DESC(io_base,"sl811 base address 0x220");
+MODULE_PARM(irq,"i");
+MODULE_PARM_DESC(irq,"IRQ 12 (default)");
+
+#endif // MODULE
+
+/* Define general IO Macros for our platform (hne) */
+#define SIZEOF_IO_REGION	2	/* Size for request/release region */
+
+// #define sl811_write_index(hp,i) outb ((i), hp->hcport)
+// #define sl811_write_data(hp,d) outb ((d), hp->hcport+1)
+// #define sl811_write_index_data(hp,i,d) outw ((i)|(((__u16)(d)) << 8), hp->hcport)
+// #define sl811_read_data(hp) ((__u8) inb (hp->hcport+1))
+
+/*
+ * Low level: Read from Data port [x86]
+ */
+static __u8 inline sl811_read_data (hcipriv_t *hp)
+{
+	return ((__u8) inb (hp->hcport+1));
+}
+
+/*
+ * Low level: Write to index register [x86]
+ */
+static void inline sl811_write_index (hcipriv_t *hp, __u8 index)
+{
+	outb (index, hp->hcport);
+}
+
+/*
+ * Low level: Write to Data port [x86]
+ */
+static void inline sl811_write_data (hcipriv_t *hp, __u8 data)
+{
+	outb (data, hp->hcport+1);
+}
+
+/*
+ * Low level: Write to index register and data port [x86]
+ */
+static void inline sl811_write_index_data (hcipriv_t *hp, __u8 index, __u8 data)
+{
+	outw (index|(((__u16)data) << 8), hp->hcport);
+}
+
+/*****************************************************************
+ *
+ * Function Name: init_irq [x86]
+ *
+ * This function is board specific.  It sets up the interrupt to
+ * be an edge trigger and trigger on the rising edge
+ *
+ * Input: none
+ *
+ * Return value  : none
+ *
+ *****************************************************************/
+static void inline init_irq (void)
+{
+	/* nothing */
+}
+
+/*****************************************************************
+ *
+ * Function Name: release_regions [x86]
+ *
+ * This function is board specific.  It frees all io address.
+ *
+ * Input: hcipriv_t *
+ *
+ * Return value  : none
+ *
+ *****************************************************************/
+static void inline sl811_release_regions (hcipriv_t *hp)
+{
+	DBGFUNC ("Enter release_regions\n");
+	if (hp->hcport > 0) {
+		release_region (hp->hcport, SIZEOF_IO_REGION);
+		hp->hcport = 0;
+	}
+
+	/* hcport2 unused for x86 */
+}
+
+/*****************************************************************
+ *
+ * Function Name: request_regions [x86]
+ *
+ * This function is board specific. It request all io address and
+ * maps into memory (if can).
+ *
+ * Input: hcipriv_t *
+ *
+ * Return value  : 0 = OK
+ *
+ *****************************************************************/
+static int inline sl811_request_regions (hcipriv_t *hp, int base1, int base2)
+{
+	DBGFUNC ("Enter request_regions\n");
+	if (!request_region (base1, SIZEOF_IO_REGION, "SL811")) {
+		DBGERR ("request address 0x%X %d failed\n", base1, SIZEOF_IO_REGION);
+		return -EBUSY;
+	}
+	hp->hcport = base1;
+
+	/* hcport2 unused for x86 */
+	return 0;
+}
+

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)