亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dmb.c

?? <B>Digital的Unix操作系統VAX 4.2源碼</B>
?? C
?? 第 1 頁 / 共 5 頁
字號:
	printd("dmbattach: addr = 0x%x, flags = 0x%x, unit = %d\n",		addr, ui->ui_flags, ui->ui_unit);#	endif	/*	 * ui_flags format:	 * 	DMB: 0-7  dmbsoftcar, 8-15  printer cols, 16-23 printer rows.	 * 	DHB: 0-15 dmbsoftcar	 *	 * Set soft carrier (local lines) & line printer characteristics	 */	if (dmb_lines[ui->ui_unit] == DMB_8_LINES)		{		dmbsoftCAR[ui->ui_unit] = ui->ui_flags & 0xff;		dmbdefaultCAR[ui->ui_unit] = ui->ui_flags & 0xff;		cols = (ui->ui_flags>>8) & 0xff;		lines = (ui->ui_flags>>16) & 0xff;		}	else	/* 16 line dhb device */		{		dmbsoftCAR[ui->ui_unit] = ui->ui_flags & 0xffff;		dmbdefaultCAR[ui->ui_unit] = ui->ui_flags & 0xffff;		cols = (ui->ui_flags>>16) & 0xff; /* just in case ... */		lines = (ui->ui_flags>>24) & 0xff;		}	dmbl_softc[ui->ui_unit].dmbl_cols = (cols == 0?DMBL_DEFCOLS:cols);	dmbl_softc[ui->ui_unit].dmbl_lines = (lines == 0?DMBL_DEFLINES:lines);	/*	 * Initialize SMP locks.  One lock per dmb board, and one tty lock	 * for each line on the board.  Specify this driver as being MP safe.	 */	lockinit(&lk_dmb[ui->ui_unit], &lock_device15_d);	for (i=0; i< NUMLINES ; i++) {		tp = &dmb_tty[(ui->ui_unit * NUMLINES)+i];		lockinit(&tp->t_lk_tty, &lock_tty_d);		tp->t_smp = 1;	}	}/* * Open a DMB32 line. * Turn on this dmb if this is the first use of it. *//*ARGSUSED*/dmbopen(dev, flag)	dev_t dev;	int flag;{	register struct tty *tp;	register int unit, dmb;	register struct dmb_device *addr;	register struct uba_device *ui;	int s,error;	int inuse;  /* hold state of inuse bit while blocked waiting for carr */	int post_wakeup = 0;	unit = minor(dev);	if (unit & 0200)		return(dmblopen(dev,flag));	dmb = unit >> LINEBITS;#	ifdef DEBUG	printd("dmbopen: dev = 0x%x, flag = 0x%x, unit = 0x%x\n", dev, flag, unit);#	endif	if (unit >= ndmb || (ui = dmbinfo[dmb])== 0 || ui->ui_alive == 0)		return (ENXIO);	tp = &dmb_tty[unit];	DMB_TTY_LOCK(tp,s);	if (tp->t_state&TS_XCLUDE && u.u_uid != 0) {		DMB_TTY_UNLOCK(tp,s);		return (EBUSY);	}	while (tp->t_state&TS_CLOSING) { /* let DTR stay down for awhile */		sleep_unlock((caddr_t)&tp->t_rawq, TTIPRI,&tp->t_lk_tty);		DMB_TTY_LOCK(tp,s);	}	addr = (struct dmb_device *)ui->ui_addr;	tp->t_addr = (caddr_t)addr;	tp->t_oproc = dmbstart;	tp->t_baudrate = dmbbaudrate;	tp->t_state |= TS_WOPEN;	DMB_LOCK(dmb);	tty_def_open(tp, dev, flag, (dmbsoftCAR[dmb]&(1<<(unit&LINEMASK))));	if ((tp->t_state&TS_ISOPEN) == 0) {	    dmbmodem[unit] = MODEM_DSR_START; /* prevents spurious startups */	    /*	     * Set the receive fifo timeout to this number of miliseconds.	     */	    addr->dmb_acsr2 = (dmb_timeout << 16);	}	/*	 * Interrupts are enabled in dmbparam.	 */	dmbparam(unit);	/*	 * Wait for carrier, then process line discipline specific open.	 */	addr->dmb_acsr = (unit & LINEMASK) | DMB_IE;	/* line select */	addr->dmb_lpr |= (DMB_DTR | DMB_RTS);	if (tp->t_cflag & CLOCAL)		{#		ifdef  DEBUG		printd("dmbopen: local, tp=0x%x\n", tp);#		endif		tp->t_state |= TS_CARR_ON;		dmbmodem[unit] = MODEM_CTS|MODEM_CD|MODEM_DSR;		}	else if ((flag & (O_NDELAY|O_NONBLOCK)) == 0)		{		/*		 * DSR should not normally come up until DTR is asserted		 * However if TS_HUPCL is not set, it is		 * possible to get here with all modem signals		 * already asserted.  Or we could be dealing with		 * a very slow modem and it has not deasserted DSR yet.		 * Interrupts are enabled earlier in dmbparam.		 * 		 * If the DSR signal is being followed, wait at most		 * 30 seconds for CD, and don't transmit in the first 		 * 500ms.  Otherwise immediately look for CD|CTS.		 */		if (dmbdsr) {			if (addr->dmb_lstatlow & DMB_DSR)				{#				ifdef DEBUG				printd("dmbopen: modem, unit=%d\n", unit);#				endif				dmbmodem[unit] |= (MODEM_DSR_START|MODEM_DSR);				tp->t_dev = dev; /* need it for timeouts */				timeout(dmb_dsr_check_timeout, tp, hz*30);				timeout(dmb_dsr_check_timeout, tp, hz/2);				}			}		else 	{			dmbmodem[unit] |= (MODEM_DSR_START|MODEM_DSR);			dmb_dsr_check(tp,&post_wakeup);			}		}	DMB_UNLOCK(dmb);	if (flag & (O_NDELAY|O_NONBLOCK))		tp->t_state |= TS_ONDELAY;	else		while ((tp->t_state & TS_CARR_ON) == 0)			{			tp->t_state |= TS_WOPEN;			inuse = tp->t_state&TS_INUSE;			sleep_unlock((caddr_t)&tp->t_rawq,TTIPRI,&tp->t_lk_tty);			DMB_TTY_LOCK(tp,s);			/*			 * See if wakeup was caused by a false start.			 */			if (dmbmodem[unit]&MODEM_BADCALL){				DMB_TTY_UNLOCK(tp,s);				if (post_wakeup)					wakeup((caddr_t)&tp->t_rawq);				return(EWOULDBLOCK);			}			/*			 *  If we opened "block if in use"  and			 *  the terminal was not in use at that time			 *  but it became "in use" while we were			 *  waiting for carrier then return.			 */			if ((flag & O_BLKINUSE) && (inuse==0) &&			    (tp->t_state&TS_INUSE))				{				DMB_TTY_UNLOCK(tp,s);				if (post_wakeup)					wakeup((caddr_t)&tp->t_rawq);				return(EALREADY);				}			}	/*	 * Set state bit to tell tty.c not to assign this line as the 	 * controlling terminal for the process which opens this line.	 */	if ((flag & O_NOCTTY) && (u.u_procp->p_progenv == A_POSIX))		tp->t_state |= TS_ONOCTTY;	error = (*linesw[tp->t_line].l_open)(dev, tp);	DMB_TTY_UNLOCK(tp,s);	if (post_wakeup)		wakeup((caddr_t)&tp->t_rawq);	return(error);}/* * Close a DMB32 line. *//*ARGSUSED*/dmbclose(dev, flag)	dev_t dev;	int flag;{	register struct tty *tp;	register int unit;	register int dmb;	register struct dmb_device *addr;	int post_wakeup = 0;	int s;	unit = minor(dev);	if (unit & 0200){		dmblclose(dev,flag);		return;	}	dmb = unit >> LINEBITS;	tp = &dmb_tty[unit];	addr = (struct dmb_device *)tp->t_addr;#	ifdef DEBUG	printd("dmbclose: dev = 0x%x, flag = 0x%x, unit = 0x%x, addr = 0x%x\n",		dev, flag, unit, addr);#	endif	DMB_TTY_LOCK(tp,s);	if (tp->t_line)		(*linesw[tp->t_line].l_close)(tp);	DMB_LOCK(dmb);	if ((tp->t_cflag&HUPCL) || (tp->t_state&TS_ISOPEN)==0)		{		addr->dmb_acsr = (unit & LINEMASK) | DMB_IE;		addr->dmb_lpr &= ~(DMB_DTR | DMB_RTS);		tp->t_state &= ~TS_CARR_ON; /* prevents recv intr. timeouts */		if ((tp->t_cflag & CLOCAL) == 0)			{			/*			 * Drop DTR for at least a half sec. if modem line			 */			tp->t_state |= TS_CLOSING;			/*			 * Wait for DSR to drop			 */			addr = (struct dmb_device *)tp->t_addr;			addr->dmb_acsr = DMB_IE | (unit&LINEMASK);			/* 			 * If the DSR signal is being followed, give the			 * modem at most 5 seconds to deassert it. 			 */			if (dmbdsr && (addr->dmb_lstatlow & DMB_DSR))				{				timeout(wakeup, (caddr_t) &tp->t_dev, 5*hz);				DMB_UNLOCK(dmb);				sleep_unlock((caddr_t)&tp->t_dev, PZERO-10,					&tp->t_lk_tty);				DMB_TTY_LOCK(tp,s);				DMB_LOCK(dmb);				}			timeout(wakeup, (caddr_t) &tp->t_dev, hz/5);			DMB_UNLOCK(dmb);			sleep_unlock((caddr_t)&tp->t_dev, PZERO-10,					&tp->t_lk_tty);			DMB_TTY_LOCK(tp,s);			DMB_LOCK(dmb);			tp->t_state &= ~(TS_CLOSING);			post_wakeup = WAKEUP_RAWQ;			}		addr->dmb_acsr = (unit & LINEMASK) | DMB_IE;		addr->dmb_lpr &= ~DMB_RXENA;		}	dmbsoftCAR[dmb] &= ~(1<<(unit&LINEMASK));	dmbsoftCAR[dmb] |= (1<<(unit&LINEMASK)) & dmbdefaultCAR[dmb];	DMB_UNLOCK(dmb);	ttyclose(tp);	dmbmodem[unit] = 0;	tty_def_close(tp);	DMB_TTY_UNLOCK(tp,s);	if (post_wakeup)		wakeup((caddr_t)&tp->t_rawq);}dmbread(dev, uio)	dev_t dev;	struct uio *uio;{	register struct tty *tp;        register int unit;        unit = minor(dev);	if (unit & 0200)		/* read from lp device */		return(ENXIO);	tp = &dmb_tty[unit];	return ((*linesw[tp->t_line].l_read)(tp, uio));}dmbwrite(dev, uio)	dev_t dev;	struct uio *uio;{        register int unit;	register struct tty *tp;        unit = minor(dev);	if (unit & 0200)		/* write to parallel port */		return(dmblwrite(dev,uio));	tp = &dmb_tty[unit];	return ((*linesw[tp->t_line].l_write)(tp, uio));}/* * DMB32 interrupts at one location with async interrupts. * Examine Transmitter Action bit in "tbuf" register to determine *   if there is a transmit interrupt. * Examine Data Valid bit in "rbuf" register to determine *   if there is a receive interrupt. */dmbaint(dmb)	int dmb;{	register struct dmb_device *addr;	register struct uba_device *ui;	/*	 * The dmb is interrupting at ipl14.	 * For this reason an spltty is used to bump the ipl up to ipl15.	 */	spltty();	ui = dmbinfo[dmb];	addr = (struct dmb_device *)ui->ui_addr;	if (addr->dmb_tbuf & DMB_TXACT)	    dmbxint(dmb);	if (addr->dmb_rbuf & DMB_DATAVALID)	    dmbrint(dmb);}/* * DMB32 receiver interrupt. */dmbrint(dmb)	int dmb;{	register struct tty *tp;	register long c;	register struct dmb_device *addr;	struct tty *tp0;	register struct uba_device *ui;	register int line;	register int flg;	int overrun = 0;	u_char *modem0, *modem;	int modem_cont;	int post_wakeup = 0;	ui = dmbinfo[dmb];	if (ui == 0 || ui->ui_alive == 0)		return;	addr = (struct dmb_device *)ui->ui_addr;	tp0 = &dmb_tty[dmb<<LINEBITS];	modem0 = &dmbmodem[dmb<<LINEBITS];	/*	 * Loop fetching characters from the receive fifo for this	 * dmb until there are no more in the fifo. 	 *	 * First get a copy of the rbuf then make sure no other processor 	 * is servicing this interrupt by seeing if the rbuf contents have	 * changed in the meantime.	 */	while ((c = addr->dmb_rbuf) < 0)		{	/* if c < 0 then data valid bit is set */		line = (c>>16)&LINEMASK;		tp = tp0 + line;		smp_lock(&tp->t_lk_tty,LK_RETRY);		DMB_LOCK(dmb);		if ((c = addr->dmb_rbuf) >= 0) {			DMB_UNLOCK(dmb);			smp_unlock(&tp->t_lk_tty);			break;		}		if (line != (((addr->dmb_rbuf)>>16) & LINEMASK)) {			DMB_UNLOCK(dmb);			smp_unlock(&tp->t_lk_tty);  			continue;  		}		addr->dmb_rbuf = 0;		/* pop the fifo */		DMB_UNLOCK(dmb);		flg = tp->t_iflag;		modem = modem0 + line;#		ifdef  DEBUG		printd10("dmbrint: tp = 0x%x, c = 0x%x\n", tp, c);#		endif		/*		 * Check for modem transitions		 */		if (c & DMB_NONCHAR)			{			if (c & DMB_DIAG)				goto dmbrunlock;	/* ignore diagnostic info */#			ifdef DEBUG			printd("dmbrint: modem change, line = %d, tp = 0x%x, c = 0x%x, lstat = 0x%x\n", line, tp, c, addr->dmb_lstatlow);#			endif DEBUG			if (tp->t_cflag & CLOCAL)				goto dmbrunlock;			DMB_LOCK(dmb);			addr->dmb_acsr = (line | DMB_IE);			modem_cont = 0;			/*			 * Drop DTR immediately if DSR gone away.			 * If really an active close then do not			 *    send signals.			 */			if ((addr->dmb_lstatlow & DMB_DSR) == 0)				{				if (tp->t_state&TS_CLOSING)					{					untimeout(wakeup, (caddr_t) &tp->t_dev);					post_wakeup = WAKEUP_DEV;#						ifdef	DEBUG						printd("dmbrint: dsr closing down, line=%d\n",line);#						endif	DEBUG					DMB_UNLOCK(dmb);					goto dmbrunlock;					}				 if (tp->t_state & TS_CARR_ON)					{#						ifdef	DEBUG						printd("dmbrint: DSR drop, line = %d\n",line);#						endif	DEBUG					/* 					 * Drop line if DSR is being followed. 					 */					if (dmbdsr)						{						dmb_tty_drop(tp,&post_wakeup);						/*						 * Move continue here in order						 * to examine other transitions.						 */						DMB_UNLOCK(dmb);						goto dmbrunlock;						}					}				}			/*			 * Check for transient CD drops.			 * Only drop DTR if CD is down for more than 2 secs.			 */			if (tp->t_state&TS_CARR_ON)				if ((addr->dmb_lstatlow & DMB_DCD)==0)					{					if (*modem & MODEM_CD)						{						/* only start timer once */#						ifdef DEBUG						printd("dmbrint, cd_drop,line = %d\n",line);#						endif DEBUG						*modem &= ~MODEM_CD;						dmbtimestamp[minor(tp->t_dev)] = time;						timeout(dmb_cd_drop, tp, hz*dmbcdtime);						modem_cont = 1;						}					}				else				    /*				     * CD has come up again.				     * Stop timeout from occurring if set.				     * If interval is more than 2 secs then				     *	drop DTR.				     */				    if ((*modem & MODEM_CD)==0)					    {					    untimeout(dmb_cd_drop, tp);					    if (dmb_cd_down(tp)){						    /* drop connection */						dmb_tty_drop(tp,&post_wakeup);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲综合在线| 国产毛片精品视频| 免费欧美在线视频| 成人一区二区视频| 777奇米成人网| 国产精品丝袜91| 午夜精品福利一区二区三区av| 九九九精品视频| 欧美色图激情小说| 国产精品久久久一本精品| 美女视频黄久久| 在线一区二区三区四区| 国产欧美日韩亚州综合 | 免费欧美在线视频| 欧美亚洲综合色| 最新成人av在线| 国产成人综合网| 精品电影一区二区| 青草av.久久免费一区| 在线免费观看视频一区| 国产精品久久久久桃色tv| 国产主播一区二区| 欧美电影免费观看高清完整版 | 蜜桃视频一区二区| 欧美精品aⅴ在线视频| 亚洲综合在线免费观看| av电影在线观看完整版一区二区| 国产午夜精品在线观看| 激情文学综合丁香| 亚洲精品一区二区三区精华液| 日本午夜精品一区二区三区电影| 欧美影视一区二区三区| 亚洲三级在线免费观看| 色综合久久综合网欧美综合网| 国产精品国产三级国产aⅴ中文| 国产成人精品免费看| 久久久久久亚洲综合影院红桃| 国精产品一区一区三区mba视频| 日韩一级片网址| 免费的成人av| 美国十次综合导航| 国产日韩欧美不卡在线| 久久国产精品一区二区| 欧美丰满少妇xxxxx高潮对白| 成人欧美一区二区三区1314| 国产91露脸合集magnet| 久久久久久久网| 精品亚洲国内自在自线福利| 在线精品视频一区二区三四| 樱桃视频在线观看一区| 色综合久久综合网97色综合 | 中文字幕在线观看一区二区| 粉嫩在线一区二区三区视频| 国产三级久久久| 国内精品写真在线观看| 精品国产乱码久久久久久浪潮| 奇米亚洲午夜久久精品| 日韩区在线观看| 欧美96一区二区免费视频| 欧美一区二区三区视频免费| 蜜臀av在线播放一区二区三区| 91精品国产色综合久久ai换脸 | 欧美在线免费播放| 亚洲成人精品一区| 7777精品伊人久久久大香线蕉的 | 免费成人性网站| 日韩一区二区三区免费看 | 精品一区精品二区高清| 26uuu精品一区二区三区四区在线| 麻豆一区二区三区| 久久精品欧美一区二区三区不卡 | 日韩欧美一级二级三级久久久| 日韩成人精品在线观看| 精品噜噜噜噜久久久久久久久试看| 毛片一区二区三区| 欧美国产精品专区| 99久精品国产| 青青草精品视频| 亚洲国产高清在线| 在线免费观看视频一区| 日本不卡一区二区| www国产精品av| 99久久久无码国产精品| 亚洲国产成人91porn| 日韩一区二区影院| av亚洲精华国产精华精华 | 一本久道中文字幕精品亚洲嫩| 亚洲成人tv网| 久久精品亚洲一区二区三区浴池 | 精品免费日韩av| 色哟哟精品一区| 麻豆国产91在线播放| 一色桃子久久精品亚洲| 欧美丰满一区二区免费视频| 成人午夜av影视| 午夜国产不卡在线观看视频| 2022国产精品视频| 欧美日韩一级视频| 不卡的看片网站| 秋霞午夜鲁丝一区二区老狼| 国产精品网站在线播放| 91精品欧美福利在线观看| 9l国产精品久久久久麻豆| 亚洲一区二区三区四区不卡| 欧美大白屁股肥臀xxxxxx| 91视频com| 日韩二区在线观看| 亚洲情趣在线观看| 久久夜色精品国产欧美乱极品| 91麻豆.com| 国产91精品免费| 亚洲一区在线观看视频| 欧美日韩国产中文| 精品视频全国免费看| 成人aaaa免费全部观看| 麻豆精品视频在线观看| 午夜精品久久久久久不卡8050| 国产精品女主播av| 久久综合久久综合亚洲| 欧美人牲a欧美精品| 色婷婷久久久综合中文字幕| 国产99久久精品| 国精产品一区一区三区mba桃花| 午夜成人在线视频| 尤物在线观看一区| 亚洲乱码一区二区三区在线观看| 国产亚洲精久久久久久| 精品国产髙清在线看国产毛片 | 日韩精品久久理论片| 国产精品你懂的在线欣赏| 欧美午夜精品久久久久久超碰| 91一区二区三区在线观看| 韩日欧美一区二区三区| 日韩成人精品在线观看| 亚洲国产另类精品专区| 亚洲一区二区三区在线看| 亚洲精品视频在线观看网站| 国产精品高潮呻吟| 日韩毛片在线免费观看| 国产精品久久久久三级| 亚洲乱码中文字幕| 亚洲一区电影777| 亚洲国产视频a| 日韩主播视频在线| 美女久久久精品| 天天色天天操综合| 青青草一区二区三区| 久久精工是国产品牌吗| 国模一区二区三区白浆| 国产乱色国产精品免费视频| 七七婷婷婷婷精品国产| 国产呦精品一区二区三区网站| 国产精品 欧美精品| 99re热这里只有精品免费视频| 色一区在线观看| 日韩欧美卡一卡二| 国产性色一区二区| 中文字幕亚洲成人| 亚洲自拍偷拍图区| 另类中文字幕网| 国产91丝袜在线观看| www.66久久| 4438x成人网最大色成网站| 精品理论电影在线| 综合久久国产九一剧情麻豆| 亚洲欧美国产毛片在线| 黑人巨大精品欧美一区| av色综合久久天堂av综合| 欧美丝袜自拍制服另类| 精品久久人人做人人爱| 国产精品电影一区二区| 日韩国产在线一| 国产成人啪免费观看软件 | 91丨国产丨九色丨pron| 欧美剧在线免费观看网站| 久久久亚洲精品一区二区三区| 亚洲视频中文字幕| 久久99国产精品成人| 99精品偷自拍| 精品国产麻豆免费人成网站| 亚洲精品日日夜夜| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美日韩在线亚洲一区蜜芽| 精品美女被调教视频大全网站| 亚洲欧美日韩久久| 久久精品99久久久| 成人一区二区三区| 欧美偷拍一区二区| 1024国产精品| 国产一区免费电影| 欧美日韩国产片| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美大度的电影原声| 综合久久国产九一剧情麻豆| 国产在线精品免费av| 欧美日本韩国一区二区三区视频 | 五月综合激情网| 99精品国产热久久91蜜凸| www国产精品av| 日本一不卡视频|