|
|
1.1 root 1: /* %W% */
2: #include "iti.h"
3: #include "../h/pte.h"
4: #include "../h/param.h"
5: #include "../h/dir.h"
6: #include "../h/user.h"
7: #include "../h/systm.h"
8: #include "../h/ioctl.h"
9: #include "../h/ubareg.h"
10: #include "../h/buf.h"
11: #include "../h/ubavar.h"
12: #include "../h/itireg.h"
13: int itiprobe(), itiattach();
14: struct uba_device *itidinfo[NITI];
15: u_short itistd[]={ 0160100, 0 };
16: struct uba_driver itidriver={
17: itiprobe, 0, itiattach, 0, itistd, "iti", itidinfo, 0, 0
18: };
19: struct iti{
20: char open;
21: }iti[NITI];
22: itiprobe(reg)
23: caddr_t reg;
24: {
25: register int br=0x15, cvec=0710; /* value-result */
26: return(1);
27: }
28: /*ARGSUSED*/
29: itiattach(ui)
30: struct uba_device *ui;
31: {
32: }
33: itiopen(dev)
34: dev_t dev;
35: {
36: register struct iti *p=&iti[minor(dev)];
37: register struct uba_device *ui=itidinfo[minor(dev)];
38: if(minor(dev)>=NITI || p->open || !ui->ui_alive)
39: u.u_error=ENXIO;
40: else{
41: p->open=1;
42: maptouser(ui->ui_addr);
43: }
44: }
45: iticlose(dev)
46: dev_t dev;
47: {
48: iti[minor(dev)].open=0;
49: unmaptouser(itidinfo[minor(dev)]->ui_addr);
50: }
51: /*ARGSUSED*/
52: itiioctl(dev, cmd, data, flag)
53: dev_t dev;
54: int cmd;
55: register caddr_t data;
56: int flag;
57: {
58: register struct uba_device *ui = itidinfo[minor(dev)];
59: switch (cmd) {
60: case ITIADDR:
61: copyout((caddr_t)&ui->ui_addr, (caddr_t)data, sizeof ui->ui_addr);
62: break;
63: default:
64: return (ENOTTY);
65: }
66: return (0);
67: }
68: /*ARGSUSED*/
69: itiintr(dev)
70: dev_t dev;
71: {}
72: /*
73: * Map a virtual address into users address space. Actually all we
74: * do is turn on the user mode write protection bits for the particular
75: * page of memory involved.
76: */
77: maptouser(vaddress)
78: caddr_t vaddress;
79: {
80: Sysmap[((unsigned)vaddress-0x80000000)>>9].pg_prot=PG_UW>>27;
81: }
82: unmaptouser(vaddress)
83: caddr_t vaddress;
84: {
85: Sysmap[((unsigned)vaddress-0x80000000)>>9].pg_prot=PG_KW>>27;
86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.