* Copyright (c) 1982 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
* @(#)rk.c 6.2 (Berkeley) %G%
#include "../machine/pte.h"
#include "../vaxuba/ubareg.h"
#include "../vaxuba/rkreg.h"
u_short rkstd
[] = { 0777440 };
short rk_off
[] = { 0, 241, 0, -1, -1, -1, 393, -1 };
register struct rkdevice
*rkaddr
= (struct rkdevice
*)ubamem(io
->i_unit
, rkstd
[0]);
if (rk_off
[io
->i_boff
] == -1 ||
io
->i_boff
< 0 || io
->i_boff
> 7)
io
->i_boff
= rk_off
[io
->i_boff
] * NRKSECT
*NRKTRK
;
rkaddr
->rkcs2
= RKCS2_SCLR
;
register struct rkdevice
*rkaddr
= (struct rkdevice
*)ubamem(io
->i_unit
, rkstd
[0]);
ubinfo
= ubasetup(io
, 1);
cn
= bn
/(NRKSECT
*NRKTRK
);
tn
= (bn
/ NRKSECT
) % NRKTRK
;
rkaddr
->rkcs1
= RK_CDT
|RK_PACK
|RK_GO
;
rkaddr
->rkcs1
= RK_CDT
|RK_DCLR
|RK_GO
;
rkaddr
->rkda
= sn
| (tn
<< 8);
rkaddr
->rkwc
= -(io
->i_cc
>> 1);
com
= RK_CDT
|((ubinfo
>>8)&0x300)|RK_GO
;
while ((rkaddr
->rkds
& RKDS_SVAL
) == 0)
if (rkaddr
->rkcs1
& RK_CERR
) {
printf("rk error: (cyl,trk,sec)=(%d,%d,%d) cs2=%b er=%b\n",
cn
, tn
, sn
, rkaddr
->rkcs2
, RKCS2_BITS
,
rkaddr
->rker
, RKER_BITS
);
rkaddr
->rkcs1
= RK_CDT
|RK_DCLR
|RK_GO
;
printf("rk: unrecovered error\n");
printf("rk: recovered by retry\n");
register struct rkdevice
*rkaddr
;
while ((rkaddr
->rkcs1
& RK_CRDY
) == 0)