--- Net2/arch/i386/isa/wd.c 2018/04/24 18:04:01 1.1 +++ Net2/arch/i386/isa/wd.c 2018/04/24 18:04:56 1.1.1.2 @@ -62,9 +62,9 @@ #define RETRIES 5 /* number of retries before giving up */ #define MAXTRANSFER 32 /* max size of transfer in page clusters */ -#define wdctlr(dev) ((minor(dev) & 0x80) >> 7) -#define wdunit(dev) ((minor(dev) & 0x60) >> 5) -#define wdpart(dev) ((minor(dev) & 0x1f)) +#define wdctlr(dev) ((minor(dev) & 0x20) >> 5) +#define wdunit(dev) ((minor(dev) & 0x18) >> 3) +#define wdpart(dev) ((minor(dev) & 0x7)) #define b_cylin b_resid /* cylinder number for doing IO to */ /* shares an entry in the buf struct */ @@ -142,7 +142,7 @@ struct disklabel dflt_sizes = { 8192, {{21600, 0, 0,0,0,0}, /* A=root filesystem */ - {21600, 40, 0,0,0,0}, + {21600, 21600, 0,0,0,0}, {660890, 0, 0,0,0,0}, /* C=whole disk */ {216000, 80, 0,0,0,0}, {0, 0, 0,0,0,0}, @@ -446,10 +446,8 @@ loop: else*/ outb(wdc+wd_command, (bp->b_flags & B_READ)? WDCC_READ : WDCC_WRITE); -#ifdef WDDEBUG - dprintf(DDSK,"sector %d cylin %d head %d addr %x sts %x\n", - sector, cylin, head, addr, inb(wdc+wd_altsts)); -#endif + /*printf("sector %d cylin %d head %d addr %x sts %x\n", + sector, cylin, head, addr, inb(wdc+wd_altsts));*/ } /* If this is a read operation, just go away until it's done. */ @@ -691,8 +689,9 @@ wdopen(dev, flags, fmt) } else { printf("wd%d: %s bad-sector file\n", unit, (bp->b_flags & B_ERROR) ? "can't read" : "format error in"); - error = ENXIO ; - du->dk_state = OPENRAW; + /*error = ENXIO ; + du->dk_state = OPENRAW;*/ + du->dk_state = OPEN; } done: bp->b_flags = B_INVAL | B_AGE; @@ -705,7 +704,7 @@ done: * that overlaps another partition which is open * unless one is the "raw" partition (whole disk). */ -#define RAWPART 8 /* 'x' partition */ /* XXX */ +#define RAWPART 2 /* 'c' partition */ /* XXX */ if ((du->dk_openpart & mask) == 0 && part != RAWPART) { int start, end; @@ -799,7 +798,7 @@ retry: #ifdef WDDEBUG dprintf(DDSK,"rdlabel "); #endif -if( cyloffset < 0 || cyloffset > 8192) cyloffset=0; +/*if( cyloffset < 0 || cyloffset > 8192) */cyloffset=0; /* * Read in sector LABELSECTOR to get the pack label * and geometry. @@ -807,6 +806,7 @@ if( cyloffset < 0 || cyloffset > 8192) c outb(wdc+wd_precomp, 0xff);/* sometimes this is head bit 3 */ outb(wdc+wd_seccnt, 1); outb(wdc+wd_sector, LABELSECTOR+1); +/*printf("sec %d ", LABELSECTOR);*/ /*if (bp->b_dev == bootdev) { (wdc+wd_cyl_lo = cyloffset & 0xff; (wdc+wd_cyl_hi = cyloffset >> 8; @@ -836,7 +836,9 @@ if( cyloffset < 0 || cyloffset > 8192) c du->dk_dd = * (struct disklabel *) (bp->b_un.b_addr + LABELOFFSET); } else { - printf("wd%d: bad disk label\n", du->dk_unit); + printf("wd%d: bad disk label (%x)\n", du->dk_unit, + ((struct disklabel *)(bp->b_un.b_addr + LABELOFFSET))->d_magic +); du->dk_state = OPENRAW; } @@ -871,8 +873,8 @@ badopen: wdsetctlr(dev, du) dev_t dev; struct disk *du; { int stat; - outb(wdc+wd_cyl_lo, du->dk_dd.d_ncylinders); - outb(wdc+wd_cyl_hi, (du->dk_dd.d_ncylinders)>>8); + outb(wdc+wd_cyl_lo, du->dk_dd.d_ncylinders+1); + outb(wdc+wd_cyl_hi, (du->dk_dd.d_ncylinders+1)>>8); outb(wdc+wd_sdh, WDSD_IBM | (wdunit(dev) << 4) + du->dk_dd.d_ntracks-1); outb(wdc+wd_seccnt, du->dk_dd.d_nsectors); outb(wdc+wd_command, 0x91); @@ -892,6 +894,7 @@ wdclose(dev, flags, fmt) du = &wddrives[wdunit(dev)]; du->dk_open-- ; /*if (du->dk_open == 0) du->dk_state = CLOSED ; does not work */ + return(0); } wdioctl(dev,cmd,addr,flag) @@ -1005,30 +1008,6 @@ wdioctl(dev,cmd,addr,flag) return (wdstrategy(bp)); }*/ -/* - * Routines to do raw IO for a unit. - */ -wdread(dev, uio) /* character read routine */ - dev_t dev; - struct uio *uio; -{ - int unit = wdunit(dev) ; - - if (unit >= NWD) return(ENXIO); - return(physio(wdstrategy, &rwdbuf[unit], dev, B_READ, minphys, uio)); -} - - -wdwrite(dev, uio) /* character write routine */ - dev_t dev; - struct uio *uio; -{ - int unit = wdunit(dev) ; - - if (unit >= NWD) return(ENXIO); - return(physio(wdstrategy, &rwdbuf[unit], dev, B_WRITE, minphys, uio)); -} - wdsize(dev) dev_t dev; {