|
|
1.1 ! root 1: #include "../h/param.h" ! 2: #include "../h/inode.h" ! 3: #include "../h/pte.h" ! 4: #include "../h/mba.h" ! 5: #include "../h/mtpr.h" ! 6: #include "../h/vm.h" ! 7: #include "saio.h" ! 8: ! 9: /* ! 10: * startup routine for MBA controllers. ! 11: */ ! 12: #define MBAWCOM 0x30 ! 13: #define MBARCOM 0x38 ! 14: #define GO 01 ! 15: ! 16: mbastart(io, adcr, func) ! 17: register struct iob *io; ! 18: int *adcr; ! 19: { ! 20: register int i; ! 21: int npf; ! 22: unsigned v; ! 23: register struct pte *pte; ! 24: int o; ! 25: int vaddr; ! 26: extern int mbanum[], *mbaloc[]; ! 27: register struct mba_regs *mbap; ! 28: ! 29: mbap = (struct mba_regs *)mbaloc[mbanum[io->i_unit]]; ! 30: pte = (struct pte *)mbap; ! 31: pte += (MBA_MAP + 128*4)/4; ! 32: v = btop(io->i_ma); ! 33: o = (int)io->i_ma & PGOFSET; ! 34: npf = btoc(io->i_cc + o); ! 35: vaddr = (128 << 9) | o; ! 36: v &= 0x1fffff; /* drop to physical addr */ ! 37: while (--npf >= 0) ! 38: *(int *)pte++ = v++ | PG_V; ! 39: mbap->mba_sr = -1; /* clear status (error) bits */ ! 40: mbap->mba_bcr = -io->i_cc; ! 41: mbap->mba_var = vaddr; ! 42: if (func == READ) ! 43: *adcr = MBARCOM | GO; ! 44: else if (func == WRITE) { ! 45: *adcr = MBAWCOM | GO; ! 46: } ! 47: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.