Port-sgimips archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

wdsc(4): testing device/softc split



I'm doing some work on various device drivers for NetBSD/acorn26, and this 
has ended up touching the wdsc(4) driver on NetBSD/sgimips.  I've compiled 
it, but my Indy isn't working so I'm not in a position to test it.  I've 
attached a patch, and I've uploaded a -current kernel to 
<http://bjh21.me.uk/junk/netbsd.ip2x.wdsc-split>.  I'd be very grateful if 
someone with a wdsc(4) could test this and tell me whether I seem to have 
broken anything.  If no-one tells me it's broken in the next week or so, 
I'll commit it.

Thanks in advance.

-- 
Ben Harris                                                   
<bjh21%NetBSD.org@localhost>
Portmaster, NetBSD/acorn26               <http://www.NetBSD.org/Ports/acorn26/>
? dev/ic/i82595.c
? dev/ic/i82595var.h
? dev/ic/r6522reg.h
? dev/ic/r6551.c
? dev/ic/r6551reg.h
? dev/ic/r6551var.h
Index: dev/podulebus/sec.c
===================================================================
RCS file: /cvsroot/src/sys/dev/podulebus/sec.c,v
retrieving revision 1.12
diff -u -r1.12 sec.c
--- dev/podulebus/sec.c 20 Jan 2009 20:45:11 -0000      1.12
+++ dev/podulebus/sec.c 21 Jan 2009 22:02:18 -0000
@@ -109,7 +109,7 @@
 
 void sec_dumpdma(void *arg);
 
