sun merge
[unix-history] / usr / src / sys / vax / uba / idc.c
index 1e130c0..a76be37 100644 (file)
@@ -1,12 +1,12 @@
-/*     idc.c   4.3     82/08/13        */
+/*     idc.c   4.11    82/12/17        */
 
 #include "rb.h"
 #if NIDC > 0
 
 #include "rb.h"
 #if NIDC > 0
-int idcdebug = 0;
-#define printd if(idcdebug)printf
-int idctrb[1000];
-int *trp = idctrb;
-#define        trace(a,b) {*trp++ = (int)a; *trp++ = (int)b; if(trp>&idctrb[998])trp=idctrb;}
+int    idcdebug = 0;
+#define        printd if(idcdebug)printf
+int    idctrb[1000];
+int    *trp = idctrb;
+#define        trace(a,b) {*trp++ = *(int*)a; *trp++ = (int)b; if(trp>&idctrb[998])trp=idctrb;}
 /*
  * IDC (RB730) disk driver
  *
 /*
  * IDC (RB730) disk driver
  *
@@ -19,24 +19,25 @@ int *trp = idctrb;
  *     ecc
  *     dump
  */
  *     ecc
  *     dump
  */
+#include "../machine/pte.h"
+
 #include "../h/param.h"
 #include "../h/systm.h"
 #include "../h/buf.h"
 #include "../h/conf.h"
 #include "../h/dir.h"
 #include "../h/user.h"
 #include "../h/param.h"
 #include "../h/systm.h"
 #include "../h/buf.h"
 #include "../h/conf.h"
 #include "../h/dir.h"
 #include "../h/user.h"
-#include "../h/pte.h"
 #include "../h/map.h"
 #include "../h/vm.h"
 #include "../h/map.h"
 #include "../h/vm.h"
-#include "../h/ubareg.h"
-#include "../h/ubavar.h"
 #include "../h/dk.h"
 #include "../h/dk.h"
-#include "../h/cpu.h"
 #include "../h/cmap.h"
 #include "../h/dkbad.h"
 #include "../h/uio.h"
 
 #include "../h/cmap.h"
 #include "../h/dkbad.h"
 #include "../h/uio.h"
 
-#include "../h/idcreg.h"
+#include "../vax/cpu.h"
+#include "../vaxuba/ubareg.h"
+#include "../vaxuba/ubavar.h"
+#include "../vaxuba/idcreg.h"
 
 struct idc_softc {
        int     sc_bcnt;        /* number of bytes to transfer */
 
 struct idc_softc {
        int     sc_bcnt;        /* number of bytes to transfer */
@@ -117,6 +118,7 @@ daddr_t     dkblock();
 
 int    idcwstart, idcwticks, idcwatch();
 
 
 int    idcwstart, idcwticks, idcwatch();
 
+/*ARGSUSED*/
 idcprobe(reg)
        caddr_t reg;
 {
 idcprobe(reg)
        caddr_t reg;
 {
@@ -134,6 +136,7 @@ idcprobe(reg)
        return (sizeof (struct idcdevice));
 }
 
        return (sizeof (struct idcdevice));
 }
 
+/*ARGSUSED*/
 idcslave(ui, reg)
        struct uba_device *ui;
        caddr_t reg;
 idcslave(ui, reg)
        struct uba_device *ui;
        caddr_t reg;
@@ -145,17 +148,20 @@ idcslave(ui, reg)
        ui->ui_type = 0;
        idcaddr->idcmpr = IDCGS_GETSTAT;
        idcaddr->idccsr = IDC_GETSTAT|(ui->ui_slave<<8);
        ui->ui_type = 0;
        idcaddr->idcmpr = IDCGS_GETSTAT;
        idcaddr->idccsr = IDC_GETSTAT|(ui->ui_slave<<8);
-       idcwait(idcaddr, 0);
+       (void) idcwait(idcaddr, 0);
        i = idcaddr->idcmpr;
        idcaddr->idccsr = IDC_CRDY|(1<<(ui->ui_slave+16));
        /* read header to synchronize microcode */
        i = idcaddr->idcmpr;
        idcaddr->idccsr = IDC_CRDY|(1<<(ui->ui_slave+16));
        /* read header to synchronize microcode */
-       idcwait(idcaddr, 0);
+       (void) idcwait(idcaddr, 0);
        idcaddr->idccsr = (ui->ui_slave<<8)|IDC_RHDR;
        idcaddr->idccsr = (ui->ui_slave<<8)|IDC_RHDR;
-       idcwait(idcaddr, 0);
+       (void) idcwait(idcaddr, 0);
        if (idcaddr->idccsr & IDC_ERR)
                return (0);
        i = idcaddr->idcmpr;            /* read header word 1 */
        i = idcaddr->idcmpr;            /* read header word 2 */
        if (idcaddr->idccsr & IDC_ERR)
                return (0);
        i = idcaddr->idcmpr;            /* read header word 1 */
        i = idcaddr->idcmpr;            /* read header word 2 */
+#ifdef lint
+       i = i;
+#endif
        if (idcaddr->idccsr&IDC_R80)
                ui->ui_type = 1;
        return (1);
        if (idcaddr->idccsr&IDC_R80)
                ui->ui_type = 1;
        return (1);
@@ -183,6 +189,17 @@ idcattach(ui)
        idccyl[ui->ui_unit].dar_dar = -1;
        ui->ui_flags = 0;
 }
        idccyl[ui->ui_unit].dar_dar = -1;
        ui->ui_flags = 0;
 }
