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 ---