|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: *
6: * @(#)uba.c 7.1 (Berkeley) 6/5/86
7: */
8:
9: #include "../machine/pte.h"
10:
11: #include "../h/param.h"
12: #include "../h/inode.h"
13: #include "../h/vm.h"
14: #include "../h/fs.h"
15:
16: #include "../vax/cpu.h"
17: #include "../vaxuba/ubareg.h"
18:
19: #include "saio.h"
20: #include "savax.h"
21:
22: /*
23: * Note... this routine does not
24: * really allocate; unless bdp == 2
25: * you always get the same space.
26: * When bdp == 2 you get some other space.
27: */
28: ubasetup(io, bdp)
29: register struct iob *io;
30: int bdp;
31: {
32: int npf;
33: unsigned v;
34: register struct pte *pte;
35: int o, temp, reg;
36: static int lastreg = 128+64;
37:
38: v = btop(io->i_ma);
39: o = (int)io->i_ma & PGOFSET;
40: npf = btoc(io->i_cc + o) +1;
41: if (bdp == 2) {
42: reg = lastreg;
43: lastreg += npf;
44: bdp = 0;
45: } else
46: reg = 0;
47: pte = &ubauba(io->i_unit)->uba_map[reg];
48: temp = (bdp << 21) | UBAMR_MRV;
49: if (bdp && (o & 01))
50: temp |= UBAMR_BO;
51: v &= 0x1fffff; /* drop to physical addr */
52: while (--npf != 0)
53: *(int *)pte++ = v++ | temp;
54: *(int *)pte++ = 0;
55: return ((bdp << 28) | (reg << 9) | o);
56: }
57:
58: ubafree(io, mr)
59: struct iob *io;
60: int mr;
61: {
62: register int bdp;
63:
64: bdp = (mr >> 28) & 0x0f;
65: if (bdp == 0)
66: return;
67: switch (cpu) {
68:
69: case VAX_8600:
70: case VAX_780:
71: ubauba(io->i_unit)->uba_dpr[bdp] |= UBADPR_BNE;
72: break;
73:
74: case VAX_750:
75: ubauba(io->i_unit)->uba_dpr[bdp] |=
76: UBADPR_PURGE|UBADPR_NXM|UBADPR_UCE;
77: break;
78: case VAX_730:
79: break;
80: }
81: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.