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