1*9806Ssam /* mba.c 4.6 82/12/17 */ 2323Sbill 3*9806Ssam #include "../machine/pte.h" 4*9806Ssam 5323Sbill #include "../h/param.h" 6323Sbill #include "../h/inode.h" 77446Sroot #include "../h/fs.h" 8323Sbill #include "../h/vm.h" 99186Ssam 109186Ssam #include "../vax/mtpr.h" 119186Ssam #include "../vaxmba/mbareg.h" 129186Ssam 13323Sbill #include "saio.h" 143262Swnj #include "savax.h" 15323Sbill 163262Swnj mbastart(io, func) 173262Swnj register struct iob *io; 183262Swnj int func; 19323Sbill { 203262Swnj struct mba_regs *mba = mbamba(io->i_unit); 213262Swnj struct mba_drv *drv = mbadrv(io->i_unit); 223262Swnj register struct pte *pte = mba->mba_map; 23323Sbill int npf; 24323Sbill unsigned v; 25323Sbill int o; 26323Sbill int vaddr; 27323Sbill 28323Sbill v = btop(io->i_ma); 29323Sbill o = (int)io->i_ma & PGOFSET; 30323Sbill npf = btoc(io->i_cc + o); 313262Swnj vaddr = o; 32323Sbill while (--npf >= 0) 33323Sbill *(int *)pte++ = v++ | PG_V; 343262Swnj mba->mba_sr = -1; 353262Swnj mba->mba_bcr = -io->i_cc; 363262Swnj mba->mba_var = vaddr; 373262Swnj if (func == WRITE) 383262Swnj drv->mbd_cs1 = MB_WCOM | MB_GO; 393262Swnj else 403262Swnj drv->mbd_cs1 = MB_RCOM | MB_GO; 41323Sbill } 42415Sbill 43415Sbill mbainit(mbanum) 44415Sbill int mbanum; 45415Sbill { 463262Swnj register struct mba_regs *mba = mbaddr[mbanum]; 47415Sbill 483262Swnj /* SHOULD BADADDR IT */ 493262Swnj if (mbaact & (1<<mbanum)) 503262Swnj return; 513262Swnj mba->mba_cr = MBCR_INIT; 52415Sbill mbaact |= 1<<mbanum; 53415Sbill } 54