Research V5 development
[unix-history] / usr / sys / dmr / dhdm.c
CommitLineData
868b4d42
DR
1#
2/*
3 * Copyright 1973 Bell Telephone Laboratories Inc
4 */
5
6/*
7 * DM-BB driver
8 */
9#include "../param.h"
10#include "../tty.h"
11#include "../conf.h"
12
13#define DMADDR 0170500
14
15struct tty dh11[];
16int ndh11;
17
18#define DONE 0200
19#define SCENABL 040
20#define CLSCAN 01000
21#define TURNON 07 /* RQ send, CD lead, line enable */
22#define TURNOFF 0
23#define CARRIER 0100
24
25struct dmregs {
26 int dmcsr;
27 int dmlstat;
28};
29
30dmopen(dev)
31{
32 register struct tty *tp;
33
34 tp = &dh11[dev.d_minor];
35 DMADDR->dmcsr = dev.d_minor;
36 DMADDR->dmlstat = TURNON;
37 if (DMADDR->dmlstat&CARRIER)
38 tp->t_state =| CARR_ON;
39 DMADDR->dmcsr = IENABLE|SCENABL;
40 spl5();
41 while ((tp->t_state&CARR_ON)==0)
42 sleep(&tp->t_rawq, TTIPRI);
43 spl0();
44}
45
46dmclose(dev)
47{
48 register struct tty *tp;
49
50 tp = &dh11[dev.d_minor];
51 if (tp->t_flags&HUPCL) {
52 DMADDR->dmcsr = dev.d_minor;
53 DMADDR->dmlstat = TURNOFF;
54 DMADDR->dmcsr = IENABLE|SCENABL;
55 }
56}
57
58dmint()
59{
60 register struct tty *tp;
61
62 if (DMADDR->dmcsr&DONE) {
63 tp = &dh11[DMADDR->dmcsr&017];
64 if (tp < &dh11[ndh11]) {
65 wakeup(tp);
66 if ((DMADDR->dmlstat&CARRIER)==0) {
67 if ((tp->t_state&WOPEN)==0) {
68 signal(tp, SIGHUP);
69 DMADDR->dmlstat = 0;
70 flushtty(tp);
71 }
72 tp->t_state =& ~CARR_ON;
73 } else
74 tp->t_state =| CARR_ON;
75 }
76 DMADDR->dmcsr = IENABLE|SCENABL;
77 }
78}