device digi

Решение проблем связванных с работой железа. Проблемы программно-аппаратной совместимости.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-06 14:29:04

плюс еще это
попробуйете что там дебаг скажет

и покажете diff -urN digi_isa.c.orig digi_isa.c.new
что у нас там получилось

Код: Выделить всё

        /* Start by resetting the card */
        reset = FEPRST;
-        if (sc->model == PCXI)
-                reset |= FEPMEM;

        outb(sc->port, reset);
        for (i = 0; (inb(sc->port) & FEPMASK) != reset; i++) {

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-06 14:33:52

Jun 6 14:32:21 caravella kernel: digi0: 1st memory test failed

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-06 14:41:01

Код: Выделить всё

Jun  6 14:36:04 caravella kernel: digi0: probing on isa bus
Jun  6 14:36:04 caravella kernel: digi0: isa? port 0x220 mem 0xd0000
Jun  6 14:36:04 caravella kernel: digi0: got reset after 1 iterations
Jun  6 14:36:04 caravella kernel: digi0: board type is 0x4
Jun  6 14:36:04 caravella kernel: digi0: Probe returns -10
Jun  6 14:36:04 caravella kernel: digi0: probing on isa bus
Jun  6 14:36:04 caravella kernel: digi0: isa? port 0x220 mem 0xd0000
Jun  6 14:36:04 caravella kernel: digi0: got reset after 1 iterations
Jun  6 14:36:04 caravella kernel: digi0: board type is 0x4
Jun  6 14:36:04 caravella kernel: digi0: Probe returns -10
Jun  6 14:36:04 caravella kernel: digi0 at port 0x220-0x223 iomem 0xd0000-0xdfff
Jun  6 14:36:04 caravella kernel: digi0: attaching
Jun  6 14:36:04 caravella kernel: digi0: Checking card type
Jun  6 14:36:04 caravella kernel: digi0: got reset after 1 iterations
Jun  6 14:36:04 caravella kernel: digi0: board type is 0x4
Jun  6 14:36:04 caravella kernel: digi0: internal memory segment 0xf000
Jun  6 14:36:04 caravella kernel: digi0: got reset after 0 iterations
Jun  6 14:36:04 caravella kernel: digi0: got memory after 0 iterations
Jun  6 14:36:04 caravella kernel: digi0: short memory test
Jun  6 14:36:04 caravella kernel: digi0: 1st memory test failed
Jun  6 14:36:04 caravella kernel: device_attach: digi0 attach returned 6
Jun  6 14:36:04 caravella kernel: digi1: probing on isa bus
Jun  6 14:36:04 caravella kernel: digi1: 0x061: Invalid i/o address

Код: Выделить всё

--- ./digi_isa.c.old    Sun May 30 20:08:30 2004
+++ ./digi_isa.c        Fri Jun  6 14:35:18 2008
@@ -372,8 +372,8 @@

        /* Start by resetting the card */
        reset = FEPRST;
-       if (sc->model == PCXI)
-               reset |= FEPMEM;
+//     if (sc->model == PCXI)
+//             reset |= FEPMEM;

        outb(sc->port, reset);
        for (i = 0; (inb(sc->port) & FEPMASK) != reset; i++) {
@@ -386,16 +386,9 @@
        }
        DLOG(DIGIDB_INIT, (sc->dev, "got reset after %d iterations\n", i));

-       if (sc->model != PCXI) {
-               t = (sc->pmem >> 8) & 0xffe0;
-               if (sc->model == PCXEVE)
-                       t |= 0x10;              /* enable windowing */
-               outb(sc->port + 2, t & 0xff);
-               outb(sc->port + 3, t >> 8);
-       }

        if (sc->model == PCXI || sc->model == PCXE) {
-               outb(sc->port, FEPRST | FEPMEM);
+//             outb(sc->port, FEPRST | FEPMEM);
                for (i = 0; (inb(sc->port) & FEPMASK) != FEPRST; i++) {
                        if (i == hz / 10) {
                                device_printf(dev,
@@ -408,6 +401,14 @@
                }
                DLOG(DIGIDB_INIT, (sc->dev, "got memory after %d iterations\n",
                    i));
+       }
+
+       if (sc->model != PCXI) {
+               t = (sc->pmem >> 8) & 0xffe0;
+               if (sc->model == PCXEVE)
+                       t |= 0x10;              /* enable windowing */
+               outb(sc->port + 2, t & 0xff);
+               outb(sc->port + 3, t >> 8);
        }

        DLOG(DIGIDB_INIT, (sc->dev, "short memory test\n"));

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-06 14:43:21

все правильно
теперь плюс это
и что там дебаг скажет после...

Код: Выделить всё

                if (!(ident & 0xc0)) {
                        sc->name = "Digiboard PC/Xe 64K";
                        sc->model = PCXE;
                        sc->csigs = &digi_xixe_signals;
                        sc->win_size = 0x10000;
-                        sc->win_bits = 16;
-                        sc->wport = sc->port;
+                        sc->win_bits = 15;
+                        sc->wport = sc->port + 1;

                } else {
                        sc->name = "Digiboard PC/Xe 64/8K (windowed)";
                        sc->model = PCXEVE;
                        sc->csigs = &digi_normal_signals;
                        sc->win_size = 0x2000;
                        sc->win_bits = 13;
                        sc->wport = sc->port + 1;

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-06 14:50:18

Jun 6 14:49:03 caravella kernel: digi0: 1st memory test failed

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-06 14:51:08

выложите мне драйвер dgb
а то вы мне dgm дали))) млин
это разные дрова

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-06 14:56:41

В папке /src/sys/dgb
лежат дровa dgm которые я и выслал :(

thebas
проходил мимо

Re: device digi

Непрочитанное сообщение thebas » 2008-06-06 15:00:29

Все нимогу иду бухать :) до понедельника в офф

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35437
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: device digi

Непрочитанное сообщение Alex Keda » 2008-06-06 15:03:37

а у нас завтра рабочий...
Убей их всех! Бог потом рассортирует...

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-06 15:18:28

драйвер лежит в gnu/i386/isa/
я шашел уже

ладно когда появился свисти))
думаю там все решаемо
просто программеры чуток протупили

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-06 15:28:37

