Update of /cvsroot/linux-vax/kernel-2.4/drivers/char
In directory usw-pr-cvs1:/tmp/cvs-serv6885/drivers/char
Modified Files:
dz.c dz.h
Log Message:
DA: added autoprobe support for vsbus to dz/vaxlance.. needs a lot of testing
on machines that aren't mine
Index: dz.c
===================================================================
RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/char/dz.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- dz.c 2001/06/09 14:07:38 1.5
+++ dz.c 2001/06/17 11:43:44 1.6
@@ -66,6 +66,7 @@
#include <asm/irq.h>
#ifdef CONFIG_VAX
+#include <asm/vsa.h>
#include <asm/dz11.h>
volatile struct dz11_regs *dz11_addr;
#else
@@ -398,7 +399,7 @@
if (status & DZ_RDONE)
receive_chars (info); /* the receive function */
- vsbus_clear_int(7);
+ vsbus_clear_int(dz_vsbus_rx_int);
}
@@ -413,7 +414,7 @@
if (status & DZ_TRDY)
transmit_chars (info);
- vsbus_clear_int(6);
+ vsbus_clear_int(dz_vsbus_tx_int);
}
#else
@@ -526,8 +527,8 @@
dz_out (info, DZ_CSR, tmp);
#ifdef CONFIG_VAX
- vsbus_enable_int(6);
- vsbus_enable_int(7);
+ vsbus_enable_int(dz_vsbus_rx_int);
+ vsbus_enable_int(dz_vsbus_tx_int);
#endif
info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
@@ -1434,7 +1435,7 @@
if (! info->port)
return 0;
#ifdef CONFIG_VAX
- printk("ttyS%d at 0x%04x (irq = %d, %d)\n", info->line, info->port, SERIAL_RX, SERIAL_TX);
+ printk("ttyS%d at 0x%04x\n", info->line, info->port);
#else
printk("ttyS%d at 0x%04x (irq = %d)\n", info->line, info->port, SERIAL);
#endif
@@ -1453,29 +1454,45 @@
is updated... in request_irq - to immediatedly obliterate
it is unwise. */
restore_flags(flags);
-#if 0
+#if CONFIG_VAX
{
short i;
-
-
+ unsigned char num;
autoirq_setup(0);
- vsbus_enable_int(6);
+ vsbus_probe_irq_on();
i = dz_in(info, DZ_TCR);
dz_out(info, DZ_CSR, DZ_MSE|DZ_TIE);
dz_out(info, DZ_TCR, 0);
- udelay(100);
+ udelay(1000);
dz_out(info, DZ_TCR, 1);
udelay(10000);
+ dz_out(info, DZ_TCR, i);
+ num=vsbus_probe_irq_report();
+ irq=autoirq_report(0);
+ if (num)
+ {
+ dz_vsbus_tx_int=num;
+ dz_vsbus_rx_int=num+1;
+ }
+ autoirq_setup(0);
+
+ vsbus_enable_int(num);
+
+ i = dz_in(info, DZ_TCR);
+ dz_out(info, DZ_CSR, DZ_MSE|DZ_TIE);
+ dz_out(info, DZ_TCR, 0);
+ udelay(1000);
dz_out(info, DZ_TCR, 1);
- vsbus_clear_int(6);
- irq=autoirq_report(100);
+ udelay(10000);
+ dz_out(info, DZ_TCR, i);
+ vsbus_clear_int(num);
+ vsbus_disable_int(num);
+ irq=autoirq_report(100);
}
- printk("going for IRQ %d\n", irq);
-#endif
-#ifdef CONFIG_VAX
- if (request_irq (SERIAL_TX, dz_interrupt_tx, SA_INTERRUPT, "DZ", lines[0]))
+ printk("dz.c: using irq rx %d, irq tx %d\n", irq-1, irq);
+ if (request_irq (irq, dz_interrupt_tx, SA_INTERRUPT, "DZ", lines[0]))
panic ("Unable to register DZ interrupt\n");
- if (request_irq (SERIAL_RX, dz_interrupt_rx, SA_INTERRUPT, "DZ", lines[0]))
+ if (request_irq (irq-1, dz_interrupt_rx, SA_INTERRUPT, "DZ", lines[0]))
panic ("Unable to register DZ interrupt\n");
#else
if (request_irq (SERIAL, dz_interrupt_rx, SA_INTERRUPT, "DZ", lines[0]))
Index: dz.h
===================================================================
RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/char/dz.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- dz.h 2001/06/09 14:07:38 1.3
+++ dz.h 2001/06/17 11:43:44 1.4
@@ -192,6 +192,9 @@
static int serial_refcount;
+#ifdef CONFIG_VAX
+static unsigned char dz_vsbus_rx_int, dz_vsbus_tx_int;
+#endif
/*
* tmp_buf is used as a temporary buffer by serial_write. We need to
* lock it in case the copy_from_user blocks while swapping in a page,
|