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

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

?? amba.c

?? IXP425 平臺下嵌入式LINUX的串口的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
static void ambauart_break_ctl(struct uart_port *port, int break_state){	unsigned int lcr_h;	lcr_h = UART_GET_LCRH(port);	if (break_state == -1)		lcr_h |= AMBA_UARTLCR_H_BRK;	else		lcr_h &= ~AMBA_UARTLCR_H_BRK;	UART_PUT_LCRH(port, lcr_h);}static int ambauart_startup(struct uart_port *port, struct uart_info *info){	int retval;	/*	 * Allocate the IRQ	 */	retval = request_irq(port->irq, ambauart_int, 0, "amba", info);	if (retval)		return retval;	/*	 * initialise the old status of the modem signals	 */	info->drv_old_status = UART_GET_FR(port) & AMBA_UARTFR_MODEM_ANY;	/*	 * Finally, enable interrupts	 */	UART_PUT_CR(port, AMBA_UARTCR_UARTEN | AMBA_UARTCR_RIE |			  AMBA_UARTCR_RTIE);	return 0;}static void ambauart_shutdown(struct uart_port *port, struct uart_info *info){	/*	 * Free the interrupt	 */	free_irq(port->irq, info);	/*	 * disable all interrupts, disable the port	 */	UART_PUT_CR(port, 0);	/* disable break condition and fifos */	UART_PUT_LCRH(port, UART_GET_LCRH(port) &		~(AMBA_UARTLCR_H_BRK | AMBA_UARTLCR_H_FEN));}static void ambauart_change_speed(struct uart_port *port, u_int cflag, u_int iflag, u_int quot){	u_int lcr_h, old_cr;	unsigned long flags;#if DEBUG	printk("ambauart_set_cflag(0x%x) called\n", cflag);#endif	/* byte size and parity */	switch (cflag & CSIZE) {	case CS5: lcr_h = AMBA_UARTLCR_H_WLEN_5; break;	case CS6: lcr_h = AMBA_UARTLCR_H_WLEN_6; break;	case CS7: lcr_h = AMBA_UARTLCR_H_WLEN_7; break;	default:  lcr_h = AMBA_UARTLCR_H_WLEN_8; break; // CS8	}	if (cflag & CSTOPB)		lcr_h |= AMBA_UARTLCR_H_STP2;	if (cflag & PARENB) {		lcr_h |= AMBA_UARTLCR_H_PEN;		if (!(cflag & PARODD))			lcr_h |= AMBA_UARTLCR_H_EPS;	}	if (port->fifosize > 1)		lcr_h |= AMBA_UARTLCR_H_FEN;	port->read_status_mask = AMBA_UARTRSR_OE;	if (iflag & INPCK)		port->read_status_mask |= AMBA_UARTRSR_FE | AMBA_UARTRSR_PE;	if (iflag & (BRKINT | PARMRK))		port->read_status_mask |= AMBA_UARTRSR_BE;	/*	 * Characters to ignore	 */	port->ignore_status_mask = 0;	if (iflag & IGNPAR)		port->ignore_status_mask |= AMBA_UARTRSR_FE | AMBA_UARTRSR_PE;	if (iflag & IGNBRK) {		port->ignore_status_mask |= AMBA_UARTRSR_BE;		/*		 * If we're ignoring parity and break indicators,		 * ignore overruns too (for real raw support).		 */		if (iflag & IGNPAR)			port->ignore_status_mask |= AMBA_UARTRSR_OE;	}	/*	 * Ignore all characters if CREAD is not set.	 */	if ((cflag & CREAD) == 0)		port->ignore_status_mask |= UART_DUMMY_RSR_RX;	/* first, disable everything */	save_flags(flags); cli();	old_cr = UART_GET_CR(port) & ~AMBA_UARTCR_MSIE;	if ((port->flags & ASYNC_HARDPPS_CD) ||	    (cflag & CRTSCTS) || !(cflag & CLOCAL))		old_cr |= AMBA_UARTCR_MSIE;	UART_PUT_CR(port, 0);	/* Set baud rate */	quot -= 1;	UART_PUT_LCRM(port, ((quot & 0xf00) >> 8));	UART_PUT_LCRL(port, (quot & 0xff));	/*	 * ----------v----------v----------v----------v-----	 * NOTE: MUST BE WRITTEN AFTER UARTLCR_M & UARTLCR_L	 * ----------^----------^----------^----------^-----	 */	UART_PUT_LCRH(port, lcr_h);	UART_PUT_CR(port, old_cr);	restore_flags(flags);}static const char *ambauart_type(struct uart_port *port){	return port->type == PORT_AMBA ? "AMBA" : NULL;}/* * Release the memory region(s) being used by 'port' */static void ambauart_release_port(struct uart_port *port){	release_mem_region(port->mapbase, UART_PORT_SIZE);}/* * Request the memory region(s) being used by 'port' */static int ambauart_request_port(struct uart_port *port){	return request_mem_region(port->mapbase, UART_PORT_SIZE, "serial_amba")			!= NULL ? 0 : -EBUSY;}/* * Configure/autoconfigure the port. */static void ambauart_config_port(struct uart_port *port, int flags){	if (flags & UART_CONFIG_TYPE) {		port->type = PORT_AMBA;		ambauart_request_port(port);	}}/* * verify the new serial_struct (for TIOCSSERIAL). */static int ambauart_verify_port(struct uart_port *port, struct serial_struct *ser){	int ret = 0;	if (ser->type != PORT_UNKNOWN && ser->type != PORT_AMBA)		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 amba_pops = {	tx_empty:	ambauart_tx_empty,	set_mctrl:	ambauart_set_mctrl,	get_mctrl:	ambauart_get_mctrl,	stop_tx:	ambauart_stop_tx,	start_tx:	ambauart_start_tx,	stop_rx:	ambauart_stop_rx,	enable_ms:	ambauart_enable_ms,	break_ctl:	ambauart_break_ctl,	startup:	ambauart_startup,	shutdown:	ambauart_shutdown,	change_speed:	ambauart_change_speed,	type:		ambauart_type,	release_port:	ambauart_release_port,	request_port:	ambauart_request_port,	config_port:	ambauart_config_port,	verify_port:	ambauart_verify_port,};static struct uart_port amba_ports[UART_NR] = {	{		membase:	(void *)IO_ADDRESS(INTEGRATOR_UART0_BASE),		mapbase:	INTEGRATOR_UART0_BASE,		iotype:		SERIAL_IO_MEM,		irq:		IRQ_UARTINT0,		uartclk:	14745600,		fifosize:	16,		unused:		{ 4, 5 }, /*driver_priv:	PORT_CTRLS(5, 4), */		ops:		&amba_pops,		flags:		ASYNC_BOOT_AUTOCONF,	},	{		membase:	(void *)IO_ADDRESS(INTEGRATOR_UART1_BASE),		mapbase:	INTEGRATOR_UART1_BASE,		iotype:		SERIAL_IO_MEM,		irq:		IRQ_UARTINT1,		uartclk:	14745600,		fifosize:	16,		unused:		{ 6, 7 }, /*driver_priv:	PORT_CTRLS(7, 6), */		ops:		&amba_pops,		flags:		ASYNC_BOOT_AUTOCONF,	}};#ifdef CONFIG_SERIAL_AMBA_CONSOLEstatic void ambauart_console_write(struct console *co, const char *s, u_int count){	struct uart_port *port = amba_ports + co->index;	unsigned int status, old_cr;	int i;	/*	 *	First save the CR then disable the interrupts	 */	old_cr = UART_GET_CR(port);	UART_PUT_CR(port, AMBA_UARTCR_UARTEN);	/*	 *	Now, do each character	 */	for (i = 0; i < count; i++) {		do {			status = UART_GET_FR(port);		} while (!UART_TX_READY(status));		UART_PUT_CHAR(port, s[i]);		if (s[i] == '\n') {			do {				status = UART_GET_FR(port);			} while (!UART_TX_READY(status));			UART_PUT_CHAR(port, '\r');		}	}	/*	 *	Finally, wait for transmitter to become empty	 *	and restore the TCR	 */	do {		status = UART_GET_FR(port);	} while (status & AMBA_UARTFR_BUSY);	UART_PUT_CR(port, old_cr);}static kdev_t ambauart_console_device(struct console *co){	return MKDEV(SERIAL_AMBA_MAJOR, SERIAL_AMBA_MINOR + co->index);}static void __initambauart_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits){	if (UART_GET_CR(port) & AMBA_UARTCR_UARTEN) {		u_int lcr_h, quot;		lcr_h = UART_GET_LCRH(port);		*parity = 'n';		if (lcr_h & AMBA_UARTLCR_H_PEN) {			if (lcr_h & AMBA_UARTLCR_H_EPS)				*parity = 'e';			else				*parity = 'o';		}		if ((lcr_h & 0x60) == AMBA_UARTLCR_H_WLEN_7)			*bits = 7;		else			*bits = 8;		quot = UART_GET_LCRL(port) | UART_GET_LCRM(port) << 8;		*baud = port->uartclk / (16 * (quot + 1));	}}static int __init ambauart_console_setup(struct console *co, char *options){	struct uart_port *port;	int baud = 38400;	int bits = 8;	int parity = 'n';	int flow = 'n';	/*	 * Check whether an invalid uart number has been specified, and	 * if so, search for the first available port that does have	 * console support.	 */	port = uart_get_console(amba_ports, UART_NR, co);	if (options)		uart_parse_options(options, &baud, &parity, &bits, &flow);	else		ambauart_console_get_options(port, &baud, &parity, &bits);	return uart_set_options(port, co, baud, parity, bits, flow);}static struct console amba_console = {	name:		"ttyAM",	write:		ambauart_console_write,	device:		ambauart_console_device,	setup:		ambauart_console_setup,	flags:		CON_PRINTBUFFER,	index:		-1,};void __init ambauart_console_init(void){	register_console(&amba_console);}#define AMBA_CONSOLE	&amba_console#else#define AMBA_CONSOLE	NULL#endifstatic struct uart_driver amba_reg = {	owner:			THIS_MODULE,	normal_major:		SERIAL_AMBA_MAJOR,#ifdef CONFIG_DEVFS_FS	normal_name:		"ttyAM%d",	callout_name:		"cuaam%d",#else	normal_name:		"ttyAM",	callout_name:		"cuaam",#endif	normal_driver:		&normal,	callout_major:		CALLOUT_AMBA_MAJOR,	callout_driver:		&callout,	table:			amba_table,	termios:		amba_termios,	termios_locked:		amba_termios_locked,	minor:			SERIAL_AMBA_MINOR,	nr:			UART_NR,	port:			amba_ports,	cons:			AMBA_CONSOLE,};static int __init ambauart_init(void){	return uart_register_driver(&amba_reg);}static void __exit ambauart_exit(void){	uart_unregister_driver(&amba_reg);}module_init(ambauart_init);module_exit(ambauart_exit);EXPORT_NO_SYMBOLS;MODULE_AUTHOR("ARM Ltd/Deep Blue Solutions Ltd");MODULE_DESCRIPTION("ARM AMBA serial port driver");MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影视频在线| 国产成人综合亚洲网站| 久久国产视频网| 成人精品小蝌蚪| 91精品综合久久久久久| 日韩美女精品在线| 国产在线看一区| 欧美亚洲国产一区二区三区va| 久久综合九色综合97婷婷| 亚洲人一二三区| 福利一区二区在线| 日韩欧美在线不卡| 一区二区高清视频在线观看| 国产成人免费9x9x人网站视频| 欧美日韩国产高清一区| 亚洲少妇中出一区| 国产成人精品三级| 久久影院午夜片一区| 免费欧美高清视频| 欧美男人的天堂一二区| 亚洲美女偷拍久久| 成人丝袜18视频在线观看| 国产精品女主播在线观看| 国产做a爰片久久毛片| 欧美久久一二三四区| 一区二区理论电影在线观看| 99久久精品国产观看| 国产精品私人自拍| 国产一区二区精品在线观看| 日韩视频永久免费| 青青草国产成人av片免费| 欧美精品aⅴ在线视频| 亚洲成年人网站在线观看| 欧洲另类一二三四区| 亚洲激情自拍偷拍| 在线看日韩精品电影| 夜夜嗨av一区二区三区| 91福利社在线观看| 国产精品网曝门| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品久久久久精k8 | 国产在线日韩欧美| 精品国产电影一区二区| 国产一区二区三区在线观看精品 | 91日韩精品一区| 亚洲黄色av一区| 精品视频999| 久久精品国产99久久6| 精品国产一区二区在线观看| 国产成人在线电影| 国产精品毛片久久久久久久| 色综合色狠狠天天综合色| 亚洲va在线va天堂| 欧美精品一区二区久久婷婷| 国产99精品在线观看| 亚洲色图另类专区| 91精品午夜视频| 国产精品一区二区91| 热久久一区二区| 国产欧美一区视频| 欧美在线free| 黄色日韩三级电影| 亚洲丝袜精品丝袜在线| 欧美丰满嫩嫩电影| 国产一区二区看久久| 伊人婷婷欧美激情| 日韩精品一区二区三区视频播放| 国产成人在线视频网址| 一卡二卡三卡日韩欧美| 精品美女一区二区三区| 色悠悠亚洲一区二区| 亚洲成av人综合在线观看| 26uuu亚洲综合色欧美| 色呦呦日韩精品| 久久99日本精品| 亚洲精品日日夜夜| 精品国产91洋老外米糕| 色综合久久久久综合体桃花网| 奇米色一区二区| 国产精品久久久久久久久免费樱桃 | 91精品福利在线一区二区三区 | 午夜久久久久久久久| 久久久久免费观看| 精品视频免费看| 99精品桃花视频在线观看| 日本不卡视频在线| 亚洲综合无码一区二区| 国产亚洲综合av| 欧美人体做爰大胆视频| 成人永久aaa| 久久精品国产免费看久久精品| 日韩理论片一区二区| 久久人人爽爽爽人久久久| 欧美综合亚洲图片综合区| 丁香六月综合激情| 91蝌蚪porny成人天涯| 六月丁香综合在线视频| 亚洲一区二区三区四区五区黄| 久久精品亚洲乱码伦伦中文| 777a∨成人精品桃花网| 欧美亚洲国产一区二区三区va| 粉嫩aⅴ一区二区三区四区| 久久国产免费看| 日本午夜一区二区| 肉色丝袜一区二区| 亚洲一区二区三区不卡国产欧美| 中文字幕一区不卡| 久久久精品黄色| 亚洲视频小说图片| 国产欧美一区二区三区在线老狼 | 欧美r级在线观看| 在线免费观看日本欧美| 99视频超级精品| 99久久婷婷国产综合精品电影| 国产精品一区二区免费不卡| 精品综合免费视频观看| 美日韩一区二区三区| 美国精品在线观看| 久久99精品国产.久久久久久| 男女性色大片免费观看一区二区| 亚洲成av人片一区二区三区| 亚洲一级二级在线| 天堂va蜜桃一区二区三区漫画版| 亚洲韩国一区二区三区| 亚洲成av人片在线观看| 偷拍亚洲欧洲综合| 日韩高清在线一区| 久久99久久99小草精品免视看| 麻豆成人免费电影| 国产一区二区视频在线播放| 国产伦精品一区二区三区免费迷| 国产精品911| 色综合中文字幕国产 | 日本一区二区三区免费乱视频| 久久亚洲精精品中文字幕早川悠里| 久久精品亚洲精品国产欧美kt∨ | 亚洲免费观看在线视频| 亚洲自拍偷拍av| 美女精品一区二区| 国产成人免费xxxxxxxx| 色哦色哦哦色天天综合| 欧美一区二区二区| 国产欧美一区二区三区沐欲 | 91麻豆免费观看| 欧美日韩色综合| 精品国产免费视频| 中文字幕中文在线不卡住| 亚洲国产中文字幕| 国产在线看一区| 91精品1区2区| 精品日韩在线一区| 日韩一区在线免费观看| 天天综合网天天综合色| 国产乱码精品一区二区三区忘忧草| 91欧美一区二区| 欧美一级久久久久久久大片| 国产精品天天看| 美国精品在线观看| 在线免费一区三区| 国产婷婷色一区二区三区在线| 一区二区三区在线视频播放| 久久成人久久爱| 欧美影视一区二区三区| 久久久久久久久久看片| 亚洲综合成人在线视频| 欧美写真视频网站| 精品乱人伦小说| 亚洲成a人片综合在线| 国产成人精品在线看| 欧美一区二区不卡视频| 一区二区在线观看av| 国产一区二区影院| 91精品国产色综合久久ai换脸| 亚洲天堂av一区| 国产福利电影一区二区三区| 777xxx欧美| 亚洲一二三四久久| 成人动漫中文字幕| 精品国产欧美一区二区| 视频一区二区三区中文字幕| 99精品国产一区二区三区不卡| 精品国产区一区| 免费高清成人在线| 欧美精品日日鲁夜夜添| 亚洲欧美色一区| 波多野结衣视频一区| 久久精品视频在线看| 麻豆精品一区二区| 91精品国产入口在线| 亚洲成人免费看| 91福利在线播放| 洋洋成人永久网站入口| 色婷婷综合久色| 亚洲欧美日韩成人高清在线一区| 国产a级毛片一区| 国产亚洲一区二区在线观看| 精品一区二区三区日韩| 欧美成人女星排名| 国内精品久久久久影院薰衣草| 欧美mv日韩mv国产|