1 /* Parallel-port initialisation code. 3 * Authors: David Campbell <campbell@torque.net> 4 * Tim Waugh <tim@cyberelk.demon.co.uk> 5 * Jose Renau <renau@acm.org> 7 * based on work by Grant Guenther <grant@torque.net> 8 * and Philip Blundell <Philip.Blundell@pobox.com> 11 #include <linux/config.h> 12 #include <linux/module.h> 13 #include <linux/threads.h> 14 #include <linux/string.h> 15 #include <linux/parport.h> 16 #include <linux/errno.h> 17 #include <linux/kernel.h> 18 #include <linux/malloc.h> 19 #include <linux/init.h> 22 static int io
[PARPORT_MAX
+1] __initdata
= { [0... PARPORT_MAX
] =0}; 23 static int io_hi
[PARPORT_MAX
+1] __initdata
= { [0... PARPORT_MAX
] =0}; 24 static int irq
[PARPORT_MAX
] __initdata
= { [0... PARPORT_MAX
-1] = PARPORT_IRQ_PROBEONLY
}; 25 static int dma
[PARPORT_MAX
] __initdata
= { [0... PARPORT_MAX
-1] = PARPORT_DMA_NONE
}; 27 externintparport_pc_init(int*io
,int*io_hi
,int*irq
,int*dma
); 29 static int parport_setup_ptr __initdata
=0; 32 * Acceptable parameters: 36 * parport=0xBASE[,IRQ[,DMA]] 38 * IRQ/DMA may be numeric or 'auto' or 'none' 40 static int __init
parport_setup(char*str
) 46 if(!str
|| !*str
|| (*str
=='0'&& !*(str
+1))) { 47 /* Disable parport if "parport=0" in cmdline */ 48 io
[0] = PARPORT_DISABLE
; 52 if(!strncmp(str
,"auto",4)) { 53 irq
[0] = PARPORT_IRQ_AUTO
; 54 dma
[0] = PARPORT_DMA_AUTO
; 58 val
=simple_strtoul(str
, &endptr
,0); 60 printk(KERN_WARNING
"parport=%s not understood\n", str
); 64 if(parport_setup_ptr
== PARPORT_MAX
) { 65 printk(KERN_ERR
"parport=%s ignored, too many ports\n", str
); 69 io
[parport_setup_ptr
] = val
; 70 irq
[parport_setup_ptr
] = PARPORT_IRQ_NONE
; 71 dma
[parport_setup_ptr
] = PARPORT_DMA_NONE
; 75 if(!strncmp(sep
,"auto",4)) 76 irq
[parport_setup_ptr
] = PARPORT_IRQ_AUTO
; 77 else if(strncmp(sep
,"none",4)) { 78 val
=simple_strtoul(sep
, &endptr
,0); 81 "parport=%s: irq not understood\n", 85 irq
[parport_setup_ptr
] = val
; 91 if(!strncmp(sep
,"auto",4)) 92 dma
[parport_setup_ptr
] = PARPORT_DMA_AUTO
; 93 else if(strncmp(sep
,"none",4)) { 94 val
=simple_strtoul(sep
, &endptr
,0); 97 "parport=%s: dma not understood\n", 101 dma
[parport_setup_ptr
] = val
; 109 __setup("parport=", parport_setup
); 117 parport_default_proc_register(); 122 voidcleanup_module(void) 125 parport_default_proc_unregister(); 131 int __init
parport_init(void) 133 if(io
[0] == PARPORT_DISABLE
) 137 parport_default_proc_register(); 140 #ifdef CONFIG_PARPORT_PC 141 parport_pc_init(io
, io_hi
, irq
, dma
); 143 #ifdef CONFIG_PARPORT_AMIGA 144 parport_amiga_init(); 146 #ifdef CONFIG_PARPORT_MFC3 149 #ifdef CONFIG_PARPORT_ATARI 150 parport_atari_init(); 152 #ifdef CONFIG_PARPORT_ARC 158 __initcall(parport_init
); 162 /* Exported symbols for modules. */ 164 EXPORT_SYMBOL(parport_claim
); 165 EXPORT_SYMBOL(parport_claim_or_block
); 166 EXPORT_SYMBOL(parport_release
); 167 EXPORT_SYMBOL(parport_register_port
); 168 EXPORT_SYMBOL(parport_announce_port
); 169 EXPORT_SYMBOL(parport_unregister_port
); 170 EXPORT_SYMBOL(parport_register_driver
); 171 EXPORT_SYMBOL(parport_unregister_driver
); 172 EXPORT_SYMBOL(parport_register_device
); 173 EXPORT_SYMBOL(parport_unregister_device
); 174 EXPORT_SYMBOL(parport_enumerate
); 175 EXPORT_SYMBOL(parport_negotiate
); 176 EXPORT_SYMBOL(parport_write
); 177 EXPORT_SYMBOL(parport_read
); 178 EXPORT_SYMBOL(parport_ieee1284_wakeup
); 179 EXPORT_SYMBOL(parport_wait_peripheral
); 180 EXPORT_SYMBOL(parport_wait_event
); 181 EXPORT_SYMBOL(parport_set_timeout
); 182 EXPORT_SYMBOL(parport_ieee1284_interrupt
); 183 EXPORT_SYMBOL(parport_ieee1284_ecp_write_data
); 184 EXPORT_SYMBOL(parport_ieee1284_ecp_read_data
); 185 EXPORT_SYMBOL(parport_ieee1284_ecp_write_addr
); 186 EXPORT_SYMBOL(parport_ieee1284_write_compat
); 187 EXPORT_SYMBOL(parport_ieee1284_read_nibble
); 188 EXPORT_SYMBOL(parport_ieee1284_read_byte
); 189 EXPORT_SYMBOL(parport_ieee1284_epp_write_data
); 190 EXPORT_SYMBOL(parport_ieee1284_epp_read_data
); 191 EXPORT_SYMBOL(parport_ieee1284_epp_write_addr
); 192 EXPORT_SYMBOL(parport_ieee1284_epp_read_addr
); 193 EXPORT_SYMBOL(parport_proc_register
); 194 EXPORT_SYMBOL(parport_proc_unregister
); 195 EXPORT_SYMBOL(parport_device_proc_register
); 196 EXPORT_SYMBOL(parport_device_proc_unregister
); 197 EXPORT_SYMBOL(parport_default_proc_register
); 198 EXPORT_SYMBOL(parport_default_proc_unregister
); 199 EXPORT_SYMBOL(parport_parse_irqs
); 200 EXPORT_SYMBOL(parport_parse_dmas
); 201 #ifdef CONFIG_PARPORT_1284 202 EXPORT_SYMBOL(parport_open
); 203 EXPORT_SYMBOL(parport_close
); 204 EXPORT_SYMBOL(parport_device_id
); 205 EXPORT_SYMBOL(parport_device_num
); 206 EXPORT_SYMBOL(parport_device_coords
); 207 EXPORT_SYMBOL(parport_daisy_deselect_all
); 208 EXPORT_SYMBOL(parport_daisy_select
); 209 EXPORT_SYMBOL(parport_daisy_init
); 212 voidinc_parport_count(void) 219 voiddec_parport_count(void)