xref: /csrg-svn/sys/vax/stand/mba.c (revision 9806)
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