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