1*3262Swnj /* mba.c 4.3 81/03/15 */ 2323Sbill 3323Sbill #include "../h/param.h" 4323Sbill #include "../h/inode.h" 5323Sbill #include "../h/pte.h" 6*3262Swnj #include "../h/mbareg.h" 7323Sbill #include "../h/mtpr.h" 8323Sbill #include "../h/vm.h" 9323Sbill #include "saio.h" 10*3262Swnj #include "savax.h" 11323Sbill 12*3262Swnj mbastart(io, func) 13*3262Swnj register struct iob *io; 14*3262Swnj int func; 15323Sbill { 16*3262Swnj struct mba_regs *mba = mbamba(io->i_unit); 17*3262Swnj struct mba_drv *drv = mbadrv(io->i_unit); 18*3262Swnj register struct pte *pte = mba->mba_map; 19323Sbill int npf; 20323Sbill unsigned v; 21323Sbill int o; 22323Sbill int vaddr; 23323Sbill 24323Sbill v = btop(io->i_ma); 25323Sbill o = (int)io->i_ma & PGOFSET; 26323Sbill npf = btoc(io->i_cc + o); 27*3262Swnj vaddr = o; 28323Sbill while (--npf >= 0) 29323Sbill *(int *)pte++ = v++ | PG_V; 30*3262Swnj mba->mba_sr = -1; 31*3262Swnj mba->mba_bcr = -io->i_cc; 32*3262Swnj mba->mba_var = vaddr; 33*3262Swnj if (func == WRITE) 34*3262Swnj drv->mbd_cs1 = MB_WCOM | MB_GO; 35*3262Swnj else 36*3262Swnj drv->mbd_cs1 = MB_RCOM | MB_GO; 37323Sbill } 38415Sbill 39415Sbill mbainit(mbanum) 40415Sbill int mbanum; 41415Sbill { 42*3262Swnj register struct mba_regs *mba = mbaddr[mbanum]; 43415Sbill 44*3262Swnj /* SHOULD BADADDR IT */ 45*3262Swnj if (mbaact & (1<<mbanum)) 46*3262Swnj return; 47*3262Swnj mba->mba_cr = MBCR_INIT; 48415Sbill mbaact |= 1<<mbanum; 49415Sbill } 50