weasel -> weasel_isa

This commit is contained in:
thorpej 2001-12-16 22:30:26 +00:00
parent cb2d65aaf9
commit b45e326520
3 changed files with 67 additions and 41 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: pcdisplay.c,v 1.12 2001/11/13 08:01:27 lukem Exp $ */ /* $NetBSD: pcdisplay.c,v 1.13 2001/12/16 22:30:26 thorpej Exp $ */
/* /*
* Copyright (c) 1998 * Copyright (c) 1998
@ -33,7 +33,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: pcdisplay.c,v 1.12 2001/11/13 08:01:27 lukem Exp $"); __KERNEL_RCSID(0, "$NetBSD: pcdisplay.c,v 1.13 2001/12/16 22:30:26 thorpej Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -235,33 +235,57 @@ pcdisplay_match(parent, match, aux)
struct isa_attach_args *ia = aux; struct isa_attach_args *ia = aux;
int mono; int mono;
if (ISA_DIRECT_CONFIG(ia))
return (0);
/* If values are hardwired to something that they can't be, punt. */ /* If values are hardwired to something that they can't be, punt. */
if ((ia->ia_iobase != IOBASEUNK && if (ia->ia_nio < 1 ||
ia->ia_iobase != 0x3d0 && (ia->ia_io[0].ir_addr != ISACF_PORT_DEFAULT &&
ia->ia_iobase != 0x3b0) || ia->ia_io[0].ir_addr != 0x3d0 &&
/* ia->ia_iosize != 0 || XXX isa.c */ ia->ia_io[0].ir_addr != 0x3b0))
(ia->ia_maddr != MADDRUNK && return (0);
ia->ia_maddr != 0xb8000 &&
ia->ia_maddr != 0xb0000) || if (ia->ia_niomem < 1 ||
(ia->ia_msize != 0 && ia->ia_msize != 0x8000) || (ia->ia_iomem[0].ir_addr != ISACF_IOMEM_DEFAULT &&
ia->ia_irq != IRQUNK || ia->ia_drq != DRQUNK) ia->ia_iomem[0].ir_addr != 0xb8000 &&
ia->ia_iomem[0].ir_addr != 0xb0000))
return (0);
if (ia->ia_iomem[0].ir_size != 0 &&
ia->ia_iomem[0].ir_size != 0x8000)
return (0);
if (ia->ia_nirq > 0 &&
ia->ia_irq[0].ir_irq != ISACF_IRQ_DEFAULT)
return (0);
if (ia->ia_ndrq > 0 &&
ia->ia_drq[0].ir_drq != ISACF_DRQ_DEFAULT)
return (0); return (0);
if (pcdisplay_is_console(ia->ia_iot)) if (pcdisplay_is_console(ia->ia_iot))
mono = pcdisplay_console_dc.mono; mono = pcdisplay_console_dc.mono;
else if (ia->ia_iobase != 0x3b0 && ia->ia_maddr != 0xb0000 && else if (ia->ia_io[0].ir_addr != 0x3b0 &&
ia->ia_iomem[0].ir_addr != 0xb0000 &&
pcdisplay_probe_col(ia->ia_iot, ia->ia_memt)) pcdisplay_probe_col(ia->ia_iot, ia->ia_memt))
mono = 0; mono = 0;
else if (ia->ia_iobase != 0x3d0 && ia->ia_maddr != 0xb8000 && else if (ia->ia_io[0].ir_addr != 0x3d0 &&
ia->ia_iomem[0].ir_addr != 0xb8000 &&
pcdisplay_probe_mono(ia->ia_iot, ia->ia_memt)) pcdisplay_probe_mono(ia->ia_iot, ia->ia_memt))
mono = 1; mono = 1;
else else
return (0); return (0);
ia->ia_iobase = mono ? 0x3b0 : 0x3d0; ia->ia_nio = 1;
ia->ia_iosize = 0x10; ia->ia_io[0].ir_addr = mono ? 0x3b0 : 0x3d0;
ia->ia_maddr = mono ? 0xb0000 : 0xb8000; ia->ia_io[0].ir_size = 0x10;
ia->ia_msize = 0x8000;
ia->ia_niomem = 1;
ia->ia_iomem[0].ir_size = mono ? 0xb0000 : 0xb8000;
ia->ia_iomem[0].ir_size = 0x8000;
ia->ia_nirq = 0;
ia->ia_ndrq = 0;
return (1); return (1);
} }
@ -287,10 +311,12 @@ pcdisplay_attach(parent, self, aux)
} else { } else {
dc = malloc(sizeof(struct pcdisplay_config), dc = malloc(sizeof(struct pcdisplay_config),
M_DEVBUF, M_WAITOK); M_DEVBUF, M_WAITOK);
if (ia->ia_iobase != 0x3b0 && ia->ia_maddr != 0xb0000 && if (ia->ia_io[0].ir_addr != 0x3b0 &&
ia->ia_iomem[0].ir_addr != 0xb0000 &&
pcdisplay_probe_col(ia->ia_iot, ia->ia_memt)) pcdisplay_probe_col(ia->ia_iot, ia->ia_memt))
pcdisplay_init(dc, ia->ia_iot, ia->ia_memt, 0); pcdisplay_init(dc, ia->ia_iot, ia->ia_memt, 0);
else if (ia->ia_iobase != 0x3d0 && ia->ia_maddr != 0xb8000 && else if (ia->ia_io[0].ir_addr != 0x3d0 &&
ia->ia_iomem[0].ir_addr != 0xb8000 &&
pcdisplay_probe_mono(ia->ia_iot, ia->ia_memt)) pcdisplay_probe_mono(ia->ia_iot, ia->ia_memt))
pcdisplay_init(dc, ia->ia_iot, ia->ia_memt, 1); pcdisplay_init(dc, ia->ia_iot, ia->ia_memt, 1);
else else
@ -307,7 +333,7 @@ pcdisplay_attach(parent, self, aux)
sc->sc_weasel.wh_st = dc->dc_ph.ph_memt; sc->sc_weasel.wh_st = dc->dc_ph.ph_memt;
sc->sc_weasel.wh_sh = dc->dc_ph.ph_memh; sc->sc_weasel.wh_sh = dc->dc_ph.ph_memh;
sc->sc_weasel.wh_parent = &sc->sc_dev; sc->sc_weasel.wh_parent = &sc->sc_dev;
weasel_init(&sc->sc_weasel); weasel_isa_init(&sc->sc_weasel);
} }
#endif /* NPCWEASEL > 0 */ #endif /* NPCWEASEL > 0 */

