fdc.c (0722d6aba3943012e411513ac8b26c69634fe35b) | fdc.c (ab3f746966bcd7ebe250f3f198c4a7624456cc27) |
---|---|
1/* 2 * Copyright (c) 1990 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Don Ahn. 7 * 8 * Copyright (c) 1993, 1994 by --- 29 unchanged lines hidden (view full) --- 38 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 39 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 40 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 41 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 42 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 43 * SUCH DAMAGE. 44 * 45 * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 | 1/* 2 * Copyright (c) 1990 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Don Ahn. 7 * 8 * Copyright (c) 1993, 1994 by --- 29 unchanged lines hidden (view full) --- 38 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 39 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 40 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 41 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 42 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 43 * SUCH DAMAGE. 44 * 45 * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 |
46 * $Id: fd.c,v 1.104 1997/09/23 22:14:43 gibbs Exp $ | 46 * $Id: fd.c,v 1.105 1997/10/19 13:12:02 joerg Exp $ |
47 * 48 */ 49 50#include "ft.h" 51#if NFT < 1 52#undef NFDC 53#endif 54#include "fd.h" --- 1266 unchanged lines hidden (view full) --- 1321 fdblk = 128 << fd->ft->secsize; 1322 if (fdc->fd && (fd != fdc->fd)) 1323 { 1324 printf("fd%d: confused fd pointers\n", fdu); 1325 } 1326 read = bp->b_flags & B_READ; 1327 format = bp->b_flags & B_FORMAT; 1328 if(format) { | 47 * 48 */ 49 50#include "ft.h" 51#if NFT < 1 52#undef NFDC 53#endif 54#include "fd.h" --- 1266 unchanged lines hidden (view full) --- 1321 fdblk = 128 << fd->ft->secsize; 1322 if (fdc->fd && (fd != fdc->fd)) 1323 { 1324 printf("fd%d: confused fd pointers\n", fdu); 1325 } 1326 read = bp->b_flags & B_READ; 1327 format = bp->b_flags & B_FORMAT; 1328 if(format) { |
1329 finfo = (struct fd_formb *)bp->b_un.b_addr; | 1329 finfo = (struct fd_formb *)bp->b_data; |
1330 fd->skip = (char *)&(finfo->fd_formb_cylno(0)) 1331 - (char *)finfo; 1332 } 1333 if (fdc->state == DOSEEK || fdc->state == SEEKCOMPLETE) { 1334 blknum = (unsigned) bp->b_blkno * DEV_BSIZE/fdblk + 1335 fd->skip/fdblk; 1336 b_cylinder = blknum / (fd->ft->sectrac * fd->ft->heads); 1337 } --- 125 unchanged lines hidden (view full) --- 1463 printf( 1464 "fd%d: Seek to cyl %d failed; am at cyl %d (ST0 = 0x%x)\n", 1465 fdu, descyl, cyl, st0); 1466 return(retrier(fdcu)); 1467 } 1468 } 1469 1470 fd->track = b_cylinder; | 1330 fd->skip = (char *)&(finfo->fd_formb_cylno(0)) 1331 - (char *)finfo; 1332 } 1333 if (fdc->state == DOSEEK || fdc->state == SEEKCOMPLETE) { 1334 blknum = (unsigned) bp->b_blkno * DEV_BSIZE/fdblk + 1335 fd->skip/fdblk; 1336 b_cylinder = blknum / (fd->ft->sectrac * fd->ft->heads); 1337 } --- 125 unchanged lines hidden (view full) --- 1463 printf( 1464 "fd%d: Seek to cyl %d failed; am at cyl %d (ST0 = 0x%x)\n", 1465 fdu, descyl, cyl, st0); 1466 return(retrier(fdcu)); 1467 } 1468 } 1469 1470 fd->track = b_cylinder; |
1471 isa_dmastart(bp->b_flags, bp->b_un.b_addr+fd->skip, | 1471 isa_dmastart(bp->b_flags, bp->b_data+fd->skip, |
1472 format ? bp->b_bcount : fdblk, fdc->dmachan); 1473 sectrac = fd->ft->sectrac; 1474 sec = blknum % (sectrac * fd->ft->heads); 1475 head = sec / sectrac; 1476 sec = sec % sectrac + 1; 1477 fd->hddrv = ((head&1)<<2)+fdu; 1478 1479 if(format || !read) --- 75 unchanged lines hidden (view full) --- 1555 return retrier(fdcu); 1556 } 1557 1558 fdc->state = IOTIMEDOUT; 1559 1560 /* FALLTHROUGH */ 1561 1562 case IOTIMEDOUT: | 1472 format ? bp->b_bcount : fdblk, fdc->dmachan); 1473 sectrac = fd->ft->sectrac; 1474 sec = blknum % (sectrac * fd->ft->heads); 1475 head = sec / sectrac; 1476 sec = sec % sectrac + 1; 1477 fd->hddrv = ((head&1)<<2)+fdu; 1478 1479 if(format || !read) --- 75 unchanged lines hidden (view full) --- 1555 return retrier(fdcu); 1556 } 1557 1558 fdc->state = IOTIMEDOUT; 1559 1560 /* FALLTHROUGH */ 1561 1562 case IOTIMEDOUT: |
1563 isa_dmadone(bp->b_flags, bp->b_un.b_addr+fd->skip, | 1563 isa_dmadone(bp->b_flags, bp->b_data+fd->skip, |
1564 format ? bp->b_bcount : fdblk, fdc->dmachan); 1565 if (fdc->status[0] & NE7_ST0_IC) 1566 { 1567 if ((fdc->status[0] & NE7_ST0_IC) == NE7_ST0_IC_AT 1568 && fdc->status[1] & NE7_ST1_OR) { 1569 /* 1570 * DMA overrun. Someone hogged the bus 1571 * and didn't release it in time for the --- 224 unchanged lines hidden (view full) --- 1796 /* 1797 * calculate a fake blkno, so fdstrategy() would initiate a 1798 * seek to the requested cylinder 1799 */ 1800 bp->b_blkno = (finfo->cyl * (fd->ft->sectrac * fd->ft->heads) 1801 + finfo->head * fd->ft->sectrac) * fdblk / DEV_BSIZE; 1802 1803 bp->b_bcount = sizeof(struct fd_idfield_data) * finfo->fd_formb_nsecs; | 1564 format ? bp->b_bcount : fdblk, fdc->dmachan); 1565 if (fdc->status[0] & NE7_ST0_IC) 1566 { 1567 if ((fdc->status[0] & NE7_ST0_IC) == NE7_ST0_IC_AT 1568 && fdc->status[1] & NE7_ST1_OR) { 1569 /* 1570 * DMA overrun. Someone hogged the bus 1571 * and didn't release it in time for the --- 224 unchanged lines hidden (view full) --- 1796 /* 1797 * calculate a fake blkno, so fdstrategy() would initiate a 1798 * seek to the requested cylinder 1799 */ 1800 bp->b_blkno = (finfo->cyl * (fd->ft->sectrac * fd->ft->heads) 1801 + finfo->head * fd->ft->sectrac) * fdblk / DEV_BSIZE; 1802 1803 bp->b_bcount = sizeof(struct fd_idfield_data) * finfo->fd_formb_nsecs; |
1804 bp->b_un.b_addr = (caddr_t)finfo; | 1804 bp->b_data = (caddr_t)finfo; |
1805 1806 /* now do the format */ 1807 fdstrategy(bp); 1808 1809 /* ...and wait for it to complete */ 1810 s = splbio(); 1811 while(!(bp->b_flags & B_DONE)) 1812 { --- 165 unchanged lines hidden --- | 1805 1806 /* now do the format */ 1807 fdstrategy(bp); 1808 1809 /* ...and wait for it to complete */ 1810 s = splbio(); 1811 while(!(bp->b_flags & B_DONE)) 1812 { --- 165 unchanged lines hidden --- |