⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 我为S3C2410写的扩展并口驱动程序
💻 C
字号:
/* Parallel-port initialisation code. *  * Authors: David Campbell <campbell@torque.net> *          Tim Waugh <tim@cyberelk.demon.co.uk> *	    Jose Renau <renau@acm.org> * * based on work by Grant Guenther <grant@torque.net> *              and Philip Blundell <Philip.Blundell@pobox.com>  * modified by wingwind for 16c552 */#include <linux/config.h>#include <linux/module.h>#include <linux/threads.h>#include <linux/string.h>#include <linux/parport.h>#include <linux/errno.h>#include <linux/kernel.h>#include <linux/slab.h>#include <linux/init.h>#ifndef MODULEstatic int io[PARPORT_MAX+1] __initdata = { [0 ... PARPORT_MAX] = 0 };#ifdef CONFIG_PARPORT_PCstatic int io_hi[PARPORT_MAX+1] __initdata =	{ [0 ... PARPORT_MAX] = PARPORT_IOHI_AUTO };#endifstatic int irq[PARPORT_MAX] __initdata = { [0 ... PARPORT_MAX-1] = PARPORT_IRQ_PROBEONLY };static int dma[PARPORT_MAX] __initdata = { [0 ... PARPORT_MAX-1] = PARPORT_DMA_NONE };extern int parport_pc_init(int *io, int *io_hi, int *irq, int *dma);extern int parport_sunbpp_init(void);extern int parport_amiga_init(void);extern int parport_mfc3_init(void);extern int parport_16c552_init(void);// wingwind add for s3c2410 board's 16c552 parportstatic int parport_setup_ptr __initdata = 0;/* * Acceptable parameters: * * parport=0 * parport=auto * parport=0xBASE[,IRQ[,DMA]] * * IRQ/DMA may be numeric or 'auto' or 'none' */static int __init parport_setup (char *str){	char *endptr;	char *sep;	int val;	if (!str || !*str || (*str == '0' && !*(str+1))) {		/* Disable parport if "parport=0" in cmdline */		io[0] = PARPORT_DISABLE;		return 1;	}	if (!strncmp (str, "auto", 4)) {		irq[0] = PARPORT_IRQ_AUTO;		dma[0] = PARPORT_DMA_AUTO;		return 1;	}	val = simple_strtoul (str, &endptr, 0);	if (endptr == str) {		printk (KERN_WARNING "parport=%s not understood\n", str);		return 1;	}	if (parport_setup_ptr == PARPORT_MAX) {		printk(KERN_ERR "parport=%s ignored, too many ports\n", str);		return 1;	}		io[parport_setup_ptr] = val;	irq[parport_setup_ptr] = PARPORT_IRQ_NONE;	dma[parport_setup_ptr] = PARPORT_DMA_NONE;	sep = strchr (str, ',');	if (sep++) {		if (!strncmp (sep, "auto", 4))			irq[parport_setup_ptr] = PARPORT_IRQ_AUTO;		else if (strncmp (sep, "none", 4)) {			val = simple_strtoul (sep, &endptr, 0);			if (endptr == sep) {				printk (KERN_WARNING					"parport=%s: irq not understood\n",					str);				return 1;			}			irq[parport_setup_ptr] = val;		}	}	sep = strchr (sep, ',');	if (sep++) {		if (!strncmp (sep, "auto", 4))			dma[parport_setup_ptr] = PARPORT_DMA_AUTO;		else if (!strncmp (sep, "nofifo", 6))			dma[parport_setup_ptr] = PARPORT_DMA_NOFIFO;		else if (strncmp (sep, "none", 4)) {			val = simple_strtoul (sep, &endptr, 0);			if (endptr == sep) {				printk (KERN_WARNING					"parport=%s: dma not understood\n",					str);				return 1;			}			dma[parport_setup_ptr] = val;		}	}	parport_setup_ptr++;	return 1;}__setup ("parport=", parport_setup);#endif#ifdef MODULEint init_module(void){#ifdef CONFIG_SYSCTL	parport_default_proc_register ();#endif	return 0;}void cleanup_module(void){#ifdef CONFIG_SYSCTL	parport_default_proc_unregister ();#endif}#elseint __init parport_init (void){	if (io[0] == PARPORT_DISABLE) 		return 1;#ifdef CONFIG_SYSCTL	parport_default_proc_register ();#endif#ifdef CONFIG_PARPORT_PC	parport_pc_init(io, io_hi, irq, dma);#endif#ifdef CONFIG_PARPORT_AMIGA	parport_amiga_init();#endif#ifdef CONFIG_PARPORT_MFC3	parport_mfc3_init();#endif#ifdef CONFIG_PARPORT_ATARI	parport_atari_init();#endif#ifdef CONFIG_PARPORT_ARC	parport_arc_init();#endif#ifdef CONFIG_PARPORT_SUNBPP	parport_sunbpp_init();#endif#ifdef CONFIG_PARPORT_16C552	parport_16c552_init();#endif	return 0;}__initcall(parport_init);#endif/* Exported symbols for modules. */EXPORT_SYMBOL(parport_claim);EXPORT_SYMBOL(parport_claim_or_block);EXPORT_SYMBOL(parport_release);EXPORT_SYMBOL(parport_register_port);EXPORT_SYMBOL(parport_announce_port);EXPORT_SYMBOL(parport_unregister_port);EXPORT_SYMBOL(parport_register_driver);EXPORT_SYMBOL(parport_unregister_driver);EXPORT_SYMBOL(parport_register_device);EXPORT_SYMBOL(parport_unregister_device);EXPORT_SYMBOL(parport_enumerate);EXPORT_SYMBOL(parport_get_port);EXPORT_SYMBOL(parport_put_port);EXPORT_SYMBOL(parport_find_number);EXPORT_SYMBOL(parport_find_base);EXPORT_SYMBOL(parport_negotiate);EXPORT_SYMBOL(parport_write);EXPORT_SYMBOL(parport_read);EXPORT_SYMBOL(parport_ieee1284_wakeup);EXPORT_SYMBOL(parport_wait_peripheral);EXPORT_SYMBOL(parport_poll_peripheral);EXPORT_SYMBOL(parport_wait_event);EXPORT_SYMBOL(parport_set_timeout);EXPORT_SYMBOL(parport_ieee1284_interrupt);EXPORT_SYMBOL(parport_ieee1284_ecp_write_data);EXPORT_SYMBOL(parport_ieee1284_ecp_read_data);EXPORT_SYMBOL(parport_ieee1284_ecp_write_addr);EXPORT_SYMBOL(parport_ieee1284_write_compat);EXPORT_SYMBOL(parport_ieee1284_read_nibble);EXPORT_SYMBOL(parport_ieee1284_read_byte);EXPORT_SYMBOL(parport_ieee1284_epp_write_data);EXPORT_SYMBOL(parport_ieee1284_epp_read_data);EXPORT_SYMBOL(parport_ieee1284_epp_write_addr);EXPORT_SYMBOL(parport_ieee1284_epp_read_addr);EXPORT_SYMBOL(parport_proc_register);EXPORT_SYMBOL(parport_proc_unregister);EXPORT_SYMBOL(parport_device_proc_register);EXPORT_SYMBOL(parport_device_proc_unregister);EXPORT_SYMBOL(parport_default_proc_register);EXPORT_SYMBOL(parport_default_proc_unregister);EXPORT_SYMBOL(parport_parse_irqs);EXPORT_SYMBOL(parport_parse_dmas);#ifdef CONFIG_PARPORT_1284EXPORT_SYMBOL(parport_open);EXPORT_SYMBOL(parport_close);EXPORT_SYMBOL(parport_device_id);EXPORT_SYMBOL(parport_device_num);EXPORT_SYMBOL(parport_device_coords);EXPORT_SYMBOL(parport_daisy_deselect_all);EXPORT_SYMBOL(parport_daisy_select);EXPORT_SYMBOL(parport_daisy_init);EXPORT_SYMBOL(parport_find_device);EXPORT_SYMBOL(parport_find_class);#endifvoid inc_parport_count(void){#ifdef MODULE	MOD_INC_USE_COUNT;#endif}void dec_parport_count(void){#ifdef MODULE	MOD_DEC_USE_COUNT;#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -