1*9186Ssam /* mba.c 4.5 82/11/13 */ 2323Sbill 3323Sbill #include "../h/param.h" 4323Sbill #include "../h/inode.h" 5323Sbill #include "../h/pte.h" 67446Sroot #include "../h/fs.h" 7323Sbill #include "../h/vm.h" 8*9186Ssam 9*9186Ssam #include "../vax/mtpr.h" 10*9186Ssam #include "../vaxmba/mbareg.h" 11*9186Ssam 12323Sbill #include "saio.h" 133262Swnj #include "savax.h" 14323Sbill 153262Swnj mbastart(io, func) 163262Swnj register struct iob *io; 173262Swnj int func; 18323Sbill { 193262Swnj struct mba_regs *mba = mbamba(io->i_unit); 203262Swnj struct mba_drv *drv = mbadrv(io->i_unit); 213262Swnj register struct pte *pte = mba->mba_map; 22323Sbill int npf; 23323Sbill unsigned v; 24323Sbill int o; 25323Sbill int vaddr; 26323Sbill 27323Sbill v = btop(io->i_ma); 28323Sbill o = (int)io->i_ma & PGOFSET; 29323Sbill npf = btoc(io->i_cc + o); 303262Swnj vaddr = o; 31323Sbill while (--npf >= 0) 32323Sbill *(int *)pte++ = v++ | PG_V; 333262Swnj mba->mba_sr = -1; 343262Swnj mba->mba_bcr = -io->i_cc; 353262Swnj mba->mba_var = vaddr; 363262Swnj if (func == WRITE) 373262Swnj drv->mbd_cs1 = MB_WCOM | MB_GO; 383262Swnj else 393262Swnj drv->mbd_cs1 = MB_RCOM | MB_GO; 40323Sbill } 41415Sbill 42415Sbill mbainit(mbanum) 43415Sbill int mbanum; 44415Sbill { 453262Swnj register struct mba_regs *mba = mbaddr[mbanum]; 46415Sbill 473262Swnj /* SHOULD BADADDR IT */ 483262Swnj if (mbaact & (1<<mbanum)) 493262Swnj return; 503262Swnj mba->mba_cr = MBCR_INIT; 51415Sbill mbaact |= 1<<mbanum; 52415Sbill } 53