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

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

?? su.c

?? 講述linux的初始化過程
?? C
?? 第 1 頁 / 共 5 頁
字號:
	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;	}	/* 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 &= ~(CBAUDEX | 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_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){	int error;	unsigned int arg;	unsigned long flags;	error = get_user(arg, value);	if (error)		return error;	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)			info->MCR |= UART_MCR_OUT1;		if (arg & TIOCM_OUT2)			info->MCR |= UART_MCR_OUT2;#endif		break;	case TIOCMBIC:		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)			info->MCR &= ~UART_MCR_OUT1;		if (arg & TIOCM_OUT2)			info->MCR &= ~UART_MCR_OUT2;#endif		break;	case TIOCMSET:		info->MCR = ((info->MCR & ~(UART_MCR_RTS |#ifdef TIOCM_OUT1					    UART_MCR_OUT1 |					    UART_MCR_OUT2 |#endif					    UART_MCR_DTR))			     | ((arg & TIOCM_RTS) ? UART_MCR_RTS : 0)#ifdef TIOCM_OUT1			     | ((arg & TIOCM_OUT1) ? UART_MCR_OUT1 : 0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色欲色欲www| 99久久久久久99| 国产成人高清在线| 99re免费视频精品全部| 欧美一区二区三区的| 国产精品久久久一区麻豆最新章节| 一区二区三区鲁丝不卡| 国产乱一区二区| 在线不卡一区二区| 亚洲免费观看高清完整版在线观看熊 | 狠狠色丁香婷综合久久| 91在线国产观看| 日本一区二区成人在线| 美女视频网站久久| 欧美特级限制片免费在线观看| 国产精品色在线| 国产精品一区在线观看乱码 | 亚洲国产日韩a在线播放 | 韩国成人福利片在线播放| 欧美精品在线一区二区三区| 亚洲美女在线国产| 91网站在线播放| 一区精品在线播放| 成人av在线观| 亚洲欧美一区二区视频| 成人av在线电影| 国产精品嫩草影院av蜜臀| 国产乱码一区二区三区| 国产欧美一区二区精品婷婷| 国产九色sp调教91| 国产日本亚洲高清| 丁香啪啪综合成人亚洲小说| 国产日韩欧美精品电影三级在线| 国产一区二区剧情av在线| 欧美激情中文字幕一区二区| 国产成人超碰人人澡人人澡| 国产欧美一区二区精品忘忧草 | 国产一区二区三区精品视频| 亚洲精品一区二区三区精华液| 美女网站在线免费欧美精品| 日韩精品一区在线| 激情都市一区二区| 亚洲国产成人午夜在线一区| 99久久综合国产精品| 亚洲人精品午夜| 欧美日韩一区二区不卡| 秋霞电影网一区二区| 久久久一区二区三区捆绑**| 成人av在线一区二区三区| 亚洲免费观看视频| 日韩一卡二卡三卡| 国产suv精品一区二区883| 亚洲日本韩国一区| 欧美撒尿777hd撒尿| 久久精品二区亚洲w码| 欧美—级在线免费片| 欧美综合欧美视频| 精品午夜久久福利影院| 国产精品丝袜在线| 欧美日韩一级片网站| 激情综合色丁香一区二区| 国产精品美女久久久久久久久久久| 色综合天天综合网天天看片| 亚洲va韩国va欧美va| 久久精品亚洲精品国产欧美kt∨| 99精品视频在线观看| 日韩av网站免费在线| 国产精品免费久久| 欧美xxxx老人做受| 一本到不卡免费一区二区| 久久精品av麻豆的观看方式| 一区二区三区四区中文字幕| 日韩女优电影在线观看| 99riav久久精品riav| 免费观看91视频大全| 亚洲免费在线看| 久久伊99综合婷婷久久伊| 欧美性色黄大片| 国产91在线看| 蜜桃视频一区二区| 亚洲综合久久久| 国产精品私房写真福利视频| 日韩欧美的一区| 欧美性色综合网| 99久久精品免费看国产| 精品制服美女丁香| 亚洲第一福利一区| 中文字幕一区二区三区乱码在线| 日韩视频一区在线观看| 欧美午夜电影网| 成人免费高清在线观看| 极品美女销魂一区二区三区| 日韩中文字幕区一区有砖一区 | 欧美精品色一区二区三区| 成人丝袜高跟foot| 国产精品一级黄| 精品综合免费视频观看| 麻豆免费看一区二区三区| 亚洲成人动漫av| 亚洲综合色成人| 一区二区三区日韩精品视频| 欧美国产一区在线| 久久九九国产精品| 欧美精品一区视频| 精品国产伦理网| 欧美videos大乳护士334| 欧美精品久久天天躁| 欧美日韩一区二区不卡| 欧美午夜精品一区二区蜜桃| 色综合久久天天| 色狠狠综合天天综合综合| 91亚洲男人天堂| 色香蕉成人二区免费| 在线中文字幕不卡| 在线观看日韩高清av| 欧洲精品中文字幕| 欧美日韩久久一区| 欧美精品久久天天躁| 日韩一级免费观看| 精品久久久久久久久久久久久久久| 日韩一区二区三区在线视频| 日韩欧美一区在线观看| 日韩精品中午字幕| 国产日产亚洲精品系列| 国产农村妇女精品| 1024国产精品| 亚洲尤物在线视频观看| 日韩电影免费在线看| 麻豆精品国产91久久久久久| 狠狠色综合播放一区二区| 国产福利电影一区二区三区| 波多野结衣在线一区| 97精品超碰一区二区三区| 在线看日韩精品电影| 3d成人h动漫网站入口| 欧美一二三在线| 日本一区二区三区dvd视频在线| 国产精品每日更新在线播放网址| |精品福利一区二区三区| 亚洲福利一区二区| 国产在线看一区| 91麻豆国产精品久久| 欧美一卡二卡三卡四卡| 国产清纯白嫩初高生在线观看91 | 欧美浪妇xxxx高跟鞋交| 精品剧情在线观看| 亚洲欧洲色图综合| 日韩高清中文字幕一区| 国产成人亚洲精品狼色在线 | 亚洲国产一区在线观看| 国产综合久久久久久鬼色 | 国产成人三级在线观看| 色婷婷综合久久久中文一区二区 | 欧美刺激午夜性久久久久久久| 国产亚洲污的网站| 亚洲一区二区在线免费看| 久久精品国产亚洲高清剧情介绍 | 欧美日韩一区二区电影| 国产亚洲精品7777| 亚洲成a天堂v人片| 国产美女在线观看一区| 欧美日韩三级视频| 日本一区二区视频在线| 同产精品九九九| 99精品视频在线免费观看| 欧美精品一区二区蜜臀亚洲| 亚洲国产视频一区| 99久久精品免费看| 国产欧美日韩另类视频免费观看| 午夜精品久久久久久久99樱桃| 成人app软件下载大全免费| 欧美岛国在线观看| 亚洲一区二区美女| 91丨porny丨国产| 久久精品亚洲麻豆av一区二区 | 亚洲6080在线| 91亚洲资源网| 国产精品久久久久天堂| 国产在线精品免费| 日韩欧美在线不卡| 蜜桃久久久久久| 欧美一区二区三区喷汁尤物| 亚洲国产精品久久人人爱蜜臀| 9l国产精品久久久久麻豆| 久久久精品人体av艺术| 精品在线一区二区三区| 日韩一区二区麻豆国产| 蜜桃久久av一区| 制服丝袜亚洲色图| 三级不卡在线观看| 欧美日韩午夜影院| 亚洲国产日韩综合久久精品| 在线亚洲精品福利网址导航| 亚洲精选免费视频| 在线看日韩精品电影| 亚洲成人激情自拍| 欧美日韩在线播放一区| 五月综合激情日本mⅴ| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲天堂福利av|