- 918, /* # of cylinders per unit */
- 17*15, /* # of sectors per cylinder */
- 918*15*17, /* # of sectors per unit */
+ 1224, /* # of cylinders per unit */
+ 36*15, /* # of sectors per cylinder */
+ 1224*15*36, /* # of sectors per unit */
- 7560, 0, /* A=root filesystem */
- 7560, 56,
- 123930, 0, /* C=whole disk */
+ 21600, 0, /* A=root filesystem */
+ 21600, 40,
+ 660890, 0, /* C=whole disk */
+ 216000, 80,
if(du->dk_skip==0) du->dk_bc = bp->b_bcount;
cylin = blknum / secpercyl;
head = (blknum % secpercyl) / secpertrk;
if(du->dk_skip==0) du->dk_bc = bp->b_bcount;
cylin = blknum / secpercyl;
head = (blknum % secpercyl) / secpertrk;
/*
* See if the current block is in the bad block list.
* (If we have one, and not formatting.)
*/
/*
* See if the current block is in the bad block list.
* (If we have one, and not formatting.)
*/
for (bt_ptr = dkbad[unit].bt_bad; bt_ptr->bt_cyl != -1; bt_ptr++) {
if (bt_ptr->bt_cyl > cylin)
/* Sorted list, and we passed our cylinder. quit. */
for (bt_ptr = dkbad[unit].bt_bad; bt_ptr->bt_cyl != -1; bt_ptr++) {
if (bt_ptr->bt_cyl > cylin)
/* Sorted list, and we passed our cylinder. quit. */
+ if(du->dk_skip==0 || wd_sebyse) {
+ if(wdtab.b_errcnt && (bp->b_flags & B_READ) == 0) du->dk_bc += 512;
+ while ((inb(wdc+wd_status) & WDCS_BUSY) != 0) ;
+ /*while ((inb(wdc+wd_status) & WDCS_DRQ)) inb(wdc+wd_data);*/
outb(wdc+wd_precomp, 0xff);
/*wr(wdc+wd_precomp, du->dk_dd.dk_precompcyl / 4);*/
/*if (bp->b_flags & B_FORMAT) {
wr(wdc+wd_sector, du->dk_dd.dk_gap3);
wr(wdc+wd_seccnt, du->dk_dd.dk_nsectors);
} else {*/
outb(wdc+wd_precomp, 0xff);
/*wr(wdc+wd_precomp, du->dk_dd.dk_precompcyl / 4);*/
/*if (bp->b_flags & B_FORMAT) {
wr(wdc+wd_sector, du->dk_dd.dk_gap3);
wr(wdc+wd_seccnt, du->dk_dd.dk_nsectors);
} else {*/
outb(wdc+wd_sector, sector);
outb(wdc+wd_cyl_lo, cylin);
outb(wdc+wd_sector, sector);
outb(wdc+wd_cyl_lo, cylin);
/* Set up the SDH register (select drive). */
outb(wdc+wd_sdh, WDSD_IBM | (unit<<4) | (head & 0xf));
/* Set up the SDH register (select drive). */
outb(wdc+wd_sdh, WDSD_IBM | (unit<<4) | (head & 0xf));
/*if (bp->b_flags & B_FORMAT)
wr(wdc+wd_command, WDCC_FORMAT);
/*if (bp->b_flags & B_FORMAT)
wr(wdc+wd_command, WDCC_FORMAT);
- if(du->dk_skip == 0)
- dprintf(DDSK,"sector %d cylin %d head %d addr %x\n",
- sector, cylin, head, addr);
+ dprintf(DDSK,"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. */
if (bp->b_flags & B_READ) return;
/* Ready to send data? */
/* If this is a read operation, just go away until it's done. */
if (bp->b_flags & B_READ) return;
/* Ready to send data? */
- { register buff_addr;
-
- buff_addr = addr;
- buff_addr += (du->dk_skip * 512)/* & CLOFSET*/;
- outsw (wdc+wd_data, buff_addr, 256);
- }
+ outsw (wdc+wd_data, addr+du->dk_skip*512, 256);
wd_errsector = (bp->b_cylin * du->dk_dd.dk_secpercyl) +
(((unsigned long) bp->b_blkno * DEV_BSIZE /
du->dk_dd.dk_secsize) % du->dk_dd.dk_secpercyl) +
wd_errsector = (bp->b_cylin * du->dk_dd.dk_secpercyl) +
(((unsigned long) bp->b_blkno * DEV_BSIZE /
du->dk_dd.dk_secsize) % du->dk_dd.dk_secpercyl) +
printf("wd%d%c: ", du->dk_unit, partch);
printf(
"hard %s error, sn %d bn %d status %b error %b\n",
printf("wd%d%c: ", du->dk_unit, partch);
printf(
"hard %s error, sn %d bn %d status %b error %b\n",
du->dk_unit, partch, wd_errsector,
wd_errbn);
}
du->dk_unit, partch, wd_errsector,
wd_errbn);
}
/*dprintf(DDSK,"addr %x\n", (int)bp->b_un.b_addr + du->dk_skip * 512);*/
insw(wdc+wd_data,(int)bp->b_un.b_addr + du->dk_skip * 512 ,chk);
du->dk_bc -= 2*chk;
/*dprintf(DDSK,"addr %x\n", (int)bp->b_un.b_addr + du->dk_skip * 512);*/
insw(wdc+wd_data,(int)bp->b_un.b_addr + du->dk_skip * 512 ,chk);
du->dk_bc -= 2*chk;
/* done with this transfer, with or without error */
wdtab.b_actf = dp->b_forw;
wdtab.b_errcnt = 0;
/* done with this transfer, with or without error */
wdtab.b_actf = dp->b_forw;
wdtab.b_errcnt = 0;
} while ((bp->b_flags & B_ERROR) && (i += 2) < 10 &&
i < du->dk_dd.dk_nsectors);
db = (struct dkbad *)(bp->b_un.b_addr);
} while ((bp->b_flags & B_ERROR) && (i += 2) < 10 &&
i < du->dk_dd.dk_nsectors);
db = (struct dkbad *)(bp->b_un.b_addr);
printf("wd%d: recal", du->dk_unit);
if (unit == 0) {
printf(": status %b error %b\n",
printf("wd%d: recal", du->dk_unit);
if (unit == 0) {
printf(": status %b error %b\n",