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

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

?? su.c

?? 廣州斯道2410普及版II的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
		else if (baud)			quot = info->baud_base / baud;	}	/* If the quotient is zero refuse the change */	if (!quot && old_termios) {		info->tty->termios->c_cflag &= ~CBAUD;		info->tty->termios->c_cflag |= (old_termios->c_cflag & CBAUD);		baud = tty_get_baud_rate(info->tty);		if (!baud)			baud = 9600;		if (baud == 38400 &&		    ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST))			quot = info->custom_divisor;		else {			if (baud == 134)				/* Special case since 134 is really 134.5 */				quot = (2*info->baud_base / 269);			else if (baud)				quot = info->baud_base / baud;		}	}	/* As a last resort, if the quotient is zero, default to 9600 bps */	if (!quot)		quot = info->baud_base / 9600;	info->timeout = ((info->xmit_fifo_size*HZ*bits*quot) / info->baud_base);	info->timeout += HZ/50;		/* Add .02 seconds of slop */	/* Set up FIFO's */	if (uart_config[info->type].flags & UART_USE_FIFO) {		if ((info->baud_base / quot) < 9600)			fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;		else			fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_8;	}	if (info->type == PORT_16750)		fcr |= UART_FCR7_64BYTE;	/* CTS flow control flag and modem status interrupts */	info->IER &= ~UART_IER_MSI;	if (info->flags & ASYNC_HARDPPS_CD)		info->IER |= UART_IER_MSI;	if (info->cflag & CRTSCTS) {		info->flags |= ASYNC_CTS_FLOW;		info->IER |= UART_IER_MSI;	} else		info->flags &= ~ASYNC_CTS_FLOW;	if (info->cflag & CLOCAL)		info->flags &= ~ASYNC_CHECK_CD;	else {		info->flags |= ASYNC_CHECK_CD;		info->IER |= UART_IER_MSI;	}	serial_out(info, UART_IER, info->IER);	/*	 * Set up parity check flag	 */	if (info->tty) {#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))		info->read_status_mask = UART_LSR_OE | UART_LSR_THRE |					 UART_LSR_DR;		if (I_INPCK(info->tty))			info->read_status_mask |= UART_LSR_FE | UART_LSR_PE;		if (I_BRKINT(info->tty) || I_PARMRK(info->tty))			info->read_status_mask |= UART_LSR_BI;		/*		 * Characters to ignore		 */		info->ignore_status_mask = 0;		if (I_IGNPAR(info->tty))			info->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;		if (I_IGNBRK(info->tty)) {			info->ignore_status_mask |= UART_LSR_BI;			/*			 * If we're ignore parity and break indicators, ignore 			 * overruns too.  (For real raw support).			 */			if (I_IGNPAR(info->tty))				info->ignore_status_mask |= UART_LSR_OE;		}		/*		 * !!! ignore all characters if CREAD is not set		 */		if ((info->cflag & CREAD) == 0)			info->ignore_status_mask |= UART_LSR_DR;	}	save_flags(flags); cli();	if (uart_config[info->type].flags & UART_STARTECH) {		serial_outp(info, UART_LCR, 0xBF);		serial_outp(info, UART_EFR,			    (info->cflag & CRTSCTS) ? UART_EFR_CTS : 0);	}	serial_outp(info, UART_LCR, cval | UART_LCR_DLAB);	/* set DLAB */	serial_outp(info, UART_DLL, quot & 0xff);	/* LS of divisor */	serial_outp(info, UART_DLM, quot >> 8);		/* MS of divisor */	if (info->type == PORT_16750)		serial_outp(info, UART_FCR, fcr); 	/* set fcr */	serial_outp(info, UART_LCR, cval);		/* reset DLAB */	if (info->type != PORT_16750)		serial_outp(info, UART_FCR, fcr); 	/* set fcr */	restore_flags(flags);	info->quot = quot;}static voidsu_put_char(struct tty_struct *tty, unsigned char ch){	struct su_struct *info = (struct su_struct *)tty->driver_data;	unsigned long flags;	if (serial_paranoia_check(info, tty->device, "su_put_char"))		return;	if (!tty || !info->xmit_buf)		return;	save_flags(flags); cli();	if (info->xmit_cnt >= SERIAL_XMIT_SIZE - 1) {		restore_flags(flags);		return;	}	info->xmit_buf[info->xmit_head++] = ch;	info->xmit_head &= SERIAL_XMIT_SIZE-1;	info->xmit_cnt++;	restore_flags(flags);}static void su_put_char_kbd(unsigned char c){	struct su_struct *info = su_table;	int lsr;	if (info->port_type != SU_PORT_KBD)		++info;	if (info->port_type != SU_PORT_KBD)		return;	do {		lsr = serial_in(info, UART_LSR);	} while (!(lsr & UART_LSR_THRE));	/* Send the character out. */	su_outb(info, UART_TX, c);}static voidsu_change_mouse_baud(int baud){	struct su_struct *info = su_table;	if (info->port_type != SU_PORT_MS)		++info;	if (info->port_type != SU_PORT_MS)		return;	info->cflag &= ~CBAUD;	switch (baud) {		case 1200:			info->cflag |= B1200;			break;		case 2400:			info->cflag |= B2400;			break;		case 4800:			info->cflag |= B4800;			break;		case 9600:			info->cflag |= B9600;			break;		default:			printk("su_change_mouse_baud: unknown baud rate %d, "			       "defaulting to 1200\n", baud);			info->cflag |= 1200;			break;	}	change_speed(info, 0);}static voidsu_flush_chars(struct tty_struct *tty){	struct su_struct *info = (struct su_struct *)tty->driver_data;	unsigned long flags;					if (serial_paranoia_check(info, tty->device, "su_flush_chars"))		return;	if (info->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped ||	    !info->xmit_buf)		return;	save_flags(flags); cli();	info->IER |= UART_IER_THRI;	serial_out(info, UART_IER, info->IER);	restore_flags(flags);}static intsu_write(struct tty_struct * tty, int from_user,		    const unsigned char *buf, int count){	int	c, ret = 0;	struct su_struct *info = (struct su_struct *)tty->driver_data;	unsigned long flags;	if (serial_paranoia_check(info, tty->device, "su_write"))		return 0;	if (!tty || !info->xmit_buf || !tmp_buf)		return 0;	save_flags(flags);	if (from_user) {		down(&tmp_buf_sem);		while (1) {			c = MIN(count,				MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,				    SERIAL_XMIT_SIZE - info->xmit_head));			if (c <= 0)				break;			c -= copy_from_user(tmp_buf, buf, c);			if (!c) {				if (!ret)					ret = -EFAULT;				break;			}			cli();			c = MIN(c, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,				       SERIAL_XMIT_SIZE - info->xmit_head));			memcpy(info->xmit_buf + info->xmit_head, tmp_buf, c);			info->xmit_head = ((info->xmit_head + c) &					   (SERIAL_XMIT_SIZE-1));			info->xmit_cnt += c;			restore_flags(flags);			buf += c;			count -= c;			ret += c;		}		up(&tmp_buf_sem);	} else {		while (1) {			cli();					c = MIN(count,				MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,				    SERIAL_XMIT_SIZE - info->xmit_head));			if (c <= 0) {				restore_flags(flags);				break;			}			memcpy(info->xmit_buf + info->xmit_head, buf, c);			info->xmit_head = ((info->xmit_head + c) &					   (SERIAL_XMIT_SIZE-1));			info->xmit_cnt += c;			restore_flags(flags);			buf += c;			count -= c;			ret += c;		}	}	if (info->xmit_cnt && !tty->stopped && !tty->hw_stopped &&	    !(info->IER & UART_IER_THRI)) {		info->IER |= UART_IER_THRI;		serial_out(info, UART_IER, info->IER);	}	return ret;}static intsu_write_room(struct tty_struct *tty){	struct su_struct *info = (struct su_struct *)tty->driver_data;	int	ret;	if (serial_paranoia_check(info, tty->device, "su_write_room"))		return 0;	ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1;	if (ret < 0)		ret = 0;	return ret;}static intsu_chars_in_buffer(struct tty_struct *tty){	struct su_struct *info = (struct su_struct *)tty->driver_data;					if (serial_paranoia_check(info, tty->device, "su_chars_in_buffer"))		return 0;	return info->xmit_cnt;}static voidsu_flush_buffer(struct tty_struct *tty){	struct su_struct *info = (struct su_struct *)tty->driver_data;	unsigned long flags;	if (serial_paranoia_check(info, tty->device, "su_flush_buffer"))		return;	save_flags(flags); cli();	info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;	restore_flags(flags);	wake_up_interruptible(&tty->write_wait);	if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&	    tty->ldisc.write_wakeup)		(tty->ldisc.write_wakeup)(tty);}/* * This function is used to send a high-priority XON/XOFF character to * the device */static voidsu_send_xchar(struct tty_struct *tty, char ch){	struct su_struct *info = (struct su_struct *)tty->driver_data;	if (serial_paranoia_check(info, tty->device, "su_send_char"))		return;	if (!(info->flags & ASYNC_INITIALIZED))		return;	info->x_char = ch;	if (ch) {		/* Make sure transmit interrupts are on */		info->IER |= UART_IER_THRI;		serial_out(info, UART_IER, info->IER);	}}/* * ------------------------------------------------------------ * su_throttle() *  * This routine is called by the upper-layer tty layer to signal that * incoming characters should be throttled. * ------------------------------------------------------------ */static voidsu_throttle(struct tty_struct * tty){	struct su_struct *info = (struct su_struct *)tty->driver_data;	unsigned long flags;#ifdef SERIAL_DEBUG_THROTTLE	char	buf[64];	printk("throttle %s: %d....\n", tty_name(tty, buf),	       tty->ldisc.chars_in_buffer(tty));#endif	if (serial_paranoia_check(info, tty->device, "su_throttle"))		return;	if (I_IXOFF(tty))		su_send_xchar(tty, STOP_CHAR(tty));	if (tty->termios->c_cflag & CRTSCTS)		info->MCR &= ~UART_MCR_RTS;	save_flags(flags); cli();	serial_out(info, UART_MCR, info->MCR);	restore_flags(flags);}static voidsu_unthrottle(struct tty_struct * tty){	struct su_struct *info = (struct su_struct *)tty->driver_data;	unsigned long flags;#ifdef SERIAL_DEBUG_THROTTLE	char	buf[64];	printk("unthrottle %s: %d....\n", tty_name(tty, buf),	       tty->ldisc.chars_in_buffer(tty));#endif	if (serial_paranoia_check(info, tty->device, "su_unthrottle"))		return;	if (I_IXOFF(tty)) {		if (info->x_char)			info->x_char = 0;		else			su_send_xchar(tty, START_CHAR(tty));	}	if (tty->termios->c_cflag & CRTSCTS)		info->MCR |= UART_MCR_RTS;	save_flags(flags); cli();	serial_out(info, UART_MCR, info->MCR);	restore_flags(flags);}/* * ------------------------------------------------------------ * su_ioctl() and friends * ------------------------------------------------------------ *//* * get_serial_info - handle TIOCGSERIAL ioctl() * * Purpose: Return standard serial struct information about *          a serial port handled by this driver. * * Added:   11-May-2001 Lars Kellogg-Stedman <lars@larsshack.org> */static int get_serial_info(struct su_struct * info,			   struct serial_struct * retinfo){	struct serial_struct	tmp;	if (!retinfo)		return -EFAULT;	memset(&tmp, 0, sizeof(tmp));	tmp.type		= info->type;	tmp.line		= info->line;	tmp.port		= info->port;	tmp.irq			= info->irq;	tmp.flags		= info->flags;	tmp.xmit_fifo_size	= info->xmit_fifo_size;	tmp.baud_base		= info->baud_base;	tmp.close_delay		= info->close_delay;	tmp.closing_wait	= info->closing_wait;	tmp.custom_divisor	= info->custom_divisor;	tmp.hub6		= 0;	if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))		return -EFAULT;	return 0;}/* * get_lsr_info - get line status register info * * Purpose: Let user call ioctl() to get info when the UART physically * 	    is emptied.  On bus types like RS485, the transmitter must * 	    release the bus after transmitting. This must be done when * 	    the transmit shift register is empty, not be done when the * 	    transmit holding register is empty.  This functionality * 	    allows an RS485 driver to be written in user space.  */static intget_lsr_info(struct su_struct * info, unsigned int *value){	unsigned char status;	unsigned int result;	unsigned long flags;	save_flags(flags); cli();	status = serial_in(info, UART_LSR);	restore_flags(flags);	result = ((status & UART_LSR_TEMT) ? TIOCSER_TEMT : 0);	return put_user(result,value);}static intget_modem_info(struct su_struct * info, unsigned int *value){	unsigned char control, status;	unsigned int result;	unsigned long flags;	control = info->MCR;	save_flags(flags); cli();	status = serial_in(info, UART_MSR);	restore_flags(flags);	result =  ((control & UART_MCR_RTS) ? TIOCM_RTS : 0)		| ((control & UART_MCR_DTR) ? TIOCM_DTR : 0)#ifdef TIOCM_OUT1		| ((control & UART_MCR_OUT1) ? TIOCM_OUT1 : 0)		| ((control & UART_MCR_OUT2) ? TIOCM_OUT2 : 0)#endif		| ((status  & UART_MSR_DCD) ? TIOCM_CAR : 0)		| ((status  & UART_MSR_RI) ? TIOCM_RNG : 0)		| ((status  & UART_MSR_DSR) ? TIOCM_DSR : 0)		| ((status  & UART_MSR_CTS) ? TIOCM_CTS : 0);	return put_user(result,value);}static intset_modem_info(struct su_struct * info, unsigned int cmd, unsigned int *value){	unsigned int arg;	unsigned long flags;	if (get_user(arg, value))		return -EFAULT;	switch (cmd) {	case TIOCMBIS: 		if (arg & TIOCM_RTS)			info->MCR |= UART_MCR_RTS;		if (arg & TIOCM_DTR)			info->MCR |= UART_MCR_DTR;#ifdef TIOCM_OUT1		if (arg & TIOCM_OUT1)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
5566中文字幕一区二区电影| 久久99精品一区二区三区三区| 高清不卡一区二区| 日本一区二区三级电影在线观看| 国产精品538一区二区在线| 久久色中文字幕| 粉嫩嫩av羞羞动漫久久久| 亚洲国产高清不卡| 99久久伊人网影院| 亚洲激情一二三区| 欧美日韩成人激情| 国内久久精品视频| 中文字幕一区二区在线播放| 91美女片黄在线| 日韩精品乱码av一区二区| 精品少妇一区二区三区免费观看| 国产九色精品成人porny| 国产精品色在线观看| 色偷偷久久一区二区三区| 午夜精品一区二区三区电影天堂| 这里只有精品电影| 丰满少妇久久久久久久| 亚洲精品国产精华液| 欧美一级欧美三级在线观看 | 日韩视频在线永久播放| 国产一区二区三区免费观看| 1024亚洲合集| 欧美精品少妇一区二区三区| 国产乱码字幕精品高清av| 最新久久zyz资源站| 7878成人国产在线观看| 国产精品正在播放| 亚洲福利电影网| 久久精品一区二区三区不卡| 在线这里只有精品| 国精品**一区二区三区在线蜜桃 | 有码一区二区三区| 日韩精品中午字幕| 色婷婷国产精品| 久久99精品久久久久婷婷| 亚洲综合偷拍欧美一区色| 欧美成人精品1314www| 色婷婷av久久久久久久| 黑人巨大精品欧美一区| 亚洲午夜激情网站| 中文乱码免费一区二区| 日韩一级大片在线| 日本韩国欧美一区二区三区| 国产在线不卡视频| 视频一区二区三区在线| 日韩码欧中文字| 国产亚洲欧美一区在线观看| 91麻豆精品国产91久久久久| 91在线porny国产在线看| 久久99精品久久久| 婷婷久久综合九色国产成人 | 欧美经典三级视频一区二区三区| 欧美日韩五月天| 99久久精品国产毛片| 国产一区二区精品久久99| 天堂精品中文字幕在线| 依依成人精品视频| 亚洲人妖av一区二区| 国产午夜精品一区二区三区视频| 欧美一区二区三区视频在线| 欧美日韩一区二区三区在线看| 91视视频在线观看入口直接观看www | 国产一区二区毛片| 精品一区二区三区在线播放视频| 五月天久久比比资源色| 亚洲靠逼com| 亚洲男人的天堂在线aⅴ视频| 中文字幕在线视频一区| 国产日韩欧美精品一区| 久久亚洲精华国产精华液 | 亚洲欧洲精品成人久久奇米网| 精品久久久久久久久久久久久久久久久| 欧美日韩一区二区电影| 欧美性一区二区| 欧美无砖专区一中文字| 欧美在线啊v一区| 欧美少妇一区二区| 欧美精品一二三区| 日韩三级中文字幕| 精品精品国产高清一毛片一天堂| 日韩一卡二卡三卡四卡| 欧美电视剧在线观看完整版| 欧美电影免费观看高清完整版在| 精品日韩一区二区三区免费视频| 欧美成人免费网站| 日本一区二区三区四区| 亚洲欧洲99久久| 亚洲免费在线看| 午夜视频在线观看一区| 奇米一区二区三区| 国产一区二区三区在线观看精品 | 成人高清免费观看| 91麻豆文化传媒在线观看| 在线中文字幕不卡| 欧美一二区视频| 国产日韩欧美电影| 亚洲免费毛片网站| 日韩福利电影在线| 国产精品综合二区| 97久久超碰国产精品| 欧美三级日本三级少妇99| 日韩欧美综合一区| 欧美国产精品一区二区三区| 亚洲免费伊人电影| 美美哒免费高清在线观看视频一区二区| 国产在线一区二区| 91亚洲精品久久久蜜桃网站| 欧美军同video69gay| 久久婷婷色综合| 亚洲无人区一区| 国产在线精品一区在线观看麻豆| jvid福利写真一区二区三区| 欧美日韩一区二区三区视频 | 国产精品久久久久9999吃药| 亚洲一区二区三区免费视频| 乱一区二区av| 91国产视频在线观看| 欧美xxxxxxxx| 亚洲精品日产精品乱码不卡| 久久精品国产亚洲5555| 色综合久久中文综合久久牛| 日韩欧美一级二级三级久久久| 国产精品三级视频| 日韩1区2区3区| 91美女视频网站| 国产午夜亚洲精品理论片色戒| 香蕉成人啪国产精品视频综合网| 国产成人午夜99999| 在线不卡欧美精品一区二区三区| 国产精品不卡一区二区三区| 久久国产福利国产秒拍| 欧美自拍偷拍一区| 国产精品久久久久9999吃药| 国产综合色精品一区二区三区| 欧美色倩网站大全免费| 18欧美亚洲精品| 国产91丝袜在线18| 精品美女在线播放| 蜜桃av一区二区在线观看| 欧美中文一区二区三区| 亚洲国产激情av| 国产福利不卡视频| 精品欧美一区二区久久| 天天av天天翘天天综合网色鬼国产| www.成人在线| 日韩三级高清在线| 亚洲第一电影网| 国产suv一区二区三区88区| www国产精品av| 午夜精品爽啪视频| 色妞www精品视频| 亚洲欧美激情在线| 国产精品夜夜嗨| 日韩一区二区电影在线| 亚洲亚洲精品在线观看| 不卡区在线中文字幕| 精品福利一区二区三区| 五月开心婷婷久久| 欧美丰满嫩嫩电影| 一区免费观看视频| 国产福利一区二区三区| 6080日韩午夜伦伦午夜伦| 午夜久久久影院| 在线一区二区视频| 国产精品国产三级国产普通话三级| 国产精品毛片久久久久久久| 粉嫩嫩av羞羞动漫久久久 | 久久久久久久久久久久久夜| 午夜精品一区二区三区电影天堂 | 欧美日韩精品一区二区三区蜜桃| 亚洲蜜臀av乱码久久精品| 成人精品鲁一区一区二区| 精品欧美一区二区在线观看 | 一区二区三区四区在线播放| 国产精品18久久久久久vr| 91精品一区二区三区久久久久久| 国产精品初高中害羞小美女文| 成人国产精品免费观看| 欧美国产日韩亚洲一区| 福利91精品一区二区三区| 中文字幕av资源一区| 国产二区国产一区在线观看| 精品999在线播放| 精品在线一区二区三区| 国产亚洲婷婷免费| 国产精品一区二区黑丝| 久久婷婷色综合| 国产精品一卡二卡在线观看| 亚洲免费三区一区二区| 91久久人澡人人添人人爽欧美| 亚洲女与黑人做爰| 欧美日韩中字一区| 丝瓜av网站精品一区二区 | 欧美日韩免费观看一区二区三区 | 另类成人小视频在线|