-CFATTACH_DECL(sec, sizeof(struct sec_softc),
+CFATTACH_DECL_NEW(sec, sizeof(struct sec_softc),
     sec_match, sec_attach, NULL, NULL);
 
 static inline void
@@ -169,6 +169,7 @@
        struct sec_softc *sc = device_private(self);
        int i;
 
+       sc->sc_sbic.sc_dev = self;
        /* Set up bus spaces */
        sc->sc_pod_t = pa->pa_fast_t;
        bus_space_map(pa->pa_fast_t, pa->pa_fast_base, 0x1000, 0,
@@ -494,7 +495,7 @@
 
        dmac_write(sc, NEC71071_CHANNEL, 0);
        printf("%s: DMA state: cur count %02x%02x cur addr %02x%02x%02x ",
-           device_xname(&sc->sc_sbic.sc_dev),
+           device_xname(sc->sc_sbic.sc_dev),
            dmac_read(sc, NEC71071_COUNTHI), dmac_read(sc, NEC71071_COUNTLO),
            dmac_read(sc, NEC71071_ADDRHI), dmac_read(sc, NEC71071_ADDRMID),
            dmac_read(sc, NEC71071_ADDRLO));
@@ -505,11 +506,12 @@
            dmac_read(sc, NEC71071_ADDRLO));
        printf("%s: DMA state: dctrl %1x%02x mode %02x status %02x req %02x "
            "mask %02x\n",
-           device_xname(&sc->sc_sbic.sc_dev), dmac_read(sc, NEC71071_DCTRL2),
+           device_xname(sc->sc_sbic.sc_dev), dmac_read(sc, NEC71071_DCTRL2),
            dmac_read(sc, NEC71071_DCTRL1), dmac_read(sc, NEC71071_MODE),
            dmac_read(sc, NEC71071_STATUS), dmac_read(sc, NEC71071_REQUEST),
            dmac_read(sc, NEC71071_MASK));
-       printf("%s: soft DMA state: %zd@%p%s%d\n", 
device_xname(&sc->sc_sbic.sc_dev),
+       printf("%s: soft DMA state: %zd@%p%s%d\n",
+           device_xname(sc->sc_sbic.sc_dev),
            sc->sc_dmalen, sc->sc_dmaaddr, sc->sc_dmain ? "<-" : "->",
            sc->sc_dmaoff);
 }
Index: dev/ic/wd33c93.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/wd33c93.c,v
retrieving revision 1.20
diff -u -r1.20 wd33c93.c
--- dev/ic/wd33c93.c    20 Jan 2009 20:57:26 -0000      1.20
+++ dev/ic/wd33c93.c    21 Jan 2009 22:02:21 -0000
@@ -189,7 +189,7 @@
        struct scsipi_adapter *adapt = &dev->sc_adapter;
        struct scsipi_channel *chan = &dev->sc_channel;
 
-       adapt->adapt_dev = &dev->sc_dev;
+       adapt->adapt_dev = dev->sc_dev;
        adapt->adapt_nchannels = 1;
        adapt->adapt_openings = 256;
        adapt->adapt_max_periph = 256; /* Max tags per device */
@@ -212,11 +212,11 @@
         * config_found() to make sure the adatper is disabled.
         */
        if (scsipi_adapter_addref(&dev->sc_adapter) != 0) {
-               aprint_error_dev(&dev->sc_dev, "unable to enable controller\n");
+               aprint_error_dev(dev->sc_dev, "unable to enable controller\n");
                return;
        }
 
-       dev->sc_cfflags = device_cfdata(&dev->sc_dev)->cf_flags;
+       dev->sc_cfflags = device_cfdata(dev->sc_dev)->cf_flags;
        wd33c93_init(dev);
        
        aprint_normal(": %s (%d.%d MHz clock, %s, SCSI ID %d)\n",
@@ -227,14 +227,14 @@
            (dev->sc_dmamode == SBIC_CTL_BURST_DMA) ? "BURST DMA" : "PIO",
            dev->sc_channel.chan_id);
        if (dev->sc_chip == SBIC_CHIP_WD33C93B) {
-               aprint_normal_dev(&dev->sc_dev, "microcode revision 0x%02x",
+               aprint_normal_dev(dev->sc_dev, "microcode revision 0x%02x",
                    dev->sc_rev);
                if (dev->sc_minsyncperiod < 50)
                        aprint_normal(", Fast SCSI");
                aprint_normal("\n");
        }
 
-       dev->sc_child = config_found(&dev->sc_dev, &dev->sc_channel,
+       dev->sc_child = config_found(dev->sc_dev, &dev->sc_channel,
                                     scsiprint);
        scsipi_adapter_delref(&dev->sc_adapter);
 }
@@ -549,7 +549,8 @@
 void
 wd33c93_scsi_request(struct scsipi_channel *chan, scsipi_adapter_req_t req, 
void *arg)
 {
-       struct wd33c93_softc *dev = (void *)chan->chan_adapter->adapt_dev;
+       struct wd33c93_softc *dev =
+           device_private(chan->chan_adapter->adapt_dev);
        struct scsipi_xfer *xs;
        struct scsipi_periph *periph;
        struct wd33c93_acb *acb;
@@ -1545,7 +1546,7 @@
                        case SEND_TAG:
                                printf("%s: tagged queuing rejected: "
                                    "target %d\n",
-                                   device_xname(&dev->sc_dev), dev->target);
+                                   device_xname(dev->sc_dev), dev->target);
                                ti->flags &= ~T_TAG;
                                li = TINFO_LUN(ti, dev->lun);
                                if (acb->tag_type &&
@@ -1560,7 +1561,7 @@
 
                        case SEND_SDTR:
                                printf("%s: sync transfer rejected: target 
%d\n",
-                                   device_xname(&dev->sc_dev), dev->target);
+                                   device_xname(dev->sc_dev), dev->target);
 
                                dev->sc_flags &= ~SBICF_SYNCNEGO;
                                ti->flags &= ~(T_NEGOTIATE | T_SYNCMODE);
@@ -1730,7 +1731,7 @@
                if ((msgaddr[0]!=MSG_SIMPLE_Q_TAG) || (dev->sc_msgify==0)) {
                        printf("%s: TAG reselect without IDENTIFY;"
                            " MSG %x; sending DEVICE RESET\n",
-                           device_xname(&dev->sc_dev), msgaddr[0]);
+                           device_xname(dev->sc_dev), msgaddr[0]);
                        goto reset;
                }
                SBIC_DEBUG(TAGS, ("TAG %x/%x\n", msgaddr[0], msgaddr[1]));
@@ -1751,7 +1752,7 @@
                        printf("%s: reselect without IDENTIFY;"
                            " MSG %x;"
                            " sending DEVICE RESET\n",
-                           device_xname(&dev->sc_dev), msgaddr[0]);
+                           device_xname(dev->sc_dev), msgaddr[0]);
                        goto reset;
                }
                break;
@@ -1832,7 +1833,7 @@
                case SEND_IDENTIFY:
                        if (dev->sc_state != SBIC_CONNECTED) {
                                printf("%s at line %d: no nexus\n",
-                                   device_xname(&dev->sc_dev), __LINE__);
+                                   device_xname(dev->sc_dev), __LINE__);
                        }
                        dev->sc_omsg[0] =
                            MSG_IDENTIFY(acb->xs->xs_periph->periph_lun, 0);
@@ -1840,7 +1841,7 @@
                case SEND_TAG:
                        if (dev->sc_state != SBIC_CONNECTED) {
                                printf("%s at line %d: no nexus\n",
-                                   device_xname(&dev->sc_dev), __LINE__);
+                                   device_xname(dev->sc_dev), __LINE__);
                        }
                        dev->sc_omsg[0] = acb->tag_type;
                        dev->sc_omsg[1] = acb->tag_id;
@@ -2095,7 +2096,7 @@
                        /* If we didn't get an interrupt, somethink's up */
                        if ((asr & SBIC_ASR_INT) == 0) {
                                printf("%s: Reselect without identify? asr 
%x\n",
-                                   device_xname(&dev->sc_dev), asr);
+                                   device_xname(dev->sc_dev), asr);
                                newlun = 0; /* XXXX */
                        } else {
                                /*
@@ -2178,7 +2179,7 @@
                 * for the best.
                 */
                SBIC_DEBUG(RSEL, ("%s: reselect with active command\n",
-                              device_xname(&dev->sc_dev)));
+                              device_xname(dev->sc_dev)));
                ti = &dev->sc_tinfo[dev->target];
                li = TINFO_LUN(ti, dev->lun);
                li->state = L_STATE_IDLE;
