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