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