@@ -2214,7 +2215,7 @@
        if (acb == NULL) {
                printf("%s: reselect from target %d lun %d tag %x:%x "
                    "with no nexus; sending ABORT\n",
-                   device_xname(&dev->sc_dev), target, lun, tag_type, tag_id);
+                   device_xname(dev->sc_dev), target, lun, tag_type, tag_id);
                goto abort;
        }
 
@@ -2279,7 +2280,7 @@
        struct scsipi_xfer *xs = acb->xs;
        struct scsipi_periph *periph = xs->xs_periph;
        struct wd33c93_softc *dev =
-           (void *)periph->periph_channel->chan_adapter->adapt_dev;
+           device_private(periph->periph_channel->chan_adapter->adapt_dev);
        int s, asr;
 
        s = splbio();
@@ -2289,7 +2290,7 @@
        scsipi_printaddr(periph);
        printf("%s: timed out; asr=0x%02x [acb %p (flags 0x%x, dleft %zx)], "
            "<state %d, nexus %p, resid %lx, msg(q %x,o %x)>",
-           device_xname(&dev->sc_dev), asr, acb, acb->flags, acb->dleft,
+           device_xname(dev->sc_dev), asr, acb, acb->flags, acb->dleft,
            dev->sc_state, dev->sc_nexus, (long)dev->sc_dleft,
            dev->sc_msgpriq, dev->sc_msgout);
 
Index: dev/ic/wd33c93var.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/wd33c93var.h,v
retrieving revision 1.7
diff -u -r1.7 wd33c93var.h
--- dev/ic/wd33c93var.h 21 May 2007 19:25:55 -0000      1.7
+++ dev/ic/wd33c93var.h 21 Jan 2009 22:02:21 -0000
@@ -118,7 +118,7 @@
 #define TINFO_LUN(t, l)        ((t)->lun[(l)])
 
 struct wd33c93_softc {
-       struct device   sc_dev;
+       device_t        sc_dev;
 
        struct scsipi_channel sc_channel; /* proto for sub devices */
        struct scsipi_adapter sc_adapter;
Index: arch/sgimips/hpc/wdsc.c
===================================================================
RCS file: /cvsroot/src/sys/arch/sgimips/hpc/wdsc.c,v
retrieving revision 1.25
diff -u -r1.25 wdsc.c
--- arch/sgimips/hpc/wdsc.c     10 May 2008 15:31:05 -0000      1.25
+++ arch/sgimips/hpc/wdsc.c     21 Jan 2009 22:02:21 -0000
@@ -80,7 +80,7 @@
 void   wdsc_attach     (struct device *, struct device *, void *);
 int    wdsc_match      (struct device *, struct cfdata *, void *);
 
-CFATTACH_DECL(wdsc, sizeof(struct wdsc_softc),
+CFATTACH_DECL_NEW(wdsc, sizeof(struct wdsc_softc),
     wdsc_match, wdsc_attach, NULL, NULL);
 
 int    wdsc_dmasetup   (struct wd33c93_softc *, void **,size_t *,
@@ -138,11 +138,12 @@
 void
 wdsc_attach(struct device *pdp, struct device *dp, void *auxp)
 {
-       struct wd33c93_softc *sc = (void *)dp;
-       struct wdsc_softc *wsc = (void *)dp;
+       struct wd33c93_softc *sc = device_private(dp);
+       struct wdsc_softc *wsc = device_private(dp);
        struct hpc_attach_args *haa = auxp;
        int err;
 
+       sc->sc_dev = dp;
        sc->sc_regt = haa->ha_st;
        wsc->sc_dmat = haa->ha_dmat;
 
@@ -180,7 +181,7 @@
        sc->sc_dmamode = SBIC_CTL_BURST_DMA;
 
        evcnt_attach_dynamic(&wsc->sc_intrcnt, EVCNT_TYPE_INTR, NULL,
-                            sc->sc_dev.dv_xname, "intr");
+           device_xname(sc->sc_dev), "intr");
 
        if ((cpu_intr_establish(haa->ha_irq, IPL_BIO,
             wdsc_scsiintr, sc)) == NULL) {
@@ -219,7 +220,7 @@
                                NULL /* kernel address */,
                                BUS_DMA_NOWAIT)) != 0)
                        panic("%s: bus_dmamap_load err=%d",
-                             dev->sc_dev.dv_xname, err);
+                           device_xname(dev->sc_dev), err);
 
                hpcdma_sglist_create(dsc, wsc->sc_dmamap);
                wsc->sc_flags |= WDSC_DMA_MAPLOADED;


Home | Main Index | Thread Index | Old Index