📄 dhdm.c
字号:
#/* *//* * DM-BB driver */#include "../param.h"#include "../tty.h"#include "../conf.h"#define DMADDR 0170500struct tty dh11[];int ndh11; /* Set by dh.c to number of lines */#define DONE 0200#define SCENABL 040#define CLSCAN 01000#define TURNON 07 /* RQ send, CD lead, line enable */#define TURNOFF 1 /* line enable only */#define CARRIER 0100struct dmregs { int dmcsr; int dmlstat;};/* * Turn on the line associated with the (DH) device dev. */dmopen(dev){ register struct tty *tp; tp = &dh11[dev.d_minor]; DMADDR->dmcsr = dev.d_minor; DMADDR->dmlstat = TURNON; if (DMADDR->dmlstat&CARRIER) tp->t_state =| CARR_ON; DMADDR->dmcsr = IENABLE|SCENABL; spl5(); while ((tp->t_state&CARR_ON)==0) sleep(&tp->t_rawq, TTIPRI); spl0();}/* * If a DH line has the HUPCL mode, * turn off carrier when it is closed. */dmclose(dev){ register struct tty *tp; tp = &dh11[dev.d_minor]; if (tp->t_flags&HUPCL) { DMADDR->dmcsr = dev.d_minor; DMADDR->dmlstat = TURNOFF; DMADDR->dmcsr = IENABLE|SCENABL; }}/* * DM11 interrupt. * Mainly, deal with carrier transitions. */dmint(){ register struct tty *tp; if (DMADDR->dmcsr&DONE) { tp = &dh11[DMADDR->dmcsr&017]; if (tp < &dh11[ndh11]) { wakeup(tp); if ((DMADDR->dmlstat&CARRIER)==0) { if ((tp->t_state&WOPEN)==0) { signal(tp, SIGHUP); DMADDR->dmlstat = 0; flushtty(tp); } tp->t_state =& ~CARR_ON; } else tp->t_state =| CARR_ON; } DMADDR->dmcsr = IENABLE|SCENABL; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -