SCCS-vsn: sys/vax/mba/hp.c 3.8
- * RP04/RP06/RM03 disk driver
+ * RP06/RM03 disk driver
*/
#include "../h/param.h"
*/
#include "../h/param.h"
#include "../h/pte.h"
#define DK_N 0
#include "../h/pte.h"
#define DK_N 0
-/*
- dk_busy &= ~(1<<(unit+DK_N));
-*/
+ if (unit+DK_N <= DK_NMAX)
+ dk_busy &= ~(1<<(unit+DK_N));
dp = &hputab[unit];
if((bp=dp->b_actf) == NULL)
return;
dp = &hputab[unit];
if((bp=dp->b_actf) == NULL)
return;
hpaddr->hpda = sn;
hpaddr->hpcs1 = SEARCH|GO;
}
hpaddr->hpda = sn;
hpaddr->hpcs1 = SEARCH|GO;
}
- dk_busy |= 1<<unit;
- dk_numb[unit] += 1;
-*/
+ if (unit <= DK_NMAX && DK_N+NHP <= DK_NMAX) {
+ dk_busy |= 1<<unit;
+ dk_numb[unit]++;
+ }
return;
done:
dp->b_forw = NULL;
if(hptab.b_actf == NULL)
return;
done:
dp->b_forw = NULL;
if(hptab.b_actf == NULL)
- hptab.b_actf = dp; else
+ hptab.b_actf = dp;
+ else
hptab.b_actl->b_forw = dp;
hptab.b_actl = dp;
}
hptab.b_actl->b_forw = dp;
hptab.b_actl = dp;
}
hpaddr->hpda = (tn << 8) + sn;
mbastart(bp, (int *)hpaddr);
hpaddr->hpda = (tn << 8) + sn;
mbastart(bp, (int *)hpaddr);
- dk_busy |= 1<<(DK_N /*+NHP*/);
- dk_numb[DK_N /*+NHP*/] += 1;
- unit = bp->b_bcount>>6;
- dk_wds[DK_N /*+NHP*/] += unit;
+ unit = dn+DK_N;
+ if (NHP+DK_N == DK_NMAX)
+ unit = NHP+DK_N;
+ if (unit <= DK_NMAX) {
+ dk_busy |= 1<<unit;
+ dk_numb[unit]++;
+ dk_wds[unit] += bp->b_bcount>>6;
+ }
register struct device *hpaddr;
if(hptab.b_active) {
register struct device *hpaddr;
if(hptab.b_active) {
- dk_busy &= ~(1<<(DK_N /*+NHP*/));
dp = hptab.b_actf;
bp = dp->b_actf;
unit = dkunit(bp);
dp = hptab.b_actf;
bp = dp->b_actf;
unit = dkunit(bp);
+ if (DK_N+NHP == DK_NMAX)
+ dk_busy &= ~(1<<(DK_N+NHP));
+ else if (DK_N+unit <= DK_NMAX)
+ dk_busy &= ~(1<<(DK_N+unit));
hpaddr = (struct device *)((int *)HPADDR + 32*unit);
if (hpaddr->hpds & ERR || mbastat & MBAEBITS) { /* error bit */
while((hpaddr->hpds & DRY) == 0)
hpaddr = (struct device *)((int *)HPADDR + 32*unit);
if (hpaddr->hpds & ERR || mbastat & MBAEBITS) { /* error bit */
while((hpaddr->hpds & DRY) == 0)