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

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

?? stallion.c

?? powerpc內核mpc8241linux系統下char驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
	printk("stl_charsinbuffer(tty=%x)\n", (int) tty);#endif	if (tty == (struct tty_struct *) NULL)		return(0);	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return(0);	if (portp->tx.buf == (char *) NULL)		return(0);	head = portp->tx.head;	tail = portp->tx.tail;	size = (head >= tail) ? (head - tail) : (STL_TXBUFSIZE - (tail - head));	if ((size == 0) && test_bit(ASYI_TXBUSY, &portp->istate))		size = 1;	return(size);}/*****************************************************************************//* *	Generate the serial struct info. */static void stl_getserial(stlport_t *portp, struct serial_struct *sp){	struct serial_struct	sio;	stlbrd_t		*brdp;#if DEBUG	printk("stl_getserial(portp=%x,sp=%x)\n", (int) portp, (int) sp);#endif	memset(&sio, 0, sizeof(struct serial_struct));	sio.line = portp->portnr;	sio.port = portp->ioaddr;	sio.flags = portp->flags;	sio.baud_base = portp->baud_base;	sio.close_delay = portp->close_delay;	sio.closing_wait = portp->closing_wait;	sio.custom_divisor = portp->custom_divisor;	sio.hub6 = 0;	if (portp->uartp == &stl_cd1400uart) {		sio.type = PORT_CIRRUS;		sio.xmit_fifo_size = CD1400_TXFIFOSIZE;	} else {		sio.type = PORT_UNKNOWN;		sio.xmit_fifo_size = SC26198_TXFIFOSIZE;	}	brdp = stl_brds[portp->brdnr];	if (brdp != (stlbrd_t *) NULL)		sio.irq = brdp->irq;	copy_to_user(sp, &sio, sizeof(struct serial_struct));}/*****************************************************************************//* *	Set port according to the serial struct info. *	At this point we do not do any auto-configure stuff, so we will *	just quietly ignore any requests to change irq, etc. */static int stl_setserial(stlport_t *portp, struct serial_struct *sp){	struct serial_struct	sio;#if DEBUG	printk("stl_setserial(portp=%x,sp=%x)\n", (int) portp, (int) sp);#endif	copy_from_user(&sio, sp, sizeof(struct serial_struct));	if (!capable(CAP_SYS_ADMIN)) {		if ((sio.baud_base != portp->baud_base) ||		    (sio.close_delay != portp->close_delay) ||		    ((sio.flags & ~ASYNC_USR_MASK) !=		    (portp->flags & ~ASYNC_USR_MASK)))			return(-EPERM);	} 	portp->flags = (portp->flags & ~ASYNC_USR_MASK) |		(sio.flags & ASYNC_USR_MASK);	portp->baud_base = sio.baud_base;	portp->close_delay = sio.close_delay;	portp->closing_wait = sio.closing_wait;	portp->custom_divisor = sio.custom_divisor;	stl_setport(portp, portp->tty->termios);	return(0);}/*****************************************************************************/static int stl_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg){	stlport_t	*portp;	unsigned int	ival;	int		rc;#if DEBUG	printk("stl_ioctl(tty=%x,file=%x,cmd=%x,arg=%x)\n",		(int) tty, (int) file, cmd, (int) arg);#endif	if (tty == (struct tty_struct *) NULL)		return(-ENODEV);	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return(-ENODEV);	if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && 	    (cmd != COM_GETPORTSTATS) && (cmd != COM_CLRPORTSTATS)) {		if (tty->flags & (1 << TTY_IO_ERROR))			return(-EIO);	}	rc = 0;	switch (cmd) {	case TIOCGSOFTCAR:		rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0),			(unsigned int *) arg);		break;	case TIOCSSOFTCAR:		if ((rc = verify_area(VERIFY_READ, (void *) arg,		    sizeof(int))) == 0) {			get_user(ival, (unsigned int *) arg);			tty->termios->c_cflag =				(tty->termios->c_cflag & ~CLOCAL) |				(ival ? CLOCAL : 0);		}		break;	case TIOCMGET:		if ((rc = verify_area(VERIFY_WRITE, (void *) arg,		    sizeof(unsigned int))) == 0) {			ival = stl_getsignals(portp);			put_user(ival, (unsigned int *) arg);		}		break;	case TIOCMBIS:		if ((rc = verify_area(VERIFY_READ, (void *) arg,		    sizeof(unsigned int))) == 0) {			get_user(ival, (unsigned int *) arg);			stl_setsignals(portp, ((ival & TIOCM_DTR) ? 1 : -1),				((ival & TIOCM_RTS) ? 1 : -1));		}		break;	case TIOCMBIC:		if ((rc = verify_area(VERIFY_READ, (void *) arg,		    sizeof(unsigned int))) == 0) {			get_user(ival, (unsigned int *) arg);			stl_setsignals(portp, ((ival & TIOCM_DTR) ? 0 : -1),				((ival & TIOCM_RTS) ? 0 : -1));		}		break;	case TIOCMSET:		if ((rc = verify_area(VERIFY_READ, (void *) arg,		    sizeof(unsigned int))) == 0) {			get_user(ival, (unsigned int *) arg);			stl_setsignals(portp, ((ival & TIOCM_DTR) ? 1 : 0),				((ival & TIOCM_RTS) ? 1 : 0));		}		break;	case TIOCGSERIAL:		if ((rc = verify_area(VERIFY_WRITE, (void *) arg,		    sizeof(struct serial_struct))) == 0)			stl_getserial(portp, (struct serial_struct *) arg);		break;	case TIOCSSERIAL:		if ((rc = verify_area(VERIFY_READ, (void *) arg,		    sizeof(struct serial_struct))) == 0)			rc = stl_setserial(portp, (struct serial_struct *) arg);		break;	case COM_GETPORTSTATS:		if ((rc = verify_area(VERIFY_WRITE, (void *) arg,		    sizeof(comstats_t))) == 0)			rc = stl_getportstats(portp, (comstats_t *) arg);		break;	case COM_CLRPORTSTATS:		if ((rc = verify_area(VERIFY_WRITE, (void *) arg,		    sizeof(comstats_t))) == 0)			rc = stl_clrportstats(portp, (comstats_t *) arg);		break;	case TIOCSERCONFIG:	case TIOCSERGWILD:	case TIOCSERSWILD:	case TIOCSERGETLSR:	case TIOCSERGSTRUCT:	case TIOCSERGETMULTI:	case TIOCSERSETMULTI:	default:		rc = -ENOIOCTLCMD;		break;	}	return(rc);}/*****************************************************************************/static void stl_settermios(struct tty_struct *tty, struct termios *old){	stlport_t	*portp;	struct termios	*tiosp;#if DEBUG	printk("stl_settermios(tty=%x,old=%x)\n", (int) tty, (int) old);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	tiosp = tty->termios;	if ((tiosp->c_cflag == old->c_cflag) &&	    (tiosp->c_iflag == old->c_iflag))		return;	stl_setport(portp, tiosp);	stl_setsignals(portp, ((tiosp->c_cflag & (CBAUD & ~CBAUDEX)) ? 1 : 0),		-1);	if ((old->c_cflag & CRTSCTS) && ((tiosp->c_cflag & CRTSCTS) == 0)) {		tty->hw_stopped = 0;		stl_start(tty);	}	if (((old->c_cflag & CLOCAL) == 0) && (tiosp->c_cflag & CLOCAL))		wake_up_interruptible(&portp->open_wait);}/*****************************************************************************//* *	Attempt to flow control who ever is sending us data. Based on termios *	settings use software or/and hardware flow control. */static void stl_throttle(struct tty_struct *tty){	stlport_t	*portp;#if DEBUG	printk("stl_throttle(tty=%x)\n", (int) tty);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	stl_flowctrl(portp, 0);}/*****************************************************************************//* *	Unflow control the device sending us data... */static void stl_unthrottle(struct tty_struct *tty){	stlport_t	*portp;#if DEBUG	printk("stl_unthrottle(tty=%x)\n", (int) tty);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	stl_flowctrl(portp, 1);}/*****************************************************************************//* *	Stop the transmitter. Basically to do this we will just turn TX *	interrupts off. */static void stl_stop(struct tty_struct *tty){	stlport_t	*portp;#if DEBUG	printk("stl_stop(tty=%x)\n", (int) tty);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	stl_startrxtx(portp, -1, 0);}/*****************************************************************************//* *	Start the transmitter again. Just turn TX interrupts back on. */static void stl_start(struct tty_struct *tty){	stlport_t	*portp;#if DEBUG	printk("stl_start(tty=%x)\n", (int) tty);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	stl_startrxtx(portp, -1, 1);}/*****************************************************************************//* *	Hangup this port. This is pretty much like closing the port, only *	a little more brutal. No waiting for data to drain. Shutdown the *	port and maybe drop signals. */static void stl_hangup(struct tty_struct *tty){	stlport_t	*portp;#if DEBUG	printk("stl_hangup(tty=%x)\n", (int) tty);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	portp->flags &= ~ASYNC_INITIALIZED;	stl_disableintrs(portp);	if (tty->termios->c_cflag & HUPCL)		stl_setsignals(portp, 0, 0);	stl_enablerxtx(portp, 0, 0);	stl_flushbuffer(tty);	portp->istate = 0;	set_bit(TTY_IO_ERROR, &tty->flags);	if (portp->tx.buf != (char *) NULL) {		kfree_s(portp->tx.buf, STL_TXBUFSIZE);		portp->tx.buf = (char *) NULL;		portp->tx.head = (char *) NULL;		portp->tx.tail = (char *) NULL;	}	portp->tty = (struct tty_struct *) NULL;	portp->flags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CALLOUT_ACTIVE);	portp->refcount = 0;	wake_up_interruptible(&portp->open_wait);}/*****************************************************************************/static void stl_flushbuffer(struct tty_struct *tty){	stlport_t	*portp;#if DEBUG	printk("stl_flushbuffer(tty=%x)\n", (int) tty);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	stl_flush(portp);	wake_up_interruptible(&tty->write_wait);	if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&	    tty->ldisc.write_wakeup)		(tty->ldisc.write_wakeup)(tty);}/*****************************************************************************/static void stl_breakctl(struct tty_struct *tty, int state){	stlport_t	*portp;#if DEBUG	printk("stl_breakctl(tty=%x,state=%d)\n", (int) tty, state);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	stl_sendbreak(portp, ((state == -1) ? 1 : 2));}/*****************************************************************************/static void stl_waituntilsent(struct tty_struct *tty, int timeout){	stlport_t	*portp;	unsigned long	tend;#if DEBUG	printk("stl_waituntilsent(tty=%x,timeout=%d)\n", (int) tty, timeout);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	if (timeout == 0)		timeout = HZ;	tend = jiffies + timeout;	while (stl_datastate(portp)) {		if (signal_pending(current))			break;		stl_delay(2);		if (time_after_eq(jiffies, tend))			break;	}}/*****************************************************************************/static void stl_sendxchar(struct tty_struct *tty, char ch){	stlport_t	*portp;#if DEBUG	printk("stl_sendxchar(tty=%x,ch=%x)\n", (int) tty, ch);#endif	if (tty == (struct tty_struct *) NULL)		return;	portp = tty->driver_data;	if (portp == (stlport_t *) NULL)		return;	if (ch == STOP_CHAR(tty))		stl_sendflow(portp, 0);	else if (ch == START_CHAR(tty))		stl_sendflow(portp, 1);	else		stl_putchar(tty, ch);}/*****************************************************************************/#define	MAXLINE		80/* *	Format info for a specified port. The line is deliberately limited *	to 80 characters. (If it is too long it will be truncated, if too *	short then padded with spaces). */static int stl_portinfo(stlport_t *portp, int portnr, char *pos){	char	*sp;	int	sigs, cnt;	sp = pos;	sp += sprintf(sp, "%d: uart:%s tx:%d rx:%d",		portnr, (portp->hwid == 1) ? "SC26198" : "CD1400",		(int) portp->stats.txtotal, (int) portp->stats.rxtotal);	if (portp->stats.rxframing)		sp += sprintf(sp, " fe:%d", (int) portp->stats.rxframing);	if (portp->stats.rxparity)		sp += sprintf(sp, " pe:%d", (int) portp->stats.rxparity);	if (portp->stats.rxbreaks)		sp += sprintf(sp, " brk:%d", (int) portp->stats.rxbreaks);	if (portp->stats.rxoverrun)		sp += sprintf(sp, " oe:%d", (int) portp->stats.rxoverrun);	sigs = stl_getsignals(portp);	cnt = sprintf(sp, "%s%s%s%s%s ",		(sigs & TIOCM_RTS) ? "|RTS" : "",		(sigs & TIOCM_CTS) ? "|CTS" : "",		(sigs & TIOCM_DTR) ? "|DTR" : "",		(sigs & TIOCM_CD) ? "|DCD" : "",

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲午夜精品久久久久久| 91精品国产入口| 欧美天堂一区二区三区| 日韩欧美国产综合在线一区二区三区| 久久亚洲精精品中文字幕早川悠里| 国产精品久久久久久久久久免费看| 亚洲国产一区二区三区| 国产一区二区三区四区在线观看| 色综合色综合色综合| 日韩视频在线永久播放| 最新久久zyz资源站| 日韩电影免费一区| 成人av在线播放网站| 欧美精品高清视频| 欧美激情中文不卡| 蜜桃av一区二区三区| 91影院在线观看| 欧美r级在线观看| 亚洲第一久久影院| 风间由美一区二区三区在线观看| 欧美日韩美女一区二区| 欧美激情综合在线| 男人操女人的视频在线观看欧美| 99麻豆久久久国产精品免费优播| 日韩亚洲欧美一区| 亚洲最大色网站| 94色蜜桃网一区二区三区| 精品国产乱码久久| 日韩av网站免费在线| 91福利社在线观看| 国产精品久久毛片a| 国产999精品久久久久久| 日韩免费在线观看| 日本中文字幕一区二区视频| 欧美视频一区二| 一区二区三区在线播放| av一区二区三区| 国产欧美一区二区精品性色| 韩国av一区二区三区四区| 这里只有精品视频在线观看| 亚洲国产成人av| 欧美午夜电影网| 亚洲综合无码一区二区| 91在线观看美女| 亚洲私人影院在线观看| 99精品热视频| 亚洲欧洲另类国产综合| 成人天堂资源www在线| 国产女人18水真多18精品一级做| 国产一区二区三区免费观看| 久久久久99精品国产片| 国产精品一区二区免费不卡| 久久众筹精品私拍模特| 狠狠色丁香久久婷婷综| 久久综合色8888| 国产成人综合网站| 中文字幕免费不卡| 99久久精品国产精品久久| 亚洲日韩欧美一区二区在线| 在线免费观看日本一区| 亚洲成人精品影院| 欧美片网站yy| 久久99精品久久只有精品| 精品国产麻豆免费人成网站| 国产一区二区三区四区五区入口| 久久久久久久电影| 99久久精品免费看国产免费软件| 一区二区三区毛片| 欧美一区二区三区免费观看视频| 国产伦精品一区二区三区免费| 欧美高清在线视频| 欧美午夜一区二区| 久久精品免费看| 国产精品久久久久aaaa樱花 | 91免费国产在线| 午夜私人影院久久久久| 精品国产伦一区二区三区观看方式| 国产精品一区二区视频| 一区二区三区成人| 欧美一级夜夜爽| 不卡影院免费观看| 美女一区二区三区| ...中文天堂在线一区| 欧美日韩高清一区二区三区| 精品一区在线看| 亚洲久本草在线中文字幕| 欧美一区二区三区免费视频| av福利精品导航| 日本视频一区二区| 国产精品日韩精品欧美在线| 69p69国产精品| 99视频精品在线| 久久超碰97人人做人人爱| 亚洲免费在线视频一区 二区| 日韩三级在线免费观看| 91麻豆国产在线观看| 久久99精品国产麻豆不卡| 椎名由奈av一区二区三区| 欧美成人性福生活免费看| 91热门视频在线观看| 国产精品99久久久久久似苏梦涵| 色av成人天堂桃色av| 国产精品成人免费精品自在线观看| 欧美无人高清视频在线观看| 粉嫩蜜臀av国产精品网站| 日韩精品福利网| 一区二区三区在线不卡| 日本一区二区在线不卡| 日韩一区二区精品葵司在线| 色88888久久久久久影院野外| 国产精品一区二区久激情瑜伽| 性感美女久久精品| 一区二区三区欧美亚洲| 亚洲视频免费观看| 亚洲三级在线看| 国产婷婷一区二区| 欧美成va人片在线观看| 在线不卡欧美精品一区二区三区| 91啪在线观看| 97se亚洲国产综合自在线| 成人久久18免费网站麻豆| 韩国女主播一区二区三区| 人妖欧美一区二区| 日韩av一二三| 日本欧美久久久久免费播放网| 午夜欧美电影在线观看| 亚洲成人免费看| 日韩精品免费视频人成| 日精品一区二区| 蜜桃传媒麻豆第一区在线观看| 美女久久久精品| 久久91精品国产91久久小草| 久久精品二区亚洲w码| 极品销魂美女一区二区三区| 久久电影国产免费久久电影| 久久99久久久欧美国产| 国内精品久久久久影院色 | 国产亚洲午夜高清国产拍精品| 久久新电视剧免费观看| 国产清纯在线一区二区www| 久久久精品免费观看| 国产精品久久久99| 亚洲另类春色校园小说| 亚洲福利电影网| 日韩av一级电影| 国产乱子伦一区二区三区国色天香| 国产一区二区精品久久99| 国产盗摄女厕一区二区三区| 91在线观看高清| 欧美日韩一区久久| 精品三级在线观看| 国产女主播视频一区二区| 国产精品久久一卡二卡| 亚洲成人先锋电影| 国精品**一区二区三区在线蜜桃| 国产999精品久久久久久绿帽| 99精品欧美一区| 欧美区一区二区三区| 久久久久久一级片| 亚洲私人黄色宅男| 日韩在线卡一卡二| 国产91精品久久久久久久网曝门 | 精品国产露脸精彩对白| 欧美激情艳妇裸体舞| 午夜精品久久久久久久99水蜜桃| 精品亚洲成a人在线观看| 99久久久无码国产精品| 欧美精品1区2区| 国产精品欧美一区喷水| 亚洲成人资源网| 成人91在线观看| 欧美日韩一区高清| 欧美国产在线观看| 亚洲成人7777| 成人永久看片免费视频天堂| 欧美精品18+| 亚洲欧美自拍偷拍色图| 青青草原综合久久大伊人精品| 成人爱爱电影网址| 337p亚洲精品色噜噜| 国产精品乱人伦一区二区| 日韩av电影免费观看高清完整版 | 欧美视频在线观看一区二区| www国产精品av| 亚洲va欧美va人人爽| 99热国产精品| 国产精品欧美一区二区三区| 日本女优在线视频一区二区| 91色视频在线| 国产精品嫩草久久久久| 九九国产精品视频| 欧美精品在线一区二区三区| 亚洲视频每日更新| 国产精品一区二区x88av| 欧美美女直播网站| 一区二区理论电影在线观看| 大白屁股一区二区视频| 精品国产电影一区二区| 美国一区二区三区在线播放| 欧美日本一区二区在线观看|