1 /*======================================================================
3 Device driver for Intel 82365 and compatible PC Card controllers,
4 and Yenta-compatible PCI-to-CardBus controllers.
6 i82365.c 1.265 1999/11/10 18:36:21
8 The contents of this file are subject to the Mozilla Public
9 License Version 1.1 (the "License"); you may not use this file
10 except in compliance with the License. You may obtain a copy of
11 the License at http://www.mozilla.org/MPL/
13 Software distributed under the License is distributed on an "AS
14 IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
15 implied. See the License for the specific language governing
16 rights and limitations under the License.
18 The initial developer of the original code is David A. Hinds
19 <dhinds@pcmcia.sourceforge.org>. Portions created by David A. Hinds
20 are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
22 Alternatively, the contents of this file may be used under the
23 terms of the GNU Public License version 2 (the "GPL"), in which
24 case the provisions of the GPL are applicable instead of the
25 above. If you wish to allow the use of your version of this file
26 only under the terms of the GPL and not to allow others to use
27 your version of this file under the MPL, indicate your decision
28 by deleting the provisions above and replace them with the notice
29 and other provisions required by the GPL. If you do not delete
30 the provisions above, a recipient may use your version of this
31 file under either the MPL or the GPL.
33 ======================================================================*/
35 #include <linux/module.h>
36 #include <linux/init.h>
37 #include <linux/config.h>
38 #include <linux/types.h>
39 #include <linux/fcntl.h>
40 #include <linux/string.h>
41 #include <linux/kernel.h>
42 #include <linux/errno.h>
43 #include <linux/timer.h>
44 #include <linux/sched.h>
45 #include <linux/malloc.h>
46 #include <linux/pci.h>
47 #include <linux/ioport.h>
48 #include <linux/delay.h>
49 #include <linux/proc_fs.h>
52 #include <asm/bitops.h>
53 #include <asm/segment.h>
54 #include <asm/system.h>
56 #include <pcmcia/version.h>
57 #include <pcmcia/cs_types.h>
58 #include <pcmcia/ss.h>
59 #include <pcmcia/cs.h>
61 /* ISA-bus controllers */
68 /* PCI-bus controllers */
69 #include "old-yenta.h"
75 static int pc_debug
= PCMCIA_DEBUG
;
76 MODULE_PARM(pc_debug
, "i");
77 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
78 static const char *version
=
79 "i82365.c 1.265 1999/11/10 18:36:21 (David Hinds)";
81 #define DEBUG(n, args...) do { } while (0)
84 static void irq_count(int, void *, struct pt_regs
*);
85 static inline int _check_irq(int irq
, int flags
)
87 if (request_irq(irq
, irq_count
, flags
, "x", NULL
) != 0)
93 /*====================================================================*/
95 /* Parameters that can be set with 'insmod' */
98 /* Default base address for i82365sl and other ISA chips */
99 static int i365_base
= 0x3e0;
100 /* Should we probe at 0x3e2 for an extra ISA controller? */
101 static int extra_sockets
= 0;
102 /* Specify a socket number to ignore */
103 static int ignore
= -1;
104 /* Bit map or list of interrupts to choose from */
105 static u_int irq_mask
= 0xffff;
106 static int irq_list
[16] = { -1 };
107 /* The card status change interrupt -- 0 means autoselect */
108 static int cs_irq
= 0;
111 /* Probe for safe interrupts? */
112 static int do_scan
= 1;
113 /* Poll status interval -- 0 means default to interrupt */
114 static int poll_interval
= 0;
115 /* External clock time, in nanoseconds. 120 ns = 8.33 MHz */
116 static int cycle_time
= 120;
119 static int has_dma
= -1;
120 static int has_led
= -1;
121 static int has_ring
= -1;
122 static int dynamic_mode
= 0;
123 static int freq_bypass
= -1;
124 static int setup_time
= -1;
125 static int cmd_time
= -1;
126 static int recov_time
= -1;
130 static int async_clock
= -1;
131 static int cable_mode
= -1;
132 static int wakeup
= 0;
136 MODULE_PARM(i365_base
, "i");
137 MODULE_PARM(ignore
, "i");
138 MODULE_PARM(extra_sockets
, "i");
139 MODULE_PARM(irq_mask
, "i");
140 MODULE_PARM(irq_list
, "1-16i");
141 MODULE_PARM(cs_irq
, "i");
142 MODULE_PARM(async_clock
, "i");
143 MODULE_PARM(cable_mode
, "i");
144 MODULE_PARM(wakeup
, "i");
147 MODULE_PARM(do_scan
, "i");
148 MODULE_PARM(poll_interval
, "i");
149 MODULE_PARM(cycle_time
, "i");
150 MODULE_PARM(has_dma
, "i");
151 MODULE_PARM(has_led
, "i");
152 MODULE_PARM(has_ring
, "i");
153 MODULE_PARM(dynamic_mode
, "i");
154 MODULE_PARM(freq_bypass
, "i");
155 MODULE_PARM(setup_time
, "i");
156 MODULE_PARM(cmd_time
, "i");
157 MODULE_PARM(recov_time
, "i");
161 static int do_pci_probe
= 1;
162 /* Default memory base address for CardBus controllers */
163 static u_int cb_mem_base
[] = { 0x68000000, 0xf8000000 };
164 static int fast_pci
= -1;
165 static int hold_time
= -1;
166 /* Override BIOS interrupt routing mode? */
167 static int irq_mode
= -1;
168 static int has_clkrun
= -1;
169 static int clkrun_sel
= -1;
170 static int pci_latency
= -1;
171 static int cb_latency
= -1;
172 static int cb_bus_base
= 0;
173 static int cb_bus_step
= 2;
174 static int cb_write_post
= -1;
175 MODULE_PARM(do_pci_probe
, "i");
176 MODULE_PARM(cb_mem_base
, "i");
177 MODULE_PARM(fast_pci
, "i");
178 MODULE_PARM(hold_time
, "i");
179 MODULE_PARM(irq_mode
, "i");
180 MODULE_PARM(has_clkrun
, "i");
181 MODULE_PARM(clkrun_sel
, "i");
182 MODULE_PARM(pci_latency
, "i");
183 MODULE_PARM(cb_latency
, "i");
184 MODULE_PARM(cb_bus_base
, "i");
185 MODULE_PARM(cb_bus_step
, "i");
186 MODULE_PARM(cb_write_post
, "i");
191 /* PCI card status change interrupts? */
192 static int pci_csc
= 0;
193 /* PCI IO card functional interrupts? */
194 static int pci_int
= 0;
195 MODULE_PARM(pci_csc
, "i");
196 MODULE_PARM(pci_int
, "i");
206 #error "No bus architectures defined!"
210 /*====================================================================*/
212 typedef struct cirrus_state_t
{
217 typedef struct vg46x_state_t
{
221 typedef struct ti113x_state_t
{
223 u_char cardctl
, devctl
, diag
;
226 typedef struct rl5c4xx_state_t
{
227 u_short misc
, ctl
, io
, mem
;
230 typedef struct o2micro_state_t
{
231 u_char mode_a
, mode_b
, mode_c
, mode_d
;
232 u_char mhpg
, fifo
, mode_e
;
235 typedef struct topic_state_t
{
236 u_char slot
, ccr
, cdr
;
240 typedef struct socket_info_t
{
246 void (*handler
)(void *info
, u_int events
);
248 #ifdef CONFIG_PROC_FS
249 struct proc_dir_entry
*proc
;
252 u_short vendor
, device
;
253 u_char revision
, bus
, devfn
;
255 u_char pci_lat
, cb_lat
, sub_bus
;
261 cirrus_state_t cirrus
;
264 o2micro_state_t o2micro
;
265 ti113x_state_t ti113x
;
266 rl5c4xx_state_t rl5c4xx
;
272 /* Where we keep track of our sockets... */
273 static int sockets
= 0;
274 static socket_info_t socket
[8] = {
278 /* Default ISA interrupt mask */
279 #define I365_MASK 0xdeb8 /* irq 15,14,12,11,10,9,7,5,4,3 */
283 static spinlock_t isa_lock
= SPIN_LOCK_UNLOCKED
;
284 #define ISA_LOCK(n, f) \
285 if (!(socket[n].flags & IS_CARDBUS)) spin_lock_irqsave(&isa_lock, f)
286 #define ISA_UNLOCK(n, f) \
287 if (!(socket[n].flags & IS_CARDBUS)) spin_unlock_irqrestore(&isa_lock, f)
289 #define ISA_LOCK(n, f) do { } while (0)
290 #define ISA_UNLOCK(n, f) do { } while (0)
293 static struct timer_list poll_timer
;
295 /*====================================================================*/
299 #ifndef PCI_VENDOR_ID_INTEL
300 #define PCI_VENDOR_ID_INTEL 0x8086
302 #ifndef PCI_VENDOR_ID_OMEGA
303 #define PCI_VENDOR_ID_OMEGA 0x119b
305 #ifndef PCI_DEVICE_ID_OMEGA_PCMCIA
306 #define PCI_DEVICE_ID_OMEGA_PCMCIA 0x1221
309 /* Default settings for PCI command configuration register */
310 #define CMD_DFLT (PCI_COMMAND_IO|PCI_COMMAND_MEMORY| \
311 PCI_COMMAND_MASTER|PCI_COMMAND_WAIT)
315 /* These definitions must match the pcic table! */
316 typedef enum pcic_id
{
318 IS_I82365A
, IS_I82365B
, IS_I82365DF
,
319 IS_IBM
, IS_RF5Cx96
, IS_VLSI
, IS_VG468
, IS_VG469
,
320 IS_PD6710
, IS_PD672X
, IS_VT83C469
,
323 IS_PD6729
, IS_PD6730
, IS_OZ6729
, IS_OZ6730
,
324 IS_I82092AA
, IS_OM82C092G
,
325 IS_PD6832
, IS_OZ6832
, IS_OZ6836
, IS_OZ6812
,
326 IS_RL5C465
, IS_RL5C466
, IS_RL5C475
, IS_RL5C476
, IS_RL5C478
,
328 IS_TI1130
, IS_TI1131
, IS_TI1250A
, IS_TI1220
, IS_TI1221
, IS_TI1210
,
329 IS_TI1251A
, IS_TI1251B
, IS_TI1450
, IS_TI1225
, IS_TI1211
, IS_TI1420
,
330 IS_TOPIC95_A
, IS_TOPIC95_B
, IS_TOPIC97
,
331 IS_UNK_PCI
, IS_UNK_CARDBUS
335 /* Flags for classifying groups of controllers */
336 #define IS_VADEM 0x0001
337 #define IS_CIRRUS 0x0002
339 #define IS_O2MICRO 0x0008
340 #define IS_VIA 0x0010
341 #define IS_TOPIC 0x0020
342 #define IS_RICOH 0x0040
343 #define IS_UNKNOWN 0x0400
344 #define IS_VG_PWR 0x0800
345 #define IS_DF_PWR 0x1000
346 #define IS_PCI 0x2000
347 #define IS_CARDBUS 0x4000
348 #define IS_ALIVE 0x8000
350 typedef struct pcic_t
{
354 u_short vendor
, device
;
358 static pcic_t pcic
[] = {
360 { "Intel i82365sl A step", 0 },
361 { "Intel i82365sl B step", 0 },
362 { "Intel i82365sl DF", IS_DF_PWR
},
364 { "Ricoh RF5C296/396", 0 },
365 { "VLSI 82C146", 0 },
366 { "Vadem VG-468", IS_VADEM
},
367 { "Vadem VG-469", IS_VADEM
|IS_VG_PWR
},
368 { "Cirrus PD6710", IS_CIRRUS
},
369 { "Cirrus PD672x", IS_CIRRUS
},
370 { "VIA VT83C469", IS_CIRRUS
|IS_VIA
},
373 { "Cirrus PD6729", IS_CIRRUS
|IS_PCI
,
374 PCI_VENDOR_ID_CIRRUS
, PCI_DEVICE_ID_CIRRUS_6729
},
375 { "Cirrus PD6730", IS_CIRRUS
|IS_PCI
,
376 PCI_VENDOR_ID_CIRRUS
, 0xffff },
377 { "O2Micro OZ6729", IS_O2MICRO
|IS_PCI
|IS_VG_PWR
,
378 PCI_VENDOR_ID_O2
, PCI_DEVICE_ID_O2_6729
},
379 { "O2Micro OZ6730", IS_O2MICRO
|IS_PCI
|IS_VG_PWR
,
380 PCI_VENDOR_ID_O2
, PCI_DEVICE_ID_O2_6730
},
381 { "Intel 82092AA", IS_PCI
,
382 PCI_VENDOR_ID_INTEL
, PCI_DEVICE_ID_OMEGA_PCMCIA
},
383 { "Omega Micro 82C092G", IS_PCI
,
384 PCI_VENDOR_ID_OMEGA
, PCI_DEVICE_ID_OMEGA_PCMCIA
},
385 { "Cirrus PD6832", IS_CIRRUS
|IS_CARDBUS
,
386 PCI_VENDOR_ID_CIRRUS
, PCI_DEVICE_ID_CIRRUS_6832
},
387 { "O2Micro OZ6832/OZ6833", IS_O2MICRO
|IS_CARDBUS
|IS_VG_PWR
,
388 PCI_VENDOR_ID_O2
, PCI_DEVICE_ID_O2_6832
},
389 { "O2Micro OZ6836/OZ6860", IS_O2MICRO
|IS_CARDBUS
|IS_VG_PWR
,
390 PCI_VENDOR_ID_O2
, PCI_DEVICE_ID_O2_6836
},
391 { "O2Micro OZ6812", IS_O2MICRO
|IS_CARDBUS
|IS_VG_PWR
,
392 PCI_VENDOR_ID_O2
, PCI_DEVICE_ID_O2_6812
},
393 { "Ricoh RL5C465", IS_RICOH
|IS_CARDBUS
|IS_DF_PWR
,
394 PCI_VENDOR_ID_RICOH
, PCI_DEVICE_ID_RICOH_RL5C465
},
395 { "Ricoh RL5C466", IS_RICOH
|IS_CARDBUS
|IS_DF_PWR
,
396 PCI_VENDOR_ID_RICOH
, PCI_DEVICE_ID_RICOH_RL5C466
},
397 { "Ricoh RL5C475", IS_RICOH
|IS_CARDBUS
|IS_DF_PWR
,
398 PCI_VENDOR_ID_RICOH
, PCI_DEVICE_ID_RICOH_RL5C475
},
399 { "Ricoh RL5C476", IS_RICOH
|IS_CARDBUS
|IS_DF_PWR
,
400 PCI_VENDOR_ID_RICOH
, PCI_DEVICE_ID_RICOH_RL5C476
},
401 { "Ricoh RL5C478", IS_RICOH
|IS_CARDBUS
|IS_DF_PWR
,
402 PCI_VENDOR_ID_RICOH
, PCI_DEVICE_ID_RICOH_RL5C478
},
403 { "SMC 34C90", IS_CARDBUS
|IS_DF_PWR
,
404 PCI_VENDOR_ID_SMC
, PCI_DEVICE_ID_SMC_34C90
},
405 { "TI 1130", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
406 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1130
},
407 { "TI 1131", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
408 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1131
},
409 { "TI 1250A", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
410 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1250A
},
411 { "TI 1220", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
412 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1220
},
413 { "TI 1221", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
414 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1221
},
415 { "TI 1210", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
416 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1210
},
417 { "TI 1251A", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
418 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1251A
},
419 { "TI 1251B", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
420 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1251B
},
421 { "TI 1450", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
422 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1450
},
423 { "TI 1225", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
424 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1225
},
425 { "TI 1211", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
426 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1211
},
427 { "TI 1420", IS_TI
|IS_CARDBUS
|IS_DF_PWR
,
428 PCI_VENDOR_ID_TI
, PCI_DEVICE_ID_TI_1420
},
429 { "Toshiba ToPIC95-A", IS_CARDBUS
|IS_TOPIC
|IS_DF_PWR
,
430 PCI_VENDOR_ID_TOSHIBA
, PCI_DEVICE_ID_TOSHIBA_TOPIC95_A
},
431 { "Toshiba ToPIC95-B", IS_CARDBUS
|IS_TOPIC
|IS_DF_PWR
,
432 PCI_VENDOR_ID_TOSHIBA
, PCI_DEVICE_ID_TOSHIBA_TOPIC95_B
},
433 { "Toshiba ToPIC97", IS_CARDBUS
|IS_TOPIC
|IS_DF_PWR
,
434 PCI_VENDOR_ID_TOSHIBA
, PCI_DEVICE_ID_TOSHIBA_TOPIC97
},
435 { "Unknown", IS_PCI
|IS_UNKNOWN
, 0, 0 },
436 { "Unknown", IS_CARDBUS
|IS_DF_PWR
|IS_UNKNOWN
, 0, 0 }
440 #define PCIC_COUNT (sizeof(pcic)/sizeof(pcic_t))
442 /*====================================================================*/
444 /* Some PCI shortcuts */
446 #define pci_readb pcibios_read_config_byte
447 #define pci_writeb pcibios_write_config_byte
448 #define pci_readw pcibios_read_config_word
449 #define pci_writew pcibios_write_config_word
450 #define pci_readl pcibios_read_config_dword
451 #define pci_writel pcibios_write_config_dword
453 #define cb_readb(s, r) readb(socket[s].cb_virt + (r))
454 #define cb_readl(s, r) readl(socket[s].cb_virt + (r))
455 #define cb_writeb(s, r, v) writeb(v, socket[s].cb_virt + (r))
456 #define cb_writel(s, r, v) writel(v, socket[s].cb_virt + (r))
458 static void cb_get_power(u_short sock
, socket_state_t
*state
);
459 static void cb_set_power(u_short sock
, socket_state_t
*state
);
461 /*====================================================================*/
463 static u_char
i365_get(u_short sock
, u_short reg
)
466 if (socket
[sock
].cb_virt
)
467 return cb_readb(sock
, 0x0800 + reg
);
471 ioaddr_t port
= socket
[sock
].ioaddr
;
473 reg
= I365_REG(socket
[sock
].psock
, reg
);
474 outb(reg
, port
); val
= inb(port
+1);
479 static void i365_set(u_short sock
, u_short reg
, u_char data
)
482 if (socket
[sock
].cb_virt
)
483 cb_writeb(sock
, 0x0800 + reg
, data
);
487 ioaddr_t port
= socket
[sock
].ioaddr
;
488 u_char val
= I365_REG(socket
[sock
].psock
, reg
);
489 outb(val
, port
); outb(data
, port
+1);
493 static void i365_bset(u_short sock
, u_short reg
, u_char mask
)
495 u_char d
= i365_get(sock
, reg
);
497 i365_set(sock
, reg
, d
);
500 static void i365_bclr(u_short sock
, u_short reg
, u_char mask
)
502 u_char d
= i365_get(sock
, reg
);
504 i365_set(sock
, reg
, d
);
507 static void i365_bflip(u_short sock
, u_short reg
, u_char mask
, int b
)
509 u_char d
= i365_get(sock
, reg
);
514 i365_set(sock
, reg
, d
);
517 static u_short
i365_get_pair(u_short sock
, u_short reg
)
520 a
= i365_get(sock
, reg
);
521 b
= i365_get(sock
, reg
+1);
525 static void i365_set_pair(u_short sock
, u_short reg
, u_short data
)
527 i365_set(sock
, reg
, data
& 0xff);
528 i365_set(sock
, reg
+1, data
>> 8);
531 /*======================================================================
533 Code to save and restore global state information for Cirrus
534 PD67xx controllers, and to set and report global configuration
537 The VIA controllers also use these routines, as they are mostly
538 Cirrus lookalikes, without the timing registers.
540 ======================================================================*/
542 #define flip(v,b,f) (v = ((f)<0) ? v : ((f) ? ((v)|(b)) : ((v)&(~b))))
544 static void cirrus_get_state(u_short s
)
547 cirrus_state_t
*p
= &socket
[s
].state
.cirrus
;
548 p
->misc1
= i365_get(s
, PD67_MISC_CTL_1
);
549 p
->misc1
&= (PD67_MC1_MEDIA_ENA
| PD67_MC1_INPACK_ENA
);
550 p
->misc2
= i365_get(s
, PD67_MISC_CTL_2
);
551 for (i
= 0; i
< 6; i
++)
552 p
->timer
[i
] = i365_get(s
, PD67_TIME_SETUP(0)+i
);
555 static void cirrus_set_state(u_short s
)
559 cirrus_state_t
*p
= &socket
[s
].state
.cirrus
;
561 misc
= i365_get(s
, PD67_MISC_CTL_2
);
562 i365_set(s
, PD67_MISC_CTL_2
, p
->misc2
);
563 if (misc
& PD67_MC2_SUSPEND
) mdelay(50);
564 misc
= i365_get(s
, PD67_MISC_CTL_1
);
565 misc
&= ~(PD67_MC1_MEDIA_ENA
| PD67_MC1_INPACK_ENA
);
566 i365_set(s
, PD67_MISC_CTL_1
, misc
| p
->misc1
);
567 for (i
= 0; i
< 6; i
++)
568 i365_set(s
, PD67_TIME_SETUP(0)+i
, p
->timer
[i
]);
572 static int cirrus_set_irq_mode(u_short s
, int pcsc
, int pint
)
574 flip(socket
[s
].bcr
, PD6832_BCR_MGMT_IRQ_ENA
, !pcsc
);
577 #endif /* CONFIG_PCI */
579 static u_int __init
cirrus_set_opts(u_short s
, char *buf
)
581 socket_info_t
*t
= &socket
[s
];
582 cirrus_state_t
*p
= &socket
[s
].state
.cirrus
;
585 if (has_ring
== -1) has_ring
= 1;
586 flip(p
->misc2
, PD67_MC2_IRQ15_RI
, has_ring
);
587 flip(p
->misc2
, PD67_MC2_DYNAMIC_MODE
, dynamic_mode
);
588 if (p
->misc2
& PD67_MC2_IRQ15_RI
)
589 strcat(buf
, " [ring]");
590 if (p
->misc2
& PD67_MC2_DYNAMIC_MODE
)
591 strcat(buf
, " [dyn mode]");
592 if (p
->misc1
& PD67_MC1_INPACK_ENA
)
593 strcat(buf
, " [inpack]");
594 if (!(t
->flags
& (IS_PCI
| IS_CARDBUS
))) {
595 if (p
->misc2
& PD67_MC2_IRQ15_RI
)
598 strcat(buf
, " [led]");
602 strcat(buf
, " [dma]");
604 flip(p
->misc2
, PD67_MC2_FREQ_BYPASS
, freq_bypass
);
605 if (p
->misc2
& PD67_MC2_FREQ_BYPASS
)
606 strcat(buf
, " [freq bypass]");
610 p
->misc1
&= ~PD67_MC1_MEDIA_ENA
;
611 flip(p
->misc2
, PD67_MC2_FAST_PCI
, fast_pci
);
612 if (p
->misc2
& PD67_MC2_IRQ15_RI
)
613 mask
&= (socket
[s
].type
== IS_PD6730
) ? ~0x0400 : ~0x8000;
616 if (!(t
->flags
& IS_VIA
)) {
618 p
->timer
[0] = p
->timer
[3] = setup_time
;
620 p
->timer
[1] = cmd_time
;
621 p
->timer
[4] = cmd_time
*2+4;
623 if (p
->timer
[1] == 0) {
624 p
->timer
[1] = 6; p
->timer
[4] = 16;
625 if (p
->timer
[0] == 0)
626 p
->timer
[0] = p
->timer
[3] = 1;
629 p
->timer
[2] = p
->timer
[5] = recov_time
;
631 sprintf(buf
, " [%d/%d/%d] [%d/%d/%d]", p
->timer
[0], p
->timer
[1],
632 p
->timer
[2], p
->timer
[3], p
->timer
[4], p
->timer
[5]);
637 /*======================================================================
639 Code to save and restore global state information for Vadem VG468
640 and VG469 controllers, and to set and report global configuration
643 ======================================================================*/
647 static void vg46x_get_state(u_short s
)
649 vg46x_state_t
*p
= &socket
[s
].state
.vg46x
;
650 p
->ctl
= i365_get(s
, VG468_CTL
);
651 if (socket
[s
].type
== IS_VG469
)
652 p
->ema
= i365_get(s
, VG469_EXT_MODE
);
655 static void vg46x_set_state(u_short s
)
657 vg46x_state_t
*p
= &socket
[s
].state
.vg46x
;
658 i365_set(s
, VG468_CTL
, p
->ctl
);
659 if (socket
[s
].type
== IS_VG469
)
660 i365_set(s
, VG469_EXT_MODE
, p
->ema
);
663 static u_int __init
vg46x_set_opts(u_short s
, char *buf
)
665 vg46x_state_t
*p
= &socket
[s
].state
.vg46x
;
667 flip(p
->ctl
, VG468_CTL_ASYNC
, async_clock
);
668 flip(p
->ema
, VG469_MODE_CABLE
, cable_mode
);
669 if (p
->ctl
& VG468_CTL_ASYNC
)
670 strcat(buf
, " [async]");
671 if (p
->ctl
& VG468_CTL_INPACK
)
672 strcat(buf
, " [inpack]");
673 if (socket
[s
].type
== IS_VG469
) {
674 u_char vsel
= i365_get(s
, VG469_VSELECT
);
675 if (vsel
& VG469_VSEL_EXT_STAT
) {
676 strcat(buf
, " [ext mode]");
677 if (vsel
& VG469_VSEL_EXT_BUS
)
678 strcat(buf
, " [isa buf]");
680 if (p
->ema
& VG469_MODE_CABLE
)
681 strcat(buf
, " [cable]");
682 if (p
->ema
& VG469_MODE_COMPAT
)
683 strcat(buf
, " [c step]");
690 /*======================================================================
692 Code to save and restore global state information for TI 1130 and
693 TI 1131 controllers, and to set and report global configuration
696 ======================================================================*/
700 static void ti113x_get_state(u_short s
)
702 socket_info_t
*t
= &socket
[s
];
703 ti113x_state_t
*p
= &socket
[s
].state
.ti113x
;
704 pci_readl(t
->bus
, t
->devfn
, TI113X_SYSTEM_CONTROL
, &p
->sysctl
);
705 pci_readb(t
->bus
, t
->devfn
, TI113X_CARD_CONTROL
, &p
->cardctl
);
706 pci_readb(t
->bus
, t
->devfn
, TI113X_DEVICE_CONTROL
, &p
->devctl
);
707 pci_readb(t
->bus
, t
->devfn
, TI1250_DIAGNOSTIC
, &p
->diag
);
710 static void ti113x_set_state(u_short s
)
712 socket_info_t
*t
= &socket
[s
];
713 ti113x_state_t
*p
= &socket
[s
].state
.ti113x
;
714 pci_writel(t
->bus
, t
->devfn
, TI113X_SYSTEM_CONTROL
, p
->sysctl
);
715 pci_writeb(t
->bus
, t
->devfn
, TI113X_CARD_CONTROL
, p
->cardctl
);
716 pci_writeb(t
->bus
, t
->devfn
, TI113X_DEVICE_CONTROL
, p
->devctl
);
717 pci_writeb(t
->bus
, t
->devfn
, TI1250_MULTIMEDIA_CTL
, 0);
718 pci_writeb(t
->bus
, t
->devfn
, TI1250_DIAGNOSTIC
, p
->diag
);
719 i365_set_pair(s
, TI113X_IO_OFFSET(0), 0);
720 i365_set_pair(s
, TI113X_IO_OFFSET(1), 0);
723 static int ti113x_set_irq_mode(u_short s
, int pcsc
, int pint
)
725 socket_info_t
*t
= &socket
[s
];
726 ti113x_state_t
*p
= &t
->state
.ti113x
;
727 t
->intr
= (pcsc
) ? I365_INTR_ENA
: 0;
728 if (t
->type
<= IS_TI1131
) {
729 p
->cardctl
&= ~(TI113X_CCR_PCI_IRQ_ENA
|
730 TI113X_CCR_PCI_IREQ
| TI113X_CCR_PCI_CSC
);
732 p
->cardctl
|= TI113X_CCR_PCI_IRQ_ENA
| TI113X_CCR_PCI_CSC
;
734 p
->cardctl
|= TI113X_CCR_PCI_IRQ_ENA
| TI113X_CCR_PCI_IREQ
;
735 } else if (t
->type
== IS_TI1250A
) {
736 p
->diag
&= TI1250_DIAG_PCI_CSC
| TI1250_DIAG_PCI_IREQ
;
738 p
->diag
|= TI1250_DIAG_PCI_CSC
;
740 p
->diag
|= TI1250_DIAG_PCI_IREQ
;
745 static u_int __init
ti113x_set_opts(u_short s
, char *buf
)
747 socket_info_t
*t
= &socket
[s
];
748 ti113x_state_t
*p
= &t
->state
.ti113x
;
750 int old
= (t
->type
<= IS_TI1131
);
752 flip(p
->sysctl
, TI113X_SCR_CLKRUN_ENA
, has_clkrun
);
753 flip(p
->sysctl
, TI113X_SCR_CLKRUN_SEL
, clkrun_sel
);
754 flip(p
->cardctl
, TI113X_CCR_RIENB
, has_ring
);
755 p
->cardctl
&= ~TI113X_CCR_ZVENABLE
;
758 p
->devctl
&= ~TI113X_DCR_IMODE_MASK
;
759 p
->devctl
|= TI113X_DCR_IMODE_ISA
;
762 p
->devctl
&= ~TI113X_DCR_IMODE_MASK
;
763 p
->devctl
|= TI113X_DCR_IMODE_SERIAL
;
766 p
->devctl
&= ~TI113X_DCR_IMODE_MASK
;
767 p
->devctl
|= TI12XX_DCR_IMODE_ALL_SERIAL
;
770 if ((p
->devctl
& TI113X_DCR_IMODE_MASK
) == 0)
771 p
->devctl
|= TI113X_DCR_IMODE_ISA
;
773 if (p
->cardctl
& TI113X_CCR_RIENB
) {
774 strcat(buf
, " [ring]");
775 if (old
) mask
&= ~0x8000;
777 if (old
&& (p
->sysctl
& TI113X_SCR_CLKRUN_ENA
)) {
778 if (p
->sysctl
& TI113X_SCR_CLKRUN_SEL
) {
779 strcat(buf
, " [clkrun irq 12]");
782 strcat(buf
, " [clkrun irq 10]");
786 if (p
->sysctl
& TI113X_SCR_PWRSAVINGS
)
787 strcat(buf
, " [pwr save]");
788 switch (p
->devctl
& TI113X_DCR_IMODE_MASK
) {
789 case TI12XX_DCR_IMODE_PCI_ONLY
:
790 strcat(buf
, " [pci only]");
793 case TI113X_DCR_IMODE_ISA
:
794 strcat(buf
, " [isa irq]");
795 if (old
) mask
&= ~0x0018;
797 case TI113X_DCR_IMODE_SERIAL
:
798 strcat(buf
, " [pci + serial irq]");
801 case TI12XX_DCR_IMODE_ALL_SERIAL
:
802 strcat(buf
, " [serial pci & irq]");
811 /*======================================================================
813 Code to save and restore global state information for the Ricoh
814 RL5C4XX controllers, and to set and report global configuration
817 ======================================================================*/
821 static void rl5c4xx_get_state(u_short s
)
823 socket_info_t
*t
= &socket
[s
];
824 rl5c4xx_state_t
*p
= &socket
[s
].state
.rl5c4xx
;
825 pci_readw(t
->bus
, t
->devfn
, RL5C4XX_MISC
, &p
->misc
);
826 pci_readw(t
->bus
, t
->devfn
, RL5C4XX_16BIT_CTL
, &p
->ctl
);
827 pci_readw(t
->bus
, t
->devfn
, RL5C4XX_16BIT_IO_0
, &p
->io
);
828 pci_readw(t
->bus
, t
->devfn
, RL5C4XX_16BIT_MEM_0
, &p
->mem
);
831 static void rl5c4xx_set_state(u_short s
)
833 socket_info_t
*t
= &socket
[s
];
834 rl5c4xx_state_t
*p
= &socket
[s
].state
.rl5c4xx
;
835 pci_writew(t
->bus
, t
->devfn
, RL5C4XX_MISC
, p
->misc
);
836 pci_writew(t
->bus
, t
->devfn
, RL5C4XX_16BIT_CTL
, p
->ctl
);
837 pci_writew(t
->bus
, t
->devfn
, RL5C4XX_16BIT_IO_0
, p
->io
);
838 pci_writew(t
->bus
, t
->devfn
, RL5C4XX_16BIT_MEM_0
, p
->mem
);
841 static u_int __init
rl5c4xx_set_opts(u_short s
, char *buf
)
843 rl5c4xx_state_t
*p
= &socket
[s
].state
.rl5c4xx
;
845 int old
= (socket
[s
].type
< IS_RL5C475
);
847 p
->ctl
= RL5C4XX_16CTL_IO_TIMING
| RL5C4XX_16CTL_MEM_TIMING
;
848 if (old
) p
->ctl
|= RL5C46X_16CTL_LEVEL_1
| RL5C46X_16CTL_LEVEL_2
;
850 if (setup_time
>= 0) {
851 p
->io
= (p
->io
& ~RL5C4XX_SETUP_MASK
) +
852 ((setup_time
+1) << RL5C4XX_SETUP_SHIFT
);
853 p
->mem
= (p
->mem
& ~RL5C4XX_SETUP_MASK
) +
854 (setup_time
<< RL5C4XX_SETUP_SHIFT
);
857 p
->io
= (p
->io
& ~RL5C4XX_CMD_MASK
) +
858 (cmd_time
<< RL5C4XX_CMD_SHIFT
);
859 p
->mem
= (p
->mem
& ~RL5C4XX_CMD_MASK
) +
860 (cmd_time
<< RL5C4XX_CMD_SHIFT
);
862 if (hold_time
>= 0) {
863 p
->io
= (p
->io
& ~RL5C4XX_HOLD_MASK
) +
864 (hold_time
<< RL5C4XX_HOLD_SHIFT
);
865 p
->mem
= (p
->mem
& ~RL5C4XX_HOLD_MASK
) +
866 (hold_time
<< RL5C4XX_HOLD_SHIFT
);
871 p
->misc
&= ~RL5C47X_MISC_SRIRQ_ENA
; break;
873 p
->misc
|= RL5C47X_MISC_SRIRQ_ENA
; break;
875 if (p
->misc
& RL5C47X_MISC_SRIRQ_ENA
)
876 sprintf(buf
, " [serial irq]");
878 sprintf(buf
, " [isa irq]");
881 sprintf(buf
, " [io %d/%d/%d] [mem %d/%d/%d]",
882 (p
->io
& RL5C4XX_SETUP_MASK
) >> RL5C4XX_SETUP_SHIFT
,
883 (p
->io
& RL5C4XX_CMD_MASK
) >> RL5C4XX_CMD_SHIFT
,
884 (p
->io
& RL5C4XX_HOLD_MASK
) >> RL5C4XX_HOLD_SHIFT
,
885 (p
->mem
& RL5C4XX_SETUP_MASK
) >> RL5C4XX_SETUP_SHIFT
,
886 (p
->mem
& RL5C4XX_CMD_MASK
) >> RL5C4XX_CMD_SHIFT
,
887 (p
->mem
& RL5C4XX_HOLD_MASK
) >> RL5C4XX_HOLD_SHIFT
);
893 /*======================================================================
895 Code to save and restore global state information for O2Micro
896 controllers, and to set and report global configuration options.
898 ======================================================================*/
902 static void o2micro_get_state(u_short s
)
904 socket_info_t
*t
= &socket
[s
];
905 o2micro_state_t
*p
= &socket
[s
].state
.o2micro
;
906 if ((t
->revision
== 0x34) || (t
->revision
== 0x62) ||
907 (t
->type
== IS_OZ6812
)) {
908 p
->mode_a
= i365_get(s
, O2_MODE_A_2
);
909 p
->mode_b
= i365_get(s
, O2_MODE_B_2
);
911 p
->mode_a
= i365_get(s
, O2_MODE_A
);
912 p
->mode_b
= i365_get(s
, O2_MODE_B
);
914 p
->mode_c
= i365_get(s
, O2_MODE_C
);
915 p
->mode_d
= i365_get(s
, O2_MODE_D
);
916 if (t
->flags
& IS_CARDBUS
) {
917 p
->mhpg
= i365_get(s
, O2_MHPG_DMA
);
918 p
->fifo
= i365_get(s
, O2_FIFO_ENA
);
919 p
->mode_e
= i365_get(s
, O2_MODE_E
);
923 static void o2micro_set_state(u_short s
)
925 socket_info_t
*t
= &socket
[s
];
926 o2micro_state_t
*p
= &socket
[s
].state
.o2micro
;
927 if ((t
->revision
== 0x34) || (t
->revision
== 0x62) ||
928 (t
->type
== IS_OZ6812
)) {
929 i365_set(s
, O2_MODE_A_2
, p
->mode_a
);
930 i365_set(s
, O2_MODE_B_2
, p
->mode_b
);
932 i365_set(s
, O2_MODE_A
, p
->mode_a
);
933 i365_set(s
, O2_MODE_B
, p
->mode_b
);
935 i365_set(s
, O2_MODE_C
, p
->mode_c
);
936 i365_set(s
, O2_MODE_D
, p
->mode_d
);
937 if (t
->flags
& IS_CARDBUS
) {
938 i365_set(s
, O2_MHPG_DMA
, p
->mhpg
);
939 i365_set(s
, O2_FIFO_ENA
, p
->fifo
);
940 i365_set(s
, O2_MODE_E
, p
->mode_e
);
944 static u_int __init
o2micro_set_opts(u_short s
, char *buf
)
946 socket_info_t
*t
= &socket
[s
];
947 o2micro_state_t
*p
= &socket
[s
].state
.o2micro
;
950 p
->mode_b
= (p
->mode_b
& ~O2_MODE_B_IDENT
) | O2_MODE_B_ID_CSTEP
;
951 flip(p
->mode_b
, O2_MODE_B_IRQ15_RI
, has_ring
);
952 p
->mode_c
&= ~(O2_MODE_C_ZVIDEO
| O2_MODE_C_DREQ_MASK
);
953 if (t
->flags
& IS_CARDBUS
) {
954 p
->mode_d
&= ~O2_MODE_D_W97_IRQ
;
955 p
->mode_e
&= ~O2_MODE_E_MHPG_DMA
;
956 p
->mhpg
|= O2_MHPG_CINT_ENA
| O2_MHPG_CSC_ENA
;
957 p
->mhpg
&= ~O2_MHPG_CHANNEL
;
958 if (t
->revision
== 0x34)
961 if (p
->mode_b
& O2_MODE_B_IRQ15_RI
) mask
&= ~0x8000;
963 sprintf(buf
, " [a %02x] [b %02x] [c %02x] [d %02x]",
964 p
->mode_a
, p
->mode_b
, p
->mode_c
, p
->mode_d
);
965 if (t
->flags
& IS_CARDBUS
) {
967 sprintf(buf
, " [mhpg %02x] [fifo %02x] [e %02x]",
968 p
->mhpg
, p
->fifo
, p
->mode_e
);
975 /*======================================================================
977 Code to save and restore global state information for the Toshiba
978 ToPIC 95 and 97 controllers, and to set and report global
979 configuration options.
981 ======================================================================*/
985 static void topic_get_state(u_short s
)
987 socket_info_t
*t
= &socket
[s
];
988 topic_state_t
*p
= &socket
[s
].state
.topic
;
989 pci_readb(t
->bus
, t
->devfn
, TOPIC_SLOT_CONTROL
, &p
->slot
);
990 pci_readb(t
->bus
, t
->devfn
, TOPIC_CARD_CONTROL
, &p
->ccr
);
991 pci_readb(t
->bus
, t
->devfn
, TOPIC_CARD_DETECT
, &p
->cdr
);
992 pci_readl(t
->bus
, t
->devfn
, TOPIC_REGISTER_CONTROL
, &p
->rcr
);
995 static void topic_set_state(u_short s
)
997 socket_info_t
*t
= &socket
[s
];
998 topic_state_t
*p
= &socket
[s
].state
.topic
;
999 pci_writeb(t
->bus
, t
->devfn
, TOPIC_SLOT_CONTROL
, p
->slot
);
1000 pci_writeb(t
->bus
, t
->devfn
, TOPIC_CARD_CONTROL
, p
->ccr
);
1001 pci_writeb(t
->bus
, t
->devfn
, TOPIC_CARD_DETECT
, p
->cdr
);
1002 pci_writel(t
->bus
, t
->devfn
, TOPIC_REGISTER_CONTROL
, p
->rcr
);
1005 static int topic_set_irq_mode(u_short s
, int pcsc
, int pint
)
1007 if (socket
[s
].type
== IS_TOPIC97
) {
1008 topic_state_t
*p
= &socket
[s
].state
.topic
;
1009 flip(p
->ccr
, TOPIC97_ICR_IRQSEL
, pcsc
);
1012 /* no ISA card status change irq */
1017 static u_int __init
topic_set_opts(u_short s
, char *buf
)
1019 topic_state_t
*p
= &socket
[s
].state
.topic
;
1021 p
->slot
|= TOPIC_SLOT_SLOTON
|TOPIC_SLOT_SLOTEN
|TOPIC_SLOT_ID_LOCK
;
1022 p
->cdr
|= TOPIC_CDR_MODE_PC32
;
1023 p
->cdr
&= ~(TOPIC_CDR_SW_DETECT
);
1024 sprintf(buf
, " [slot 0x%02x] [ccr 0x%02x] [cdr 0x%02x] [rcr 0x%02x]",
1025 p
->slot
, p
->ccr
, p
->cdr
, p
->rcr
);
1031 /*======================================================================
1033 Routines to handle common CardBus options
1035 ======================================================================*/
1039 static void cb_get_state(u_short s
)
1041 socket_info_t
*t
= &socket
[s
];
1043 pci_readb(t
->bus
, t
->devfn
, PCI_CACHE_LINE_SIZE
, &t
->cache
);
1044 pci_readb(t
->bus
, t
->devfn
, PCI_LATENCY_TIMER
, &t
->pci_lat
);
1045 pci_readb(t
->bus
, t
->devfn
, CB_LATENCY_TIMER
, &t
->cb_lat
);
1046 pci_readb(t
->bus
, t
->devfn
, CB_CARDBUS_BUS
, &t
->cap
.cardbus
);
1047 pci_readb(t
->bus
, t
->devfn
, CB_SUBORD_BUS
, &t
->sub_bus
);
1048 pci_readw(t
->bus
, t
->devfn
, CB_BRIDGE_CONTROL
, &t
->bcr
);
1050 struct pci_dev
*pdev
= pci_find_slot(t
->bus
, t
->devfn
);
1051 t
->cap
.pci_irq
= (pdev
) ? pdev
->irq
: 0;
1053 if (t
->cap
.pci_irq
>= NR_IRQS
) t
->cap
.pci_irq
= 0;
1056 static void cb_set_state(u_short s
)
1058 socket_info_t
*t
= &socket
[s
];
1060 pci_writew(t
->bus
, t
->devfn
, t
->pmcs
, PCI_PMCS_PWR_STATE_D0
);
1061 pci_writel(t
->bus
, t
->devfn
, CB_LEGACY_MODE_BASE
, 0);
1062 pci_writel(t
->bus
, t
->devfn
, PCI_BASE_ADDRESS_0
, t
->cb_phys
);
1063 pci_writew(t
->bus
, t
->devfn
, PCI_COMMAND
, CMD_DFLT
);
1064 pci_writeb(t
->bus
, t
->devfn
, PCI_CACHE_LINE_SIZE
, t
->cache
);
1065 pci_writeb(t
->bus
, t
->devfn
, PCI_LATENCY_TIMER
, t
->pci_lat
);
1066 pci_writeb(t
->bus
, t
->devfn
, CB_LATENCY_TIMER
, t
->cb_lat
);
1067 pci_writeb(t
->bus
, t
->devfn
, CB_CARDBUS_BUS
, t
->cap
.cardbus
);
1068 pci_writeb(t
->bus
, t
->devfn
, CB_SUBORD_BUS
, t
->sub_bus
);
1069 pci_writew(t
->bus
, t
->devfn
, CB_BRIDGE_CONTROL
, t
->bcr
);
1072 static int cb_get_irq_mode(u_short s
)
1074 return (!(socket
[s
].bcr
& CB_BCR_ISA_IRQ
));
1077 static int cb_set_irq_mode(u_short s
, int pcsc
, int pint
)
1079 socket_info_t
*t
= &socket
[s
];
1080 flip(t
->bcr
, CB_BCR_ISA_IRQ
, !(pint
));
1081 if (t
->flags
& IS_CIRRUS
)
1082 return cirrus_set_irq_mode(s
, pcsc
, pint
);
1083 else if (t
->flags
& IS_TI
)
1084 return ti113x_set_irq_mode(s
, pcsc
, pint
);
1085 else if (t
->flags
& IS_TOPIC
)
1086 return topic_set_irq_mode(s
, pcsc
, pint
);
1090 static void __init
pci_scan(u_short sock
);
1092 static void __init
cb_set_opts(u_short s
, char *buf
)
1094 socket_info_t
*t
= &socket
[s
];
1095 t
->bcr
|= CB_BCR_WRITE_POST
;
1096 /* some TI1130's seem to exhibit problems with write posting */
1097 if (((t
->type
== IS_TI1130
) && (t
->revision
== 4) &&
1098 (cb_write_post
< 0)) || (cb_write_post
== 0))
1099 t
->bcr
&= ~CB_BCR_WRITE_POST
;
1100 if (t
->cache
== 0) t
->cache
= 8;
1101 if (pci_latency
>= 0) t
->pci_lat
= pci_latency
;
1102 if (t
->pci_lat
== 0) t
->pci_lat
= 0xa8;
1103 if (cb_latency
>= 0) t
->cb_lat
= cb_latency
;
1104 if (t
->cb_lat
== 0) t
->cb_lat
= 0xb0;
1105 if ((t
->cap
.pci_irq
== 0) && (pci_csc
|| pci_int
) && do_scan
)
1107 if (t
->cap
.pci_irq
== 0)
1108 strcat(buf
, " [no pci irq]");
1110 sprintf(buf
, " [pci irq %d]", t
->cap
.pci_irq
);
1112 if ((cb_bus_base
> 0) || (t
->cap
.cardbus
== 0)) {
1113 if (cb_bus_base
<= 0) cb_bus_base
= 0x20;
1114 t
->cap
.cardbus
= cb_bus_base
;
1115 t
->sub_bus
= cb_bus_base
+cb_bus_step
;
1116 cb_bus_base
+= cb_bus_step
+1;
1118 if (!(t
->flags
& IS_TOPIC
))
1119 t
->cap
.features
|= SS_CAP_PAGE_REGS
;
1120 sprintf(buf
, " [lat %d/%d] [bus %d/%d]",
1121 t
->pci_lat
, t
->cb_lat
, t
->cap
.cardbus
, t
->sub_bus
);
1126 /*======================================================================
1128 Generic routines to get and set controller options
1130 ======================================================================*/
1132 static void get_bridge_state(u_short s
)
1134 socket_info_t
*t
= &socket
[s
];
1135 if (t
->flags
& IS_CIRRUS
)
1136 cirrus_get_state(s
);
1138 else if (t
->flags
& IS_VADEM
)
1142 else if (t
->flags
& IS_O2MICRO
)
1143 o2micro_get_state(s
);
1144 else if (t
->flags
& IS_TI
)
1145 ti113x_get_state(s
);
1146 else if (t
->flags
& IS_RICOH
)
1147 rl5c4xx_get_state(s
);
1148 else if (t
->flags
& IS_TOPIC
)
1150 if (t
->flags
& IS_CARDBUS
)
1155 static void set_bridge_state(u_short s
)
1157 socket_info_t
*t
= &socket
[s
];
1159 if (t
->flags
& IS_CARDBUS
)
1162 if (t
->flags
& IS_CIRRUS
)
1163 cirrus_set_state(s
);
1165 i365_set(s
, I365_GBLCTL
, 0x00);
1166 i365_set(s
, I365_GENCTL
, 0x00);
1168 i365_bflip(s
, I365_INTCTL
, I365_INTR_ENA
, t
->intr
);
1170 if (t
->flags
& IS_VADEM
)
1174 if (t
->flags
& IS_O2MICRO
)
1175 o2micro_set_state(s
);
1176 else if (t
->flags
& IS_TI
)
1177 ti113x_set_state(s
);
1178 else if (t
->flags
& IS_RICOH
)
1179 rl5c4xx_set_state(s
);
1180 else if (t
->flags
& IS_TOPIC
)
1185 static u_int __init
set_bridge_opts(u_short s
, u_short ns
)
1191 for (i
= s
; i
< s
+ns
; i
++) {
1192 if (socket
[i
].flags
& IS_ALIVE
) {
1193 printk(KERN_INFO
" host opts [%d]: already alive!\n", i
);
1197 get_bridge_state(i
);
1198 if (socket
[i
].flags
& IS_CIRRUS
)
1199 m
= cirrus_set_opts(i
, buf
);
1201 else if (socket
[i
].flags
& IS_VADEM
)
1202 m
= vg46x_set_opts(i
, buf
);
1205 else if (socket
[i
].flags
& IS_O2MICRO
)
1206 m
= o2micro_set_opts(i
, buf
);
1207 else if (socket
[i
].flags
& IS_TI
)
1208 m
= ti113x_set_opts(i
, buf
);
1209 else if (socket
[i
].flags
& IS_RICOH
)
1210 m
= rl5c4xx_set_opts(i
, buf
);
1211 else if (socket
[i
].flags
& IS_TOPIC
)
1212 m
= topic_set_opts(i
, buf
);
1213 if (socket
[i
].flags
& IS_CARDBUS
)
1214 cb_set_opts(i
, buf
+strlen(buf
));
1216 set_bridge_state(i
);
1217 printk(KERN_INFO
" host opts [%d]:%s\n", i
,
1218 (*buf
) ? buf
: " none");
1221 /* Mask out all PCI interrupts */
1222 for (i
= 0; i
< sockets
; i
++)
1223 m
&= ~(1<<socket
[i
].cap
.pci_irq
);
1226 for (p
= pci_devices
; p
; p
= p
->next
)
1233 /*======================================================================
1235 Interrupt testing code, for ISA and PCI interrupts
1237 ======================================================================*/
1239 static volatile u_int irq_hits
;
1240 static u_short irq_sock
;
1242 static void irq_count(int irq
, void *dev
, struct pt_regs
*regs
)
1245 if (socket
[irq_sock
].flags
& IS_CARDBUS
) {
1246 cb_writel(irq_sock
, CB_SOCKET_EVENT
, -1);
1249 i365_get(irq_sock
, I365_CSC
);
1251 DEBUG(2, "-> hit on irq %d\n", irq
);
1254 static u_int __init
test_irq(u_short sock
, int irq
, int pci
)
1256 u_char csc
= (pci
) ? 0 : irq
;
1257 DEBUG(2, " testing %s irq %d\n", pci
? "PCI" : "ISA", irq
);
1259 if (request_irq(irq
, irq_count
, (pci
?SA_SHIRQ
:0), "scan", NULL
) != 0)
1261 irq_hits
= 0; irq_sock
= sock
;
1262 __set_current_state(TASK_UNINTERRUPTIBLE
);
1263 schedule_timeout(HZ
/100);
1265 free_irq(irq
, NULL
);
1266 DEBUG(2, " spurious hit!\n");
1270 /* Generate one interrupt */
1272 if (socket
[sock
].flags
& IS_CARDBUS
) {
1273 cb_writel(sock
, CB_SOCKET_EVENT
, -1);
1274 i365_set(sock
, I365_CSCINT
, I365_CSC_STSCHG
| (csc
<< 4));
1275 cb_writel(sock
, CB_SOCKET_EVENT
, -1);
1276 cb_writel(sock
, CB_SOCKET_MASK
, CB_SM_CSTSCHG
);
1277 cb_writel(sock
, CB_SOCKET_FORCE
, CB_SE_CSTSCHG
);
1279 cb_writel(sock
, CB_SOCKET_EVENT
, -1);
1280 cb_writel(sock
, CB_SOCKET_MASK
, 0);
1284 i365_set(sock
, I365_CSCINT
, I365_CSC_DETECT
| (csc
<< 4));
1285 i365_bset(sock
, I365_GENCTL
, I365_CTL_SW_IRQ
);
1289 free_irq(irq
, NULL
);
1291 /* mask all interrupts */
1292 i365_set(sock
, I365_CSCINT
, 0);
1293 DEBUG(2, " hits = %d\n", irq_hits
);
1295 return (irq_hits
!= 1);
1300 static u_int __init
isa_scan(u_short sock
, u_int mask0
)
1307 /* Don't probe level-triggered interrupts -- reserved for PCI */
1308 mask0
&= ~(inb(PIC
) | (inb(PIC
+1) << 8));
1312 /* Only scan if we can select ISA csc irq's */
1313 if (!(socket
[sock
].flags
& IS_CARDBUS
) ||
1314 (cb_set_irq_mode(sock
, 0, 0) == 0))
1317 set_bridge_state(sock
);
1318 i365_set(sock
, I365_CSCINT
, 0);
1319 for (i
= 0; i
< 16; i
++)
1320 if ((mask0
& (1 << i
)) && (test_irq(sock
, i
, 0) == 0))
1322 for (i
= 0; i
< 16; i
++)
1323 if ((mask1
& (1 << i
)) && (test_irq(sock
, i
, 0) != 0))
1327 printk(KERN_INFO
" ISA irqs (");
1331 /* Fallback: just find interrupts that aren't in use */
1332 for (i
= 0; i
< 16; i
++)
1333 if ((mask0
& (1 << i
)) && (_check_irq(i
, 0) == 0))
1336 /* If scan failed, default to polled status */
1337 if (!cs_irq
&& (poll_interval
== 0)) poll_interval
= HZ
;
1341 for (i
= 0; i
< 16; i
++)
1343 printk("%s%d", ((mask1
& ((1<<i
)-1)) ? "," : ""), i
);
1344 if (mask1
== 0) printk("none!");
1349 #endif /* CONFIG_ISA */
1353 static void __init
pci_scan(u_short sock
)
1357 cb_set_irq_mode(sock
, 1, 0);
1358 set_bridge_state(sock
);
1359 i365_set(sock
, I365_CSCINT
, 0);
1360 /* Only probe irq's 9..11, to be conservative */
1361 for (i
= 9; i
< 12; i
++) {
1362 if ((test_irq(sock
, i
, 1) == 0) &&
1363 (test_irq(sock
, i
, 1) == 0))
1366 if (i
< 12) socket
[sock
].cap
.pci_irq
= i
;
1369 #endif /* CONFIG_PCI */
1371 /*====================================================================*/
1373 /* Time conversion functions */
1375 static int to_cycles(int ns
)
1377 return ns
/cycle_time
;
1380 static int to_ns(int cycles
)
1382 return cycle_time
*cycles
;
1385 /*====================================================================*/
1389 static int __init
identify(u_short port
, u_short sock
)
1394 /* Use the next free entry in the socket table */
1395 socket
[sockets
].ioaddr
= port
;
1396 socket
[sockets
].psock
= sock
;
1398 /* Wake up a sleepy Cirrus controller */
1400 i365_bclr(sockets
, PD67_MISC_CTL_2
, PD67_MC2_SUSPEND
);
1401 /* Pause at least 50 ms */
1405 if ((val
= i365_get(sockets
, I365_IDENT
)) & 0x70)
1409 type
= IS_I82365A
; break;
1411 type
= IS_I82365B
; break;
1413 type
= IS_I82365DF
; break;
1414 case 0x88: case 0x89: case 0x8a:
1415 type
= IS_IBM
; break;
1418 /* Check for Vadem VG-468 chips */
1421 i365_bset(sockets
, VG468_MISC
, VG468_MISC_VADEMREV
);
1422 val
= i365_get(sockets
, I365_IDENT
);
1423 if (val
& I365_IDENT_VADEM
) {
1424 i365_bclr(sockets
, VG468_MISC
, VG468_MISC_VADEMREV
);
1425 type
= ((val
& 7) >= 4) ? IS_VG469
: IS_VG468
;
1428 /* Check for Ricoh chips */
1429 val
= i365_get(sockets
, RF5C_CHIP_ID
);
1430 if ((val
== RF5C_CHIP_RF5C296
) || (val
== RF5C_CHIP_RF5C396
))
1433 /* Check for Cirrus CL-PD67xx chips */
1434 i365_set(sockets
, PD67_CHIP_INFO
, 0);
1435 val
= i365_get(sockets
, PD67_CHIP_INFO
);
1436 if ((val
& PD67_INFO_CHIP_ID
) == PD67_INFO_CHIP_ID
) {
1437 val
= i365_get(sockets
, PD67_CHIP_INFO
);
1438 if ((val
& PD67_INFO_CHIP_ID
) == 0) {
1439 type
= (val
& PD67_INFO_SLOTS
) ? IS_PD672X
: IS_PD6710
;
1440 i365_set(sockets
, PD67_EXT_INDEX
, 0xe5);
1441 if (i365_get(sockets
, PD67_EXT_INDEX
) != 0xe5)
1450 /*======================================================================
1452 See if a card is present, powered up, in IO mode, and already
1453 bound to a (non PC Card) Linux driver. We leave these alone.
1455 We make an exception for cards that seem to be serial devices.
1457 ======================================================================*/
1459 static int __init
is_alive(u_short sock
)
1462 u_short start
, stop
;
1464 stat
= i365_get(sock
, I365_STATUS
);
1465 start
= i365_get_pair(sock
, I365_IO(0)+I365_W_START
);
1466 stop
= i365_get_pair(sock
, I365_IO(0)+I365_W_STOP
);
1467 if ((stat
& I365_CS_DETECT
) && (stat
& I365_CS_POWERON
) &&
1468 (i365_get(sock
, I365_INTCTL
) & I365_PC_IOCARD
) &&
1469 (i365_get(sock
, I365_ADDRWIN
) & I365_ENA_IO(0)) &&
1470 (check_region(start
, stop
-start
+1) != 0) &&
1471 ((start
& 0xfeef) != 0x02e8))
1477 /*====================================================================*/
1479 static void __init
add_socket(u_short port
, int psock
, int type
)
1481 socket
[sockets
].ioaddr
= port
;
1482 socket
[sockets
].psock
= psock
;
1483 socket
[sockets
].type
= type
;
1484 socket
[sockets
].flags
= pcic
[type
].flags
;
1485 if (is_alive(sockets
))
1486 socket
[sockets
].flags
|= IS_ALIVE
;
1490 static void __init
add_pcic(int ns
, int type
)
1492 u_int mask
= 0, i
, base
;
1493 int use_pci
= 0, isa_irq
= 0;
1494 socket_info_t
*t
= &socket
[sockets
-ns
];
1497 if (t
->ioaddr
> 0) request_region(t
->ioaddr
, 2, "i82365");
1499 if (base
== 0) printk("\n");
1500 printk(KERN_INFO
" %s", pcic
[type
].name
);
1502 if (t
->flags
& IS_UNKNOWN
)
1503 printk(" [0x%04x 0x%04x]", t
->vendor
, t
->device
);
1504 if (t
->flags
& IS_CARDBUS
)
1505 printk(" PCI-to-CardBus at bus %d slot %d, mem 0x%08x",
1506 t
->bus
, PCI_SLOT(t
->devfn
), t
->cb_phys
);
1507 else if (t
->flags
& IS_PCI
)
1508 printk(" PCI-to-PCMCIA at bus %d slot %d, port %#x",
1509 t
->bus
, PCI_SLOT(t
->devfn
), t
->ioaddr
);
1512 printk(" ISA-to-PCMCIA at port %#x ofs 0x%02x",
1513 t
->ioaddr
, t
->psock
*0x40);
1514 printk(", %d socket%s\n", ns
, ((ns
> 1) ? "s" : ""));
1517 /* Set host options, build basic interrupt mask */
1518 if (irq_list
[0] == -1)
1521 for (i
= mask
= 0; i
< 16; i
++)
1522 mask
|= (1<<irq_list
[i
]);
1524 mask
&= I365_MASK
& set_bridge_opts(base
, ns
);
1526 /* Scan for ISA interrupts */
1527 mask
= isa_scan(base
, mask
);
1529 printk(KERN_INFO
" PCI card interrupts,");
1533 /* Can we use a PCI interrupt for card status changes? */
1534 if (pci_csc
&& t
->cap
.pci_irq
) {
1535 for (i
= 0; i
< ns
; i
++)
1536 if (_check_irq(t
[i
].cap
.pci_irq
, SA_SHIRQ
)) break;
1539 printk(" PCI status changes\n");
1545 /* Poll if only two interrupts available */
1546 if (!use_pci
&& !poll_interval
) {
1547 u_int tmp
= (mask
& 0xff20);
1548 tmp
= tmp
& (tmp
-1);
1549 if ((tmp
& (tmp
-1)) == 0)
1552 /* Only try an ISA cs_irq if this is the first controller */
1553 if (!use_pci
&& !grab_irq
&& (cs_irq
|| !poll_interval
)) {
1554 /* Avoid irq 12 unless it is explicitly requested */
1555 u_int cs_mask
= mask
& ((cs_irq
) ? (1<<cs_irq
) : ~(1<<12));
1556 for (cs_irq
= 15; cs_irq
> 0; cs_irq
--)
1557 if ((cs_mask
& (1 << cs_irq
)) &&
1558 (_check_irq(cs_irq
, 0) == 0))
1563 printk(" status change on irq %d\n", cs_irq
);
1568 if (!use_pci
&& !isa_irq
) {
1569 if (poll_interval
== 0)
1571 printk(" polling interval = %d ms\n",
1572 poll_interval
* 1000 / HZ
);
1576 /* Update socket interrupt information, capabilities */
1577 for (i
= 0; i
< ns
; i
++) {
1578 t
[i
].cap
.features
|= SS_CAP_PCCARD
;
1579 t
[i
].cap
.map_size
= 0x1000;
1580 t
[i
].cap
.irq_mask
= mask
;
1581 if (pci_int
&& t
[i
].cap
.pci_irq
)
1582 t
[i
].cap
.irq_mask
|= (1 << t
[i
].cap
.pci_irq
);
1583 t
[i
].cs_irq
= isa_irq
;
1585 if (t
[i
].flags
& IS_CARDBUS
) {
1586 t
[i
].cap
.features
|= SS_CAP_CARDBUS
;
1587 cb_set_irq_mode(i
, pci_csc
&& t
[i
].cap
.pci_irq
,
1588 pci_int
&& t
[i
].cap
.pci_irq
);
1595 /*====================================================================*/
1599 typedef struct pci_dev
*pci_id_t
;
1600 static int __init
pci_lookup(u_int
class, pci_id_t
*id
,
1601 u_char
*bus
, u_char
*devfn
)
1603 if ((*id
= pci_find_class(class<<8, *id
)) != NULL
) {
1604 *bus
= (*id
)->bus
->number
;
1605 *devfn
= (*id
)->devfn
;
1610 static void __init
add_pci_bridge(int type
, u_char bus
, u_char devfn
,
1611 u_short v
, u_short d
)
1613 socket_info_t
*s
= &socket
[sockets
];
1617 if (type
== PCIC_COUNT
) type
= IS_UNK_PCI
;
1618 pci_readl(bus
, devfn
, PCI_BASE_ADDRESS_0
, &addr
);
1620 pci_writew(bus
, devfn
, PCI_COMMAND
, CMD_DFLT
);
1621 for (i
= ns
= 0; i
< ((type
== IS_I82092AA
) ? 4 : 2); i
++) {
1622 s
->bus
= bus
; s
->devfn
= devfn
;
1623 s
->vendor
= v
; s
->device
= d
;
1624 add_socket(addr
, i
, type
);
1630 static void __init
add_cb_bridge(int type
, u_char bus
, u_char devfn
,
1631 u_short v
, u_short d0
)
1633 socket_info_t
*s
= &socket
[sockets
];
1635 u_char a
, b
, r
, max
;
1637 /* PCI bus enumeration is broken on some systems */
1638 for (ns
= 0; ns
< sockets
; ns
++)
1639 if ((socket
[ns
].bus
== bus
) && (socket
[ns
].devfn
== devfn
))
1642 if (type
== PCIC_COUNT
) type
= IS_UNK_CARDBUS
;
1643 pci_readb(bus
, devfn
, PCI_HEADER_TYPE
, &a
);
1644 pci_readb(bus
, devfn
, PCI_CLASS_REVISION
, &r
);
1645 max
= (a
& 0x80) ? 8 : 1;
1646 for (ns
= 0; ns
< max
; ns
++, s
++, devfn
++) {
1647 if (pci_readw(bus
, devfn
, PCI_DEVICE_ID
, &d
) || (d
!= d0
))
1649 s
->bus
= bus
; s
->devfn
= devfn
;
1650 s
->vendor
= v
; s
->device
= d
; s
->revision
= r
;
1652 /* Check for power management capabilities */
1653 pci_readb(bus
, devfn
, PCI_STATUS
, &a
);
1654 if (a
& PCI_STATUS_CAPLIST
) {
1655 pci_readb(bus
, devfn
, PCI_CB_CAPABILITY_POINTER
, &b
);
1657 pci_readb(bus
, devfn
, b
+PCI_CAPABILITY_ID
, &a
);
1658 if (a
== PCI_CAPABILITY_PM
) {
1659 s
->pmcs
= b
+ PCI_PM_CONTROL_STATUS
;
1662 pci_readb(bus
, devfn
, b
+PCI_NEXT_CAPABILITY
, &b
);
1665 /* If capability exists, make sure we're in D0 state */
1667 pci_writew(bus
, devfn
, s
->pmcs
, PCI_PMCS_PWR_STATE_D0
);
1669 /* Map CardBus registers if they are not already mapped */
1670 pci_writel(bus
, devfn
, CB_LEGACY_MODE_BASE
, 0);
1671 pci_readl(bus
, devfn
, PCI_BASE_ADDRESS_0
, &s
->cb_phys
);
1672 if (s
->cb_phys
== 0) {
1673 pci_writew(bus
, devfn
, PCI_COMMAND
, CMD_DFLT
);
1674 for (i
= 0; i
< sizeof(cb_mem_base
)/sizeof(u_int
); i
++) {
1675 s
->cb_phys
= cb_mem_base
[i
];
1676 s
->cb_virt
= ioremap(s
->cb_phys
, 0x1000);
1677 pci_writel(bus
, devfn
, PCI_BASE_ADDRESS_0
, s
->cb_phys
);
1678 /* Simple sanity checks */
1679 if (!(readb(s
->cb_virt
+0x800+I365_IDENT
) & 0x70) &&
1680 !(readb(s
->cb_virt
+0x800+I365_CSC
) &&
1681 readb(s
->cb_virt
+0x800+I365_CSC
) &&
1682 readb(s
->cb_virt
+0x800+I365_CSC
)))
1684 iounmap(s
->cb_virt
);
1686 if (i
== sizeof(cb_mem_base
)/sizeof(u_int
)) {
1687 pci_writel(bus
, devfn
, PCI_BASE_ADDRESS_0
, 0);
1688 s
->cb_phys
= 0; s
->cb_virt
= NULL
;
1690 printk(KERN_NOTICE
" Bridge register mapping failed:"
1691 " check cb_mem_base setting\n");
1694 cb_mem_base
[0] = cb_mem_base
[i
] + PAGE_SIZE
;
1696 s
->cb_virt
= ioremap(s
->cb_phys
, 0x1000);
1699 request_mem_region(s
->cb_phys
, 0x1000, "i82365");
1700 add_socket(0, 0, type
);
1702 if (ns
== 0) return;
1706 /* Nasty special check for bad bus mapping */
1707 pci_readb(bus
, s
[0].devfn
, CB_CARDBUS_BUS
, &a
);
1708 pci_readb(bus
, s
[1].devfn
, CB_CARDBUS_BUS
, &b
);
1710 pci_writeb(bus
, s
[0].devfn
, CB_CARDBUS_BUS
, 0);
1711 pci_writeb(bus
, s
[1].devfn
, CB_CARDBUS_BUS
, 0);
1716 /* Re-do card voltage detection, if needed: this checks for
1717 card presence with no voltage detect bits set */
1718 for (a
= sockets
-ns
; a
< sockets
; a
++)
1719 if (!(cb_readl(a
, CB_SOCKET_STATE
) & 0x3c86))
1720 cb_writel(a
, CB_SOCKET_FORCE
, CB_SF_CVSTEST
);
1721 for (i
= 0; i
< 200; i
++) {
1722 for (a
= sockets
-ns
; a
< sockets
; a
++)
1723 if (!(cb_readl(a
, CB_SOCKET_STATE
) & 0x3c86)) break;
1724 if (a
== sockets
) break;
1725 __set_current_state(TASK_UNINTERRUPTIBLE
);
1726 schedule_timeout(HZ
/20);
1729 printk(KERN_NOTICE
"i82365: card voltage interrogation"
1732 /* Set up PCI bus bridge structures if needed */
1733 for (a
= 0; a
< ns
; a
++) {
1734 struct pci_dev
*self
= pci_find_slot(bus
, s
[a
].devfn
);
1735 struct pci_bus
*child
, *parent
= self
->bus
;
1736 for (child
= parent
->children
; child
; child
= child
->next
)
1737 if (child
->number
== s
[a
].cap
.cardbus
) break;
1739 child
= kmalloc(sizeof(struct pci_bus
), GFP_KERNEL
);
1740 memset(child
, 0, sizeof(struct pci_bus
));
1742 child
->primary
= bus
;
1743 child
->number
= child
->secondary
= s
[a
].cap
.cardbus
;
1744 child
->subordinate
= s
[a
].sub_bus
;
1745 child
->parent
= parent
;
1746 child
->ops
= parent
->ops
;
1747 child
->next
= parent
->children
;
1749 s
[a
].cap
.cb_bus
= parent
->children
= child
;
1753 static void __init
pci_probe(u_int
class, void (add_fn
)
1754 (int, u_char
, u_char
, u_short
, u_short
))
1761 while (pci_lookup(class, &id
, &bus
, &devfn
) == 0) {
1762 if (PCI_FUNC(devfn
) != 0) continue;
1763 pci_readw(bus
, devfn
, PCI_VENDOR_ID
, &v
);
1764 pci_readw(bus
, devfn
, PCI_DEVICE_ID
, &d
);
1765 for (i
= 0; i
< PCIC_COUNT
; i
++)
1766 if ((pcic
[i
].vendor
== v
) && (pcic
[i
].device
== d
)) break;
1767 add_fn(i
, bus
, devfn
, v
, d
);
1771 #endif /* CONFIG_PCI */
1773 /*====================================================================*/
1777 static void __init
isa_probe(void)
1779 int i
, j
, sock
, k
, ns
, id
;
1782 if (check_region(i365_base
, 2) != 0) {
1784 printk("port conflict at %#x\n", i365_base
);
1788 id
= identify(i365_base
, 0);
1789 if ((id
== IS_I82365DF
) && (identify(i365_base
, 1) != id
)) {
1790 for (i
= 0; i
< 4; i
++) {
1791 if (i
== ignore
) continue;
1792 port
= i365_base
+ ((i
& 1) << 2) + ((i
& 2) << 1);
1793 sock
= (i
& 1) << 1;
1794 if (identify(port
, sock
) == IS_I82365DF
) {
1795 add_socket(port
, sock
, IS_VLSI
);
1796 add_pcic(1, IS_VLSI
);
1800 for (i
= 0; i
< (extra_sockets
? 8 : 4); i
+= 2) {
1801 port
= i365_base
+ 2*(i
>>2);
1803 id
= identify(port
, sock
);
1804 if (id
< 0) continue;
1806 for (j
= ns
= 0; j
< 2; j
++) {
1807 /* Does the socket exist? */
1808 if ((ignore
== i
+j
) || (identify(port
, sock
+j
) < 0))
1810 /* Check for bad socket decode */
1811 for (k
= 0; k
<= sockets
; k
++)
1812 i365_set(k
, I365_MEM(0)+I365_W_OFF
, k
);
1813 for (k
= 0; k
<= sockets
; k
++)
1814 if (i365_get(k
, I365_MEM(0)+I365_W_OFF
) != k
)
1816 if (k
<= sockets
) break;
1817 add_socket(port
, sock
+j
, id
); ns
++;
1819 if (ns
!= 0) add_pcic(ns
, id
);
1826 /*====================================================================*/
1828 static void pcic_interrupt(int irq
, void *dev
,
1829 struct pt_regs
*regs
)
1832 u_int events
, active
;
1837 DEBUG(4, "i82365: pcic_interrupt(%d)\n", irq
);
1839 for (j
= 0; j
< 20; j
++) {
1841 for (i
= 0; i
< sockets
; i
++) {
1842 if ((socket
[i
].cs_irq
!= irq
) &&
1843 (socket
[i
].cap
.pci_irq
!= irq
))
1846 csc
= i365_get(i
, I365_CSC
);
1848 if ((socket
[i
].flags
& IS_CARDBUS
) &&
1849 (cb_readl(i
,CB_SOCKET_EVENT
) & (CB_SE_CCD1
|CB_SE_CCD2
))) {
1850 cb_writel(i
, CB_SOCKET_EVENT
, CB_SE_CCD1
|CB_SE_CCD2
);
1851 csc
|= I365_CSC_DETECT
;
1854 if ((csc
== 0) || (!socket
[i
].handler
) ||
1855 (i365_get(i
, I365_IDENT
) & 0x70)) {
1856 ISA_UNLOCK(i
, flags
);
1859 events
= (csc
& I365_CSC_DETECT
) ? SS_DETECT
: 0;
1860 if (i365_get(i
, I365_INTCTL
) & I365_PC_IOCARD
)
1861 events
|= (csc
& I365_CSC_STSCHG
) ? SS_STSCHG
: 0;
1863 events
|= (csc
& I365_CSC_BVD1
) ? SS_BATDEAD
: 0;
1864 events
|= (csc
& I365_CSC_BVD2
) ? SS_BATWARN
: 0;
1865 events
|= (csc
& I365_CSC_READY
) ? SS_READY
: 0;
1867 ISA_UNLOCK(i
, flags
);
1868 DEBUG(2, "i82365: socket %d event 0x%02x\n", i
, events
);
1870 socket
[i
].handler(socket
[i
].info
, events
);
1876 printk(KERN_NOTICE
"i82365: infinite loop in interrupt handler\n");
1878 DEBUG(4, "i82365: interrupt done\n");
1879 } /* pcic_interrupt */
1881 static void pcic_interrupt_wrapper(u_long data
)
1883 pcic_interrupt(0, NULL
, NULL
);
1884 poll_timer
.expires
= jiffies
+ poll_interval
;
1885 add_timer(&poll_timer
);
1888 /*====================================================================*/
1890 static int pcic_register_callback(unsigned int sock
, void (*handler
)(void *, unsigned int), void * info
)
1892 socket
[sock
].handler
= handler
;
1893 socket
[sock
].info
= info
;
1894 if (handler
== NULL
) {
1900 } /* pcic_register_callback */
1902 /*====================================================================*/
1904 static int pcic_inquire_socket(unsigned int sock
, socket_cap_t
*cap
)
1906 *cap
= socket
[sock
].cap
;
1908 } /* pcic_inquire_socket */
1910 /*====================================================================*/
1912 static int i365_get_status(u_short sock
, u_int
*value
)
1916 status
= i365_get(sock
, I365_STATUS
);
1917 *value
= ((status
& I365_CS_DETECT
) == I365_CS_DETECT
)
1919 if (i365_get(sock
, I365_INTCTL
) & I365_PC_IOCARD
)
1920 *value
|= (status
& I365_CS_STSCHG
) ? 0 : SS_STSCHG
;
1922 *value
|= (status
& I365_CS_BVD1
) ? 0 : SS_BATDEAD
;
1923 *value
|= (status
& I365_CS_BVD2
) ? 0 : SS_BATWARN
;
1925 *value
|= (status
& I365_CS_WRPROT
) ? SS_WRPROT
: 0;
1926 *value
|= (status
& I365_CS_READY
) ? SS_READY
: 0;
1927 *value
|= (status
& I365_CS_POWERON
) ? SS_POWERON
: 0;
1930 if (socket
[sock
].flags
& IS_CARDBUS
) {
1931 status
= cb_readl(sock
, CB_SOCKET_STATE
);
1932 #ifndef CONFIG_CARDBUS
1933 *value
|= (status
& CB_SS_32BIT
) ? SS_CARDBUS
: 0;
1935 *value
|= (status
& CB_SS_3VCARD
) ? SS_3VCARD
: 0;
1936 *value
|= (status
& CB_SS_XVCARD
) ? SS_XVCARD
: 0;
1937 } else if (socket
[sock
].flags
& IS_O2MICRO
) {
1938 status
= i365_get(sock
, O2_MODE_B
);
1939 *value
|= (status
& O2_MODE_B_VS1
) ? 0 : SS_3VCARD
;
1940 *value
|= (status
& O2_MODE_B_VS2
) ? 0 : SS_XVCARD
;
1944 if (socket
[sock
].type
== IS_VG469
) {
1945 status
= i365_get(sock
, VG469_VSENSE
);
1946 if (socket
[sock
].psock
& 1) {
1947 *value
|= (status
& VG469_VSENSE_B_VS1
) ? 0 : SS_3VCARD
;
1948 *value
|= (status
& VG469_VSENSE_B_VS2
) ? 0 : SS_XVCARD
;
1950 *value
|= (status
& VG469_VSENSE_A_VS1
) ? 0 : SS_3VCARD
;
1951 *value
|= (status
& VG469_VSENSE_A_VS2
) ? 0 : SS_XVCARD
;
1956 DEBUG(1, "i82365: GetStatus(%d) = %#4.4x\n", sock
, *value
);
1958 } /* i365_get_status */
1960 /*====================================================================*/
1962 static int i365_get_socket(u_short sock
, socket_state_t
*state
)
1964 socket_info_t
*t
= &socket
[sock
];
1965 u_char reg
, vcc
, vpp
;
1967 reg
= i365_get(sock
, I365_POWER
);
1968 state
->flags
= (reg
& I365_PWR_AUTO
) ? SS_PWR_AUTO
: 0;
1969 state
->flags
|= (reg
& I365_PWR_OUT
) ? SS_OUTPUT_ENA
: 0;
1970 vcc
= reg
& I365_VCC_MASK
; vpp
= reg
& I365_VPP1_MASK
;
1971 state
->Vcc
= state
->Vpp
= 0;
1973 if (t
->flags
& IS_CARDBUS
) {
1974 cb_get_power(sock
, state
);
1977 if (t
->flags
& IS_CIRRUS
) {
1978 if (i365_get(sock
, PD67_MISC_CTL_1
) & PD67_MC1_VCC_3V
) {
1979 if (reg
& I365_VCC_5V
) state
->Vcc
= 33;
1980 if (vpp
== I365_VPP1_5V
) state
->Vpp
= 33;
1982 if (reg
& I365_VCC_5V
) state
->Vcc
= 50;
1983 if (vpp
== I365_VPP1_5V
) state
->Vpp
= 50;
1985 if (vpp
== I365_VPP1_12V
) state
->Vpp
= 120;
1986 } else if (t
->flags
& IS_VG_PWR
) {
1987 if (i365_get(sock
, VG469_VSELECT
) & VG469_VSEL_VCC
) {
1988 if (reg
& I365_VCC_5V
) state
->Vcc
= 33;
1989 if (vpp
== I365_VPP1_5V
) state
->Vpp
= 33;
1991 if (reg
& I365_VCC_5V
) state
->Vcc
= 50;
1992 if (vpp
== I365_VPP1_5V
) state
->Vpp
= 50;
1994 if (vpp
== I365_VPP1_12V
) state
->Vpp
= 120;
1995 } else if (t
->flags
& IS_DF_PWR
) {
1996 if (vcc
== I365_VCC_3V
) state
->Vcc
= 33;
1997 if (vcc
== I365_VCC_5V
) state
->Vcc
= 50;
1998 if (vpp
== I365_VPP1_5V
) state
->Vpp
= 50;
1999 if (vpp
== I365_VPP1_12V
) state
->Vpp
= 120;
2001 if (reg
& I365_VCC_5V
) {
2003 if (vpp
== I365_VPP1_5V
) state
->Vpp
= 50;
2004 if (vpp
== I365_VPP1_12V
) state
->Vpp
= 120;
2008 /* IO card, RESET flags, IO interrupt */
2009 reg
= i365_get(sock
, I365_INTCTL
);
2010 state
->flags
|= (reg
& I365_PC_RESET
) ? 0 : SS_RESET
;
2011 if (reg
& I365_PC_IOCARD
) state
->flags
|= SS_IOCARD
;
2013 if (cb_get_irq_mode(sock
) != 0)
2014 state
->io_irq
= t
->cap
.pci_irq
;
2017 state
->io_irq
= reg
& I365_IRQ_MASK
;
2019 /* speaker control */
2020 if (t
->flags
& IS_CIRRUS
) {
2021 if (i365_get(sock
, PD67_MISC_CTL_1
) & PD67_MC1_SPKR_ENA
)
2022 state
->flags
|= SS_SPKR_ENA
;
2025 /* Card status change mask */
2026 reg
= i365_get(sock
, I365_CSCINT
);
2027 state
->csc_mask
= (reg
& I365_CSC_DETECT
) ? SS_DETECT
: 0;
2028 if (state
->flags
& SS_IOCARD
)
2029 state
->csc_mask
|= (reg
& I365_CSC_STSCHG
) ? SS_STSCHG
: 0;
2031 state
->csc_mask
|= (reg
& I365_CSC_BVD1
) ? SS_BATDEAD
: 0;
2032 state
->csc_mask
|= (reg
& I365_CSC_BVD2
) ? SS_BATWARN
: 0;
2033 state
->csc_mask
|= (reg
& I365_CSC_READY
) ? SS_READY
: 0;
2036 DEBUG(1, "i82365: GetSocket(%d) = flags %#3.3x, Vcc %d, Vpp %d, "
2037 "io_irq %d, csc_mask %#2.2x\n", sock
, state
->flags
,
2038 state
->Vcc
, state
->Vpp
, state
->io_irq
, state
->csc_mask
);
2040 } /* i365_get_socket */
2042 /*====================================================================*/
2044 static int i365_set_socket(u_short sock
, socket_state_t
*state
)
2046 socket_info_t
*t
= &socket
[sock
];
2049 DEBUG(1, "i82365: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
2050 "io_irq %d, csc_mask %#2.2x)\n", sock
, state
->flags
,
2051 state
->Vcc
, state
->Vpp
, state
->io_irq
, state
->csc_mask
);
2053 /* First set global controller options */
2055 if ((t
->flags
& IS_CARDBUS
) && t
->cap
.pci_irq
)
2056 cb_set_irq_mode(sock
, pci_csc
,
2057 (t
->cap
.pci_irq
== state
->io_irq
));
2058 t
->bcr
&= ~CB_BCR_CB_RESET
;
2060 set_bridge_state(sock
);
2062 /* IO card, RESET flag, IO interrupt */
2064 if (state
->io_irq
!= t
->cap
.pci_irq
) reg
|= state
->io_irq
;
2065 reg
|= (state
->flags
& SS_RESET
) ? 0 : I365_PC_RESET
;
2066 reg
|= (state
->flags
& SS_IOCARD
) ? I365_PC_IOCARD
: 0;
2067 i365_set(sock
, I365_INTCTL
, reg
);
2069 reg
= I365_PWR_NORESET
;
2070 if (state
->flags
& SS_PWR_AUTO
) reg
|= I365_PWR_AUTO
;
2071 if (state
->flags
& SS_OUTPUT_ENA
) reg
|= I365_PWR_OUT
;
2074 if (t
->flags
& IS_CARDBUS
) {
2075 cb_set_power(sock
, state
);
2076 reg
|= i365_get(sock
, I365_POWER
) &
2077 (I365_VCC_MASK
|I365_VPP1_MASK
);
2080 if (t
->flags
& IS_CIRRUS
) {
2081 if (state
->Vpp
!= 0) {
2082 if (state
->Vpp
== 120)
2083 reg
|= I365_VPP1_12V
;
2084 else if (state
->Vpp
== state
->Vcc
)
2085 reg
|= I365_VPP1_5V
;
2086 else return -EINVAL
;
2088 if (state
->Vcc
!= 0) {
2090 if (state
->Vcc
== 33)
2091 i365_bset(sock
, PD67_MISC_CTL_1
, PD67_MC1_VCC_3V
);
2092 else if (state
->Vcc
== 50)
2093 i365_bclr(sock
, PD67_MISC_CTL_1
, PD67_MC1_VCC_3V
);
2094 else return -EINVAL
;
2096 } else if (t
->flags
& IS_VG_PWR
) {
2097 if (state
->Vpp
!= 0) {
2098 if (state
->Vpp
== 120)
2099 reg
|= I365_VPP1_12V
;
2100 else if (state
->Vpp
== state
->Vcc
)
2101 reg
|= I365_VPP1_5V
;
2102 else return -EINVAL
;
2104 if (state
->Vcc
!= 0) {
2106 if (state
->Vcc
== 33)
2107 i365_bset(sock
, VG469_VSELECT
, VG469_VSEL_VCC
);
2108 else if (state
->Vcc
== 50)
2109 i365_bclr(sock
, VG469_VSELECT
, VG469_VSEL_VCC
);
2110 else return -EINVAL
;
2112 } else if (t
->flags
& IS_DF_PWR
) {
2113 switch (state
->Vcc
) {
2115 case 33: reg
|= I365_VCC_3V
; break;
2116 case 50: reg
|= I365_VCC_5V
; break;
2117 default: return -EINVAL
;
2119 switch (state
->Vpp
) {
2121 case 50: reg
|= I365_VPP1_5V
; break;
2122 case 120: reg
|= I365_VPP1_12V
; break;
2123 default: return -EINVAL
;
2126 switch (state
->Vcc
) {
2128 case 50: reg
|= I365_VCC_5V
; break;
2129 default: return -EINVAL
;
2131 switch (state
->Vpp
) {
2133 case 50: reg
|= I365_VPP1_5V
| I365_VPP2_5V
; break;
2134 case 120: reg
|= I365_VPP1_12V
| I365_VPP2_12V
; break;
2135 default: return -EINVAL
;
2139 if (reg
!= i365_get(sock
, I365_POWER
))
2140 i365_set(sock
, I365_POWER
, reg
);
2142 /* Chipset-specific functions */
2143 if (t
->flags
& IS_CIRRUS
) {
2144 /* Speaker control */
2145 i365_bflip(sock
, PD67_MISC_CTL_1
, PD67_MC1_SPKR_ENA
,
2146 state
->flags
& SS_SPKR_ENA
);
2149 /* Card status change interrupt mask */
2150 reg
= t
->cs_irq
<< 4;
2151 if (state
->csc_mask
& SS_DETECT
) reg
|= I365_CSC_DETECT
;
2152 if (state
->flags
& SS_IOCARD
) {
2153 if (state
->csc_mask
& SS_STSCHG
) reg
|= I365_CSC_STSCHG
;
2155 if (state
->csc_mask
& SS_BATDEAD
) reg
|= I365_CSC_BVD1
;
2156 if (state
->csc_mask
& SS_BATWARN
) reg
|= I365_CSC_BVD2
;
2157 if (state
->csc_mask
& SS_READY
) reg
|= I365_CSC_READY
;
2159 i365_set(sock
, I365_CSCINT
, reg
);
2160 i365_get(sock
, I365_CSC
);
2162 if (t
->flags
& IS_CARDBUS
) {
2163 if (t
->cs_irq
|| (pci_csc
&& t
->cap
.pci_irq
))
2164 cb_writel(sock
, CB_SOCKET_MASK
, CB_SM_CCD
);
2165 cb_writel(sock
, CB_SOCKET_EVENT
, -1);
2170 } /* i365_set_socket */
2172 /*====================================================================*/
2174 static int i365_get_io_map(u_short sock
, struct pccard_io_map
*io
)
2176 u_char map
, ioctl
, addr
;
2179 if (map
> 1) return -EINVAL
;
2180 io
->start
= i365_get_pair(sock
, I365_IO(map
)+I365_W_START
);
2181 io
->stop
= i365_get_pair(sock
, I365_IO(map
)+I365_W_STOP
);
2182 ioctl
= i365_get(sock
, I365_IOCTL
);
2183 addr
= i365_get(sock
, I365_ADDRWIN
);
2184 io
->speed
= to_ns(ioctl
& I365_IOCTL_WAIT(map
)) ? 1 : 0;
2185 io
->flags
= (addr
& I365_ENA_IO(map
)) ? MAP_ACTIVE
: 0;
2186 io
->flags
|= (ioctl
& I365_IOCTL_0WS(map
)) ? MAP_0WS
: 0;
2187 io
->flags
|= (ioctl
& I365_IOCTL_16BIT(map
)) ? MAP_16BIT
: 0;
2188 io
->flags
|= (ioctl
& I365_IOCTL_IOCS16(map
)) ? MAP_AUTOSZ
: 0;
2189 DEBUG(1, "i82365: GetIOMap(%d, %d) = %#2.2x, %d ns, "
2190 "%#4.4x-%#4.4x\n", sock
, map
, io
->flags
, io
->speed
,
2191 io
->start
, io
->stop
);
2193 } /* i365_get_io_map */
2195 /*====================================================================*/
2197 static int i365_set_io_map(u_short sock
, struct pccard_io_map
*io
)
2201 DEBUG(1, "i82365: SetIOMap(%d, %d, %#2.2x, %d ns, "
2202 "%#4.4x-%#4.4x)\n", sock
, io
->map
, io
->flags
,
2203 io
->speed
, io
->start
, io
->stop
);
2205 if ((map
> 1) || (io
->start
> 0xffff) || (io
->stop
> 0xffff) ||
2206 (io
->stop
< io
->start
)) return -EINVAL
;
2207 /* Turn off the window before changing anything */
2208 if (i365_get(sock
, I365_ADDRWIN
) & I365_ENA_IO(map
))
2209 i365_bclr(sock
, I365_ADDRWIN
, I365_ENA_IO(map
));
2210 i365_set_pair(sock
, I365_IO(map
)+I365_W_START
, io
->start
);
2211 i365_set_pair(sock
, I365_IO(map
)+I365_W_STOP
, io
->stop
);
2212 ioctl
= i365_get(sock
, I365_IOCTL
) & ~I365_IOCTL_MASK(map
);
2213 if (io
->speed
) ioctl
|= I365_IOCTL_WAIT(map
);
2214 if (io
->flags
& MAP_0WS
) ioctl
|= I365_IOCTL_0WS(map
);
2215 if (io
->flags
& MAP_16BIT
) ioctl
|= I365_IOCTL_16BIT(map
);
2216 if (io
->flags
& MAP_AUTOSZ
) ioctl
|= I365_IOCTL_IOCS16(map
);
2217 i365_set(sock
, I365_IOCTL
, ioctl
);
2218 /* Turn on the window if necessary */
2219 if (io
->flags
& MAP_ACTIVE
)
2220 i365_bset(sock
, I365_ADDRWIN
, I365_ENA_IO(map
));
2222 } /* i365_set_io_map */
2224 /*====================================================================*/
2226 static int i365_get_mem_map(u_short sock
, struct pccard_mem_map
*mem
)
2232 if (map
> 4) return -EINVAL
;
2233 addr
= i365_get(sock
, I365_ADDRWIN
);
2234 mem
->flags
= (addr
& I365_ENA_MEM(map
)) ? MAP_ACTIVE
: 0;
2235 base
= I365_MEM(map
);
2237 i
= i365_get_pair(sock
, base
+I365_W_START
);
2238 mem
->flags
|= (i
& I365_MEM_16BIT
) ? MAP_16BIT
: 0;
2239 mem
->flags
|= (i
& I365_MEM_0WS
) ? MAP_0WS
: 0;
2240 mem
->sys_start
+= ((u_long
)(i
& 0x0fff) << 12);
2242 i
= i365_get_pair(sock
, base
+I365_W_STOP
);
2243 mem
->speed
= (i
& I365_MEM_WS0
) ? 1 : 0;
2244 mem
->speed
+= (i
& I365_MEM_WS1
) ? 2 : 0;
2245 mem
->speed
= to_ns(mem
->speed
);
2246 mem
->sys_stop
= ((u_long
)(i
& 0x0fff) << 12) + 0x0fff;
2248 i
= i365_get_pair(sock
, base
+I365_W_OFF
);
2249 mem
->flags
|= (i
& I365_MEM_WRPROT
) ? MAP_WRPROT
: 0;
2250 mem
->flags
|= (i
& I365_MEM_REG
) ? MAP_ATTRIB
: 0;
2251 mem
->card_start
= ((u_int
)(i
& 0x3fff) << 12) + mem
->sys_start
;
2252 mem
->card_start
&= 0x3ffffff;
2255 /* Take care of high byte, for PCI controllers */
2256 if (socket
[sock
].type
== IS_PD6729
) {
2257 i365_set(sock
, PD67_EXT_INDEX
, PD67_MEM_PAGE(map
));
2258 addr
= i365_get(sock
, PD67_EXT_DATA
) << 24;
2259 } else if (socket
[sock
].flags
& IS_CARDBUS
) {
2260 addr
= i365_get(sock
, CB_MEM_PAGE(map
)) << 24;
2261 mem
->sys_stop
+= addr
; mem
->sys_start
+= addr
;
2265 DEBUG(1, "i82365: GetMemMap(%d, %d) = %#2.2x, %d ns, %#5.5lx-%#5."
2266 "5lx, %#5.5x\n", sock
, mem
->map
, mem
->flags
, mem
->speed
,
2267 mem
->sys_start
, mem
->sys_stop
, mem
->card_start
);
2269 } /* i365_get_mem_map */
2271 /*====================================================================*/
2273 static int i365_set_mem_map(u_short sock
, struct pccard_mem_map
*mem
)
2278 DEBUG(1, "i82365: SetMemMap(%d, %d, %#2.2x, %d ns, %#5.5lx-%#5.5"
2279 "lx, %#5.5x)\n", sock
, mem
->map
, mem
->flags
, mem
->speed
,
2280 mem
->sys_start
, mem
->sys_stop
, mem
->card_start
);
2283 if ((map
> 4) || (mem
->card_start
> 0x3ffffff) ||
2284 (mem
->sys_start
> mem
->sys_stop
) || (mem
->speed
> 1000))
2286 if (!(socket
[sock
].flags
& (IS_PCI
| IS_CARDBUS
)) &&
2287 ((mem
->sys_start
> 0xffffff) || (mem
->sys_stop
> 0xffffff)))
2290 /* Turn off the window before changing anything */
2291 if (i365_get(sock
, I365_ADDRWIN
) & I365_ENA_MEM(map
))
2292 i365_bclr(sock
, I365_ADDRWIN
, I365_ENA_MEM(map
));
2295 /* Take care of high byte, for PCI controllers */
2296 if (socket
[sock
].type
== IS_PD6729
) {
2297 i365_set(sock
, PD67_EXT_INDEX
, PD67_MEM_PAGE(map
));
2298 i365_set(sock
, PD67_EXT_DATA
, (mem
->sys_start
>> 24));
2299 } else if (socket
[sock
].flags
& IS_CARDBUS
)
2300 i365_set(sock
, CB_MEM_PAGE(map
), mem
->sys_start
>> 24);
2303 base
= I365_MEM(map
);
2304 i
= (mem
->sys_start
>> 12) & 0x0fff;
2305 if (mem
->flags
& MAP_16BIT
) i
|= I365_MEM_16BIT
;
2306 if (mem
->flags
& MAP_0WS
) i
|= I365_MEM_0WS
;
2307 i365_set_pair(sock
, base
+I365_W_START
, i
);
2309 i
= (mem
->sys_stop
>> 12) & 0x0fff;
2310 switch (to_cycles(mem
->speed
)) {
2312 case 1: i
|= I365_MEM_WS0
; break;
2313 case 2: i
|= I365_MEM_WS1
; break;
2314 default: i
|= I365_MEM_WS1
| I365_MEM_WS0
; break;
2316 i365_set_pair(sock
, base
+I365_W_STOP
, i
);
2318 i
= ((mem
->card_start
- mem
->sys_start
) >> 12) & 0x3fff;
2319 if (mem
->flags
& MAP_WRPROT
) i
|= I365_MEM_WRPROT
;
2320 if (mem
->flags
& MAP_ATTRIB
) i
|= I365_MEM_REG
;
2321 i365_set_pair(sock
, base
+I365_W_OFF
, i
);
2323 /* Turn on the window if necessary */
2324 if (mem
->flags
& MAP_ACTIVE
)
2325 i365_bset(sock
, I365_ADDRWIN
, I365_ENA_MEM(map
));
2327 } /* i365_set_mem_map */
2329 /*======================================================================
2331 Power control for Cardbus controllers: used both for 16-bit and
2334 ======================================================================*/
2338 static void cb_get_power(u_short sock
, socket_state_t
*state
)
2340 u_int reg
= cb_readl(sock
, CB_SOCKET_CONTROL
);
2341 state
->Vcc
= state
->Vpp
= 0;
2342 switch (reg
& CB_SC_VCC_MASK
) {
2343 case CB_SC_VCC_3V
: state
->Vcc
= 33; break;
2344 case CB_SC_VCC_5V
: state
->Vcc
= 50; break;
2346 switch (reg
& CB_SC_VPP_MASK
) {
2347 case CB_SC_VPP_3V
: state
->Vpp
= 33; break;
2348 case CB_SC_VPP_5V
: state
->Vpp
= 50; break;
2349 case CB_SC_VPP_12V
: state
->Vpp
= 120; break;
2353 static void cb_set_power(u_short sock
, socket_state_t
*state
)
2356 switch (state
->Vcc
) {
2357 case 33: reg
= CB_SC_VCC_3V
; break;
2358 case 50: reg
= CB_SC_VCC_5V
; break;
2359 default: reg
= 0; break;
2361 switch (state
->Vpp
) {
2362 case 33: reg
|= CB_SC_VPP_3V
; break;
2363 case 50: reg
|= CB_SC_VPP_5V
; break;
2364 case 120: reg
|= CB_SC_VPP_12V
; break;
2366 if (reg
!= cb_readl(sock
, CB_SOCKET_CONTROL
))
2367 cb_writel(sock
, CB_SOCKET_CONTROL
, reg
);
2372 /*======================================================================
2374 All the stuff that is strictly for Cardbus cards goes here.
2376 ======================================================================*/
2378 #ifdef CONFIG_CARDBUS
2380 static int cb_get_status(u_short sock
, u_int
*value
)
2383 s
= cb_readl(sock
, CB_SOCKET_STATE
);
2384 *value
= ((s
& CB_SS_32BIT
) ? SS_CARDBUS
: 0);
2385 *value
|= ((s
& CB_SS_CCD1
) || (s
& CB_SS_CCD2
)) ? 0 : SS_DETECT
;
2386 *value
|= (s
& CB_SS_CSTSCHG
) ? SS_STSCHG
: 0;
2387 *value
|= (s
& CB_SS_PWRCYCLE
) ? (SS_POWERON
|SS_READY
) : 0;
2388 *value
|= (s
& CB_SS_3VCARD
) ? SS_3VCARD
: 0;
2389 *value
|= (s
& CB_SS_XVCARD
) ? SS_XVCARD
: 0;
2390 DEBUG(1, "yenta: GetStatus(%d) = %#4.4x\n", sock
, *value
);
2392 } /* cb_get_status */
2394 static int cb_get_socket(u_short sock
, socket_state_t
*state
)
2396 socket_info_t
*s
= &socket
[sock
];
2399 cb_get_power(sock
, state
);
2400 pci_readw(s
->bus
, s
->devfn
, CB_BRIDGE_CONTROL
, &bcr
);
2401 state
->flags
|= (bcr
& CB_BCR_CB_RESET
) ? SS_RESET
: 0;
2402 if (cb_get_irq_mode(sock
) != 0)
2403 state
->io_irq
= s
->cap
.pci_irq
;
2405 state
->io_irq
= i365_get(sock
, I365_INTCTL
) & I365_IRQ_MASK
;
2406 DEBUG(1, "yenta: GetSocket(%d) = flags %#3.3x, Vcc %d, Vpp %d, "
2407 "io_irq %d, csc_mask %#2.2x\n", sock
, state
->flags
,
2408 state
->Vcc
, state
->Vpp
, state
->io_irq
, state
->csc_mask
);
2410 } /* cb_get_socket */
2412 static int cb_set_socket(u_short sock
, socket_state_t
*state
)
2414 socket_info_t
*s
= &socket
[sock
];
2417 DEBUG(1, "yenta: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
2418 "io_irq %d, csc_mask %#2.2x)\n", sock
, state
->flags
,
2419 state
->Vcc
, state
->Vpp
, state
->io_irq
, state
->csc_mask
);
2421 /* First set global controller options */
2423 cb_set_irq_mode(sock
, pci_csc
,
2424 (s
->cap
.pci_irq
== state
->io_irq
));
2425 s
->bcr
&= ~CB_BCR_CB_RESET
;
2426 s
->bcr
|= (state
->flags
& SS_RESET
) ? CB_BCR_CB_RESET
: 0;
2427 set_bridge_state(sock
);
2429 cb_set_power(sock
, state
);
2431 /* Handle IO interrupt using ISA routing */
2433 if (state
->io_irq
!= s
->cap
.pci_irq
) reg
|= state
->io_irq
;
2434 i365_set(sock
, I365_INTCTL
, reg
);
2436 /* Handle CSC mask */
2437 reg
= (socket
[sock
].cs_irq
<< 4);
2438 if (state
->csc_mask
& SS_DETECT
) reg
|= I365_CSC_DETECT
;
2439 i365_set(sock
, I365_CSCINT
, reg
);
2440 i365_get(sock
, I365_CSC
);
2441 if (s
->cs_irq
|| (pci_csc
&& s
->cap
.pci_irq
))
2442 cb_writel(sock
, CB_SOCKET_MASK
, CB_SM_CCD
);
2443 cb_writel(sock
, CB_SOCKET_EVENT
, -1);
2446 } /* cb_set_socket */
2448 static int cb_get_bridge(u_short sock
, struct cb_bridge_map
*m
)
2450 socket_info_t
*s
= &socket
[sock
];
2454 if (map
> 1) return -EINVAL
;
2455 m
->flags
&= MAP_IOSPACE
;
2456 map
+= (m
->flags
& MAP_IOSPACE
) ? 2 : 0;
2457 pci_readl(s
->bus
, s
->devfn
, CB_MEM_BASE(map
), &m
->start
);
2458 pci_readl(s
->bus
, s
->devfn
, CB_MEM_LIMIT(map
), &m
->stop
);
2459 if (m
->start
|| m
->stop
) {
2460 m
->flags
|= MAP_ACTIVE
;
2461 m
->stop
|= (map
> 1) ? 3 : 0x0fff;
2465 pci_readw(s
->bus
, s
->devfn
, CB_BRIDGE_CONTROL
, &bcr
);
2466 m
->flags
|= (bcr
& CB_BCR_PREFETCH(map
)) ? MAP_PREFETCH
: 0;
2468 DEBUG(1, "yenta: GetBridge(%d, %d) = %#2.2x, %#4.4x-%#4.4x\n",
2469 sock
, map
, m
->flags
, m
->start
, m
->stop
);
2473 static int cb_set_bridge(u_short sock
, struct cb_bridge_map
*m
)
2475 socket_info_t
*s
= &socket
[sock
];
2478 DEBUG(1, "yenta: SetBridge(%d, %d, %#2.2x, %#4.4x-%#4.4x)\n",
2479 sock
, m
->map
, m
->flags
, m
->start
, m
->stop
);
2481 if (!(s
->flags
& IS_CARDBUS
) || (map
> 1) || (m
->stop
< m
->start
))
2483 if (m
->flags
& MAP_IOSPACE
) {
2484 if ((m
->stop
> 0xffff) || (m
->start
& 3) ||
2485 ((m
->stop
& 3) != 3))
2490 if ((m
->start
& 0x0fff) || ((m
->stop
& 0x0fff) != 0x0fff))
2492 pci_readw(s
->bus
, s
->devfn
, CB_BRIDGE_CONTROL
, &bcr
);
2493 bcr
&= ~CB_BCR_PREFETCH(map
);
2494 bcr
|= (m
->flags
& MAP_PREFETCH
) ? CB_BCR_PREFETCH(map
) : 0;
2495 pci_writew(s
->bus
, s
->devfn
, CB_BRIDGE_CONTROL
, bcr
);
2497 if (m
->flags
& MAP_ACTIVE
) {
2498 pci_writel(s
->bus
, s
->devfn
, CB_MEM_BASE(map
), m
->start
);
2499 pci_writel(s
->bus
, s
->devfn
, CB_MEM_LIMIT(map
), m
->stop
);
2501 pci_writel(s
->bus
, s
->devfn
, CB_IO_BASE(map
), 0);
2502 pci_writel(s
->bus
, s
->devfn
, CB_IO_LIMIT(map
), 0);
2507 #endif /* CONFIG_CARDBUS */
2509 /*======================================================================
2511 Routines for accessing socket information and register dumps via
2512 /proc/bus/pccard/...
2514 ======================================================================*/
2516 #ifdef CONFIG_PROC_FS
2518 static int proc_read_info(char *buf
, char **start
, off_t pos
,
2519 int count
, int *eof
, void *data
)
2521 socket_info_t
*s
= data
;
2523 p
+= sprintf(p
, "type: %s\npsock: %d\n",
2524 pcic
[s
->type
].name
, s
->psock
);
2526 if (s
->flags
& (IS_PCI
|IS_CARDBUS
))
2527 p
+= sprintf(p
, "bus: %02x\ndevfn: %02x.%1x\n",
2528 s
->bus
, PCI_SLOT(s
->devfn
), PCI_FUNC(s
->devfn
));
2529 if (s
->flags
& IS_CARDBUS
)
2530 p
+= sprintf(p
, "cardbus: %02x\n", s
->cap
.cardbus
);
2535 static int proc_read_exca(char *buf
, char **start
, off_t pos
,
2536 int count
, int *eof
, void *data
)
2538 u_short sock
= (socket_info_t
*)data
- socket
;
2545 ISA_LOCK(sock
, flags
);
2547 if (socket
[sock
].flags
& IS_CARDBUS
)
2548 top
= (socket
[sock
].flags
& IS_CIRRUS
) ? 0x140 : 0x50;
2549 for (i
= 0; i
< top
; i
+= 4) {
2551 p
+= sprintf(p
, "\n");
2554 p
+= sprintf(p
, "%02x %02x %02x %02x%s",
2555 i365_get(sock
,i
), i365_get(sock
,i
+1),
2556 i365_get(sock
,i
+2), i365_get(sock
,i
+3),
2557 ((i
% 16) == 12) ? "\n" : " ");
2559 ISA_UNLOCK(sock
, flags
);
2564 static int proc_read_pci(char *buf
, char **start
, off_t pos
,
2565 int count
, int *eof
, void *data
)
2567 socket_info_t
*s
= data
;
2568 u_char bus
= s
->bus
, devfn
= s
->devfn
;
2573 for (i
= 0; i
< 0xc0; i
+= 0x10) {
2574 pci_readl(bus
, devfn
, i
, &a
);
2575 pci_readl(bus
, devfn
, i
+4, &b
);
2576 pci_readl(bus
, devfn
, i
+8, &c
);
2577 pci_readl(bus
, devfn
, i
+12, &d
);
2578 p
+= sprintf(p
, "%08x %08x %08x %08x\n", a
, b
, c
, d
);
2584 #ifdef CONFIG_CARDBUS
2585 static int proc_read_cardbus(char *buf
, char **start
, off_t pos
,
2586 int count
, int *eof
, void *data
)
2588 u_short sock
= (socket_info_t
*)data
- socket
;
2592 top
= (socket
[sock
].flags
& IS_O2MICRO
) ? 0x30 : 0x20;
2593 for (i
= 0; i
< top
; i
+= 0x10)
2594 p
+= sprintf(p
, "%08x %08x %08x %08x\n",
2595 cb_readl(sock
,i
+0x00), cb_readl(sock
,i
+0x04),
2596 cb_readl(sock
,i
+0x08), cb_readl(sock
,i
+0x0c));
2601 static void pcic_proc_setup(unsigned int sock
, struct proc_dir_entry
*base
)
2603 #ifdef CONFIG_PROC_FS
2604 socket_info_t
*s
= &socket
[sock
];
2606 if (s
->flags
& IS_ALIVE
)
2609 create_proc_read_entry("info", 0, base
, proc_read_info
, s
);
2610 create_proc_read_entry("exca", 0, base
, proc_read_exca
, s
);
2612 if (s
->flags
& (IS_PCI
|IS_CARDBUS
))
2613 create_proc_read_entry("pci", 0, base
, proc_read_pci
, s
);
2615 #ifdef CONFIG_CARDBUS
2616 if (s
->flags
& IS_CARDBUS
)
2617 create_proc_read_entry("cardbus", 0, base
, proc_read_cardbus
, s
);
2623 static void pcic_proc_remove(u_short sock
)
2625 struct proc_dir_entry
*base
= socket
[sock
].proc
;
2626 if (base
== NULL
) return;
2627 remove_proc_entry("info", base
);
2628 remove_proc_entry("exca", base
);
2630 if (socket
[sock
].flags
& (IS_PCI
|IS_CARDBUS
))
2631 remove_proc_entry("pci", base
);
2633 #ifdef CONFIG_CARDBUS
2634 if (socket
[sock
].flags
& IS_CARDBUS
)
2635 remove_proc_entry("cardbus", base
);
2639 #endif /* CONFIG_PROC_FS */
2641 /*====================================================================*/
2644 * This looks like a lot of duplication, and it is. What we should REALLY
2645 * have is separate functions for the separate cases, instead of having
2646 * duplicate tests in them - and then have the test in the place that sets
2647 * up the ss_entry function pointer table instead!
2649 * For example, the IS_CARDBUS thing is something we know _statically_,
2650 * and as such it is a waste of time and space to test it dynamically.
2652 * Much of this goes away by splitting off the cases. One small step at a
2656 #ifdef CONFIG_CARDBUS
2657 #define is_cardbus(sock) ((socket[(sock)].flags & IS_CARDBUS) && (cb_readl((sock), CB_SOCKET_STATE) & CB_SS_32BIT))
2661 * The locking is rather broken. Why do we only lock for ISA, not for
2662 * all other cases? If there are reasons to lock, we should lock. Not
2663 * this silly conditional.
2665 * Plan: make it bug-for-bug compatible with the old stuff, and clean
2666 * it up when the infrastructure is done.
2669 #define LOCKED(x) do { \
2670 if (socket[(sock)].flags & IS_CARDBUS) return x; \
2673 unsigned long flags; \
2674 spin_lock_irqsave(&isa_lock, flags); \
2676 spin_unlock_irqrestore(&isa_lock, flags); \
2681 #define LOCKED(x) return x
2685 static int pcic_get_status(unsigned int sock
, u_int
*value
)
2687 if (socket
[sock
].flags
& IS_ALIVE
) {
2692 #ifdef CONFIG_CARDBUS
2693 if (is_cardbus(sock
))
2694 return cb_get_status(sock
, value
);
2696 LOCKED(i365_get_status(sock
, value
));
2699 static int pcic_get_socket(unsigned int sock
, socket_state_t
*state
)
2701 if (socket
[sock
].flags
& IS_ALIVE
)
2704 #ifdef CONFIG_CARDBUS
2705 if (is_cardbus(sock
))
2706 return cb_get_socket(sock
, state
);
2708 LOCKED(i365_get_socket(sock
, state
));
2711 static int pcic_set_socket(unsigned int sock
, socket_state_t
*state
)
2713 if (socket
[sock
].flags
& IS_ALIVE
)
2716 #ifdef CONFIG_CARDBUS
2717 if (is_cardbus(sock
))
2718 return cb_set_socket(sock
, state
);
2720 LOCKED(i365_set_socket(sock
, state
));
2723 static int pcic_get_io_map(unsigned int sock
, struct pccard_io_map
*io
)
2725 if (socket
[sock
].flags
& IS_ALIVE
)
2728 LOCKED(i365_get_io_map(sock
, io
));
2731 static int pcic_set_io_map(unsigned int sock
, struct pccard_io_map
*io
)
2733 if (socket
[sock
].flags
& IS_ALIVE
)
2736 LOCKED(i365_set_io_map(sock
, io
));
2739 static int pcic_get_mem_map(unsigned int sock
, struct pccard_mem_map
*mem
)
2741 if (socket
[sock
].flags
& IS_ALIVE
)
2744 LOCKED(i365_get_mem_map(sock
, mem
));
2747 static int pcic_set_mem_map(unsigned int sock
, struct pccard_mem_map
*mem
)
2749 if (socket
[sock
].flags
& IS_ALIVE
)
2752 LOCKED(i365_set_mem_map(sock
, mem
));
2755 static int pcic_get_bridge(unsigned int sock
, struct cb_bridge_map
*m
)
2757 #ifdef CONFIG_CARDBUS
2758 return cb_get_bridge(sock
, m
);
2764 static int pcic_set_bridge(unsigned int sock
, struct cb_bridge_map
*m
)
2766 #ifdef CONFIG_CARDBUS
2767 return cb_set_bridge(sock
, m
);
2773 static struct pccard_operations pcic_operations
= {
2774 pcic_register_callback
,
2775 pcic_inquire_socket
,
2788 /*====================================================================*/
2790 static int __init
init_i82365(void)
2793 pcmcia_get_card_services_info(&serv
);
2794 if (serv
.Revision
!= CS_RELEASE_CODE
) {
2795 printk(KERN_NOTICE
"i82365: Card Services release "
2796 "does not match!\n");
2799 DEBUG(0, "%s\n", version
);
2800 printk(KERN_INFO
"Intel PCIC probe: ");
2804 if (do_pci_probe
&& pcibios_present()) {
2805 pci_probe(PCI_CLASS_BRIDGE_CARDBUS
, add_cb_bridge
);
2806 pci_probe(PCI_CLASS_BRIDGE_PCMCIA
, add_pci_bridge
);
2815 printk("not found.\n");
2819 /* Set up interrupt handler(s) */
2822 request_irq(cs_irq
, pcic_interrupt
, 0, "i82365", NULL
);
2826 u_int i
, irq
, mask
= 0;
2827 for (i
= 0; i
< sockets
; i
++) {
2828 irq
= socket
[i
].cap
.pci_irq
;
2829 if (irq
&& !(mask
& (1<<irq
)))
2830 request_irq(irq
, pcic_interrupt
, SA_SHIRQ
, "i82365", NULL
);
2836 if (register_ss_entry(sockets
, &pcic_operations
) != 0)
2837 printk(KERN_NOTICE
"i82365: register_ss_entry() failed\n");
2839 /* Finally, schedule a polling interrupt */
2840 if (poll_interval
!= 0) {
2841 poll_timer
.function
= pcic_interrupt_wrapper
;
2842 poll_timer
.data
= 0;
2843 poll_timer
.prev
= poll_timer
.next
= NULL
;
2844 poll_timer
.expires
= jiffies
+ poll_interval
;
2845 add_timer(&poll_timer
);
2852 static void __exit
exit_i82365(void)
2855 #ifdef CONFIG_PROC_FS
2856 for (i
= 0; i
< sockets
; i
++) pcic_proc_remove(i
);
2858 unregister_ss_entry(&pcic_operations
);
2859 if (poll_interval
!= 0)
2860 del_timer(&poll_timer
);
2863 free_irq(cs_irq
, NULL
);
2867 u_int irq
, mask
= 0;
2868 for (i
= 0; i
< sockets
; i
++) {
2869 irq
= socket
[i
].cap
.pci_irq
;
2870 if (irq
&& !(mask
& (1<<irq
)))
2871 free_irq(irq
, NULL
);
2876 for (i
= 0; i
< sockets
; i
++) {
2877 /* Turn off all interrupt sources! */
2878 i365_set(i
, I365_CSCINT
, 0);
2880 if (socket
[i
].flags
& IS_CARDBUS
)
2881 cb_writel(i
, CB_SOCKET_MASK
, 0);
2882 if (socket
[i
].cb_virt
) {
2883 iounmap(socket
[i
].cb_virt
);
2884 release_mem_region(socket
[i
].cb_phys
, 0x1000);
2887 release_region(socket
[i
].ioaddr
, 2);
2891 module_init(init_i82365
);
2892 module_exit(exit_i82365
);
2894 /*====================================================================*/