View File

@ -1,4 +1,4 @@
/* $NetBSD: weasel.c,v 1.4 2001/11/13 08:01:34 lukem Exp $ */ /* $NetBSD: weasel.c,v 1.5 2001/12/16 22:30:26 thorpej Exp $ */
/*- /*-
* Copyright (c) 2000 Zembu Labs, Inc. * Copyright (c) 2000 Zembu Labs, Inc.
@ -42,7 +42,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: weasel.c,v 1.4 2001/11/13 08:01:34 lukem Exp $"); __KERNEL_RCSID(0, "$NetBSD: weasel.c,v 1.5 2001/12/16 22:30:26 thorpej Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -56,10 +56,10 @@ __KERNEL_RCSID(0, "$NetBSD: weasel.c,v 1.4 2001/11/13 08:01:34 lukem Exp $");
#include <dev/sysmon/sysmonvar.h> #include <dev/sysmon/sysmonvar.h>
int weasel_wdog_setmode(struct sysmon_wdog *); int weasel_isa_wdog_setmode(struct sysmon_wdog *);
int weasel_wdog_tickle(struct sysmon_wdog *); int weasel_isa_wdog_tickle(struct sysmon_wdog *);
int weasel_wdog_arm_disarm(struct weasel_handle *, u_int8_t); int weasel_isa_wdog_arm_disarm(struct weasel_handle *, u_int8_t);
int weasel_wdog_query_state(struct weasel_handle *); int weasel_isa_wdog_query_state(struct weasel_handle *);
void pcweaselattach(int); void pcweaselattach(int);
@ -73,7 +73,7 @@ pcweaselattach(int count)
} }
void void
weasel_init(struct weasel_handle *wh) weasel_isa_init(struct weasel_handle *wh)
{ {
struct weasel_config_block cfg; struct weasel_config_block cfg;
int i, j; int i, j;
@ -195,7 +195,7 @@ weasel_init(struct weasel_handle *wh)
cfg.wdt_msec = 3000; cfg.wdt_msec = 3000;
} }
if ((wh->wh_wdog_armed = weasel_wdog_query_state(wh)) == -1) if ((wh->wh_wdog_armed = weasel_isa_wdog_query_state(wh)) == -1)
wh->wh_wdog_armed = 0; wh->wh_wdog_armed = 0;
wh->wh_wdog_period = cfg.wdt_msec / 1000; wh->wh_wdog_period = cfg.wdt_msec / 1000;
@ -207,8 +207,8 @@ weasel_init(struct weasel_handle *wh)
*/ */
wh->wh_smw.smw_name = "weasel"; wh->wh_smw.smw_name = "weasel";
wh->wh_smw.smw_cookie = wh; wh->wh_smw.smw_cookie = wh;
wh->wh_smw.smw_setmode = weasel_wdog_setmode; wh->wh_smw.smw_setmode = weasel_isa_wdog_setmode;
wh->wh_smw.smw_tickle = weasel_wdog_tickle; wh->wh_smw.smw_tickle = weasel_isa_wdog_tickle;
wh->wh_smw.smw_period = wh->wh_wdog_period; wh->wh_smw.smw_period = wh->wh_wdog_period;
if (sysmon_wdog_register(&wh->wh_smw) != 0) if (sysmon_wdog_register(&wh->wh_smw) != 0)
@ -217,13 +217,13 @@ weasel_init(struct weasel_handle *wh)
} }
int int
weasel_wdog_setmode(struct sysmon_wdog *smw) weasel_isa_wdog_setmode(struct sysmon_wdog *smw)
{ {
struct weasel_handle *wh = smw->smw_cookie; struct weasel_handle *wh = smw->smw_cookie;
int error = 0; int error = 0;
if ((smw->smw_mode & WDOG_MODE_MASK) == WDOG_MODE_DISARMED) { if ((smw->smw_mode & WDOG_MODE_MASK) == WDOG_MODE_DISARMED) {
error = weasel_wdog_arm_disarm(wh, WDT_DISABLE); error = weasel_isa_wdog_arm_disarm(wh, WDT_DISABLE);
} else { } else {
if (smw->smw_period == WDOG_PERIOD_DEFAULT) if (smw->smw_period == WDOG_PERIOD_DEFAULT)
smw->smw_period = wh->wh_wdog_period; smw->smw_period = wh->wh_wdog_period;
@ -231,15 +231,15 @@ weasel_wdog_setmode(struct sysmon_wdog *smw)
/* Can't change the period on the Weasel. */ /* Can't change the period on the Weasel. */
return (EINVAL); return (EINVAL);
} }
error = weasel_wdog_arm_disarm(wh, WDT_ENABLE); error = weasel_isa_wdog_arm_disarm(wh, WDT_ENABLE);
weasel_wdog_tickle(smw); weasel_isa_wdog_tickle(smw);
} }
return (error); return (error);
} }
int int
weasel_wdog_tickle(struct sysmon_wdog *smw) weasel_isa_wdog_tickle(struct sysmon_wdog *smw)
{ {
struct weasel_handle *wh = smw->smw_cookie; struct weasel_handle *wh = smw->smw_cookie;
u_int8_t reg; u_int8_t reg;
@ -261,7 +261,7 @@ weasel_wdog_tickle(struct sysmon_wdog *smw)
* servicing nothing. Let the user know that the machine is no * servicing nothing. Let the user know that the machine is no
* longer being monitored by the weasel. * longer being monitored by the weasel.
*/ */
if((x = weasel_wdog_query_state(wh)) == -1) if((x = weasel_isa_wdog_query_state(wh)) == -1)
error = EIO; error = EIO;
if (x == 1) { if (x == 1) {
error = 0; error = 0;
@ -277,7 +277,7 @@ weasel_wdog_tickle(struct sysmon_wdog *smw)
} }
int int
weasel_wdog_arm_disarm(struct weasel_handle *wh, u_int8_t mode) weasel_isa_wdog_arm_disarm(struct weasel_handle *wh, u_int8_t mode)
{ {
u_int8_t reg; u_int8_t reg;
int timeout; int timeout;
@ -324,7 +324,7 @@ weasel_wdog_arm_disarm(struct weasel_handle *wh, u_int8_t mode)
* Ensure that the Weasel thinks it's in the same mode we want it to * Ensure that the Weasel thinks it's in the same mode we want it to
* be in. EIO if not. * be in. EIO if not.
*/ */
x = weasel_wdog_query_state(wh); x = weasel_isa_wdog_query_state(wh);
switch (x) { switch (x) {
case -1: case -1:
error = EIO; error = EIO;
@ -350,7 +350,7 @@ weasel_wdog_arm_disarm(struct weasel_handle *wh, u_int8_t mode)
} }
int int
weasel_wdog_query_state(struct weasel_handle *wh) weasel_isa_wdog_query_state(struct weasel_handle *wh)
{ {
int timeout, reg; int timeout, reg;

View File

@ -1,4 +1,4 @@
/* $NetBSD: weaselvar.h,v 1.1 2000/11/04 18:47:20 thorpej Exp $ */ /* $NetBSD: weaselvar.h,v 1.2 2001/12/16 22:30:27 thorpej Exp $ */
/*- /*-
* Copyright (c) 2000 Zembu Labs, Inc. * Copyright (c) 2000 Zembu Labs, Inc.
@ -52,4 +52,4 @@ struct weasel_handle {
u_int wh_wdog_period; u_int wh_wdog_period;
}; };
void weasel_init(struct weasel_handle *); void weasel_isa_init(struct weasel_handle *);