Commit | Line | Data |
---|---|---|
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 | ||
18 | mbastart(io, adcr, func) | |
19 | register struct iob *io; | |
20 | int *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 | } |