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

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

?? su.c

?? 廣州斯道2410普及版II的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
		if (--info->xmit_cnt <= 0)			break;	} while (--count > 0);		if (info->xmit_cnt < WAKEUP_CHARS)		su_sched_event(info, RS_EVENT_WRITE_WAKEUP);#ifdef SERIAL_DEBUG_INTR	printk("T%d...", info->xmit_cnt);#endif	if (intr_done)		*intr_done = 0;	if (info->xmit_cnt <= 0) {		info->IER &= ~UART_IER_THRI;		serial_out(info, UART_IER, info->IER);	}}static voidcheck_modem_status(struct su_struct *info){	int	status;	struct	async_icount *icount;	status = serial_in(info, UART_MSR);	if (status & UART_MSR_ANY_DELTA) {		icount = &info->icount;		/* update input line counters */		if (status & UART_MSR_TERI)			icount->rng++;		if (status & UART_MSR_DDSR)			icount->dsr++;		if (status & UART_MSR_DDCD) {			icount->dcd++;#ifdef CONFIG_HARD_PPS			if ((info->flags & ASYNC_HARDPPS_CD) &&			    (status & UART_MSR_DCD))				hardpps();#endif		}		if (status & UART_MSR_DCTS)			icount->cts++;		wake_up_interruptible(&info->delta_msr_wait);	}	if ((info->flags & ASYNC_CHECK_CD) && (status & UART_MSR_DDCD)) {#if (defined(SERIAL_DEBUG_OPEN) || defined(SERIAL_DEBUG_INTR))		printk("ttys%d CD now %s...", info->line,		       (status & UART_MSR_DCD) ? "on" : "off");#endif				if (status & UART_MSR_DCD)			wake_up_interruptible(&info->open_wait);		else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) &&			   (info->flags & ASYNC_CALLOUT_NOHUP))) {#ifdef SERIAL_DEBUG_OPEN			printk("doing serial hangup...");#endif			if (info->tty)				tty_hangup(info->tty);	}	}	if (info->flags & ASYNC_CTS_FLOW) {		if (info->tty->hw_stopped) {			if (status & UART_MSR_CTS) {#if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))				printk("CTS tx start...");#endif				info->tty->hw_stopped = 0;				info->IER |= UART_IER_THRI;				serial_out(info, UART_IER, info->IER);				su_sched_event(info, RS_EVENT_WRITE_WAKEUP);				return;			}		} else {			if (!(status & UART_MSR_CTS)) {#if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW))				printk("CTS tx stop...");#endif				info->tty->hw_stopped = 1;				info->IER &= ~UART_IER_THRI;				serial_out(info, UART_IER, info->IER);			}		}	}}/* * This is the kbd/mouse serial driver's interrupt routine */static voidsu_kbd_ms_interrupt(int irq, void *dev_id, struct pt_regs * regs){	struct su_struct *info = (struct su_struct *)dev_id;	unsigned char status;#ifdef SERIAL_DEBUG_INTR	printk("su_kbd_ms_interrupt(%s)...", __irq_itoa(irq));#endif	if (!info)		return;	if (serial_in(info, UART_IIR) & UART_IIR_NO_INT)		return;	status = serial_inp(info, UART_LSR);#ifdef SERIAL_DEBUG_INTR	printk("status = %x...", status);#endif	if ((status & UART_LSR_DR) || (status & UART_LSR_BI))		receive_kbd_ms_chars(info, regs,				     (status & UART_LSR_BI) != 0);#ifdef SERIAL_DEBUG_INTR	printk("end.\n");#endif}/* * This is the serial driver's generic interrupt routine */static voidsu_serial_interrupt(int irq, void *dev_id, struct pt_regs * regs){	int status;	struct su_struct *info;	int pass_counter = 0;#ifdef SERIAL_DEBUG_INTR	printk("su_serial_interrupt(%s)...", __irq_itoa(irq));#endif	info = (struct su_struct *)dev_id;	if (!info || !info->tty) {#ifdef SERIAL_DEBUG_INTR		printk("strain\n");#endif		return;	}	do {		status = serial_inp(info, UART_LSR);#ifdef SERIAL_DEBUG_INTR		printk("status = %x...", status);#endif		if (status & UART_LSR_DR)			receive_serial_chars(info, &status, regs);		check_modem_status(info);		if (status & UART_LSR_THRE)			transmit_chars(info, 0);		if (pass_counter++ > RS_ISR_PASS_LIMIT) {#ifdef SERIAL_DEBUG_INTR			printk("rs loop break");#endif			break; 	/* Prevent infinite loops */		}	} while (!(serial_in(info, UART_IIR) & UART_IIR_NO_INT));	info->last_active = jiffies;#ifdef SERIAL_DEBUG_INTR	printk("end.\n");#endif}/* * ------------------------------------------------------------------- * Here ends the serial interrupt routines. * ------------------------------------------------------------------- *//* * This routine is used to handle the "bottom half" processing for the * serial driver, known also the "software interrupt" processing. * This processing is done at the kernel interrupt level, after the * su_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This * is where time-consuming activities which can not be done in the * interrupt driver proper are done; the interrupt driver schedules * them using su_sched_event(), and they get done here. */static void do_serial_bh(void){	run_task_queue(&tq_serial);}static void do_softint(void *private_){	struct su_struct	*info = (struct su_struct *) private_;	struct tty_struct	*tty;	tty = info->tty;	if (!tty)		return;	if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {		if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&		    tty->ldisc.write_wakeup)			(tty->ldisc.write_wakeup)(tty);		wake_up_interruptible(&tty->write_wait);	}}/* * --------------------------------------------------------------- * Low level utility subroutines for the serial driver:  routines to * figure out the appropriate timeout for an interrupt chain, routines * to initialize and startup a serial port, and routines to shutdown a * serial port.  Useful stuff like that. * --------------------------------------------------------------- */static intstartup(struct su_struct *info){	unsigned long flags;	int	retval=0;	unsigned long page;	save_flags(flags);	if (info->tty) {		page = get_free_page(GFP_KERNEL);		if (!page)			return -ENOMEM;		cli();		if (info->flags & ASYNC_INITIALIZED) {			free_page(page);			goto errout;		}		if (info->port == 0 || info->type == PORT_UNKNOWN) {			set_bit(TTY_IO_ERROR, &info->tty->flags);			free_page(page);			goto errout;		}		if (info->xmit_buf)			free_page(page);		else			info->xmit_buf = (unsigned char *) page;	}	cli();#ifdef SERIAL_DEBUG_OPEN	printk("starting up ttys%d (irq %s)...", info->line,	       __irq_itoa(info->irq));#endif	if (uart_config[info->type].flags & UART_STARTECH) {		/* Wake up UART */		serial_outp(info, UART_LCR, 0xBF);		serial_outp(info, UART_EFR, UART_EFR_ECB);		serial_outp(info, UART_IER, 0);		serial_outp(info, UART_EFR, 0);		serial_outp(info, UART_LCR, 0);	}	if (info->type == PORT_16750) {		/* Wake up UART */		serial_outp(info, UART_IER, 0);	}	/*	 * Clear the FIFO buffers and disable them	 * (they will be reenabled in change_speed())	 */	if (uart_config[info->type].flags & UART_CLEAR_FIFO)		serial_outp(info, UART_FCR, (UART_FCR_CLEAR_RCVR |					     UART_FCR_CLEAR_XMIT));	/*	 * At this point there's no way the LSR could still be 0xFF;	 * if it is, then bail out, because there's likely no UART	 * here.	 */	if (serial_inp(info, UART_LSR) == 0xff) {		if (capable(CAP_SYS_ADMIN)) {			if (info->tty)				set_bit(TTY_IO_ERROR, &info->tty->flags);		} else			retval = -ENODEV;		goto errout;	}	/*	 * Allocate the IRQ if necessary	 */	if (info->port_type != SU_PORT_PORT) {		retval = request_irq(info->irq, su_kbd_ms_interrupt,				     SA_SHIRQ, info->name, info);	} else {		retval = request_irq(info->irq, su_serial_interrupt,				     SA_SHIRQ, info->name, info);	}	if (retval) {		if (capable(CAP_SYS_ADMIN)) {			if (info->tty)				set_bit(TTY_IO_ERROR, &info->tty->flags);			retval = 0;		}		goto errout;	}	/*	 * Clear the interrupt registers.	 */	(void) serial_inp(info, UART_RX);	(void) serial_inp(info, UART_IIR);	(void) serial_inp(info, UART_MSR);	/*	 * Now, initialize the UART 	 */	serial_outp(info, UART_LCR, UART_LCR_WLEN8);	/* reset DLAB */	info->MCR = 0;	if (info->tty && info->tty->termios->c_cflag & CBAUD)		info->MCR = UART_MCR_DTR | UART_MCR_RTS;	if (info->irq != 0)		info->MCR |= UART_MCR_OUT2;	serial_outp(info, UART_MCR, info->MCR);	/*	 * Finally, enable interrupts	 */	info->IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI;	serial_outp(info, UART_IER, info->IER);	/* enable interrupts */	/*	 * And clear the interrupt registers again for luck.	 */	(void)serial_inp(info, UART_LSR);	(void)serial_inp(info, UART_RX);	(void)serial_inp(info, UART_IIR);	(void)serial_inp(info, UART_MSR);	if (info->tty)		clear_bit(TTY_IO_ERROR, &info->tty->flags);	info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;	/*	 * Set up the tty->alt_speed kludge	 */	if (info->tty) {		if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)			info->tty->alt_speed = 57600;		if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)			info->tty->alt_speed = 115200;		if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)			info->tty->alt_speed = 230400;		if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)			info->tty->alt_speed = 460800;	}	/*	 * and set the speed of the serial port	 */	change_speed(info, 0);	info->flags |= ASYNC_INITIALIZED;	restore_flags(flags);	return 0;errout:	restore_flags(flags);	return retval;}/* * This routine will shutdown a serial port; interrupts are disabled, and * DTR is dropped if the hangup on close termio flag is on. */static voidshutdown(struct su_struct *info){	unsigned long	flags;	if (!(info->flags & ASYNC_INITIALIZED))		return;	save_flags(flags); cli(); /* Disable interrupts */	/*	 * clear delta_msr_wait queue to avoid mem leaks: we may free the irq	 * here so the queue might never be waken up	 */	wake_up_interruptible(&info->delta_msr_wait);		/*	 * Free the IRQ, if necessary	 */	free_irq(info->irq, info);	if (info->xmit_buf) {		free_page((unsigned long) info->xmit_buf);		info->xmit_buf = 0;	}	info->IER = 0;	serial_outp(info, UART_IER, 0x00);	/* disable all intrs */	info->MCR &= ~UART_MCR_OUT2;	/* disable break condition */	serial_out(info, UART_LCR, serial_inp(info, UART_LCR) & ~UART_LCR_SBC);	if (!info->tty || (info->tty->termios->c_cflag & HUPCL))		info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS);	serial_outp(info, UART_MCR, info->MCR);	/* disable FIFO's */		serial_outp(info, UART_FCR, (UART_FCR_CLEAR_RCVR |				     UART_FCR_CLEAR_XMIT));	(void)serial_in(info, UART_RX);    /* read data port to reset things */	if (info->tty)		set_bit(TTY_IO_ERROR, &info->tty->flags);	if (uart_config[info->type].flags & UART_STARTECH) {		/* Arrange to enter sleep mode */		serial_outp(info, UART_LCR, 0xBF);		serial_outp(info, UART_EFR, UART_EFR_ECB);		serial_outp(info, UART_IER, UART_IERX_SLEEP);		serial_outp(info, UART_LCR, 0);	}	if (info->type == PORT_16750) {		/* Arrange to enter sleep mode */		serial_outp(info, UART_IER, UART_IERX_SLEEP);	}	info->flags &= ~ASYNC_INITIALIZED;	restore_flags(flags);}static intsu_get_baud_rate(struct su_struct *info){	static struct tty_struct c_tty;	static struct termios c_termios;	if (info->tty)		return tty_get_baud_rate(info->tty);	memset(&c_tty, 0, sizeof(c_tty));	memset(&c_termios, 0, sizeof(c_termios));	c_tty.termios = &c_termios;	c_termios.c_cflag = info->cflag;	return tty_get_baud_rate(&c_tty);}/* * This routine is called to set the UART divisor registers to match * the specified baud rate for a serial port. */static voidchange_speed(struct su_struct *info,	     struct termios *old_termios){	int		quot = 0, baud;	unsigned int	cval, fcr = 0;	int		bits;	unsigned long	flags;	if (info->port_type == SU_PORT_PORT) {		if (!info->tty || !info->tty->termios)			return;		if (!info->port)			return;		info->cflag = info->tty->termios->c_cflag;	}	/* byte size and parity */	switch (info->cflag & CSIZE) {	      case CS5: cval = 0x00; bits = 7; break;	      case CS6: cval = 0x01; bits = 8; break;	      case CS7: cval = 0x02; bits = 9; break;	      case CS8: cval = 0x03; bits = 10; break;		/* Never happens, but GCC is too dumb to figure it out */	      default:  cval = 0x00; bits = 7; break;	}	if (info->cflag & CSTOPB) {		cval |= 0x04;		bits++;	}	if (info->cflag & PARENB) {		cval |= UART_LCR_PARITY;		bits++;	}	if (!(info->cflag & PARODD))		cval |= UART_LCR_EPAR;#ifdef CMSPAR	if (info->cflag & CMSPAR)		cval |= UART_LCR_SPAR;#endif	/* Determine divisor based on baud rate */	baud = su_get_baud_rate(info);	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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道久久a久久精品综合| 中文字幕制服丝袜成人av| 国产精品国产馆在线真实露脸 | 国产精品66部| 久久国产尿小便嘘嘘尿| 麻豆国产一区二区| 日本免费新一区视频| 日本欧美一区二区| 免费看日韩精品| 麻豆91在线观看| 久久99精品国产麻豆婷婷洗澡| 蜜桃av噜噜一区二区三区小说| 天堂在线亚洲视频| 日韩电影一区二区三区四区| 日本va欧美va精品| 久久99精品久久久| 床上的激情91.| 91小视频免费看| 在线观看不卡一区| 欧美日韩国产区一| 欧美v国产在线一区二区三区| 2023国产精华国产精品| 欧美国产激情二区三区| 亚洲人成精品久久久久久| 亚洲一区二区三区四区五区中文| 日日摸夜夜添夜夜添国产精品| 麻豆精品一区二区| 欧美大白屁股肥臀xxxxxx| 欧美电影免费观看高清完整版在线| 欧美成人性战久久| 国产精品污www在线观看| 一区二区在线观看不卡| 日本中文字幕一区二区有限公司| 久久精品国产99国产| 成人午夜电影小说| 欧美在线免费观看视频| 日韩欧美国产综合| 国产精品成人一区二区三区夜夜夜| 亚洲国产欧美在线| 精品亚洲国内自在自线福利| 不卡的av电影| 欧美日韩国产经典色站一区二区三区| 日韩欧美在线123| 最好看的中文字幕久久| 污片在线观看一区二区| 国产不卡视频在线观看| 在线视频一区二区免费| 精品国精品国产尤物美女| 亚洲天堂网中文字| 免费黄网站欧美| 91视频观看视频| 精品久久久三级丝袜| 亚洲欧美成人一区二区三区| 久久国产精品无码网站| 91热门视频在线观看| 日韩欧美中文字幕制服| 亚洲欧美日韩系列| 韩国成人在线视频| 欧美视频一区二区在线观看| 国产三级欧美三级日产三级99| 亚洲一区二区三区不卡国产欧美| 国内成+人亚洲+欧美+综合在线 | 欧美一级高清大全免费观看| 国产精品看片你懂得| 蜜臂av日日欢夜夜爽一区| 99国产精品久久久久久久久久| 欧美一区二区三区爱爱| 亚洲免费视频中文字幕| 国产福利不卡视频| 67194成人在线观看| 亚洲日韩欧美一区二区在线| 国产精品一区二区无线| 欧美一区二区三区精品| 伊人色综合久久天天人手人婷| 国产白丝精品91爽爽久久| 91精品国产入口| 亚洲一区二区在线视频| 成人av在线资源网站| www国产亚洲精品久久麻豆| 性久久久久久久| 在线视频一区二区免费| 18成人在线观看| 久久这里只有精品6| 亚洲成人av一区二区| 91视频观看视频| 国产精品进线69影院| 国产综合色精品一区二区三区| 欧美精选午夜久久久乱码6080| 亚洲日本中文字幕区| k8久久久一区二区三区| 国产亚洲欧美日韩日本| 国模娜娜一区二区三区| 日韩欧美的一区二区| 日韩av电影一区| 777久久久精品| 午夜精品久久久久久久久久久| 色猫猫国产区一区二在线视频| 亚洲欧洲无码一区二区三区| 成人网在线播放| 国产精品狼人久久影院观看方式| 成人一二三区视频| 国产精品你懂的在线欣赏| 国产高清精品在线| 国产视频一区在线观看| 国产精品123区| 久久精品人人做| 国产电影一区在线| 日本一区二区不卡视频| 成人h动漫精品一区二| 国产精品久久三| 91丨porny丨蝌蚪视频| 亚洲免费色视频| 欧美日韩视频不卡| 爽好多水快深点欧美视频| 制服丝袜成人动漫| 美女被吸乳得到大胸91| 久久久久9999亚洲精品| 成人黄色小视频| 自拍偷拍亚洲欧美日韩| 色婷婷综合久久久中文字幕| 亚洲自拍偷拍网站| 91精品国产91久久久久久一区二区 | 精品国产精品一区二区夜夜嗨| 久久国产剧场电影| 国产精品三级av| 91豆麻精品91久久久久久| 天天综合色天天综合色h| 欧美一区永久视频免费观看| 精品一区二区av| 中文字幕日本不卡| 精品视频一区二区三区免费| 久久精品二区亚洲w码| 国产日韩欧美a| 色狠狠色狠狠综合| 轻轻草成人在线| 日本一区二区三区高清不卡| 色狠狠综合天天综合综合| 日韩国产高清影视| 国产三级精品三级| 91福利视频网站| 精品亚洲成av人在线观看| 亚洲色图欧美偷拍| 日韩一级黄色大片| 波多野结衣中文字幕一区| 亚洲第一狼人社区| 久久蜜臀中文字幕| 欧美在线免费视屏| 国产精品亚洲第一| 亚洲国产精品久久人人爱蜜臀 | 亚洲国产aⅴ天堂久久| 精品久久久久久最新网址| 成人av影院在线| 日韩二区三区四区| 国产精品美女久久久久久久久| 欧美日韩另类国产亚洲欧美一级| 国产乱一区二区| 亚洲电影一级片| 亚洲国产精品国自产拍av| 欧美日韩精品高清| 懂色av噜噜一区二区三区av| 亚洲大片在线观看| 国产亚洲午夜高清国产拍精品 | 亚洲欧美综合色| 亚洲精品一区二区三区影院| 在线观看av一区二区| 国产不卡视频一区二区三区| 午夜精品123| 一区在线观看视频| 精品日韩一区二区三区免费视频| 一本色道久久加勒比精品 | 日韩美女在线视频| 欧洲日韩一区二区三区| 国产精品夜夜嗨| 日本成人在线网站| 洋洋av久久久久久久一区| 日本一区二区综合亚洲| 欧美一区二区三区在线| 色婷婷av久久久久久久| 高清不卡在线观看| 国产一区不卡在线| 免费观看久久久4p| 午夜精品一区二区三区免费视频| 亚洲美女免费视频| 国产精品色噜噜| 国产欧美综合在线观看第十页| 日韩欧美的一区| 欧美一区二区三区系列电影| 欧美亚洲动漫制服丝袜| 一本一道久久a久久精品| 国产99久久久国产精品| 黄色日韩网站视频| 美国一区二区三区在线播放| 亚洲成a人v欧美综合天堂下载| 一区二区三区美女视频| 综合中文字幕亚洲| 亚洲少妇中出一区| 国产精品成人一区二区艾草| 国产精品不卡在线观看| 国产精品毛片高清在线完整版| 久久久欧美精品sm网站|