возьмите орининал файла что редактировали
без изменений
и добавте
будем смотреть дебаг

Код: Выделить всё

                if (!(ident & 0xc0)) {
                        sc->name = "Digiboard PC/Xe 64K";
                        sc->model = PCXE;
                        sc->csigs = &digi_xixe_signals;
                        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;
                        sc->csigs = &digi_normal_signals;
                        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;

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-09 9:11:42

Код: Выделить всё

Mon Jun  9 09:00:21 UTC 2008
digi0: probing on isa bus
digi0: isa? port 0x220 mem 0xd0000
digi0: got reset after 2 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 1 iterations
digi0: board type is 0x4
digi0: internal memory segment 0xf000
digi0: got reset after 0 iterations
digi0: memory reservation failed (0x06)
device_attach: digi0 attach returned 6
digi1: probing on isa bus
digi1: 0x061: Invalid i/o address


paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-09 11:41:40

Код: Выделить всё

        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",
                                    inb(sc->port));
                                sc->hidewin(sc);
                                goto failed;
                        }
                        digi_delay(sc, "digirst2", 1);
                }
                DLOG(DIGIDB_INIT, (sc->dev, "got memory after %d iterations\n",
                    i));
        }
и покажи еше раз
что получилось diff -urN orig new

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-09 12:42:51

Код: Выделить всё

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 1 iterations
digi0: board type is 0x4
digi0: internal memory segment 0xf000
digi0: got reset after 0 iterations
digi0: got memory after 0 iterations
digi0: short memory test
digi0: 1st memory test failed
device_attach: digi0 attach returned 6
digi1: probing on isa bus
digi1: 0x061: Invalid i/o address

