- 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;