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

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

?? su.c

?? ARM8008光盤linux-kernel
?? 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一区二区三区免费野_久草精品视频
国产午夜一区二区三区| 中文字幕中文字幕中文字幕亚洲无线| 日韩视频一区二区在线观看| 欧美国产在线观看| 免费日本视频一区| 色婷婷国产精品综合在线观看| 2024国产精品| 男人操女人的视频在线观看欧美| 久久久久久久久一| 亚洲国产视频在线| av成人免费在线观看| 国产亚洲精品精华液| 看电影不卡的网站| 日韩一区二区三区四区| 亚洲成人一二三| 在线观看亚洲a| 亚洲女人的天堂| www.欧美色图| 国产精品初高中害羞小美女文| 国模冰冰炮一区二区| 日韩女优毛片在线| 久久成人综合网| 精品sm捆绑视频| 美女视频黄免费的久久| 91精品国产综合久久婷婷香蕉 | 欧美性猛片aaaaaaa做受| 国产精品免费av| 高清久久久久久| 中文字幕不卡在线播放| 国产传媒日韩欧美成人| 国产拍揄自揄精品视频麻豆| 国产成人h网站| 国产日韩v精品一区二区| 成人午夜电影小说| 国产酒店精品激情| 国产欧美日韩在线视频| 成人一区二区在线观看| 久久精品一级爱片| 99热精品一区二区| 亚洲资源中文字幕| 欧美日韩大陆一区二区| 青青草97国产精品免费观看无弹窗版| 日韩亚洲电影在线| 国产.欧美.日韩| 亚洲男人都懂的| 欧美日韩久久不卡| 黄页网站大全一区二区| 久久精品欧美日韩精品| 成人性生交大片免费| 亚洲精品成人天堂一二三| 欧美日韩一区三区四区| 极品美女销魂一区二区三区| 国产精品久久久久永久免费观看| 91麻豆国产香蕉久久精品| 日韩精品成人一区二区在线| 日韩欧美中文字幕精品| 成人免费毛片嘿嘿连载视频| 中文字幕综合网| 91精品国产入口在线| 国产精品一区二区在线看| 一区二区三区高清在线| 亚洲精品一区二区三区蜜桃下载 | 亚洲欧美韩国综合色| 色素色在线综合| 久久成人羞羞网站| 亚洲欧美aⅴ...| 日韩一级欧美一级| 91色乱码一区二区三区| 久久成人麻豆午夜电影| 亚洲精品ww久久久久久p站| 日韩欧美激情四射| 99久久综合国产精品| 久久精品国产秦先生| 亚洲精品免费播放| 国产午夜久久久久| 欧美一区二区成人| 91国产丝袜在线播放| 久久99国产精品成人| 午夜视频一区二区| 日韩一区欧美小说| 26uuu亚洲综合色| 欧美日韩dvd在线观看| 成人黄色小视频| 国产一区二区在线视频| 亚洲国产日日夜夜| 日韩美女精品在线| 国产精品免费视频观看| 精品国产免费久久| 在线综合视频播放| 91久久精品一区二区| 成人一级视频在线观看| 国产在线不卡一区| 美女视频网站久久| 奇米四色…亚洲| 亚洲成人免费看| 亚洲乱码国产乱码精品精可以看| 久久免费的精品国产v∧| 91精品国产色综合久久不卡电影 | 欧洲一区二区三区在线| 成人国产亚洲欧美成人综合网| 国产又黄又大久久| 久久99热这里只有精品| 天天操天天综合网| 性欧美疯狂xxxxbbbb| 亚洲国产成人va在线观看天堂| 亚洲男同1069视频| 亚洲精品你懂的| 午夜伊人狠狠久久| 天堂va蜜桃一区二区三区漫画版 | 国产91丝袜在线播放0| 国产一区美女在线| 国产一级精品在线| 国产91丝袜在线18| av亚洲精华国产精华精| 色综合久久66| 欧美日韩精品一区二区| 91精品免费在线观看| 日韩欧美另类在线| 国产性天天综合网| 日韩理论在线观看| 午夜精品久久久久久久久久| 亚洲第一精品在线| 看电影不卡的网站| 成人一区二区视频| 91福利资源站| 日韩一区二区在线观看视频| 久久夜色精品国产欧美乱极品| 国产欧美精品在线观看| 亚洲免费av在线| 蜜桃久久久久久| 国产a精品视频| 在线观看亚洲精品| 欧美电视剧免费全集观看| 久久精品视频免费| 亚洲欧美国产三级| 六月婷婷色综合| 成人激情免费电影网址| 欧美日韩一区二区三区在线| 日韩欧美久久久| 18欧美乱大交hd1984| 午夜私人影院久久久久| 丰满放荡岳乱妇91ww| 欧美午夜精品一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 久久日一线二线三线suv| 亚洲精品乱码久久久久久久久| 美女视频网站久久| 色噜噜狠狠成人网p站| 欧美哺乳videos| 亚洲最大成人综合| 国产精品69久久久久水密桃| 色综合欧美在线| 2021国产精品久久精品| 亚洲欧美精品午睡沙发| 久久99精品久久只有精品| 99国产精品国产精品毛片| 91麻豆精品国产自产在线| 国产精品网站在线| 美国精品在线观看| 在线观看网站黄不卡| 久久久久9999亚洲精品| 日韩精品久久久久久| 色综合色狠狠综合色| 国产色产综合色产在线视频| 午夜天堂影视香蕉久久| 色综合天天性综合| 久久色在线视频| 日产精品久久久久久久性色| 色综合久久99| 国产精品大尺度| 国产成人自拍在线| 欧美大片在线观看| 亚洲福利视频三区| 色丁香久综合在线久综合在线观看| 精品999在线播放| 日韩av网站免费在线| 欧美体内she精高潮| 亚洲日本一区二区三区| 国产91精品精华液一区二区三区 | 国产超碰在线一区| 日韩手机在线导航| 日本伊人色综合网| 欧美日韩mp4| 污片在线观看一区二区| 在线观看免费一区| 亚洲视频在线一区二区| 成人黄色大片在线观看| 国产清纯白嫩初高生在线观看91 | 日韩精品中文字幕一区二区三区 | 夜夜嗨av一区二区三区中文字幕| 不卡视频免费播放| 国产欧美日韩精品在线| 国产精品综合二区| 久久久久久久网| 高清不卡在线观看av| 26uuu色噜噜精品一区| 久久国产婷婷国产香蕉| 精品毛片乱码1区2区3区| 精品一区二区三区久久| 精品国产91亚洲一区二区三区婷婷|