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

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

?? cx.c

?? 基于組件方式開發操作系統的OSKIT源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
 * Fill transmitter buffer with data. */static voidcxout (cx_chan_t *c, char b){	unsigned char *buf, *p, sym;	unsigned short port = c->chip->port, len = 0, cnt_port, sts_port;	struct tty *tp = c->ttyp;	if (! tp)		return;	/* Choose the buffer. */	if (b == 'A') {		buf      = c->atbuf;		cnt_port = ATBCNT(port);		sts_port = ATBSTS(port);	} else {		buf      = c->btbuf;		cnt_port = BTBCNT(port);		sts_port = BTBSTS(port);	}	/* Is it busy? */	if (inb (sts_port) & BSTS_OWN24) {		tp->t_state |= TS_BUSY;		return;	}	switch (c->brk) {	case BRK_SEND:		*buf++ = 0;     /* extended transmit command */		*buf++ = 0x81;  /* send break */		*buf++ = 0;     /* extended transmit command */		*buf++ = 0x82;  /* insert delay */		*buf++ = 250;   /* 1/4 of second */		*buf++ = 0;     /* extended transmit command */		*buf++ = 0x82;  /* insert delay */		*buf++ = 250;   /* + 1/4 of second */		len = 8;		c->brk = BRK_IDLE;		break;	case BRK_STOP:		*buf++ = 0;     /* extended transmit command */		*buf++ = 0x83;  /* stop break */		len = 2;		c->brk = BRK_IDLE;		break;	case BRK_IDLE:		p = buf;		if (tp->t_iflag & IXOFF)			while (RB_LEN (tp->t_out) && p<buf+DMABUFSZ-1) {				sym = RB_GETC (tp->t_out);				/* Send XON/XOFF out of band. */				if (sym == tp->t_cc[VSTOP]) {					outb (STCR(port), STC_SNDSPC|STC_SSPC_2);					continue;				}				if (sym == tp->t_cc[VSTART]) {					outb (STCR(port), STC_SNDSPC|STC_SSPC_1);					continue;				}				/* Duplicate NULLs in ETC mode. */				if (! sym)					*p++ = 0;				*p++ = sym;			}		else			while (RB_LEN (tp->t_out) && p<buf+DMABUFSZ-1) {				sym = RB_GETC (tp->t_out);				/* Duplicate NULLs in ETC mode. */				if (! sym)					*p++ = 0;				*p++ = sym;			}		len = p - buf;		break;	}	/* Start transmitter. */	if (len) {		outw (cnt_port, len);		outb (sts_port, BSTS_INTR | BSTS_OWN24);		c->stat->obytes += len;		tp->t_state |= TS_BUSY;		print (("cx%d.%d: out %d bytes to %c\n",			c->board->num, c->num, len, b));	}}void cxoproc (struct tty *tp){	int unit = UNIT (tp->t_dev);	cx_chan_t *c = cxchan[unit];	unsigned short port = c->chip->port;	int s = spltty ();	/* Set current channel number */	outb (CAR(port), c->num & 3);	if (! (tp->t_state & (TS_TIMEOUT | TS_TTSTOP))) {		/* Start transmitter. */		if (! (inb (CSR(port)) & CSRA_TXEN))			cx_cmd (port, CCR_ENTX);		/* Determine the buffer order. */		if (inb (DMABSTS(port)) & DMABSTS_NTBUF) {			cxout (c, 'B');			cxout (c, 'A');		} else {			cxout (c, 'A');			cxout (c, 'B');		}	}#ifndef TS_ASLEEP /* FreeBSD some time after 2.0.5 */	ttwwakeup(tp);#else	if (RB_LEN (tp->t_out) <= tp->t_lowat) {		if (tp->t_state & TS_ASLEEP) {			tp->t_state &= ~TS_ASLEEP;			wakeup(TSA_OLOWAT(tp));		}		selwakeup(&tp->t_wsel);	}#endif	splx (s);}static intcxparam (struct tty *tp, struct termios *t){	int unit = UNIT (tp->t_dev);	cx_chan_t *c = cxchan[unit];	unsigned short port = c->chip->port;	int clock, period, s;	cx_cor1_async_t cor1;	if (t->c_ospeed == 0) {		/* Clear DTR and RTS. */		s = spltty ();		cx_chan_dtr (c, 0);		cx_chan_rts (c, 0);		splx (s);		print (("cx%d.%d: cxparam (hangup)\n", c->board->num, c->num));		return (0);	}	print (("cx%d.%d: cxparam\n", c->board->num, c->num));	/* Check requested parameters. */	if (t->c_ospeed < 300 || t->c_ospeed > 256*1024)                return(EINVAL);	if (t->c_ispeed && (t->c_ispeed < 300 || t->c_ispeed > 256*1024))                return(EINVAL);#ifdef __bsdi__	/* CLOCAL flag set -- wakeup everybody who waits for CD. */	/* FreeBSD does this themselves. */	if (! (tp->t_cflag & CLOCAL) && (t->c_cflag & CLOCAL))		wakeup ((caddr_t) &tp->t_rawq);#endif	/* And copy them to tty and channel structures. */	c->rxbaud = tp->t_ispeed = t->c_ispeed;	c->txbaud = tp->t_ospeed = t->c_ospeed;	tp->t_cflag = t->c_cflag;	/* Set character length and parity mode. */	BYTE cor1 = 0;	switch (t->c_cflag & CSIZE) {	default:	case CS8: cor1.charlen = 7; break;	case CS7: cor1.charlen = 6; break;	case CS6: cor1.charlen = 5; break;	case CS5: cor1.charlen = 4; break;	}	if (t->c_cflag & PARENB) {		cor1.parmode = PARM_NORMAL;		cor1.ignpar = 0;		cor1.parity = (t->c_cflag & PARODD) ? PAR_ODD : PAR_EVEN;	} else {		cor1.parmode = PARM_NOPAR;		cor1.ignpar = 1;	}	/* Enable/disable hardware CTS. */	c->aopt.cor2.ctsae = (t->c_cflag & CRTSCTS) ? 1 : 0;	/* Handle DSR as CTS. */	c->aopt.cor2.dsrae = (t->c_cflag & CRTSCTS) ? 1 : 0;	/* Enable extended transmit command mode.	 * Unfortunately, there is no other method for sending break. */	c->aopt.cor2.etc = 1;	/* Enable/disable hardware XON/XOFF. */	c->aopt.cor2.ixon = (t->c_iflag & IXON) ? 1 : 0;	c->aopt.cor2.ixany = (t->c_iflag & IXANY) ? 1 : 0;	/* Set the number of stop bits. */	if (t->c_cflag & CSTOPB)		c->aopt.cor3.stopb = STOPB_2;	else		c->aopt.cor3.stopb = STOPB_1;	/* Disable/enable passing XON/XOFF chars to the host. */	c->aopt.cor3.scde = (t->c_iflag & IXON) ? 1 : 0;	c->aopt.cor3.flowct = (t->c_iflag & IXON) ? FLOWCC_NOTPASS : FLOWCC_PASS;	c->aopt.schr1 = t->c_cc[VSTART];        /* XON */	c->aopt.schr2 = t->c_cc[VSTOP];         /* XOFF */	/* Set current channel number. */	s = spltty ();	outb (CAR(port), c->num & 3);	/* Set up receiver clock values. */	cx_clock (c->chip->oscfreq, c->rxbaud, &clock, &period);	c->opt.rcor.clk = clock;	outb (RCOR(port), BYTE c->opt.rcor);	outb (RBPR(port), period);	/* Set up transmitter clock values. */	cx_clock (c->chip->oscfreq, c->txbaud, &clock, &period);	c->opt.tcor.clk = clock;	c->opt.tcor.ext1x = 0;	outb (TCOR(port), BYTE c->opt.tcor);	outb (TBPR(port), period);	outb (COR2(port), BYTE c->aopt.cor2);	outb (COR3(port), BYTE c->aopt.cor3);	outb (SCHR1(port), c->aopt.schr1);	outb (SCHR2(port), c->aopt.schr2);	if (BYTE c->aopt.cor1 != BYTE cor1) {		BYTE c->aopt.cor1 = BYTE cor1;		outb (COR1(port), BYTE c->aopt.cor1);		/* Any change to COR1 require reinitialization. */		/* Unfortunately, it may cause transmitter glitches... */		cx_cmd (port, CCR_INITCH);	}	splx (s);	return (0);}struct tty *cxdevtotty (dev_t dev){	int unit = UNIT(dev);	if (unit == UNIT_CTL || unit >= NCX*NCHAN)		return (0);	return (cxchan[unit]->ttyp);}/* * Stop output on a line */void cxstop (struct tty *tp, int flag){	cx_chan_t *c = cxchan[UNIT(tp->t_dev)];	unsigned short port = c->chip->port;	int s = spltty ();	if (tp->t_state & TS_BUSY) {		print (("cx%d.%d: cxstop\n", c->board->num, c->num));		/* Set current channel number */		outb (CAR(port), c->num & 3);		/* Stop transmitter */		cx_cmd (port, CCR_DISTX);	}	splx (s);}/* * Handle receive interrupts, including receive errors and * receive timeout interrupt. */int cxrinta (cx_chan_t *c){	unsigned short port = c->chip->port;	unsigned short len = 0, risr = inw (RISR(port)), reoir = 0;	struct tty *tp = c->ttyp;	/* Compute optimal receiver buffer length. */	int rbsz = (c->rxbaud + 800 - 1) / 800 * 2;	if (rbsz < 4)		rbsz = 4;	else if (rbsz > DMABUFSZ)		rbsz = DMABUFSZ;	if (risr & RISA_TIMEOUT) {		unsigned long rcbadr = (unsigned short) inw (RCBADRL(port)) |			(long) inw (RCBADRU(port)) << 16;		unsigned char *buf = 0;		unsigned short cnt_port = 0, sts_port = 0;		if (rcbadr >= c->brphys && rcbadr < c->brphys+DMABUFSZ) {			buf = c->brbuf;			len = rcbadr - c->brphys;			cnt_port = BRBCNT(port);			sts_port = BRBSTS(port);		} else if (rcbadr >= c->arphys && rcbadr < c->arphys+DMABUFSZ) {			buf = c->arbuf;			len = rcbadr - c->arphys;			cnt_port = ARBCNT(port);			sts_port = ARBSTS(port);		} else			printf ("cx%d.%d: timeout: invalid buffer address\n",				c->board->num, c->num);		if (len) {			print (("cx%d.%d: async receive timeout (%d bytes), risr=%b, arbsts=%b, brbsts=%b\n",				c->board->num, c->num, len, risr, RISA_BITS,				inb (ARBSTS(port)), BSTS_BITS, inb (BRBSTS(port)), BSTS_BITS));			c->stat->ibytes += len;			if (tp && (tp->t_state & TS_ISOPEN)) {				int i;				int (*rint)(int, struct tty *) =					linesw[tp->t_line].l_rint;				for (i=0; i<len; ++i)					(*rint) (buf[i], tp);			}			/* Restart receiver. */			outw (cnt_port, rbsz);			outb (sts_port, BSTS_OWN24);		}		return (REOI_TERMBUFF);	}	print (("cx%d.%d: async receive interrupt, risr=%b, arbsts=%b, brbsts=%b\n",		c->board->num, c->num, risr, RISA_BITS,		inb (ARBSTS(port)), BSTS_BITS, inb (BRBSTS(port)), BSTS_BITS));	if (risr & RIS_BUSERR) {		printf ("cx%d.%d: receive bus error\n", c->board->num, c->num);		++c->stat->ierrs;	}	if (risr & (RIS_OVERRUN | RISA_PARERR | RISA_FRERR | RISA_BREAK)) {		int err = 0;		if (risr & RISA_PARERR)			err |= TTY_PE;		if (risr & RISA_FRERR)			err |= TTY_FE;#ifdef TTY_OE		if (risr & RIS_OVERRUN)			err |= TTY_OE;#endif#ifdef TTY_BI		if (risr & RISA_BREAK)			err |= TTY_BI;#endif		print (("cx%d.%d: receive error %x\n", c->board->num, c->num, err));		if (tp && (tp->t_state & TS_ISOPEN))			(*linesw[tp->t_line].l_rint) (err, tp);		++c->stat->ierrs;	}	/* Discard exception characters. */	if ((risr & RISA_SCMASK) && tp && (tp->t_iflag & IXON))		reoir |= REOI_DISCEXC;	/* Handle received data. */	if ((risr & RIS_EOBUF) && tp && (tp->t_state & TS_ISOPEN)) {		int (*rint)(int, struct tty *) = linesw[tp->t_line].l_rint;		unsigned char *buf;		int i;		len = (risr & RIS_BB) ? inw(BRBCNT(port)) : inw(ARBCNT(port));		print (("cx%d.%d: async: %d bytes received\n",			c->board->num, c->num, len));		c->stat->ibytes += len;		buf = (risr & RIS_BB) ? c->brbuf : c->arbuf;		for (i=0; i<len; ++i)			(*rint) (buf[i], tp);	}	/* Restart receiver. */	if (! (inb (ARBSTS(port)) & BSTS_OWN24)) {		outw (ARBCNT(port), rbsz);		outb (ARBSTS(port), BSTS_OWN24);	}	if (! (inb (BRBSTS(port)) & BSTS_OWN24)) {		outw (BRBCNT(port), rbsz);		outb (BRBSTS(port), BSTS_OWN24);	}	return (reoir);}/* * Handle transmit interrupt. */void cxtinta (cx_chan_t *c){	struct tty *tp = c->ttyp;	unsigned short port = c->chip->port;	unsigned char tisr = inb (TISR(port));	print (("cx%d.%d: async transmit interrupt, tisr=%b, atbsts=%b, btbsts=%b\n",		c->board->num, c->num, tisr, TIS_BITS,		inb (ATBSTS(port)), BSTS_BITS, inb (BTBSTS(port)), BSTS_BITS));	if (tisr & TIS_BUSERR) {		printf ("cx%d.%d: transmit bus error\n",			c->board->num, c->num);		++c->stat->oerrs;	} else if (tisr & TIS_UNDERRUN) {		printf ("cx%d.%d: transmit underrun error\n",			c->board->num, c->num);		++c->stat->oerrs;	}	if (tp) {		tp->t_state &= ~(TS_BUSY | TS_FLUSH);		if (tp->t_line)			(*linesw[tp->t_line].l_start) (tp);		else			cxoproc (tp);	}}/* * Handle modem interrupt. */void cxmint (cx_chan_t *c){	unsigned short port = c->chip->port;	unsigned char misr = inb (MISR(port));	unsigned char msvr = inb (MSVR(port));	struct tty *tp = c->ttyp;	if (c->mode != M_ASYNC) {		printf ("cx%d.%d: unexpected modem interrupt, misr=%b, msvr=%b\n",			c->board->num, c->num, misr, MIS_BITS, msvr, MSV_BITS);		return;	}	print (("cx%d.%d: modem interrupt, misr=%b, msvr=%b\n",		c->board->num, c->num, misr, MIS_BITS, msvr, MSV_BITS));	/* Ignore DSR events. */	/* Ignore RTC/CTS events, handled by hardware. */	/* Handle carrier detect/loss. */	if (tp && (misr & MIS_CCD))		(*linesw[tp->t_line].l_modem) (tp, (msvr & MSV_CD) != 0);}/* * Recover after lost transmit interrupts. */void cxtimeout (void *a){	cx_board_t *b;	cx_chan_t *c;	struct tty *tp;	int s;	for (b=cxboard; b<cxboard+NCX; ++b)		for (c=b->chan; c<b->chan+NCHAN; ++c) {			tp = c->ttyp;			if (c->type==T_NONE || c->mode!=M_ASYNC || !tp)				continue;			s = spltty ();			if (tp->t_state & TS_BUSY) {				tp->t_state &= ~TS_BUSY;				if (tp->t_line)					(*linesw[tp->t_line].l_start) (tp);				else					cxoproc (tp);			}			splx (s);		}	timeout (cxtimeout, 0, hz*5);}#if defined(__FreeBSD__) && (__FreeBSD__ > 1 )static cx_devsw_installed = 0;static void 	cx_drvinit(void *unused){	dev_t dev;	if( ! cx_devsw_installed ) {		dev = makedev(CDEV_MAJOR,0);		cdevsw_add(&dev,&cx_cdevsw,NULL);		cx_devsw_installed = 1;    	}}SYSINIT(cxdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,cx_drvinit,NULL)#endif#endif /* NCX */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩小说| 不卡一区中文字幕| 三级成人在线视频| 亚洲一区二区免费视频| 亚洲乱码中文字幕| 亚洲欧美另类久久久精品 | 亚洲男女毛片无遮挡| 国产精品免费视频网站| 国产欧美一区二区在线| 亚洲国产精品精华液ab| 欧美国产精品一区二区三区| 国产精品女同一区二区三区| 中文字幕精品三区| 亚洲色大成网站www久久九九| 中文字幕欧美一区| 亚洲最大成人综合| 天堂成人国产精品一区| 老司机精品视频线观看86| 国产一区二区三区久久悠悠色av| 激情图区综合网| 国产裸体歌舞团一区二区| 国产成人免费视频| 99久久精品99国产精品| 91成人网在线| 6080亚洲精品一区二区| 欧美mv日韩mv国产| 欧美激情中文字幕一区二区| 国产精品久久久久一区| 亚洲精选视频在线| 日韩精品乱码av一区二区| 精品一区二区影视| 成人aaaa免费全部观看| 欧洲视频一区二区| 日韩精品一区二区在线| 国产三级精品视频| 亚洲精品福利视频网站| 蜜臀va亚洲va欧美va天堂| 国产风韵犹存在线视精品| 99久久久免费精品国产一区二区| 欧美三区在线视频| 精品国产乱码久久久久久老虎| 国产精品久久久久天堂| 亚洲成av人片一区二区梦乃 | 欧美人妖巨大在线| 精品国产第一区二区三区观看体验 | 国产日韩欧美综合一区| 亚洲男人电影天堂| 蜜臀av一级做a爰片久久| 高清在线成人网| 欧美综合一区二区三区| 亚洲精品一线二线三线| 亚洲欧美日韩电影| 久久成人av少妇免费| 91玉足脚交白嫩脚丫在线播放| 日韩欧美一区二区视频| 日韩美女视频一区二区 | 在线免费观看一区| 精品国产乱码久久久久久浪潮| 亚洲精品国产视频| 激情亚洲综合在线| 欧美视频一区二区在线观看| 亚洲精品在线观| 偷拍一区二区三区四区| av成人老司机| 久久久99久久| 美日韩一区二区| 色猫猫国产区一区二在线视频| 精品国产乱码久久久久久影片| 亚洲一区二区三区四区五区黄| 国产成人精品一区二区三区网站观看 | 成人动漫视频在线| 欧美videossexotv100| 亚洲欧美激情插| 国产精品夜夜爽| 日韩一本二本av| 亚洲宅男天堂在线观看无病毒| 成人小视频在线| 精品成人在线观看| 日韩精品久久久久久| 色婷婷av一区二区三区大白胸| 久久久亚洲精品石原莉奈| 日韩精品五月天| 欧美午夜视频网站| 亚洲精选一二三| 91在线观看污| 中文字幕高清一区| 国产伦精品一区二区三区视频青涩| 欧美三级日本三级少妇99| 亚洲欧洲精品一区二区三区不卡| 国产精品一二二区| 久久精品亚洲麻豆av一区二区| 美腿丝袜亚洲色图| 欧美一区二区三区系列电影| 亚洲国产精品久久人人爱| 色婷婷国产精品综合在线观看| 日韩毛片精品高清免费| 成人av资源在线观看| 国产清纯在线一区二区www| 国产一区二区不卡| 精品少妇一区二区三区日产乱码 | 亚洲婷婷综合久久一本伊一区| 国产乱码字幕精品高清av | 欧美一区二区在线免费播放| 亚洲福利国产精品| 欧美怡红院视频| 亚洲亚洲精品在线观看| 欧美日韩一区二区三区在线看| 亚洲综合成人在线| 日本韩国欧美一区二区三区| 亚洲精品美国一| 欧美性一级生活| 午夜精品久久久久影视| 欧美区在线观看| 日本视频中文字幕一区二区三区| 欧美写真视频网站| 亚洲国产视频在线| 欧美精品欧美精品系列| 免费成人在线观看| 久久久久国产精品麻豆ai换脸| 成人夜色视频网站在线观看| 国产精品超碰97尤物18| 色婷婷av一区二区三区大白胸 | 精品一区二区三区蜜桃| 337p粉嫩大胆色噜噜噜噜亚洲| 国产综合成人久久大片91| 国产人伦精品一区二区| 91丨porny丨户外露出| 亚洲成人av电影在线| 91精品一区二区三区在线观看| 久久成人免费网| 1区2区3区欧美| 欧美日韩久久不卡| 国产剧情一区二区三区| 亚洲另类中文字| 69精品人人人人| 国产999精品久久久久久| 一区二区三区在线影院| 4438成人网| 国产福利一区在线| 一区二区三区在线观看欧美| 91麻豆精品国产91久久久久 | 欧美一级夜夜爽| 国产成人精品亚洲777人妖 | 91福利国产成人精品照片| 免费观看一级欧美片| 国产精品日韩精品欧美在线| 欧美艳星brazzers| 寂寞少妇一区二区三区| 亚洲天堂av一区| 日韩欧美一区二区三区在线| 成人av电影在线| 免费高清在线一区| 亚洲人精品午夜| 日韩精品一区二区三区在线观看| 99re这里只有精品6| 日本vs亚洲vs韩国一区三区二区 | 欧美一区二区成人| 成人综合在线网站| 五月天精品一区二区三区| 国产欧美一二三区| 91精品国产综合久久精品app| 成人看片黄a免费看在线| 偷偷要91色婷婷| 亚洲欧美日韩国产一区二区三区| 欧美mv和日韩mv国产网站| 欧美午夜精品理论片a级按摩| 国产成人在线观看| 青青草国产成人av片免费| 亚洲欧洲99久久| 精品国产sm最大网站免费看| 在线欧美小视频| eeuss鲁一区二区三区| 捆绑变态av一区二区三区| 一二三四区精品视频| 国产欧美一区二区精品秋霞影院 | 玉米视频成人免费看| 久久久久久夜精品精品免费| 欧美日韩成人高清| 91免费版在线| 成人深夜在线观看| 麻豆一区二区三| 午夜电影网一区| 亚洲精品福利视频网站| 一区二区中文视频| 国产亚洲人成网站| 精品久久久久久久人人人人传媒 | 国产清纯白嫩初高生在线观看91| 欧美一区国产二区| 欧美日韩电影在线播放| 色综合久久六月婷婷中文字幕| 懂色av一区二区三区蜜臀| 久久国产精品72免费观看| 日本色综合中文字幕| 亚洲国产综合视频在线观看| 亚洲视频一区在线| 国产精品白丝在线| 中文字幕精品一区二区精品绿巨人 | 欧美一二区视频| 欧美老肥妇做.爰bbww| 欧美体内she精高潮|