1 /* mba.c 4.5 82/11/13 */ 2 3 #include "../h/param.h" 4 #include "../h/inode.h" 5 #include "../h/pte.h" 6 #include "../h/fs.h" 7 #include "../h/vm.h" 8 9 #include "../vax/mtpr.h" 10 #include "../vaxmba/mbareg.h" 11 12 #include "saio.h" 13 #include "savax.h" 14 15 mbastart(io, func) 16 register struct iob *io; 17 int func; 18 { 19 struct mba_regs *mba = mbamba(io->i_unit); 20 struct mba_drv *drv = mbadrv(io->i_unit); 21 register struct pte *pte = mba->mba_map; 22 int npf; 23 unsigned v; 24 int o; 25 int vaddr; 26 27 v = btop(io->i_ma); 28 o = (int)io->i_ma & PGOFSET; 29 npf = btoc(io->i_cc + o); 30 vaddr = o; 31 while (--npf >= 0) 32 *(int *)pte++ = v++ | PG_V; 33 mba->mba_sr = -1; 34 mba->mba_bcr = -io->i_cc; 35 mba->mba_var = vaddr; 36 if (func == WRITE) 37 drv->mbd_cs1 = MB_WCOM | MB_GO; 38 else 39 drv->mbd_cs1 = MB_RCOM | MB_GO; 40 } 41 42 mbainit(mbanum) 43 int mbanum; 44 { 45 register struct mba_regs *mba = mbaddr[mbanum]; 46 47 /* SHOULD BADADDR IT */ 48 if (mbaact & (1<<mbanum)) 49 return; 50 mba->mba_cr = MBCR_INIT; 51 mbaact |= 1<<mbanum; 52 } 53