From: Dave A. <ai...@us...> - 2001-06-17 11:43:49
|
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, |