Код: Выделить всё
--- 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");