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

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

?? uart00.c

?? IXP425 平臺下嵌入式LINUX的串口的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
	if (break_state == -1)		mcr |= UART_MCR_BR_MSK;	else		mcr &= ~UART_MCR_BR_MSK;	UART_PUT_MCR(port, mcr);}static inline u_int uart_calculate_quot(struct uart_info *info, u_int baud){	u_int quot;	/* Special case: B0 rate */	if (!baud)		baud = 9600;	quot = (info->port->uartclk / (16 * baud)-1)  ;	return quot;}static void uart00_change_speed(struct uart_port *port, u_int cflag, u_int iflag, u_int quot){	u_int uart_mc=0, old_ies;	unsigned long flags;#ifdef DEBUG	printk("uart00_set_cflag(0x%x) called\n", cflag);#endif	/* byte size and parity */	switch (cflag & CSIZE) {	case CS5: uart_mc = UART_MC_CLS_CHARLEN_5; break;	case CS6: uart_mc = UART_MC_CLS_CHARLEN_6; break;	case CS7: uart_mc = UART_MC_CLS_CHARLEN_7; break;	default:  uart_mc = UART_MC_CLS_CHARLEN_8; break; // CS8	}	if (cflag & CSTOPB)		uart_mc|= UART_MC_ST_TWO;	if (cflag & PARENB) {		uart_mc |= UART_MC_PE_MSK;		if (!(cflag & PARODD))			uart_mc |= UART_MC_EP_MSK;	}	port->read_status_mask = UART_RDS_OE_MSK;	if (iflag & INPCK)		port->read_status_mask |= UART_RDS_FE_MSK | UART_RDS_PE_MSK;	if (iflag & (BRKINT | PARMRK))		port->read_status_mask |= UART_RDS_BI_MSK;	/*	 * Characters to ignore	 */	port->ignore_status_mask = 0;	if (iflag & IGNPAR)		port->ignore_status_mask |= UART_RDS_FE_MSK | UART_RDS_PE_MSK;	if (iflag & IGNBRK) {		port->ignore_status_mask |= UART_RDS_BI_MSK;		/*		 * If we're ignoring parity and break indicators,		 * ignore overruns to (for real raw support).		 */		if (iflag & IGNPAR)			port->ignore_status_mask |= UART_RDS_OE_MSK;	}	/* first, disable everything */	save_flags(flags); cli();	old_ies = UART_GET_IES(port); 	if ((port->flags & ASYNC_HARDPPS_CD) ||	    (cflag & CRTSCTS) || !(cflag & CLOCAL))		old_ies |= UART_IES_ME_MSK;	/* Set baud rate */	UART_PUT_DIV_LO(port, (quot & 0xff));	UART_PUT_DIV_HI(port, ((quot & 0xf00) >> 8));   	UART_PUT_MC(port, uart_mc);	UART_PUT_IES(port, old_ies);	restore_flags(flags);}static int uart00_startup(struct uart_port *port, struct uart_info *info){	int retval;	/* 	 * Use iobase to store a pointer to info. We need this to start a 	 * transmission as the tranmittr interrupt is only generated on	 * the transition to the idle state 	 */	port->iobase=(u_int)info;		/*	 * Allocate the IRQ	 */	retval = request_irq(port->irq, uart00_int, 0, "uart00", info);	if (retval)		return retval;	/*	 * Finally, enable interrupts. Use the TII interrupt to minimise 	 * the number of interrupts generated. If higher performance is 	 * needed, consider using the TI interrupt with a suitable FIFO	 * threshold	 */	UART_PUT_IES(port, UART_IES_RE_MSK | UART_IES_TIE_MSK);	return 0;}static void uart00_shutdown(struct uart_port *port, struct uart_info *info){	/*	 * disable all interrupts, disable the port	 */	UART_PUT_IEC(port, 0xff);	/* disable break condition and fifos */	UART_PUT_MCR(port, UART_GET_MCR(port) &~UART_MCR_BR_MSK);	/*	 * Free the interrupt	 */	free_irq(port->irq, info);}static const char *uart00_type(struct uart_port *port){	return port->type == PORT_UART00 ? "UART00" : NULL;}/* * Release the memory region(s) being used by 'port' */static void uart00_release_port(struct uart_port *port){	release_mem_region(port->mapbase, UART_PORT_SIZE);#ifdef CONFIG_ARCH_CAMELOT	if(port->membase!=(void*)IO_ADDRESS(EXC_UART00_BASE)){		iounmap(port->membase);	}#endif}/* * Request the memory region(s) being used by 'port' */static int uart00_request_port(struct uart_port *port){	int result;	result = request_mem_region(port->mapbase, UART_PORT_SIZE,				    "serial_uart00") != NULL ? 0 : -EBUSY;	if (result)		return result;	port->membase = ioremap(port->mapbase, SZ_4K);	if (!port->membase) {		printk(KERN_ERR "serial00: cannot map io memory\n");		release_mem_region(port->mapbase, UART_PORT_SIZE);	}	return port->membase ? 0 : -ENOMEM;}/* * Configure/autoconfigure the port. */static void uart00_config_port(struct uart_port *port, int flags){	if (flags & UART_CONFIG_TYPE) {		if (uart00_request_port(port) == 0)			port->type = PORT_UART00;	}}/* * verify the new serial_struct (for TIOCSSERIAL). */static int uart00_verify_port(struct uart_port *port, struct serial_struct *ser){	int ret = 0;	if (ser->type != PORT_UNKNOWN && ser->type != PORT_UART00)		ret = -EINVAL;	if (ser->irq < 0 || ser->irq >= NR_IRQS)		ret = -EINVAL;	if (ser->baud_base < 9600)		ret = -EINVAL;	return ret;}static struct uart_ops uart00_pops = {	tx_empty:	uart00_tx_empty,	set_mctrl:	uart00_set_mctrl_null,	get_mctrl:	uart00_get_mctrl,	stop_tx:	uart00_stop_tx,	start_tx:	uart00_start_tx,	stop_rx:	uart00_stop_rx,	enable_ms:	uart00_enable_ms,	break_ctl:	uart00_break_ctl,	startup:	uart00_startup,	shutdown:	uart00_shutdown,	change_speed:	uart00_change_speed,	type:		uart00_type,	release_port:	uart00_release_port,	request_port:	uart00_request_port,	config_port:	uart00_config_port,	verify_port:	uart00_verify_port,};#ifdef CONFIG_ARCH_CAMELOTstatic struct uart_port epxa10db_port = {	membase:	(void*)IO_ADDRESS(EXC_UART00_BASE),	mapbase:        EXC_UART00_BASE,	iotype:		SERIAL_IO_MEM,	irq:		IRQ_UART,	uartclk:	EXC_AHB2_CLK_FREQUENCY,	fifosize:	16,	ops:		&uart00_pops,	flags:          ASYNC_BOOT_AUTOCONF,};#endif#ifdef CONFIG_SERIAL_UART00_CONSOLEstatic void uart00_console_write(struct console *co, const char *s, unsigned count){#ifdef CONFIG_ARCH_CAMELOT	struct uart_port *port = &epxa10db_port;	unsigned int status, old_ies;	int i;	/*	 *	First save the CR then disable the interrupts	 */	old_ies = UART_GET_IES(port);	UART_PUT_IEC(port,0xff);	/*	 *	Now, do each character	 */	for (i = 0; i < count; i++) {		do {			status = UART_GET_TSR(port);		} while (!UART_TX_READY(status));		UART_PUT_CHAR(port, s[i]);		if (s[i] == '\n') {			do {				status = UART_GET_TSR(port);			} while (!UART_TX_READY(status));			UART_PUT_CHAR(port, '\r');		}	}	/*	 *	Finally, wait for transmitter to become empty	 *	and restore the IES	 */	do {		status = UART_GET_TSR(port);	} while (status & UART_TSR_TX_LEVEL_MSK);	UART_PUT_IES(port, old_ies);#endif}static kdev_t uart00_console_device(struct console *co){	return MKDEV(SERIAL_UART00_MAJOR, SERIAL_UART00_MINOR + co->index);}static void /*__init*/ uart00_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits){	u_int uart_mc, quot;	uart_mc= UART_GET_MC(port);	*parity = 'n';	if (uart_mc & UART_MC_PE_MSK) {		if (uart_mc & UART_MC_EP_MSK)			*parity = 'e';		else			*parity = 'o';	}	switch (uart_mc & UART_MC_CLS_MSK){	case UART_MC_CLS_CHARLEN_5:		*bits = 5;		break;	case UART_MC_CLS_CHARLEN_6:		*bits = 6;		break;	case UART_MC_CLS_CHARLEN_7:		*bits = 7;		break;	case UART_MC_CLS_CHARLEN_8:		*bits = 8;		break;	}	quot = UART_GET_DIV_LO(port) | (UART_GET_DIV_HI(port) << 8);	*baud = port->uartclk / (16 *quot );}static int __init uart00_console_setup(struct console *co, char *options){	struct uart_port *port;	int baud = 38400;	int bits = 8;	int parity = 'n';	int flow= 'n';#ifdef CONFIG_ARCH_CAMELOT	/*	 * Check whether an invalid uart number has been specified, and	 * if so, search for the first available port that does have	 * console support.	 */	port = &epxa10db_port;	co->index = 0;#else	return -ENODEV;#endif	if (options)		uart_parse_options(options, &baud, &parity, &bits, &flow);	else		uart00_console_get_options(port, &baud, &parity, &bits);	return uart_set_options(port, co, baud, parity, bits, flow);}static struct console uart00_console = {	name:           SERIAL_UART00_NAME,	write:		uart00_console_write,	device:		uart00_console_device,	setup:		uart00_console_setup,	flags:		CON_PRINTBUFFER,	index:		0,};void __init uart00_console_init(void){	register_console(&uart00_console);}#define UART00_CONSOLE	&uart00_console#else#define UART00_CONSOLE	NULL#endifstatic struct uart_driver uart00_reg = {	owner:                  NULL,	normal_major:		SERIAL_UART00_MAJOR,	normal_name:		SERIAL_UART00_NAME,	normal_driver:		&normal,	callout_major:		CALLOUT_UART00_MAJOR,	callout_name:		CALLOUT_UART00_NAME,	callout_driver:		&callout,	table:			uart00_table,	termios:		uart00_termios,	termios_locked:		uart00_termios_locked,	minor:			SERIAL_UART00_MINOR,	nr:			UART_NR,#ifdef CONFIG_ARCH_CAMELOT	port:			&epxa10db_port,#endif	state:			NULL,	cons:			UART00_CONSOLE,};static int __init uart00_init(void){	printk(KERN_WARNING "serial_uart00:Using temporary major/minor pairs - these WILL change in the future\n");	return uart_register_driver(&uart00_reg);}__initcall(uart00_init);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区观看视频| 国产在线播放一区三区四| 色呦呦国产精品| 亚洲欧洲综合另类| 色一区在线观看| 亚洲高清三级视频| 日韩一区二区在线观看视频播放| 日本v片在线高清不卡在线观看| 欧美精品三级日韩久久| 日韩电影在线免费| 精品国产乱码久久久久久图片 | 欧美久久久久久久久| 日韩专区欧美专区| 精品国产伦理网| www.激情成人| 亚洲一区二区高清| 日韩美女天天操| gogo大胆日本视频一区| 亚洲一区视频在线观看视频| 欧美一区二区精品在线| 国产高清在线精品| 一区二区三区四区av| 欧美一区二区三区思思人| 国产高清不卡一区二区| 一区二区三区四区国产精品| 日韩精品专区在线| thepron国产精品| 日本欧美一区二区三区乱码| 国产网站一区二区| 欧美日韩一级黄| 国产河南妇女毛片精品久久久| 国产精品久久免费看| 337p亚洲精品色噜噜噜| 成人在线视频一区| 性感美女久久精品| 国产精品素人视频| 69av一区二区三区| 色综合咪咪久久| 国产麻豆午夜三级精品| 亚洲精品大片www| 亚洲国产精品成人综合| 欧美日本国产视频| 99久久婷婷国产综合精品电影 | 91亚洲精品久久久蜜桃| 日本va欧美va精品| 亚洲激情男女视频| 久久久久九九视频| 欧美一级二级在线观看| 91视视频在线观看入口直接观看www| 麻豆一区二区99久久久久| 亚洲精品高清在线观看| 国产亚洲制服色| 欧美成人一区二区三区| 日本久久电影网| 国产成人综合亚洲网站| 美女www一区二区| 天天射综合影视| 亚洲麻豆国产自偷在线| 国产精品免费久久久久| 精品黑人一区二区三区久久| 欧美美女一区二区三区| 一本大道av伊人久久综合| 99在线精品观看| 成人免费三级在线| 国产黄色成人av| 国产一区二区福利| 狠狠色2019综合网| 美国三级日本三级久久99| 午夜精品久久久久久久久| 亚洲免费观看视频| 成人自拍视频在线观看| 激情五月播播久久久精品| 日韩中文字幕亚洲一区二区va在线| 亚洲欧美日韩一区二区三区在线观看| 亚洲国产高清不卡| 国产午夜一区二区三区| 久久久.com| 日本一区二区综合亚洲| 日本一区二区三区免费乱视频| 精品剧情v国产在线观看在线| 日韩一区二区三区电影| 日韩欧美一区二区三区在线| 日韩欧美亚洲一区二区| 欧美一二三区在线| 欧美成人vr18sexvr| 欧美精品一区二区不卡| 久久久亚洲高清| 欧美国产成人在线| 国产精品久线在线观看| 亚洲色图视频网| 亚洲美女免费视频| 午夜精品久久久久久久久| 日韩二区在线观看| 国产原创一区二区三区| 福利一区在线观看| 在线一区二区视频| 777色狠狠一区二区三区| 日韩欧美在线综合网| 久久精品欧美日韩精品| 国产精品第五页| 亚洲18色成人| 激情五月婷婷综合网| 成人久久18免费网站麻豆| 91网上在线视频| 91精品国产综合久久国产大片| 精品欧美一区二区久久| 欧美国产欧美综合| 成人18视频在线播放| 日本大香伊一区二区三区| 69av一区二区三区| 国产清纯白嫩初高生在线观看91 | 精品少妇一区二区三区日产乱码 | 中文字幕乱码久久午夜不卡| 亚洲欧美日韩人成在线播放| 亚洲第一搞黄网站| 狠狠色2019综合网| 在线亚洲+欧美+日本专区| 欧美一区二区三区播放老司机| 久久久www免费人成精品| 亚洲人成亚洲人成在线观看图片| 天天影视网天天综合色在线播放| 国产精品白丝jk黑袜喷水| 在线这里只有精品| 久久女同精品一区二区| 一区二区三区小说| 国产成+人+日韩+欧美+亚洲| 在线亚洲一区二区| 久久蜜桃av一区精品变态类天堂| 成人免费视频视频在线观看免费 | 在线不卡a资源高清| 中文字幕高清一区| 男人操女人的视频在线观看欧美| av在线这里只有精品| 91精品蜜臀在线一区尤物| 综合久久久久综合| 看国产成人h片视频| 在线免费亚洲电影| 欧美极品另类videosde| 丝袜美腿亚洲色图| 色婷婷综合激情| 国产免费观看久久| 免费观看在线色综合| 欧美在线不卡一区| 国产精品久久久久久久久免费丝袜 | 国产精品久久久一区麻豆最新章节| 日本午夜精品一区二区三区电影| caoporn国产一区二区| 日韩精品一区二区三区蜜臀| 亚洲高清三级视频| 91美女在线视频| 欧美韩国日本一区| 国内一区二区视频| 亚洲成人av电影| 91麻豆免费观看| 中文字幕在线不卡一区| 国产成人av电影| 久久久三级国产网站| 理论电影国产精品| 欧美一卡2卡三卡4卡5免费| 悠悠色在线精品| 91色视频在线| 亚洲另类在线视频| 色综合色综合色综合色综合色综合 | 国产九色sp调教91| 久久综合999| 国产在线精品免费| 久久久午夜电影| 国产成人精品免费一区二区| 久久久久久久久久久久电影| 国内精品免费在线观看| 久久伊99综合婷婷久久伊| 激情国产一区二区| 久久综合精品国产一区二区三区| 极品美女销魂一区二区三区 | 国内外精品视频| 久久伊人蜜桃av一区二区| 国产一区二区免费视频| 久久久久久久久伊人| 粉嫩aⅴ一区二区三区四区| 精品午夜一区二区三区在线观看| 精品久久久网站| 国产精品香蕉一区二区三区| 国产视频一区二区在线| 成人高清av在线| 亚洲卡通欧美制服中文| 欧美日韩亚洲综合一区二区三区| 偷窥少妇高潮呻吟av久久免费| 91精品在线麻豆| 韩国成人在线视频| 中文字幕在线免费不卡| 色天天综合色天天久久| 石原莉奈在线亚洲三区| 日韩女优制服丝袜电影| 国产风韵犹存在线视精品| 亚洲视频精选在线| 91精品国产欧美一区二区成人| 国产一区二区三区在线观看免费视频| 日本一区二区在线不卡| 欧美色电影在线| 另类欧美日韩国产在线|