rm tpmkfs tprestor
[unix-history] / usr / src / sys / vax / stand / mba.c
CommitLineData
5a80d91a 1/* mba.c 1.2 %G% */
6810489f
BJ
2
3#include "../h/param.h"
4#include "../h/inode.h"
5#include "../h/pte.h"
6#include "../h/mba.h"
7#include "../h/mtpr.h"
8#include "../h/vm.h"
9#include "saio.h"
10
11/*
12 * startup routine for MBA controllers.
13 */
14#define MBAWCOM 0x30
15#define MBARCOM 0x38
16#define GO 01
17
18mbastart(io, adcr, func)
19register struct iob *io;
20int *adcr;
21{
22 register int i;
23 int npf;
24 unsigned v;
25 register struct pte *pte;
26 int o;
27 int vaddr;
28 extern int mbanum[], *mbaloc[];
29 register struct mba_regs *mbap;
30
5a80d91a 31 mbap = (struct mba_regs *)mbaloc[mbanum[io->i_ino.i_dev]];
6810489f
BJ
32 pte = (struct pte *)mbap;
33 pte += (MBA_MAP + 128*4)/4;
34 v = btop(io->i_ma);
35 o = (int)io->i_ma & PGOFSET;
36 npf = btoc(io->i_cc + o);
37 vaddr = (128 << 9) | o;
38 v &= 0x1fffff; /* drop to physical addr */
39 while (--npf >= 0)
40 *(int *)pte++ = v++ | PG_V;
41 mbap->mba_sr = -1; /* clear status (error) bits */
42 mbap->mba_bcr = -io->i_cc;
43 mbap->mba_var = vaddr;
44 if (func == READ)
45 *adcr = MBARCOM | GO;
46 else if (func == WRITE) {
47 *adcr = MBAWCOM | GO;
48 }
49}