clean up a bit, implement pci_conf_{read,write}() with probe[gs]et() (not yet used).

This commit is contained in:
mrg 1999-06-05 05:29:50 +00:00
parent bb0d20abc4
commit da265ce045
1 changed files with 32 additions and 8 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: pci_machdep.c,v 1.1 1999/06/04 13:42:15 mrg Exp $ */
/* $NetBSD: pci_machdep.c,v 1.2 1999/06/05 05:29:50 mrg Exp $ */
/*
* Copyright (c) 1999 Matthew R. Green
@ -74,6 +74,11 @@ struct sparc_pci_chipset _sparc_pci_chipset = {
NULL,
};
/* commonly used */
#define TAG2BUS(tag) ((tag) >> 16) & 0xff;
#define TAG2DEV(tag) ((tag) >> 11) & 0x1f;
#define TAG2FN(tag) ((tag) >> 8) & 0x7;
/*
* functions provided to the MI code.
*/
@ -90,8 +95,8 @@ pci_attach_hook(parent, self, pba)
pcitag_t tag;
char *name, *devtype;
u_int32_t hi, mid, lo, intr;
u_int32_t dev, fn, bus;
int node, i, n, *ip, *ap;
u_int bus, dev, fn;
DPRINTF((SPDB_INTFIX|SPDB_INTMAP), ("\npci_attach_hook:"));
@ -165,9 +170,9 @@ pci_attach_hook(parent, self, pba)
goto clean2;
DPRINTF(SPDB_INTFIX, (" got reg"));
bus = (ap[0] >> 16) & 0xff;
dev = (ap[0] >> 11) & 0x1f;
fn = (ap[0] >> 8) & 0x7;
bus = TAG2BUS(ap[0]);
dev = TAG2DEV(ap[0]);
fn = TAG2FN(ap[0]);
DPRINTF(SPDB_INTFIX, ("; bus %u dev %u fn %u", bus, dev, fn));
@ -241,6 +246,7 @@ pci_make_tag(pc, b, d, f)
int f;
{
/* make me a useable offset */
return (b << 16) | (d << 11) | (f << 8);
}
@ -260,9 +266,9 @@ confaddr_ok(sc, tag)
{
int bus, dev, fn;
bus = (tag >> 16) & 0xff;
dev = (tag >> 11) & 0x1f;
fn = (tag >> 8) & 0x7;
bus = TAG2BUS(tag);
dev = TAG2DEV(tag);
fn = TAG2FN(tag);
if (sc->sc_mode == PSYCHO_MODE_SABRE) {
/*
@ -281,6 +287,7 @@ confaddr_ok(sc, tag)
* make sure we are reading our own bus
*/
/* XXX??? */
panic("confaddr_ok: can't do SUNW,psycho yet");
}
return (1);
}
@ -294,6 +301,7 @@ pci_conf_read(pc, tag, reg)
{
struct psycho_pbm *pp = pc->cookie;
struct psycho_softc *sc = pp->pp_sc;
u_int32_t data;
pcireg_t val;
DPRINTF(SPDB_CONF, ("pci_conf_read: tag %lx; reg %x; ", (long)tag, reg));
@ -304,10 +312,21 @@ pci_conf_read(pc, tag, reg)
if (confaddr_ok(sc, tag) == 0) {
val = (pcireg_t)~0;
} else {
#if 0
membar_sync();
data = probeget(bus_type_asi[sc->sc_configtag->type],
sc->sc_configaddr + tag + reg, 4);
membar_sync();
if (data == -1)
val = (pcireg_t)~0;
else
val = (pcireg_t)data;
#else
membar_sync();
val = bus_space_read_4(sc->sc_configtag, sc->sc_configaddr,
tag + reg);
membar_sync();
#endif
}
DPRINTF(SPDB_CONF, (" returning %08x\n", (u_int)val));
@ -333,7 +352,12 @@ pci_conf_write(pc, tag, reg, data)
panic("pci_conf_write: bad addr");
membar_sync();
#if 0
probeset(bus_type_asi[sc->sc_configtag->type],
sc->sc_configaddr + tag + reg, 4, data);
#else
bus_space_write_4(sc->sc_configtag, sc->sc_configaddr, tag + reg, data);
#endif
membar_sync();
}