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