Код: Выделить всё

--- digi_isa.c.old      Sun May 30 20:08:30 2004
+++ digi_isa.c  Mon Jun  9 12:35:18 2008
@@ -203,6 +203,11 @@
                        sc->win_size = 0x10000;
                        sc->win_bits = 16;
                        sc->wport = sc->port;
+
+               sc->setwin = digi_isa_setwin;
+               sc->hidewin = digi_isa_hidewin;
+               sc->towin = digi_isa_towin;
+
                } else {
                        sc->name = "Digiboard PC/Xe 64/8K (windowed)";
                        sc->model = PCXEVE;
@@ -210,13 +215,16 @@
                        sc->win_size = 0x2000;
                        sc->win_bits = 13;
                        sc->wport = sc->port + 1;
-               }
-               sc->module = "Xe";
-
+
                sc->setwin = digi_isa_setwin;
                sc->hidewin = digi_isa_hidewin;
                sc->towin = digi_isa_towin;
-       }
+
+
+               }
+               sc->module = "Xe";
+
+                       }

        return (sc->name != NULL);
 }
@@ -396,7 +404,8 @@

        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; i++) {
+               for (i = 0; (inb(sc->port) & FEPMASK) != (FEPRST|FEPMEM); i++
) {
                        if (i == hz / 10) {
                                device_printf(dev,
                                    "memory reservation failed (0x%02x)\n",

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-09 13:02:49

все правильно
дальше

Код: Выделить всё

#define DIGI_NVALIDMEM  (sizeof(digi_validmem) / sizeof(digi_validmem[0]))

+static u_char *
+digi_xi_initwin(struct digi_softc *sc, unsigned int addr)
+{
+        outb(sc->wport, sc->window = inb(sc->port)|FEPMEM);
+        return (sc->vmem + addr);
+}

static u_char *
digi_isa_setwin(struct digi_softc *sc, unsigned int addr)
{
        outb(sc->wport, sc->window = FEPWIN | (addr >> sc->win_bits));
        return (sc->vmem + (addr % sc->win_size));
}

Код: Выделить всё

        DLOG(DIGIDB_INIT, (sc->dev, "short memory test\n"));
-        ptr = sc->initwin(sc, BOTWIN);
+       ptr = digi_xi_initwin(sc, BOTWIN);

        vD(ptr) = 0xA55A3CC3;
        if (vD(ptr) != 0xA55A3CC3) {
                device_printf(dev, "1st memory test failed\n");
                sc->hidewin(sc);
                goto failed;
        }

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-09 13:18:05

Код: Выделить всё

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 1 iterations
digi0: board type is 0x4
digi0: internal memory segment 0xf000
digi0: got reset after 0 iterations
digi0: got memory after 0 iterations
digi0: short memory test
digi0: 1st memory test ok
digi0: 2nd memory test failed
device_attach: digi0 attach returned 6
digi1: probing on isa bus
digi1: 0x061: Invalid i/o address

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-09 13:22:08

отлично
добавляй дальше

Код: Выделить всё

-        ptr = sc->setwin(sc, TOPWIN);
+       ptr = digi_xi_initwin(sc, TOPWIN);
        vD(ptr) = 0x5AA5C33C;
        if (vD(ptr) != 0x5AA5C33C) {
                device_printf(dev, "2nd memory test failed\n");
                sc->hidewin(sc);
                goto failed;
        }
        DLOG(DIGIDB_INIT, (sc->dev, "2nd memory test ok\n"));

-        ptr = sc->setwin(sc, BIOSCODE + ((0xf000 - sc->mem_seg) << 4));
+       ptr = digi_xi_initwin(sc, BIOSCODE + ((0xf000 - sc->mem_seg) << 4));
        vD(ptr) = 0x5AA5C33C;
        if (vD(ptr) != 0x5AA5C33C) {
                device_printf(dev, "3rd (BIOS) memory test failed\n");
                sc->hidewin(sc);
                goto failed;
        }
        DLOG(DIGIDB_INIT, (sc->dev, "3rd memory test ok\n"));

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-09 13:39:26

Код: Выделить всё

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 1 iterations
digi0: board type is 0x4
digi0: internal memory segment 0xf000
digi0: got reset after 0 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 upload failed
digi1: probing on isa bus
digi1: 0x061: Invalid i/o address

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-09 13:46:28

надо подумать
программеры плохо портировали драйвер....

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-09 14:25:32

теперь в файле
digi_isa.c

Код: Выделить всё

-static u_char *
digi_xi_initwin(struct digi_softc *sc, unsigned int addr)

+u_char *
digi_xi_initwin(struct digi_softc *sc, unsigned int addr)
digi.h

Код: Выделить всё

void             digi_delay(struct digi_softc *_sc, const char *_txt,
                     u_long _timo);

+u_char *
+digi_xi_initwin(struct digi_softc *sc, unsigned int addr);
digi.c

Код: Выделить всё

                if (digi_inuse(sc))
                        return (EBUSY);

                digi_free_state(sc);
        }

-        ptr = sc->setwin(sc, MISCGLOBAL);
+     ptr = digi_xi_initwin(sc, MISCGLOBAL);
        for (i = 0; i < 16; i += 2)
                vW(ptr + i) = 0;

        switch (sc->model) {
        case PCXEVE:
                outb(sc->wport, 0xff);          /* window 7 */

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-09 14:35:09

и еще это
digi.c

Код: Выделить всё

        DLOG(DIGIDB_INIT, (sc->dev, "BIOS uploaded\n"));

-        ptr = sc->setwin(sc, MISCGLOBAL);
+       ptr = digi_xi_initwin(sc, MISCGLOBAL);
        W(ptr) = 0;

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-09 16:00:13

Код: Выделить всё

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 1 iterations
digi0: board type is 0x4
digi0: internal memory segment 0xf000
digi0: got reset after 0 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 upload failed
digi1: probing on isa bus
digi1: 0x061: Invalid i/o address

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: device digi

Непрочитанное сообщение paradox » 2008-06-09 16:03:52

Код: Выделить всё

digi0: BIOS upload failed
фигово
надо это побороть
а ну сделай весь
diff -urN digi.orig/ digi.new/

theBas
проходил мимо

Re: device digi

Непрочитанное сообщение theBas » 2008-06-09 16:08:53

Код: Выделить всё

--- digi.c.old  Fri Jun  6 13:17:12 2008
+++ digi.c      Mon Jun  9 15:57:20 2008
@@ -110,7 +110,7 @@
 static struct con_bios *con_bios_list;
 devclass_t      digi_devclass;
 static char     driver_name[] = "digi";
-unsigned        digi_debug = 0;
+unsigned        digi_debug = 1;

 static struct speedtab digispeedtab[] = {
        { 0,            0},                     /* old (sysV-like) Bx codes */
@@ -273,7 +273,9 @@
                digi_free_state(sc);
        }

-       ptr = sc->setwin(sc, MISCGLOBAL);
+//     ptr = sc->setwin(sc, MISCGLOBAL);
+       ptr = digi_xi_initwin(sc, MISCGLOBAL);
+
        for (i = 0; i < 16; i += 2)
                vW(ptr + i) = 0;

@@ -350,7 +352,8 @@

        DLOG(DIGIDB_INIT, (sc->dev, "BIOS uploaded\n"));

-       ptr = sc->setwin(sc, MISCGLOBAL);
+//     ptr = sc->setwin(sc, MISCGLOBAL);
+       ptr = digi_xi_initwin(sc, MISCGLOBAL);
        W(ptr) = 0;

        if (sc->pcibus) {

Код: Выделить всё

--- digi.h.old  Sat Feb  5 23:42:58 2005
+++ digi.h      Mon Jun  9 15:55:28 2008
@@ -211,3 +211,5 @@
 int             digi_shutdown(device_t _dev);
 void            digi_delay(struct digi_softc *_sc, const char *_txt,
                     u_long _timo);
+u_char *
+digi_xi_initwin(struct digi_softc *sc, unsigned int addr);

Код: Выделить всё

--- digi_isa.c.old      Sun May 30 20:08:30 2004
+++ digi_isa.c  Mon Jun  9 15:54:35 2008
@@ -70,12 +70,20 @@
 };
 #define DIGI_NVALIDMEM (sizeof(digi_validmem) / sizeof(digi_validmem[0]))

-static u_char *
+/* static u_char *
 digi_isa_setwin(struct digi_softc *sc, unsigned int addr)
 {
        outb(sc->wport, sc->window = FEPWIN | (addr >> sc->win_bits));
        return (sc->vmem + (addr % sc->win_size));
 }
+*/
+
+u_char *
+digi_xi_initwin(struct digi_softc *sc, unsigned int addr)
+{
+        outb(sc->wport, sc->window = inb(sc->port)|FEPMEM);
+        return (sc->vmem + addr);
+}

 static u_char *
 digi_xi_setwin(struct digi_softc *sc, unsigned int addr)
@@ -84,6 +92,13 @@
        return (sc->vmem + addr);
 }

+static u_char *
+digi_isa_setwin(struct digi_softc *sc, unsigned int addr)
+{
+        outb(sc->wport, sc->window = FEPWIN | (addr >> sc->win_bits));
+        return (sc->vmem + (addr % sc->win_size));
+}
+
 static void
 digi_isa_hidewin(struct digi_softc *sc)
 {
@@ -203,6 +218,11 @@
                        sc->win_size = 0x10000;
                        sc->win_bits = 16;
                        sc->wport = sc->port;
+
+               sc->setwin = digi_isa_setwin;
+               sc->hidewin = digi_isa_hidewin;
+               sc->towin = digi_isa_towin;
+
                } else {
                        sc->name = "Digiboard PC/Xe 64/8K (windowed)";
                        sc->model = PCXEVE;
@@ -210,13 +230,16 @@
                        sc->win_size = 0x2000;
                        sc->win_bits = 13;
                        sc->wport = sc->port + 1;
-               }
-               sc->module = "Xe";
-
+
                sc->setwin = digi_isa_setwin;
                sc->hidewin = digi_isa_hidewin;
                sc->towin = digi_isa_towin;
-       }
+
+
+               }
+               sc->module = "Xe";
+
+                       }

        return (sc->name != NULL);
 }
