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