+
+idcopen(dev)
+       dev_t dev;
+{
+       register int unit = minor(dev) >> 3;
+       register struct uba_device *ui;
+
+       if (unit >= NRB || (ui = idcdinfo[unit]) == 0 || ui->ui_alive == 0)
+               return (ENXIO);
+       return (0);
+}
  
 idcstrategy(bp)
        register struct buf *bp;
  
 idcstrategy(bp)
        register struct buf *bp;
@@ -209,11 +226,11 @@ idcstrategy(bp)
                bn *= 2;
        bp->b_cylin = bn/st->nspc + st->sizes[xunit].cyloff;
        (void) spl5();
                bn *= 2;
        bp->b_cylin = bn/st->nspc + st->sizes[xunit].cyloff;
        (void) spl5();
-       trace('strt',bp);
+       trace("strt",bp);
        dp = &idcutab[ui->ui_unit];
        disksort(dp, bp);
        if (dp->b_active == 0) {
        dp = &idcutab[ui->ui_unit];
        disksort(dp, bp);
        if (dp->b_active == 0) {
-               trace('!act',dp);
+               trace("!act",dp);
                (void) idcustart(ui);
                bp = &ui->ui_mi->um_tab;
                if (bp->b_actf && bp->b_active == 0)
                (void) idcustart(ui);
                bp = &ui->ui_mi->um_tab;
                if (bp->b_actf && bp->b_active == 0)
@@ -245,25 +262,25 @@ idcustart(ui)
        dp = &idcutab[ui->ui_unit];
        um = ui->ui_mi;
        unit = ui->ui_slave;
        dp = &idcutab[ui->ui_unit];
        um = ui->ui_mi;
        unit = ui->ui_slave;
-       trace('ust', dp);
+       trace("ust", dp);
        idcaddr = (struct idcdevice *)um->um_addr;
        if (um->um_tab.b_active) {
                idc_softc.sc_softas |= 1<<unit;
        idcaddr = (struct idcdevice *)um->um_addr;
        if (um->um_tab.b_active) {
                idc_softc.sc_softas |= 1<<unit;
-               trace('umac',idc_softc.sc_softas);
+               trace("umac",idc_softc.sc_softas);
                return (0);
        }
        if ((bp = dp->b_actf) == NULL) {
                return (0);
        }
        if ((bp = dp->b_actf) == NULL) {
-               trace('!bp',0);
+               trace("!bp",0);
                return (0);
        }
        if (dp->b_active) {
                return (0);
        }
        if (dp->b_active) {
-               trace('dpac',dp->b_active);
+               trace("dpac",dp->b_active);
                goto done;
        }
        dp->b_active = 1;
        /* CHECK DRIVE READY? */
        bn = dkblock(bp);
                goto done;
        }
        dp->b_active = 1;
        /* CHECK DRIVE READY? */
        bn = dkblock(bp);
-       trace('seek', bn);
+       trace("seek", bn);
        if (ui->ui_type == 0)
                bn *= 2;
        st = &idcst[ui->ui_type];
        if (ui->ui_type == 0)
                bn *= 2;
        st = &idcst[ui->ui_type];
@@ -322,12 +339,12 @@ idcustart(ui)
        return (1);
 done:
        if (dp->b_active != 2) {
        return (1);
 done:
        if (dp->b_active != 2) {
-               trace('!=2',dp->b_active);
+               trace("!=2",dp->b_active);
                dp->b_forw = NULL;
                if (um->um_tab.b_actf == NULL)
                        um->um_tab.b_actf = dp;
                else {
                dp->b_forw = NULL;
                if (um->um_tab.b_actf == NULL)
                        um->um_tab.b_actf = dp;
                else {
-                       trace('!NUL',um->um_tab.b_actl);
+                       trace("!NUL",um->um_tab.b_actl);
                        um->um_tab.b_actl->b_forw = dp;
                }
                um->um_tab.b_actl = dp;
                        um->um_tab.b_actl->b_forw = dp;
                }
                um->um_tab.b_actl = dp;
@@ -349,18 +366,18 @@ idcstart(um)
 
 loop:
        if ((dp = um->um_tab.b_actf) == NULL) {
 
 loop:
        if ((dp = um->um_tab.b_actf) == NULL) {
-               trace('nodp',um);
+               trace("nodp",um);
                return (0);
        }
        if ((bp = dp->b_actf) == NULL) {
                return (0);
        }
        if ((bp = dp->b_actf) == NULL) {
-               trace('nobp', dp);
+               trace("nobp", dp);
                um->um_tab.b_actf = dp->b_forw;
                goto loop;
        }
        um->um_tab.b_active = 1;
        ui = idcdinfo[dkunit(bp)];
        bn = dkblock(bp);
                um->um_tab.b_actf = dp->b_forw;
                goto loop;
        }
        um->um_tab.b_active = 1;
        ui = idcdinfo[dkunit(bp)];
        bn = dkblock(bp);
-       trace('star',bp);
+       trace("star",bp);
        if (ui->ui_type == 0)
                bn *= 2;
        sc = &idc_softc;
        if (ui->ui_type == 0)
                bn *= 2;
        sc = &idc_softc;
@@ -416,7 +433,7 @@ idcdgo(um)
        idcaddr->idcdar = sc->sc_dar;
        printd("idcdgo, ubinfo 0x%x, cmd 0x%x\n", um->um_ubinfo, um->um_cmd);
        idcaddr->idccsr = um->um_cmd;
        idcaddr->idcdar = sc->sc_dar;
        printd("idcdgo, ubinfo 0x%x, cmd 0x%x\n", um->um_ubinfo, um->um_cmd);
        idcaddr->idccsr = um->um_cmd;
-       trace('go', um);
+       trace("go", um);
        um->um_tab.b_active = 2;
        /*** CLEAR SPURIOUS ATTN ON R80? ***/
 }
        um->um_tab.b_active = 2;
        /*** CLEAR SPURIOUS ATTN ON R80? ***/
 }
@@ -435,7 +452,7 @@ idcintr(idc)
        printd("idcintr, idccsr 0x%x", idcaddr->idccsr);
 top:
        idcwticks = 0;
        printd("idcintr, idccsr 0x%x", idcaddr->idccsr);
 top:
        idcwticks = 0;
-       trace('intr', um->um_tab.b_active);
+       trace("intr", um->um_tab.b_active);
        if (um->um_tab.b_active == 2) {
                /*
                 * Process a data transfer complete interrupt.
        if (um->um_tab.b_active == 2) {
                /*
                 * Process a data transfer complete interrupt.
@@ -451,7 +468,7 @@ top:
                        if (er & IDC_DE) {
                                idcaddr->idcmpr = IDCGS_GETSTAT;
                                idcaddr->idccsr = IDC_GETSTAT|(unit<<8);
                        if (er & IDC_DE) {
                                idcaddr->idcmpr = IDCGS_GETSTAT;
                                idcaddr->idccsr = IDC_GETSTAT|(unit<<8);
-                               idcwait(idcaddr, 0);
+                               (void) idcwait(idcaddr, 0);
                                ds = idcaddr->idcmpr;
                                idcaddr->idccsr =
                                    IDC_IE|IDC_CRDY|(1<<(unit+16));
                                ds = idcaddr->idcmpr;
                                idcaddr->idccsr =
                                    IDC_IE|IDC_CRDY|(1<<(unit+16));
@@ -558,7 +575,7 @@ cont:
                dp->b_active = 0;
                dp->b_errcnt = 0;
                dp->b_actf = bp->av_forw;
                dp->b_active = 0;
                dp->b_errcnt = 0;
                dp->b_actf = bp->av_forw;
-               trace('done', dp); trace(um->um_tab.b_actf, dp->b_actf);
+               trace("done", dp); trace(&um->um_tab.b_actf, dp->b_actf);
                bp->b_resid = sc->sc_resid;
                printd(", iodone, resid 0x%x\n", bp->b_resid);
                iodone(bp);
                bp->b_resid = sc->sc_resid;
                printd(", iodone, resid 0x%x\n", bp->b_resid);
                iodone(bp);
@@ -591,7 +608,7 @@ cont:
        idcaddr->idccsr = IDC_IE|IDC_CRDY|(as&IDC_ATTN);
        as = ((as >> 16) & 0xf) | sc->sc_softas;
        sc->sc_softas = 0;
        idcaddr->idccsr = IDC_IE|IDC_CRDY|(as&IDC_ATTN);
        as = ((as >> 16) & 0xf) | sc->sc_softas;
        sc->sc_softas = 0;
-       trace('as', as);
+       trace("as", as);
        printd(", as %o", as);
        for (unit = 0; unit < NRB; unit++)
                if (as & (1<<unit)) {
        printd(", as %o", as);
        for (unit = 0; unit < NRB; unit++)
                if (as & (1<<unit)) {
@@ -611,21 +628,21 @@ cont:
                }
        printd("\n");
        if (um->um_tab.b_actf && um->um_tab.b_active == 0) {
                }
        printd("\n");
        if (um->um_tab.b_actf && um->um_tab.b_active == 0) {
-               trace('stum',um->um_tab.b_actf);
-               idcstart(um);
+               trace("stum",um->um_tab.b_actf);
+               (void) idcstart(um);
        }
 }
 
        }
 }
 
-idcwait(addr, cnt)
+idcwait(addr, n)
        register struct idcdevice *addr;
        register struct idcdevice *addr;
-       register int cnt;
+       register int n;
 {
        register int i;
 
 {
        register int i;
 
-       while (--cnt && (addr->idccsr & IDC_CRDY) == 0)
+       while (--n && (addr->idccsr & IDC_CRDY) == 0)
                for (i = 10; i; i--)
                        ;
                for (i = 10; i; i--)
                        ;
-       return (cnt);
+       return (n);
 }
 
 idcread(dev, uio)
 }
 
 idcread(dev, uio)
@@ -635,20 +652,19 @@ idcread(dev, uio)
        register int unit = minor(dev) >> 3;
 
        if (unit >= NRB)
        register int unit = minor(dev) >> 3;
 
        if (unit >= NRB)
-               u.u_error = ENXIO;
-       else
-               physio(idcstrategy, &ridcbuf[unit], dev, B_READ, minphys, uio);
+               return (ENXIO);
+       return (physio(idcstrategy, &ridcbuf[unit], dev, B_READ, minphys, uio));
 }
 
 }
 
-idcwrite(dev)
+idcwrite(dev, uio)
        dev_t dev;
        dev_t dev;
+       struct uio *uio;
 {
        register int unit = minor(dev) >> 3;
 
        if (unit >= NRB)
 {
        register int unit = minor(dev) >> 3;
 
        if (unit >= NRB)
-               u.u_error = ENXIO;
-       else
-               physio(idcstrategy, &ridcbuf[unit], dev, B_WRITE, minphys, 0);
+               return (ENXIO);
+       return (physio(idcstrategy, &ridcbuf[unit], dev, B_WRITE, minphys, uio));
 }
 
 idcecc(ui)
 }
 
 idcecc(ui)
@@ -710,7 +726,7 @@ idcreset(uban)
        um->um_tab.b_actf = um->um_tab.b_actl = 0;
        if (um->um_ubinfo) {
                printf("<%d>", (um->um_ubinfo>>28)&0xf);
        um->um_tab.b_actf = um->um_tab.b_actl = 0;
        if (um->um_ubinfo) {
                printf("<%d>", (um->um_ubinfo>>28)&0xf);
-               ubadone(um);
+               um->um_ubinfo = 0;
        }
        for (unit = 0; unit < NRB; unit++) {
                if ((ui = idcdinfo[unit]) == 0 || ui->ui_alive == 0)
        }
        for (unit = 0; unit < NRB; unit++) {
                if ((ui = idcdinfo[unit]) == 0 || ui->ui_alive == 0)
@@ -746,6 +762,7 @@ active:
        }
 }
 
        }
 }
 
+/*ARGSUSED*/
 idcdump(dev)
        dev_t dev;
 {
 idcdump(dev)
        dev_t dev;
 {
@@ -774,7 +791,7 @@ idcdump(dev)
        idcaddr->idccs1 = IDC_CCLR;
        idcaddr->idccs2 = unit;
        idcaddr->idccs1 = idctypes[ui->ui_type]|IDC_DCLR|IDC_GO;
        idcaddr->idccs1 = IDC_CCLR;
        idcaddr->idccs2 = unit;
        idcaddr->idccs1 = idctypes[ui->ui_type]|IDC_DCLR|IDC_GO;
-       idcwait(idcaddr);
+       (void) idcwait(idcaddr);
        dbsize = 20 or 31;
 ***/
        st = &idcst[ui->ui_type];
        dbsize = 20 or 31;
 ***/
        st = &idcst[ui->ui_type];
@@ -804,7 +821,7 @@ idcdump(dev)
                *--rp = 0;
                *--rp = -blk*NBPG / sizeof (short);
                *--rp = idctypes[ui->ui_type]|IDC_GO|IDC_WRITE;
                *--rp = 0;
                *--rp = -blk*NBPG / sizeof (short);
                *--rp = idctypes[ui->ui_type]|IDC_GO|IDC_WRITE;
-               idcwait(idcaddr);
+               (void) idcwait(idcaddr);
 ***/
                if (idcaddr->idccsr & IDC_ERR)
                        return (EIO);
 ***/
                if (idcaddr->idccsr & IDC_ERR)
                        return (EIO);