--- Net2/arch/i386/isa/wt.c 2018/04/24 18:04:01 1.1.1.1 +++ Net2/arch/i386/isa/wt.c 2018/04/24 18:07:03 1.1.1.3 @@ -66,8 +66,8 @@ /* * HISTORY * $Log: wt.c,v $ - * Revision 1.1.1.1 2018/04/24 18:04:01 root - * Net/2 + * Revision 1.1.1.3 2018/04/24 18:07:03 root + * 386BSD 0.1 * * Revision 2.2.1.3 90/01/08 13:29:38 rvb * Add Intel copyright. @@ -305,18 +305,27 @@ register struct buf *bp; #ifdef DEBUG debug("bpaddr %x\n", adr1); #endif - ucnt1 = bp->b_bcount; + ucnt1 = bp->b_bcount % NBPG; ucnt2 = 0; adr2 = 0; #ifdef DEBUG debug("WTstart: adr1 %lx cnt %x\n", adr1, ucnt1); #endif + /* 64K boundary? (XXX) */ if (ftoseg(adr1) != ftoseg(adr1 + (unsigned) ucnt1 - 1)) { adr2 = (adr1 & 0xffff0000L) + 0x10000L; ucnt2 = (adr1 + ucnt1) - adr2; ucnt1 -= ucnt2; } + /* page boundary? */ + if (trunc_page(adr1) != trunc_page(adr1 + (unsigned) ucnt1 - 1)) + { unsigned u; + u = NBPG - ((unsigned)bp->b_un.b_addr & (NBPG-1)); + adr2 = kvtop(bp->b_un.b_addr + u); + ucnt2 = ucnt1 - u; + ucnt1 = u; + } /* at file marks and end of tape, we just return '0 bytes available' */ if (wtflags & TPVOL) { bp->b_resid = bp->b_bcount; @@ -489,41 +498,6 @@ struct buf *bp; return(0); } -wt_minphys(bp) -struct buf *bp; -{ - if (bp->b_bcount > PAGESIZ) - bp->b_bcount = PAGESIZ; -} - -/* - * raw read routine - */ -wtread(dev, uio) -struct uio *uio; -{ - if (wtflags & TPSESS) { - return(EIO); - } - physio(wtrawio, &rwtbuf, dev, B_READ, wt_minphys, uio); - return(0); -} - -/* - * raw write routine - */ -wtwrite(dev, uio) -struct uio *uio; -{ - if (wtflags & TPSESS) { - return(EIO); - } - physio(wtrawio, &rwtbuf, dev, B_WRITE, wt_minphys, uio); - return(0); -} - - - /* * ioctl routine * for user level QIC commands only @@ -573,7 +547,7 @@ int dev, flag; #ifdef DEBUG debug("Waiting for rew to finish\n"); #endif - delay(1000000); /* delay one second */ + DELAY(1000000); /* delay one second */ } /* Only do reset and select when tape light is off, and tape is rewound. * This allows multiple volumes. */ @@ -600,6 +574,7 @@ int dev, flag; wtflags |= TPWRITE; rwtbuf.b_flags = 0; myproc = curproc; /* for comparison */ +#ifdef not switch(TP_DENS(dev)) { case 0: cmds(0x28); @@ -613,6 +588,7 @@ break; case 3: cmds(0x24); } +#endif return(0); } @@ -831,7 +807,7 @@ rdyexc(ticks) if (!(s & READY)) /* check if controller is ready */ break; s = splbio(); - delay((ticks/HZ)*1000000); /* */ + DELAY((ticks/HZ)*1000000); /* */ splx(s); } #ifdef DEBUG @@ -1041,7 +1017,7 @@ t_reset() register i; mbits |= RESET; outb(CTLPORT, mbits); /* send reset */ - delay(20); + DELAY(20); mbits &= ~RESET; outb(CTLPORT, mbits); /* turn off reset */ if ((inb(STATPORT) & RESETMASK) == RESETVAL) @@ -1154,16 +1130,6 @@ wtlinit() dmareg = wtchan+wtchan; } -/* - * delay i microseconds - */ -delay(i) -register int i; -{ - while (i-- > 0) - DELAY(1000); -} - wtsize() { }