PERFORCE change 53674 for review
Scott Long
scottl at FreeBSD.org
Fri May 28 10:41:17 PDT 2004
http://perforce.freebsd.org/chv.cgi?CH=53674
Change 53674 by scottl at scottl-esp-sparc64 on 2004/05/28 10:40:06
Actually submit the file that should have been submitted last time.
Pointy hat graciously given by jhb =-)
Affected files ...
.. //depot/projects/scottl-esp/src/sys/dev/esp/esp_sbus.c#5 edit
Differences ...
==== //depot/projects/scottl-esp/src/sys/dev/esp/esp_sbus.c#5 (text+ko) ====
@@ -64,8 +64,6 @@
#include <dev/esp/ncr53c9xreg.h>
#include <dev/esp/ncr53c9xvar.h>
-#include <sparc64/sbus/sbusvar.h>
-
/* #define ESP_SBUS_DEBUG */
struct esp_softc {
@@ -97,18 +95,20 @@
{0, 0}
};
-#if 0
-CFATTACH_DECL(esp_sbus, sizeof(struct esp_softc),
- espmatch_sbus, espattach_sbus, NULL, NULL);
-#endif
+static driver_t esp_sbus_driver = {
+ "esp",
+ esp_sbus_methods,
+ sizeof(struct esp_softc)
+};
+
+static devclass_t esp_devclass;
+DRIVER_MODULE(esp, sbus, esp_sbus_driver, esp_devclass, 0, 0);
/*
* Functions and the switch for the MI code.
*/
static u_char esp_read_reg(struct ncr53c9x_softc *, int);
static void esp_write_reg(struct ncr53c9x_softc *, int, u_char);
-static u_char esp_rdreg1(struct ncr53c9x_softc *, int);
-static void esp_wrreg1(struct ncr53c9x_softc *, int, u_char);
static int esp_dma_isintr(struct ncr53c9x_softc *);
static void esp_dma_reset(struct ncr53c9x_softc *);
static int esp_dma_intr(struct ncr53c9x_softc *);
@@ -117,6 +117,7 @@
static void esp_dma_go(struct ncr53c9x_softc *);
static void esp_dma_stop(struct ncr53c9x_softc *);
static int esp_dma_isactive(struct ncr53c9x_softc *);
+static void espattach(struct esp_softc *, struct ncr53c9x_glue *);
static struct ncr53c9x_glue esp_sbus_glue = {
esp_read_reg,
@@ -131,66 +132,48 @@
NULL, /* gl_clear_latched_intr */
};
-static struct ncr53c9x_glue esp_sbus_glue1 = {
- esp_rdreg1,
- esp_wrreg1,
- esp_dma_isintr,
- esp_dma_reset,
- esp_dma_intr,
- esp_dma_setup,
- esp_dma_go,
- esp_dma_stop,
- esp_dma_isactive,
- NULL, /* gl_clear_latched_intr */
-};
-
-static void espattach(struct esp_softc *, struct ncr53c9x_glue *);
-
static int
esp_sbus_probe(device_t dev)
{
- int rv;
- struct sbus_attach_args *sa = aux;
+ char *name;
- if (strcmp("SUNW,fas", sa->sa_name) == 0)
- return 1;
+ name = sbus_get_name(dev);
+ if (strcmp("SUNW,fas", name) == 0)
+ return (-10);
- rv = (strcmp(cf->cf_name, sa->sa_name) == 0 ||
- strcmp("ptscII", sa->sa_name) == 0);
- return (rv);
+ return (ENXIO);
}
static int
esp_sbus_attach(device_t dev)
{
- struct esp_softc *esc = (void *)self;
+ struct esp_softc *esc = device_get_softc(dev);
struct ncr53c9x_softc *sc = &esc->sc_ncr53c9x;
- struct sbus_attach_args *sa = aux;
struct lsi64854_softc *lsc;
+ phandle_t node;
+ char *name;
int burst, sbusburst;
- esc->sc_bustag = sa->sa_bustag;
- esc->sc_dmatag = sa->sa_dmatag;
+ node = sbus_get_node(dev);
+ name = sbus_get_name(dev);
+ if (OF_getprop(node, "initiator-id", &sc->sc_id,
+ sizeof(sc->sc_id)) == -1)
+ sc->sc_id = 7;;
+ sc->sc_freq = sbus_get_clockfreq(dev);
- sc->sc_id = PROM_getpropint(sa->sa_node, "initiator-id", 7);
- sc->sc_freq = PROM_getpropint(sa->sa_node, "clock-frequency", -1);
- if (sc->sc_freq < 0)
- sc->sc_freq = ((struct sbus_softc *)
- sc->sc_dev.dv_parent)->sc_clockfreq;
-
#ifdef ESP_SBUS_DEBUG
printf("%s: espattach_sbus: sc_id %d, freq %d\n",
self->dv_xname, sc->sc_id, sc->sc_freq);
#endif
- if (strcmp("SUNW,fas", sa->sa_name) == 0) {
+ if (strcmp("SUNW,fas", name) == 0) {
/*
* fas has 2 register spaces: dma(lsi64854) and SCSI core (ncr53c9x)
*/
if (sa->sa_nreg != 2) {
printf("%s: %d register spaces\n", self->dv_xname, sa->sa_nreg);
- return;
+ return (ENXIO);
}
/*
@@ -202,7 +185,7 @@
if (lsc == NULL) {
printf("%s: out of memory (lsi64854_softc)\n",
self->dv_xname);
- return;
+ return (ENOMEM);
}
esc->sc_dma = lsc;
@@ -224,7 +207,7 @@
0, &lsc->sc_regs) != 0) {
printf("%s: cannot map dma registers\n",
self->dv_xname);
- return;
+ return (ENXIO);
}
}
@@ -239,7 +222,7 @@
if (sbusburst == 0)
sbusburst = SBUS_BURST_32 - 1; /* 1->16 */
- burst = PROM_getpropint(sa->sa_node, "burst-sizes", -1);
+ burst = sbus_get_burstsz(dev);
#if ESP_SBUS_DEBUG
printf("espattach_sbus: burst 0x%x, sbus 0x%x\n",
@@ -275,13 +258,13 @@
printf("%s @ sbus: "
"cannot map scsi core registers\n",
self->dv_xname);
- return;
+ return (ENXIO);
}
}
if (sa->sa_nintr == 0) {
printf("\n%s: no interrupt property\n", self->dv_xname);
- return;
+ return (ENXIO);
}
esc->sc_pri = sa->sa_pri;
@@ -294,146 +277,17 @@
espattach(esc, &esp_sbus_glue);
- return;
+ return (0);
}
- /*
- * Find the DMA by poking around the dma device structures
- *
- * What happens here is that if the dma driver has not been
- * configured, then this returns a NULL pointer. Then when the
- * dma actually gets configured, it does the opposing test, and
- * if the sc->sc_esp field in it's softc is NULL, then tries to
- * find the matching esp driver.
- */
- esc->sc_dma = (struct lsi64854_softc *)
- getdevunit("dma", sc->sc_dev.dv_unit);
-
- /*
- * and a back pointer to us, for DMA
- */
- if (esc->sc_dma)
- esc->sc_dma->sc_client = sc;
- else {
- printf("\n");
- panic("espattach: no dma found");
- }
-
- /*
- * The `ESC' DMA chip must be reset before we can access
- * the esp registers.
- */
- if (esc->sc_dma->sc_rev == DMAREV_ESC)
- DMA_RESET(esc->sc_dma);
-
- /*
- * Map my registers in, if they aren't already in virtual
- * address space.
- */
- if (sa->sa_npromvaddrs) {
- sbus_promaddr_to_handle(sa->sa_bustag,
- sa->sa_promvaddrs[0], &esc->sc_reg);
- } else {
- if (sbus_bus_map(sa->sa_bustag,
- sa->sa_slot, sa->sa_offset, sa->sa_size,
- 0, &esc->sc_reg) != 0) {
- printf("%s @ sbus: cannot map registers\n",
- self->dv_xname);
- return;
- }
- }
-
- if (sa->sa_nintr == 0) {
- /*
- * No interrupt properties: we quit; this might
- * happen on e.g. a Sparc X terminal.
- */
- printf("\n%s: no interrupt property\n", self->dv_xname);
- return;
- }
-
- esc->sc_pri = sa->sa_pri;
-
-#if 0
- /* add me to the sbus structures */
- esc->sc_sd.sd_reset = (void *) ncr53c9x_reset;
- sbus_establish(&esc->sc_sd, &sc->sc_dev);
-#endif
-
- if (strcmp("ptscII", sa->sa_name) == 0) {
- espattach(esc, &esp_sbus_glue1);
- } else {
- espattach(esc, &esp_sbus_glue);
- }
-}
-
-void
-espattach_dma(parent, self, aux)
- struct device *parent, *self;
- void *aux;
-{
- struct esp_softc *esc = (void *)self;
- struct ncr53c9x_softc *sc = &esc->sc_ncr53c9x;
- struct sbus_attach_args *sa = aux;
-
- if (strcmp("ptscII", sa->sa_name) == 0) {
- return;
- }
-
- esc->sc_bustag = sa->sa_bustag;
- esc->sc_dmatag = sa->sa_dmatag;
-
- sc->sc_id = PROM_getpropint(sa->sa_node, "initiator-id", 7);
- sc->sc_freq = PROM_getpropint(sa->sa_node, "clock-frequency", -1);
-
- esc->sc_dma = (struct lsi64854_softc *)parent;
- esc->sc_dma->sc_client = sc;
-
- /*
- * Map my registers in, if they aren't already in virtual
- * address space.
- */
- if (sa->sa_npromvaddrs) {
- sbus_promaddr_to_handle(sa->sa_bustag,
- sa->sa_promvaddrs[0], &esc->sc_reg);
- } else {
- if (sbus_bus_map(sa->sa_bustag,
- sa->sa_slot, sa->sa_offset, sa->sa_size,
- 0, &esc->sc_reg) != 0) {
- printf("%s @ dma: cannot map registers\n",
- self->dv_xname);
- return;
- }
- }
-
- if (sa->sa_nintr == 0) {
- /*
- * No interrupt properties: we quit; this might
- * happen on e.g. a Sparc X terminal.
- */
- printf("\n%s: no interrupt property\n", self->dv_xname);
- return;
- }
-
- esc->sc_pri = sa->sa_pri;
-
-#if 0
- /* Assume SBus is grandparent */
- esc->sc_sd.sd_reset = (void *) ncr53c9x_reset;
- sbus_establish(&esc->sc_sd, parent);
-#endif
-
- espattach(esc, &esp_sbus_glue);
+ return (ENXIO);
}
-
/*
* Attach this instance, and then all the sub-devices
*/
void
-espattach(esc, gluep)
- struct esp_softc *esc;
- struct ncr53c9x_glue *gluep;
+espattach(struct esp_softc *esc, struct ncr53c9x_glue *gluep)
{
struct ncr53c9x_softc *sc = &esc->sc_ncr53c9x;
void *icookie;
@@ -635,27 +489,6 @@
bus_space_write_1(esc->sc_bustag, esc->sc_reg, reg * 4, v);
}
-u_char
-esp_rdreg1(sc, reg)
- struct ncr53c9x_softc *sc;
- int reg;
-{
- struct esp_softc *esc = (struct esp_softc *)sc;
-
- return (bus_space_read_1(esc->sc_bustag, esc->sc_reg, reg));
-}
-
-void
-esp_wrreg1(sc, reg, v)
- struct ncr53c9x_softc *sc;
- int reg;
- u_char v;
-{
- struct esp_softc *esc = (struct esp_softc *)sc;
-
- bus_space_write_1(esc->sc_bustag, esc->sc_reg, reg, v);
-}
-
int
esp_dma_isintr(sc)
struct ncr53c9x_softc *sc;
More information about the p4-projects
mailing list