- if (++io->i_errcnt > 27 || (er1 & HPER1_HARD) ||
- (!ML11 && (er2 & HPER2_HARD))) {
- /*
- * The last ditch effort to bad sector forward
- * below will probably fail since mba byte ctr
- * (bcr) is different for BSE and ECC errors and
- * the wrong block will be revectored to if one
- * has 2 contiguous bad blocks and reads the second.
- * For now, we can probably just let a header CRC
- * error be handled like a BSE since no data will
- * have been transferred and the bcr should the same
- * as it would with a BSE error.
- * --ghg.
- */
- if (er1 & HPER1_HCRC)
- if ((io->i_flgs&F_NBSF) == 0 && hpecc(io, BSE) == 0)
- goto success;
-hard0:
- io->i_error = EHER;
- if (mba->mba_sr & (MBSR_WCKUP|MBSR_WCKLWR))
- io->i_error = EWCK;
-hard:
- io->i_errblk = bn + ssect[unit];
- printf("hp error: (cyl,trk,sec)=(%d,%d,%d) ds=%b \n",
- cn, tn, sn, MASKREG(hpaddr->hpds), HPDS_BITS);
- printf("er1=%b er2=%b", er1, HPER1_BITS, er2, HPER2_BITS);
- if (hpaddr->hpmr)
- printf(" mr1=%o", MASKREG(hpaddr->hpmr));
- if (hpaddr->hpmr2)
- printf(" mr2=%o", MASKREG(hpaddr->hpmr2));
- if (hpdebug[unit] & (HPF_BSEDEBUG|HPF_ECCDEBUG))
- printf(" dc=%d, da=0x%x",MASKREG(hpaddr->hpdc),
- MASKREG(hpaddr->hpda));
- hpaddr->hpcs1 = HP_DCLR|HP_GO;
- printf("\n");
- return (-1);
-