Commit 991214386dee8a3cd9adc743778f472ac8a12bbc

Authored by Matt Porter
Committed by Greg Kroah-Hartman
1 parent 1790625feb

parport: remove unused dead code from lowlevel drivers

This unused code has been untouched for over 7 years and must
go.

Signed-off-by: Matt Porter <mporter@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 5 changed files with 0 additions and 377 deletions Inline Diff

drivers/parport/parport_amiga.c
1 /* Low-level parallel port routines for the Amiga built-in port 1 /* Low-level parallel port routines for the Amiga built-in port
2 * 2 *
3 * Author: Joerg Dorchain <joerg@dorchain.net> 3 * Author: Joerg Dorchain <joerg@dorchain.net>
4 * 4 *
5 * This is a complete rewrite of the code, but based heaviy upon the old 5 * This is a complete rewrite of the code, but based heaviy upon the old
6 * lp_intern. code. 6 * lp_intern. code.
7 * 7 *
8 * The built-in Amiga parallel port provides one port at a fixed address 8 * The built-in Amiga parallel port provides one port at a fixed address
9 * with 8 bidirectional data lines (D0 - D7) and 3 bidirectional status 9 * with 8 bidirectional data lines (D0 - D7) and 3 bidirectional status
10 * lines (BUSY, POUT, SEL), 1 output control line /STROBE (raised automatically 10 * lines (BUSY, POUT, SEL), 1 output control line /STROBE (raised automatically
11 * in hardware when the data register is accessed), and 1 input control line 11 * in hardware when the data register is accessed), and 1 input control line
12 * /ACK, able to cause an interrupt, but both not directly settable by 12 * /ACK, able to cause an interrupt, but both not directly settable by
13 * software. 13 * software.
14 */ 14 */
15 15
16 #include <linux/module.h> 16 #include <linux/module.h>
17 #include <linux/init.h> 17 #include <linux/init.h>
18 #include <linux/parport.h> 18 #include <linux/parport.h>
19 #include <linux/ioport.h> 19 #include <linux/ioport.h>
20 #include <linux/interrupt.h> 20 #include <linux/interrupt.h>
21 #include <linux/platform_device.h> 21 #include <linux/platform_device.h>
22 22
23 #include <asm/setup.h> 23 #include <asm/setup.h>
24 #include <asm/amigahw.h> 24 #include <asm/amigahw.h>
25 #include <asm/irq.h> 25 #include <asm/irq.h>
26 #include <asm/io.h> 26 #include <asm/io.h>
27 #include <asm/amigaints.h> 27 #include <asm/amigaints.h>
28 28
29 #undef DEBUG 29 #undef DEBUG
30 #ifdef DEBUG 30 #ifdef DEBUG
31 #define DPRINTK printk 31 #define DPRINTK printk
32 #else 32 #else
33 #define DPRINTK(x...) do { } while (0) 33 #define DPRINTK(x...) do { } while (0)
34 #endif 34 #endif
35 35
36 36
37 static void amiga_write_data(struct parport *p, unsigned char data) 37 static void amiga_write_data(struct parport *p, unsigned char data)
38 { 38 {
39 DPRINTK(KERN_DEBUG "write_data %c\n",data); 39 DPRINTK(KERN_DEBUG "write_data %c\n",data);
40 /* Triggers also /STROBE. This behavior cannot be changed */ 40 /* Triggers also /STROBE. This behavior cannot be changed */
41 ciaa.prb = data; 41 ciaa.prb = data;
42 mb(); 42 mb();
43 } 43 }
44 44
45 static unsigned char amiga_read_data(struct parport *p) 45 static unsigned char amiga_read_data(struct parport *p)
46 { 46 {
47 /* Triggers also /STROBE. This behavior cannot be changed */ 47 /* Triggers also /STROBE. This behavior cannot be changed */
48 return ciaa.prb; 48 return ciaa.prb;
49 } 49 }
50 50
51 #if 0
52 static unsigned char control_pc_to_amiga(unsigned char control)
53 {
54 unsigned char ret = 0;
55
56 if (control & PARPORT_CONTROL_SELECT) /* XXX: What is SELECP? */
57 ;
58 if (control & PARPORT_CONTROL_INIT) /* INITP */
59 /* reset connected to cpu reset pin */;
60 if (control & PARPORT_CONTROL_AUTOFD) /* AUTOLF */
61 /* Not connected */;
62 if (control & PARPORT_CONTROL_STROBE) /* Strobe */
63 /* Handled only directly by hardware */;
64 return ret;
65 }
66 #endif
67
68 static unsigned char control_amiga_to_pc(unsigned char control) 51 static unsigned char control_amiga_to_pc(unsigned char control)
69 { 52 {
70 return PARPORT_CONTROL_SELECT | 53 return PARPORT_CONTROL_SELECT |
71 PARPORT_CONTROL_AUTOFD | PARPORT_CONTROL_STROBE; 54 PARPORT_CONTROL_AUTOFD | PARPORT_CONTROL_STROBE;
72 /* fake value: interrupt enable, select in, no reset, 55 /* fake value: interrupt enable, select in, no reset,
73 no autolf, no strobe - seems to be closest the wiring diagram */ 56 no autolf, no strobe - seems to be closest the wiring diagram */
74 } 57 }
75 58
76 static void amiga_write_control(struct parport *p, unsigned char control) 59 static void amiga_write_control(struct parport *p, unsigned char control)
77 { 60 {
78 DPRINTK(KERN_DEBUG "write_control %02x\n",control); 61 DPRINTK(KERN_DEBUG "write_control %02x\n",control);
79 /* No implementation possible */ 62 /* No implementation possible */
80 } 63 }
81 64
82 static unsigned char amiga_read_control( struct parport *p) 65 static unsigned char amiga_read_control( struct parport *p)
83 { 66 {
84 DPRINTK(KERN_DEBUG "read_control \n"); 67 DPRINTK(KERN_DEBUG "read_control \n");
85 return control_amiga_to_pc(0); 68 return control_amiga_to_pc(0);
86 } 69 }
87 70
88 static unsigned char amiga_frob_control( struct parport *p, unsigned char mask, unsigned char val) 71 static unsigned char amiga_frob_control( struct parport *p, unsigned char mask, unsigned char val)
89 { 72 {
90 unsigned char old; 73 unsigned char old;
91 74
92 DPRINTK(KERN_DEBUG "frob_control mask %02x, value %02x\n",mask,val); 75 DPRINTK(KERN_DEBUG "frob_control mask %02x, value %02x\n",mask,val);
93 old = amiga_read_control(p); 76 old = amiga_read_control(p);
94 amiga_write_control(p, (old & ~mask) ^ val); 77 amiga_write_control(p, (old & ~mask) ^ val);
95 return old; 78 return old;
96 } 79 }
97
98 #if 0 /* currently unused */
99 static unsigned char status_pc_to_amiga(unsigned char status)
100 {
101 unsigned char ret = 1;
102
103 if (status & PARPORT_STATUS_BUSY) /* Busy */
104 ret &= ~1;
105 if (status & PARPORT_STATUS_ACK) /* Ack */
106 /* handled in hardware */;
107 if (status & PARPORT_STATUS_PAPEROUT) /* PaperOut */
108 ret |= 2;
109 if (status & PARPORT_STATUS_SELECT) /* select */
110 ret |= 4;
111 if (status & PARPORT_STATUS_ERROR) /* error */
112 /* not connected */;
113 return ret;
114 }
115 #endif
116 80
117 static unsigned char status_amiga_to_pc(unsigned char status) 81 static unsigned char status_amiga_to_pc(unsigned char status)
118 { 82 {
119 unsigned char ret = PARPORT_STATUS_BUSY | PARPORT_STATUS_ACK | PARPORT_STATUS_ERROR; 83 unsigned char ret = PARPORT_STATUS_BUSY | PARPORT_STATUS_ACK | PARPORT_STATUS_ERROR;
120 84
121 if (status & 1) /* Busy */ 85 if (status & 1) /* Busy */
122 ret &= ~PARPORT_STATUS_BUSY; 86 ret &= ~PARPORT_STATUS_BUSY;
123 if (status & 2) /* PaperOut */ 87 if (status & 2) /* PaperOut */
124 ret |= PARPORT_STATUS_PAPEROUT; 88 ret |= PARPORT_STATUS_PAPEROUT;
125 if (status & 4) /* Selected */ 89 if (status & 4) /* Selected */
126 ret |= PARPORT_STATUS_SELECT; 90 ret |= PARPORT_STATUS_SELECT;
127 /* the rest is not connected or handled autonomously in hardware */ 91 /* the rest is not connected or handled autonomously in hardware */
128 92
129 return ret; 93 return ret;
130 } 94 }
131 95
132 static unsigned char amiga_read_status(struct parport *p) 96 static unsigned char amiga_read_status(struct parport *p)
133 { 97 {
134 unsigned char status; 98 unsigned char status;
135 99
136 status = status_amiga_to_pc(ciab.pra & 7); 100 status = status_amiga_to_pc(ciab.pra & 7);
137 DPRINTK(KERN_DEBUG "read_status %02x\n", status); 101 DPRINTK(KERN_DEBUG "read_status %02x\n", status);
138 return status; 102 return status;
139 } 103 }
140 104
141 static void amiga_enable_irq(struct parport *p) 105 static void amiga_enable_irq(struct parport *p)
142 { 106 {
143 enable_irq(IRQ_AMIGA_CIAA_FLG); 107 enable_irq(IRQ_AMIGA_CIAA_FLG);
144 } 108 }
145 109
146 static void amiga_disable_irq(struct parport *p) 110 static void amiga_disable_irq(struct parport *p)
147 { 111 {
148 disable_irq(IRQ_AMIGA_CIAA_FLG); 112 disable_irq(IRQ_AMIGA_CIAA_FLG);
149 } 113 }
150 114
151 static void amiga_data_forward(struct parport *p) 115 static void amiga_data_forward(struct parport *p)
152 { 116 {
153 DPRINTK(KERN_DEBUG "forward\n"); 117 DPRINTK(KERN_DEBUG "forward\n");
154 ciaa.ddrb = 0xff; /* all pins output */ 118 ciaa.ddrb = 0xff; /* all pins output */
155 mb(); 119 mb();
156 } 120 }
157 121
158 static void amiga_data_reverse(struct parport *p) 122 static void amiga_data_reverse(struct parport *p)
159 { 123 {
160 DPRINTK(KERN_DEBUG "reverse\n"); 124 DPRINTK(KERN_DEBUG "reverse\n");
161 ciaa.ddrb = 0; /* all pins input */ 125 ciaa.ddrb = 0; /* all pins input */
162 mb(); 126 mb();
163 } 127 }
164 128
165 static void amiga_init_state(struct pardevice *dev, struct parport_state *s) 129 static void amiga_init_state(struct pardevice *dev, struct parport_state *s)
166 { 130 {
167 s->u.amiga.data = 0; 131 s->u.amiga.data = 0;
168 s->u.amiga.datadir = 255; 132 s->u.amiga.datadir = 255;
169 s->u.amiga.status = 0; 133 s->u.amiga.status = 0;
170 s->u.amiga.statusdir = 0; 134 s->u.amiga.statusdir = 0;
171 } 135 }
172 136
173 static void amiga_save_state(struct parport *p, struct parport_state *s) 137 static void amiga_save_state(struct parport *p, struct parport_state *s)
174 { 138 {
175 mb(); 139 mb();
176 s->u.amiga.data = ciaa.prb; 140 s->u.amiga.data = ciaa.prb;
177 s->u.amiga.datadir = ciaa.ddrb; 141 s->u.amiga.datadir = ciaa.ddrb;
178 s->u.amiga.status = ciab.pra & 7; 142 s->u.amiga.status = ciab.pra & 7;
179 s->u.amiga.statusdir = ciab.ddra & 7; 143 s->u.amiga.statusdir = ciab.ddra & 7;
180 mb(); 144 mb();
181 } 145 }
182 146
183 static void amiga_restore_state(struct parport *p, struct parport_state *s) 147 static void amiga_restore_state(struct parport *p, struct parport_state *s)
184 { 148 {
185 mb(); 149 mb();
186 ciaa.prb = s->u.amiga.data; 150 ciaa.prb = s->u.amiga.data;
187 ciaa.ddrb = s->u.amiga.datadir; 151 ciaa.ddrb = s->u.amiga.datadir;
188 ciab.pra |= (ciab.pra & 0xf8) | s->u.amiga.status; 152 ciab.pra |= (ciab.pra & 0xf8) | s->u.amiga.status;
189 ciab.ddra |= (ciab.ddra & 0xf8) | s->u.amiga.statusdir; 153 ciab.ddra |= (ciab.ddra & 0xf8) | s->u.amiga.statusdir;
190 mb(); 154 mb();
191 } 155 }
192 156
193 static struct parport_operations pp_amiga_ops = { 157 static struct parport_operations pp_amiga_ops = {
194 .write_data = amiga_write_data, 158 .write_data = amiga_write_data,
195 .read_data = amiga_read_data, 159 .read_data = amiga_read_data,
196 160
197 .write_control = amiga_write_control, 161 .write_control = amiga_write_control,
198 .read_control = amiga_read_control, 162 .read_control = amiga_read_control,
199 .frob_control = amiga_frob_control, 163 .frob_control = amiga_frob_control,
200 164
201 .read_status = amiga_read_status, 165 .read_status = amiga_read_status,
202 166
203 .enable_irq = amiga_enable_irq, 167 .enable_irq = amiga_enable_irq,
204 .disable_irq = amiga_disable_irq, 168 .disable_irq = amiga_disable_irq,
205 169
206 .data_forward = amiga_data_forward, 170 .data_forward = amiga_data_forward,
207 .data_reverse = amiga_data_reverse, 171 .data_reverse = amiga_data_reverse,
208 172
209 .init_state = amiga_init_state, 173 .init_state = amiga_init_state,
210 .save_state = amiga_save_state, 174 .save_state = amiga_save_state,
211 .restore_state = amiga_restore_state, 175 .restore_state = amiga_restore_state,
212 176
213 .epp_write_data = parport_ieee1284_epp_write_data, 177 .epp_write_data = parport_ieee1284_epp_write_data,
214 .epp_read_data = parport_ieee1284_epp_read_data, 178 .epp_read_data = parport_ieee1284_epp_read_data,
215 .epp_write_addr = parport_ieee1284_epp_write_addr, 179 .epp_write_addr = parport_ieee1284_epp_write_addr,
216 .epp_read_addr = parport_ieee1284_epp_read_addr, 180 .epp_read_addr = parport_ieee1284_epp_read_addr,
217 181
218 .ecp_write_data = parport_ieee1284_ecp_write_data, 182 .ecp_write_data = parport_ieee1284_ecp_write_data,
219 .ecp_read_data = parport_ieee1284_ecp_read_data, 183 .ecp_read_data = parport_ieee1284_ecp_read_data,
220 .ecp_write_addr = parport_ieee1284_ecp_write_addr, 184 .ecp_write_addr = parport_ieee1284_ecp_write_addr,
221 185
222 .compat_write_data = parport_ieee1284_write_compat, 186 .compat_write_data = parport_ieee1284_write_compat,
223 .nibble_read_data = parport_ieee1284_read_nibble, 187 .nibble_read_data = parport_ieee1284_read_nibble,
224 .byte_read_data = parport_ieee1284_read_byte, 188 .byte_read_data = parport_ieee1284_read_byte,
225 189
226 .owner = THIS_MODULE, 190 .owner = THIS_MODULE,
227 }; 191 };
228 192
229 /* ----------- Initialisation code --------------------------------- */ 193 /* ----------- Initialisation code --------------------------------- */
230 194
231 static int __init amiga_parallel_probe(struct platform_device *pdev) 195 static int __init amiga_parallel_probe(struct platform_device *pdev)
232 { 196 {
233 struct parport *p; 197 struct parport *p;
234 int err; 198 int err;
235 199
236 ciaa.ddrb = 0xff; 200 ciaa.ddrb = 0xff;
237 ciab.ddra &= 0xf8; 201 ciab.ddra &= 0xf8;
238 mb(); 202 mb();
239 203
240 p = parport_register_port((unsigned long)&ciaa.prb, IRQ_AMIGA_CIAA_FLG, 204 p = parport_register_port((unsigned long)&ciaa.prb, IRQ_AMIGA_CIAA_FLG,
241 PARPORT_DMA_NONE, &pp_amiga_ops); 205 PARPORT_DMA_NONE, &pp_amiga_ops);
242 if (!p) 206 if (!p)
243 return -EBUSY; 207 return -EBUSY;
244 208
245 err = request_irq(IRQ_AMIGA_CIAA_FLG, parport_irq_handler, 0, p->name, 209 err = request_irq(IRQ_AMIGA_CIAA_FLG, parport_irq_handler, 0, p->name,
246 p); 210 p);
247 if (err) 211 if (err)
248 goto out_irq; 212 goto out_irq;
249 213
250 printk(KERN_INFO "%s: Amiga built-in port using irq\n", p->name); 214 printk(KERN_INFO "%s: Amiga built-in port using irq\n", p->name);
251 /* XXX: set operating mode */ 215 /* XXX: set operating mode */
252 parport_announce_port(p); 216 parport_announce_port(p);
253 217
254 platform_set_drvdata(pdev, p); 218 platform_set_drvdata(pdev, p);
255 219
256 return 0; 220 return 0;
257 221
258 out_irq: 222 out_irq:
259 parport_put_port(p); 223 parport_put_port(p);
260 return err; 224 return err;
261 } 225 }
262 226
263 static int __exit amiga_parallel_remove(struct platform_device *pdev) 227 static int __exit amiga_parallel_remove(struct platform_device *pdev)
264 { 228 {
265 struct parport *port = platform_get_drvdata(pdev); 229 struct parport *port = platform_get_drvdata(pdev);
266 230
267 parport_remove_port(port); 231 parport_remove_port(port);
268 if (port->irq != PARPORT_IRQ_NONE) 232 if (port->irq != PARPORT_IRQ_NONE)
269 free_irq(IRQ_AMIGA_CIAA_FLG, port); 233 free_irq(IRQ_AMIGA_CIAA_FLG, port);
270 parport_put_port(port); 234 parport_put_port(port);
271 platform_set_drvdata(pdev, NULL); 235 platform_set_drvdata(pdev, NULL);
272 return 0; 236 return 0;
273 } 237 }
274 238
275 static struct platform_driver amiga_parallel_driver = { 239 static struct platform_driver amiga_parallel_driver = {
276 .remove = __exit_p(amiga_parallel_remove), 240 .remove = __exit_p(amiga_parallel_remove),
277 .driver = { 241 .driver = {
278 .name = "amiga-parallel", 242 .name = "amiga-parallel",
279 .owner = THIS_MODULE, 243 .owner = THIS_MODULE,
280 }, 244 },
281 }; 245 };
282 246
283 static int __init amiga_parallel_init(void) 247 static int __init amiga_parallel_init(void)
284 { 248 {
285 return platform_driver_probe(&amiga_parallel_driver, 249 return platform_driver_probe(&amiga_parallel_driver,
286 amiga_parallel_probe); 250 amiga_parallel_probe);
287 } 251 }
288 252
289 module_init(amiga_parallel_init); 253 module_init(amiga_parallel_init);
290 254
291 static void __exit amiga_parallel_exit(void) 255 static void __exit amiga_parallel_exit(void)
292 { 256 {
293 platform_driver_unregister(&amiga_parallel_driver); 257 platform_driver_unregister(&amiga_parallel_driver);
294 } 258 }
295 259
296 module_exit(amiga_parallel_exit); 260 module_exit(amiga_parallel_exit);
297 261
298 MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>"); 262 MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>");
299 MODULE_DESCRIPTION("Parport Driver for Amiga builtin Port"); 263 MODULE_DESCRIPTION("Parport Driver for Amiga builtin Port");
300 MODULE_SUPPORTED_DEVICE("Amiga builtin Parallel Port"); 264 MODULE_SUPPORTED_DEVICE("Amiga builtin Parallel Port");
301 MODULE_LICENSE("GPL"); 265 MODULE_LICENSE("GPL");
302 MODULE_ALIAS("platform:amiga-parallel"); 266 MODULE_ALIAS("platform:amiga-parallel");
303 267
drivers/parport/parport_atari.c
1 /* Low-level parallel port routines for the Atari builtin port 1 /* Low-level parallel port routines for the Atari builtin port
2 * 2 *
3 * Author: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> 3 * Author: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
4 * 4 *
5 * Based on parport_amiga.c. 5 * Based on parport_amiga.c.
6 * 6 *
7 * The built-in Atari parallel port provides one port at a fixed address 7 * The built-in Atari parallel port provides one port at a fixed address
8 * with 8 output data lines (D0 - D7), 1 output control line (STROBE) 8 * with 8 output data lines (D0 - D7), 1 output control line (STROBE)
9 * and 1 input status line (BUSY) able to cause an interrupt. 9 * and 1 input status line (BUSY) able to cause an interrupt.
10 */ 10 */
11 11
12 #include <linux/module.h> 12 #include <linux/module.h>
13 #include <linux/init.h> 13 #include <linux/init.h>
14 #include <linux/parport.h> 14 #include <linux/parport.h>
15 #include <linux/interrupt.h> 15 #include <linux/interrupt.h>
16 #include <asm/setup.h> 16 #include <asm/setup.h>
17 #include <asm/atarihw.h> 17 #include <asm/atarihw.h>
18 #include <asm/irq.h> 18 #include <asm/irq.h>
19 #include <asm/atariints.h> 19 #include <asm/atariints.h>
20 20
21 static struct parport *this_port = NULL; 21 static struct parport *this_port = NULL;
22 22
23 static unsigned char 23 static unsigned char
24 parport_atari_read_data(struct parport *p) 24 parport_atari_read_data(struct parport *p)
25 { 25 {
26 unsigned long flags; 26 unsigned long flags;
27 unsigned char data; 27 unsigned char data;
28 28
29 local_irq_save(flags); 29 local_irq_save(flags);
30 sound_ym.rd_data_reg_sel = 15; 30 sound_ym.rd_data_reg_sel = 15;
31 data = sound_ym.rd_data_reg_sel; 31 data = sound_ym.rd_data_reg_sel;
32 local_irq_restore(flags); 32 local_irq_restore(flags);
33 return data; 33 return data;
34 } 34 }
35 35
36 static void 36 static void
37 parport_atari_write_data(struct parport *p, unsigned char data) 37 parport_atari_write_data(struct parport *p, unsigned char data)
38 { 38 {
39 unsigned long flags; 39 unsigned long flags;
40 40
41 local_irq_save(flags); 41 local_irq_save(flags);
42 sound_ym.rd_data_reg_sel = 15; 42 sound_ym.rd_data_reg_sel = 15;
43 sound_ym.wd_data = data; 43 sound_ym.wd_data = data;
44 local_irq_restore(flags); 44 local_irq_restore(flags);
45 } 45 }
46 46
47 static unsigned char 47 static unsigned char
48 parport_atari_read_control(struct parport *p) 48 parport_atari_read_control(struct parport *p)
49 { 49 {
50 unsigned long flags; 50 unsigned long flags;
51 unsigned char control = 0; 51 unsigned char control = 0;
52 52
53 local_irq_save(flags); 53 local_irq_save(flags);
54 sound_ym.rd_data_reg_sel = 14; 54 sound_ym.rd_data_reg_sel = 14;
55 if (!(sound_ym.rd_data_reg_sel & (1 << 5))) 55 if (!(sound_ym.rd_data_reg_sel & (1 << 5)))
56 control = PARPORT_CONTROL_STROBE; 56 control = PARPORT_CONTROL_STROBE;
57 local_irq_restore(flags); 57 local_irq_restore(flags);
58 return control; 58 return control;
59 } 59 }
60 60
61 static void 61 static void
62 parport_atari_write_control(struct parport *p, unsigned char control) 62 parport_atari_write_control(struct parport *p, unsigned char control)
63 { 63 {
64 unsigned long flags; 64 unsigned long flags;
65 65
66 local_irq_save(flags); 66 local_irq_save(flags);
67 sound_ym.rd_data_reg_sel = 14; 67 sound_ym.rd_data_reg_sel = 14;
68 if (control & PARPORT_CONTROL_STROBE) 68 if (control & PARPORT_CONTROL_STROBE)
69 sound_ym.wd_data = sound_ym.rd_data_reg_sel & ~(1 << 5); 69 sound_ym.wd_data = sound_ym.rd_data_reg_sel & ~(1 << 5);
70 else 70 else
71 sound_ym.wd_data = sound_ym.rd_data_reg_sel | (1 << 5); 71 sound_ym.wd_data = sound_ym.rd_data_reg_sel | (1 << 5);
72 local_irq_restore(flags); 72 local_irq_restore(flags);
73 } 73 }
74 74
75 static unsigned char 75 static unsigned char
76 parport_atari_frob_control(struct parport *p, unsigned char mask, 76 parport_atari_frob_control(struct parport *p, unsigned char mask,
77 unsigned char val) 77 unsigned char val)
78 { 78 {
79 unsigned char old = parport_atari_read_control(p); 79 unsigned char old = parport_atari_read_control(p);
80 parport_atari_write_control(p, (old & ~mask) ^ val); 80 parport_atari_write_control(p, (old & ~mask) ^ val);
81 return old; 81 return old;
82 } 82 }
83 83
84 static unsigned char 84 static unsigned char
85 parport_atari_read_status(struct parport *p) 85 parport_atari_read_status(struct parport *p)
86 { 86 {
87 return ((st_mfp.par_dt_reg & 1 ? 0 : PARPORT_STATUS_BUSY) | 87 return ((st_mfp.par_dt_reg & 1 ? 0 : PARPORT_STATUS_BUSY) |
88 PARPORT_STATUS_SELECT | PARPORT_STATUS_ERROR); 88 PARPORT_STATUS_SELECT | PARPORT_STATUS_ERROR);
89 } 89 }
90 90
91 static void 91 static void
92 parport_atari_init_state(struct pardevice *d, struct parport_state *s) 92 parport_atari_init_state(struct pardevice *d, struct parport_state *s)
93 { 93 {
94 } 94 }
95 95
96 static void 96 static void
97 parport_atari_save_state(struct parport *p, struct parport_state *s) 97 parport_atari_save_state(struct parport *p, struct parport_state *s)
98 { 98 {
99 } 99 }
100 100
101 static void 101 static void
102 parport_atari_restore_state(struct parport *p, struct parport_state *s) 102 parport_atari_restore_state(struct parport *p, struct parport_state *s)
103 { 103 {
104 } 104 }
105 105
106 static void 106 static void
107 parport_atari_enable_irq(struct parport *p) 107 parport_atari_enable_irq(struct parport *p)
108 { 108 {
109 enable_irq(IRQ_MFP_BUSY); 109 enable_irq(IRQ_MFP_BUSY);
110 } 110 }
111 111
112 static void 112 static void
113 parport_atari_disable_irq(struct parport *p) 113 parport_atari_disable_irq(struct parport *p)
114 { 114 {
115 disable_irq(IRQ_MFP_BUSY); 115 disable_irq(IRQ_MFP_BUSY);
116 } 116 }
117 117
118 static void 118 static void
119 parport_atari_data_forward(struct parport *p) 119 parport_atari_data_forward(struct parport *p)
120 { 120 {
121 unsigned long flags; 121 unsigned long flags;
122 122
123 local_irq_save(flags); 123 local_irq_save(flags);
124 /* Soundchip port B as output. */ 124 /* Soundchip port B as output. */
125 sound_ym.rd_data_reg_sel = 7; 125 sound_ym.rd_data_reg_sel = 7;
126 sound_ym.wd_data = sound_ym.rd_data_reg_sel | 0x40; 126 sound_ym.wd_data = sound_ym.rd_data_reg_sel | 0x40;
127 local_irq_restore(flags); 127 local_irq_restore(flags);
128 } 128 }
129 129
130 static void 130 static void
131 parport_atari_data_reverse(struct parport *p) 131 parport_atari_data_reverse(struct parport *p)
132 { 132 {
133 #if 0 /* too dangerous, can kill sound chip */
134 unsigned long flags;
135
136 local_irq_save(flags);
137 /* Soundchip port B as input. */
138 sound_ym.rd_data_reg_sel = 7;
139 sound_ym.wd_data = sound_ym.rd_data_reg_sel & ~0x40;
140 local_irq_restore(flags);
141 #endif
142 } 133 }
143 134
144 static struct parport_operations parport_atari_ops = { 135 static struct parport_operations parport_atari_ops = {
145 .write_data = parport_atari_write_data, 136 .write_data = parport_atari_write_data,
146 .read_data = parport_atari_read_data, 137 .read_data = parport_atari_read_data,
147 138
148 .write_control = parport_atari_write_control, 139 .write_control = parport_atari_write_control,
149 .read_control = parport_atari_read_control, 140 .read_control = parport_atari_read_control,
150 .frob_control = parport_atari_frob_control, 141 .frob_control = parport_atari_frob_control,
151 142
152 .read_status = parport_atari_read_status, 143 .read_status = parport_atari_read_status,
153 144
154 .enable_irq = parport_atari_enable_irq, 145 .enable_irq = parport_atari_enable_irq,
155 .disable_irq = parport_atari_disable_irq, 146 .disable_irq = parport_atari_disable_irq,
156 147
157 .data_forward = parport_atari_data_forward, 148 .data_forward = parport_atari_data_forward,
158 .data_reverse = parport_atari_data_reverse, 149 .data_reverse = parport_atari_data_reverse,
159 150
160 .init_state = parport_atari_init_state, 151 .init_state = parport_atari_init_state,
161 .save_state = parport_atari_save_state, 152 .save_state = parport_atari_save_state,
162 .restore_state = parport_atari_restore_state, 153 .restore_state = parport_atari_restore_state,
163 154
164 .epp_write_data = parport_ieee1284_epp_write_data, 155 .epp_write_data = parport_ieee1284_epp_write_data,
165 .epp_read_data = parport_ieee1284_epp_read_data, 156 .epp_read_data = parport_ieee1284_epp_read_data,
166 .epp_write_addr = parport_ieee1284_epp_write_addr, 157 .epp_write_addr = parport_ieee1284_epp_write_addr,
167 .epp_read_addr = parport_ieee1284_epp_read_addr, 158 .epp_read_addr = parport_ieee1284_epp_read_addr,
168 159
169 .ecp_write_data = parport_ieee1284_ecp_write_data, 160 .ecp_write_data = parport_ieee1284_ecp_write_data,
170 .ecp_read_data = parport_ieee1284_ecp_read_data, 161 .ecp_read_data = parport_ieee1284_ecp_read_data,
171 .ecp_write_addr = parport_ieee1284_ecp_write_addr, 162 .ecp_write_addr = parport_ieee1284_ecp_write_addr,
172 163
173 .compat_write_data = parport_ieee1284_write_compat, 164 .compat_write_data = parport_ieee1284_write_compat,
174 .nibble_read_data = parport_ieee1284_read_nibble, 165 .nibble_read_data = parport_ieee1284_read_nibble,
175 .byte_read_data = parport_ieee1284_read_byte, 166 .byte_read_data = parport_ieee1284_read_byte,
176 167
177 .owner = THIS_MODULE, 168 .owner = THIS_MODULE,
178 }; 169 };
179 170
180 171
181 static int __init parport_atari_init(void) 172 static int __init parport_atari_init(void)
182 { 173 {
183 struct parport *p; 174 struct parport *p;
184 unsigned long flags; 175 unsigned long flags;
185 176
186 if (MACH_IS_ATARI) { 177 if (MACH_IS_ATARI) {
187 local_irq_save(flags); 178 local_irq_save(flags);
188 /* Soundchip port A/B as output. */ 179 /* Soundchip port A/B as output. */
189 sound_ym.rd_data_reg_sel = 7; 180 sound_ym.rd_data_reg_sel = 7;
190 sound_ym.wd_data = (sound_ym.rd_data_reg_sel & 0x3f) | 0xc0; 181 sound_ym.wd_data = (sound_ym.rd_data_reg_sel & 0x3f) | 0xc0;
191 /* STROBE high. */ 182 /* STROBE high. */
192 sound_ym.rd_data_reg_sel = 14; 183 sound_ym.rd_data_reg_sel = 14;
193 sound_ym.wd_data = sound_ym.rd_data_reg_sel | (1 << 5); 184 sound_ym.wd_data = sound_ym.rd_data_reg_sel | (1 << 5);
194 local_irq_restore(flags); 185 local_irq_restore(flags);
195 /* MFP port I0 as input. */ 186 /* MFP port I0 as input. */
196 st_mfp.data_dir &= ~1; 187 st_mfp.data_dir &= ~1;
197 /* MFP port I0 interrupt on high->low edge. */ 188 /* MFP port I0 interrupt on high->low edge. */
198 st_mfp.active_edge &= ~1; 189 st_mfp.active_edge &= ~1;
199 p = parport_register_port((unsigned long)&sound_ym.wd_data, 190 p = parport_register_port((unsigned long)&sound_ym.wd_data,
200 IRQ_MFP_BUSY, PARPORT_DMA_NONE, 191 IRQ_MFP_BUSY, PARPORT_DMA_NONE,
201 &parport_atari_ops); 192 &parport_atari_ops);
202 if (!p) 193 if (!p)
203 return -ENODEV; 194 return -ENODEV;
204 if (request_irq(IRQ_MFP_BUSY, parport_irq_handler, 195 if (request_irq(IRQ_MFP_BUSY, parport_irq_handler,
205 IRQ_TYPE_SLOW, p->name, p)) { 196 IRQ_TYPE_SLOW, p->name, p)) {
206 parport_put_port (p); 197 parport_put_port (p);
207 return -ENODEV; 198 return -ENODEV;
208 } 199 }
209 200
210 this_port = p; 201 this_port = p;
211 printk(KERN_INFO "%s: Atari built-in port using irq\n", p->name); 202 printk(KERN_INFO "%s: Atari built-in port using irq\n", p->name);
212 parport_announce_port (p); 203 parport_announce_port (p);
213 204
214 return 0; 205 return 0;
215 } 206 }
216 return -ENODEV; 207 return -ENODEV;
217 } 208 }
218 209
219 static void __exit parport_atari_exit(void) 210 static void __exit parport_atari_exit(void)
220 { 211 {
221 parport_remove_port(this_port); 212 parport_remove_port(this_port);
222 if (this_port->irq != PARPORT_IRQ_NONE) 213 if (this_port->irq != PARPORT_IRQ_NONE)
223 free_irq(IRQ_MFP_BUSY, this_port); 214 free_irq(IRQ_MFP_BUSY, this_port);
224 parport_put_port(this_port); 215 parport_put_port(this_port);
225 } 216 }
226 217
227 MODULE_AUTHOR("Andreas Schwab"); 218 MODULE_AUTHOR("Andreas Schwab");
228 MODULE_DESCRIPTION("Parport Driver for Atari builtin Port"); 219 MODULE_DESCRIPTION("Parport Driver for Atari builtin Port");
229 MODULE_SUPPORTED_DEVICE("Atari builtin Parallel Port"); 220 MODULE_SUPPORTED_DEVICE("Atari builtin Parallel Port");
230 MODULE_LICENSE("GPL"); 221 MODULE_LICENSE("GPL");
231 222
232 module_init(parport_atari_init) 223 module_init(parport_atari_init)
233 module_exit(parport_atari_exit) 224 module_exit(parport_atari_exit)
234 225
drivers/parport/parport_mfc3.c
1 /* Low-level parallel port routines for the Multiface 3 card 1 /* Low-level parallel port routines for the Multiface 3 card
2 * 2 *
3 * Author: Joerg Dorchain <joerg@dorchain.net> 3 * Author: Joerg Dorchain <joerg@dorchain.net>
4 * 4 *
5 * (C) The elitist m68k Users(TM) 5 * (C) The elitist m68k Users(TM)
6 * 6 *
7 * based on the existing parport_amiga and lp_mfc 7 * based on the existing parport_amiga and lp_mfc
8 * 8 *
9 * 9 *
10 * From the MFC3 documentation: 10 * From the MFC3 documentation:
11 * 11 *
12 * Miscellaneous PIA Details 12 * Miscellaneous PIA Details
13 * ------------------------- 13 * -------------------------
14 * 14 *
15 * The two open-drain interrupt outputs /IRQA and /IRQB are routed to 15 * The two open-drain interrupt outputs /IRQA and /IRQB are routed to
16 * /INT2 of the Z2 bus. 16 * /INT2 of the Z2 bus.
17 * 17 *
18 * The CPU data bus of the PIA (D0-D7) is connected to D8-D15 on the Z2 18 * The CPU data bus of the PIA (D0-D7) is connected to D8-D15 on the Z2
19 * bus. This means that any PIA registers are accessed at even addresses. 19 * bus. This means that any PIA registers are accessed at even addresses.
20 * 20 *
21 * Centronics Pin Connections for the PIA 21 * Centronics Pin Connections for the PIA
22 * -------------------------------------- 22 * --------------------------------------
23 * 23 *
24 * The following table shows the connections between the PIA and the 24 * The following table shows the connections between the PIA and the
25 * Centronics interface connector. These connections implement a single, but 25 * Centronics interface connector. These connections implement a single, but
26 * very complete, Centronics type interface. The Pin column gives the pin 26 * very complete, Centronics type interface. The Pin column gives the pin
27 * numbers of the PIA. The Centronics pin numbers can be found in the section 27 * numbers of the PIA. The Centronics pin numbers can be found in the section
28 * "Parallel Connectors". 28 * "Parallel Connectors".
29 * 29 *
30 * 30 *
31 * Pin | PIA | Dir | Centronics Names 31 * Pin | PIA | Dir | Centronics Names
32 * -------+-----+-----+--------------------------------------------------------- 32 * -------+-----+-----+---------------------------------------------------------
33 * 19 | CB2 | --> | /STROBE (aka /DRDY) 33 * 19 | CB2 | --> | /STROBE (aka /DRDY)
34 * 10-17 | PBx | <-> | DATA0 - DATA7 34 * 10-17 | PBx | <-> | DATA0 - DATA7
35 * 18 | CB1 | <-- | /ACK 35 * 18 | CB1 | <-- | /ACK
36 * 40 | CA1 | <-- | BUSY 36 * 40 | CA1 | <-- | BUSY
37 * 3 | PA1 | <-- | PAPER-OUT (aka POUT) 37 * 3 | PA1 | <-- | PAPER-OUT (aka POUT)
38 * 4 | PA2 | <-- | SELECTED (aka SEL) 38 * 4 | PA2 | <-- | SELECTED (aka SEL)
39 * 9 | PA7 | --> | /INIT (aka /RESET or /INPUT-PRIME) 39 * 9 | PA7 | --> | /INIT (aka /RESET or /INPUT-PRIME)
40 * 6 | PA4 | <-- | /ERROR (aka /FAULT) 40 * 6 | PA4 | <-- | /ERROR (aka /FAULT)
41 * 7 | PA5 | --> | DIR (aka /SELECT-IN) 41 * 7 | PA5 | --> | DIR (aka /SELECT-IN)
42 * 8 | PA6 | --> | /AUTO-FEED-XT 42 * 8 | PA6 | --> | /AUTO-FEED-XT
43 * 39 | CA2 | --> | open 43 * 39 | CA2 | --> | open
44 * 5 | PA3 | <-- | /ACK (same as CB1!) 44 * 5 | PA3 | <-- | /ACK (same as CB1!)
45 * 2 | PA0 | <-- | BUSY (same as CA1!) 45 * 2 | PA0 | <-- | BUSY (same as CA1!)
46 * -------+-----+-----+--------------------------------------------------------- 46 * -------+-----+-----+---------------------------------------------------------
47 * 47 *
48 * Should be enough to understand some of the driver. 48 * Should be enough to understand some of the driver.
49 * 49 *
50 * Per convention for normal use the port registers are visible. 50 * Per convention for normal use the port registers are visible.
51 * If you need the data direction registers, restore the value in the 51 * If you need the data direction registers, restore the value in the
52 * control register. 52 * control register.
53 */ 53 */
54 54
55 #include "multiface.h" 55 #include "multiface.h"
56 #include <linux/module.h> 56 #include <linux/module.h>
57 #include <linux/init.h> 57 #include <linux/init.h>
58 #include <linux/parport.h> 58 #include <linux/parport.h>
59 #include <linux/delay.h> 59 #include <linux/delay.h>
60 #include <linux/mc6821.h> 60 #include <linux/mc6821.h>
61 #include <linux/zorro.h> 61 #include <linux/zorro.h>
62 #include <linux/interrupt.h> 62 #include <linux/interrupt.h>
63 #include <asm/setup.h> 63 #include <asm/setup.h>
64 #include <asm/amigahw.h> 64 #include <asm/amigahw.h>
65 #include <asm/irq.h> 65 #include <asm/irq.h>
66 #include <asm/amigaints.h> 66 #include <asm/amigaints.h>
67 67
68 /* Maximum Number of Cards supported */ 68 /* Maximum Number of Cards supported */
69 #define MAX_MFC 5 69 #define MAX_MFC 5
70 70
71 #undef DEBUG 71 #undef DEBUG
72 #ifdef DEBUG 72 #ifdef DEBUG
73 #define DPRINTK printk 73 #define DPRINTK printk
74 #else 74 #else
75 static inline int DPRINTK(void *nothing, ...) {return 0;} 75 static inline int DPRINTK(void *nothing, ...) {return 0;}
76 #endif 76 #endif
77 77
78 static struct parport *this_port[MAX_MFC] = {NULL, }; 78 static struct parport *this_port[MAX_MFC] = {NULL, };
79 static volatile int dummy; /* for trigger readds */ 79 static volatile int dummy; /* for trigger readds */
80 80
81 #define pia(dev) ((struct pia *)(dev->base)) 81 #define pia(dev) ((struct pia *)(dev->base))
82 static struct parport_operations pp_mfc3_ops; 82 static struct parport_operations pp_mfc3_ops;
83 83
84 static void mfc3_write_data(struct parport *p, unsigned char data) 84 static void mfc3_write_data(struct parport *p, unsigned char data)
85 { 85 {
86 DPRINTK(KERN_DEBUG "write_data %c\n",data); 86 DPRINTK(KERN_DEBUG "write_data %c\n",data);
87 87
88 dummy = pia(p)->pprb; /* clears irq bit */ 88 dummy = pia(p)->pprb; /* clears irq bit */
89 /* Triggers also /STROBE.*/ 89 /* Triggers also /STROBE.*/
90 pia(p)->pprb = data; 90 pia(p)->pprb = data;
91 } 91 }
92 92
93 static unsigned char mfc3_read_data(struct parport *p) 93 static unsigned char mfc3_read_data(struct parport *p)
94 { 94 {
95 /* clears interrupt bit. Triggers also /STROBE. */ 95 /* clears interrupt bit. Triggers also /STROBE. */
96 return pia(p)->pprb; 96 return pia(p)->pprb;
97 } 97 }
98 98
99 static unsigned char control_pc_to_mfc3(unsigned char control) 99 static unsigned char control_pc_to_mfc3(unsigned char control)
100 { 100 {
101 unsigned char ret = 32|64; 101 unsigned char ret = 32|64;
102 102
103 if (control & PARPORT_CONTROL_SELECT) /* XXX: What is SELECP? */ 103 if (control & PARPORT_CONTROL_SELECT) /* XXX: What is SELECP? */
104 ret &= ~32; /* /SELECT_IN */ 104 ret &= ~32; /* /SELECT_IN */
105 if (control & PARPORT_CONTROL_INIT) /* INITP */ 105 if (control & PARPORT_CONTROL_INIT) /* INITP */
106 ret |= 128; 106 ret |= 128;
107 if (control & PARPORT_CONTROL_AUTOFD) /* AUTOLF */ 107 if (control & PARPORT_CONTROL_AUTOFD) /* AUTOLF */
108 ret &= ~64; 108 ret &= ~64;
109 if (control & PARPORT_CONTROL_STROBE) /* Strobe */ 109 if (control & PARPORT_CONTROL_STROBE) /* Strobe */
110 /* Handled directly by hardware */; 110 /* Handled directly by hardware */;
111 return ret; 111 return ret;
112 } 112 }
113 113
114 static unsigned char control_mfc3_to_pc(unsigned char control) 114 static unsigned char control_mfc3_to_pc(unsigned char control)
115 { 115 {
116 unsigned char ret = PARPORT_CONTROL_STROBE 116 unsigned char ret = PARPORT_CONTROL_STROBE
117 | PARPORT_CONTROL_AUTOFD | PARPORT_CONTROL_SELECT; 117 | PARPORT_CONTROL_AUTOFD | PARPORT_CONTROL_SELECT;
118 118
119 if (control & 128) /* /INITP */ 119 if (control & 128) /* /INITP */
120 ret |= PARPORT_CONTROL_INIT; 120 ret |= PARPORT_CONTROL_INIT;
121 if (control & 64) /* /AUTOLF */ 121 if (control & 64) /* /AUTOLF */
122 ret &= ~PARPORT_CONTROL_AUTOFD; 122 ret &= ~PARPORT_CONTROL_AUTOFD;
123 if (control & 32) /* /SELECT_IN */ 123 if (control & 32) /* /SELECT_IN */
124 ret &= ~PARPORT_CONTROL_SELECT; 124 ret &= ~PARPORT_CONTROL_SELECT;
125 return ret; 125 return ret;
126 } 126 }
127 127
128 static void mfc3_write_control(struct parport *p, unsigned char control) 128 static void mfc3_write_control(struct parport *p, unsigned char control)
129 { 129 {
130 DPRINTK(KERN_DEBUG "write_control %02x\n",control); 130 DPRINTK(KERN_DEBUG "write_control %02x\n",control);
131 pia(p)->ppra = (pia(p)->ppra & 0x1f) | control_pc_to_mfc3(control); 131 pia(p)->ppra = (pia(p)->ppra & 0x1f) | control_pc_to_mfc3(control);
132 } 132 }
133 133
134 static unsigned char mfc3_read_control( struct parport *p) 134 static unsigned char mfc3_read_control( struct parport *p)
135 { 135 {
136 DPRINTK(KERN_DEBUG "read_control \n"); 136 DPRINTK(KERN_DEBUG "read_control \n");
137 return control_mfc3_to_pc(pia(p)->ppra & 0xe0); 137 return control_mfc3_to_pc(pia(p)->ppra & 0xe0);
138 } 138 }
139 139
140 static unsigned char mfc3_frob_control( struct parport *p, unsigned char mask, unsigned char val) 140 static unsigned char mfc3_frob_control( struct parport *p, unsigned char mask, unsigned char val)
141 { 141 {
142 unsigned char old; 142 unsigned char old;
143 143
144 DPRINTK(KERN_DEBUG "frob_control mask %02x, value %02x\n",mask,val); 144 DPRINTK(KERN_DEBUG "frob_control mask %02x, value %02x\n",mask,val);
145 old = mfc3_read_control(p); 145 old = mfc3_read_control(p);
146 mfc3_write_control(p, (old & ~mask) ^ val); 146 mfc3_write_control(p, (old & ~mask) ^ val);
147 return old; 147 return old;
148 } 148 }
149 149
150 #if 0 /* currently unused */
151 static unsigned char status_pc_to_mfc3(unsigned char status)
152 {
153 unsigned char ret = 1;
154
155 if (status & PARPORT_STATUS_BUSY) /* Busy */
156 ret &= ~1;
157 if (status & PARPORT_STATUS_ACK) /* Ack */
158 ret |= 8;
159 if (status & PARPORT_STATUS_PAPEROUT) /* PaperOut */
160 ret |= 2;
161 if (status & PARPORT_STATUS_SELECT) /* select */
162 ret |= 4;
163 if (status & PARPORT_STATUS_ERROR) /* error */
164 ret |= 16;
165 return ret;
166 }
167 #endif
168
169 static unsigned char status_mfc3_to_pc(unsigned char status) 150 static unsigned char status_mfc3_to_pc(unsigned char status)
170 { 151 {
171 unsigned char ret = PARPORT_STATUS_BUSY; 152 unsigned char ret = PARPORT_STATUS_BUSY;
172 153
173 if (status & 1) /* Busy */ 154 if (status & 1) /* Busy */
174 ret &= ~PARPORT_STATUS_BUSY; 155 ret &= ~PARPORT_STATUS_BUSY;
175 if (status & 2) /* PaperOut */ 156 if (status & 2) /* PaperOut */
176 ret |= PARPORT_STATUS_PAPEROUT; 157 ret |= PARPORT_STATUS_PAPEROUT;
177 if (status & 4) /* Selected */ 158 if (status & 4) /* Selected */
178 ret |= PARPORT_STATUS_SELECT; 159 ret |= PARPORT_STATUS_SELECT;
179 if (status & 8) /* Ack */ 160 if (status & 8) /* Ack */
180 ret |= PARPORT_STATUS_ACK; 161 ret |= PARPORT_STATUS_ACK;
181 if (status & 16) /* /ERROR */ 162 if (status & 16) /* /ERROR */
182 ret |= PARPORT_STATUS_ERROR; 163 ret |= PARPORT_STATUS_ERROR;
183 164
184 return ret; 165 return ret;
185 } 166 }
186 167
187 #if 0 /* currently unused */
188 static void mfc3_write_status( struct parport *p, unsigned char status)
189 {
190 DPRINTK(KERN_DEBUG "write_status %02x\n",status);
191 pia(p)->ppra = (pia(p)->ppra & 0xe0) | status_pc_to_mfc3(status);
192 }
193 #endif
194
195 static unsigned char mfc3_read_status(struct parport *p) 168 static unsigned char mfc3_read_status(struct parport *p)
196 { 169 {
197 unsigned char status; 170 unsigned char status;
198 171
199 status = status_mfc3_to_pc(pia(p)->ppra & 0x1f); 172 status = status_mfc3_to_pc(pia(p)->ppra & 0x1f);
200 DPRINTK(KERN_DEBUG "read_status %02x\n", status); 173 DPRINTK(KERN_DEBUG "read_status %02x\n", status);
201 return status; 174 return status;
202 } 175 }
203
204 #if 0 /* currently unused */
205 static void mfc3_change_mode( struct parport *p, int m)
206 {
207 /* XXX: This port only has one mode, and I am
208 not sure about the corresponding PC-style mode*/
209 }
210 #endif
211 176
212 static int use_cnt = 0; 177 static int use_cnt = 0;
213 178
214 static irqreturn_t mfc3_interrupt(int irq, void *dev_id) 179 static irqreturn_t mfc3_interrupt(int irq, void *dev_id)
215 { 180 {
216 int i; 181 int i;
217 182
218 for( i = 0; i < MAX_MFC; i++) 183 for( i = 0; i < MAX_MFC; i++)
219 if (this_port[i] != NULL) 184 if (this_port[i] != NULL)
220 if (pia(this_port[i])->crb & 128) { /* Board caused interrupt */ 185 if (pia(this_port[i])->crb & 128) { /* Board caused interrupt */
221 dummy = pia(this_port[i])->pprb; /* clear irq bit */ 186 dummy = pia(this_port[i])->pprb; /* clear irq bit */
222 parport_generic_irq(this_port[i]); 187 parport_generic_irq(this_port[i]);
223 } 188 }
224 return IRQ_HANDLED; 189 return IRQ_HANDLED;
225 } 190 }
226 191
227 static void mfc3_enable_irq(struct parport *p) 192 static void mfc3_enable_irq(struct parport *p)
228 { 193 {
229 pia(p)->crb |= PIA_C1_ENABLE_IRQ; 194 pia(p)->crb |= PIA_C1_ENABLE_IRQ;
230 } 195 }
231 196
232 static void mfc3_disable_irq(struct parport *p) 197 static void mfc3_disable_irq(struct parport *p)
233 { 198 {
234 pia(p)->crb &= ~PIA_C1_ENABLE_IRQ; 199 pia(p)->crb &= ~PIA_C1_ENABLE_IRQ;
235 } 200 }
236 201
237 static void mfc3_data_forward(struct parport *p) 202 static void mfc3_data_forward(struct parport *p)
238 { 203 {
239 DPRINTK(KERN_DEBUG "forward\n"); 204 DPRINTK(KERN_DEBUG "forward\n");
240 pia(p)->crb &= ~PIA_DDR; /* make data direction register visible */ 205 pia(p)->crb &= ~PIA_DDR; /* make data direction register visible */
241 pia(p)->pddrb = 255; /* all pins output */ 206 pia(p)->pddrb = 255; /* all pins output */
242 pia(p)->crb |= PIA_DDR; /* make data register visible - default */ 207 pia(p)->crb |= PIA_DDR; /* make data register visible - default */
243 } 208 }
244 209
245 static void mfc3_data_reverse(struct parport *p) 210 static void mfc3_data_reverse(struct parport *p)
246 { 211 {
247 DPRINTK(KERN_DEBUG "reverse\n"); 212 DPRINTK(KERN_DEBUG "reverse\n");
248 pia(p)->crb &= ~PIA_DDR; /* make data direction register visible */ 213 pia(p)->crb &= ~PIA_DDR; /* make data direction register visible */
249 pia(p)->pddrb = 0; /* all pins input */ 214 pia(p)->pddrb = 0; /* all pins input */
250 pia(p)->crb |= PIA_DDR; /* make data register visible - default */ 215 pia(p)->crb |= PIA_DDR; /* make data register visible - default */
251 } 216 }
252 217
253 static void mfc3_init_state(struct pardevice *dev, struct parport_state *s) 218 static void mfc3_init_state(struct pardevice *dev, struct parport_state *s)
254 { 219 {
255 s->u.amiga.data = 0; 220 s->u.amiga.data = 0;
256 s->u.amiga.datadir = 255; 221 s->u.amiga.datadir = 255;
257 s->u.amiga.status = 0; 222 s->u.amiga.status = 0;
258 s->u.amiga.statusdir = 0xe0; 223 s->u.amiga.statusdir = 0xe0;
259 } 224 }
260 225
261 static void mfc3_save_state(struct parport *p, struct parport_state *s) 226 static void mfc3_save_state(struct parport *p, struct parport_state *s)
262 { 227 {
263 s->u.amiga.data = pia(p)->pprb; 228 s->u.amiga.data = pia(p)->pprb;
264 pia(p)->crb &= ~PIA_DDR; 229 pia(p)->crb &= ~PIA_DDR;
265 s->u.amiga.datadir = pia(p)->pddrb; 230 s->u.amiga.datadir = pia(p)->pddrb;
266 pia(p)->crb |= PIA_DDR; 231 pia(p)->crb |= PIA_DDR;
267 s->u.amiga.status = pia(p)->ppra; 232 s->u.amiga.status = pia(p)->ppra;
268 pia(p)->cra &= ~PIA_DDR; 233 pia(p)->cra &= ~PIA_DDR;
269 s->u.amiga.statusdir = pia(p)->pddrb; 234 s->u.amiga.statusdir = pia(p)->pddrb;
270 pia(p)->cra |= PIA_DDR; 235 pia(p)->cra |= PIA_DDR;
271 } 236 }
272 237
273 static void mfc3_restore_state(struct parport *p, struct parport_state *s) 238 static void mfc3_restore_state(struct parport *p, struct parport_state *s)
274 { 239 {
275 pia(p)->pprb = s->u.amiga.data; 240 pia(p)->pprb = s->u.amiga.data;
276 pia(p)->crb &= ~PIA_DDR; 241 pia(p)->crb &= ~PIA_DDR;
277 pia(p)->pddrb = s->u.amiga.datadir; 242 pia(p)->pddrb = s->u.amiga.datadir;
278 pia(p)->crb |= PIA_DDR; 243 pia(p)->crb |= PIA_DDR;
279 pia(p)->ppra = s->u.amiga.status; 244 pia(p)->ppra = s->u.amiga.status;
280 pia(p)->cra &= ~PIA_DDR; 245 pia(p)->cra &= ~PIA_DDR;
281 pia(p)->pddrb = s->u.amiga.statusdir; 246 pia(p)->pddrb = s->u.amiga.statusdir;
282 pia(p)->cra |= PIA_DDR; 247 pia(p)->cra |= PIA_DDR;
283 } 248 }
284 249
285 static struct parport_operations pp_mfc3_ops = { 250 static struct parport_operations pp_mfc3_ops = {
286 .write_data = mfc3_write_data, 251 .write_data = mfc3_write_data,
287 .read_data = mfc3_read_data, 252 .read_data = mfc3_read_data,
288 253
289 .write_control = mfc3_write_control, 254 .write_control = mfc3_write_control,
290 .read_control = mfc3_read_control, 255 .read_control = mfc3_read_control,
291 .frob_control = mfc3_frob_control, 256 .frob_control = mfc3_frob_control,
292 257
293 .read_status = mfc3_read_status, 258 .read_status = mfc3_read_status,
294 259
295 .enable_irq = mfc3_enable_irq, 260 .enable_irq = mfc3_enable_irq,
296 .disable_irq = mfc3_disable_irq, 261 .disable_irq = mfc3_disable_irq,
297 262
298 .data_forward = mfc3_data_forward, 263 .data_forward = mfc3_data_forward,
299 .data_reverse = mfc3_data_reverse, 264 .data_reverse = mfc3_data_reverse,
300 265
301 .init_state = mfc3_init_state, 266 .init_state = mfc3_init_state,
302 .save_state = mfc3_save_state, 267 .save_state = mfc3_save_state,
303 .restore_state = mfc3_restore_state, 268 .restore_state = mfc3_restore_state,
304 269
305 .epp_write_data = parport_ieee1284_epp_write_data, 270 .epp_write_data = parport_ieee1284_epp_write_data,
306 .epp_read_data = parport_ieee1284_epp_read_data, 271 .epp_read_data = parport_ieee1284_epp_read_data,
307 .epp_write_addr = parport_ieee1284_epp_write_addr, 272 .epp_write_addr = parport_ieee1284_epp_write_addr,
308 .epp_read_addr = parport_ieee1284_epp_read_addr, 273 .epp_read_addr = parport_ieee1284_epp_read_addr,
309 274
310 .ecp_write_data = parport_ieee1284_ecp_write_data, 275 .ecp_write_data = parport_ieee1284_ecp_write_data,
311 .ecp_read_data = parport_ieee1284_ecp_read_data, 276 .ecp_read_data = parport_ieee1284_ecp_read_data,
312 .ecp_write_addr = parport_ieee1284_ecp_write_addr, 277 .ecp_write_addr = parport_ieee1284_ecp_write_addr,
313 278
314 .compat_write_data = parport_ieee1284_write_compat, 279 .compat_write_data = parport_ieee1284_write_compat,
315 .nibble_read_data = parport_ieee1284_read_nibble, 280 .nibble_read_data = parport_ieee1284_read_nibble,
316 .byte_read_data = parport_ieee1284_read_byte, 281 .byte_read_data = parport_ieee1284_read_byte,
317 282
318 .owner = THIS_MODULE, 283 .owner = THIS_MODULE,
319 }; 284 };
320 285
321 /* ----------- Initialisation code --------------------------------- */ 286 /* ----------- Initialisation code --------------------------------- */
322 287
323 static int __init parport_mfc3_init(void) 288 static int __init parport_mfc3_init(void)
324 { 289 {
325 struct parport *p; 290 struct parport *p;
326 int pias = 0; 291 int pias = 0;
327 struct pia *pp; 292 struct pia *pp;
328 struct zorro_dev *z = NULL; 293 struct zorro_dev *z = NULL;
329 294
330 if (!MACH_IS_AMIGA) 295 if (!MACH_IS_AMIGA)
331 return -ENODEV; 296 return -ENODEV;
332 297
333 while ((z = zorro_find_device(ZORRO_PROD_BSC_MULTIFACE_III, z))) { 298 while ((z = zorro_find_device(ZORRO_PROD_BSC_MULTIFACE_III, z))) {
334 unsigned long piabase = z->resource.start+PIABASE; 299 unsigned long piabase = z->resource.start+PIABASE;
335 if (!request_mem_region(piabase, sizeof(struct pia), "PIA")) 300 if (!request_mem_region(piabase, sizeof(struct pia), "PIA"))
336 continue; 301 continue;
337 302
338 pp = (struct pia *)ZTWO_VADDR(piabase); 303 pp = (struct pia *)ZTWO_VADDR(piabase);
339 pp->crb = 0; 304 pp->crb = 0;
340 pp->pddrb = 255; /* all data pins output */ 305 pp->pddrb = 255; /* all data pins output */
341 pp->crb = PIA_DDR|32|8; 306 pp->crb = PIA_DDR|32|8;
342 dummy = pp->pddrb; /* reading clears interrupt */ 307 dummy = pp->pddrb; /* reading clears interrupt */
343 pp->cra = 0; 308 pp->cra = 0;
344 pp->pddra = 0xe0; /* /RESET, /DIR ,/AUTO-FEED output */ 309 pp->pddra = 0xe0; /* /RESET, /DIR ,/AUTO-FEED output */
345 pp->cra = PIA_DDR; 310 pp->cra = PIA_DDR;
346 pp->ppra = 0; /* reset printer */ 311 pp->ppra = 0; /* reset printer */
347 udelay(10); 312 udelay(10);
348 pp->ppra = 128; 313 pp->ppra = 128;
349 p = parport_register_port((unsigned long)pp, IRQ_AMIGA_PORTS, 314 p = parport_register_port((unsigned long)pp, IRQ_AMIGA_PORTS,
350 PARPORT_DMA_NONE, &pp_mfc3_ops); 315 PARPORT_DMA_NONE, &pp_mfc3_ops);
351 if (!p) 316 if (!p)
352 goto out_port; 317 goto out_port;
353 318
354 if (p->irq != PARPORT_IRQ_NONE) { 319 if (p->irq != PARPORT_IRQ_NONE) {
355 if (use_cnt++ == 0) 320 if (use_cnt++ == 0)
356 if (request_irq(IRQ_AMIGA_PORTS, mfc3_interrupt, IRQF_SHARED, p->name, &pp_mfc3_ops)) 321 if (request_irq(IRQ_AMIGA_PORTS, mfc3_interrupt, IRQF_SHARED, p->name, &pp_mfc3_ops))
357 goto out_irq; 322 goto out_irq;
358 } 323 }
359 p->dev = &z->dev; 324 p->dev = &z->dev;
360 325
361 this_port[pias++] = p; 326 this_port[pias++] = p;
362 printk(KERN_INFO "%s: Multiface III port using irq\n", p->name); 327 printk(KERN_INFO "%s: Multiface III port using irq\n", p->name);
363 /* XXX: set operating mode */ 328 /* XXX: set operating mode */
364 329
365 p->private_data = (void *)piabase; 330 p->private_data = (void *)piabase;
366 parport_announce_port (p); 331 parport_announce_port (p);
367 332
368 if (pias >= MAX_MFC) 333 if (pias >= MAX_MFC)
369 break; 334 break;
370 continue; 335 continue;
371 336
372 out_irq: 337 out_irq:
373 parport_put_port(p); 338 parport_put_port(p);
374 out_port: 339 out_port:
375 release_mem_region(piabase, sizeof(struct pia)); 340 release_mem_region(piabase, sizeof(struct pia));
376 } 341 }
377 342
378 return pias ? 0 : -ENODEV; 343 return pias ? 0 : -ENODEV;
379 } 344 }
380 345
381 static void __exit parport_mfc3_exit(void) 346 static void __exit parport_mfc3_exit(void)
382 { 347 {
383 int i; 348 int i;
384 349
385 for (i = 0; i < MAX_MFC; i++) { 350 for (i = 0; i < MAX_MFC; i++) {
386 if (!this_port[i]) 351 if (!this_port[i])
387 continue; 352 continue;
388 parport_remove_port(this_port[i]); 353 parport_remove_port(this_port[i]);
389 if (this_port[i]->irq != PARPORT_IRQ_NONE) { 354 if (this_port[i]->irq != PARPORT_IRQ_NONE) {
390 if (--use_cnt == 0) 355 if (--use_cnt == 0)
391 free_irq(IRQ_AMIGA_PORTS, &pp_mfc3_ops); 356 free_irq(IRQ_AMIGA_PORTS, &pp_mfc3_ops);
392 } 357 }
393 release_mem_region(ZTWO_PADDR(this_port[i]->private_data), sizeof(struct pia)); 358 release_mem_region(ZTWO_PADDR(this_port[i]->private_data), sizeof(struct pia));
394 parport_put_port(this_port[i]); 359 parport_put_port(this_port[i]);
395 } 360 }
396 } 361 }
397 362
398 363
399 MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>"); 364 MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>");
400 MODULE_DESCRIPTION("Parport Driver for Multiface 3 expansion cards Parallel Port"); 365 MODULE_DESCRIPTION("Parport Driver for Multiface 3 expansion cards Parallel Port");
401 MODULE_SUPPORTED_DEVICE("Multiface 3 Parallel Port"); 366 MODULE_SUPPORTED_DEVICE("Multiface 3 Parallel Port");
402 MODULE_LICENSE("GPL"); 367 MODULE_LICENSE("GPL");
403 368
404 module_init(parport_mfc3_init) 369 module_init(parport_mfc3_init)
405 module_exit(parport_mfc3_exit) 370 module_exit(parport_mfc3_exit)
406 371
drivers/parport/parport_pc.c
1 /* Low-level parallel-port routines for 8255-based PC-style hardware. 1 /* Low-level parallel-port routines for 8255-based PC-style hardware.
2 * 2 *
3 * Authors: Phil Blundell <philb@gnu.org> 3 * Authors: Phil Blundell <philb@gnu.org>
4 * Tim Waugh <tim@cyberelk.demon.co.uk> 4 * Tim Waugh <tim@cyberelk.demon.co.uk>
5 * Jose Renau <renau@acm.org> 5 * Jose Renau <renau@acm.org>
6 * David Campbell 6 * David Campbell
7 * Andrea Arcangeli 7 * Andrea Arcangeli
8 * 8 *
9 * based on work by Grant Guenther <grant@torque.net> and Phil Blundell. 9 * based on work by Grant Guenther <grant@torque.net> and Phil Blundell.
10 * 10 *
11 * Cleaned up include files - Russell King <linux@arm.uk.linux.org> 11 * Cleaned up include files - Russell King <linux@arm.uk.linux.org>
12 * DMA support - Bert De Jonghe <bert@sophis.be> 12 * DMA support - Bert De Jonghe <bert@sophis.be>
13 * Many ECP bugs fixed. Fred Barnes & Jamie Lokier, 1999 13 * Many ECP bugs fixed. Fred Barnes & Jamie Lokier, 1999
14 * More PCI support now conditional on CONFIG_PCI, 03/2001, Paul G. 14 * More PCI support now conditional on CONFIG_PCI, 03/2001, Paul G.
15 * Various hacks, Fred Barnes, 04/2001 15 * Various hacks, Fred Barnes, 04/2001
16 * Updated probing logic - Adam Belay <ambx1@neo.rr.com> 16 * Updated probing logic - Adam Belay <ambx1@neo.rr.com>
17 */ 17 */
18 18
19 /* This driver should work with any hardware that is broadly compatible 19 /* This driver should work with any hardware that is broadly compatible
20 * with that in the IBM PC. This applies to the majority of integrated 20 * with that in the IBM PC. This applies to the majority of integrated
21 * I/O chipsets that are commonly available. The expected register 21 * I/O chipsets that are commonly available. The expected register
22 * layout is: 22 * layout is:
23 * 23 *
24 * base+0 data 24 * base+0 data
25 * base+1 status 25 * base+1 status
26 * base+2 control 26 * base+2 control
27 * 27 *
28 * In addition, there are some optional registers: 28 * In addition, there are some optional registers:
29 * 29 *
30 * base+3 EPP address 30 * base+3 EPP address
31 * base+4 EPP data 31 * base+4 EPP data
32 * base+0x400 ECP config A 32 * base+0x400 ECP config A
33 * base+0x401 ECP config B 33 * base+0x401 ECP config B
34 * base+0x402 ECP control 34 * base+0x402 ECP control
35 * 35 *
36 * All registers are 8 bits wide and read/write. If your hardware differs 36 * All registers are 8 bits wide and read/write. If your hardware differs
37 * only in register addresses (eg because your registers are on 32-bit 37 * only in register addresses (eg because your registers are on 32-bit
38 * word boundaries) then you can alter the constants in parport_pc.h to 38 * word boundaries) then you can alter the constants in parport_pc.h to
39 * accommodate this. 39 * accommodate this.
40 * 40 *
41 * Note that the ECP registers may not start at offset 0x400 for PCI cards, 41 * Note that the ECP registers may not start at offset 0x400 for PCI cards,
42 * but rather will start at port->base_hi. 42 * but rather will start at port->base_hi.
43 */ 43 */
44 44
45 #include <linux/module.h> 45 #include <linux/module.h>
46 #include <linux/init.h> 46 #include <linux/init.h>
47 #include <linux/sched.h> 47 #include <linux/sched.h>
48 #include <linux/delay.h> 48 #include <linux/delay.h>
49 #include <linux/errno.h> 49 #include <linux/errno.h>
50 #include <linux/interrupt.h> 50 #include <linux/interrupt.h>
51 #include <linux/ioport.h> 51 #include <linux/ioport.h>
52 #include <linux/kernel.h> 52 #include <linux/kernel.h>
53 #include <linux/slab.h> 53 #include <linux/slab.h>
54 #include <linux/dma-mapping.h> 54 #include <linux/dma-mapping.h>
55 #include <linux/pci.h> 55 #include <linux/pci.h>
56 #include <linux/pnp.h> 56 #include <linux/pnp.h>
57 #include <linux/platform_device.h> 57 #include <linux/platform_device.h>
58 #include <linux/sysctl.h> 58 #include <linux/sysctl.h>
59 #include <linux/io.h> 59 #include <linux/io.h>
60 #include <linux/uaccess.h> 60 #include <linux/uaccess.h>
61 61
62 #include <asm/dma.h> 62 #include <asm/dma.h>
63 63
64 #include <linux/parport.h> 64 #include <linux/parport.h>
65 #include <linux/parport_pc.h> 65 #include <linux/parport_pc.h>
66 #include <linux/via.h> 66 #include <linux/via.h>
67 #include <asm/parport.h> 67 #include <asm/parport.h>
68 68
69 #define PARPORT_PC_MAX_PORTS PARPORT_MAX 69 #define PARPORT_PC_MAX_PORTS PARPORT_MAX
70 70
71 #ifdef CONFIG_ISA_DMA_API 71 #ifdef CONFIG_ISA_DMA_API
72 #define HAS_DMA 72 #define HAS_DMA
73 #endif 73 #endif
74 74
75 /* ECR modes */ 75 /* ECR modes */
76 #define ECR_SPP 00 76 #define ECR_SPP 00
77 #define ECR_PS2 01 77 #define ECR_PS2 01
78 #define ECR_PPF 02 78 #define ECR_PPF 02
79 #define ECR_ECP 03 79 #define ECR_ECP 03
80 #define ECR_EPP 04 80 #define ECR_EPP 04
81 #define ECR_VND 05 81 #define ECR_VND 05
82 #define ECR_TST 06 82 #define ECR_TST 06
83 #define ECR_CNF 07 83 #define ECR_CNF 07
84 #define ECR_MODE_MASK 0xe0 84 #define ECR_MODE_MASK 0xe0
85 #define ECR_WRITE(p, v) frob_econtrol((p), 0xff, (v)) 85 #define ECR_WRITE(p, v) frob_econtrol((p), 0xff, (v))
86 86
87 #undef DEBUG 87 #undef DEBUG
88 88
89 #ifdef DEBUG 89 #ifdef DEBUG
90 #define DPRINTK printk 90 #define DPRINTK printk
91 #else 91 #else
92 #define DPRINTK(stuff...) 92 #define DPRINTK(stuff...)
93 #endif 93 #endif
94 94
95 95
96 #define NR_SUPERIOS 3 96 #define NR_SUPERIOS 3
97 static struct superio_struct { /* For Super-IO chips autodetection */ 97 static struct superio_struct { /* For Super-IO chips autodetection */
98 int io; 98 int io;
99 int irq; 99 int irq;
100 int dma; 100 int dma;
101 } superios[NR_SUPERIOS] = { {0,},}; 101 } superios[NR_SUPERIOS] = { {0,},};
102 102
103 static int user_specified; 103 static int user_specified;
104 #if defined(CONFIG_PARPORT_PC_SUPERIO) || \ 104 #if defined(CONFIG_PARPORT_PC_SUPERIO) || \
105 (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO)) 105 (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
106 static int verbose_probing; 106 static int verbose_probing;
107 #endif 107 #endif
108 static int pci_registered_parport; 108 static int pci_registered_parport;
109 static int pnp_registered_parport; 109 static int pnp_registered_parport;
110 110
111 /* frob_control, but for ECR */ 111 /* frob_control, but for ECR */
112 static void frob_econtrol(struct parport *pb, unsigned char m, 112 static void frob_econtrol(struct parport *pb, unsigned char m,
113 unsigned char v) 113 unsigned char v)
114 { 114 {
115 unsigned char ectr = 0; 115 unsigned char ectr = 0;
116 116
117 if (m != 0xff) 117 if (m != 0xff)
118 ectr = inb(ECONTROL(pb)); 118 ectr = inb(ECONTROL(pb));
119 119
120 DPRINTK(KERN_DEBUG "frob_econtrol(%02x,%02x): %02x -> %02x\n", 120 DPRINTK(KERN_DEBUG "frob_econtrol(%02x,%02x): %02x -> %02x\n",
121 m, v, ectr, (ectr & ~m) ^ v); 121 m, v, ectr, (ectr & ~m) ^ v);
122 122
123 outb((ectr & ~m) ^ v, ECONTROL(pb)); 123 outb((ectr & ~m) ^ v, ECONTROL(pb));
124 } 124 }
125 125
126 static inline void frob_set_mode(struct parport *p, int mode) 126 static inline void frob_set_mode(struct parport *p, int mode)
127 { 127 {
128 frob_econtrol(p, ECR_MODE_MASK, mode << 5); 128 frob_econtrol(p, ECR_MODE_MASK, mode << 5);
129 } 129 }
130 130
131 #ifdef CONFIG_PARPORT_PC_FIFO 131 #ifdef CONFIG_PARPORT_PC_FIFO
132 /* Safely change the mode bits in the ECR 132 /* Safely change the mode bits in the ECR
133 Returns: 133 Returns:
134 0 : Success 134 0 : Success
135 -EBUSY: Could not drain FIFO in some finite amount of time, 135 -EBUSY: Could not drain FIFO in some finite amount of time,
136 mode not changed! 136 mode not changed!
137 */ 137 */
138 static int change_mode(struct parport *p, int m) 138 static int change_mode(struct parport *p, int m)
139 { 139 {
140 const struct parport_pc_private *priv = p->physport->private_data; 140 const struct parport_pc_private *priv = p->physport->private_data;
141 unsigned char oecr; 141 unsigned char oecr;
142 int mode; 142 int mode;
143 143
144 DPRINTK(KERN_INFO "parport change_mode ECP-ISA to mode 0x%02x\n", m); 144 DPRINTK(KERN_INFO "parport change_mode ECP-ISA to mode 0x%02x\n", m);
145 145
146 if (!priv->ecr) { 146 if (!priv->ecr) {
147 printk(KERN_DEBUG "change_mode: but there's no ECR!\n"); 147 printk(KERN_DEBUG "change_mode: but there's no ECR!\n");
148 return 0; 148 return 0;
149 } 149 }
150 150
151 /* Bits <7:5> contain the mode. */ 151 /* Bits <7:5> contain the mode. */
152 oecr = inb(ECONTROL(p)); 152 oecr = inb(ECONTROL(p));
153 mode = (oecr >> 5) & 0x7; 153 mode = (oecr >> 5) & 0x7;
154 if (mode == m) 154 if (mode == m)
155 return 0; 155 return 0;
156 156
157 if (mode >= 2 && !(priv->ctr & 0x20)) { 157 if (mode >= 2 && !(priv->ctr & 0x20)) {
158 /* This mode resets the FIFO, so we may 158 /* This mode resets the FIFO, so we may
159 * have to wait for it to drain first. */ 159 * have to wait for it to drain first. */
160 unsigned long expire = jiffies + p->physport->cad->timeout; 160 unsigned long expire = jiffies + p->physport->cad->timeout;
161 int counter; 161 int counter;
162 switch (mode) { 162 switch (mode) {
163 case ECR_PPF: /* Parallel Port FIFO mode */ 163 case ECR_PPF: /* Parallel Port FIFO mode */
164 case ECR_ECP: /* ECP Parallel Port mode */ 164 case ECR_ECP: /* ECP Parallel Port mode */
165 /* Busy wait for 200us */ 165 /* Busy wait for 200us */
166 for (counter = 0; counter < 40; counter++) { 166 for (counter = 0; counter < 40; counter++) {
167 if (inb(ECONTROL(p)) & 0x01) 167 if (inb(ECONTROL(p)) & 0x01)
168 break; 168 break;
169 if (signal_pending(current)) 169 if (signal_pending(current))
170 break; 170 break;
171 udelay(5); 171 udelay(5);
172 } 172 }
173 173
174 /* Poll slowly. */ 174 /* Poll slowly. */
175 while (!(inb(ECONTROL(p)) & 0x01)) { 175 while (!(inb(ECONTROL(p)) & 0x01)) {
176 if (time_after_eq(jiffies, expire)) 176 if (time_after_eq(jiffies, expire))
177 /* The FIFO is stuck. */ 177 /* The FIFO is stuck. */
178 return -EBUSY; 178 return -EBUSY;
179 schedule_timeout_interruptible( 179 schedule_timeout_interruptible(
180 msecs_to_jiffies(10)); 180 msecs_to_jiffies(10));
181 if (signal_pending(current)) 181 if (signal_pending(current))
182 break; 182 break;
183 } 183 }
184 } 184 }
185 } 185 }
186 186
187 if (mode >= 2 && m >= 2) { 187 if (mode >= 2 && m >= 2) {
188 /* We have to go through mode 001 */ 188 /* We have to go through mode 001 */
189 oecr &= ~(7 << 5); 189 oecr &= ~(7 << 5);
190 oecr |= ECR_PS2 << 5; 190 oecr |= ECR_PS2 << 5;
191 ECR_WRITE(p, oecr); 191 ECR_WRITE(p, oecr);
192 } 192 }
193 193
194 /* Set the mode. */ 194 /* Set the mode. */
195 oecr &= ~(7 << 5); 195 oecr &= ~(7 << 5);
196 oecr |= m << 5; 196 oecr |= m << 5;
197 ECR_WRITE(p, oecr); 197 ECR_WRITE(p, oecr);
198 return 0; 198 return 0;
199 } 199 }
200
201 #ifdef CONFIG_PARPORT_1284
202 /* Find FIFO lossage; FIFO is reset */
203 #if 0
204 static int get_fifo_residue(struct parport *p)
205 {
206 int residue;
207 int cnfga;
208 const struct parport_pc_private *priv = p->physport->private_data;
209
210 /* Adjust for the contents of the FIFO. */
211 for (residue = priv->fifo_depth; ; residue--) {
212 if (inb(ECONTROL(p)) & 0x2)
213 /* Full up. */
214 break;
215
216 outb(0, FIFO(p));
217 }
218
219 printk(KERN_DEBUG "%s: %d PWords were left in FIFO\n", p->name,
220 residue);
221
222 /* Reset the FIFO. */
223 frob_set_mode(p, ECR_PS2);
224
225 /* Now change to config mode and clean up. FIXME */
226 frob_set_mode(p, ECR_CNF);
227 cnfga = inb(CONFIGA(p));
228 printk(KERN_DEBUG "%s: cnfgA contains 0x%02x\n", p->name, cnfga);
229
230 if (!(cnfga & (1<<2))) {
231 printk(KERN_DEBUG "%s: Accounting for extra byte\n", p->name);
232 residue++;
233 }
234
235 /* Don't care about partial PWords until support is added for
236 * PWord != 1 byte. */
237
238 /* Back to PS2 mode. */
239 frob_set_mode(p, ECR_PS2);
240
241 DPRINTK(KERN_DEBUG
242 "*** get_fifo_residue: done residue collecting (ecr = 0x%2.2x)\n",
243 inb(ECONTROL(p)));
244 return residue;
245 }
246 #endif /* 0 */
247 #endif /* IEEE 1284 support */
248 #endif /* FIFO support */ 200 #endif /* FIFO support */
249 201
250 /* 202 /*
251 * Clear TIMEOUT BIT in EPP MODE 203 * Clear TIMEOUT BIT in EPP MODE
252 * 204 *
253 * This is also used in SPP detection. 205 * This is also used in SPP detection.
254 */ 206 */
255 static int clear_epp_timeout(struct parport *pb) 207 static int clear_epp_timeout(struct parport *pb)
256 { 208 {
257 unsigned char r; 209 unsigned char r;
258 210
259 if (!(parport_pc_read_status(pb) & 0x01)) 211 if (!(parport_pc_read_status(pb) & 0x01))
260 return 1; 212 return 1;
261 213
262 /* To clear timeout some chips require double read */ 214 /* To clear timeout some chips require double read */
263 parport_pc_read_status(pb); 215 parport_pc_read_status(pb);
264 r = parport_pc_read_status(pb); 216 r = parport_pc_read_status(pb);
265 outb(r | 0x01, STATUS(pb)); /* Some reset by writing 1 */ 217 outb(r | 0x01, STATUS(pb)); /* Some reset by writing 1 */
266 outb(r & 0xfe, STATUS(pb)); /* Others by writing 0 */ 218 outb(r & 0xfe, STATUS(pb)); /* Others by writing 0 */
267 r = parport_pc_read_status(pb); 219 r = parport_pc_read_status(pb);
268 220
269 return !(r & 0x01); 221 return !(r & 0x01);
270 } 222 }
271 223
272 /* 224 /*
273 * Access functions. 225 * Access functions.
274 * 226 *
275 * Most of these aren't static because they may be used by the 227 * Most of these aren't static because they may be used by the
276 * parport_xxx_yyy macros. extern __inline__ versions of several 228 * parport_xxx_yyy macros. extern __inline__ versions of several
277 * of these are in parport_pc.h. 229 * of these are in parport_pc.h.
278 */ 230 */
279 231
280 static void parport_pc_init_state(struct pardevice *dev, 232 static void parport_pc_init_state(struct pardevice *dev,
281 struct parport_state *s) 233 struct parport_state *s)
282 { 234 {
283 s->u.pc.ctr = 0xc; 235 s->u.pc.ctr = 0xc;
284 if (dev->irq_func && 236 if (dev->irq_func &&
285 dev->port->irq != PARPORT_IRQ_NONE) 237 dev->port->irq != PARPORT_IRQ_NONE)
286 /* Set ackIntEn */ 238 /* Set ackIntEn */
287 s->u.pc.ctr |= 0x10; 239 s->u.pc.ctr |= 0x10;
288 240
289 s->u.pc.ecr = 0x34; /* NetMos chip can cause problems 0x24; 241 s->u.pc.ecr = 0x34; /* NetMos chip can cause problems 0x24;
290 * D.Gruszka VScom */ 242 * D.Gruszka VScom */
291 } 243 }
292 244
293 static void parport_pc_save_state(struct parport *p, struct parport_state *s) 245 static void parport_pc_save_state(struct parport *p, struct parport_state *s)
294 { 246 {
295 const struct parport_pc_private *priv = p->physport->private_data; 247 const struct parport_pc_private *priv = p->physport->private_data;
296 s->u.pc.ctr = priv->ctr; 248 s->u.pc.ctr = priv->ctr;
297 if (priv->ecr) 249 if (priv->ecr)
298 s->u.pc.ecr = inb(ECONTROL(p)); 250 s->u.pc.ecr = inb(ECONTROL(p));
299 } 251 }
300 252
301 static void parport_pc_restore_state(struct parport *p, 253 static void parport_pc_restore_state(struct parport *p,
302 struct parport_state *s) 254 struct parport_state *s)
303 { 255 {
304 struct parport_pc_private *priv = p->physport->private_data; 256 struct parport_pc_private *priv = p->physport->private_data;
305 register unsigned char c = s->u.pc.ctr & priv->ctr_writable; 257 register unsigned char c = s->u.pc.ctr & priv->ctr_writable;
306 outb(c, CONTROL(p)); 258 outb(c, CONTROL(p));
307 priv->ctr = c; 259 priv->ctr = c;
308 if (priv->ecr) 260 if (priv->ecr)
309 ECR_WRITE(p, s->u.pc.ecr); 261 ECR_WRITE(p, s->u.pc.ecr);
310 } 262 }
311 263
312 #ifdef CONFIG_PARPORT_1284 264 #ifdef CONFIG_PARPORT_1284
313 static size_t parport_pc_epp_read_data(struct parport *port, void *buf, 265 static size_t parport_pc_epp_read_data(struct parport *port, void *buf,
314 size_t length, int flags) 266 size_t length, int flags)
315 { 267 {
316 size_t got = 0; 268 size_t got = 0;
317 269
318 if (flags & PARPORT_W91284PIC) { 270 if (flags & PARPORT_W91284PIC) {
319 unsigned char status; 271 unsigned char status;
320 size_t left = length; 272 size_t left = length;
321 273
322 /* use knowledge about data lines..: 274 /* use knowledge about data lines..:
323 * nFault is 0 if there is at least 1 byte in the Warp's FIFO 275 * nFault is 0 if there is at least 1 byte in the Warp's FIFO
324 * pError is 1 if there are 16 bytes in the Warp's FIFO 276 * pError is 1 if there are 16 bytes in the Warp's FIFO
325 */ 277 */
326 status = inb(STATUS(port)); 278 status = inb(STATUS(port));
327 279
328 while (!(status & 0x08) && got < length) { 280 while (!(status & 0x08) && got < length) {
329 if (left >= 16 && (status & 0x20) && !(status & 0x08)) { 281 if (left >= 16 && (status & 0x20) && !(status & 0x08)) {
330 /* can grab 16 bytes from warp fifo */ 282 /* can grab 16 bytes from warp fifo */
331 if (!((long)buf & 0x03)) 283 if (!((long)buf & 0x03))
332 insl(EPPDATA(port), buf, 4); 284 insl(EPPDATA(port), buf, 4);
333 else 285 else
334 insb(EPPDATA(port), buf, 16); 286 insb(EPPDATA(port), buf, 16);
335 buf += 16; 287 buf += 16;
336 got += 16; 288 got += 16;
337 left -= 16; 289 left -= 16;
338 } else { 290 } else {
339 /* grab single byte from the warp fifo */ 291 /* grab single byte from the warp fifo */
340 *((char *)buf) = inb(EPPDATA(port)); 292 *((char *)buf) = inb(EPPDATA(port));
341 buf++; 293 buf++;
342 got++; 294 got++;
343 left--; 295 left--;
344 } 296 }
345 status = inb(STATUS(port)); 297 status = inb(STATUS(port));
346 if (status & 0x01) { 298 if (status & 0x01) {
347 /* EPP timeout should never occur... */ 299 /* EPP timeout should never occur... */
348 printk(KERN_DEBUG 300 printk(KERN_DEBUG
349 "%s: EPP timeout occurred while talking to w91284pic (should not have done)\n", port->name); 301 "%s: EPP timeout occurred while talking to w91284pic (should not have done)\n", port->name);
350 clear_epp_timeout(port); 302 clear_epp_timeout(port);
351 } 303 }
352 } 304 }
353 return got; 305 return got;
354 } 306 }
355 if ((flags & PARPORT_EPP_FAST) && (length > 1)) { 307 if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
356 if (!(((long)buf | length) & 0x03)) 308 if (!(((long)buf | length) & 0x03))
357 insl(EPPDATA(port), buf, (length >> 2)); 309 insl(EPPDATA(port), buf, (length >> 2));
358 else 310 else
359 insb(EPPDATA(port), buf, length); 311 insb(EPPDATA(port), buf, length);
360 if (inb(STATUS(port)) & 0x01) { 312 if (inb(STATUS(port)) & 0x01) {
361 clear_epp_timeout(port); 313 clear_epp_timeout(port);
362 return -EIO; 314 return -EIO;
363 } 315 }
364 return length; 316 return length;
365 } 317 }
366 for (; got < length; got++) { 318 for (; got < length; got++) {
367 *((char *)buf) = inb(EPPDATA(port)); 319 *((char *)buf) = inb(EPPDATA(port));
368 buf++; 320 buf++;
369 if (inb(STATUS(port)) & 0x01) { 321 if (inb(STATUS(port)) & 0x01) {
370 /* EPP timeout */ 322 /* EPP timeout */
371 clear_epp_timeout(port); 323 clear_epp_timeout(port);
372 break; 324 break;
373 } 325 }
374 } 326 }
375 327
376 return got; 328 return got;
377 } 329 }
378 330
379 static size_t parport_pc_epp_write_data(struct parport *port, const void *buf, 331 static size_t parport_pc_epp_write_data(struct parport *port, const void *buf,
380 size_t length, int flags) 332 size_t length, int flags)
381 { 333 {
382 size_t written = 0; 334 size_t written = 0;
383 335
384 if ((flags & PARPORT_EPP_FAST) && (length > 1)) { 336 if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
385 if (!(((long)buf | length) & 0x03)) 337 if (!(((long)buf | length) & 0x03))
386 outsl(EPPDATA(port), buf, (length >> 2)); 338 outsl(EPPDATA(port), buf, (length >> 2));
387 else 339 else
388 outsb(EPPDATA(port), buf, length); 340 outsb(EPPDATA(port), buf, length);
389 if (inb(STATUS(port)) & 0x01) { 341 if (inb(STATUS(port)) & 0x01) {
390 clear_epp_timeout(port); 342 clear_epp_timeout(port);
391 return -EIO; 343 return -EIO;
392 } 344 }
393 return length; 345 return length;
394 } 346 }
395 for (; written < length; written++) { 347 for (; written < length; written++) {
396 outb(*((char *)buf), EPPDATA(port)); 348 outb(*((char *)buf), EPPDATA(port));
397 buf++; 349 buf++;
398 if (inb(STATUS(port)) & 0x01) { 350 if (inb(STATUS(port)) & 0x01) {
399 clear_epp_timeout(port); 351 clear_epp_timeout(port);
400 break; 352 break;
401 } 353 }
402 } 354 }
403 355
404 return written; 356 return written;
405 } 357 }
406 358
407 static size_t parport_pc_epp_read_addr(struct parport *port, void *buf, 359 static size_t parport_pc_epp_read_addr(struct parport *port, void *buf,
408 size_t length, int flags) 360 size_t length, int flags)
409 { 361 {
410 size_t got = 0; 362 size_t got = 0;
411 363
412 if ((flags & PARPORT_EPP_FAST) && (length > 1)) { 364 if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
413 insb(EPPADDR(port), buf, length); 365 insb(EPPADDR(port), buf, length);
414 if (inb(STATUS(port)) & 0x01) { 366 if (inb(STATUS(port)) & 0x01) {
415 clear_epp_timeout(port); 367 clear_epp_timeout(port);
416 return -EIO; 368 return -EIO;
417 } 369 }
418 return length; 370 return length;
419 } 371 }
420 for (; got < length; got++) { 372 for (; got < length; got++) {
421 *((char *)buf) = inb(EPPADDR(port)); 373 *((char *)buf) = inb(EPPADDR(port));
422 buf++; 374 buf++;
423 if (inb(STATUS(port)) & 0x01) { 375 if (inb(STATUS(port)) & 0x01) {
424 clear_epp_timeout(port); 376 clear_epp_timeout(port);
425 break; 377 break;
426 } 378 }
427 } 379 }
428 380
429 return got; 381 return got;
430 } 382 }
431 383
432 static size_t parport_pc_epp_write_addr(struct parport *port, 384 static size_t parport_pc_epp_write_addr(struct parport *port,
433 const void *buf, size_t length, 385 const void *buf, size_t length,
434 int flags) 386 int flags)
435 { 387 {
436 size_t written = 0; 388 size_t written = 0;
437 389
438 if ((flags & PARPORT_EPP_FAST) && (length > 1)) { 390 if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
439 outsb(EPPADDR(port), buf, length); 391 outsb(EPPADDR(port), buf, length);
440 if (inb(STATUS(port)) & 0x01) { 392 if (inb(STATUS(port)) & 0x01) {
441 clear_epp_timeout(port); 393 clear_epp_timeout(port);
442 return -EIO; 394 return -EIO;
443 } 395 }
444 return length; 396 return length;
445 } 397 }
446 for (; written < length; written++) { 398 for (; written < length; written++) {
447 outb(*((char *)buf), EPPADDR(port)); 399 outb(*((char *)buf), EPPADDR(port));
448 buf++; 400 buf++;
449 if (inb(STATUS(port)) & 0x01) { 401 if (inb(STATUS(port)) & 0x01) {
450 clear_epp_timeout(port); 402 clear_epp_timeout(port);
451 break; 403 break;
452 } 404 }
453 } 405 }
454 406
455 return written; 407 return written;
456 } 408 }
457 409
458 static size_t parport_pc_ecpepp_read_data(struct parport *port, void *buf, 410 static size_t parport_pc_ecpepp_read_data(struct parport *port, void *buf,
459 size_t length, int flags) 411 size_t length, int flags)
460 { 412 {
461 size_t got; 413 size_t got;
462 414
463 frob_set_mode(port, ECR_EPP); 415 frob_set_mode(port, ECR_EPP);
464 parport_pc_data_reverse(port); 416 parport_pc_data_reverse(port);
465 parport_pc_write_control(port, 0x4); 417 parport_pc_write_control(port, 0x4);
466 got = parport_pc_epp_read_data(port, buf, length, flags); 418 got = parport_pc_epp_read_data(port, buf, length, flags);
467 frob_set_mode(port, ECR_PS2); 419 frob_set_mode(port, ECR_PS2);
468 420
469 return got; 421 return got;
470 } 422 }
471 423
472 static size_t parport_pc_ecpepp_write_data(struct parport *port, 424 static size_t parport_pc_ecpepp_write_data(struct parport *port,
473 const void *buf, size_t length, 425 const void *buf, size_t length,
474 int flags) 426 int flags)
475 { 427 {
476 size_t written; 428 size_t written;
477 429
478 frob_set_mode(port, ECR_EPP); 430 frob_set_mode(port, ECR_EPP);
479 parport_pc_write_control(port, 0x4); 431 parport_pc_write_control(port, 0x4);
480 parport_pc_data_forward(port); 432 parport_pc_data_forward(port);
481 written = parport_pc_epp_write_data(port, buf, length, flags); 433 written = parport_pc_epp_write_data(port, buf, length, flags);
482 frob_set_mode(port, ECR_PS2); 434 frob_set_mode(port, ECR_PS2);
483 435
484 return written; 436 return written;
485 } 437 }
486 438
487 static size_t parport_pc_ecpepp_read_addr(struct parport *port, void *buf, 439 static size_t parport_pc_ecpepp_read_addr(struct parport *port, void *buf,
488 size_t length, int flags) 440 size_t length, int flags)
489 { 441 {
490 size_t got; 442 size_t got;
491 443
492 frob_set_mode(port, ECR_EPP); 444 frob_set_mode(port, ECR_EPP);
493 parport_pc_data_reverse(port); 445 parport_pc_data_reverse(port);
494 parport_pc_write_control(port, 0x4); 446 parport_pc_write_control(port, 0x4);
495 got = parport_pc_epp_read_addr(port, buf, length, flags); 447 got = parport_pc_epp_read_addr(port, buf, length, flags);
496 frob_set_mode(port, ECR_PS2); 448 frob_set_mode(port, ECR_PS2);
497 449
498 return got; 450 return got;
499 } 451 }
500 452
501 static size_t parport_pc_ecpepp_write_addr(struct parport *port, 453 static size_t parport_pc_ecpepp_write_addr(struct parport *port,
502 const void *buf, size_t length, 454 const void *buf, size_t length,
503 int flags) 455 int flags)
504 { 456 {
505 size_t written; 457 size_t written;
506 458
507 frob_set_mode(port, ECR_EPP); 459 frob_set_mode(port, ECR_EPP);
508 parport_pc_write_control(port, 0x4); 460 parport_pc_write_control(port, 0x4);
509 parport_pc_data_forward(port); 461 parport_pc_data_forward(port);
510 written = parport_pc_epp_write_addr(port, buf, length, flags); 462 written = parport_pc_epp_write_addr(port, buf, length, flags);
511 frob_set_mode(port, ECR_PS2); 463 frob_set_mode(port, ECR_PS2);
512 464
513 return written; 465 return written;
514 } 466 }
515 #endif /* IEEE 1284 support */ 467 #endif /* IEEE 1284 support */
516 468
517 #ifdef CONFIG_PARPORT_PC_FIFO 469 #ifdef CONFIG_PARPORT_PC_FIFO
518 static size_t parport_pc_fifo_write_block_pio(struct parport *port, 470 static size_t parport_pc_fifo_write_block_pio(struct parport *port,
519 const void *buf, size_t length) 471 const void *buf, size_t length)
520 { 472 {
521 int ret = 0; 473 int ret = 0;
522 const unsigned char *bufp = buf; 474 const unsigned char *bufp = buf;
523 size_t left = length; 475 size_t left = length;
524 unsigned long expire = jiffies + port->physport->cad->timeout; 476 unsigned long expire = jiffies + port->physport->cad->timeout;
525 const int fifo = FIFO(port); 477 const int fifo = FIFO(port);
526 int poll_for = 8; /* 80 usecs */ 478 int poll_for = 8; /* 80 usecs */
527 const struct parport_pc_private *priv = port->physport->private_data; 479 const struct parport_pc_private *priv = port->physport->private_data;
528 const int fifo_depth = priv->fifo_depth; 480 const int fifo_depth = priv->fifo_depth;
529 481
530 port = port->physport; 482 port = port->physport;
531 483
532 /* We don't want to be interrupted every character. */ 484 /* We don't want to be interrupted every character. */
533 parport_pc_disable_irq(port); 485 parport_pc_disable_irq(port);
534 /* set nErrIntrEn and serviceIntr */ 486 /* set nErrIntrEn and serviceIntr */
535 frob_econtrol(port, (1<<4) | (1<<2), (1<<4) | (1<<2)); 487 frob_econtrol(port, (1<<4) | (1<<2), (1<<4) | (1<<2));
536 488
537 /* Forward mode. */ 489 /* Forward mode. */
538 parport_pc_data_forward(port); /* Must be in PS2 mode */ 490 parport_pc_data_forward(port); /* Must be in PS2 mode */
539 491
540 while (left) { 492 while (left) {
541 unsigned char byte; 493 unsigned char byte;
542 unsigned char ecrval = inb(ECONTROL(port)); 494 unsigned char ecrval = inb(ECONTROL(port));
543 int i = 0; 495 int i = 0;
544 496
545 if (need_resched() && time_before(jiffies, expire)) 497 if (need_resched() && time_before(jiffies, expire))
546 /* Can't yield the port. */ 498 /* Can't yield the port. */
547 schedule(); 499 schedule();
548 500
549 /* Anyone else waiting for the port? */ 501 /* Anyone else waiting for the port? */
550 if (port->waithead) { 502 if (port->waithead) {
551 printk(KERN_DEBUG "Somebody wants the port\n"); 503 printk(KERN_DEBUG "Somebody wants the port\n");
552 break; 504 break;
553 } 505 }
554 506
555 if (ecrval & 0x02) { 507 if (ecrval & 0x02) {
556 /* FIFO is full. Wait for interrupt. */ 508 /* FIFO is full. Wait for interrupt. */
557 509
558 /* Clear serviceIntr */ 510 /* Clear serviceIntr */
559 ECR_WRITE(port, ecrval & ~(1<<2)); 511 ECR_WRITE(port, ecrval & ~(1<<2));
560 false_alarm: 512 false_alarm:
561 ret = parport_wait_event(port, HZ); 513 ret = parport_wait_event(port, HZ);
562 if (ret < 0) 514 if (ret < 0)
563 break; 515 break;
564 ret = 0; 516 ret = 0;
565 if (!time_before(jiffies, expire)) { 517 if (!time_before(jiffies, expire)) {
566 /* Timed out. */ 518 /* Timed out. */
567 printk(KERN_DEBUG "FIFO write timed out\n"); 519 printk(KERN_DEBUG "FIFO write timed out\n");
568 break; 520 break;
569 } 521 }
570 ecrval = inb(ECONTROL(port)); 522 ecrval = inb(ECONTROL(port));
571 if (!(ecrval & (1<<2))) { 523 if (!(ecrval & (1<<2))) {
572 if (need_resched() && 524 if (need_resched() &&
573 time_before(jiffies, expire)) 525 time_before(jiffies, expire))
574 schedule(); 526 schedule();
575 527
576 goto false_alarm; 528 goto false_alarm;
577 } 529 }
578 530
579 continue; 531 continue;
580 } 532 }
581 533
582 /* Can't fail now. */ 534 /* Can't fail now. */
583 expire = jiffies + port->cad->timeout; 535 expire = jiffies + port->cad->timeout;
584 536
585 poll: 537 poll:
586 if (signal_pending(current)) 538 if (signal_pending(current))
587 break; 539 break;
588 540
589 if (ecrval & 0x01) { 541 if (ecrval & 0x01) {
590 /* FIFO is empty. Blast it full. */ 542 /* FIFO is empty. Blast it full. */
591 const int n = left < fifo_depth ? left : fifo_depth; 543 const int n = left < fifo_depth ? left : fifo_depth;
592 outsb(fifo, bufp, n); 544 outsb(fifo, bufp, n);
593 bufp += n; 545 bufp += n;
594 left -= n; 546 left -= n;
595 547
596 /* Adjust the poll time. */ 548 /* Adjust the poll time. */
597 if (i < (poll_for - 2)) 549 if (i < (poll_for - 2))
598 poll_for--; 550 poll_for--;
599 continue; 551 continue;
600 } else if (i++ < poll_for) { 552 } else if (i++ < poll_for) {
601 udelay(10); 553 udelay(10);
602 ecrval = inb(ECONTROL(port)); 554 ecrval = inb(ECONTROL(port));
603 goto poll; 555 goto poll;
604 } 556 }
605 557
606 /* Half-full(call me an optimist) */ 558 /* Half-full(call me an optimist) */
607 byte = *bufp++; 559 byte = *bufp++;
608 outb(byte, fifo); 560 outb(byte, fifo);
609 left--; 561 left--;
610 } 562 }
611 dump_parport_state("leave fifo_write_block_pio", port); 563 dump_parport_state("leave fifo_write_block_pio", port);
612 return length - left; 564 return length - left;
613 } 565 }
614 566
615 #ifdef HAS_DMA 567 #ifdef HAS_DMA
616 static size_t parport_pc_fifo_write_block_dma(struct parport *port, 568 static size_t parport_pc_fifo_write_block_dma(struct parport *port,
617 const void *buf, size_t length) 569 const void *buf, size_t length)
618 { 570 {
619 int ret = 0; 571 int ret = 0;
620 unsigned long dmaflag; 572 unsigned long dmaflag;
621 size_t left = length; 573 size_t left = length;
622 const struct parport_pc_private *priv = port->physport->private_data; 574 const struct parport_pc_private *priv = port->physport->private_data;
623 struct device *dev = port->physport->dev; 575 struct device *dev = port->physport->dev;
624 dma_addr_t dma_addr, dma_handle; 576 dma_addr_t dma_addr, dma_handle;
625 size_t maxlen = 0x10000; /* max 64k per DMA transfer */ 577 size_t maxlen = 0x10000; /* max 64k per DMA transfer */
626 unsigned long start = (unsigned long) buf; 578 unsigned long start = (unsigned long) buf;
627 unsigned long end = (unsigned long) buf + length - 1; 579 unsigned long end = (unsigned long) buf + length - 1;
628 580
629 dump_parport_state("enter fifo_write_block_dma", port); 581 dump_parport_state("enter fifo_write_block_dma", port);
630 if (end < MAX_DMA_ADDRESS) { 582 if (end < MAX_DMA_ADDRESS) {
631 /* If it would cross a 64k boundary, cap it at the end. */ 583 /* If it would cross a 64k boundary, cap it at the end. */
632 if ((start ^ end) & ~0xffffUL) 584 if ((start ^ end) & ~0xffffUL)
633 maxlen = 0x10000 - (start & 0xffff); 585 maxlen = 0x10000 - (start & 0xffff);
634 586
635 dma_addr = dma_handle = dma_map_single(dev, (void *)buf, length, 587 dma_addr = dma_handle = dma_map_single(dev, (void *)buf, length,
636 DMA_TO_DEVICE); 588 DMA_TO_DEVICE);
637 } else { 589 } else {
638 /* above 16 MB we use a bounce buffer as ISA-DMA 590 /* above 16 MB we use a bounce buffer as ISA-DMA
639 is not possible */ 591 is not possible */
640 maxlen = PAGE_SIZE; /* sizeof(priv->dma_buf) */ 592 maxlen = PAGE_SIZE; /* sizeof(priv->dma_buf) */
641 dma_addr = priv->dma_handle; 593 dma_addr = priv->dma_handle;
642 dma_handle = 0; 594 dma_handle = 0;
643 } 595 }
644 596
645 port = port->physport; 597 port = port->physport;
646 598
647 /* We don't want to be interrupted every character. */ 599 /* We don't want to be interrupted every character. */
648 parport_pc_disable_irq(port); 600 parport_pc_disable_irq(port);
649 /* set nErrIntrEn and serviceIntr */ 601 /* set nErrIntrEn and serviceIntr */
650 frob_econtrol(port, (1<<4) | (1<<2), (1<<4) | (1<<2)); 602 frob_econtrol(port, (1<<4) | (1<<2), (1<<4) | (1<<2));
651 603
652 /* Forward mode. */ 604 /* Forward mode. */
653 parport_pc_data_forward(port); /* Must be in PS2 mode */ 605 parport_pc_data_forward(port); /* Must be in PS2 mode */
654 606
655 while (left) { 607 while (left) {
656 unsigned long expire = jiffies + port->physport->cad->timeout; 608 unsigned long expire = jiffies + port->physport->cad->timeout;
657 609
658 size_t count = left; 610 size_t count = left;
659 611
660 if (count > maxlen) 612 if (count > maxlen)
661 count = maxlen; 613 count = maxlen;
662 614
663 if (!dma_handle) /* bounce buffer ! */ 615 if (!dma_handle) /* bounce buffer ! */
664 memcpy(priv->dma_buf, buf, count); 616 memcpy(priv->dma_buf, buf, count);
665 617
666 dmaflag = claim_dma_lock(); 618 dmaflag = claim_dma_lock();
667 disable_dma(port->dma); 619 disable_dma(port->dma);
668 clear_dma_ff(port->dma); 620 clear_dma_ff(port->dma);
669 set_dma_mode(port->dma, DMA_MODE_WRITE); 621 set_dma_mode(port->dma, DMA_MODE_WRITE);
670 set_dma_addr(port->dma, dma_addr); 622 set_dma_addr(port->dma, dma_addr);
671 set_dma_count(port->dma, count); 623 set_dma_count(port->dma, count);
672 624
673 /* Set DMA mode */ 625 /* Set DMA mode */
674 frob_econtrol(port, 1<<3, 1<<3); 626 frob_econtrol(port, 1<<3, 1<<3);
675 627
676 /* Clear serviceIntr */ 628 /* Clear serviceIntr */
677 frob_econtrol(port, 1<<2, 0); 629 frob_econtrol(port, 1<<2, 0);
678 630
679 enable_dma(port->dma); 631 enable_dma(port->dma);
680 release_dma_lock(dmaflag); 632 release_dma_lock(dmaflag);
681 633
682 /* assume DMA will be successful */ 634 /* assume DMA will be successful */
683 left -= count; 635 left -= count;
684 buf += count; 636 buf += count;
685 if (dma_handle) 637 if (dma_handle)
686 dma_addr += count; 638 dma_addr += count;
687 639
688 /* Wait for interrupt. */ 640 /* Wait for interrupt. */
689 false_alarm: 641 false_alarm:
690 ret = parport_wait_event(port, HZ); 642 ret = parport_wait_event(port, HZ);
691 if (ret < 0) 643 if (ret < 0)
692 break; 644 break;
693 ret = 0; 645 ret = 0;
694 if (!time_before(jiffies, expire)) { 646 if (!time_before(jiffies, expire)) {
695 /* Timed out. */ 647 /* Timed out. */
696 printk(KERN_DEBUG "DMA write timed out\n"); 648 printk(KERN_DEBUG "DMA write timed out\n");
697 break; 649 break;
698 } 650 }
699 /* Is serviceIntr set? */ 651 /* Is serviceIntr set? */
700 if (!(inb(ECONTROL(port)) & (1<<2))) { 652 if (!(inb(ECONTROL(port)) & (1<<2))) {
701 cond_resched(); 653 cond_resched();
702 654
703 goto false_alarm; 655 goto false_alarm;
704 } 656 }
705 657
706 dmaflag = claim_dma_lock(); 658 dmaflag = claim_dma_lock();
707 disable_dma(port->dma); 659 disable_dma(port->dma);
708 clear_dma_ff(port->dma); 660 clear_dma_ff(port->dma);
709 count = get_dma_residue(port->dma); 661 count = get_dma_residue(port->dma);
710 release_dma_lock(dmaflag); 662 release_dma_lock(dmaflag);
711 663
712 cond_resched(); /* Can't yield the port. */ 664 cond_resched(); /* Can't yield the port. */
713 665
714 /* Anyone else waiting for the port? */ 666 /* Anyone else waiting for the port? */
715 if (port->waithead) { 667 if (port->waithead) {
716 printk(KERN_DEBUG "Somebody wants the port\n"); 668 printk(KERN_DEBUG "Somebody wants the port\n");
717 break; 669 break;
718 } 670 }
719 671
720 /* update for possible DMA residue ! */ 672 /* update for possible DMA residue ! */
721 buf -= count; 673 buf -= count;
722 left += count; 674 left += count;
723 if (dma_handle) 675 if (dma_handle)
724 dma_addr -= count; 676 dma_addr -= count;
725 } 677 }
726 678
727 /* Maybe got here through break, so adjust for DMA residue! */ 679 /* Maybe got here through break, so adjust for DMA residue! */
728 dmaflag = claim_dma_lock(); 680 dmaflag = claim_dma_lock();
729 disable_dma(port->dma); 681 disable_dma(port->dma);
730 clear_dma_ff(port->dma); 682 clear_dma_ff(port->dma);
731 left += get_dma_residue(port->dma); 683 left += get_dma_residue(port->dma);
732 release_dma_lock(dmaflag); 684 release_dma_lock(dmaflag);
733 685
734 /* Turn off DMA mode */ 686 /* Turn off DMA mode */
735 frob_econtrol(port, 1<<3, 0); 687 frob_econtrol(port, 1<<3, 0);
736 688
737 if (dma_handle) 689 if (dma_handle)
738 dma_unmap_single(dev, dma_handle, length, DMA_TO_DEVICE); 690 dma_unmap_single(dev, dma_handle, length, DMA_TO_DEVICE);
739 691
740 dump_parport_state("leave fifo_write_block_dma", port); 692 dump_parport_state("leave fifo_write_block_dma", port);
741 return length - left; 693 return length - left;
742 } 694 }
743 #endif 695 #endif
744 696
745 static inline size_t parport_pc_fifo_write_block(struct parport *port, 697 static inline size_t parport_pc_fifo_write_block(struct parport *port,
746 const void *buf, size_t length) 698 const void *buf, size_t length)
747 { 699 {
748 #ifdef HAS_DMA 700 #ifdef HAS_DMA
749 if (port->dma != PARPORT_DMA_NONE) 701 if (port->dma != PARPORT_DMA_NONE)
750 return parport_pc_fifo_write_block_dma(port, buf, length); 702 return parport_pc_fifo_write_block_dma(port, buf, length);
751 #endif 703 #endif
752 return parport_pc_fifo_write_block_pio(port, buf, length); 704 return parport_pc_fifo_write_block_pio(port, buf, length);
753 } 705 }
754 706
755 /* Parallel Port FIFO mode (ECP chipsets) */ 707 /* Parallel Port FIFO mode (ECP chipsets) */
756 static size_t parport_pc_compat_write_block_pio(struct parport *port, 708 static size_t parport_pc_compat_write_block_pio(struct parport *port,
757 const void *buf, size_t length, 709 const void *buf, size_t length,
758 int flags) 710 int flags)
759 { 711 {
760 size_t written; 712 size_t written;
761 int r; 713 int r;
762 unsigned long expire; 714 unsigned long expire;
763 const struct parport_pc_private *priv = port->physport->private_data; 715 const struct parport_pc_private *priv = port->physport->private_data;
764 716
765 /* Special case: a timeout of zero means we cannot call schedule(). 717 /* Special case: a timeout of zero means we cannot call schedule().
766 * Also if O_NONBLOCK is set then use the default implementation. */ 718 * Also if O_NONBLOCK is set then use the default implementation. */
767 if (port->physport->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK) 719 if (port->physport->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK)
768 return parport_ieee1284_write_compat(port, buf, 720 return parport_ieee1284_write_compat(port, buf,
769 length, flags); 721 length, flags);
770 722
771 /* Set up parallel port FIFO mode.*/ 723 /* Set up parallel port FIFO mode.*/
772 parport_pc_data_forward(port); /* Must be in PS2 mode */ 724 parport_pc_data_forward(port); /* Must be in PS2 mode */
773 parport_pc_frob_control(port, PARPORT_CONTROL_STROBE, 0); 725 parport_pc_frob_control(port, PARPORT_CONTROL_STROBE, 0);
774 r = change_mode(port, ECR_PPF); /* Parallel port FIFO */ 726 r = change_mode(port, ECR_PPF); /* Parallel port FIFO */
775 if (r) 727 if (r)
776 printk(KERN_DEBUG "%s: Warning change_mode ECR_PPF failed\n", 728 printk(KERN_DEBUG "%s: Warning change_mode ECR_PPF failed\n",
777 port->name); 729 port->name);
778 730
779 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA; 731 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
780 732
781 /* Write the data to the FIFO. */ 733 /* Write the data to the FIFO. */
782 written = parport_pc_fifo_write_block(port, buf, length); 734 written = parport_pc_fifo_write_block(port, buf, length);
783 735
784 /* Finish up. */ 736 /* Finish up. */
785 /* For some hardware we don't want to touch the mode until 737 /* For some hardware we don't want to touch the mode until
786 * the FIFO is empty, so allow 4 seconds for each position 738 * the FIFO is empty, so allow 4 seconds for each position
787 * in the fifo. 739 * in the fifo.
788 */ 740 */
789 expire = jiffies + (priv->fifo_depth * HZ * 4); 741 expire = jiffies + (priv->fifo_depth * HZ * 4);
790 do { 742 do {
791 /* Wait for the FIFO to empty */ 743 /* Wait for the FIFO to empty */
792 r = change_mode(port, ECR_PS2); 744 r = change_mode(port, ECR_PS2);
793 if (r != -EBUSY) 745 if (r != -EBUSY)
794 break; 746 break;
795 } while (time_before(jiffies, expire)); 747 } while (time_before(jiffies, expire));
796 if (r == -EBUSY) { 748 if (r == -EBUSY) {
797 749
798 printk(KERN_DEBUG "%s: FIFO is stuck\n", port->name); 750 printk(KERN_DEBUG "%s: FIFO is stuck\n", port->name);
799 751
800 /* Prevent further data transfer. */ 752 /* Prevent further data transfer. */
801 frob_set_mode(port, ECR_TST); 753 frob_set_mode(port, ECR_TST);
802 754
803 /* Adjust for the contents of the FIFO. */ 755 /* Adjust for the contents of the FIFO. */
804 for (written -= priv->fifo_depth; ; written++) { 756 for (written -= priv->fifo_depth; ; written++) {
805 if (inb(ECONTROL(port)) & 0x2) { 757 if (inb(ECONTROL(port)) & 0x2) {
806 /* Full up. */ 758 /* Full up. */
807 break; 759 break;
808 } 760 }
809 outb(0, FIFO(port)); 761 outb(0, FIFO(port));
810 } 762 }
811 763
812 /* Reset the FIFO and return to PS2 mode. */ 764 /* Reset the FIFO and return to PS2 mode. */
813 frob_set_mode(port, ECR_PS2); 765 frob_set_mode(port, ECR_PS2);
814 } 766 }
815 767
816 r = parport_wait_peripheral(port, 768 r = parport_wait_peripheral(port,
817 PARPORT_STATUS_BUSY, 769 PARPORT_STATUS_BUSY,
818 PARPORT_STATUS_BUSY); 770 PARPORT_STATUS_BUSY);
819 if (r) 771 if (r)
820 printk(KERN_DEBUG 772 printk(KERN_DEBUG
821 "%s: BUSY timeout (%d) in compat_write_block_pio\n", 773 "%s: BUSY timeout (%d) in compat_write_block_pio\n",
822 port->name, r); 774 port->name, r);
823 775
824 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE; 776 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
825 777
826 return written; 778 return written;
827 } 779 }
828 780
829 /* ECP */ 781 /* ECP */
830 #ifdef CONFIG_PARPORT_1284 782 #ifdef CONFIG_PARPORT_1284
831 static size_t parport_pc_ecp_write_block_pio(struct parport *port, 783 static size_t parport_pc_ecp_write_block_pio(struct parport *port,
832 const void *buf, size_t length, 784 const void *buf, size_t length,
833 int flags) 785 int flags)
834 { 786 {
835 size_t written; 787 size_t written;
836 int r; 788 int r;
837 unsigned long expire; 789 unsigned long expire;
838 const struct parport_pc_private *priv = port->physport->private_data; 790 const struct parport_pc_private *priv = port->physport->private_data;
839 791
840 /* Special case: a timeout of zero means we cannot call schedule(). 792 /* Special case: a timeout of zero means we cannot call schedule().
841 * Also if O_NONBLOCK is set then use the default implementation. */ 793 * Also if O_NONBLOCK is set then use the default implementation. */
842 if (port->physport->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK) 794 if (port->physport->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK)
843 return parport_ieee1284_ecp_write_data(port, buf, 795 return parport_ieee1284_ecp_write_data(port, buf,
844 length, flags); 796 length, flags);
845 797
846 /* Switch to forward mode if necessary. */ 798 /* Switch to forward mode if necessary. */
847 if (port->physport->ieee1284.phase != IEEE1284_PH_FWD_IDLE) { 799 if (port->physport->ieee1284.phase != IEEE1284_PH_FWD_IDLE) {
848 /* Event 47: Set nInit high. */ 800 /* Event 47: Set nInit high. */
849 parport_frob_control(port, 801 parport_frob_control(port,
850 PARPORT_CONTROL_INIT 802 PARPORT_CONTROL_INIT
851 | PARPORT_CONTROL_AUTOFD, 803 | PARPORT_CONTROL_AUTOFD,
852 PARPORT_CONTROL_INIT 804 PARPORT_CONTROL_INIT
853 | PARPORT_CONTROL_AUTOFD); 805 | PARPORT_CONTROL_AUTOFD);
854 806
855 /* Event 49: PError goes high. */ 807 /* Event 49: PError goes high. */
856 r = parport_wait_peripheral(port, 808 r = parport_wait_peripheral(port,
857 PARPORT_STATUS_PAPEROUT, 809 PARPORT_STATUS_PAPEROUT,
858 PARPORT_STATUS_PAPEROUT); 810 PARPORT_STATUS_PAPEROUT);
859 if (r) { 811 if (r) {
860 printk(KERN_DEBUG "%s: PError timeout (%d) " 812 printk(KERN_DEBUG "%s: PError timeout (%d) "
861 "in ecp_write_block_pio\n", port->name, r); 813 "in ecp_write_block_pio\n", port->name, r);
862 } 814 }
863 } 815 }
864 816
865 /* Set up ECP parallel port mode.*/ 817 /* Set up ECP parallel port mode.*/
866 parport_pc_data_forward(port); /* Must be in PS2 mode */ 818 parport_pc_data_forward(port); /* Must be in PS2 mode */
867 parport_pc_frob_control(port, 819 parport_pc_frob_control(port,
868 PARPORT_CONTROL_STROBE | 820 PARPORT_CONTROL_STROBE |
869 PARPORT_CONTROL_AUTOFD, 821 PARPORT_CONTROL_AUTOFD,
870 0); 822 0);
871 r = change_mode(port, ECR_ECP); /* ECP FIFO */ 823 r = change_mode(port, ECR_ECP); /* ECP FIFO */
872 if (r) 824 if (r)
873 printk(KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n", 825 printk(KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n",
874 port->name); 826 port->name);
875 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA; 827 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
876 828
877 /* Write the data to the FIFO. */ 829 /* Write the data to the FIFO. */
878 written = parport_pc_fifo_write_block(port, buf, length); 830 written = parport_pc_fifo_write_block(port, buf, length);
879 831
880 /* Finish up. */ 832 /* Finish up. */
881 /* For some hardware we don't want to touch the mode until 833 /* For some hardware we don't want to touch the mode until
882 * the FIFO is empty, so allow 4 seconds for each position 834 * the FIFO is empty, so allow 4 seconds for each position
883 * in the fifo. 835 * in the fifo.
884 */ 836 */
885 expire = jiffies + (priv->fifo_depth * (HZ * 4)); 837 expire = jiffies + (priv->fifo_depth * (HZ * 4));
886 do { 838 do {
887 /* Wait for the FIFO to empty */ 839 /* Wait for the FIFO to empty */
888 r = change_mode(port, ECR_PS2); 840 r = change_mode(port, ECR_PS2);
889 if (r != -EBUSY) 841 if (r != -EBUSY)
890 break; 842 break;
891 } while (time_before(jiffies, expire)); 843 } while (time_before(jiffies, expire));
892 if (r == -EBUSY) { 844 if (r == -EBUSY) {
893 845
894 printk(KERN_DEBUG "%s: FIFO is stuck\n", port->name); 846 printk(KERN_DEBUG "%s: FIFO is stuck\n", port->name);
895 847
896 /* Prevent further data transfer. */ 848 /* Prevent further data transfer. */
897 frob_set_mode(port, ECR_TST); 849 frob_set_mode(port, ECR_TST);
898 850
899 /* Adjust for the contents of the FIFO. */ 851 /* Adjust for the contents of the FIFO. */
900 for (written -= priv->fifo_depth; ; written++) { 852 for (written -= priv->fifo_depth; ; written++) {
901 if (inb(ECONTROL(port)) & 0x2) { 853 if (inb(ECONTROL(port)) & 0x2) {
902 /* Full up. */ 854 /* Full up. */
903 break; 855 break;
904 } 856 }
905 outb(0, FIFO(port)); 857 outb(0, FIFO(port));
906 } 858 }
907 859
908 /* Reset the FIFO and return to PS2 mode. */ 860 /* Reset the FIFO and return to PS2 mode. */
909 frob_set_mode(port, ECR_PS2); 861 frob_set_mode(port, ECR_PS2);
910 862
911 /* Host transfer recovery. */ 863 /* Host transfer recovery. */
912 parport_pc_data_reverse(port); /* Must be in PS2 mode */ 864 parport_pc_data_reverse(port); /* Must be in PS2 mode */
913 udelay(5); 865 udelay(5);
914 parport_frob_control(port, PARPORT_CONTROL_INIT, 0); 866 parport_frob_control(port, PARPORT_CONTROL_INIT, 0);
915 r = parport_wait_peripheral(port, PARPORT_STATUS_PAPEROUT, 0); 867 r = parport_wait_peripheral(port, PARPORT_STATUS_PAPEROUT, 0);
916 if (r) 868 if (r)
917 printk(KERN_DEBUG "%s: PE,1 timeout (%d) " 869 printk(KERN_DEBUG "%s: PE,1 timeout (%d) "
918 "in ecp_write_block_pio\n", port->name, r); 870 "in ecp_write_block_pio\n", port->name, r);
919 871
920 parport_frob_control(port, 872 parport_frob_control(port,
921 PARPORT_CONTROL_INIT, 873 PARPORT_CONTROL_INIT,
922 PARPORT_CONTROL_INIT); 874 PARPORT_CONTROL_INIT);
923 r = parport_wait_peripheral(port, 875 r = parport_wait_peripheral(port,
924 PARPORT_STATUS_PAPEROUT, 876 PARPORT_STATUS_PAPEROUT,
925 PARPORT_STATUS_PAPEROUT); 877 PARPORT_STATUS_PAPEROUT);
926 if (r) 878 if (r)
927 printk(KERN_DEBUG "%s: PE,2 timeout (%d) " 879 printk(KERN_DEBUG "%s: PE,2 timeout (%d) "
928 "in ecp_write_block_pio\n", port->name, r); 880 "in ecp_write_block_pio\n", port->name, r);
929 } 881 }
930 882
931 r = parport_wait_peripheral(port, 883 r = parport_wait_peripheral(port,
932 PARPORT_STATUS_BUSY, 884 PARPORT_STATUS_BUSY,
933 PARPORT_STATUS_BUSY); 885 PARPORT_STATUS_BUSY);
934 if (r) 886 if (r)
935 printk(KERN_DEBUG 887 printk(KERN_DEBUG
936 "%s: BUSY timeout (%d) in ecp_write_block_pio\n", 888 "%s: BUSY timeout (%d) in ecp_write_block_pio\n",
937 port->name, r); 889 port->name, r);
938 890
939 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE; 891 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
940 892
941 return written; 893 return written;
942 } 894 }
943
944 #if 0
945 static size_t parport_pc_ecp_read_block_pio(struct parport *port,
946 void *buf, size_t length,
947 int flags)
948 {
949 size_t left = length;
950 size_t fifofull;
951 int r;
952 const int fifo = FIFO(port);
953 const struct parport_pc_private *priv = port->physport->private_data;
954 const int fifo_depth = priv->fifo_depth;
955 char *bufp = buf;
956
957 port = port->physport;
958 DPRINTK(KERN_DEBUG "parport_pc: parport_pc_ecp_read_block_pio\n");
959 dump_parport_state("enter fcn", port);
960
961 /* Special case: a timeout of zero means we cannot call schedule().
962 * Also if O_NONBLOCK is set then use the default implementation. */
963 if (port->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK)
964 return parport_ieee1284_ecp_read_data(port, buf,
965 length, flags);
966
967 if (port->ieee1284.mode == IEEE1284_MODE_ECPRLE) {
968 /* If the peripheral is allowed to send RLE compressed
969 * data, it is possible for a byte to expand to 128
970 * bytes in the FIFO. */
971 fifofull = 128;
972 } else {
973 fifofull = fifo_depth;
974 }
975
976 /* If the caller wants less than a full FIFO's worth of data,
977 * go through software emulation. Otherwise we may have to throw
978 * away data. */
979 if (length < fifofull)
980 return parport_ieee1284_ecp_read_data(port, buf,
981 length, flags);
982
983 if (port->ieee1284.phase != IEEE1284_PH_REV_IDLE) {
984 /* change to reverse-idle phase (must be in forward-idle) */
985
986 /* Event 38: Set nAutoFd low (also make sure nStrobe is high) */
987 parport_frob_control(port,
988 PARPORT_CONTROL_AUTOFD
989 | PARPORT_CONTROL_STROBE,
990 PARPORT_CONTROL_AUTOFD);
991 parport_pc_data_reverse(port); /* Must be in PS2 mode */
992 udelay(5);
993 /* Event 39: Set nInit low to initiate bus reversal */
994 parport_frob_control(port,
995 PARPORT_CONTROL_INIT,
996 0);
997 /* Event 40: Wait for nAckReverse (PError) to go low */
998 r = parport_wait_peripheral(port, PARPORT_STATUS_PAPEROUT, 0);
999 if (r) {
1000 printk(KERN_DEBUG "%s: PE timeout Event 40 (%d) "
1001 "in ecp_read_block_pio\n", port->name, r);
1002 return 0;
1003 }
1004 }
1005
1006 /* Set up ECP FIFO mode.*/
1007 /* parport_pc_frob_control(port,
1008 PARPORT_CONTROL_STROBE |
1009 PARPORT_CONTROL_AUTOFD,
1010 PARPORT_CONTROL_AUTOFD); */
1011 r = change_mode(port, ECR_ECP); /* ECP FIFO */
1012 if (r)
1013 printk(KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n",
1014 port->name);
1015
1016 port->ieee1284.phase = IEEE1284_PH_REV_DATA;
1017
1018 /* the first byte must be collected manually */
1019 dump_parport_state("pre 43", port);
1020 /* Event 43: Wait for nAck to go low */
1021 r = parport_wait_peripheral(port, PARPORT_STATUS_ACK, 0);
1022 if (r) {
1023 /* timed out while reading -- no data */
1024 printk(KERN_DEBUG "PIO read timed out (initial byte)\n");
1025 goto out_no_data;
1026 }
1027 /* read byte */
1028 *bufp++ = inb(DATA(port));
1029 left--;
1030 dump_parport_state("43-44", port);
1031 /* Event 44: nAutoFd (HostAck) goes high to acknowledge */
1032 parport_pc_frob_control(port,
1033 PARPORT_CONTROL_AUTOFD,
1034 0);
1035 dump_parport_state("pre 45", port);
1036 /* Event 45: Wait for nAck to go high */
1037 /* r = parport_wait_peripheral(port, PARPORT_STATUS_ACK,
1038 PARPORT_STATUS_ACK); */
1039 dump_parport_state("post 45", port);
1040 r = 0;
1041 if (r) {
1042 /* timed out while waiting for peripheral to respond to ack */
1043 printk(KERN_DEBUG "ECP PIO read timed out (waiting for nAck)\n");
1044
1045 /* keep hold of the byte we've got already */
1046 goto out_no_data;
1047 }
1048 /* Event 46: nAutoFd (HostAck) goes low to accept more data */
1049 parport_pc_frob_control(port,
1050 PARPORT_CONTROL_AUTOFD,
1051 PARPORT_CONTROL_AUTOFD);
1052
1053
1054 dump_parport_state("rev idle", port);
1055 /* Do the transfer. */
1056 while (left > fifofull) {
1057 int ret;
1058 unsigned long expire = jiffies + port->cad->timeout;
1059 unsigned char ecrval = inb(ECONTROL(port));
1060
1061 if (need_resched() && time_before(jiffies, expire))
1062 /* Can't yield the port. */
1063 schedule();
1064
1065 /* At this point, the FIFO may already be full. In
1066 * that case ECP is already holding back the
1067 * peripheral (assuming proper design) with a delayed
1068 * handshake. Work fast to avoid a peripheral
1069 * timeout. */
1070
1071 if (ecrval & 0x01) {
1072 /* FIFO is empty. Wait for interrupt. */
1073 dump_parport_state("FIFO empty", port);
1074
1075 /* Anyone else waiting for the port? */
1076 if (port->waithead) {
1077 printk(KERN_DEBUG "Somebody wants the port\n");
1078 break;
1079 }
1080
1081 /* Clear serviceIntr */
1082 ECR_WRITE(port, ecrval & ~(1<<2));
1083 false_alarm:
1084 dump_parport_state("waiting", port);
1085 ret = parport_wait_event(port, HZ);
1086 DPRINTK(KERN_DEBUG "parport_wait_event returned %d\n",
1087 ret);
1088 if (ret < 0)
1089 break;
1090 ret = 0;
1091 if (!time_before(jiffies, expire)) {
1092 /* Timed out. */
1093 dump_parport_state("timeout", port);
1094 printk(KERN_DEBUG "PIO read timed out\n");
1095 break;
1096 }
1097 ecrval = inb(ECONTROL(port));
1098 if (!(ecrval & (1<<2))) {
1099 if (need_resched() &&
1100 time_before(jiffies, expire)) {
1101 schedule();
1102 }
1103 goto false_alarm;
1104 }
1105
1106 /* Depending on how the FIFO threshold was
1107 * set, how long interrupt service took, and
1108 * how fast the peripheral is, we might be
1109 * lucky and have a just filled FIFO. */
1110 continue;
1111 }
1112
1113 if (ecrval & 0x02) {
1114 /* FIFO is full. */
1115 dump_parport_state("FIFO full", port);
1116 insb(fifo, bufp, fifo_depth);
1117 bufp += fifo_depth;
1118 left -= fifo_depth;
1119 continue;
1120 }
1121
1122 DPRINTK(KERN_DEBUG
1123 "*** ecp_read_block_pio: reading one byte from the FIFO\n");
1124
1125 /* FIFO not filled. We will cycle this loop for a while
1126 * and either the peripheral will fill it faster,
1127 * tripping a fast empty with insb, or we empty it. */
1128 *bufp++ = inb(fifo);
1129 left--;
1130 }
1131
1132 /* scoop up anything left in the FIFO */
1133 while (left && !(inb(ECONTROL(port) & 0x01))) {
1134 *bufp++ = inb(fifo);
1135 left--;
1136 }
1137
1138 port->ieee1284.phase = IEEE1284_PH_REV_IDLE;
1139 dump_parport_state("rev idle2", port);
1140
1141 out_no_data:
1142
1143 /* Go to forward idle mode to shut the peripheral up (event 47). */
1144 parport_frob_control(port, PARPORT_CONTROL_INIT, PARPORT_CONTROL_INIT);
1145
1146 /* event 49: PError goes high */
1147 r = parport_wait_peripheral(port,
1148 PARPORT_STATUS_PAPEROUT,
1149 PARPORT_STATUS_PAPEROUT);
1150 if (r) {
1151 printk(KERN_DEBUG
1152 "%s: PE timeout FWDIDLE (%d) in ecp_read_block_pio\n",
1153 port->name, r);
1154 }
1155
1156 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
1157
1158 /* Finish up. */
1159 {
1160 int lost = get_fifo_residue(port);
1161 if (lost)
1162 /* Shouldn't happen with compliant peripherals. */
1163 printk(KERN_DEBUG "%s: DATA LOSS (%d bytes)!\n",
1164 port->name, lost);
1165 }
1166
1167 dump_parport_state("fwd idle", port);
1168 return length - left;
1169 }
1170 #endif /* 0 */
1171 #endif /* IEEE 1284 support */ 895 #endif /* IEEE 1284 support */
1172 #endif /* Allowed to use FIFO/DMA */ 896 #endif /* Allowed to use FIFO/DMA */
1173 897
1174 898
1175 /* 899 /*
1176 * ****************************************** 900 * ******************************************
1177 * INITIALISATION AND MODULE STUFF BELOW HERE 901 * INITIALISATION AND MODULE STUFF BELOW HERE
1178 * ****************************************** 902 * ******************************************
1179 */ 903 */
1180 904
1181 /* GCC is not inlining extern inline function later overwriten to non-inline, 905 /* GCC is not inlining extern inline function later overwriten to non-inline,
1182 so we use outlined_ variants here. */ 906 so we use outlined_ variants here. */
1183 static const struct parport_operations parport_pc_ops = { 907 static const struct parport_operations parport_pc_ops = {
1184 .write_data = parport_pc_write_data, 908 .write_data = parport_pc_write_data,
1185 .read_data = parport_pc_read_data, 909 .read_data = parport_pc_read_data,
1186 910
1187 .write_control = parport_pc_write_control, 911 .write_control = parport_pc_write_control,
1188 .read_control = parport_pc_read_control, 912 .read_control = parport_pc_read_control,
1189 .frob_control = parport_pc_frob_control, 913 .frob_control = parport_pc_frob_control,
1190 914
1191 .read_status = parport_pc_read_status, 915 .read_status = parport_pc_read_status,
1192 916
1193 .enable_irq = parport_pc_enable_irq, 917 .enable_irq = parport_pc_enable_irq,
1194 .disable_irq = parport_pc_disable_irq, 918 .disable_irq = parport_pc_disable_irq,
1195 919
1196 .data_forward = parport_pc_data_forward, 920 .data_forward = parport_pc_data_forward,
1197 .data_reverse = parport_pc_data_reverse, 921 .data_reverse = parport_pc_data_reverse,
1198 922
1199 .init_state = parport_pc_init_state, 923 .init_state = parport_pc_init_state,
1200 .save_state = parport_pc_save_state, 924 .save_state = parport_pc_save_state,
1201 .restore_state = parport_pc_restore_state, 925 .restore_state = parport_pc_restore_state,
1202 926
1203 .epp_write_data = parport_ieee1284_epp_write_data, 927 .epp_write_data = parport_ieee1284_epp_write_data,
1204 .epp_read_data = parport_ieee1284_epp_read_data, 928 .epp_read_data = parport_ieee1284_epp_read_data,
1205 .epp_write_addr = parport_ieee1284_epp_write_addr, 929 .epp_write_addr = parport_ieee1284_epp_write_addr,
1206 .epp_read_addr = parport_ieee1284_epp_read_addr, 930 .epp_read_addr = parport_ieee1284_epp_read_addr,
1207 931
1208 .ecp_write_data = parport_ieee1284_ecp_write_data, 932 .ecp_write_data = parport_ieee1284_ecp_write_data,
1209 .ecp_read_data = parport_ieee1284_ecp_read_data, 933 .ecp_read_data = parport_ieee1284_ecp_read_data,
1210 .ecp_write_addr = parport_ieee1284_ecp_write_addr, 934 .ecp_write_addr = parport_ieee1284_ecp_write_addr,
1211 935
1212 .compat_write_data = parport_ieee1284_write_compat, 936 .compat_write_data = parport_ieee1284_write_compat,
1213 .nibble_read_data = parport_ieee1284_read_nibble, 937 .nibble_read_data = parport_ieee1284_read_nibble,
1214 .byte_read_data = parport_ieee1284_read_byte, 938 .byte_read_data = parport_ieee1284_read_byte,
1215 939
1216 .owner = THIS_MODULE, 940 .owner = THIS_MODULE,
1217 }; 941 };
1218 942
1219 #ifdef CONFIG_PARPORT_PC_SUPERIO 943 #ifdef CONFIG_PARPORT_PC_SUPERIO
1220 944
1221 static struct superio_struct *find_free_superio(void) 945 static struct superio_struct *find_free_superio(void)
1222 { 946 {
1223 int i; 947 int i;
1224 for (i = 0; i < NR_SUPERIOS; i++) 948 for (i = 0; i < NR_SUPERIOS; i++)
1225 if (superios[i].io == 0) 949 if (superios[i].io == 0)
1226 return &superios[i]; 950 return &superios[i];
1227 return NULL; 951 return NULL;
1228 } 952 }
1229 953
1230 954
1231 /* Super-IO chipset detection, Winbond, SMSC */ 955 /* Super-IO chipset detection, Winbond, SMSC */
1232 static void __devinit show_parconfig_smsc37c669(int io, int key) 956 static void __devinit show_parconfig_smsc37c669(int io, int key)
1233 { 957 {
1234 int cr1, cr4, cra, cr23, cr26, cr27; 958 int cr1, cr4, cra, cr23, cr26, cr27;
1235 struct superio_struct *s; 959 struct superio_struct *s;
1236 960
1237 static const char *const modes[] = { 961 static const char *const modes[] = {
1238 "SPP and Bidirectional (PS/2)", 962 "SPP and Bidirectional (PS/2)",
1239 "EPP and SPP", 963 "EPP and SPP",
1240 "ECP", 964 "ECP",
1241 "ECP and EPP" }; 965 "ECP and EPP" };
1242 966
1243 outb(key, io); 967 outb(key, io);
1244 outb(key, io); 968 outb(key, io);
1245 outb(1, io); 969 outb(1, io);
1246 cr1 = inb(io + 1); 970 cr1 = inb(io + 1);
1247 outb(4, io); 971 outb(4, io);
1248 cr4 = inb(io + 1); 972 cr4 = inb(io + 1);
1249 outb(0x0a, io); 973 outb(0x0a, io);
1250 cra = inb(io + 1); 974 cra = inb(io + 1);
1251 outb(0x23, io); 975 outb(0x23, io);
1252 cr23 = inb(io + 1); 976 cr23 = inb(io + 1);
1253 outb(0x26, io); 977 outb(0x26, io);
1254 cr26 = inb(io + 1); 978 cr26 = inb(io + 1);
1255 outb(0x27, io); 979 outb(0x27, io);
1256 cr27 = inb(io + 1); 980 cr27 = inb(io + 1);
1257 outb(0xaa, io); 981 outb(0xaa, io);
1258 982
1259 if (verbose_probing) { 983 if (verbose_probing) {
1260 printk(KERN_INFO 984 printk(KERN_INFO
1261 "SMSC 37c669 LPT Config: cr_1=0x%02x, 4=0x%02x, " 985 "SMSC 37c669 LPT Config: cr_1=0x%02x, 4=0x%02x, "
1262 "A=0x%2x, 23=0x%02x, 26=0x%02x, 27=0x%02x\n", 986 "A=0x%2x, 23=0x%02x, 26=0x%02x, 27=0x%02x\n",
1263 cr1, cr4, cra, cr23, cr26, cr27); 987 cr1, cr4, cra, cr23, cr26, cr27);
1264 988
1265 /* The documentation calls DMA and IRQ-Lines by letters, so 989 /* The documentation calls DMA and IRQ-Lines by letters, so
1266 the board maker can/will wire them 990 the board maker can/will wire them
1267 appropriately/randomly... G=reserved H=IDE-irq, */ 991 appropriately/randomly... G=reserved H=IDE-irq, */
1268 printk(KERN_INFO 992 printk(KERN_INFO
1269 "SMSC LPT Config: io=0x%04x, irq=%c, dma=%c, fifo threshold=%d\n", 993 "SMSC LPT Config: io=0x%04x, irq=%c, dma=%c, fifo threshold=%d\n",
1270 cr23 * 4, 994 cr23 * 4,
1271 (cr27 & 0x0f) ? 'A' - 1 + (cr27 & 0x0f) : '-', 995 (cr27 & 0x0f) ? 'A' - 1 + (cr27 & 0x0f) : '-',
1272 (cr26 & 0x0f) ? 'A' - 1 + (cr26 & 0x0f) : '-', 996 (cr26 & 0x0f) ? 'A' - 1 + (cr26 & 0x0f) : '-',
1273 cra & 0x0f); 997 cra & 0x0f);
1274 printk(KERN_INFO "SMSC LPT Config: enabled=%s power=%s\n", 998 printk(KERN_INFO "SMSC LPT Config: enabled=%s power=%s\n",
1275 (cr23 * 4 >= 0x100) ? "yes" : "no", 999 (cr23 * 4 >= 0x100) ? "yes" : "no",
1276 (cr1 & 4) ? "yes" : "no"); 1000 (cr1 & 4) ? "yes" : "no");
1277 printk(KERN_INFO 1001 printk(KERN_INFO
1278 "SMSC LPT Config: Port mode=%s, EPP version =%s\n", 1002 "SMSC LPT Config: Port mode=%s, EPP version =%s\n",
1279 (cr1 & 0x08) ? "Standard mode only (SPP)" 1003 (cr1 & 0x08) ? "Standard mode only (SPP)"
1280 : modes[cr4 & 0x03], 1004 : modes[cr4 & 0x03],
1281 (cr4 & 0x40) ? "1.7" : "1.9"); 1005 (cr4 & 0x40) ? "1.7" : "1.9");
1282 } 1006 }
1283 1007
1284 /* Heuristics ! BIOS setup for this mainboard device limits 1008 /* Heuristics ! BIOS setup for this mainboard device limits
1285 the choices to standard settings, i.e. io-address and IRQ 1009 the choices to standard settings, i.e. io-address and IRQ
1286 are related, however DMA can be 1 or 3, assume DMA_A=DMA1, 1010 are related, however DMA can be 1 or 3, assume DMA_A=DMA1,
1287 DMA_C=DMA3 (this is true e.g. for TYAN 1564D Tomcat IV) */ 1011 DMA_C=DMA3 (this is true e.g. for TYAN 1564D Tomcat IV) */
1288 if (cr23 * 4 >= 0x100) { /* if active */ 1012 if (cr23 * 4 >= 0x100) { /* if active */
1289 s = find_free_superio(); 1013 s = find_free_superio();
1290 if (s == NULL) 1014 if (s == NULL)
1291 printk(KERN_INFO "Super-IO: too many chips!\n"); 1015 printk(KERN_INFO "Super-IO: too many chips!\n");
1292 else { 1016 else {
1293 int d; 1017 int d;
1294 switch (cr23 * 4) { 1018 switch (cr23 * 4) {
1295 case 0x3bc: 1019 case 0x3bc:
1296 s->io = 0x3bc; 1020 s->io = 0x3bc;
1297 s->irq = 7; 1021 s->irq = 7;
1298 break; 1022 break;
1299 case 0x378: 1023 case 0x378:
1300 s->io = 0x378; 1024 s->io = 0x378;
1301 s->irq = 7; 1025 s->irq = 7;
1302 break; 1026 break;
1303 case 0x278: 1027 case 0x278:
1304 s->io = 0x278; 1028 s->io = 0x278;
1305 s->irq = 5; 1029 s->irq = 5;
1306 } 1030 }
1307 d = (cr26 & 0x0f); 1031 d = (cr26 & 0x0f);
1308 if (d == 1 || d == 3) 1032 if (d == 1 || d == 3)
1309 s->dma = d; 1033 s->dma = d;
1310 else 1034 else
1311 s->dma = PARPORT_DMA_NONE; 1035 s->dma = PARPORT_DMA_NONE;
1312 } 1036 }
1313 } 1037 }
1314 } 1038 }
1315 1039
1316 1040
1317 static void __devinit show_parconfig_winbond(int io, int key) 1041 static void __devinit show_parconfig_winbond(int io, int key)
1318 { 1042 {
1319 int cr30, cr60, cr61, cr70, cr74, crf0; 1043 int cr30, cr60, cr61, cr70, cr74, crf0;
1320 struct superio_struct *s; 1044 struct superio_struct *s;
1321 static const char *const modes[] = { 1045 static const char *const modes[] = {
1322 "Standard (SPP) and Bidirectional(PS/2)", /* 0 */ 1046 "Standard (SPP) and Bidirectional(PS/2)", /* 0 */
1323 "EPP-1.9 and SPP", 1047 "EPP-1.9 and SPP",
1324 "ECP", 1048 "ECP",
1325 "ECP and EPP-1.9", 1049 "ECP and EPP-1.9",
1326 "Standard (SPP)", 1050 "Standard (SPP)",
1327 "EPP-1.7 and SPP", /* 5 */ 1051 "EPP-1.7 and SPP", /* 5 */
1328 "undefined!", 1052 "undefined!",
1329 "ECP and EPP-1.7" }; 1053 "ECP and EPP-1.7" };
1330 static char *const irqtypes[] = { 1054 static char *const irqtypes[] = {
1331 "pulsed low, high-Z", 1055 "pulsed low, high-Z",
1332 "follows nACK" }; 1056 "follows nACK" };
1333 1057
1334 /* The registers are called compatible-PnP because the 1058 /* The registers are called compatible-PnP because the
1335 register layout is modelled after ISA-PnP, the access 1059 register layout is modelled after ISA-PnP, the access
1336 method is just another ... */ 1060 method is just another ... */
1337 outb(key, io); 1061 outb(key, io);
1338 outb(key, io); 1062 outb(key, io);
1339 outb(0x07, io); /* Register 7: Select Logical Device */ 1063 outb(0x07, io); /* Register 7: Select Logical Device */
1340 outb(0x01, io + 1); /* LD1 is Parallel Port */ 1064 outb(0x01, io + 1); /* LD1 is Parallel Port */
1341 outb(0x30, io); 1065 outb(0x30, io);
1342 cr30 = inb(io + 1); 1066 cr30 = inb(io + 1);
1343 outb(0x60, io); 1067 outb(0x60, io);
1344 cr60 = inb(io + 1); 1068 cr60 = inb(io + 1);
1345 outb(0x61, io); 1069 outb(0x61, io);
1346 cr61 = inb(io + 1); 1070 cr61 = inb(io + 1);
1347 outb(0x70, io); 1071 outb(0x70, io);
1348 cr70 = inb(io + 1); 1072 cr70 = inb(io + 1);
1349 outb(0x74, io); 1073 outb(0x74, io);
1350 cr74 = inb(io + 1); 1074 cr74 = inb(io + 1);
1351 outb(0xf0, io); 1075 outb(0xf0, io);
1352 crf0 = inb(io + 1); 1076 crf0 = inb(io + 1);
1353 outb(0xaa, io); 1077 outb(0xaa, io);
1354 1078
1355 if (verbose_probing) { 1079 if (verbose_probing) {
1356 printk(KERN_INFO 1080 printk(KERN_INFO
1357 "Winbond LPT Config: cr_30=%02x 60,61=%02x%02x 70=%02x 74=%02x, f0=%02x\n", 1081 "Winbond LPT Config: cr_30=%02x 60,61=%02x%02x 70=%02x 74=%02x, f0=%02x\n",
1358 cr30, cr60, cr61, cr70, cr74, crf0); 1082 cr30, cr60, cr61, cr70, cr74, crf0);
1359 printk(KERN_INFO "Winbond LPT Config: active=%s, io=0x%02x%02x irq=%d, ", 1083 printk(KERN_INFO "Winbond LPT Config: active=%s, io=0x%02x%02x irq=%d, ",
1360 (cr30 & 0x01) ? "yes" : "no", cr60, cr61, cr70 & 0x0f); 1084 (cr30 & 0x01) ? "yes" : "no", cr60, cr61, cr70 & 0x0f);
1361 if ((cr74 & 0x07) > 3) 1085 if ((cr74 & 0x07) > 3)
1362 printk("dma=none\n"); 1086 printk("dma=none\n");
1363 else 1087 else
1364 printk("dma=%d\n", cr74 & 0x07); 1088 printk("dma=%d\n", cr74 & 0x07);
1365 printk(KERN_INFO 1089 printk(KERN_INFO
1366 "Winbond LPT Config: irqtype=%s, ECP fifo threshold=%d\n", 1090 "Winbond LPT Config: irqtype=%s, ECP fifo threshold=%d\n",
1367 irqtypes[crf0>>7], (crf0>>3)&0x0f); 1091 irqtypes[crf0>>7], (crf0>>3)&0x0f);
1368 printk(KERN_INFO "Winbond LPT Config: Port mode=%s\n", 1092 printk(KERN_INFO "Winbond LPT Config: Port mode=%s\n",
1369 modes[crf0 & 0x07]); 1093 modes[crf0 & 0x07]);
1370 } 1094 }
1371 1095
1372 if (cr30 & 0x01) { /* the settings can be interrogated later ... */ 1096 if (cr30 & 0x01) { /* the settings can be interrogated later ... */
1373 s = find_free_superio(); 1097 s = find_free_superio();
1374 if (s == NULL) 1098 if (s == NULL)
1375 printk(KERN_INFO "Super-IO: too many chips!\n"); 1099 printk(KERN_INFO "Super-IO: too many chips!\n");
1376 else { 1100 else {
1377 s->io = (cr60 << 8) | cr61; 1101 s->io = (cr60 << 8) | cr61;
1378 s->irq = cr70 & 0x0f; 1102 s->irq = cr70 & 0x0f;
1379 s->dma = (((cr74 & 0x07) > 3) ? 1103 s->dma = (((cr74 & 0x07) > 3) ?
1380 PARPORT_DMA_NONE : (cr74 & 0x07)); 1104 PARPORT_DMA_NONE : (cr74 & 0x07));
1381 } 1105 }
1382 } 1106 }
1383 } 1107 }
1384 1108
1385 static void __devinit decode_winbond(int efer, int key, int devid, 1109 static void __devinit decode_winbond(int efer, int key, int devid,
1386 int devrev, int oldid) 1110 int devrev, int oldid)
1387 { 1111 {
1388 const char *type = "unknown"; 1112 const char *type = "unknown";
1389 int id, progif = 2; 1113 int id, progif = 2;
1390 1114
1391 if (devid == devrev) 1115 if (devid == devrev)
1392 /* simple heuristics, we happened to read some 1116 /* simple heuristics, we happened to read some
1393 non-winbond register */ 1117 non-winbond register */
1394 return; 1118 return;
1395 1119
1396 id = (devid << 8) | devrev; 1120 id = (devid << 8) | devrev;
1397 1121
1398 /* Values are from public data sheets pdf files, I can just 1122 /* Values are from public data sheets pdf files, I can just
1399 confirm 83977TF is correct :-) */ 1123 confirm 83977TF is correct :-) */
1400 if (id == 0x9771) 1124 if (id == 0x9771)
1401 type = "83977F/AF"; 1125 type = "83977F/AF";
1402 else if (id == 0x9773) 1126 else if (id == 0x9773)
1403 type = "83977TF / SMSC 97w33x/97w34x"; 1127 type = "83977TF / SMSC 97w33x/97w34x";
1404 else if (id == 0x9774) 1128 else if (id == 0x9774)
1405 type = "83977ATF"; 1129 type = "83977ATF";
1406 else if ((id & ~0x0f) == 0x5270) 1130 else if ((id & ~0x0f) == 0x5270)
1407 type = "83977CTF / SMSC 97w36x"; 1131 type = "83977CTF / SMSC 97w36x";
1408 else if ((id & ~0x0f) == 0x52f0) 1132 else if ((id & ~0x0f) == 0x52f0)
1409 type = "83977EF / SMSC 97w35x"; 1133 type = "83977EF / SMSC 97w35x";
1410 else if ((id & ~0x0f) == 0x5210) 1134 else if ((id & ~0x0f) == 0x5210)
1411 type = "83627"; 1135 type = "83627";
1412 else if ((id & ~0x0f) == 0x6010) 1136 else if ((id & ~0x0f) == 0x6010)
1413 type = "83697HF"; 1137 type = "83697HF";
1414 else if ((oldid & 0x0f) == 0x0a) { 1138 else if ((oldid & 0x0f) == 0x0a) {
1415 type = "83877F"; 1139 type = "83877F";
1416 progif = 1; 1140 progif = 1;
1417 } else if ((oldid & 0x0f) == 0x0b) { 1141 } else if ((oldid & 0x0f) == 0x0b) {
1418 type = "83877AF"; 1142 type = "83877AF";
1419 progif = 1; 1143 progif = 1;
1420 } else if ((oldid & 0x0f) == 0x0c) { 1144 } else if ((oldid & 0x0f) == 0x0c) {
1421 type = "83877TF"; 1145 type = "83877TF";
1422 progif = 1; 1146 progif = 1;
1423 } else if ((oldid & 0x0f) == 0x0d) { 1147 } else if ((oldid & 0x0f) == 0x0d) {
1424 type = "83877ATF"; 1148 type = "83877ATF";
1425 progif = 1; 1149 progif = 1;
1426 } else 1150 } else
1427 progif = 0; 1151 progif = 0;
1428 1152
1429 if (verbose_probing) 1153 if (verbose_probing)
1430 printk(KERN_INFO "Winbond chip at EFER=0x%x key=0x%02x " 1154 printk(KERN_INFO "Winbond chip at EFER=0x%x key=0x%02x "
1431 "devid=%02x devrev=%02x oldid=%02x type=%s\n", 1155 "devid=%02x devrev=%02x oldid=%02x type=%s\n",
1432 efer, key, devid, devrev, oldid, type); 1156 efer, key, devid, devrev, oldid, type);
1433 1157
1434 if (progif == 2) 1158 if (progif == 2)
1435 show_parconfig_winbond(efer, key); 1159 show_parconfig_winbond(efer, key);
1436 } 1160 }
1437 1161
1438 static void __devinit decode_smsc(int efer, int key, int devid, int devrev) 1162 static void __devinit decode_smsc(int efer, int key, int devid, int devrev)
1439 { 1163 {
1440 const char *type = "unknown"; 1164 const char *type = "unknown";
1441 void (*func)(int io, int key); 1165 void (*func)(int io, int key);
1442 int id; 1166 int id;
1443 1167
1444 if (devid == devrev) 1168 if (devid == devrev)
1445 /* simple heuristics, we happened to read some 1169 /* simple heuristics, we happened to read some
1446 non-smsc register */ 1170 non-smsc register */
1447 return; 1171 return;
1448 1172
1449 func = NULL; 1173 func = NULL;
1450 id = (devid << 8) | devrev; 1174 id = (devid << 8) | devrev;
1451 1175
1452 if (id == 0x0302) { 1176 if (id == 0x0302) {
1453 type = "37c669"; 1177 type = "37c669";
1454 func = show_parconfig_smsc37c669; 1178 func = show_parconfig_smsc37c669;
1455 } else if (id == 0x6582) 1179 } else if (id == 0x6582)
1456 type = "37c665IR"; 1180 type = "37c665IR";
1457 else if (devid == 0x65) 1181 else if (devid == 0x65)
1458 type = "37c665GT"; 1182 type = "37c665GT";
1459 else if (devid == 0x66) 1183 else if (devid == 0x66)
1460 type = "37c666GT"; 1184 type = "37c666GT";
1461 1185
1462 if (verbose_probing) 1186 if (verbose_probing)
1463 printk(KERN_INFO "SMSC chip at EFER=0x%x " 1187 printk(KERN_INFO "SMSC chip at EFER=0x%x "
1464 "key=0x%02x devid=%02x devrev=%02x type=%s\n", 1188 "key=0x%02x devid=%02x devrev=%02x type=%s\n",
1465 efer, key, devid, devrev, type); 1189 efer, key, devid, devrev, type);
1466 1190
1467 if (func) 1191 if (func)
1468 func(efer, key); 1192 func(efer, key);
1469 } 1193 }
1470 1194
1471 1195
1472 static void __devinit winbond_check(int io, int key) 1196 static void __devinit winbond_check(int io, int key)
1473 { 1197 {
1474 int origval, devid, devrev, oldid, x_devid, x_devrev, x_oldid; 1198 int origval, devid, devrev, oldid, x_devid, x_devrev, x_oldid;
1475 1199
1476 if (!request_region(io, 3, __func__)) 1200 if (!request_region(io, 3, __func__))
1477 return; 1201 return;
1478 1202
1479 origval = inb(io); /* Save original value */ 1203 origval = inb(io); /* Save original value */
1480 1204
1481 /* First probe without key */ 1205 /* First probe without key */
1482 outb(0x20, io); 1206 outb(0x20, io);
1483 x_devid = inb(io + 1); 1207 x_devid = inb(io + 1);
1484 outb(0x21, io); 1208 outb(0x21, io);
1485 x_devrev = inb(io + 1); 1209 x_devrev = inb(io + 1);
1486 outb(0x09, io); 1210 outb(0x09, io);
1487 x_oldid = inb(io + 1); 1211 x_oldid = inb(io + 1);
1488 1212
1489 outb(key, io); 1213 outb(key, io);
1490 outb(key, io); /* Write Magic Sequence to EFER, extended 1214 outb(key, io); /* Write Magic Sequence to EFER, extended
1491 function enable register */ 1215 function enable register */
1492 outb(0x20, io); /* Write EFIR, extended function index register */ 1216 outb(0x20, io); /* Write EFIR, extended function index register */
1493 devid = inb(io + 1); /* Read EFDR, extended function data register */ 1217 devid = inb(io + 1); /* Read EFDR, extended function data register */
1494 outb(0x21, io); 1218 outb(0x21, io);
1495 devrev = inb(io + 1); 1219 devrev = inb(io + 1);
1496 outb(0x09, io); 1220 outb(0x09, io);
1497 oldid = inb(io + 1); 1221 oldid = inb(io + 1);
1498 outb(0xaa, io); /* Magic Seal */ 1222 outb(0xaa, io); /* Magic Seal */
1499 1223
1500 outb(origval, io); /* in case we poked some entirely different hardware */ 1224 outb(origval, io); /* in case we poked some entirely different hardware */
1501 1225
1502 if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid)) 1226 if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid))
1503 goto out; /* protection against false positives */ 1227 goto out; /* protection against false positives */
1504 1228
1505 decode_winbond(io, key, devid, devrev, oldid); 1229 decode_winbond(io, key, devid, devrev, oldid);
1506 out: 1230 out:
1507 release_region(io, 3); 1231 release_region(io, 3);
1508 } 1232 }
1509 1233
1510 static void __devinit winbond_check2(int io, int key) 1234 static void __devinit winbond_check2(int io, int key)
1511 { 1235 {
1512 int origval[3], devid, devrev, oldid, x_devid, x_devrev, x_oldid; 1236 int origval[3], devid, devrev, oldid, x_devid, x_devrev, x_oldid;
1513 1237
1514 if (!request_region(io, 3, __func__)) 1238 if (!request_region(io, 3, __func__))
1515 return; 1239 return;
1516 1240
1517 origval[0] = inb(io); /* Save original values */ 1241 origval[0] = inb(io); /* Save original values */
1518 origval[1] = inb(io + 1); 1242 origval[1] = inb(io + 1);
1519 origval[2] = inb(io + 2); 1243 origval[2] = inb(io + 2);
1520 1244
1521 /* First probe without the key */ 1245 /* First probe without the key */
1522 outb(0x20, io + 2); 1246 outb(0x20, io + 2);
1523 x_devid = inb(io + 2); 1247 x_devid = inb(io + 2);
1524 outb(0x21, io + 1); 1248 outb(0x21, io + 1);
1525 x_devrev = inb(io + 2); 1249 x_devrev = inb(io + 2);
1526 outb(0x09, io + 1); 1250 outb(0x09, io + 1);
1527 x_oldid = inb(io + 2); 1251 x_oldid = inb(io + 2);
1528 1252
1529 outb(key, io); /* Write Magic Byte to EFER, extended 1253 outb(key, io); /* Write Magic Byte to EFER, extended
1530 function enable register */ 1254 function enable register */
1531 outb(0x20, io + 2); /* Write EFIR, extended function index register */ 1255 outb(0x20, io + 2); /* Write EFIR, extended function index register */
1532 devid = inb(io + 2); /* Read EFDR, extended function data register */ 1256 devid = inb(io + 2); /* Read EFDR, extended function data register */
1533 outb(0x21, io + 1); 1257 outb(0x21, io + 1);
1534 devrev = inb(io + 2); 1258 devrev = inb(io + 2);
1535 outb(0x09, io + 1); 1259 outb(0x09, io + 1);
1536 oldid = inb(io + 2); 1260 oldid = inb(io + 2);
1537 outb(0xaa, io); /* Magic Seal */ 1261 outb(0xaa, io); /* Magic Seal */
1538 1262
1539 outb(origval[0], io); /* in case we poked some entirely different hardware */ 1263 outb(origval[0], io); /* in case we poked some entirely different hardware */
1540 outb(origval[1], io + 1); 1264 outb(origval[1], io + 1);
1541 outb(origval[2], io + 2); 1265 outb(origval[2], io + 2);
1542 1266
1543 if (x_devid == devid && x_devrev == devrev && x_oldid == oldid) 1267 if (x_devid == devid && x_devrev == devrev && x_oldid == oldid)
1544 goto out; /* protection against false positives */ 1268 goto out; /* protection against false positives */
1545 1269
1546 decode_winbond(io, key, devid, devrev, oldid); 1270 decode_winbond(io, key, devid, devrev, oldid);
1547 out: 1271 out:
1548 release_region(io, 3); 1272 release_region(io, 3);
1549 } 1273 }
1550 1274
1551 static void __devinit smsc_check(int io, int key) 1275 static void __devinit smsc_check(int io, int key)
1552 { 1276 {
1553 int origval, id, rev, oldid, oldrev, x_id, x_rev, x_oldid, x_oldrev; 1277 int origval, id, rev, oldid, oldrev, x_id, x_rev, x_oldid, x_oldrev;
1554 1278
1555 if (!request_region(io, 3, __func__)) 1279 if (!request_region(io, 3, __func__))
1556 return; 1280 return;
1557 1281
1558 origval = inb(io); /* Save original value */ 1282 origval = inb(io); /* Save original value */
1559 1283
1560 /* First probe without the key */ 1284 /* First probe without the key */
1561 outb(0x0d, io); 1285 outb(0x0d, io);
1562 x_oldid = inb(io + 1); 1286 x_oldid = inb(io + 1);
1563 outb(0x0e, io); 1287 outb(0x0e, io);
1564 x_oldrev = inb(io + 1); 1288 x_oldrev = inb(io + 1);
1565 outb(0x20, io); 1289 outb(0x20, io);
1566 x_id = inb(io + 1); 1290 x_id = inb(io + 1);
1567 outb(0x21, io); 1291 outb(0x21, io);
1568 x_rev = inb(io + 1); 1292 x_rev = inb(io + 1);
1569 1293
1570 outb(key, io); 1294 outb(key, io);
1571 outb(key, io); /* Write Magic Sequence to EFER, extended 1295 outb(key, io); /* Write Magic Sequence to EFER, extended
1572 function enable register */ 1296 function enable register */
1573 outb(0x0d, io); /* Write EFIR, extended function index register */ 1297 outb(0x0d, io); /* Write EFIR, extended function index register */
1574 oldid = inb(io + 1); /* Read EFDR, extended function data register */ 1298 oldid = inb(io + 1); /* Read EFDR, extended function data register */
1575 outb(0x0e, io); 1299 outb(0x0e, io);
1576 oldrev = inb(io + 1); 1300 oldrev = inb(io + 1);
1577 outb(0x20, io); 1301 outb(0x20, io);
1578 id = inb(io + 1); 1302 id = inb(io + 1);
1579 outb(0x21, io); 1303 outb(0x21, io);
1580 rev = inb(io + 1); 1304 rev = inb(io + 1);
1581 outb(0xaa, io); /* Magic Seal */ 1305 outb(0xaa, io); /* Magic Seal */
1582 1306
1583 outb(origval, io); /* in case we poked some entirely different hardware */ 1307 outb(origval, io); /* in case we poked some entirely different hardware */
1584 1308
1585 if (x_id == id && x_oldrev == oldrev && 1309 if (x_id == id && x_oldrev == oldrev &&
1586 x_oldid == oldid && x_rev == rev) 1310 x_oldid == oldid && x_rev == rev)
1587 goto out; /* protection against false positives */ 1311 goto out; /* protection against false positives */
1588 1312
1589 decode_smsc(io, key, oldid, oldrev); 1313 decode_smsc(io, key, oldid, oldrev);
1590 out: 1314 out:
1591 release_region(io, 3); 1315 release_region(io, 3);
1592 } 1316 }
1593 1317
1594 1318
1595 static void __devinit detect_and_report_winbond(void) 1319 static void __devinit detect_and_report_winbond(void)
1596 { 1320 {
1597 if (verbose_probing) 1321 if (verbose_probing)
1598 printk(KERN_DEBUG "Winbond Super-IO detection, now testing ports 3F0,370,250,4E,2E ...\n"); 1322 printk(KERN_DEBUG "Winbond Super-IO detection, now testing ports 3F0,370,250,4E,2E ...\n");
1599 winbond_check(0x3f0, 0x87); 1323 winbond_check(0x3f0, 0x87);
1600 winbond_check(0x370, 0x87); 1324 winbond_check(0x370, 0x87);
1601 winbond_check(0x2e , 0x87); 1325 winbond_check(0x2e , 0x87);
1602 winbond_check(0x4e , 0x87); 1326 winbond_check(0x4e , 0x87);
1603 winbond_check(0x3f0, 0x86); 1327 winbond_check(0x3f0, 0x86);
1604 winbond_check2(0x250, 0x88); 1328 winbond_check2(0x250, 0x88);
1605 winbond_check2(0x250, 0x89); 1329 winbond_check2(0x250, 0x89);
1606 } 1330 }
1607 1331
1608 static void __devinit detect_and_report_smsc(void) 1332 static void __devinit detect_and_report_smsc(void)
1609 { 1333 {
1610 if (verbose_probing) 1334 if (verbose_probing)
1611 printk(KERN_DEBUG "SMSC Super-IO detection, now testing Ports 2F0, 370 ...\n"); 1335 printk(KERN_DEBUG "SMSC Super-IO detection, now testing Ports 2F0, 370 ...\n");
1612 smsc_check(0x3f0, 0x55); 1336 smsc_check(0x3f0, 0x55);
1613 smsc_check(0x370, 0x55); 1337 smsc_check(0x370, 0x55);
1614 smsc_check(0x3f0, 0x44); 1338 smsc_check(0x3f0, 0x44);
1615 smsc_check(0x370, 0x44); 1339 smsc_check(0x370, 0x44);
1616 } 1340 }
1617 1341
1618 static void __devinit detect_and_report_it87(void) 1342 static void __devinit detect_and_report_it87(void)
1619 { 1343 {
1620 u16 dev; 1344 u16 dev;
1621 u8 origval, r; 1345 u8 origval, r;
1622 if (verbose_probing) 1346 if (verbose_probing)
1623 printk(KERN_DEBUG "IT8705 Super-IO detection, now testing port 2E ...\n"); 1347 printk(KERN_DEBUG "IT8705 Super-IO detection, now testing port 2E ...\n");
1624 if (!request_muxed_region(0x2e, 2, __func__)) 1348 if (!request_muxed_region(0x2e, 2, __func__))
1625 return; 1349 return;
1626 origval = inb(0x2e); /* Save original value */ 1350 origval = inb(0x2e); /* Save original value */
1627 outb(0x87, 0x2e); 1351 outb(0x87, 0x2e);
1628 outb(0x01, 0x2e); 1352 outb(0x01, 0x2e);
1629 outb(0x55, 0x2e); 1353 outb(0x55, 0x2e);
1630 outb(0x55, 0x2e); 1354 outb(0x55, 0x2e);
1631 outb(0x20, 0x2e); 1355 outb(0x20, 0x2e);
1632 dev = inb(0x2f) << 8; 1356 dev = inb(0x2f) << 8;
1633 outb(0x21, 0x2e); 1357 outb(0x21, 0x2e);
1634 dev |= inb(0x2f); 1358 dev |= inb(0x2f);
1635 if (dev == 0x8712 || dev == 0x8705 || dev == 0x8715 || 1359 if (dev == 0x8712 || dev == 0x8705 || dev == 0x8715 ||
1636 dev == 0x8716 || dev == 0x8718 || dev == 0x8726) { 1360 dev == 0x8716 || dev == 0x8718 || dev == 0x8726) {
1637 printk(KERN_INFO "IT%04X SuperIO detected.\n", dev); 1361 printk(KERN_INFO "IT%04X SuperIO detected.\n", dev);
1638 outb(0x07, 0x2E); /* Parallel Port */ 1362 outb(0x07, 0x2E); /* Parallel Port */
1639 outb(0x03, 0x2F); 1363 outb(0x03, 0x2F);
1640 outb(0xF0, 0x2E); /* BOOT 0x80 off */ 1364 outb(0xF0, 0x2E); /* BOOT 0x80 off */
1641 r = inb(0x2f); 1365 r = inb(0x2f);
1642 outb(0xF0, 0x2E); 1366 outb(0xF0, 0x2E);
1643 outb(r | 8, 0x2F); 1367 outb(r | 8, 0x2F);
1644 outb(0x02, 0x2E); /* Lock */ 1368 outb(0x02, 0x2E); /* Lock */
1645 outb(0x02, 0x2F); 1369 outb(0x02, 0x2F);
1646 } else { 1370 } else {
1647 outb(origval, 0x2e); /* Oops, sorry to disturb */ 1371 outb(origval, 0x2e); /* Oops, sorry to disturb */
1648 } 1372 }
1649 release_region(0x2e, 2); 1373 release_region(0x2e, 2);
1650 } 1374 }
1651 #endif /* CONFIG_PARPORT_PC_SUPERIO */ 1375 #endif /* CONFIG_PARPORT_PC_SUPERIO */
1652 1376
1653 static struct superio_struct *find_superio(struct parport *p) 1377 static struct superio_struct *find_superio(struct parport *p)
1654 { 1378 {
1655 int i; 1379 int i;
1656 for (i = 0; i < NR_SUPERIOS; i++) 1380 for (i = 0; i < NR_SUPERIOS; i++)
1657 if (superios[i].io != p->base) 1381 if (superios[i].io != p->base)
1658 return &superios[i]; 1382 return &superios[i];
1659 return NULL; 1383 return NULL;
1660 } 1384 }
1661 1385
1662 static int get_superio_dma(struct parport *p) 1386 static int get_superio_dma(struct parport *p)
1663 { 1387 {
1664 struct superio_struct *s = find_superio(p); 1388 struct superio_struct *s = find_superio(p);
1665 if (s) 1389 if (s)
1666 return s->dma; 1390 return s->dma;
1667 return PARPORT_DMA_NONE; 1391 return PARPORT_DMA_NONE;
1668 } 1392 }
1669 1393
1670 static int get_superio_irq(struct parport *p) 1394 static int get_superio_irq(struct parport *p)
1671 { 1395 {
1672 struct superio_struct *s = find_superio(p); 1396 struct superio_struct *s = find_superio(p);
1673 if (s) 1397 if (s)
1674 return s->irq; 1398 return s->irq;
1675 return PARPORT_IRQ_NONE; 1399 return PARPORT_IRQ_NONE;
1676 } 1400 }
1677 1401
1678 1402
1679 /* --- Mode detection ------------------------------------- */ 1403 /* --- Mode detection ------------------------------------- */
1680 1404
1681 /* 1405 /*
1682 * Checks for port existence, all ports support SPP MODE 1406 * Checks for port existence, all ports support SPP MODE
1683 * Returns: 1407 * Returns:
1684 * 0 : No parallel port at this address 1408 * 0 : No parallel port at this address
1685 * PARPORT_MODE_PCSPP : SPP port detected 1409 * PARPORT_MODE_PCSPP : SPP port detected
1686 * (if the user specified an ioport himself, 1410 * (if the user specified an ioport himself,
1687 * this shall always be the case!) 1411 * this shall always be the case!)
1688 * 1412 *
1689 */ 1413 */
1690 static int parport_SPP_supported(struct parport *pb) 1414 static int parport_SPP_supported(struct parport *pb)
1691 { 1415 {
1692 unsigned char r, w; 1416 unsigned char r, w;
1693 1417
1694 /* 1418 /*
1695 * first clear an eventually pending EPP timeout 1419 * first clear an eventually pending EPP timeout
1696 * I (sailer@ife.ee.ethz.ch) have an SMSC chipset 1420 * I (sailer@ife.ee.ethz.ch) have an SMSC chipset
1697 * that does not even respond to SPP cycles if an EPP 1421 * that does not even respond to SPP cycles if an EPP
1698 * timeout is pending 1422 * timeout is pending
1699 */ 1423 */
1700 clear_epp_timeout(pb); 1424 clear_epp_timeout(pb);
1701 1425
1702 /* Do a simple read-write test to make sure the port exists. */ 1426 /* Do a simple read-write test to make sure the port exists. */
1703 w = 0xc; 1427 w = 0xc;
1704 outb(w, CONTROL(pb)); 1428 outb(w, CONTROL(pb));
1705 1429
1706 /* Is there a control register that we can read from? Some 1430 /* Is there a control register that we can read from? Some
1707 * ports don't allow reads, so read_control just returns a 1431 * ports don't allow reads, so read_control just returns a
1708 * software copy. Some ports _do_ allow reads, so bypass the 1432 * software copy. Some ports _do_ allow reads, so bypass the
1709 * software copy here. In addition, some bits aren't 1433 * software copy here. In addition, some bits aren't
1710 * writable. */ 1434 * writable. */
1711 r = inb(CONTROL(pb)); 1435 r = inb(CONTROL(pb));
1712 if ((r & 0xf) == w) { 1436 if ((r & 0xf) == w) {
1713 w = 0xe; 1437 w = 0xe;
1714 outb(w, CONTROL(pb)); 1438 outb(w, CONTROL(pb));
1715 r = inb(CONTROL(pb)); 1439 r = inb(CONTROL(pb));
1716 outb(0xc, CONTROL(pb)); 1440 outb(0xc, CONTROL(pb));
1717 if ((r & 0xf) == w) 1441 if ((r & 0xf) == w)
1718 return PARPORT_MODE_PCSPP; 1442 return PARPORT_MODE_PCSPP;
1719 } 1443 }
1720 1444
1721 if (user_specified) 1445 if (user_specified)
1722 /* That didn't work, but the user thinks there's a 1446 /* That didn't work, but the user thinks there's a
1723 * port here. */ 1447 * port here. */
1724 printk(KERN_INFO "parport 0x%lx (WARNING): CTR: " 1448 printk(KERN_INFO "parport 0x%lx (WARNING): CTR: "
1725 "wrote 0x%02x, read 0x%02x\n", pb->base, w, r); 1449 "wrote 0x%02x, read 0x%02x\n", pb->base, w, r);
1726 1450
1727 /* Try the data register. The data lines aren't tri-stated at 1451 /* Try the data register. The data lines aren't tri-stated at
1728 * this stage, so we expect back what we wrote. */ 1452 * this stage, so we expect back what we wrote. */
1729 w = 0xaa; 1453 w = 0xaa;
1730 parport_pc_write_data(pb, w); 1454 parport_pc_write_data(pb, w);
1731 r = parport_pc_read_data(pb); 1455 r = parport_pc_read_data(pb);
1732 if (r == w) { 1456 if (r == w) {
1733 w = 0x55; 1457 w = 0x55;
1734 parport_pc_write_data(pb, w); 1458 parport_pc_write_data(pb, w);
1735 r = parport_pc_read_data(pb); 1459 r = parport_pc_read_data(pb);
1736 if (r == w) 1460 if (r == w)
1737 return PARPORT_MODE_PCSPP; 1461 return PARPORT_MODE_PCSPP;
1738 } 1462 }
1739 1463
1740 if (user_specified) { 1464 if (user_specified) {
1741 /* Didn't work, but the user is convinced this is the 1465 /* Didn't work, but the user is convinced this is the
1742 * place. */ 1466 * place. */
1743 printk(KERN_INFO "parport 0x%lx (WARNING): DATA: " 1467 printk(KERN_INFO "parport 0x%lx (WARNING): DATA: "
1744 "wrote 0x%02x, read 0x%02x\n", pb->base, w, r); 1468 "wrote 0x%02x, read 0x%02x\n", pb->base, w, r);
1745 printk(KERN_INFO "parport 0x%lx: You gave this address, " 1469 printk(KERN_INFO "parport 0x%lx: You gave this address, "
1746 "but there is probably no parallel port there!\n", 1470 "but there is probably no parallel port there!\n",
1747 pb->base); 1471 pb->base);
1748 } 1472 }
1749 1473
1750 /* It's possible that we can't read the control register or 1474 /* It's possible that we can't read the control register or
1751 * the data register. In that case just believe the user. */ 1475 * the data register. In that case just believe the user. */
1752 if (user_specified) 1476 if (user_specified)
1753 return PARPORT_MODE_PCSPP; 1477 return PARPORT_MODE_PCSPP;
1754 1478
1755 return 0; 1479 return 0;
1756 } 1480 }
1757 1481
1758 /* Check for ECR 1482 /* Check for ECR
1759 * 1483 *
1760 * Old style XT ports alias io ports every 0x400, hence accessing ECR 1484 * Old style XT ports alias io ports every 0x400, hence accessing ECR
1761 * on these cards actually accesses the CTR. 1485 * on these cards actually accesses the CTR.
1762 * 1486 *
1763 * Modern cards don't do this but reading from ECR will return 0xff 1487 * Modern cards don't do this but reading from ECR will return 0xff
1764 * regardless of what is written here if the card does NOT support 1488 * regardless of what is written here if the card does NOT support
1765 * ECP. 1489 * ECP.
1766 * 1490 *
1767 * We first check to see if ECR is the same as CTR. If not, the low 1491 * We first check to see if ECR is the same as CTR. If not, the low
1768 * two bits of ECR aren't writable, so we check by writing ECR and 1492 * two bits of ECR aren't writable, so we check by writing ECR and
1769 * reading it back to see if it's what we expect. 1493 * reading it back to see if it's what we expect.
1770 */ 1494 */
1771 static int parport_ECR_present(struct parport *pb) 1495 static int parport_ECR_present(struct parport *pb)
1772 { 1496 {
1773 struct parport_pc_private *priv = pb->private_data; 1497 struct parport_pc_private *priv = pb->private_data;
1774 unsigned char r = 0xc; 1498 unsigned char r = 0xc;
1775 1499
1776 outb(r, CONTROL(pb)); 1500 outb(r, CONTROL(pb));
1777 if ((inb(ECONTROL(pb)) & 0x3) == (r & 0x3)) { 1501 if ((inb(ECONTROL(pb)) & 0x3) == (r & 0x3)) {
1778 outb(r ^ 0x2, CONTROL(pb)); /* Toggle bit 1 */ 1502 outb(r ^ 0x2, CONTROL(pb)); /* Toggle bit 1 */
1779 1503
1780 r = inb(CONTROL(pb)); 1504 r = inb(CONTROL(pb));
1781 if ((inb(ECONTROL(pb)) & 0x2) == (r & 0x2)) 1505 if ((inb(ECONTROL(pb)) & 0x2) == (r & 0x2))
1782 goto no_reg; /* Sure that no ECR register exists */ 1506 goto no_reg; /* Sure that no ECR register exists */
1783 } 1507 }
1784 1508
1785 if ((inb(ECONTROL(pb)) & 0x3) != 0x1) 1509 if ((inb(ECONTROL(pb)) & 0x3) != 0x1)
1786 goto no_reg; 1510 goto no_reg;
1787 1511
1788 ECR_WRITE(pb, 0x34); 1512 ECR_WRITE(pb, 0x34);
1789 if (inb(ECONTROL(pb)) != 0x35) 1513 if (inb(ECONTROL(pb)) != 0x35)
1790 goto no_reg; 1514 goto no_reg;
1791 1515
1792 priv->ecr = 1; 1516 priv->ecr = 1;
1793 outb(0xc, CONTROL(pb)); 1517 outb(0xc, CONTROL(pb));
1794 1518
1795 /* Go to mode 000 */ 1519 /* Go to mode 000 */
1796 frob_set_mode(pb, ECR_SPP); 1520 frob_set_mode(pb, ECR_SPP);
1797 1521
1798 return 1; 1522 return 1;
1799 1523
1800 no_reg: 1524 no_reg:
1801 outb(0xc, CONTROL(pb)); 1525 outb(0xc, CONTROL(pb));
1802 return 0; 1526 return 0;
1803 } 1527 }
1804 1528
1805 #ifdef CONFIG_PARPORT_1284 1529 #ifdef CONFIG_PARPORT_1284
1806 /* Detect PS/2 support. 1530 /* Detect PS/2 support.
1807 * 1531 *
1808 * Bit 5 (0x20) sets the PS/2 data direction; setting this high 1532 * Bit 5 (0x20) sets the PS/2 data direction; setting this high
1809 * allows us to read data from the data lines. In theory we would get back 1533 * allows us to read data from the data lines. In theory we would get back
1810 * 0xff but any peripheral attached to the port may drag some or all of the 1534 * 0xff but any peripheral attached to the port may drag some or all of the
1811 * lines down to zero. So if we get back anything that isn't the contents 1535 * lines down to zero. So if we get back anything that isn't the contents
1812 * of the data register we deem PS/2 support to be present. 1536 * of the data register we deem PS/2 support to be present.
1813 * 1537 *
1814 * Some SPP ports have "half PS/2" ability - you can't turn off the line 1538 * Some SPP ports have "half PS/2" ability - you can't turn off the line
1815 * drivers, but an external peripheral with sufficiently beefy drivers of 1539 * drivers, but an external peripheral with sufficiently beefy drivers of
1816 * its own can overpower them and assert its own levels onto the bus, from 1540 * its own can overpower them and assert its own levels onto the bus, from
1817 * where they can then be read back as normal. Ports with this property 1541 * where they can then be read back as normal. Ports with this property
1818 * and the right type of device attached are likely to fail the SPP test, 1542 * and the right type of device attached are likely to fail the SPP test,
1819 * (as they will appear to have stuck bits) and so the fact that they might 1543 * (as they will appear to have stuck bits) and so the fact that they might
1820 * be misdetected here is rather academic. 1544 * be misdetected here is rather academic.
1821 */ 1545 */
1822 1546
1823 static int parport_PS2_supported(struct parport *pb) 1547 static int parport_PS2_supported(struct parport *pb)
1824 { 1548 {
1825 int ok = 0; 1549 int ok = 0;
1826 1550
1827 clear_epp_timeout(pb); 1551 clear_epp_timeout(pb);
1828 1552
1829 /* try to tri-state the buffer */ 1553 /* try to tri-state the buffer */
1830 parport_pc_data_reverse(pb); 1554 parport_pc_data_reverse(pb);
1831 1555
1832 parport_pc_write_data(pb, 0x55); 1556 parport_pc_write_data(pb, 0x55);
1833 if (parport_pc_read_data(pb) != 0x55) 1557 if (parport_pc_read_data(pb) != 0x55)
1834 ok++; 1558 ok++;
1835 1559
1836 parport_pc_write_data(pb, 0xaa); 1560 parport_pc_write_data(pb, 0xaa);
1837 if (parport_pc_read_data(pb) != 0xaa) 1561 if (parport_pc_read_data(pb) != 0xaa)
1838 ok++; 1562 ok++;
1839 1563
1840 /* cancel input mode */ 1564 /* cancel input mode */
1841 parport_pc_data_forward(pb); 1565 parport_pc_data_forward(pb);
1842 1566
1843 if (ok) { 1567 if (ok) {
1844 pb->modes |= PARPORT_MODE_TRISTATE; 1568 pb->modes |= PARPORT_MODE_TRISTATE;
1845 } else { 1569 } else {
1846 struct parport_pc_private *priv = pb->private_data; 1570 struct parport_pc_private *priv = pb->private_data;
1847 priv->ctr_writable &= ~0x20; 1571 priv->ctr_writable &= ~0x20;
1848 } 1572 }
1849 1573
1850 return ok; 1574 return ok;
1851 } 1575 }
1852 1576
1853 #ifdef CONFIG_PARPORT_PC_FIFO 1577 #ifdef CONFIG_PARPORT_PC_FIFO
1854 static int parport_ECP_supported(struct parport *pb) 1578 static int parport_ECP_supported(struct parport *pb)
1855 { 1579 {
1856 int i; 1580 int i;
1857 int config, configb; 1581 int config, configb;
1858 int pword; 1582 int pword;
1859 struct parport_pc_private *priv = pb->private_data; 1583 struct parport_pc_private *priv = pb->private_data;
1860 /* Translate ECP intrLine to ISA irq value */ 1584 /* Translate ECP intrLine to ISA irq value */
1861 static const int intrline[] = { 0, 7, 9, 10, 11, 14, 15, 5 }; 1585 static const int intrline[] = { 0, 7, 9, 10, 11, 14, 15, 5 };
1862 1586
1863 /* If there is no ECR, we have no hope of supporting ECP. */ 1587 /* If there is no ECR, we have no hope of supporting ECP. */
1864 if (!priv->ecr) 1588 if (!priv->ecr)
1865 return 0; 1589 return 0;
1866 1590
1867 /* Find out FIFO depth */ 1591 /* Find out FIFO depth */
1868 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ 1592 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */
1869 ECR_WRITE(pb, ECR_TST << 5); /* TEST FIFO */ 1593 ECR_WRITE(pb, ECR_TST << 5); /* TEST FIFO */
1870 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02); i++) 1594 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02); i++)
1871 outb(0xaa, FIFO(pb)); 1595 outb(0xaa, FIFO(pb));
1872 1596
1873 /* 1597 /*
1874 * Using LGS chipset it uses ECR register, but 1598 * Using LGS chipset it uses ECR register, but
1875 * it doesn't support ECP or FIFO MODE 1599 * it doesn't support ECP or FIFO MODE
1876 */ 1600 */
1877 if (i == 1024) { 1601 if (i == 1024) {
1878 ECR_WRITE(pb, ECR_SPP << 5); 1602 ECR_WRITE(pb, ECR_SPP << 5);
1879 return 0; 1603 return 0;
1880 } 1604 }
1881 1605
1882 priv->fifo_depth = i; 1606 priv->fifo_depth = i;
1883 if (verbose_probing) 1607 if (verbose_probing)
1884 printk(KERN_DEBUG "0x%lx: FIFO is %d bytes\n", pb->base, i); 1608 printk(KERN_DEBUG "0x%lx: FIFO is %d bytes\n", pb->base, i);
1885 1609
1886 /* Find out writeIntrThreshold */ 1610 /* Find out writeIntrThreshold */
1887 frob_econtrol(pb, 1<<2, 1<<2); 1611 frob_econtrol(pb, 1<<2, 1<<2);
1888 frob_econtrol(pb, 1<<2, 0); 1612 frob_econtrol(pb, 1<<2, 0);
1889 for (i = 1; i <= priv->fifo_depth; i++) { 1613 for (i = 1; i <= priv->fifo_depth; i++) {
1890 inb(FIFO(pb)); 1614 inb(FIFO(pb));
1891 udelay(50); 1615 udelay(50);
1892 if (inb(ECONTROL(pb)) & (1<<2)) 1616 if (inb(ECONTROL(pb)) & (1<<2))
1893 break; 1617 break;
1894 } 1618 }
1895 1619
1896 if (i <= priv->fifo_depth) { 1620 if (i <= priv->fifo_depth) {
1897 if (verbose_probing) 1621 if (verbose_probing)
1898 printk(KERN_DEBUG "0x%lx: writeIntrThreshold is %d\n", 1622 printk(KERN_DEBUG "0x%lx: writeIntrThreshold is %d\n",
1899 pb->base, i); 1623 pb->base, i);
1900 } else 1624 } else
1901 /* Number of bytes we know we can write if we get an 1625 /* Number of bytes we know we can write if we get an
1902 interrupt. */ 1626 interrupt. */
1903 i = 0; 1627 i = 0;
1904 1628
1905 priv->writeIntrThreshold = i; 1629 priv->writeIntrThreshold = i;
1906 1630
1907 /* Find out readIntrThreshold */ 1631 /* Find out readIntrThreshold */
1908 frob_set_mode(pb, ECR_PS2); /* Reset FIFO and enable PS2 */ 1632 frob_set_mode(pb, ECR_PS2); /* Reset FIFO and enable PS2 */
1909 parport_pc_data_reverse(pb); /* Must be in PS2 mode */ 1633 parport_pc_data_reverse(pb); /* Must be in PS2 mode */
1910 frob_set_mode(pb, ECR_TST); /* Test FIFO */ 1634 frob_set_mode(pb, ECR_TST); /* Test FIFO */
1911 frob_econtrol(pb, 1<<2, 1<<2); 1635 frob_econtrol(pb, 1<<2, 1<<2);
1912 frob_econtrol(pb, 1<<2, 0); 1636 frob_econtrol(pb, 1<<2, 0);
1913 for (i = 1; i <= priv->fifo_depth; i++) { 1637 for (i = 1; i <= priv->fifo_depth; i++) {
1914 outb(0xaa, FIFO(pb)); 1638 outb(0xaa, FIFO(pb));
1915 if (inb(ECONTROL(pb)) & (1<<2)) 1639 if (inb(ECONTROL(pb)) & (1<<2))
1916 break; 1640 break;
1917 } 1641 }
1918 1642
1919 if (i <= priv->fifo_depth) { 1643 if (i <= priv->fifo_depth) {
1920 if (verbose_probing) 1644 if (verbose_probing)
1921 printk(KERN_INFO "0x%lx: readIntrThreshold is %d\n", 1645 printk(KERN_INFO "0x%lx: readIntrThreshold is %d\n",
1922 pb->base, i); 1646 pb->base, i);
1923 } else 1647 } else
1924 /* Number of bytes we can read if we get an interrupt. */ 1648 /* Number of bytes we can read if we get an interrupt. */
1925 i = 0; 1649 i = 0;
1926 1650
1927 priv->readIntrThreshold = i; 1651 priv->readIntrThreshold = i;
1928 1652
1929 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ 1653 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */
1930 ECR_WRITE(pb, 0xf4); /* Configuration mode */ 1654 ECR_WRITE(pb, 0xf4); /* Configuration mode */
1931 config = inb(CONFIGA(pb)); 1655 config = inb(CONFIGA(pb));
1932 pword = (config >> 4) & 0x7; 1656 pword = (config >> 4) & 0x7;
1933 switch (pword) { 1657 switch (pword) {
1934 case 0: 1658 case 0:
1935 pword = 2; 1659 pword = 2;
1936 printk(KERN_WARNING "0x%lx: Unsupported pword size!\n", 1660 printk(KERN_WARNING "0x%lx: Unsupported pword size!\n",
1937 pb->base); 1661 pb->base);
1938 break; 1662 break;
1939 case 2: 1663 case 2:
1940 pword = 4; 1664 pword = 4;
1941 printk(KERN_WARNING "0x%lx: Unsupported pword size!\n", 1665 printk(KERN_WARNING "0x%lx: Unsupported pword size!\n",
1942 pb->base); 1666 pb->base);
1943 break; 1667 break;
1944 default: 1668 default:
1945 printk(KERN_WARNING "0x%lx: Unknown implementation ID\n", 1669 printk(KERN_WARNING "0x%lx: Unknown implementation ID\n",
1946 pb->base); 1670 pb->base);
1947 /* Assume 1 */ 1671 /* Assume 1 */
1948 case 1: 1672 case 1:
1949 pword = 1; 1673 pword = 1;
1950 } 1674 }
1951 priv->pword = pword; 1675 priv->pword = pword;
1952 1676
1953 if (verbose_probing) { 1677 if (verbose_probing) {
1954 printk(KERN_DEBUG "0x%lx: PWord is %d bits\n", 1678 printk(KERN_DEBUG "0x%lx: PWord is %d bits\n",
1955 pb->base, 8 * pword); 1679 pb->base, 8 * pword);
1956 1680
1957 printk(KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n", pb->base, 1681 printk(KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n", pb->base,
1958 config & 0x80 ? "Level" : "Pulses"); 1682 config & 0x80 ? "Level" : "Pulses");
1959 1683
1960 configb = inb(CONFIGB(pb)); 1684 configb = inb(CONFIGB(pb));
1961 printk(KERN_DEBUG "0x%lx: ECP port cfgA=0x%02x cfgB=0x%02x\n", 1685 printk(KERN_DEBUG "0x%lx: ECP port cfgA=0x%02x cfgB=0x%02x\n",
1962 pb->base, config, configb); 1686 pb->base, config, configb);
1963 printk(KERN_DEBUG "0x%lx: ECP settings irq=", pb->base); 1687 printk(KERN_DEBUG "0x%lx: ECP settings irq=", pb->base);
1964 if ((configb >> 3) & 0x07) 1688 if ((configb >> 3) & 0x07)
1965 printk("%d", intrline[(configb >> 3) & 0x07]); 1689 printk("%d", intrline[(configb >> 3) & 0x07]);
1966 else 1690 else
1967 printk("<none or set by other means>"); 1691 printk("<none or set by other means>");
1968 printk(" dma="); 1692 printk(" dma=");
1969 if ((configb & 0x03) == 0x00) 1693 if ((configb & 0x03) == 0x00)
1970 printk("<none or set by other means>\n"); 1694 printk("<none or set by other means>\n");
1971 else 1695 else
1972 printk("%d\n", configb & 0x07); 1696 printk("%d\n", configb & 0x07);
1973 } 1697 }
1974 1698
1975 /* Go back to mode 000 */ 1699 /* Go back to mode 000 */
1976 frob_set_mode(pb, ECR_SPP); 1700 frob_set_mode(pb, ECR_SPP);
1977 1701
1978 return 1; 1702 return 1;
1979 } 1703 }
1980 #endif 1704 #endif
1981 1705
1982 static int parport_ECPPS2_supported(struct parport *pb) 1706 static int parport_ECPPS2_supported(struct parport *pb)
1983 { 1707 {
1984 const struct parport_pc_private *priv = pb->private_data; 1708 const struct parport_pc_private *priv = pb->private_data;
1985 int result; 1709 int result;
1986 unsigned char oecr; 1710 unsigned char oecr;
1987 1711
1988 if (!priv->ecr) 1712 if (!priv->ecr)
1989 return 0; 1713 return 0;
1990 1714
1991 oecr = inb(ECONTROL(pb)); 1715 oecr = inb(ECONTROL(pb));
1992 ECR_WRITE(pb, ECR_PS2 << 5); 1716 ECR_WRITE(pb, ECR_PS2 << 5);
1993 result = parport_PS2_supported(pb); 1717 result = parport_PS2_supported(pb);
1994 ECR_WRITE(pb, oecr); 1718 ECR_WRITE(pb, oecr);
1995 return result; 1719 return result;
1996 } 1720 }
1997 1721
1998 /* EPP mode detection */ 1722 /* EPP mode detection */
1999 1723
2000 static int parport_EPP_supported(struct parport *pb) 1724 static int parport_EPP_supported(struct parport *pb)
2001 { 1725 {
2002 const struct parport_pc_private *priv = pb->private_data; 1726 const struct parport_pc_private *priv = pb->private_data;
2003 1727
2004 /* 1728 /*
2005 * Theory: 1729 * Theory:
2006 * Bit 0 of STR is the EPP timeout bit, this bit is 0 1730 * Bit 0 of STR is the EPP timeout bit, this bit is 0
2007 * when EPP is possible and is set high when an EPP timeout 1731 * when EPP is possible and is set high when an EPP timeout
2008 * occurs (EPP uses the HALT line to stop the CPU while it does 1732 * occurs (EPP uses the HALT line to stop the CPU while it does
2009 * the byte transfer, an EPP timeout occurs if the attached 1733 * the byte transfer, an EPP timeout occurs if the attached
2010 * device fails to respond after 10 micro seconds). 1734 * device fails to respond after 10 micro seconds).
2011 * 1735 *
2012 * This bit is cleared by either reading it (National Semi) 1736 * This bit is cleared by either reading it (National Semi)
2013 * or writing a 1 to the bit (SMC, UMC, WinBond), others ??? 1737 * or writing a 1 to the bit (SMC, UMC, WinBond), others ???
2014 * This bit is always high in non EPP modes. 1738 * This bit is always high in non EPP modes.
2015 */ 1739 */
2016 1740
2017 /* If EPP timeout bit clear then EPP available */ 1741 /* If EPP timeout bit clear then EPP available */
2018 if (!clear_epp_timeout(pb)) 1742 if (!clear_epp_timeout(pb))
2019 return 0; /* No way to clear timeout */ 1743 return 0; /* No way to clear timeout */
2020 1744
2021 /* Check for Intel bug. */ 1745 /* Check for Intel bug. */
2022 if (priv->ecr) { 1746 if (priv->ecr) {
2023 unsigned char i; 1747 unsigned char i;
2024 for (i = 0x00; i < 0x80; i += 0x20) { 1748 for (i = 0x00; i < 0x80; i += 0x20) {
2025 ECR_WRITE(pb, i); 1749 ECR_WRITE(pb, i);
2026 if (clear_epp_timeout(pb)) { 1750 if (clear_epp_timeout(pb)) {
2027 /* Phony EPP in ECP. */ 1751 /* Phony EPP in ECP. */
2028 return 0; 1752 return 0;
2029 } 1753 }
2030 } 1754 }
2031 } 1755 }
2032 1756
2033 pb->modes |= PARPORT_MODE_EPP; 1757 pb->modes |= PARPORT_MODE_EPP;
2034 1758
2035 /* Set up access functions to use EPP hardware. */ 1759 /* Set up access functions to use EPP hardware. */
2036 pb->ops->epp_read_data = parport_pc_epp_read_data; 1760 pb->ops->epp_read_data = parport_pc_epp_read_data;
2037 pb->ops->epp_write_data = parport_pc_epp_write_data; 1761 pb->ops->epp_write_data = parport_pc_epp_write_data;
2038 pb->ops->epp_read_addr = parport_pc_epp_read_addr; 1762 pb->ops->epp_read_addr = parport_pc_epp_read_addr;
2039 pb->ops->epp_write_addr = parport_pc_epp_write_addr; 1763 pb->ops->epp_write_addr = parport_pc_epp_write_addr;
2040 1764
2041 return 1; 1765 return 1;
2042 } 1766 }
2043 1767
2044 static int parport_ECPEPP_supported(struct parport *pb) 1768 static int parport_ECPEPP_supported(struct parport *pb)
2045 { 1769 {
2046 struct parport_pc_private *priv = pb->private_data; 1770 struct parport_pc_private *priv = pb->private_data;
2047 int result; 1771 int result;
2048 unsigned char oecr; 1772 unsigned char oecr;
2049 1773
2050 if (!priv->ecr) 1774 if (!priv->ecr)
2051 return 0; 1775 return 0;
2052 1776
2053 oecr = inb(ECONTROL(pb)); 1777 oecr = inb(ECONTROL(pb));
2054 /* Search for SMC style EPP+ECP mode */ 1778 /* Search for SMC style EPP+ECP mode */
2055 ECR_WRITE(pb, 0x80); 1779 ECR_WRITE(pb, 0x80);
2056 outb(0x04, CONTROL(pb)); 1780 outb(0x04, CONTROL(pb));
2057 result = parport_EPP_supported(pb); 1781 result = parport_EPP_supported(pb);
2058 1782
2059 ECR_WRITE(pb, oecr); 1783 ECR_WRITE(pb, oecr);
2060 1784
2061 if (result) { 1785 if (result) {
2062 /* Set up access functions to use ECP+EPP hardware. */ 1786 /* Set up access functions to use ECP+EPP hardware. */
2063 pb->ops->epp_read_data = parport_pc_ecpepp_read_data; 1787 pb->ops->epp_read_data = parport_pc_ecpepp_read_data;
2064 pb->ops->epp_write_data = parport_pc_ecpepp_write_data; 1788 pb->ops->epp_write_data = parport_pc_ecpepp_write_data;
2065 pb->ops->epp_read_addr = parport_pc_ecpepp_read_addr; 1789 pb->ops->epp_read_addr = parport_pc_ecpepp_read_addr;
2066 pb->ops->epp_write_addr = parport_pc_ecpepp_write_addr; 1790 pb->ops->epp_write_addr = parport_pc_ecpepp_write_addr;
2067 } 1791 }
2068 1792
2069 return result; 1793 return result;
2070 } 1794 }
2071 1795
2072 #else /* No IEEE 1284 support */ 1796 #else /* No IEEE 1284 support */
2073 1797
2074 /* Don't bother probing for modes we know we won't use. */ 1798 /* Don't bother probing for modes we know we won't use. */
2075 static int __devinit parport_PS2_supported(struct parport *pb) { return 0; } 1799 static int __devinit parport_PS2_supported(struct parport *pb) { return 0; }
2076 #ifdef CONFIG_PARPORT_PC_FIFO 1800 #ifdef CONFIG_PARPORT_PC_FIFO
2077 static int parport_ECP_supported(struct parport *pb) 1801 static int parport_ECP_supported(struct parport *pb)
2078 { 1802 {
2079 return 0; 1803 return 0;
2080 } 1804 }
2081 #endif 1805 #endif
2082 static int __devinit parport_EPP_supported(struct parport *pb) 1806 static int __devinit parport_EPP_supported(struct parport *pb)
2083 { 1807 {
2084 return 0; 1808 return 0;
2085 } 1809 }
2086 1810
2087 static int __devinit parport_ECPEPP_supported(struct parport *pb) 1811 static int __devinit parport_ECPEPP_supported(struct parport *pb)
2088 { 1812 {
2089 return 0; 1813 return 0;
2090 } 1814 }
2091 1815
2092 static int __devinit parport_ECPPS2_supported(struct parport *pb) 1816 static int __devinit parport_ECPPS2_supported(struct parport *pb)
2093 { 1817 {
2094 return 0; 1818 return 0;
2095 } 1819 }
2096 1820
2097 #endif /* No IEEE 1284 support */ 1821 #endif /* No IEEE 1284 support */
2098 1822
2099 /* --- IRQ detection -------------------------------------- */ 1823 /* --- IRQ detection -------------------------------------- */
2100 1824
2101 /* Only if supports ECP mode */ 1825 /* Only if supports ECP mode */
2102 static int programmable_irq_support(struct parport *pb) 1826 static int programmable_irq_support(struct parport *pb)
2103 { 1827 {
2104 int irq, intrLine; 1828 int irq, intrLine;
2105 unsigned char oecr = inb(ECONTROL(pb)); 1829 unsigned char oecr = inb(ECONTROL(pb));
2106 static const int lookup[8] = { 1830 static const int lookup[8] = {
2107 PARPORT_IRQ_NONE, 7, 9, 10, 11, 14, 15, 5 1831 PARPORT_IRQ_NONE, 7, 9, 10, 11, 14, 15, 5
2108 }; 1832 };
2109 1833
2110 ECR_WRITE(pb, ECR_CNF << 5); /* Configuration MODE */ 1834 ECR_WRITE(pb, ECR_CNF << 5); /* Configuration MODE */
2111 1835
2112 intrLine = (inb(CONFIGB(pb)) >> 3) & 0x07; 1836 intrLine = (inb(CONFIGB(pb)) >> 3) & 0x07;
2113 irq = lookup[intrLine]; 1837 irq = lookup[intrLine];
2114 1838
2115 ECR_WRITE(pb, oecr); 1839 ECR_WRITE(pb, oecr);
2116 return irq; 1840 return irq;
2117 } 1841 }
2118 1842
2119 static int irq_probe_ECP(struct parport *pb) 1843 static int irq_probe_ECP(struct parport *pb)
2120 { 1844 {
2121 int i; 1845 int i;
2122 unsigned long irqs; 1846 unsigned long irqs;
2123 1847
2124 irqs = probe_irq_on(); 1848 irqs = probe_irq_on();
2125 1849
2126 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */ 1850 ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */
2127 ECR_WRITE(pb, (ECR_TST << 5) | 0x04); 1851 ECR_WRITE(pb, (ECR_TST << 5) | 0x04);
2128 ECR_WRITE(pb, ECR_TST << 5); 1852 ECR_WRITE(pb, ECR_TST << 5);
2129 1853
2130 /* If Full FIFO sure that writeIntrThreshold is generated */ 1854 /* If Full FIFO sure that writeIntrThreshold is generated */
2131 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02) ; i++) 1855 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02) ; i++)
2132 outb(0xaa, FIFO(pb)); 1856 outb(0xaa, FIFO(pb));
2133 1857
2134 pb->irq = probe_irq_off(irqs); 1858 pb->irq = probe_irq_off(irqs);
2135 ECR_WRITE(pb, ECR_SPP << 5); 1859 ECR_WRITE(pb, ECR_SPP << 5);
2136 1860
2137 if (pb->irq <= 0) 1861 if (pb->irq <= 0)
2138 pb->irq = PARPORT_IRQ_NONE; 1862 pb->irq = PARPORT_IRQ_NONE;
2139 1863
2140 return pb->irq; 1864 return pb->irq;
2141 } 1865 }
2142 1866
2143 /* 1867 /*
2144 * This detection seems that only works in National Semiconductors 1868 * This detection seems that only works in National Semiconductors
2145 * This doesn't work in SMC, LGS, and Winbond 1869 * This doesn't work in SMC, LGS, and Winbond
2146 */ 1870 */
2147 static int irq_probe_EPP(struct parport *pb) 1871 static int irq_probe_EPP(struct parport *pb)
2148 { 1872 {
2149 #ifndef ADVANCED_DETECT 1873 #ifndef ADVANCED_DETECT
2150 return PARPORT_IRQ_NONE; 1874 return PARPORT_IRQ_NONE;
2151 #else 1875 #else
2152 int irqs; 1876 int irqs;
2153 unsigned char oecr; 1877 unsigned char oecr;
2154 1878
2155 if (pb->modes & PARPORT_MODE_PCECR) 1879 if (pb->modes & PARPORT_MODE_PCECR)
2156 oecr = inb(ECONTROL(pb)); 1880 oecr = inb(ECONTROL(pb));
2157 1881
2158 irqs = probe_irq_on(); 1882 irqs = probe_irq_on();
2159 1883
2160 if (pb->modes & PARPORT_MODE_PCECR) 1884 if (pb->modes & PARPORT_MODE_PCECR)
2161 frob_econtrol(pb, 0x10, 0x10); 1885 frob_econtrol(pb, 0x10, 0x10);
2162 1886
2163 clear_epp_timeout(pb); 1887 clear_epp_timeout(pb);
2164 parport_pc_frob_control(pb, 0x20, 0x20); 1888 parport_pc_frob_control(pb, 0x20, 0x20);
2165 parport_pc_frob_control(pb, 0x10, 0x10); 1889 parport_pc_frob_control(pb, 0x10, 0x10);
2166 clear_epp_timeout(pb); 1890 clear_epp_timeout(pb);
2167 1891
2168 /* Device isn't expecting an EPP read 1892 /* Device isn't expecting an EPP read
2169 * and generates an IRQ. 1893 * and generates an IRQ.
2170 */ 1894 */
2171 parport_pc_read_epp(pb); 1895 parport_pc_read_epp(pb);
2172 udelay(20); 1896 udelay(20);
2173 1897
2174 pb->irq = probe_irq_off(irqs); 1898 pb->irq = probe_irq_off(irqs);
2175 if (pb->modes & PARPORT_MODE_PCECR) 1899 if (pb->modes & PARPORT_MODE_PCECR)
2176 ECR_WRITE(pb, oecr); 1900 ECR_WRITE(pb, oecr);
2177 parport_pc_write_control(pb, 0xc); 1901 parport_pc_write_control(pb, 0xc);
2178 1902
2179 if (pb->irq <= 0) 1903 if (pb->irq <= 0)
2180 pb->irq = PARPORT_IRQ_NONE; 1904 pb->irq = PARPORT_IRQ_NONE;
2181 1905
2182 return pb->irq; 1906 return pb->irq;
2183 #endif /* Advanced detection */ 1907 #endif /* Advanced detection */
2184 } 1908 }
2185 1909
2186 static int irq_probe_SPP(struct parport *pb) 1910 static int irq_probe_SPP(struct parport *pb)
2187 { 1911 {
2188 /* Don't even try to do this. */ 1912 /* Don't even try to do this. */
2189 return PARPORT_IRQ_NONE; 1913 return PARPORT_IRQ_NONE;
2190 } 1914 }
2191 1915
2192 /* We will attempt to share interrupt requests since other devices 1916 /* We will attempt to share interrupt requests since other devices
2193 * such as sound cards and network cards seem to like using the 1917 * such as sound cards and network cards seem to like using the
2194 * printer IRQs. 1918 * printer IRQs.
2195 * 1919 *
2196 * When ECP is available we can autoprobe for IRQs. 1920 * When ECP is available we can autoprobe for IRQs.
2197 * NOTE: If we can autoprobe it, we can register the IRQ. 1921 * NOTE: If we can autoprobe it, we can register the IRQ.
2198 */ 1922 */
2199 static int parport_irq_probe(struct parport *pb) 1923 static int parport_irq_probe(struct parport *pb)
2200 { 1924 {
2201 struct parport_pc_private *priv = pb->private_data; 1925 struct parport_pc_private *priv = pb->private_data;
2202 1926
2203 if (priv->ecr) { 1927 if (priv->ecr) {
2204 pb->irq = programmable_irq_support(pb); 1928 pb->irq = programmable_irq_support(pb);
2205 1929
2206 if (pb->irq == PARPORT_IRQ_NONE) 1930 if (pb->irq == PARPORT_IRQ_NONE)
2207 pb->irq = irq_probe_ECP(pb); 1931 pb->irq = irq_probe_ECP(pb);
2208 } 1932 }
2209 1933
2210 if ((pb->irq == PARPORT_IRQ_NONE) && priv->ecr && 1934 if ((pb->irq == PARPORT_IRQ_NONE) && priv->ecr &&
2211 (pb->modes & PARPORT_MODE_EPP)) 1935 (pb->modes & PARPORT_MODE_EPP))
2212 pb->irq = irq_probe_EPP(pb); 1936 pb->irq = irq_probe_EPP(pb);
2213 1937
2214 clear_epp_timeout(pb); 1938 clear_epp_timeout(pb);
2215 1939
2216 if (pb->irq == PARPORT_IRQ_NONE && (pb->modes & PARPORT_MODE_EPP)) 1940 if (pb->irq == PARPORT_IRQ_NONE && (pb->modes & PARPORT_MODE_EPP))
2217 pb->irq = irq_probe_EPP(pb); 1941 pb->irq = irq_probe_EPP(pb);
2218 1942
2219 clear_epp_timeout(pb); 1943 clear_epp_timeout(pb);
2220 1944
2221 if (pb->irq == PARPORT_IRQ_NONE) 1945 if (pb->irq == PARPORT_IRQ_NONE)
2222 pb->irq = irq_probe_SPP(pb); 1946 pb->irq = irq_probe_SPP(pb);
2223 1947
2224 if (pb->irq == PARPORT_IRQ_NONE) 1948 if (pb->irq == PARPORT_IRQ_NONE)
2225 pb->irq = get_superio_irq(pb); 1949 pb->irq = get_superio_irq(pb);
2226 1950
2227 return pb->irq; 1951 return pb->irq;
2228 } 1952 }
2229 1953
2230 /* --- DMA detection -------------------------------------- */ 1954 /* --- DMA detection -------------------------------------- */
2231 1955
2232 /* Only if chipset conforms to ECP ISA Interface Standard */ 1956 /* Only if chipset conforms to ECP ISA Interface Standard */
2233 static int programmable_dma_support(struct parport *p) 1957 static int programmable_dma_support(struct parport *p)
2234 { 1958 {
2235 unsigned char oecr = inb(ECONTROL(p)); 1959 unsigned char oecr = inb(ECONTROL(p));
2236 int dma; 1960 int dma;
2237 1961
2238 frob_set_mode(p, ECR_CNF); 1962 frob_set_mode(p, ECR_CNF);
2239 1963
2240 dma = inb(CONFIGB(p)) & 0x07; 1964 dma = inb(CONFIGB(p)) & 0x07;
2241 /* 000: Indicates jumpered 8-bit DMA if read-only. 1965 /* 000: Indicates jumpered 8-bit DMA if read-only.
2242 100: Indicates jumpered 16-bit DMA if read-only. */ 1966 100: Indicates jumpered 16-bit DMA if read-only. */
2243 if ((dma & 0x03) == 0) 1967 if ((dma & 0x03) == 0)
2244 dma = PARPORT_DMA_NONE; 1968 dma = PARPORT_DMA_NONE;
2245 1969
2246 ECR_WRITE(p, oecr); 1970 ECR_WRITE(p, oecr);
2247 return dma; 1971 return dma;
2248 } 1972 }
2249 1973
2250 static int parport_dma_probe(struct parport *p) 1974 static int parport_dma_probe(struct parport *p)
2251 { 1975 {
2252 const struct parport_pc_private *priv = p->private_data; 1976 const struct parport_pc_private *priv = p->private_data;
2253 if (priv->ecr) /* ask ECP chipset first */ 1977 if (priv->ecr) /* ask ECP chipset first */
2254 p->dma = programmable_dma_support(p); 1978 p->dma = programmable_dma_support(p);
2255 if (p->dma == PARPORT_DMA_NONE) { 1979 if (p->dma == PARPORT_DMA_NONE) {
2256 /* ask known Super-IO chips proper, although these 1980 /* ask known Super-IO chips proper, although these
2257 claim ECP compatible, some don't report their DMA 1981 claim ECP compatible, some don't report their DMA
2258 conforming to ECP standards */ 1982 conforming to ECP standards */
2259 p->dma = get_superio_dma(p); 1983 p->dma = get_superio_dma(p);
2260 } 1984 }
2261 1985
2262 return p->dma; 1986 return p->dma;
2263 } 1987 }
2264 1988
2265 /* --- Initialisation code -------------------------------- */ 1989 /* --- Initialisation code -------------------------------- */
2266 1990
2267 static LIST_HEAD(ports_list); 1991 static LIST_HEAD(ports_list);
2268 static DEFINE_SPINLOCK(ports_lock); 1992 static DEFINE_SPINLOCK(ports_lock);
2269 1993
2270 struct parport *parport_pc_probe_port(unsigned long int base, 1994 struct parport *parport_pc_probe_port(unsigned long int base,
2271 unsigned long int base_hi, 1995 unsigned long int base_hi,
2272 int irq, int dma, 1996 int irq, int dma,
2273 struct device *dev, 1997 struct device *dev,
2274 int irqflags) 1998 int irqflags)
2275 { 1999 {
2276 struct parport_pc_private *priv; 2000 struct parport_pc_private *priv;
2277 struct parport_operations *ops; 2001 struct parport_operations *ops;
2278 struct parport *p; 2002 struct parport *p;
2279 int probedirq = PARPORT_IRQ_NONE; 2003 int probedirq = PARPORT_IRQ_NONE;
2280 struct resource *base_res; 2004 struct resource *base_res;
2281 struct resource *ECR_res = NULL; 2005 struct resource *ECR_res = NULL;
2282 struct resource *EPP_res = NULL; 2006 struct resource *EPP_res = NULL;
2283 struct platform_device *pdev = NULL; 2007 struct platform_device *pdev = NULL;
2284 2008
2285 if (!dev) { 2009 if (!dev) {
2286 /* We need a physical device to attach to, but none was 2010 /* We need a physical device to attach to, but none was
2287 * provided. Create our own. */ 2011 * provided. Create our own. */
2288 pdev = platform_device_register_simple("parport_pc", 2012 pdev = platform_device_register_simple("parport_pc",
2289 base, NULL, 0); 2013 base, NULL, 0);
2290 if (IS_ERR(pdev)) 2014 if (IS_ERR(pdev))
2291 return NULL; 2015 return NULL;
2292 dev = &pdev->dev; 2016 dev = &pdev->dev;
2293 2017
2294 dev->coherent_dma_mask = DMA_BIT_MASK(24); 2018 dev->coherent_dma_mask = DMA_BIT_MASK(24);
2295 dev->dma_mask = &dev->coherent_dma_mask; 2019 dev->dma_mask = &dev->coherent_dma_mask;
2296 } 2020 }
2297 2021
2298 ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL); 2022 ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL);
2299 if (!ops) 2023 if (!ops)
2300 goto out1; 2024 goto out1;
2301 2025
2302 priv = kmalloc(sizeof(struct parport_pc_private), GFP_KERNEL); 2026 priv = kmalloc(sizeof(struct parport_pc_private), GFP_KERNEL);
2303 if (!priv) 2027 if (!priv)
2304 goto out2; 2028 goto out2;
2305 2029
2306 /* a misnomer, actually - it's allocate and reserve parport number */ 2030 /* a misnomer, actually - it's allocate and reserve parport number */
2307 p = parport_register_port(base, irq, dma, ops); 2031 p = parport_register_port(base, irq, dma, ops);
2308 if (!p) 2032 if (!p)
2309 goto out3; 2033 goto out3;
2310 2034
2311 base_res = request_region(base, 3, p->name); 2035 base_res = request_region(base, 3, p->name);
2312 if (!base_res) 2036 if (!base_res)
2313 goto out4; 2037 goto out4;
2314 2038
2315 memcpy(ops, &parport_pc_ops, sizeof(struct parport_operations)); 2039 memcpy(ops, &parport_pc_ops, sizeof(struct parport_operations));
2316 priv->ctr = 0xc; 2040 priv->ctr = 0xc;
2317 priv->ctr_writable = ~0x10; 2041 priv->ctr_writable = ~0x10;
2318 priv->ecr = 0; 2042 priv->ecr = 0;
2319 priv->fifo_depth = 0; 2043 priv->fifo_depth = 0;
2320 priv->dma_buf = NULL; 2044 priv->dma_buf = NULL;
2321 priv->dma_handle = 0; 2045 priv->dma_handle = 0;
2322 INIT_LIST_HEAD(&priv->list); 2046 INIT_LIST_HEAD(&priv->list);
2323 priv->port = p; 2047 priv->port = p;
2324 2048
2325 p->dev = dev; 2049 p->dev = dev;
2326 p->base_hi = base_hi; 2050 p->base_hi = base_hi;
2327 p->modes = PARPORT_MODE_PCSPP | PARPORT_MODE_SAFEININT; 2051 p->modes = PARPORT_MODE_PCSPP | PARPORT_MODE_SAFEININT;
2328 p->private_data = priv; 2052 p->private_data = priv;
2329 2053
2330 if (base_hi) { 2054 if (base_hi) {
2331 ECR_res = request_region(base_hi, 3, p->name); 2055 ECR_res = request_region(base_hi, 3, p->name);
2332 if (ECR_res) 2056 if (ECR_res)
2333 parport_ECR_present(p); 2057 parport_ECR_present(p);
2334 } 2058 }
2335 2059
2336 if (base != 0x3bc) { 2060 if (base != 0x3bc) {
2337 EPP_res = request_region(base+0x3, 5, p->name); 2061 EPP_res = request_region(base+0x3, 5, p->name);
2338 if (EPP_res) 2062 if (EPP_res)
2339 if (!parport_EPP_supported(p)) 2063 if (!parport_EPP_supported(p))
2340 parport_ECPEPP_supported(p); 2064 parport_ECPEPP_supported(p);
2341 } 2065 }
2342 if (!parport_SPP_supported(p)) 2066 if (!parport_SPP_supported(p))
2343 /* No port. */ 2067 /* No port. */
2344 goto out5; 2068 goto out5;
2345 if (priv->ecr) 2069 if (priv->ecr)
2346 parport_ECPPS2_supported(p); 2070 parport_ECPPS2_supported(p);
2347 else 2071 else
2348 parport_PS2_supported(p); 2072 parport_PS2_supported(p);
2349 2073
2350 p->size = (p->modes & PARPORT_MODE_EPP) ? 8 : 3; 2074 p->size = (p->modes & PARPORT_MODE_EPP) ? 8 : 3;
2351 2075
2352 printk(KERN_INFO "%s: PC-style at 0x%lx", p->name, p->base); 2076 printk(KERN_INFO "%s: PC-style at 0x%lx", p->name, p->base);
2353 if (p->base_hi && priv->ecr) 2077 if (p->base_hi && priv->ecr)
2354 printk(" (0x%lx)", p->base_hi); 2078 printk(" (0x%lx)", p->base_hi);
2355 if (p->irq == PARPORT_IRQ_AUTO) { 2079 if (p->irq == PARPORT_IRQ_AUTO) {
2356 p->irq = PARPORT_IRQ_NONE; 2080 p->irq = PARPORT_IRQ_NONE;
2357 parport_irq_probe(p); 2081 parport_irq_probe(p);
2358 } else if (p->irq == PARPORT_IRQ_PROBEONLY) { 2082 } else if (p->irq == PARPORT_IRQ_PROBEONLY) {
2359 p->irq = PARPORT_IRQ_NONE; 2083 p->irq = PARPORT_IRQ_NONE;
2360 parport_irq_probe(p); 2084 parport_irq_probe(p);
2361 probedirq = p->irq; 2085 probedirq = p->irq;
2362 p->irq = PARPORT_IRQ_NONE; 2086 p->irq = PARPORT_IRQ_NONE;
2363 } 2087 }
2364 if (p->irq != PARPORT_IRQ_NONE) { 2088 if (p->irq != PARPORT_IRQ_NONE) {
2365 printk(", irq %d", p->irq); 2089 printk(", irq %d", p->irq);
2366 priv->ctr_writable |= 0x10; 2090 priv->ctr_writable |= 0x10;
2367 2091
2368 if (p->dma == PARPORT_DMA_AUTO) { 2092 if (p->dma == PARPORT_DMA_AUTO) {
2369 p->dma = PARPORT_DMA_NONE; 2093 p->dma = PARPORT_DMA_NONE;
2370 parport_dma_probe(p); 2094 parport_dma_probe(p);
2371 } 2095 }
2372 } 2096 }
2373 if (p->dma == PARPORT_DMA_AUTO) /* To use DMA, giving the irq 2097 if (p->dma == PARPORT_DMA_AUTO) /* To use DMA, giving the irq
2374 is mandatory (see above) */ 2098 is mandatory (see above) */
2375 p->dma = PARPORT_DMA_NONE; 2099 p->dma = PARPORT_DMA_NONE;
2376 2100
2377 #ifdef CONFIG_PARPORT_PC_FIFO 2101 #ifdef CONFIG_PARPORT_PC_FIFO
2378 if (parport_ECP_supported(p) && 2102 if (parport_ECP_supported(p) &&
2379 p->dma != PARPORT_DMA_NOFIFO && 2103 p->dma != PARPORT_DMA_NOFIFO &&
2380 priv->fifo_depth > 0 && p->irq != PARPORT_IRQ_NONE) { 2104 priv->fifo_depth > 0 && p->irq != PARPORT_IRQ_NONE) {
2381 p->modes |= PARPORT_MODE_ECP | PARPORT_MODE_COMPAT; 2105 p->modes |= PARPORT_MODE_ECP | PARPORT_MODE_COMPAT;
2382 p->ops->compat_write_data = parport_pc_compat_write_block_pio; 2106 p->ops->compat_write_data = parport_pc_compat_write_block_pio;
2383 #ifdef CONFIG_PARPORT_1284 2107 #ifdef CONFIG_PARPORT_1284
2384 p->ops->ecp_write_data = parport_pc_ecp_write_block_pio; 2108 p->ops->ecp_write_data = parport_pc_ecp_write_block_pio;
2385 /* currently broken, but working on it.. (FB) */ 2109 /* currently broken, but working on it.. (FB) */
2386 /* p->ops->ecp_read_data = parport_pc_ecp_read_block_pio; */ 2110 /* p->ops->ecp_read_data = parport_pc_ecp_read_block_pio; */
2387 #endif /* IEEE 1284 support */ 2111 #endif /* IEEE 1284 support */
2388 if (p->dma != PARPORT_DMA_NONE) { 2112 if (p->dma != PARPORT_DMA_NONE) {
2389 printk(", dma %d", p->dma); 2113 printk(", dma %d", p->dma);
2390 p->modes |= PARPORT_MODE_DMA; 2114 p->modes |= PARPORT_MODE_DMA;
2391 } else 2115 } else
2392 printk(", using FIFO"); 2116 printk(", using FIFO");
2393 } else 2117 } else
2394 /* We can't use the DMA channel after all. */ 2118 /* We can't use the DMA channel after all. */
2395 p->dma = PARPORT_DMA_NONE; 2119 p->dma = PARPORT_DMA_NONE;
2396 #endif /* Allowed to use FIFO/DMA */ 2120 #endif /* Allowed to use FIFO/DMA */
2397 2121
2398 printk(" ["); 2122 printk(" [");
2399 2123
2400 #define printmode(x) \ 2124 #define printmode(x) \
2401 {\ 2125 {\
2402 if (p->modes & PARPORT_MODE_##x) {\ 2126 if (p->modes & PARPORT_MODE_##x) {\
2403 printk("%s%s", f ? "," : "", #x);\ 2127 printk("%s%s", f ? "," : "", #x);\
2404 f++;\ 2128 f++;\
2405 } \ 2129 } \
2406 } 2130 }
2407 2131
2408 { 2132 {
2409 int f = 0; 2133 int f = 0;
2410 printmode(PCSPP); 2134 printmode(PCSPP);
2411 printmode(TRISTATE); 2135 printmode(TRISTATE);
2412 printmode(COMPAT) 2136 printmode(COMPAT)
2413 printmode(EPP); 2137 printmode(EPP);
2414 printmode(ECP); 2138 printmode(ECP);
2415 printmode(DMA); 2139 printmode(DMA);
2416 } 2140 }
2417 #undef printmode 2141 #undef printmode
2418 #ifndef CONFIG_PARPORT_1284 2142 #ifndef CONFIG_PARPORT_1284
2419 printk("(,...)"); 2143 printk("(,...)");
2420 #endif /* CONFIG_PARPORT_1284 */ 2144 #endif /* CONFIG_PARPORT_1284 */
2421 printk("]\n"); 2145 printk("]\n");
2422 if (probedirq != PARPORT_IRQ_NONE) 2146 if (probedirq != PARPORT_IRQ_NONE)
2423 printk(KERN_INFO "%s: irq %d detected\n", p->name, probedirq); 2147 printk(KERN_INFO "%s: irq %d detected\n", p->name, probedirq);
2424 2148
2425 /* If No ECP release the ports grabbed above. */ 2149 /* If No ECP release the ports grabbed above. */
2426 if (ECR_res && (p->modes & PARPORT_MODE_ECP) == 0) { 2150 if (ECR_res && (p->modes & PARPORT_MODE_ECP) == 0) {
2427 release_region(base_hi, 3); 2151 release_region(base_hi, 3);
2428 ECR_res = NULL; 2152 ECR_res = NULL;
2429 } 2153 }
2430 /* Likewise for EEP ports */ 2154 /* Likewise for EEP ports */
2431 if (EPP_res && (p->modes & PARPORT_MODE_EPP) == 0) { 2155 if (EPP_res && (p->modes & PARPORT_MODE_EPP) == 0) {
2432 release_region(base+3, 5); 2156 release_region(base+3, 5);
2433 EPP_res = NULL; 2157 EPP_res = NULL;
2434 } 2158 }
2435 if (p->irq != PARPORT_IRQ_NONE) { 2159 if (p->irq != PARPORT_IRQ_NONE) {
2436 if (request_irq(p->irq, parport_irq_handler, 2160 if (request_irq(p->irq, parport_irq_handler,
2437 irqflags, p->name, p)) { 2161 irqflags, p->name, p)) {
2438 printk(KERN_WARNING "%s: irq %d in use, " 2162 printk(KERN_WARNING "%s: irq %d in use, "
2439 "resorting to polled operation\n", 2163 "resorting to polled operation\n",
2440 p->name, p->irq); 2164 p->name, p->irq);
2441 p->irq = PARPORT_IRQ_NONE; 2165 p->irq = PARPORT_IRQ_NONE;
2442 p->dma = PARPORT_DMA_NONE; 2166 p->dma = PARPORT_DMA_NONE;
2443 } 2167 }
2444 2168
2445 #ifdef CONFIG_PARPORT_PC_FIFO 2169 #ifdef CONFIG_PARPORT_PC_FIFO
2446 #ifdef HAS_DMA 2170 #ifdef HAS_DMA
2447 if (p->dma != PARPORT_DMA_NONE) { 2171 if (p->dma != PARPORT_DMA_NONE) {
2448 if (request_dma(p->dma, p->name)) { 2172 if (request_dma(p->dma, p->name)) {
2449 printk(KERN_WARNING "%s: dma %d in use, " 2173 printk(KERN_WARNING "%s: dma %d in use, "
2450 "resorting to PIO operation\n", 2174 "resorting to PIO operation\n",
2451 p->name, p->dma); 2175 p->name, p->dma);
2452 p->dma = PARPORT_DMA_NONE; 2176 p->dma = PARPORT_DMA_NONE;
2453 } else { 2177 } else {
2454 priv->dma_buf = 2178 priv->dma_buf =
2455 dma_alloc_coherent(dev, 2179 dma_alloc_coherent(dev,
2456 PAGE_SIZE, 2180 PAGE_SIZE,
2457 &priv->dma_handle, 2181 &priv->dma_handle,
2458 GFP_KERNEL); 2182 GFP_KERNEL);
2459 if (!priv->dma_buf) { 2183 if (!priv->dma_buf) {
2460 printk(KERN_WARNING "%s: " 2184 printk(KERN_WARNING "%s: "
2461 "cannot get buffer for DMA, " 2185 "cannot get buffer for DMA, "
2462 "resorting to PIO operation\n", 2186 "resorting to PIO operation\n",
2463 p->name); 2187 p->name);
2464 free_dma(p->dma); 2188 free_dma(p->dma);
2465 p->dma = PARPORT_DMA_NONE; 2189 p->dma = PARPORT_DMA_NONE;
2466 } 2190 }
2467 } 2191 }
2468 } 2192 }
2469 #endif 2193 #endif
2470 #endif 2194 #endif
2471 } 2195 }
2472 2196
2473 /* Done probing. Now put the port into a sensible start-up state. */ 2197 /* Done probing. Now put the port into a sensible start-up state. */
2474 if (priv->ecr) 2198 if (priv->ecr)
2475 /* 2199 /*
2476 * Put the ECP detected port in PS2 mode. 2200 * Put the ECP detected port in PS2 mode.
2477 * Do this also for ports that have ECR but don't do ECP. 2201 * Do this also for ports that have ECR but don't do ECP.
2478 */ 2202 */
2479 ECR_WRITE(p, 0x34); 2203 ECR_WRITE(p, 0x34);
2480 2204
2481 parport_pc_write_data(p, 0); 2205 parport_pc_write_data(p, 0);
2482 parport_pc_data_forward(p); 2206 parport_pc_data_forward(p);
2483 2207
2484 /* Now that we've told the sharing engine about the port, and 2208 /* Now that we've told the sharing engine about the port, and
2485 found out its characteristics, let the high-level drivers 2209 found out its characteristics, let the high-level drivers
2486 know about it. */ 2210 know about it. */
2487 spin_lock(&ports_lock); 2211 spin_lock(&ports_lock);
2488 list_add(&priv->list, &ports_list); 2212 list_add(&priv->list, &ports_list);
2489 spin_unlock(&ports_lock); 2213 spin_unlock(&ports_lock);
2490 parport_announce_port(p); 2214 parport_announce_port(p);
2491 2215
2492 return p; 2216 return p;
2493 2217
2494 out5: 2218 out5:
2495 if (ECR_res) 2219 if (ECR_res)
2496 release_region(base_hi, 3); 2220 release_region(base_hi, 3);
2497 if (EPP_res) 2221 if (EPP_res)
2498 release_region(base+0x3, 5); 2222 release_region(base+0x3, 5);
2499 release_region(base, 3); 2223 release_region(base, 3);
2500 out4: 2224 out4:
2501 parport_put_port(p); 2225 parport_put_port(p);
2502 out3: 2226 out3:
2503 kfree(priv); 2227 kfree(priv);
2504 out2: 2228 out2:
2505 kfree(ops); 2229 kfree(ops);
2506 out1: 2230 out1:
2507 if (pdev) 2231 if (pdev)
2508 platform_device_unregister(pdev); 2232 platform_device_unregister(pdev);
2509 return NULL; 2233 return NULL;
2510 } 2234 }
2511 EXPORT_SYMBOL(parport_pc_probe_port); 2235 EXPORT_SYMBOL(parport_pc_probe_port);
2512 2236
2513 void parport_pc_unregister_port(struct parport *p) 2237 void parport_pc_unregister_port(struct parport *p)
2514 { 2238 {
2515 struct parport_pc_private *priv = p->private_data; 2239 struct parport_pc_private *priv = p->private_data;
2516 struct parport_operations *ops = p->ops; 2240 struct parport_operations *ops = p->ops;
2517 2241
2518 parport_remove_port(p); 2242 parport_remove_port(p);
2519 spin_lock(&ports_lock); 2243 spin_lock(&ports_lock);
2520 list_del_init(&priv->list); 2244 list_del_init(&priv->list);
2521 spin_unlock(&ports_lock); 2245 spin_unlock(&ports_lock);
2522 #if defined(CONFIG_PARPORT_PC_FIFO) && defined(HAS_DMA) 2246 #if defined(CONFIG_PARPORT_PC_FIFO) && defined(HAS_DMA)
2523 if (p->dma != PARPORT_DMA_NONE) 2247 if (p->dma != PARPORT_DMA_NONE)
2524 free_dma(p->dma); 2248 free_dma(p->dma);
2525 #endif 2249 #endif
2526 if (p->irq != PARPORT_IRQ_NONE) 2250 if (p->irq != PARPORT_IRQ_NONE)
2527 free_irq(p->irq, p); 2251 free_irq(p->irq, p);
2528 release_region(p->base, 3); 2252 release_region(p->base, 3);
2529 if (p->size > 3) 2253 if (p->size > 3)
2530 release_region(p->base + 3, p->size - 3); 2254 release_region(p->base + 3, p->size - 3);
2531 if (p->modes & PARPORT_MODE_ECP) 2255 if (p->modes & PARPORT_MODE_ECP)
2532 release_region(p->base_hi, 3); 2256 release_region(p->base_hi, 3);
2533 #if defined(CONFIG_PARPORT_PC_FIFO) && defined(HAS_DMA) 2257 #if defined(CONFIG_PARPORT_PC_FIFO) && defined(HAS_DMA)
2534 if (priv->dma_buf) 2258 if (priv->dma_buf)
2535 dma_free_coherent(p->physport->dev, PAGE_SIZE, 2259 dma_free_coherent(p->physport->dev, PAGE_SIZE,
2536 priv->dma_buf, 2260 priv->dma_buf,
2537 priv->dma_handle); 2261 priv->dma_handle);
2538 #endif 2262 #endif
2539 kfree(p->private_data); 2263 kfree(p->private_data);
2540 parport_put_port(p); 2264 parport_put_port(p);
2541 kfree(ops); /* hope no-one cached it */ 2265 kfree(ops); /* hope no-one cached it */
2542 } 2266 }
2543 EXPORT_SYMBOL(parport_pc_unregister_port); 2267 EXPORT_SYMBOL(parport_pc_unregister_port);
2544 2268
2545 #ifdef CONFIG_PCI 2269 #ifdef CONFIG_PCI
2546 2270
2547 /* ITE support maintained by Rich Liu <richliu@poorman.org> */ 2271 /* ITE support maintained by Rich Liu <richliu@poorman.org> */
2548 static int __devinit sio_ite_8872_probe(struct pci_dev *pdev, int autoirq, 2272 static int __devinit sio_ite_8872_probe(struct pci_dev *pdev, int autoirq,
2549 int autodma, 2273 int autodma,
2550 const struct parport_pc_via_data *via) 2274 const struct parport_pc_via_data *via)
2551 { 2275 {
2552 short inta_addr[6] = { 0x2A0, 0x2C0, 0x220, 0x240, 0x1E0 }; 2276 short inta_addr[6] = { 0x2A0, 0x2C0, 0x220, 0x240, 0x1E0 };
2553 u32 ite8872set; 2277 u32 ite8872set;
2554 u32 ite8872_lpt, ite8872_lpthi; 2278 u32 ite8872_lpt, ite8872_lpthi;
2555 u8 ite8872_irq, type; 2279 u8 ite8872_irq, type;
2556 int irq; 2280 int irq;
2557 int i; 2281 int i;
2558 2282
2559 DPRINTK(KERN_DEBUG "sio_ite_8872_probe()\n"); 2283 DPRINTK(KERN_DEBUG "sio_ite_8872_probe()\n");
2560 2284
2561 /* make sure which one chip */ 2285 /* make sure which one chip */
2562 for (i = 0; i < 5; i++) { 2286 for (i = 0; i < 5; i++) {
2563 if (request_region(inta_addr[i], 32, "it887x")) { 2287 if (request_region(inta_addr[i], 32, "it887x")) {
2564 int test; 2288 int test;
2565 pci_write_config_dword(pdev, 0x60, 2289 pci_write_config_dword(pdev, 0x60,
2566 0xe5000000 | inta_addr[i]); 2290 0xe5000000 | inta_addr[i]);
2567 pci_write_config_dword(pdev, 0x78, 2291 pci_write_config_dword(pdev, 0x78,
2568 0x00000000 | inta_addr[i]); 2292 0x00000000 | inta_addr[i]);
2569 test = inb(inta_addr[i]); 2293 test = inb(inta_addr[i]);
2570 if (test != 0xff) 2294 if (test != 0xff)
2571 break; 2295 break;
2572 release_region(inta_addr[i], 32); 2296 release_region(inta_addr[i], 32);
2573 } 2297 }
2574 } 2298 }
2575 if (i >= 5) { 2299 if (i >= 5) {
2576 printk(KERN_INFO "parport_pc: cannot find ITE8872 INTA\n"); 2300 printk(KERN_INFO "parport_pc: cannot find ITE8872 INTA\n");
2577 return 0; 2301 return 0;
2578 } 2302 }
2579 2303
2580 type = inb(inta_addr[i] + 0x18); 2304 type = inb(inta_addr[i] + 0x18);
2581 type &= 0x0f; 2305 type &= 0x0f;
2582 2306
2583 switch (type) { 2307 switch (type) {
2584 case 0x2: 2308 case 0x2:
2585 printk(KERN_INFO "parport_pc: ITE8871 found (1P)\n"); 2309 printk(KERN_INFO "parport_pc: ITE8871 found (1P)\n");
2586 ite8872set = 0x64200000; 2310 ite8872set = 0x64200000;
2587 break; 2311 break;
2588 case 0xa: 2312 case 0xa:
2589 printk(KERN_INFO "parport_pc: ITE8875 found (1P)\n"); 2313 printk(KERN_INFO "parport_pc: ITE8875 found (1P)\n");
2590 ite8872set = 0x64200000; 2314 ite8872set = 0x64200000;
2591 break; 2315 break;
2592 case 0xe: 2316 case 0xe:
2593 printk(KERN_INFO "parport_pc: ITE8872 found (2S1P)\n"); 2317 printk(KERN_INFO "parport_pc: ITE8872 found (2S1P)\n");
2594 ite8872set = 0x64e00000; 2318 ite8872set = 0x64e00000;
2595 break; 2319 break;
2596 case 0x6: 2320 case 0x6:
2597 printk(KERN_INFO "parport_pc: ITE8873 found (1S)\n"); 2321 printk(KERN_INFO "parport_pc: ITE8873 found (1S)\n");
2598 release_region(inta_addr[i], 32); 2322 release_region(inta_addr[i], 32);
2599 return 0; 2323 return 0;
2600 case 0x8: 2324 case 0x8:
2601 printk(KERN_INFO "parport_pc: ITE8874 found (2S)\n"); 2325 printk(KERN_INFO "parport_pc: ITE8874 found (2S)\n");
2602 release_region(inta_addr[i], 32); 2326 release_region(inta_addr[i], 32);
2603 return 0; 2327 return 0;
2604 default: 2328 default:
2605 printk(KERN_INFO "parport_pc: unknown ITE887x\n"); 2329 printk(KERN_INFO "parport_pc: unknown ITE887x\n");
2606 printk(KERN_INFO "parport_pc: please mail 'lspci -nvv' " 2330 printk(KERN_INFO "parport_pc: please mail 'lspci -nvv' "
2607 "output to Rich.Liu@ite.com.tw\n"); 2331 "output to Rich.Liu@ite.com.tw\n");
2608 release_region(inta_addr[i], 32); 2332 release_region(inta_addr[i], 32);
2609 return 0; 2333 return 0;
2610 } 2334 }
2611 2335
2612 pci_read_config_byte(pdev, 0x3c, &ite8872_irq); 2336 pci_read_config_byte(pdev, 0x3c, &ite8872_irq);
2613 pci_read_config_dword(pdev, 0x1c, &ite8872_lpt); 2337 pci_read_config_dword(pdev, 0x1c, &ite8872_lpt);
2614 ite8872_lpt &= 0x0000ff00; 2338 ite8872_lpt &= 0x0000ff00;
2615 pci_read_config_dword(pdev, 0x20, &ite8872_lpthi); 2339 pci_read_config_dword(pdev, 0x20, &ite8872_lpthi);
2616 ite8872_lpthi &= 0x0000ff00; 2340 ite8872_lpthi &= 0x0000ff00;
2617 pci_write_config_dword(pdev, 0x6c, 0xe3000000 | ite8872_lpt); 2341 pci_write_config_dword(pdev, 0x6c, 0xe3000000 | ite8872_lpt);
2618 pci_write_config_dword(pdev, 0x70, 0xe3000000 | ite8872_lpthi); 2342 pci_write_config_dword(pdev, 0x70, 0xe3000000 | ite8872_lpthi);
2619 pci_write_config_dword(pdev, 0x80, (ite8872_lpthi<<16) | ite8872_lpt); 2343 pci_write_config_dword(pdev, 0x80, (ite8872_lpthi<<16) | ite8872_lpt);
2620 /* SET SPP&EPP , Parallel Port NO DMA , Enable All Function */ 2344 /* SET SPP&EPP , Parallel Port NO DMA , Enable All Function */
2621 /* SET Parallel IRQ */ 2345 /* SET Parallel IRQ */
2622 pci_write_config_dword(pdev, 0x9c, 2346 pci_write_config_dword(pdev, 0x9c,
2623 ite8872set | (ite8872_irq * 0x11111)); 2347 ite8872set | (ite8872_irq * 0x11111));
2624 2348
2625 DPRINTK(KERN_DEBUG "ITE887x: The IRQ is %d.\n", ite8872_irq); 2349 DPRINTK(KERN_DEBUG "ITE887x: The IRQ is %d.\n", ite8872_irq);
2626 DPRINTK(KERN_DEBUG "ITE887x: The PARALLEL I/O port is 0x%x.\n", 2350 DPRINTK(KERN_DEBUG "ITE887x: The PARALLEL I/O port is 0x%x.\n",
2627 ite8872_lpt); 2351 ite8872_lpt);
2628 DPRINTK(KERN_DEBUG "ITE887x: The PARALLEL I/O porthi is 0x%x.\n", 2352 DPRINTK(KERN_DEBUG "ITE887x: The PARALLEL I/O porthi is 0x%x.\n",
2629 ite8872_lpthi); 2353 ite8872_lpthi);
2630 2354
2631 /* Let the user (or defaults) steer us away from interrupts */ 2355 /* Let the user (or defaults) steer us away from interrupts */
2632 irq = ite8872_irq; 2356 irq = ite8872_irq;
2633 if (autoirq != PARPORT_IRQ_AUTO) 2357 if (autoirq != PARPORT_IRQ_AUTO)
2634 irq = PARPORT_IRQ_NONE; 2358 irq = PARPORT_IRQ_NONE;
2635 2359
2636 /* 2360 /*
2637 * Release the resource so that parport_pc_probe_port can get it. 2361 * Release the resource so that parport_pc_probe_port can get it.
2638 */ 2362 */
2639 release_region(inta_addr[i], 32); 2363 release_region(inta_addr[i], 32);
2640 if (parport_pc_probe_port(ite8872_lpt, ite8872_lpthi, 2364 if (parport_pc_probe_port(ite8872_lpt, ite8872_lpthi,
2641 irq, PARPORT_DMA_NONE, &pdev->dev, 0)) { 2365 irq, PARPORT_DMA_NONE, &pdev->dev, 0)) {
2642 printk(KERN_INFO 2366 printk(KERN_INFO
2643 "parport_pc: ITE 8872 parallel port: io=0x%X", 2367 "parport_pc: ITE 8872 parallel port: io=0x%X",
2644 ite8872_lpt); 2368 ite8872_lpt);
2645 if (irq != PARPORT_IRQ_NONE) 2369 if (irq != PARPORT_IRQ_NONE)
2646 printk(", irq=%d", irq); 2370 printk(", irq=%d", irq);
2647 printk("\n"); 2371 printk("\n");
2648 return 1; 2372 return 1;
2649 } 2373 }
2650 2374
2651 return 0; 2375 return 0;
2652 } 2376 }
2653 2377
2654 /* VIA 8231 support by Pavel Fedin <sonic_amiga@rambler.ru> 2378 /* VIA 8231 support by Pavel Fedin <sonic_amiga@rambler.ru>
2655 based on VIA 686a support code by Jeff Garzik <jgarzik@pobox.com> */ 2379 based on VIA 686a support code by Jeff Garzik <jgarzik@pobox.com> */
2656 static int __devinitdata parport_init_mode; 2380 static int __devinitdata parport_init_mode;
2657 2381
2658 /* Data for two known VIA chips */ 2382 /* Data for two known VIA chips */
2659 static struct parport_pc_via_data via_686a_data __devinitdata = { 2383 static struct parport_pc_via_data via_686a_data __devinitdata = {
2660 0x51, 2384 0x51,
2661 0x50, 2385 0x50,
2662 0x85, 2386 0x85,
2663 0x02, 2387 0x02,
2664 0xE2, 2388 0xE2,
2665 0xF0, 2389 0xF0,
2666 0xE6 2390 0xE6
2667 }; 2391 };
2668 static struct parport_pc_via_data via_8231_data __devinitdata = { 2392 static struct parport_pc_via_data via_8231_data __devinitdata = {
2669 0x45, 2393 0x45,
2670 0x44, 2394 0x44,
2671 0x50, 2395 0x50,
2672 0x04, 2396 0x04,
2673 0xF2, 2397 0xF2,
2674 0xFA, 2398 0xFA,
2675 0xF6 2399 0xF6
2676 }; 2400 };
2677 2401
2678 static int __devinit sio_via_probe(struct pci_dev *pdev, int autoirq, 2402 static int __devinit sio_via_probe(struct pci_dev *pdev, int autoirq,
2679 int autodma, 2403 int autodma,
2680 const struct parport_pc_via_data *via) 2404 const struct parport_pc_via_data *via)
2681 { 2405 {
2682 u8 tmp, tmp2, siofunc; 2406 u8 tmp, tmp2, siofunc;
2683 u8 ppcontrol = 0; 2407 u8 ppcontrol = 0;
2684 int dma, irq; 2408 int dma, irq;
2685 unsigned port1, port2; 2409 unsigned port1, port2;
2686 unsigned have_epp = 0; 2410 unsigned have_epp = 0;
2687 2411
2688 printk(KERN_DEBUG "parport_pc: VIA 686A/8231 detected\n"); 2412 printk(KERN_DEBUG "parport_pc: VIA 686A/8231 detected\n");
2689 2413
2690 switch (parport_init_mode) { 2414 switch (parport_init_mode) {
2691 case 1: 2415 case 1:
2692 printk(KERN_DEBUG "parport_pc: setting SPP mode\n"); 2416 printk(KERN_DEBUG "parport_pc: setting SPP mode\n");
2693 siofunc = VIA_FUNCTION_PARPORT_SPP; 2417 siofunc = VIA_FUNCTION_PARPORT_SPP;
2694 break; 2418 break;
2695 case 2: 2419 case 2:
2696 printk(KERN_DEBUG "parport_pc: setting PS/2 mode\n"); 2420 printk(KERN_DEBUG "parport_pc: setting PS/2 mode\n");
2697 siofunc = VIA_FUNCTION_PARPORT_SPP; 2421 siofunc = VIA_FUNCTION_PARPORT_SPP;
2698 ppcontrol = VIA_PARPORT_BIDIR; 2422 ppcontrol = VIA_PARPORT_BIDIR;
2699 break; 2423 break;
2700 case 3: 2424 case 3:
2701 printk(KERN_DEBUG "parport_pc: setting EPP mode\n"); 2425 printk(KERN_DEBUG "parport_pc: setting EPP mode\n");
2702 siofunc = VIA_FUNCTION_PARPORT_EPP; 2426 siofunc = VIA_FUNCTION_PARPORT_EPP;
2703 ppcontrol = VIA_PARPORT_BIDIR; 2427 ppcontrol = VIA_PARPORT_BIDIR;
2704 have_epp = 1; 2428 have_epp = 1;
2705 break; 2429 break;
2706 case 4: 2430 case 4:
2707 printk(KERN_DEBUG "parport_pc: setting ECP mode\n"); 2431 printk(KERN_DEBUG "parport_pc: setting ECP mode\n");
2708 siofunc = VIA_FUNCTION_PARPORT_ECP; 2432 siofunc = VIA_FUNCTION_PARPORT_ECP;
2709 ppcontrol = VIA_PARPORT_BIDIR; 2433 ppcontrol = VIA_PARPORT_BIDIR;
2710 break; 2434 break;
2711 case 5: 2435 case 5:
2712 printk(KERN_DEBUG "parport_pc: setting EPP+ECP mode\n"); 2436 printk(KERN_DEBUG "parport_pc: setting EPP+ECP mode\n");
2713 siofunc = VIA_FUNCTION_PARPORT_ECP; 2437 siofunc = VIA_FUNCTION_PARPORT_ECP;
2714 ppcontrol = VIA_PARPORT_BIDIR|VIA_PARPORT_ECPEPP; 2438 ppcontrol = VIA_PARPORT_BIDIR|VIA_PARPORT_ECPEPP;
2715 have_epp = 1; 2439 have_epp = 1;
2716 break; 2440 break;
2717 default: 2441 default:
2718 printk(KERN_DEBUG 2442 printk(KERN_DEBUG
2719 "parport_pc: probing current configuration\n"); 2443 "parport_pc: probing current configuration\n");
2720 siofunc = VIA_FUNCTION_PROBE; 2444 siofunc = VIA_FUNCTION_PROBE;
2721 break; 2445 break;
2722 } 2446 }
2723 /* 2447 /*
2724 * unlock super i/o configuration 2448 * unlock super i/o configuration
2725 */ 2449 */
2726 pci_read_config_byte(pdev, via->via_pci_superio_config_reg, &tmp); 2450 pci_read_config_byte(pdev, via->via_pci_superio_config_reg, &tmp);
2727 tmp |= via->via_pci_superio_config_data; 2451 tmp |= via->via_pci_superio_config_data;
2728 pci_write_config_byte(pdev, via->via_pci_superio_config_reg, tmp); 2452 pci_write_config_byte(pdev, via->via_pci_superio_config_reg, tmp);
2729 2453
2730 /* Bits 1-0: Parallel Port Mode / Enable */ 2454 /* Bits 1-0: Parallel Port Mode / Enable */
2731 outb(via->viacfg_function, VIA_CONFIG_INDEX); 2455 outb(via->viacfg_function, VIA_CONFIG_INDEX);
2732 tmp = inb(VIA_CONFIG_DATA); 2456 tmp = inb(VIA_CONFIG_DATA);
2733 /* Bit 5: EPP+ECP enable; bit 7: PS/2 bidirectional port enable */ 2457 /* Bit 5: EPP+ECP enable; bit 7: PS/2 bidirectional port enable */
2734 outb(via->viacfg_parport_control, VIA_CONFIG_INDEX); 2458 outb(via->viacfg_parport_control, VIA_CONFIG_INDEX);
2735 tmp2 = inb(VIA_CONFIG_DATA); 2459 tmp2 = inb(VIA_CONFIG_DATA);
2736 if (siofunc == VIA_FUNCTION_PROBE) { 2460 if (siofunc == VIA_FUNCTION_PROBE) {
2737 siofunc = tmp & VIA_FUNCTION_PARPORT_DISABLE; 2461 siofunc = tmp & VIA_FUNCTION_PARPORT_DISABLE;
2738 ppcontrol = tmp2; 2462 ppcontrol = tmp2;
2739 } else { 2463 } else {
2740 tmp &= ~VIA_FUNCTION_PARPORT_DISABLE; 2464 tmp &= ~VIA_FUNCTION_PARPORT_DISABLE;
2741 tmp |= siofunc; 2465 tmp |= siofunc;
2742 outb(via->viacfg_function, VIA_CONFIG_INDEX); 2466 outb(via->viacfg_function, VIA_CONFIG_INDEX);
2743 outb(tmp, VIA_CONFIG_DATA); 2467 outb(tmp, VIA_CONFIG_DATA);
2744 tmp2 &= ~(VIA_PARPORT_BIDIR|VIA_PARPORT_ECPEPP); 2468 tmp2 &= ~(VIA_PARPORT_BIDIR|VIA_PARPORT_ECPEPP);
2745 tmp2 |= ppcontrol; 2469 tmp2 |= ppcontrol;
2746 outb(via->viacfg_parport_control, VIA_CONFIG_INDEX); 2470 outb(via->viacfg_parport_control, VIA_CONFIG_INDEX);
2747 outb(tmp2, VIA_CONFIG_DATA); 2471 outb(tmp2, VIA_CONFIG_DATA);
2748 } 2472 }
2749 2473
2750 /* Parallel Port I/O Base Address, bits 9-2 */ 2474 /* Parallel Port I/O Base Address, bits 9-2 */
2751 outb(via->viacfg_parport_base, VIA_CONFIG_INDEX); 2475 outb(via->viacfg_parport_base, VIA_CONFIG_INDEX);
2752 port1 = inb(VIA_CONFIG_DATA) << 2; 2476 port1 = inb(VIA_CONFIG_DATA) << 2;
2753 2477
2754 printk(KERN_DEBUG "parport_pc: Current parallel port base: 0x%X\n", 2478 printk(KERN_DEBUG "parport_pc: Current parallel port base: 0x%X\n",
2755 port1); 2479 port1);
2756 if (port1 == 0x3BC && have_epp) { 2480 if (port1 == 0x3BC && have_epp) {
2757 outb(via->viacfg_parport_base, VIA_CONFIG_INDEX); 2481 outb(via->viacfg_parport_base, VIA_CONFIG_INDEX);
2758 outb((0x378 >> 2), VIA_CONFIG_DATA); 2482 outb((0x378 >> 2), VIA_CONFIG_DATA);
2759 printk(KERN_DEBUG 2483 printk(KERN_DEBUG
2760 "parport_pc: Parallel port base changed to 0x378\n"); 2484 "parport_pc: Parallel port base changed to 0x378\n");
2761 port1 = 0x378; 2485 port1 = 0x378;
2762 } 2486 }
2763 2487
2764 /* 2488 /*
2765 * lock super i/o configuration 2489 * lock super i/o configuration
2766 */ 2490 */
2767 pci_read_config_byte(pdev, via->via_pci_superio_config_reg, &tmp); 2491 pci_read_config_byte(pdev, via->via_pci_superio_config_reg, &tmp);
2768 tmp &= ~via->via_pci_superio_config_data; 2492 tmp &= ~via->via_pci_superio_config_data;
2769 pci_write_config_byte(pdev, via->via_pci_superio_config_reg, tmp); 2493 pci_write_config_byte(pdev, via->via_pci_superio_config_reg, tmp);
2770 2494
2771 if (siofunc == VIA_FUNCTION_PARPORT_DISABLE) { 2495 if (siofunc == VIA_FUNCTION_PARPORT_DISABLE) {
2772 printk(KERN_INFO "parport_pc: VIA parallel port disabled in BIOS\n"); 2496 printk(KERN_INFO "parport_pc: VIA parallel port disabled in BIOS\n");
2773 return 0; 2497 return 0;
2774 } 2498 }
2775 2499
2776 /* Bits 7-4: PnP Routing for Parallel Port IRQ */ 2500 /* Bits 7-4: PnP Routing for Parallel Port IRQ */
2777 pci_read_config_byte(pdev, via->via_pci_parport_irq_reg, &tmp); 2501 pci_read_config_byte(pdev, via->via_pci_parport_irq_reg, &tmp);
2778 irq = ((tmp & VIA_IRQCONTROL_PARALLEL) >> 4); 2502 irq = ((tmp & VIA_IRQCONTROL_PARALLEL) >> 4);
2779 2503
2780 if (siofunc == VIA_FUNCTION_PARPORT_ECP) { 2504 if (siofunc == VIA_FUNCTION_PARPORT_ECP) {
2781 /* Bits 3-2: PnP Routing for Parallel Port DMA */ 2505 /* Bits 3-2: PnP Routing for Parallel Port DMA */
2782 pci_read_config_byte(pdev, via->via_pci_parport_dma_reg, &tmp); 2506 pci_read_config_byte(pdev, via->via_pci_parport_dma_reg, &tmp);
2783 dma = ((tmp & VIA_DMACONTROL_PARALLEL) >> 2); 2507 dma = ((tmp & VIA_DMACONTROL_PARALLEL) >> 2);
2784 } else 2508 } else
2785 /* if ECP not enabled, DMA is not enabled, assumed 2509 /* if ECP not enabled, DMA is not enabled, assumed
2786 bogus 'dma' value */ 2510 bogus 'dma' value */
2787 dma = PARPORT_DMA_NONE; 2511 dma = PARPORT_DMA_NONE;
2788 2512
2789 /* Let the user (or defaults) steer us away from interrupts and DMA */ 2513 /* Let the user (or defaults) steer us away from interrupts and DMA */
2790 if (autoirq == PARPORT_IRQ_NONE) { 2514 if (autoirq == PARPORT_IRQ_NONE) {
2791 irq = PARPORT_IRQ_NONE; 2515 irq = PARPORT_IRQ_NONE;
2792 dma = PARPORT_DMA_NONE; 2516 dma = PARPORT_DMA_NONE;
2793 } 2517 }
2794 if (autodma == PARPORT_DMA_NONE) 2518 if (autodma == PARPORT_DMA_NONE)
2795 dma = PARPORT_DMA_NONE; 2519 dma = PARPORT_DMA_NONE;
2796 2520
2797 switch (port1) { 2521 switch (port1) {
2798 case 0x3bc: 2522 case 0x3bc:
2799 port2 = 0x7bc; break; 2523 port2 = 0x7bc; break;
2800 case 0x378: 2524 case 0x378:
2801 port2 = 0x778; break; 2525 port2 = 0x778; break;
2802 case 0x278: 2526 case 0x278:
2803 port2 = 0x678; break; 2527 port2 = 0x678; break;
2804 default: 2528 default:
2805 printk(KERN_INFO 2529 printk(KERN_INFO
2806 "parport_pc: Weird VIA parport base 0x%X, ignoring\n", 2530 "parport_pc: Weird VIA parport base 0x%X, ignoring\n",
2807 port1); 2531 port1);
2808 return 0; 2532 return 0;
2809 } 2533 }
2810 2534
2811 /* filter bogus IRQs */ 2535 /* filter bogus IRQs */
2812 switch (irq) { 2536 switch (irq) {
2813 case 0: 2537 case 0:
2814 case 2: 2538 case 2:
2815 case 8: 2539 case 8:
2816 case 13: 2540 case 13:
2817 irq = PARPORT_IRQ_NONE; 2541 irq = PARPORT_IRQ_NONE;
2818 break; 2542 break;
2819 2543
2820 default: /* do nothing */ 2544 default: /* do nothing */
2821 break; 2545 break;
2822 } 2546 }
2823 2547
2824 /* finally, do the probe with values obtained */ 2548 /* finally, do the probe with values obtained */
2825 if (parport_pc_probe_port(port1, port2, irq, dma, &pdev->dev, 0)) { 2549 if (parport_pc_probe_port(port1, port2, irq, dma, &pdev->dev, 0)) {
2826 printk(KERN_INFO 2550 printk(KERN_INFO
2827 "parport_pc: VIA parallel port: io=0x%X", port1); 2551 "parport_pc: VIA parallel port: io=0x%X", port1);
2828 if (irq != PARPORT_IRQ_NONE) 2552 if (irq != PARPORT_IRQ_NONE)
2829 printk(", irq=%d", irq); 2553 printk(", irq=%d", irq);
2830 if (dma != PARPORT_DMA_NONE) 2554 if (dma != PARPORT_DMA_NONE)
2831 printk(", dma=%d", dma); 2555 printk(", dma=%d", dma);
2832 printk("\n"); 2556 printk("\n");
2833 return 1; 2557 return 1;
2834 } 2558 }
2835 2559
2836 printk(KERN_WARNING "parport_pc: Strange, can't probe VIA parallel port: io=0x%X, irq=%d, dma=%d\n", 2560 printk(KERN_WARNING "parport_pc: Strange, can't probe VIA parallel port: io=0x%X, irq=%d, dma=%d\n",
2837 port1, irq, dma); 2561 port1, irq, dma);
2838 return 0; 2562 return 0;
2839 } 2563 }
2840 2564
2841 2565
2842 enum parport_pc_sio_types { 2566 enum parport_pc_sio_types {
2843 sio_via_686a = 0, /* Via VT82C686A motherboard Super I/O */ 2567 sio_via_686a = 0, /* Via VT82C686A motherboard Super I/O */
2844 sio_via_8231, /* Via VT8231 south bridge integrated Super IO */ 2568 sio_via_8231, /* Via VT8231 south bridge integrated Super IO */
2845 sio_ite_8872, 2569 sio_ite_8872,
2846 last_sio 2570 last_sio
2847 }; 2571 };
2848 2572
2849 /* each element directly indexed from enum list, above */ 2573 /* each element directly indexed from enum list, above */
2850 static struct parport_pc_superio { 2574 static struct parport_pc_superio {
2851 int (*probe) (struct pci_dev *pdev, int autoirq, int autodma, 2575 int (*probe) (struct pci_dev *pdev, int autoirq, int autodma,
2852 const struct parport_pc_via_data *via); 2576 const struct parport_pc_via_data *via);
2853 const struct parport_pc_via_data *via; 2577 const struct parport_pc_via_data *via;
2854 } parport_pc_superio_info[] __devinitdata = { 2578 } parport_pc_superio_info[] __devinitdata = {
2855 { sio_via_probe, &via_686a_data, }, 2579 { sio_via_probe, &via_686a_data, },
2856 { sio_via_probe, &via_8231_data, }, 2580 { sio_via_probe, &via_8231_data, },
2857 { sio_ite_8872_probe, NULL, }, 2581 { sio_ite_8872_probe, NULL, },
2858 }; 2582 };
2859 2583
2860 enum parport_pc_pci_cards { 2584 enum parport_pc_pci_cards {
2861 siig_1p_10x = last_sio, 2585 siig_1p_10x = last_sio,
2862 siig_2p_10x, 2586 siig_2p_10x,
2863 siig_1p_20x, 2587 siig_1p_20x,
2864 siig_2p_20x, 2588 siig_2p_20x,
2865 lava_parallel, 2589 lava_parallel,
2866 lava_parallel_dual_a, 2590 lava_parallel_dual_a,
2867 lava_parallel_dual_b, 2591 lava_parallel_dual_b,
2868 boca_ioppar, 2592 boca_ioppar,
2869 plx_9050, 2593 plx_9050,
2870 timedia_4006a, 2594 timedia_4006a,
2871 timedia_4014, 2595 timedia_4014,
2872 timedia_4008a, 2596 timedia_4008a,
2873 timedia_4018, 2597 timedia_4018,
2874 timedia_9018a, 2598 timedia_9018a,
2875 syba_2p_epp, 2599 syba_2p_epp,
2876 syba_1p_ecp, 2600 syba_1p_ecp,
2877 titan_010l, 2601 titan_010l,
2878 titan_1284p1, 2602 titan_1284p1,
2879 titan_1284p2, 2603 titan_1284p2,
2880 avlab_1p, 2604 avlab_1p,
2881 avlab_2p, 2605 avlab_2p,
2882 oxsemi_952, 2606 oxsemi_952,
2883 oxsemi_954, 2607 oxsemi_954,
2884 oxsemi_840, 2608 oxsemi_840,
2885 oxsemi_pcie_pport, 2609 oxsemi_pcie_pport,
2886 aks_0100, 2610 aks_0100,
2887 mobility_pp, 2611 mobility_pp,
2888 netmos_9705, 2612 netmos_9705,
2889 netmos_9715, 2613 netmos_9715,
2890 netmos_9755, 2614 netmos_9755,
2891 netmos_9805, 2615 netmos_9805,
2892 netmos_9815, 2616 netmos_9815,
2893 netmos_9901, 2617 netmos_9901,
2894 netmos_9865, 2618 netmos_9865,
2895 quatech_sppxp100, 2619 quatech_sppxp100,
2896 }; 2620 };
2897 2621
2898 2622
2899 /* each element directly indexed from enum list, above 2623 /* each element directly indexed from enum list, above
2900 * (but offset by last_sio) */ 2624 * (but offset by last_sio) */
2901 static struct parport_pc_pci { 2625 static struct parport_pc_pci {
2902 int numports; 2626 int numports;
2903 struct { /* BAR (base address registers) numbers in the config 2627 struct { /* BAR (base address registers) numbers in the config
2904 space header */ 2628 space header */
2905 int lo; 2629 int lo;
2906 int hi; 2630 int hi;
2907 /* -1 if not there, >6 for offset-method (max BAR is 6) */ 2631 /* -1 if not there, >6 for offset-method (max BAR is 6) */
2908 } addr[4]; 2632 } addr[4];
2909 2633
2910 /* If set, this is called immediately after pci_enable_device. 2634 /* If set, this is called immediately after pci_enable_device.
2911 * If it returns non-zero, no probing will take place and the 2635 * If it returns non-zero, no probing will take place and the
2912 * ports will not be used. */ 2636 * ports will not be used. */
2913 int (*preinit_hook) (struct pci_dev *pdev, int autoirq, int autodma); 2637 int (*preinit_hook) (struct pci_dev *pdev, int autoirq, int autodma);
2914 2638
2915 /* If set, this is called after probing for ports. If 'failed' 2639 /* If set, this is called after probing for ports. If 'failed'
2916 * is non-zero we couldn't use any of the ports. */ 2640 * is non-zero we couldn't use any of the ports. */
2917 void (*postinit_hook) (struct pci_dev *pdev, int failed); 2641 void (*postinit_hook) (struct pci_dev *pdev, int failed);
2918 } cards[] = { 2642 } cards[] = {
2919 /* siig_1p_10x */ { 1, { { 2, 3 }, } }, 2643 /* siig_1p_10x */ { 1, { { 2, 3 }, } },
2920 /* siig_2p_10x */ { 2, { { 2, 3 }, { 4, 5 }, } }, 2644 /* siig_2p_10x */ { 2, { { 2, 3 }, { 4, 5 }, } },
2921 /* siig_1p_20x */ { 1, { { 0, 1 }, } }, 2645 /* siig_1p_20x */ { 1, { { 0, 1 }, } },
2922 /* siig_2p_20x */ { 2, { { 0, 1 }, { 2, 3 }, } }, 2646 /* siig_2p_20x */ { 2, { { 0, 1 }, { 2, 3 }, } },
2923 /* lava_parallel */ { 1, { { 0, -1 }, } }, 2647 /* lava_parallel */ { 1, { { 0, -1 }, } },
2924 /* lava_parallel_dual_a */ { 1, { { 0, -1 }, } }, 2648 /* lava_parallel_dual_a */ { 1, { { 0, -1 }, } },
2925 /* lava_parallel_dual_b */ { 1, { { 0, -1 }, } }, 2649 /* lava_parallel_dual_b */ { 1, { { 0, -1 }, } },
2926 /* boca_ioppar */ { 1, { { 0, -1 }, } }, 2650 /* boca_ioppar */ { 1, { { 0, -1 }, } },
2927 /* plx_9050 */ { 2, { { 4, -1 }, { 5, -1 }, } }, 2651 /* plx_9050 */ { 2, { { 4, -1 }, { 5, -1 }, } },
2928 /* timedia_4006a */ { 1, { { 0, -1 }, } }, 2652 /* timedia_4006a */ { 1, { { 0, -1 }, } },
2929 /* timedia_4014 */ { 2, { { 0, -1 }, { 2, -1 }, } }, 2653 /* timedia_4014 */ { 2, { { 0, -1 }, { 2, -1 }, } },
2930 /* timedia_4008a */ { 1, { { 0, 1 }, } }, 2654 /* timedia_4008a */ { 1, { { 0, 1 }, } },
2931 /* timedia_4018 */ { 2, { { 0, 1 }, { 2, 3 }, } }, 2655 /* timedia_4018 */ { 2, { { 0, 1 }, { 2, 3 }, } },
2932 /* timedia_9018a */ { 2, { { 0, 1 }, { 2, 3 }, } }, 2656 /* timedia_9018a */ { 2, { { 0, 1 }, { 2, 3 }, } },
2933 /* SYBA uses fixed offsets in 2657 /* SYBA uses fixed offsets in
2934 a 1K io window */ 2658 a 1K io window */
2935 /* syba_2p_epp AP138B */ { 2, { { 0, 0x078 }, { 0, 0x178 }, } }, 2659 /* syba_2p_epp AP138B */ { 2, { { 0, 0x078 }, { 0, 0x178 }, } },
2936 /* syba_1p_ecp W83787 */ { 1, { { 0, 0x078 }, } }, 2660 /* syba_1p_ecp W83787 */ { 1, { { 0, 0x078 }, } },
2937 /* titan_010l */ { 1, { { 3, -1 }, } }, 2661 /* titan_010l */ { 1, { { 3, -1 }, } },
2938 /* titan_1284p1 */ { 1, { { 0, 1 }, } }, 2662 /* titan_1284p1 */ { 1, { { 0, 1 }, } },
2939 /* titan_1284p2 */ { 2, { { 0, 1 }, { 2, 3 }, } }, 2663 /* titan_1284p2 */ { 2, { { 0, 1 }, { 2, 3 }, } },
2940 /* avlab_1p */ { 1, { { 0, 1}, } }, 2664 /* avlab_1p */ { 1, { { 0, 1}, } },
2941 /* avlab_2p */ { 2, { { 0, 1}, { 2, 3 },} }, 2665 /* avlab_2p */ { 2, { { 0, 1}, { 2, 3 },} },
2942 /* The Oxford Semi cards are unusual: 954 doesn't support ECP, 2666 /* The Oxford Semi cards are unusual: 954 doesn't support ECP,
2943 * and 840 locks up if you write 1 to bit 2! */ 2667 * and 840 locks up if you write 1 to bit 2! */
2944 /* oxsemi_952 */ { 1, { { 0, 1 }, } }, 2668 /* oxsemi_952 */ { 1, { { 0, 1 }, } },
2945 /* oxsemi_954 */ { 1, { { 0, -1 }, } }, 2669 /* oxsemi_954 */ { 1, { { 0, -1 }, } },
2946 /* oxsemi_840 */ { 1, { { 0, 1 }, } }, 2670 /* oxsemi_840 */ { 1, { { 0, 1 }, } },
2947 /* oxsemi_pcie_pport */ { 1, { { 0, 1 }, } }, 2671 /* oxsemi_pcie_pport */ { 1, { { 0, 1 }, } },
2948 /* aks_0100 */ { 1, { { 0, -1 }, } }, 2672 /* aks_0100 */ { 1, { { 0, -1 }, } },
2949 /* mobility_pp */ { 1, { { 0, 1 }, } }, 2673 /* mobility_pp */ { 1, { { 0, 1 }, } },
2950 2674
2951 /* The netmos entries below are untested */ 2675 /* The netmos entries below are untested */
2952 /* netmos_9705 */ { 1, { { 0, -1 }, } }, 2676 /* netmos_9705 */ { 1, { { 0, -1 }, } },
2953 /* netmos_9715 */ { 2, { { 0, 1 }, { 2, 3 },} }, 2677 /* netmos_9715 */ { 2, { { 0, 1 }, { 2, 3 },} },
2954 /* netmos_9755 */ { 2, { { 0, 1 }, { 2, 3 },} }, 2678 /* netmos_9755 */ { 2, { { 0, 1 }, { 2, 3 },} },
2955 /* netmos_9805 */ { 1, { { 0, -1 }, } }, 2679 /* netmos_9805 */ { 1, { { 0, -1 }, } },
2956 /* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } }, 2680 /* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } },
2957 /* netmos_9901 */ { 1, { { 0, -1 }, } }, 2681 /* netmos_9901 */ { 1, { { 0, -1 }, } },
2958 /* netmos_9865 */ { 1, { { 0, -1 }, } }, 2682 /* netmos_9865 */ { 1, { { 0, -1 }, } },
2959 /* quatech_sppxp100 */ { 1, { { 0, 1 }, } }, 2683 /* quatech_sppxp100 */ { 1, { { 0, 1 }, } },
2960 }; 2684 };
2961 2685
2962 static const struct pci_device_id parport_pc_pci_tbl[] = { 2686 static const struct pci_device_id parport_pc_pci_tbl[] = {
2963 /* Super-IO onboard chips */ 2687 /* Super-IO onboard chips */
2964 { 0x1106, 0x0686, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_via_686a }, 2688 { 0x1106, 0x0686, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_via_686a },
2965 { 0x1106, 0x8231, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_via_8231 }, 2689 { 0x1106, 0x8231, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_via_8231 },
2966 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872, 2690 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
2967 PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_ite_8872 }, 2691 PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_ite_8872 },
2968 2692
2969 /* PCI cards */ 2693 /* PCI cards */
2970 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_10x, 2694 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_10x,
2971 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_10x }, 2695 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_10x },
2972 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_10x, 2696 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_10x,
2973 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_10x }, 2697 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_10x },
2974 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_20x, 2698 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_20x,
2975 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_20x }, 2699 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_20x },
2976 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_20x, 2700 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_20x,
2977 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_20x }, 2701 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_20x },
2978 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PARALLEL, 2702 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PARALLEL,
2979 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel }, 2703 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel },
2980 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_A, 2704 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_A,
2981 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel_dual_a }, 2705 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel_dual_a },
2982 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_B, 2706 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_B,
2983 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel_dual_b }, 2707 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel_dual_b },
2984 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_BOCA_IOPPAR, 2708 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_BOCA_IOPPAR,
2985 PCI_ANY_ID, PCI_ANY_ID, 0, 0, boca_ioppar }, 2709 PCI_ANY_ID, PCI_ANY_ID, 0, 0, boca_ioppar },
2986 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 2710 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2987 PCI_SUBVENDOR_ID_EXSYS, PCI_SUBDEVICE_ID_EXSYS_4014, 0, 0, plx_9050 }, 2711 PCI_SUBVENDOR_ID_EXSYS, PCI_SUBDEVICE_ID_EXSYS_4014, 0, 0, plx_9050 },
2988 /* PCI_VENDOR_ID_TIMEDIA/SUNIX has many differing cards ...*/ 2712 /* PCI_VENDOR_ID_TIMEDIA/SUNIX has many differing cards ...*/
2989 { 0x1409, 0x7268, 0x1409, 0x0101, 0, 0, timedia_4006a }, 2713 { 0x1409, 0x7268, 0x1409, 0x0101, 0, 0, timedia_4006a },
2990 { 0x1409, 0x7268, 0x1409, 0x0102, 0, 0, timedia_4014 }, 2714 { 0x1409, 0x7268, 0x1409, 0x0102, 0, 0, timedia_4014 },
2991 { 0x1409, 0x7268, 0x1409, 0x0103, 0, 0, timedia_4008a }, 2715 { 0x1409, 0x7268, 0x1409, 0x0103, 0, 0, timedia_4008a },
2992 { 0x1409, 0x7268, 0x1409, 0x0104, 0, 0, timedia_4018 }, 2716 { 0x1409, 0x7268, 0x1409, 0x0104, 0, 0, timedia_4018 },
2993 { 0x1409, 0x7268, 0x1409, 0x9018, 0, 0, timedia_9018a }, 2717 { 0x1409, 0x7268, 0x1409, 0x9018, 0, 0, timedia_9018a },
2994 { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_2P_EPP, 2718 { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_2P_EPP,
2995 PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_2p_epp }, 2719 PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_2p_epp },
2996 { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_1P_ECP, 2720 { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_1P_ECP,
2997 PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_1p_ecp }, 2721 PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_1p_ecp },
2998 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_010L, 2722 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_010L,
2999 PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_010l }, 2723 PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_010l },
3000 { 0x9710, 0x9805, 0x1000, 0x0010, 0, 0, titan_1284p1 }, 2724 { 0x9710, 0x9805, 0x1000, 0x0010, 0, 0, titan_1284p1 },
3001 { 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 }, 2725 { 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 },
3002 /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/ 2726 /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
3003 /* AFAVLAB_TK9902 */ 2727 /* AFAVLAB_TK9902 */
3004 { 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p}, 2728 { 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p},
3005 { 0x14db, 0x2121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2p}, 2729 { 0x14db, 0x2121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2p},
3006 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952PP, 2730 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952PP,
3007 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_952 }, 2731 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_952 },
3008 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954PP, 2732 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954PP,
3009 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_954 }, 2733 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_954 },
3010 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_12PCI840, 2734 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_12PCI840,
3011 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_840 }, 2735 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_840 },
3012 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe840, 2736 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe840,
3013 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport }, 2737 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
3014 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe840_G, 2738 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe840_G,
3015 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport }, 2739 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
3016 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_0, 2740 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_0,
3017 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport }, 2741 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
3018 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_0_G, 2742 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_0_G,
3019 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport }, 2743 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
3020 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1, 2744 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1,
3021 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport }, 2745 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
3022 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_G, 2746 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_G,
3023 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport }, 2747 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
3024 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_U, 2748 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_U,
3025 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport }, 2749 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
3026 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_GU, 2750 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_GU,
3027 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport }, 2751 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
3028 { PCI_VENDOR_ID_AKS, PCI_DEVICE_ID_AKS_ALADDINCARD, 2752 { PCI_VENDOR_ID_AKS, PCI_DEVICE_ID_AKS_ALADDINCARD,
3029 PCI_ANY_ID, PCI_ANY_ID, 0, 0, aks_0100 }, 2753 PCI_ANY_ID, PCI_ANY_ID, 0, 0, aks_0100 },
3030 { 0x14f2, 0x0121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, mobility_pp }, 2754 { 0x14f2, 0x0121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, mobility_pp },
3031 /* NetMos communication controllers */ 2755 /* NetMos communication controllers */
3032 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9705, 2756 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9705,
3033 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9705 }, 2757 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9705 },
3034 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9715, 2758 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9715,
3035 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9715 }, 2759 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9715 },
3036 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9755, 2760 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9755,
3037 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9755 }, 2761 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9755 },
3038 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9805, 2762 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9805,
3039 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9805 }, 2763 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9805 },
3040 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9815, 2764 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9815,
3041 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 }, 2765 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 },
3042 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901, 2766 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901,
3043 0xA000, 0x2000, 0, 0, netmos_9901 }, 2767 0xA000, 0x2000, 0, 0, netmos_9901 },
3044 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, 2768 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
3045 0xA000, 0x1000, 0, 0, netmos_9865 }, 2769 0xA000, 0x1000, 0, 0, netmos_9865 },
3046 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865, 2770 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
3047 0xA000, 0x2000, 0, 0, netmos_9865 }, 2771 0xA000, 0x2000, 0, 0, netmos_9865 },
3048 /* Quatech SPPXP-100 Parallel port PCI ExpressCard */ 2772 /* Quatech SPPXP-100 Parallel port PCI ExpressCard */
3049 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100, 2773 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100,
3050 PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 }, 2774 PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 },
3051 { 0, } /* terminate list */ 2775 { 0, } /* terminate list */
3052 }; 2776 };
3053 MODULE_DEVICE_TABLE(pci, parport_pc_pci_tbl); 2777 MODULE_DEVICE_TABLE(pci, parport_pc_pci_tbl);
3054 2778
3055 struct pci_parport_data { 2779 struct pci_parport_data {
3056 int num; 2780 int num;
3057 struct parport *ports[2]; 2781 struct parport *ports[2];
3058 }; 2782 };
3059 2783
3060 static int parport_pc_pci_probe(struct pci_dev *dev, 2784 static int parport_pc_pci_probe(struct pci_dev *dev,
3061 const struct pci_device_id *id) 2785 const struct pci_device_id *id)
3062 { 2786 {
3063 int err, count, n, i = id->driver_data; 2787 int err, count, n, i = id->driver_data;
3064 struct pci_parport_data *data; 2788 struct pci_parport_data *data;
3065 2789
3066 if (i < last_sio) 2790 if (i < last_sio)
3067 /* This is an onboard Super-IO and has already been probed */ 2791 /* This is an onboard Super-IO and has already been probed */
3068 return 0; 2792 return 0;
3069 2793
3070 /* This is a PCI card */ 2794 /* This is a PCI card */
3071 i -= last_sio; 2795 i -= last_sio;
3072 count = 0; 2796 count = 0;
3073 err = pci_enable_device(dev); 2797 err = pci_enable_device(dev);
3074 if (err) 2798 if (err)
3075 return err; 2799 return err;
3076 2800
3077 data = kmalloc(sizeof(struct pci_parport_data), GFP_KERNEL); 2801 data = kmalloc(sizeof(struct pci_parport_data), GFP_KERNEL);
3078 if (!data) 2802 if (!data)
3079 return -ENOMEM; 2803 return -ENOMEM;
3080 2804
3081 if (cards[i].preinit_hook && 2805 if (cards[i].preinit_hook &&
3082 cards[i].preinit_hook(dev, PARPORT_IRQ_NONE, PARPORT_DMA_NONE)) { 2806 cards[i].preinit_hook(dev, PARPORT_IRQ_NONE, PARPORT_DMA_NONE)) {
3083 kfree(data); 2807 kfree(data);
3084 return -ENODEV; 2808 return -ENODEV;
3085 } 2809 }
3086 2810
3087 for (n = 0; n < cards[i].numports; n++) { 2811 for (n = 0; n < cards[i].numports; n++) {
3088 int lo = cards[i].addr[n].lo; 2812 int lo = cards[i].addr[n].lo;
3089 int hi = cards[i].addr[n].hi; 2813 int hi = cards[i].addr[n].hi;
3090 int irq; 2814 int irq;
3091 unsigned long io_lo, io_hi; 2815 unsigned long io_lo, io_hi;
3092 io_lo = pci_resource_start(dev, lo); 2816 io_lo = pci_resource_start(dev, lo);
3093 io_hi = 0; 2817 io_hi = 0;
3094 if ((hi >= 0) && (hi <= 6)) 2818 if ((hi >= 0) && (hi <= 6))
3095 io_hi = pci_resource_start(dev, hi); 2819 io_hi = pci_resource_start(dev, hi);
3096 else if (hi > 6) 2820 else if (hi > 6)
3097 io_lo += hi; /* Reinterpret the meaning of 2821 io_lo += hi; /* Reinterpret the meaning of
3098 "hi" as an offset (see SYBA 2822 "hi" as an offset (see SYBA
3099 def.) */ 2823 def.) */
3100 /* TODO: test if sharing interrupts works */ 2824 /* TODO: test if sharing interrupts works */
3101 irq = dev->irq; 2825 irq = dev->irq;
3102 if (irq == IRQ_NONE) { 2826 if (irq == IRQ_NONE) {
3103 printk(KERN_DEBUG 2827 printk(KERN_DEBUG
3104 "PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx)\n", 2828 "PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx)\n",
3105 parport_pc_pci_tbl[i + last_sio].vendor, 2829 parport_pc_pci_tbl[i + last_sio].vendor,
3106 parport_pc_pci_tbl[i + last_sio].device, 2830 parport_pc_pci_tbl[i + last_sio].device,
3107 io_lo, io_hi); 2831 io_lo, io_hi);
3108 irq = PARPORT_IRQ_NONE; 2832 irq = PARPORT_IRQ_NONE;
3109 } else { 2833 } else {
3110 printk(KERN_DEBUG 2834 printk(KERN_DEBUG
3111 "PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx), IRQ %d\n", 2835 "PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx), IRQ %d\n",
3112 parport_pc_pci_tbl[i + last_sio].vendor, 2836 parport_pc_pci_tbl[i + last_sio].vendor,
3113 parport_pc_pci_tbl[i + last_sio].device, 2837 parport_pc_pci_tbl[i + last_sio].device,
3114 io_lo, io_hi, irq); 2838 io_lo, io_hi, irq);
3115 } 2839 }
3116 data->ports[count] = 2840 data->ports[count] =
3117 parport_pc_probe_port(io_lo, io_hi, irq, 2841 parport_pc_probe_port(io_lo, io_hi, irq,
3118 PARPORT_DMA_NONE, &dev->dev, 2842 PARPORT_DMA_NONE, &dev->dev,
3119 IRQF_SHARED); 2843 IRQF_SHARED);
3120 if (data->ports[count]) 2844 if (data->ports[count])
3121 count++; 2845 count++;
3122 } 2846 }
3123 2847
3124 data->num = count; 2848 data->num = count;
3125 2849
3126 if (cards[i].postinit_hook) 2850 if (cards[i].postinit_hook)
3127 cards[i].postinit_hook(dev, count == 0); 2851 cards[i].postinit_hook(dev, count == 0);
3128 2852
3129 if (count) { 2853 if (count) {
3130 pci_set_drvdata(dev, data); 2854 pci_set_drvdata(dev, data);
3131 return 0; 2855 return 0;
3132 } 2856 }
3133 2857
3134 kfree(data); 2858 kfree(data);
3135 2859
3136 return -ENODEV; 2860 return -ENODEV;
3137 } 2861 }
3138 2862
3139 static void __devexit parport_pc_pci_remove(struct pci_dev *dev) 2863 static void __devexit parport_pc_pci_remove(struct pci_dev *dev)
3140 { 2864 {
3141 struct pci_parport_data *data = pci_get_drvdata(dev); 2865 struct pci_parport_data *data = pci_get_drvdata(dev);
3142 int i; 2866 int i;
3143 2867
3144 pci_set_drvdata(dev, NULL); 2868 pci_set_drvdata(dev, NULL);
3145 2869
3146 if (data) { 2870 if (data) {
3147 for (i = data->num - 1; i >= 0; i--) 2871 for (i = data->num - 1; i >= 0; i--)
3148 parport_pc_unregister_port(data->ports[i]); 2872 parport_pc_unregister_port(data->ports[i]);
3149 2873
3150 kfree(data); 2874 kfree(data);
3151 } 2875 }
3152 } 2876 }
3153 2877
3154 static struct pci_driver parport_pc_pci_driver = { 2878 static struct pci_driver parport_pc_pci_driver = {
3155 .name = "parport_pc", 2879 .name = "parport_pc",
3156 .id_table = parport_pc_pci_tbl, 2880 .id_table = parport_pc_pci_tbl,
3157 .probe = parport_pc_pci_probe, 2881 .probe = parport_pc_pci_probe,
3158 .remove = __devexit_p(parport_pc_pci_remove), 2882 .remove = __devexit_p(parport_pc_pci_remove),
3159 }; 2883 };
3160 2884
3161 static int __init parport_pc_init_superio(int autoirq, int autodma) 2885 static int __init parport_pc_init_superio(int autoirq, int autodma)
3162 { 2886 {
3163 const struct pci_device_id *id; 2887 const struct pci_device_id *id;
3164 struct pci_dev *pdev = NULL; 2888 struct pci_dev *pdev = NULL;
3165 int ret = 0; 2889 int ret = 0;
3166 2890
3167 for_each_pci_dev(pdev) { 2891 for_each_pci_dev(pdev) {
3168 id = pci_match_id(parport_pc_pci_tbl, pdev); 2892 id = pci_match_id(parport_pc_pci_tbl, pdev);
3169 if (id == NULL || id->driver_data >= last_sio) 2893 if (id == NULL || id->driver_data >= last_sio)
3170 continue; 2894 continue;
3171 2895
3172 if (parport_pc_superio_info[id->driver_data].probe( 2896 if (parport_pc_superio_info[id->driver_data].probe(
3173 pdev, autoirq, autodma, 2897 pdev, autoirq, autodma,
3174 parport_pc_superio_info[id->driver_data].via)) { 2898 parport_pc_superio_info[id->driver_data].via)) {
3175 ret++; 2899 ret++;
3176 } 2900 }
3177 } 2901 }
3178 2902
3179 return ret; /* number of devices found */ 2903 return ret; /* number of devices found */
3180 } 2904 }
3181 #else 2905 #else
3182 static struct pci_driver parport_pc_pci_driver; 2906 static struct pci_driver parport_pc_pci_driver;
3183 static int __init parport_pc_init_superio(int autoirq, int autodma) 2907 static int __init parport_pc_init_superio(int autoirq, int autodma)
3184 { 2908 {
3185 return 0; 2909 return 0;
3186 } 2910 }
3187 #endif /* CONFIG_PCI */ 2911 #endif /* CONFIG_PCI */
3188 2912
3189 #ifdef CONFIG_PNP 2913 #ifdef CONFIG_PNP
3190 2914
3191 static const struct pnp_device_id parport_pc_pnp_tbl[] = { 2915 static const struct pnp_device_id parport_pc_pnp_tbl[] = {
3192 /* Standard LPT Printer Port */ 2916 /* Standard LPT Printer Port */
3193 {.id = "PNP0400", .driver_data = 0}, 2917 {.id = "PNP0400", .driver_data = 0},
3194 /* ECP Printer Port */ 2918 /* ECP Printer Port */
3195 {.id = "PNP0401", .driver_data = 0}, 2919 {.id = "PNP0401", .driver_data = 0},
3196 { } 2920 { }
3197 }; 2921 };
3198 2922
3199 MODULE_DEVICE_TABLE(pnp, parport_pc_pnp_tbl); 2923 MODULE_DEVICE_TABLE(pnp, parport_pc_pnp_tbl);
3200 2924
3201 static int parport_pc_pnp_probe(struct pnp_dev *dev, 2925 static int parport_pc_pnp_probe(struct pnp_dev *dev,
3202 const struct pnp_device_id *id) 2926 const struct pnp_device_id *id)
3203 { 2927 {
3204 struct parport *pdata; 2928 struct parport *pdata;
3205 unsigned long io_lo, io_hi; 2929 unsigned long io_lo, io_hi;
3206 int dma, irq; 2930 int dma, irq;
3207 2931
3208 if (pnp_port_valid(dev, 0) && 2932 if (pnp_port_valid(dev, 0) &&
3209 !(pnp_port_flags(dev, 0) & IORESOURCE_DISABLED)) { 2933 !(pnp_port_flags(dev, 0) & IORESOURCE_DISABLED)) {
3210 io_lo = pnp_port_start(dev, 0); 2934 io_lo = pnp_port_start(dev, 0);
3211 } else 2935 } else
3212 return -EINVAL; 2936 return -EINVAL;
3213 2937
3214 if (pnp_port_valid(dev, 1) && 2938 if (pnp_port_valid(dev, 1) &&
3215 !(pnp_port_flags(dev, 1) & IORESOURCE_DISABLED)) { 2939 !(pnp_port_flags(dev, 1) & IORESOURCE_DISABLED)) {
3216 io_hi = pnp_port_start(dev, 1); 2940 io_hi = pnp_port_start(dev, 1);
3217 } else 2941 } else
3218 io_hi = 0; 2942 io_hi = 0;
3219 2943
3220 if (pnp_irq_valid(dev, 0) && 2944 if (pnp_irq_valid(dev, 0) &&
3221 !(pnp_irq_flags(dev, 0) & IORESOURCE_DISABLED)) { 2945 !(pnp_irq_flags(dev, 0) & IORESOURCE_DISABLED)) {
3222 irq = pnp_irq(dev, 0); 2946 irq = pnp_irq(dev, 0);
3223 } else 2947 } else
3224 irq = PARPORT_IRQ_NONE; 2948 irq = PARPORT_IRQ_NONE;
3225 2949
3226 if (pnp_dma_valid(dev, 0) && 2950 if (pnp_dma_valid(dev, 0) &&
3227 !(pnp_dma_flags(dev, 0) & IORESOURCE_DISABLED)) { 2951 !(pnp_dma_flags(dev, 0) & IORESOURCE_DISABLED)) {
3228 dma = pnp_dma(dev, 0); 2952 dma = pnp_dma(dev, 0);
3229 } else 2953 } else
3230 dma = PARPORT_DMA_NONE; 2954 dma = PARPORT_DMA_NONE;
3231 2955
3232 dev_info(&dev->dev, "reported by %s\n", dev->protocol->name); 2956 dev_info(&dev->dev, "reported by %s\n", dev->protocol->name);
3233 pdata = parport_pc_probe_port(io_lo, io_hi, irq, dma, &dev->dev, 0); 2957 pdata = parport_pc_probe_port(io_lo, io_hi, irq, dma, &dev->dev, 0);
3234 if (pdata == NULL) 2958 if (pdata == NULL)
3235 return -ENODEV; 2959 return -ENODEV;
3236 2960
3237 pnp_set_drvdata(dev, pdata); 2961 pnp_set_drvdata(dev, pdata);
3238 return 0; 2962 return 0;
3239 } 2963 }
3240 2964
3241 static void parport_pc_pnp_remove(struct pnp_dev *dev) 2965 static void parport_pc_pnp_remove(struct pnp_dev *dev)
3242 { 2966 {
3243 struct parport *pdata = (struct parport *)pnp_get_drvdata(dev); 2967 struct parport *pdata = (struct parport *)pnp_get_drvdata(dev);
3244 if (!pdata) 2968 if (!pdata)
3245 return; 2969 return;
3246 2970
3247 parport_pc_unregister_port(pdata); 2971 parport_pc_unregister_port(pdata);
3248 } 2972 }
3249 2973
3250 /* we only need the pnp layer to activate the device, at least for now */ 2974 /* we only need the pnp layer to activate the device, at least for now */
3251 static struct pnp_driver parport_pc_pnp_driver = { 2975 static struct pnp_driver parport_pc_pnp_driver = {
3252 .name = "parport_pc", 2976 .name = "parport_pc",
3253 .id_table = parport_pc_pnp_tbl, 2977 .id_table = parport_pc_pnp_tbl,
3254 .probe = parport_pc_pnp_probe, 2978 .probe = parport_pc_pnp_probe,
3255 .remove = parport_pc_pnp_remove, 2979 .remove = parport_pc_pnp_remove,
3256 }; 2980 };
3257 2981
3258 #else 2982 #else
3259 static struct pnp_driver parport_pc_pnp_driver; 2983 static struct pnp_driver parport_pc_pnp_driver;
3260 #endif /* CONFIG_PNP */ 2984 #endif /* CONFIG_PNP */
3261 2985
3262 static int __devinit parport_pc_platform_probe(struct platform_device *pdev) 2986 static int __devinit parport_pc_platform_probe(struct platform_device *pdev)
3263 { 2987 {
3264 /* Always succeed, the actual probing is done in 2988 /* Always succeed, the actual probing is done in
3265 * parport_pc_probe_port(). */ 2989 * parport_pc_probe_port(). */
3266 return 0; 2990 return 0;
3267 } 2991 }
3268 2992
3269 static struct platform_driver parport_pc_platform_driver = { 2993 static struct platform_driver parport_pc_platform_driver = {
3270 .driver = { 2994 .driver = {
3271 .owner = THIS_MODULE, 2995 .owner = THIS_MODULE,
3272 .name = "parport_pc", 2996 .name = "parport_pc",
3273 }, 2997 },
3274 .probe = parport_pc_platform_probe, 2998 .probe = parport_pc_platform_probe,
3275 }; 2999 };
3276 3000
3277 /* This is called by parport_pc_find_nonpci_ports (in asm/parport.h) */ 3001 /* This is called by parport_pc_find_nonpci_ports (in asm/parport.h) */
3278 static int __devinit __attribute__((unused)) 3002 static int __devinit __attribute__((unused))
3279 parport_pc_find_isa_ports(int autoirq, int autodma) 3003 parport_pc_find_isa_ports(int autoirq, int autodma)
3280 { 3004 {
3281 int count = 0; 3005 int count = 0;
3282 3006
3283 if (parport_pc_probe_port(0x3bc, 0x7bc, autoirq, autodma, NULL, 0)) 3007 if (parport_pc_probe_port(0x3bc, 0x7bc, autoirq, autodma, NULL, 0))
3284 count++; 3008 count++;
3285 if (parport_pc_probe_port(0x378, 0x778, autoirq, autodma, NULL, 0)) 3009 if (parport_pc_probe_port(0x378, 0x778, autoirq, autodma, NULL, 0))
3286 count++; 3010 count++;
3287 if (parport_pc_probe_port(0x278, 0x678, autoirq, autodma, NULL, 0)) 3011 if (parport_pc_probe_port(0x278, 0x678, autoirq, autodma, NULL, 0))
3288 count++; 3012 count++;
3289 3013
3290 return count; 3014 return count;
3291 } 3015 }
3292 3016
3293 /* This function is called by parport_pc_init if the user didn't 3017 /* This function is called by parport_pc_init if the user didn't
3294 * specify any ports to probe. Its job is to find some ports. Order 3018 * specify any ports to probe. Its job is to find some ports. Order
3295 * is important here -- we want ISA ports to be registered first, 3019 * is important here -- we want ISA ports to be registered first,
3296 * followed by PCI cards (for least surprise), but before that we want 3020 * followed by PCI cards (for least surprise), but before that we want
3297 * to do chipset-specific tests for some onboard ports that we know 3021 * to do chipset-specific tests for some onboard ports that we know
3298 * about. 3022 * about.
3299 * 3023 *
3300 * autoirq is PARPORT_IRQ_NONE, PARPORT_IRQ_AUTO, or PARPORT_IRQ_PROBEONLY 3024 * autoirq is PARPORT_IRQ_NONE, PARPORT_IRQ_AUTO, or PARPORT_IRQ_PROBEONLY
3301 * autodma is PARPORT_DMA_NONE or PARPORT_DMA_AUTO 3025 * autodma is PARPORT_DMA_NONE or PARPORT_DMA_AUTO
3302 */ 3026 */
3303 static void __init parport_pc_find_ports(int autoirq, int autodma) 3027 static void __init parport_pc_find_ports(int autoirq, int autodma)
3304 { 3028 {
3305 int count = 0, err; 3029 int count = 0, err;
3306 3030
3307 #ifdef CONFIG_PARPORT_PC_SUPERIO 3031 #ifdef CONFIG_PARPORT_PC_SUPERIO
3308 detect_and_report_it87(); 3032 detect_and_report_it87();
3309 detect_and_report_winbond(); 3033 detect_and_report_winbond();
3310 detect_and_report_smsc(); 3034 detect_and_report_smsc();
3311 #endif 3035 #endif
3312 3036
3313 /* Onboard SuperIO chipsets that show themselves on the PCI bus. */ 3037 /* Onboard SuperIO chipsets that show themselves on the PCI bus. */
3314 count += parport_pc_init_superio(autoirq, autodma); 3038 count += parport_pc_init_superio(autoirq, autodma);
3315 3039
3316 /* PnP ports, skip detection if SuperIO already found them */ 3040 /* PnP ports, skip detection if SuperIO already found them */
3317 if (!count) { 3041 if (!count) {
3318 err = pnp_register_driver(&parport_pc_pnp_driver); 3042 err = pnp_register_driver(&parport_pc_pnp_driver);
3319 if (!err) 3043 if (!err)
3320 pnp_registered_parport = 1; 3044 pnp_registered_parport = 1;
3321 } 3045 }
3322 3046
3323 /* ISA ports and whatever (see asm/parport.h). */ 3047 /* ISA ports and whatever (see asm/parport.h). */
3324 parport_pc_find_nonpci_ports(autoirq, autodma); 3048 parport_pc_find_nonpci_ports(autoirq, autodma);
3325 3049
3326 err = pci_register_driver(&parport_pc_pci_driver); 3050 err = pci_register_driver(&parport_pc_pci_driver);
3327 if (!err) 3051 if (!err)
3328 pci_registered_parport = 1; 3052 pci_registered_parport = 1;
3329 } 3053 }
3330 3054
3331 /* 3055 /*
3332 * Piles of crap below pretend to be a parser for module and kernel 3056 * Piles of crap below pretend to be a parser for module and kernel
3333 * parameters. Say "thank you" to whoever had come up with that 3057 * parameters. Say "thank you" to whoever had come up with that
3334 * syntax and keep in mind that code below is a cleaned up version. 3058 * syntax and keep in mind that code below is a cleaned up version.
3335 */ 3059 */
3336 3060
3337 static int __initdata io[PARPORT_PC_MAX_PORTS+1] = { 3061 static int __initdata io[PARPORT_PC_MAX_PORTS+1] = {
3338 [0 ... PARPORT_PC_MAX_PORTS] = 0 3062 [0 ... PARPORT_PC_MAX_PORTS] = 0
3339 }; 3063 };
3340 static int __initdata io_hi[PARPORT_PC_MAX_PORTS+1] = { 3064 static int __initdata io_hi[PARPORT_PC_MAX_PORTS+1] = {
3341 [0 ... PARPORT_PC_MAX_PORTS] = PARPORT_IOHI_AUTO 3065 [0 ... PARPORT_PC_MAX_PORTS] = PARPORT_IOHI_AUTO
3342 }; 3066 };
3343 static int __initdata dmaval[PARPORT_PC_MAX_PORTS] = { 3067 static int __initdata dmaval[PARPORT_PC_MAX_PORTS] = {
3344 [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_DMA_NONE 3068 [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_DMA_NONE
3345 }; 3069 };
3346 static int __initdata irqval[PARPORT_PC_MAX_PORTS] = { 3070 static int __initdata irqval[PARPORT_PC_MAX_PORTS] = {
3347 [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_IRQ_PROBEONLY 3071 [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_IRQ_PROBEONLY
3348 }; 3072 };
3349 3073
3350 static int __init parport_parse_param(const char *s, int *val, 3074 static int __init parport_parse_param(const char *s, int *val,
3351 int automatic, int none, int nofifo) 3075 int automatic, int none, int nofifo)
3352 { 3076 {
3353 if (!s) 3077 if (!s)
3354 return 0; 3078 return 0;
3355 if (!strncmp(s, "auto", 4)) 3079 if (!strncmp(s, "auto", 4))
3356 *val = automatic; 3080 *val = automatic;
3357 else if (!strncmp(s, "none", 4)) 3081 else if (!strncmp(s, "none", 4))
3358 *val = none; 3082 *val = none;
3359 else if (nofifo && !strncmp(s, "nofifo", 6)) 3083 else if (nofifo && !strncmp(s, "nofifo", 6))
3360 *val = nofifo; 3084 *val = nofifo;
3361 else { 3085 else {
3362 char *ep; 3086 char *ep;
3363 unsigned long r = simple_strtoul(s, &ep, 0); 3087 unsigned long r = simple_strtoul(s, &ep, 0);
3364 if (ep != s) 3088 if (ep != s)
3365 *val = r; 3089 *val = r;
3366 else { 3090 else {
3367 printk(KERN_ERR "parport: bad specifier `%s'\n", s); 3091 printk(KERN_ERR "parport: bad specifier `%s'\n", s);
3368 return -1; 3092 return -1;
3369 } 3093 }
3370 } 3094 }
3371 return 0; 3095 return 0;
3372 } 3096 }
3373 3097
3374 static int __init parport_parse_irq(const char *irqstr, int *val) 3098 static int __init parport_parse_irq(const char *irqstr, int *val)
3375 { 3099 {
3376 return parport_parse_param(irqstr, val, PARPORT_IRQ_AUTO, 3100 return parport_parse_param(irqstr, val, PARPORT_IRQ_AUTO,
3377 PARPORT_IRQ_NONE, 0); 3101 PARPORT_IRQ_NONE, 0);
3378 } 3102 }
3379 3103
3380 static int __init parport_parse_dma(const char *dmastr, int *val) 3104 static int __init parport_parse_dma(const char *dmastr, int *val)
3381 { 3105 {
3382 return parport_parse_param(dmastr, val, PARPORT_DMA_AUTO, 3106 return parport_parse_param(dmastr, val, PARPORT_DMA_AUTO,
3383 PARPORT_DMA_NONE, PARPORT_DMA_NOFIFO); 3107 PARPORT_DMA_NONE, PARPORT_DMA_NOFIFO);
3384 } 3108 }
3385 3109
3386 #ifdef CONFIG_PCI 3110 #ifdef CONFIG_PCI
3387 static int __init parport_init_mode_setup(char *str) 3111 static int __init parport_init_mode_setup(char *str)
3388 { 3112 {
3389 printk(KERN_DEBUG 3113 printk(KERN_DEBUG
3390 "parport_pc.c: Specified parameter parport_init_mode=%s\n", str); 3114 "parport_pc.c: Specified parameter parport_init_mode=%s\n", str);
3391 3115
3392 if (!strcmp(str, "spp")) 3116 if (!strcmp(str, "spp"))
3393 parport_init_mode = 1; 3117 parport_init_mode = 1;
3394 if (!strcmp(str, "ps2")) 3118 if (!strcmp(str, "ps2"))
3395 parport_init_mode = 2; 3119 parport_init_mode = 2;
3396 if (!strcmp(str, "epp")) 3120 if (!strcmp(str, "epp"))
3397 parport_init_mode = 3; 3121 parport_init_mode = 3;
3398 if (!strcmp(str, "ecp")) 3122 if (!strcmp(str, "ecp"))
3399 parport_init_mode = 4; 3123 parport_init_mode = 4;
3400 if (!strcmp(str, "ecpepp")) 3124 if (!strcmp(str, "ecpepp"))
3401 parport_init_mode = 5; 3125 parport_init_mode = 5;
3402 return 1; 3126 return 1;
3403 } 3127 }
3404 #endif 3128 #endif
3405 3129
3406 #ifdef MODULE 3130 #ifdef MODULE
3407 static char *irq[PARPORT_PC_MAX_PORTS]; 3131 static char *irq[PARPORT_PC_MAX_PORTS];
3408 static char *dma[PARPORT_PC_MAX_PORTS]; 3132 static char *dma[PARPORT_PC_MAX_PORTS];
3409 3133
3410 MODULE_PARM_DESC(io, "Base I/O address (SPP regs)"); 3134 MODULE_PARM_DESC(io, "Base I/O address (SPP regs)");
3411 module_param_array(io, int, NULL, 0); 3135 module_param_array(io, int, NULL, 0);
3412 MODULE_PARM_DESC(io_hi, "Base I/O address (ECR)"); 3136 MODULE_PARM_DESC(io_hi, "Base I/O address (ECR)");
3413 module_param_array(io_hi, int, NULL, 0); 3137 module_param_array(io_hi, int, NULL, 0);
3414 MODULE_PARM_DESC(irq, "IRQ line"); 3138 MODULE_PARM_DESC(irq, "IRQ line");
3415 module_param_array(irq, charp, NULL, 0); 3139 module_param_array(irq, charp, NULL, 0);
3416 MODULE_PARM_DESC(dma, "DMA channel"); 3140 MODULE_PARM_DESC(dma, "DMA channel");
3417 module_param_array(dma, charp, NULL, 0); 3141 module_param_array(dma, charp, NULL, 0);
3418 #if defined(CONFIG_PARPORT_PC_SUPERIO) || \ 3142 #if defined(CONFIG_PARPORT_PC_SUPERIO) || \
3419 (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO)) 3143 (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
3420 MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation"); 3144 MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation");
3421 module_param(verbose_probing, int, 0644); 3145 module_param(verbose_probing, int, 0644);
3422 #endif 3146 #endif
3423 #ifdef CONFIG_PCI 3147 #ifdef CONFIG_PCI
3424 static char *init_mode; 3148 static char *init_mode;
3425 MODULE_PARM_DESC(init_mode, 3149 MODULE_PARM_DESC(init_mode,
3426 "Initialise mode for VIA VT8231 port (spp, ps2, epp, ecp or ecpepp)"); 3150 "Initialise mode for VIA VT8231 port (spp, ps2, epp, ecp or ecpepp)");
3427 module_param(init_mode, charp, 0); 3151 module_param(init_mode, charp, 0);
3428 #endif 3152 #endif
3429 3153
3430 static int __init parse_parport_params(void) 3154 static int __init parse_parport_params(void)
3431 { 3155 {
3432 unsigned int i; 3156 unsigned int i;
3433 int val; 3157 int val;
3434 3158
3435 #ifdef CONFIG_PCI 3159 #ifdef CONFIG_PCI
3436 if (init_mode) 3160 if (init_mode)
3437 parport_init_mode_setup(init_mode); 3161 parport_init_mode_setup(init_mode);
3438 #endif 3162 #endif
3439 3163
3440 for (i = 0; i < PARPORT_PC_MAX_PORTS && io[i]; i++) { 3164 for (i = 0; i < PARPORT_PC_MAX_PORTS && io[i]; i++) {
3441 if (parport_parse_irq(irq[i], &val)) 3165 if (parport_parse_irq(irq[i], &val))
3442 return 1; 3166 return 1;
3443 irqval[i] = val; 3167 irqval[i] = val;
3444 if (parport_parse_dma(dma[i], &val)) 3168 if (parport_parse_dma(dma[i], &val))
3445 return 1; 3169 return 1;
3446 dmaval[i] = val; 3170 dmaval[i] = val;
3447 } 3171 }
3448 if (!io[0]) { 3172 if (!io[0]) {
3449 /* The user can make us use any IRQs or DMAs we find. */ 3173 /* The user can make us use any IRQs or DMAs we find. */
3450 if (irq[0] && !parport_parse_irq(irq[0], &val)) 3174 if (irq[0] && !parport_parse_irq(irq[0], &val))
3451 switch (val) { 3175 switch (val) {
3452 case PARPORT_IRQ_NONE: 3176 case PARPORT_IRQ_NONE:
3453 case PARPORT_IRQ_AUTO: 3177 case PARPORT_IRQ_AUTO:
3454 irqval[0] = val; 3178 irqval[0] = val;
3455 break; 3179 break;
3456 default: 3180 default:
3457 printk(KERN_WARNING 3181 printk(KERN_WARNING
3458 "parport_pc: irq specified " 3182 "parport_pc: irq specified "
3459 "without base address. Use 'io=' " 3183 "without base address. Use 'io=' "
3460 "to specify one\n"); 3184 "to specify one\n");
3461 } 3185 }
3462 3186
3463 if (dma[0] && !parport_parse_dma(dma[0], &val)) 3187 if (dma[0] && !parport_parse_dma(dma[0], &val))
3464 switch (val) { 3188 switch (val) {
3465 case PARPORT_DMA_NONE: 3189 case PARPORT_DMA_NONE:
3466 case PARPORT_DMA_AUTO: 3190 case PARPORT_DMA_AUTO:
3467 dmaval[0] = val; 3191 dmaval[0] = val;
3468 break; 3192 break;
3469 default: 3193 default:
3470 printk(KERN_WARNING 3194 printk(KERN_WARNING
3471 "parport_pc: dma specified " 3195 "parport_pc: dma specified "
3472 "without base address. Use 'io=' " 3196 "without base address. Use 'io=' "
3473 "to specify one\n"); 3197 "to specify one\n");
3474 } 3198 }
3475 } 3199 }
3476 return 0; 3200 return 0;
3477 } 3201 }
3478 3202
3479 #else 3203 #else
3480 3204
3481 static int parport_setup_ptr __initdata; 3205 static int parport_setup_ptr __initdata;
3482 3206
3483 /* 3207 /*
3484 * Acceptable parameters: 3208 * Acceptable parameters:
3485 * 3209 *
3486 * parport=0 3210 * parport=0
3487 * parport=auto 3211 * parport=auto
3488 * parport=0xBASE[,IRQ[,DMA]] 3212 * parport=0xBASE[,IRQ[,DMA]]
3489 * 3213 *
3490 * IRQ/DMA may be numeric or 'auto' or 'none' 3214 * IRQ/DMA may be numeric or 'auto' or 'none'
3491 */ 3215 */
3492 static int __init parport_setup(char *str) 3216 static int __init parport_setup(char *str)
3493 { 3217 {
3494 char *endptr; 3218 char *endptr;
3495 char *sep; 3219 char *sep;
3496 int val; 3220 int val;
3497 3221
3498 if (!str || !*str || (*str == '0' && !*(str+1))) { 3222 if (!str || !*str || (*str == '0' && !*(str+1))) {
3499 /* Disable parport if "parport=0" in cmdline */ 3223 /* Disable parport if "parport=0" in cmdline */
3500 io[0] = PARPORT_DISABLE; 3224 io[0] = PARPORT_DISABLE;
3501 return 1; 3225 return 1;
3502 } 3226 }
3503 3227
3504 if (!strncmp(str, "auto", 4)) { 3228 if (!strncmp(str, "auto", 4)) {
3505 irqval[0] = PARPORT_IRQ_AUTO; 3229 irqval[0] = PARPORT_IRQ_AUTO;
3506 dmaval[0] = PARPORT_DMA_AUTO; 3230 dmaval[0] = PARPORT_DMA_AUTO;
3507 return 1; 3231 return 1;
3508 } 3232 }
3509 3233
3510 val = simple_strtoul(str, &endptr, 0); 3234 val = simple_strtoul(str, &endptr, 0);
3511 if (endptr == str) { 3235 if (endptr == str) {
3512 printk(KERN_WARNING "parport=%s not understood\n", str); 3236 printk(KERN_WARNING "parport=%s not understood\n", str);
3513 return 1; 3237 return 1;
3514 } 3238 }
3515 3239
3516 if (parport_setup_ptr == PARPORT_PC_MAX_PORTS) { 3240 if (parport_setup_ptr == PARPORT_PC_MAX_PORTS) {
3517 printk(KERN_ERR "parport=%s ignored, too many ports\n", str); 3241 printk(KERN_ERR "parport=%s ignored, too many ports\n", str);
3518 return 1; 3242 return 1;
3519 } 3243 }
3520 3244
3521 io[parport_setup_ptr] = val; 3245 io[parport_setup_ptr] = val;
3522 irqval[parport_setup_ptr] = PARPORT_IRQ_NONE; 3246 irqval[parport_setup_ptr] = PARPORT_IRQ_NONE;
3523 dmaval[parport_setup_ptr] = PARPORT_DMA_NONE; 3247 dmaval[parport_setup_ptr] = PARPORT_DMA_NONE;
3524 3248
3525 sep = strchr(str, ','); 3249 sep = strchr(str, ',');
3526 if (sep++) { 3250 if (sep++) {
3527 if (parport_parse_irq(sep, &val)) 3251 if (parport_parse_irq(sep, &val))
3528 return 1; 3252 return 1;
3529 irqval[parport_setup_ptr] = val; 3253 irqval[parport_setup_ptr] = val;
3530 sep = strchr(sep, ','); 3254 sep = strchr(sep, ',');
3531 if (sep++) { 3255 if (sep++) {
3532 if (parport_parse_dma(sep, &val)) 3256 if (parport_parse_dma(sep, &val))
3533 return 1; 3257 return 1;
3534 dmaval[parport_setup_ptr] = val; 3258 dmaval[parport_setup_ptr] = val;
3535 } 3259 }
3536 } 3260 }
3537 parport_setup_ptr++; 3261 parport_setup_ptr++;
3538 return 1; 3262 return 1;
3539 } 3263 }
3540 3264
3541 static int __init parse_parport_params(void) 3265 static int __init parse_parport_params(void)
3542 { 3266 {
3543 return io[0] == PARPORT_DISABLE; 3267 return io[0] == PARPORT_DISABLE;
3544 } 3268 }
3545 3269
3546 __setup("parport=", parport_setup); 3270 __setup("parport=", parport_setup);
3547 3271
3548 /* 3272 /*
3549 * Acceptable parameters: 3273 * Acceptable parameters:
3550 * 3274 *
3551 * parport_init_mode=[spp|ps2|epp|ecp|ecpepp] 3275 * parport_init_mode=[spp|ps2|epp|ecp|ecpepp]
3552 */ 3276 */
3553 #ifdef CONFIG_PCI 3277 #ifdef CONFIG_PCI
3554 __setup("parport_init_mode=", parport_init_mode_setup); 3278 __setup("parport_init_mode=", parport_init_mode_setup);
3555 #endif 3279 #endif
3556 #endif 3280 #endif
3557 3281
3558 /* "Parser" ends here */ 3282 /* "Parser" ends here */
3559 3283
3560 static int __init parport_pc_init(void) 3284 static int __init parport_pc_init(void)
3561 { 3285 {
3562 int err; 3286 int err;
3563 3287
3564 if (parse_parport_params()) 3288 if (parse_parport_params())
3565 return -EINVAL; 3289 return -EINVAL;
3566 3290
3567 err = platform_driver_register(&parport_pc_platform_driver); 3291 err = platform_driver_register(&parport_pc_platform_driver);
3568 if (err) 3292 if (err)
3569 return err; 3293 return err;
3570 3294
3571 if (io[0]) { 3295 if (io[0]) {
3572 int i; 3296 int i;
3573 /* Only probe the ports we were given. */ 3297 /* Only probe the ports we were given. */
3574 user_specified = 1; 3298 user_specified = 1;
3575 for (i = 0; i < PARPORT_PC_MAX_PORTS; i++) { 3299 for (i = 0; i < PARPORT_PC_MAX_PORTS; i++) {
3576 if (!io[i]) 3300 if (!io[i])
3577 break; 3301 break;
3578 if (io_hi[i] == PARPORT_IOHI_AUTO) 3302 if (io_hi[i] == PARPORT_IOHI_AUTO)
3579 io_hi[i] = 0x400 + io[i]; 3303 io_hi[i] = 0x400 + io[i];
3580 parport_pc_probe_port(io[i], io_hi[i], 3304 parport_pc_probe_port(io[i], io_hi[i],
3581 irqval[i], dmaval[i], NULL, 0); 3305 irqval[i], dmaval[i], NULL, 0);
3582 } 3306 }
3583 } else 3307 } else
3584 parport_pc_find_ports(irqval[0], dmaval[0]); 3308 parport_pc_find_ports(irqval[0], dmaval[0]);
3585 3309
3586 return 0; 3310 return 0;
3587 } 3311 }
3588 3312
3589 static void __exit parport_pc_exit(void) 3313 static void __exit parport_pc_exit(void)
3590 { 3314 {
3591 if (pci_registered_parport) 3315 if (pci_registered_parport)
3592 pci_unregister_driver(&parport_pc_pci_driver); 3316 pci_unregister_driver(&parport_pc_pci_driver);
3593 if (pnp_registered_parport) 3317 if (pnp_registered_parport)
3594 pnp_unregister_driver(&parport_pc_pnp_driver); 3318 pnp_unregister_driver(&parport_pc_pnp_driver);
3595 platform_driver_unregister(&parport_pc_platform_driver); 3319 platform_driver_unregister(&parport_pc_platform_driver);
3596 3320
3597 while (!list_empty(&ports_list)) { 3321 while (!list_empty(&ports_list)) {
3598 struct parport_pc_private *priv; 3322 struct parport_pc_private *priv;
3599 struct parport *port; 3323 struct parport *port;
3600 priv = list_entry(ports_list.next, 3324 priv = list_entry(ports_list.next,
3601 struct parport_pc_private, list); 3325 struct parport_pc_private, list);
3602 port = priv->port; 3326 port = priv->port;
3603 if (port->dev && port->dev->bus == &platform_bus_type) 3327 if (port->dev && port->dev->bus == &platform_bus_type)
3604 platform_device_unregister( 3328 platform_device_unregister(
3605 to_platform_device(port->dev)); 3329 to_platform_device(port->dev));
3606 parport_pc_unregister_port(port); 3330 parport_pc_unregister_port(port);
3607 } 3331 }
3608 } 3332 }
3609 3333
3610 MODULE_AUTHOR("Phil Blundell, Tim Waugh, others"); 3334 MODULE_AUTHOR("Phil Blundell, Tim Waugh, others");
3611 MODULE_DESCRIPTION("PC-style parallel port driver"); 3335 MODULE_DESCRIPTION("PC-style parallel port driver");
3612 MODULE_LICENSE("GPL"); 3336 MODULE_LICENSE("GPL");
3613 module_init(parport_pc_init) 3337 module_init(parport_pc_init)
3614 module_exit(parport_pc_exit) 3338 module_exit(parport_pc_exit)
3615 3339
drivers/parport/parport_sunbpp.c
1 /* parport_sunbpp.c: Parallel-port routines for SBUS 1 /* parport_sunbpp.c: Parallel-port routines for SBUS
2 * 2 *
3 * Author: Derrick J. Brashear <shadow@dementia.org> 3 * Author: Derrick J. Brashear <shadow@dementia.org>
4 * 4 *
5 * based on work by: 5 * based on work by:
6 * Phil Blundell <philb@gnu.org> 6 * Phil Blundell <philb@gnu.org>
7 * Tim Waugh <tim@cyberelk.demon.co.uk> 7 * Tim Waugh <tim@cyberelk.demon.co.uk>
8 * Jose Renau <renau@acm.org> 8 * Jose Renau <renau@acm.org>
9 * David Campbell <campbell@tirian.che.curtin.edu.au> 9 * David Campbell <campbell@tirian.che.curtin.edu.au>
10 * Grant Guenther <grant@torque.net> 10 * Grant Guenther <grant@torque.net>
11 * Eddie C. Dost <ecd@skynet.be> 11 * Eddie C. Dost <ecd@skynet.be>
12 * Stephen Williams (steve@icarus.com) 12 * Stephen Williams (steve@icarus.com)
13 * Gus Baldauf (gbaldauf@ix.netcom.com) 13 * Gus Baldauf (gbaldauf@ix.netcom.com)
14 * Peter Zaitcev 14 * Peter Zaitcev
15 * Tom Dyas 15 * Tom Dyas
16 * 16 *
17 * Updated to new SBUS device framework: David S. Miller <davem@davemloft.net> 17 * Updated to new SBUS device framework: David S. Miller <davem@davemloft.net>
18 * 18 *
19 */ 19 */
20 20
21 #include <linux/string.h> 21 #include <linux/string.h>
22 #include <linux/module.h> 22 #include <linux/module.h>
23 #include <linux/delay.h> 23 #include <linux/delay.h>
24 #include <linux/errno.h> 24 #include <linux/errno.h>
25 #include <linux/ioport.h> 25 #include <linux/ioport.h>
26 #include <linux/kernel.h> 26 #include <linux/kernel.h>
27 #include <linux/slab.h> 27 #include <linux/slab.h>
28 #include <linux/init.h> 28 #include <linux/init.h>
29 #include <linux/of.h> 29 #include <linux/of.h>
30 #include <linux/of_device.h> 30 #include <linux/of_device.h>
31 31
32 #include <linux/parport.h> 32 #include <linux/parport.h>
33 33
34 #include <asm/ptrace.h> 34 #include <asm/ptrace.h>
35 #include <linux/interrupt.h> 35 #include <linux/interrupt.h>
36 36
37 #include <asm/io.h> 37 #include <asm/io.h>
38 #include <asm/oplib.h> /* OpenProm Library */ 38 #include <asm/oplib.h> /* OpenProm Library */
39 #include <asm/dma.h> /* BPP uses LSI 64854 for DMA */ 39 #include <asm/dma.h> /* BPP uses LSI 64854 for DMA */
40 #include <asm/irq.h> 40 #include <asm/irq.h>
41 #include <asm/sunbpp.h> 41 #include <asm/sunbpp.h>
42 42
43 #undef __SUNBPP_DEBUG 43 #undef __SUNBPP_DEBUG
44 #ifdef __SUNBPP_DEBUG 44 #ifdef __SUNBPP_DEBUG
45 #define dprintk(x) printk x 45 #define dprintk(x) printk x
46 #else 46 #else
47 #define dprintk(x) 47 #define dprintk(x)
48 #endif 48 #endif
49 49
50 static void parport_sunbpp_disable_irq(struct parport *p) 50 static void parport_sunbpp_disable_irq(struct parport *p)
51 { 51 {
52 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 52 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
53 u32 tmp; 53 u32 tmp;
54 54
55 tmp = sbus_readl(&regs->p_csr); 55 tmp = sbus_readl(&regs->p_csr);
56 tmp &= ~DMA_INT_ENAB; 56 tmp &= ~DMA_INT_ENAB;
57 sbus_writel(tmp, &regs->p_csr); 57 sbus_writel(tmp, &regs->p_csr);
58 } 58 }
59 59
60 static void parport_sunbpp_enable_irq(struct parport *p) 60 static void parport_sunbpp_enable_irq(struct parport *p)
61 { 61 {
62 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 62 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
63 u32 tmp; 63 u32 tmp;
64 64
65 tmp = sbus_readl(&regs->p_csr); 65 tmp = sbus_readl(&regs->p_csr);
66 tmp |= DMA_INT_ENAB; 66 tmp |= DMA_INT_ENAB;
67 sbus_writel(tmp, &regs->p_csr); 67 sbus_writel(tmp, &regs->p_csr);
68 } 68 }
69 69
70 static void parport_sunbpp_write_data(struct parport *p, unsigned char d) 70 static void parport_sunbpp_write_data(struct parport *p, unsigned char d)
71 { 71 {
72 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 72 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
73 73
74 sbus_writeb(d, &regs->p_dr); 74 sbus_writeb(d, &regs->p_dr);
75 dprintk((KERN_DEBUG "wrote 0x%x\n", d)); 75 dprintk((KERN_DEBUG "wrote 0x%x\n", d));
76 } 76 }
77 77
78 static unsigned char parport_sunbpp_read_data(struct parport *p) 78 static unsigned char parport_sunbpp_read_data(struct parport *p)
79 { 79 {
80 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 80 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
81 81
82 return sbus_readb(&regs->p_dr); 82 return sbus_readb(&regs->p_dr);
83 } 83 }
84 84
85 #if 0
86 static void control_pc_to_sunbpp(struct parport *p, unsigned char status)
87 {
88 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
89 unsigned char value_tcr = sbus_readb(&regs->p_tcr);
90 unsigned char value_or = sbus_readb(&regs->p_or);
91
92 if (status & PARPORT_CONTROL_STROBE)
93 value_tcr |= P_TCR_DS;
94 if (status & PARPORT_CONTROL_AUTOFD)
95 value_or |= P_OR_AFXN;
96 if (status & PARPORT_CONTROL_INIT)
97 value_or |= P_OR_INIT;
98 if (status & PARPORT_CONTROL_SELECT)
99 value_or |= P_OR_SLCT_IN;
100
101 sbus_writeb(value_or, &regs->p_or);
102 sbus_writeb(value_tcr, &regs->p_tcr);
103 }
104 #endif
105
106 static unsigned char status_sunbpp_to_pc(struct parport *p) 85 static unsigned char status_sunbpp_to_pc(struct parport *p)
107 { 86 {
108 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 87 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
109 unsigned char bits = 0; 88 unsigned char bits = 0;
110 unsigned char value_tcr = sbus_readb(&regs->p_tcr); 89 unsigned char value_tcr = sbus_readb(&regs->p_tcr);
111 unsigned char value_ir = sbus_readb(&regs->p_ir); 90 unsigned char value_ir = sbus_readb(&regs->p_ir);
112 91
113 if (!(value_ir & P_IR_ERR)) 92 if (!(value_ir & P_IR_ERR))
114 bits |= PARPORT_STATUS_ERROR; 93 bits |= PARPORT_STATUS_ERROR;
115 if (!(value_ir & P_IR_SLCT)) 94 if (!(value_ir & P_IR_SLCT))
116 bits |= PARPORT_STATUS_SELECT; 95 bits |= PARPORT_STATUS_SELECT;
117 if (!(value_ir & P_IR_PE)) 96 if (!(value_ir & P_IR_PE))
118 bits |= PARPORT_STATUS_PAPEROUT; 97 bits |= PARPORT_STATUS_PAPEROUT;
119 if (value_tcr & P_TCR_ACK) 98 if (value_tcr & P_TCR_ACK)
120 bits |= PARPORT_STATUS_ACK; 99 bits |= PARPORT_STATUS_ACK;
121 if (!(value_tcr & P_TCR_BUSY)) 100 if (!(value_tcr & P_TCR_BUSY))
122 bits |= PARPORT_STATUS_BUSY; 101 bits |= PARPORT_STATUS_BUSY;
123 102
124 dprintk((KERN_DEBUG "tcr 0x%x ir 0x%x\n", value_tcr, value_ir)); 103 dprintk((KERN_DEBUG "tcr 0x%x ir 0x%x\n", value_tcr, value_ir));
125 dprintk((KERN_DEBUG "read status 0x%x\n", bits)); 104 dprintk((KERN_DEBUG "read status 0x%x\n", bits));
126 return bits; 105 return bits;
127 } 106 }
128 107
129 static unsigned char control_sunbpp_to_pc(struct parport *p) 108 static unsigned char control_sunbpp_to_pc(struct parport *p)
130 { 109 {
131 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 110 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
132 unsigned char bits = 0; 111 unsigned char bits = 0;
133 unsigned char value_tcr = sbus_readb(&regs->p_tcr); 112 unsigned char value_tcr = sbus_readb(&regs->p_tcr);
134 unsigned char value_or = sbus_readb(&regs->p_or); 113 unsigned char value_or = sbus_readb(&regs->p_or);
135 114
136 if (!(value_tcr & P_TCR_DS)) 115 if (!(value_tcr & P_TCR_DS))
137 bits |= PARPORT_CONTROL_STROBE; 116 bits |= PARPORT_CONTROL_STROBE;
138 if (!(value_or & P_OR_AFXN)) 117 if (!(value_or & P_OR_AFXN))
139 bits |= PARPORT_CONTROL_AUTOFD; 118 bits |= PARPORT_CONTROL_AUTOFD;
140 if (!(value_or & P_OR_INIT)) 119 if (!(value_or & P_OR_INIT))
141 bits |= PARPORT_CONTROL_INIT; 120 bits |= PARPORT_CONTROL_INIT;
142 if (value_or & P_OR_SLCT_IN) 121 if (value_or & P_OR_SLCT_IN)
143 bits |= PARPORT_CONTROL_SELECT; 122 bits |= PARPORT_CONTROL_SELECT;
144 123
145 dprintk((KERN_DEBUG "tcr 0x%x or 0x%x\n", value_tcr, value_or)); 124 dprintk((KERN_DEBUG "tcr 0x%x or 0x%x\n", value_tcr, value_or));
146 dprintk((KERN_DEBUG "read control 0x%x\n", bits)); 125 dprintk((KERN_DEBUG "read control 0x%x\n", bits));
147 return bits; 126 return bits;
148 } 127 }
149 128
150 static unsigned char parport_sunbpp_read_control(struct parport *p) 129 static unsigned char parport_sunbpp_read_control(struct parport *p)
151 { 130 {
152 return control_sunbpp_to_pc(p); 131 return control_sunbpp_to_pc(p);
153 } 132 }
154 133
155 static unsigned char parport_sunbpp_frob_control(struct parport *p, 134 static unsigned char parport_sunbpp_frob_control(struct parport *p,
156 unsigned char mask, 135 unsigned char mask,
157 unsigned char val) 136 unsigned char val)
158 { 137 {
159 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 138 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
160 unsigned char value_tcr = sbus_readb(&regs->p_tcr); 139 unsigned char value_tcr = sbus_readb(&regs->p_tcr);
161 unsigned char value_or = sbus_readb(&regs->p_or); 140 unsigned char value_or = sbus_readb(&regs->p_or);
162 141
163 dprintk((KERN_DEBUG "frob1: tcr 0x%x or 0x%x\n", 142 dprintk((KERN_DEBUG "frob1: tcr 0x%x or 0x%x\n",
164 value_tcr, value_or)); 143 value_tcr, value_or));
165 if (mask & PARPORT_CONTROL_STROBE) { 144 if (mask & PARPORT_CONTROL_STROBE) {
166 if (val & PARPORT_CONTROL_STROBE) { 145 if (val & PARPORT_CONTROL_STROBE) {
167 value_tcr &= ~P_TCR_DS; 146 value_tcr &= ~P_TCR_DS;
168 } else { 147 } else {
169 value_tcr |= P_TCR_DS; 148 value_tcr |= P_TCR_DS;
170 } 149 }
171 } 150 }
172 if (mask & PARPORT_CONTROL_AUTOFD) { 151 if (mask & PARPORT_CONTROL_AUTOFD) {
173 if (val & PARPORT_CONTROL_AUTOFD) { 152 if (val & PARPORT_CONTROL_AUTOFD) {
174 value_or &= ~P_OR_AFXN; 153 value_or &= ~P_OR_AFXN;
175 } else { 154 } else {
176 value_or |= P_OR_AFXN; 155 value_or |= P_OR_AFXN;
177 } 156 }
178 } 157 }
179 if (mask & PARPORT_CONTROL_INIT) { 158 if (mask & PARPORT_CONTROL_INIT) {
180 if (val & PARPORT_CONTROL_INIT) { 159 if (val & PARPORT_CONTROL_INIT) {
181 value_or &= ~P_OR_INIT; 160 value_or &= ~P_OR_INIT;
182 } else { 161 } else {
183 value_or |= P_OR_INIT; 162 value_or |= P_OR_INIT;
184 } 163 }
185 } 164 }
186 if (mask & PARPORT_CONTROL_SELECT) { 165 if (mask & PARPORT_CONTROL_SELECT) {
187 if (val & PARPORT_CONTROL_SELECT) { 166 if (val & PARPORT_CONTROL_SELECT) {
188 value_or |= P_OR_SLCT_IN; 167 value_or |= P_OR_SLCT_IN;
189 } else { 168 } else {
190 value_or &= ~P_OR_SLCT_IN; 169 value_or &= ~P_OR_SLCT_IN;
191 } 170 }
192 } 171 }
193 172
194 sbus_writeb(value_or, &regs->p_or); 173 sbus_writeb(value_or, &regs->p_or);
195 sbus_writeb(value_tcr, &regs->p_tcr); 174 sbus_writeb(value_tcr, &regs->p_tcr);
196 dprintk((KERN_DEBUG "frob2: tcr 0x%x or 0x%x\n", 175 dprintk((KERN_DEBUG "frob2: tcr 0x%x or 0x%x\n",
197 value_tcr, value_or)); 176 value_tcr, value_or));
198 return parport_sunbpp_read_control(p); 177 return parport_sunbpp_read_control(p);
199 } 178 }
200 179
201 static void parport_sunbpp_write_control(struct parport *p, unsigned char d) 180 static void parport_sunbpp_write_control(struct parport *p, unsigned char d)
202 { 181 {
203 const unsigned char wm = (PARPORT_CONTROL_STROBE | 182 const unsigned char wm = (PARPORT_CONTROL_STROBE |
204 PARPORT_CONTROL_AUTOFD | 183 PARPORT_CONTROL_AUTOFD |
205 PARPORT_CONTROL_INIT | 184 PARPORT_CONTROL_INIT |
206 PARPORT_CONTROL_SELECT); 185 PARPORT_CONTROL_SELECT);
207 186
208 parport_sunbpp_frob_control (p, wm, d & wm); 187 parport_sunbpp_frob_control (p, wm, d & wm);
209 } 188 }
210 189
211 static unsigned char parport_sunbpp_read_status(struct parport *p) 190 static unsigned char parport_sunbpp_read_status(struct parport *p)
212 { 191 {
213 return status_sunbpp_to_pc(p); 192 return status_sunbpp_to_pc(p);
214 } 193 }
215 194
216 static void parport_sunbpp_data_forward (struct parport *p) 195 static void parport_sunbpp_data_forward (struct parport *p)
217 { 196 {
218 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 197 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
219 unsigned char value_tcr = sbus_readb(&regs->p_tcr); 198 unsigned char value_tcr = sbus_readb(&regs->p_tcr);
220 199
221 dprintk((KERN_DEBUG "forward\n")); 200 dprintk((KERN_DEBUG "forward\n"));
222 value_tcr &= ~P_TCR_DIR; 201 value_tcr &= ~P_TCR_DIR;
223 sbus_writeb(value_tcr, &regs->p_tcr); 202 sbus_writeb(value_tcr, &regs->p_tcr);
224 } 203 }
225 204
226 static void parport_sunbpp_data_reverse (struct parport *p) 205 static void parport_sunbpp_data_reverse (struct parport *p)
227 { 206 {
228 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; 207 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base;
229 u8 val = sbus_readb(&regs->p_tcr); 208 u8 val = sbus_readb(&regs->p_tcr);
230 209
231 dprintk((KERN_DEBUG "reverse\n")); 210 dprintk((KERN_DEBUG "reverse\n"));
232 val |= P_TCR_DIR; 211 val |= P_TCR_DIR;
233 sbus_writeb(val, &regs->p_tcr); 212 sbus_writeb(val, &regs->p_tcr);
234 } 213 }
235 214
236 static void parport_sunbpp_init_state(struct pardevice *dev, struct parport_state *s) 215 static void parport_sunbpp_init_state(struct pardevice *dev, struct parport_state *s)
237 { 216 {
238 s->u.pc.ctr = 0xc; 217 s->u.pc.ctr = 0xc;
239 s->u.pc.ecr = 0x0; 218 s->u.pc.ecr = 0x0;
240 } 219 }
241 220
242 static void parport_sunbpp_save_state(struct parport *p, struct parport_state *s) 221 static void parport_sunbpp_save_state(struct parport *p, struct parport_state *s)
243 { 222 {
244 s->u.pc.ctr = parport_sunbpp_read_control(p); 223 s->u.pc.ctr = parport_sunbpp_read_control(p);
245 } 224 }
246 225
247 static void parport_sunbpp_restore_state(struct parport *p, struct parport_state *s) 226 static void parport_sunbpp_restore_state(struct parport *p, struct parport_state *s)
248 { 227 {
249 parport_sunbpp_write_control(p, s->u.pc.ctr); 228 parport_sunbpp_write_control(p, s->u.pc.ctr);
250 } 229 }
251 230
252 static struct parport_operations parport_sunbpp_ops = 231 static struct parport_operations parport_sunbpp_ops =
253 { 232 {
254 .write_data = parport_sunbpp_write_data, 233 .write_data = parport_sunbpp_write_data,
255 .read_data = parport_sunbpp_read_data, 234 .read_data = parport_sunbpp_read_data,
256 235
257 .write_control = parport_sunbpp_write_control, 236 .write_control = parport_sunbpp_write_control,
258 .read_control = parport_sunbpp_read_control, 237 .read_control = parport_sunbpp_read_control,
259 .frob_control = parport_sunbpp_frob_control, 238 .frob_control = parport_sunbpp_frob_control,
260 239
261 .read_status = parport_sunbpp_read_status, 240 .read_status = parport_sunbpp_read_status,
262 241
263 .enable_irq = parport_sunbpp_enable_irq, 242 .enable_irq = parport_sunbpp_enable_irq,
264 .disable_irq = parport_sunbpp_disable_irq, 243 .disable_irq = parport_sunbpp_disable_irq,
265 244
266 .data_forward = parport_sunbpp_data_forward, 245 .data_forward = parport_sunbpp_data_forward,
267 .data_reverse = parport_sunbpp_data_reverse, 246 .data_reverse = parport_sunbpp_data_reverse,
268 247
269 .init_state = parport_sunbpp_init_state, 248 .init_state = parport_sunbpp_init_state,
270 .save_state = parport_sunbpp_save_state, 249 .save_state = parport_sunbpp_save_state,
271 .restore_state = parport_sunbpp_restore_state, 250 .restore_state = parport_sunbpp_restore_state,
272 251
273 .epp_write_data = parport_ieee1284_epp_write_data, 252 .epp_write_data = parport_ieee1284_epp_write_data,
274 .epp_read_data = parport_ieee1284_epp_read_data, 253 .epp_read_data = parport_ieee1284_epp_read_data,
275 .epp_write_addr = parport_ieee1284_epp_write_addr, 254 .epp_write_addr = parport_ieee1284_epp_write_addr,
276 .epp_read_addr = parport_ieee1284_epp_read_addr, 255 .epp_read_addr = parport_ieee1284_epp_read_addr,
277 256
278 .ecp_write_data = parport_ieee1284_ecp_write_data, 257 .ecp_write_data = parport_ieee1284_ecp_write_data,
279 .ecp_read_data = parport_ieee1284_ecp_read_data, 258 .ecp_read_data = parport_ieee1284_ecp_read_data,
280 .ecp_write_addr = parport_ieee1284_ecp_write_addr, 259 .ecp_write_addr = parport_ieee1284_ecp_write_addr,
281 260
282 .compat_write_data = parport_ieee1284_write_compat, 261 .compat_write_data = parport_ieee1284_write_compat,
283 .nibble_read_data = parport_ieee1284_read_nibble, 262 .nibble_read_data = parport_ieee1284_read_nibble,
284 .byte_read_data = parport_ieee1284_read_byte, 263 .byte_read_data = parport_ieee1284_read_byte,
285 264
286 .owner = THIS_MODULE, 265 .owner = THIS_MODULE,
287 }; 266 };
288 267
289 static int __devinit bpp_probe(struct platform_device *op) 268 static int __devinit bpp_probe(struct platform_device *op)
290 { 269 {
291 struct parport_operations *ops; 270 struct parport_operations *ops;
292 struct bpp_regs __iomem *regs; 271 struct bpp_regs __iomem *regs;
293 int irq, dma, err = 0, size; 272 int irq, dma, err = 0, size;
294 unsigned char value_tcr; 273 unsigned char value_tcr;
295 void __iomem *base; 274 void __iomem *base;
296 struct parport *p; 275 struct parport *p;
297 276
298 irq = op->archdata.irqs[0]; 277 irq = op->archdata.irqs[0];
299 base = of_ioremap(&op->resource[0], 0, 278 base = of_ioremap(&op->resource[0], 0,
300 resource_size(&op->resource[0]), 279 resource_size(&op->resource[0]),
301 "sunbpp"); 280 "sunbpp");
302 if (!base) 281 if (!base)
303 return -ENODEV; 282 return -ENODEV;
304 283
305 size = resource_size(&op->resource[0]); 284 size = resource_size(&op->resource[0]);
306 dma = PARPORT_DMA_NONE; 285 dma = PARPORT_DMA_NONE;
307 286
308 ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL); 287 ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL);
309 if (!ops) 288 if (!ops)
310 goto out_unmap; 289 goto out_unmap;
311 290
312 memcpy (ops, &parport_sunbpp_ops, sizeof(struct parport_operations)); 291 memcpy (ops, &parport_sunbpp_ops, sizeof(struct parport_operations));
313 292
314 dprintk(("register_port\n")); 293 dprintk(("register_port\n"));
315 if (!(p = parport_register_port((unsigned long)base, irq, dma, ops))) 294 if (!(p = parport_register_port((unsigned long)base, irq, dma, ops)))
316 goto out_free_ops; 295 goto out_free_ops;
317 296
318 p->size = size; 297 p->size = size;
319 p->dev = &op->dev; 298 p->dev = &op->dev;
320 299
321 if ((err = request_irq(p->irq, parport_irq_handler, 300 if ((err = request_irq(p->irq, parport_irq_handler,
322 IRQF_SHARED, p->name, p)) != 0) { 301 IRQF_SHARED, p->name, p)) != 0) {
323 goto out_put_port; 302 goto out_put_port;
324 } 303 }
325 304
326 parport_sunbpp_enable_irq(p); 305 parport_sunbpp_enable_irq(p);
327 306
328 regs = (struct bpp_regs __iomem *)p->base; 307 regs = (struct bpp_regs __iomem *)p->base;
329 308
330 value_tcr = sbus_readb(&regs->p_tcr); 309 value_tcr = sbus_readb(&regs->p_tcr);
331 value_tcr &= ~P_TCR_DIR; 310 value_tcr &= ~P_TCR_DIR;
332 sbus_writeb(value_tcr, &regs->p_tcr); 311 sbus_writeb(value_tcr, &regs->p_tcr);
333 312
334 printk(KERN_INFO "%s: sunbpp at 0x%lx\n", p->name, p->base); 313 printk(KERN_INFO "%s: sunbpp at 0x%lx\n", p->name, p->base);
335 314
336 dev_set_drvdata(&op->dev, p); 315 dev_set_drvdata(&op->dev, p);
337 316
338 parport_announce_port(p); 317 parport_announce_port(p);
339 318
340 return 0; 319 return 0;
341 320
342 out_put_port: 321 out_put_port:
343 parport_put_port(p); 322 parport_put_port(p);
344 323
345 out_free_ops: 324 out_free_ops:
346 kfree(ops); 325 kfree(ops);
347 326
348 out_unmap: 327 out_unmap:
349 of_iounmap(&op->resource[0], base, size); 328 of_iounmap(&op->resource[0], base, size);
350 329
351 return err; 330 return err;
352 } 331 }
353 332
354 static int __devexit bpp_remove(struct platform_device *op) 333 static int __devexit bpp_remove(struct platform_device *op)
355 { 334 {
356 struct parport *p = dev_get_drvdata(&op->dev); 335 struct parport *p = dev_get_drvdata(&op->dev);
357 struct parport_operations *ops = p->ops; 336 struct parport_operations *ops = p->ops;
358 337
359 parport_remove_port(p); 338 parport_remove_port(p);
360 339
361 if (p->irq != PARPORT_IRQ_NONE) { 340 if (p->irq != PARPORT_IRQ_NONE) {
362 parport_sunbpp_disable_irq(p); 341 parport_sunbpp_disable_irq(p);
363 free_irq(p->irq, p); 342 free_irq(p->irq, p);
364 } 343 }
365 344
366 of_iounmap(&op->resource[0], (void __iomem *) p->base, p->size); 345 of_iounmap(&op->resource[0], (void __iomem *) p->base, p->size);
367 parport_put_port(p); 346 parport_put_port(p);
368 kfree(ops); 347 kfree(ops);
369 348
370 dev_set_drvdata(&op->dev, NULL); 349 dev_set_drvdata(&op->dev, NULL);
371 350
372 return 0; 351 return 0;
373 } 352 }
374 353
375 static const struct of_device_id bpp_match[] = { 354 static const struct of_device_id bpp_match[] = {
376 { 355 {
377 .name = "SUNW,bpp", 356 .name = "SUNW,bpp",
378 }, 357 },
379 {}, 358 {},
380 }; 359 };
381 360
382 MODULE_DEVICE_TABLE(of, bpp_match); 361 MODULE_DEVICE_TABLE(of, bpp_match);
383 362
384 static struct platform_driver bpp_sbus_driver = { 363 static struct platform_driver bpp_sbus_driver = {
385 .driver = { 364 .driver = {
386 .name = "bpp", 365 .name = "bpp",
387 .owner = THIS_MODULE, 366 .owner = THIS_MODULE,
388 .of_match_table = bpp_match, 367 .of_match_table = bpp_match,
389 }, 368 },
390 .probe = bpp_probe, 369 .probe = bpp_probe,
391 .remove = __devexit_p(bpp_remove), 370 .remove = __devexit_p(bpp_remove),
392 }; 371 };
393 372
394 module_platform_driver(bpp_sbus_driver); 373 module_platform_driver(bpp_sbus_driver);
395 374
396 MODULE_AUTHOR("Derrick J Brashear"); 375 MODULE_AUTHOR("Derrick J Brashear");
397 MODULE_DESCRIPTION("Parport Driver for Sparc bidirectional Port"); 376 MODULE_DESCRIPTION("Parport Driver for Sparc bidirectional Port");
398 MODULE_SUPPORTED_DEVICE("Sparc Bidirectional Parallel Port"); 377 MODULE_SUPPORTED_DEVICE("Sparc Bidirectional Parallel Port");
399 MODULE_VERSION("2.0"); 378 MODULE_VERSION("2.0");
400 MODULE_LICENSE("GPL"); 379 MODULE_LICENSE("GPL");
401 380