@@ -396,7 +419,8 @@

        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; i++) {
+               for (i = 0; (inb(sc->port) & FEPMASK) != (FEPRST|FEPMEM); i++) {
                        if (i == hz / 10) {
                                device_printf(dev,
                                    "memory reservation failed (0x%02x)\n",
@@ -411,7 +435,9 @@
        }

        DLOG(DIGIDB_INIT, (sc->dev, "short memory test\n"));
-       ptr = sc->setwin(sc, BOTWIN);
+//     ptr = sc->setwin(sc, BOTWIN);
+       ptr = digi_xi_initwin(sc, BOTWIN);
+
        vD(ptr) = 0xA55A3CC3;
        if (vD(ptr) != 0xA55A3CC3) {
                device_printf(dev, "1st memory test failed\n");
@@ -420,7 +446,9 @@
        }
        DLOG(DIGIDB_INIT, (sc->dev, "1st memory test ok\n"));

-       ptr = sc->setwin(sc, BIOSCODE + ((0xf000 - sc->mem_seg) << 4));
+//     ptr = sc->setwin(sc, BIOSCODE + ((0xf000 - sc->mem_seg) << 4));
+       ptr = digi_xi_initwin(sc, BIOSCODE + ((0xf000 - sc->mem_seg) << 4));
        vD(ptr) = 0x5AA5C33C;
        if (vD(ptr) != 0x5AA5C33C) {
                device_printf(dev, "3rd (BIOS) memory test failed\n");