|
|
1.1 ! root 1: /* uba.c 4.5 81/11/12 */ ! 2: ! 3: #include "../h/param.h" ! 4: #include "../h/inode.h" ! 5: #include "../h/cpu.h" ! 6: #include "../h/pte.h" ! 7: #include "../h/ubareg.h" ! 8: #include "../h/vm.h" ! 9: #include "saio.h" ! 10: #include "savax.h" ! 11: ! 12: /* ! 13: * Note... this routine does not ! 14: * really allocate; unless bdp == 2 ! 15: * you always get the same space. ! 16: * When bdp == 2 you get some other space. ! 17: */ ! 18: ubasetup(io, bdp) ! 19: register struct iob *io; ! 20: int bdp; ! 21: { ! 22: int npf; ! 23: unsigned v; ! 24: register struct pte *pte; ! 25: int o, temp, reg; ! 26: static int lastreg = 128+64; ! 27: ! 28: v = btop(io->i_ma); ! 29: o = (int)io->i_ma & PGOFSET; ! 30: npf = btoc(io->i_cc + o) +1; ! 31: if (bdp == 2) { ! 32: reg = lastreg; ! 33: lastreg += npf; ! 34: bdp = 0; ! 35: } else ! 36: reg = 0; ! 37: pte = &ubauba(io->i_unit)->uba_map[reg]; ! 38: temp = (bdp << 21) | UBAMR_MRV; ! 39: if (bdp && (o & 01)) ! 40: temp |= UBAMR_BO; ! 41: v &= 0x1fffff; /* drop to physical addr */ ! 42: while (--npf != 0) ! 43: *(int *)pte++ = v++ | temp; ! 44: *(int *)pte++ = 0; ! 45: return ((bdp << 28) | (reg << 9) | o); ! 46: } ! 47: ! 48: ubafree(io, mr) ! 49: struct iob *io; ! 50: int mr; ! 51: { ! 52: register int bdp; ! 53: ! 54: bdp = (mr >> 28) & 0x0f; ! 55: if (bdp == 0) ! 56: return; ! 57: switch (cpu) { ! 58: ! 59: case VAX_780: ! 60: ubauba(io->i_unit)->uba_dpr[bdp] |= UBADPR_BNE; ! 61: break; ! 62: ! 63: case VAX_750: ! 64: ubauba(io->i_unit)->uba_dpr[bdp] |= ! 65: UBADPR_PURGE|UBADPR_NXM|UBADPR_UCE; ! 66: break; ! 67: case VAX_7ZZ: ! 68: break; ! 69: } ! 70: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.