misc/125454: device digi (PC/Xe 64K 16 ports) not work

kir ddkprog at yahoo.com
Wed Jul 9 22:30:01 UTC 2008


>Number:         125454
>Category:       misc
>Synopsis:       device digi (PC/Xe 64K 16 ports) not work
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jul 09 22:30:01 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     kir
>Release:        RELENG_7
>Organization:
>Environment:
FreeBSD hack.org.ua 7.0-STABLE FreeBSD 7.0-STABLE #4: Thu Jul  3 21:23:29 EEST 2008     root at hack.org.ua:/usr/obj/work/cvsup/freebsd/7.0S/src/sys/KIR  i386
>Description:
full thread at http://forum.lissyara.su/viewtopic.php?f=5&t=8959
short description
device isa digi on FreeBSD 7.0 not work

#kldload digi
#dmesg -a|grep digi

digi1: 0x061: Invalid i/o address
digi0 at port 0x220-0x223 iomem 0xd0000-0xdffff on isa0
digi0: memory reservation failed (0x06)
device_attach: digi0 attach returned 6

under FreeBSD 4.7
device digi will name dgb
and configured on KERNEL

device dgb0 at isa? port 0x220 iomem 0x0d0000

and works fine!

#dmesg -a|grep dgb

dgb0: PC/Xe 64K
dgb0 at port 0x220-0x223 iomem 0xd0000-0xdffff on isa0
dgb0: 16 ports
dgb0: driver is using old-style compatability shims


>How-To-Repeat:
you must have this card to repeat the problem
>Fix:
this changes to fix issues

diff -urN digi.orig/digi.c digi.new/digi.c
--- digi.orig/digi.c	2008-06-13 15:34:00.000000000 +0300
+++ digi.new/digi.c	2008-06-13 16:20:07.000000000 +0300
@@ -399,7 +399,7 @@
 	case PCXE:
 	case PCXEVE:
 	case PCXI:
-		ptr = sc->setwin(sc, sc->model == PCXI ? 0x2000 : 0x0);
+		ptr = sc->setwin(sc, 0x2000);
 		digi_bcopy(sc->fep.data, ptr, sc->fep.size);
 
 		/* A BIOS request to move our data to 0x2000 */
diff -urN digi.orig/digi_isa.c digi.new/digi_isa.c
--- digi.orig/digi_isa.c	2004-05-30 00:00:02.000000000 +0300
+++ digi.new/digi_isa.c	2008-06-13 16:21:09.000000000 +0300
@@ -80,7 +80,7 @@
 static u_char *
 digi_xi_setwin(struct digi_softc *sc, unsigned int addr)
 {
-	outb(sc->wport, sc->window = FEPMEM);
+	outb(sc->wport, sc->window = inb(sc->port)|FEPMEM);
 	return (sc->vmem + addr);
 }
 
@@ -203,6 +203,10 @@
 			sc->win_size = 0x10000;
 			sc->win_bits = 16;
 			sc->wport = sc->port;
+
+			sc->setwin = digi_xi_setwin;
+			sc->hidewin = digi_isa_hidewin;
+			sc->towin = digi_xi_towin;
 		} else {
 			sc->name = "Digiboard PC/Xe 64/8K (windowed)";
 			sc->model = PCXEVE;
@@ -210,12 +214,13 @@
 			sc->win_size = 0x2000;
 			sc->win_bits = 13;
 			sc->wport = sc->port + 1;
+
+			sc->setwin = digi_isa_setwin;
+			sc->hidewin = digi_isa_hidewin;
+			sc->towin = digi_isa_towin;
 		}
 		sc->module = "Xe";
 
-		sc->setwin = digi_isa_setwin;
-		sc->hidewin = digi_isa_hidewin;
-		sc->towin = digi_isa_towin;
 	}
 
 	return (sc->name != NULL);
@@ -396,7 +401,7 @@
 
 	if (sc->model == PCXI || sc->model == PCXE) {
 		outb(sc->port, FEPRST | FEPMEM);
-		for (i = 0; (inb(sc->port) & FEPMASK) != FEPRST; i++) {
+		for (i = 0; (inb(sc->port) & FEPMASK) != (FEPRST|FEPMEM); i++) {
 			if (i == hz / 10) {
 				device_printf(dev,
 				    "memory reservation failed (0x%02x)\n",


after patch 

#dmesg | grep digi

digi0: probing on isa bus
digi0: isa? port 0x220 mem 0xd0000
digi0: got reset after 1 iterations
digi0: board type is 0x4
digi0: Probe returns -10
digi0: probing on isa bus
digi0: isa? port 0x220 mem 0xd0000
digi0: got reset after 1 iterations
digi0: board type is 0x4
digi0: Probe returns -10
digi0 at port 0x220-0x223 iomem 0xd0000-0xdffff on isa0
digi0: attaching
digi0: Checking card type
digi0: got reset after 0 iterations
digi0: board type is 0x4
digi0: internal memory segment 0xf000
digi0: got reset after 1 iterations
digi0: got memory after 0 iterations
digi0: short memory test
digi0: 1st memory test ok
digi0: 2nd memory test ok
digi0: 3rd memory test ok
digi0: BIOS uploaded
digi0: BIOS started after 1 us
digi0: BIOS booted after 112 iterations
digi0: FEP/OS moved after 1 iterations
digi0: FEP/OS started after 5 iterations
digi0: Digiboard PC/Xe 64K, 16 ports found
digi1: probing on isa bus
digi1: 0x061: Invalid i/o address



>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list