Add copyright
[unix-history] / usr / src / sys / vax / stand / uda.c
index e60f294..5692b35 100644 (file)
@@ -1,14 +1,14 @@
-/*     uda.c   4.2     82/07/15        */
+/*     uda.c   6.2     84/10/04        */
 
 /*
  * UDA50/RAxx disk device driver
  */
 
 /*
  * UDA50/RAxx disk device driver
  */
+#include "../machine/pte.h"
 
 #include "../h/param.h"
 #include "../h/inode.h"
 
 #include "../h/param.h"
 #include "../h/inode.h"
-#include "../h/pte.h"
-#include "../h/ubareg.h"
 #include "../h/fs.h"
 #include "../h/fs.h"
+
 #include "saio.h"
 #include "savax.h"
 
 #include "saio.h"
 #include "savax.h"
 
 #define        NRSP    (1<<NRSPL2)
 #define        NCMD    (1<<NCMDL2)
 
 #define        NRSP    (1<<NRSPL2)
 #define        NCMD    (1<<NCMDL2)
 
-#include "../h/udareg.h"
-#include "../h/mscp.h"
-
+#include "../vaxuba/udareg.h"
+#include "../vaxuba/ubareg.h"
+#include "../vax/mscp.h"
 
 
-u_short udastd[] = { 0777550 };
+u_short udastd[] = { 0772150 };
 
 struct iob     cudbuf;
 
 
 struct iob     cudbuf;
 
@@ -42,43 +42,53 @@ int uda_off[] = { 0, 15884, 0, -1, -1, -1, 49324, 131404 };
 
 struct mscp *udcmd();
 
 
 struct mscp *udcmd();
 
-udopen(io)
+raopen(io)
        register struct iob *io;
 {
        register struct mscp *mp;
        register struct iob *io;
 {
        register struct mscp *mp;
+       static int udainit;
        int i;
 
        if (udaddr == 0)
                udaddr = (struct udadevice *)ubamem(io->i_unit, udastd[0]);
        if (ud_ubaddr == 0) {
        int i;
 
        if (udaddr == 0)
                udaddr = (struct udadevice *)ubamem(io->i_unit, udastd[0]);
        if (ud_ubaddr == 0) {
+               /*
+                * Initialise cudbuf.i_unit so that controllers
+                * on UNIBUSes other than 0 can be used.
+                */
+               cudbuf.i_unit = io->i_unit;
                cudbuf.i_ma = (caddr_t)&uda;
                cudbuf.i_cc = sizeof(uda);
                ud_ubaddr = (struct uda *)ubasetup(&cudbuf, 2);
        }
                cudbuf.i_ma = (caddr_t)&uda;
                cudbuf.i_cc = sizeof(uda);
                ud_ubaddr = (struct uda *)ubasetup(&cudbuf, 2);
        }
-       udaddr->udaip = 0;
-       while ((udaddr->udasa & UDA_STEP1) == 0)
-               ;
-       udaddr->udasa = UDA_ERR;
-       while ((udaddr->udasa & UDA_STEP2) == 0)
-               ;
-       udaddr->udasa = (short)&ud_ubaddr->uda_ca.ca_ringbase;
-       while ((udaddr->udasa & UDA_STEP3) == 0)
-               ;
-       udaddr->udasa = (short)(((int)&ud_ubaddr->uda_ca.ca_ringbase) >> 16);
-       while ((udaddr->udasa & UDA_STEP4) == 0)
-               ;
-       udaddr->udasa = UDA_GO;
-       uda.uda_ca.ca_rspdsc[0] = (long)&ud_ubaddr->uda_rsp.mscp_cmdref;
-       uda.uda_ca.ca_cmddsc[0] = (long)&ud_ubaddr->uda_cmd.mscp_cmdref;
-       uda.uda_cmd.mscp_cntflgs = 0;
-       if (udcmd(M_OP_STCON) == 0) {
-               _stop("ra: open error, STCON");
-               return;
-       }
-       uda.uda_cmd.mscp_unit = io->i_unit&7;
-       if (udcmd(M_OP_ONLIN) == 0) {
-               _stop("ra: open error, ONLIN");
-               return;
+       if (udainit == 0) {
+               udaddr->udaip = 0;
+               while ((udaddr->udasa & UDA_STEP1) == 0)
+                       ;
+               udaddr->udasa = UDA_ERR;
+               while ((udaddr->udasa & UDA_STEP2) == 0)
+                       ;
+               udaddr->udasa = (short)&ud_ubaddr->uda_ca.ca_ringbase;
+               while ((udaddr->udasa & UDA_STEP3) == 0)
+                       ;
+               udaddr->udasa =
+                       (short)(((int)&ud_ubaddr->uda_ca.ca_ringbase) >> 16);
+               while ((udaddr->udasa & UDA_STEP4) == 0)
+                       ;
+               udaddr->udasa = UDA_GO;
+               uda.uda_ca.ca_rspdsc[0] = (long)&ud_ubaddr->uda_rsp.mscp_cmdref;
+               uda.uda_ca.ca_cmddsc[0] = (long)&ud_ubaddr->uda_cmd.mscp_cmdref;
+               uda.uda_cmd.mscp_cntflgs = 0;
+               if (udcmd(M_OP_STCON) == 0) {
+                       _stop("ra: open error, STCON");
+                       return;
+               }
+               uda.uda_cmd.mscp_unit = io->i_unit&7;
+               if (udcmd(M_OP_ONLIN) == 0) {
+                       _stop("ra: open error, ONLIN");
+                       return;
+               }
+               udainit = 1;
        }
        if (io->i_boff < 0 || io->i_boff > 7 || uda_off[io->i_boff] == -1)
                _stop("ra: bad unit");
        }
        if (io->i_boff < 0 || io->i_boff > 7 || uda_off[io->i_boff] == -1)
                _stop("ra: bad unit");
@@ -112,7 +122,7 @@ udcmd(op)
        return(mp);
 }
 
        return(mp);
 }
 
-udstrategy(io, func)
+rastrategy(io, func)
        register struct iob *io;
 {
        register struct mscp *mp;
        register struct iob *io;
 {
        register struct mscp *mp;
@@ -132,3 +142,13 @@ udstrategy(io, func)
        ubafree(io, ubinfo);
        return(io->i_cc);
 }
        ubafree(io, ubinfo);
        return(io->i_cc);
 }
+
+/*ARGSUSED*/
+raioctl(io, cmd, arg)
+       struct iob *io;
+       int cmd;
+       caddr_t arg;
+{
+
+       return (ECMD);
+}