u_short tsstd
[] = { 0772520 };
u_short ts_uba
; /* Unibus address of ts structure */
struct tsdevice
*tsaddr
= 0;
static struct ts
*ts_ubaddr
;
tsaddr
= ubamem(io
->i_unit
, tsstd
[0]);
while ((tsaddr
->tssr
& TS_SSR
)==0) {
printf("ts: not ready\n");
if (tsaddr
->tssr
&TS_OFL
) {
if (tsaddr
->tssr
&TS_NBA
) {
ctsbuf
.i_ma
= (caddr_t
) &ts
;
ctsbuf
.i_cc
= sizeof(ts
);
ts_ubaddr
= (struct ts
*)ubasetup(&ctsbuf
, 2);
ts_uba
= (u_short
)((long)ts_ubaddr
+ (((long)ts_ubaddr
>>16)&03));
ts
.ts_char
.char_addr
= (int)&ts_ubaddr
->ts_sts
;
ts
.ts_char
.char_size
= sizeof(ts
.ts_sts
);
ts
.ts_char
.char_mode
= TS_ESS
;
ts
.ts_cmd
.c_cmd
= TS_ACK
|TS_SETCHR
;
i
= (int)&ts_ubaddr
->ts_char
;
ts
.ts_cmd
.c_hiba
= (i
>>16)&3;
ts
.ts_cmd
.c_size
= sizeof(ts
.ts_char
);
if (io
->i_cc
= io
->i_boff
)
tsstrategy(io
, TS_SFORWF
);
register int errcnt
, info
= 0;
while ((tsaddr
->tssr
& TS_SSR
) == 0)
if (func
== TS_REW
|| func
== TS_SFORWF
)
ts
.ts_cmd
.c_repcnt
= io
->i_cc
;
ts
.ts_cmd
.c_size
= io
->i_cc
;
ts
.ts_cmd
.c_hiba
= (info
>>16)&3;
ts
.ts_cmd
.c_cmd
= TS_ACK
|TS_CVC
|func
;
while ((tsaddr
->tssr
& TS_SSR
) == 0);
if (ts
.ts_sts
.s_xs0
& TS_TMK
)
if (tsaddr
->tssr
& TS_SC
) {
printf("ts tape error: er=%b, xs0=%b",
ts
.ts_sts
.s_xs0
, TSXS0_BITS
);
printf("ts: unrecovered error\n");
if (func
== TS_RCOM
|| func
== TS_WCOM
)
printf("ts: recovered by retry\n");
return (io
->i_cc
- ts
.ts_sts
.s_rbpcr
);