summary |
tags |
clone url |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
94e0949)
thing wrong is record length
SCCS-vsn: sys/vax/mba/ht.c 4.12
-/* ht.c 4.11 81/03/09 */
+/* ht.c 4.12 81/03/09 */
#include "tu.h"
#if NHT > 0
#include "tu.h"
#if NHT > 0
* TM03/TU?? tape driver
*
* TODO:
* TM03/TU?? tape driver
*
* TODO:
* test tape with disk on same mba
* test tape with disk on same mba
- * test dump code
- * try a mounted filesys on tape to check positioning code
* test ioctl's
* see how many rewind interrups we get if we kick when not at BOT
* test ioctl's
* see how many rewind interrups we get if we kick when not at BOT
+ * test writing on write prot tape and error thereby
+ * check rle error on block tape code
*/
#include "../h/param.h"
#include "../h/systm.h"
*/
#include "../h/param.h"
#include "../h/systm.h"
((minor(dev)&H_1600BPI)?HTTC_1600BPI:HTTC_800BPI)|
HTTC_PDP11|sc->sc_slave;
if ((sc->sc_dsreg & HTDS_MOL) == 0 ||
((minor(dev)&H_1600BPI)?HTTC_1600BPI:HTTC_800BPI)|
HTTC_PDP11|sc->sc_slave;
if ((sc->sc_dsreg & HTDS_MOL) == 0 ||
+ (flag&FWRITE) && (sc->sc_dsreg&HTDS_WRL) ||
(sc->sc_dsreg & HTDS_BOT) == 0 && (flag&FWRITE) &&
(sc->sc_dsreg & HTDS_BOT) == 0 && (flag&FWRITE) &&
- dens != sc->sc_dens ||
- (flag & (FREAD|FWRITE)) == FWRITE && sc->sc_dsreg&HTDS_WRL) {
u.u_error = EIO;
return;
}
u.u_error = EIO;
return;
}
bp = &chtbuf[HTUNIT(dev)];
(void) spl5();
while (bp->b_flags&B_BUSY) {
bp = &chtbuf[HTUNIT(dev)];
(void) spl5();
while (bp->b_flags&B_BUSY) {
- if (bp->b_command == H_REWIND && bp->b_repcnt == 0 &&
- (bp->b_flags&B_DONE))
+ if(bp->b_repcnt == 0 && (bp->b_flags&B_DONE))
break;
bp->b_flags |= B_WANTED;
sleep((caddr_t)bp, PRIBIO);
break;
bp->b_flags |= B_WANTED;
sleep((caddr_t)bp, PRIBIO);
daddr_t blkno;
htaddr->httc = sc->sc_dens;
daddr_t blkno;
htaddr->httc = sc->sc_dens;
+ if (bp == &chtbuf[HTUNIT(bp->b_dev)] && bp->b_command == H_SENSE) {
+ htaddr->htcs1 = HT_SENSE|HT_GO;
+ mbclrattn(mi);
+ }
sc->sc_dsreg = htaddr->htds;
sc->sc_erreg = htaddr->hter;
sc->sc_resid = htaddr->htfc;
sc->sc_dsreg = htaddr->htds;
sc->sc_erreg = htaddr->hter;
sc->sc_resid = htaddr->htfc;
if (bp == &rhtbuf[HTUNIT(bp->b_dev)]) {
er &= ~HTER_FCE;
mbs &= ~(MBSR_DTABT|MBSR_MBEXC);
if (bp == &rhtbuf[HTUNIT(bp->b_dev)]) {
er &= ~HTER_FCE;
mbs &= ~(MBSR_DTABT|MBSR_MBEXC);
if (bp->b_flags & B_READ && ds & HTDS_PES)
er &= ~(HTER_CSITM|HTER_CORCRC);
if (er&HTER_HARD || mbs&MBSR_EBITS || (ds&HTDS_MOL) == 0 ||
er && ++mi->mi_tab.b_errcnt >= 7) {
if ((ds & HTDS_MOL) == 0 && sc->sc_openf > 0)
sc->sc_openf = -1;
if (bp->b_flags & B_READ && ds & HTDS_PES)
er &= ~(HTER_CSITM|HTER_CORCRC);
if (er&HTER_HARD || mbs&MBSR_EBITS || (ds&HTDS_MOL) == 0 ||
er && ++mi->mi_tab.b_errcnt >= 7) {
if ((ds & HTDS_MOL) == 0 && sc->sc_openf > 0)
sc->sc_openf = -1;
+ if ((er&HTER_HARD) == HTER_FCE &&
+ (mbs&MBSR_EBITS) == (MBSR_DTABT|MBSR_MBEXC) &&
+ (ds&HTDS_MOL))
+ goto noprint;
printf("tu%d: hard error bn%d mbsr=%b er=%b\n",
TUUNIT(bp->b_dev), bp->b_blkno,
mbsr, mbsr_bits,
MASKREG(htaddr->hter), HTER_BITS);
printf("tu%d: hard error bn%d mbsr=%b er=%b\n",
TUUNIT(bp->b_dev), bp->b_blkno,
mbsr, mbsr_bits,
MASKREG(htaddr->hter), HTER_BITS);
bp->b_flags |= B_ERROR;
return (MBD_DONE);
}
bp->b_flags |= B_ERROR;
return (MBD_DONE);
}
if ((ds & (HTDS_ERR|HTDS_MOL)) != HTDS_MOL) {
if ((ds & HTDS_MOL) == 0 && sc->sc_openf > 0)
sc->sc_openf = -1;
if ((ds & (HTDS_ERR|HTDS_MOL)) != HTDS_MOL) {
if ((ds & HTDS_MOL) == 0 && sc->sc_openf > 0)
sc->sc_openf = -1;
- printf("tu%d: hard error bn%d er=%b ds=%b\n",
+ printf("tu%d: hard error bn%d er=%b\n",
TUUNIT(bp->b_dev), bp->b_blkno,
TUUNIT(bp->b_dev), bp->b_blkno,
- sc->sc_erreg, HTER_BITS, sc->sc_dsreg, HTDS_BITS);
+ sc->sc_erreg, HTER_BITS);
bp->b_flags |= B_ERROR;
return (MBN_DONE);
}
bp->b_flags |= B_ERROR;
return (MBN_DONE);
}
return (ENXIO);
mi = phys(htinfo[0], struct mba_device *);
mp = phys(mi->mi_hd, struct mba_hd *)->mh_physmba;
return (ENXIO);
mi = phys(htinfo[0], struct mba_device *);
mp = phys(mi->mi_hd, struct mba_hd *)->mh_physmba;
htaddr = (struct htdevice *)&mp->mba_drv[mi->mi_drive];
htaddr->httc = HTTC_PDP11|HTTC_1600BPI;
htaddr->htcs1 = HT_DCLR|HT_GO;
htaddr = (struct htdevice *)&mp->mba_drv[mi->mi_drive];
htaddr->httc = HTTC_PDP11|HTTC_1600BPI;
htaddr->htcs1 = HT_DCLR|HT_GO;
start += blk;
num -= blk;
}
start += blk;
num -= blk;
}
- htwait(htaddr);
- htaddr->htcs1 = HT_REW|HT_GO;
hteof(htaddr);
hteof(htaddr);
hteof(htaddr);
hteof(htaddr);
+ htwait(htaddr);
+ if (htaddr->htcs&HTDS_ERR)
+ return (EIO);
+ htaddr->htcs1 = HT_REW|HT_GO;