Date: Wed, 9 Jul 2008 22:28:04 GMT From: kir <ddkprog@yahoo.com> To: freebsd-gnats-submit@FreeBSD.org Subject: misc/125454: device digi (PC/Xe 64K 16 ports) not work Message-ID: <200807092228.m69MS4QR041237@www.freebsd.org> Resent-Message-ID: <200807092230.m69MU1aK081409@freefall.freebsd.org>
index | next in thread | raw e-mail
>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@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:help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807092228.m69MS4QR041237>
