pcmcia: avoid sysfs-related lockup for cardbus
[safe/jmp/linux-2.6] / drivers / pcmcia / yenta_socket.c
1 /*
2  * Regular cardbus driver ("yenta_socket")
3  *
4  * (C) Copyright 1999, 2000 Linus Torvalds
5  *
6  * Changelog:
7  * Aug 2002: Manfred Spraul <manfred@colorfullife.com>
8  *      Dynamically adjust the size of the bridge resource
9  *
10  * May 2003: Dominik Brodowski <linux@brodo.de>
11  *      Merge pci_socket.c and yenta.c into one file
12  */
13 #include <linux/init.h>
14 #include <linux/pci.h>
15 #include <linux/workqueue.h>
16 #include <linux/interrupt.h>
17 #include <linux/delay.h>
18 #include <linux/module.h>
19 #include <linux/io.h>
20
21 #include <pcmcia/cs_types.h>
22 #include <pcmcia/ss.h>
23 #include <pcmcia/cs.h>
24
25 #include "yenta_socket.h"
26 #include "i82365.h"
27
28 static int disable_clkrun;
29 module_param(disable_clkrun, bool, 0444);
30 MODULE_PARM_DESC(disable_clkrun, "If PC card doesn't function properly, please try this option");
31
32 static int isa_probe = 1;
33 module_param(isa_probe, bool, 0444);
34 MODULE_PARM_DESC(isa_probe, "If set ISA interrupts are probed (default). Set to N to disable probing");
35
36 static int pwr_irqs_off;
37 module_param(pwr_irqs_off, bool, 0644);
38 MODULE_PARM_DESC(pwr_irqs_off, "Force IRQs off during power-on of slot. Use only when seeing IRQ storms!");
39
40 static char o2_speedup[] = "default";
41 module_param_string(o2_speedup, o2_speedup, sizeof(o2_speedup), 0444);
42 MODULE_PARM_DESC(o2_speedup, "Use prefetch/burst for O2-bridges: 'on', 'off' "
43         "or 'default' (uses recommended behaviour for the detected bridge)");
44
45 #define debug(x, s, args...) dev_dbg(&s->dev->dev, x, ##args)
46
47 /* Don't ask.. */
48 #define to_cycles(ns)   ((ns)/120)
49 #define to_ns(cycles)   ((cycles)*120)
50
51 /*
52  * yenta PCI irq probing.
53  * currently only used in the TI/EnE initialization code
54  */
55 #ifdef CONFIG_YENTA_TI
56 static int yenta_probe_cb_irq(struct yenta_socket *socket);
57 #endif
58
59
60 static unsigned int override_bios;
61 module_param(override_bios, uint, 0000);
62 MODULE_PARM_DESC(override_bios, "yenta ignore bios resource allocation");
63
64 /*
65  * Generate easy-to-use ways of reading a cardbus sockets
66  * regular memory space ("cb_xxx"), configuration space
67  * ("config_xxx") and compatibility space ("exca_xxxx")
68  */
69 static inline u32 cb_readl(struct yenta_socket *socket, unsigned reg)
70 {
71         u32 val = readl(socket->base + reg);
72         debug("%04x %08x\n", socket, reg, val);
73         return val;
74 }
75
76 static inline void cb_writel(struct yenta_socket *socket, unsigned reg, u32 val)
77 {
78         debug("%04x %08x\n", socket, reg, val);
79         writel(val, socket->base + reg);
80         readl(socket->base + reg); /* avoid problems with PCI write posting */
81 }
82
83 static inline u8 config_readb(struct yenta_socket *socket, unsigned offset)
84 {
85         u8 val;
86         pci_read_config_byte(socket->dev, offset, &val);
87         debug("%04x %02x\n", socket, offset, val);
88         return val;
89 }
90
91 static inline u16 config_readw(struct yenta_socket *socket, unsigned offset)
92 {
93         u16 val;
94         pci_read_config_word(socket->dev, offset, &val);
95         debug("%04x %04x\n", socket, offset, val);
96         return val;
97 }
98
99 static inline u32 config_readl(struct yenta_socket *socket, unsigned offset)
100 {
101         u32 val;
102         pci_read_config_dword(socket->dev, offset, &val);
103         debug("%04x %08x\n", socket, offset, val);
104         return val;
105 }
106
107 static inline void config_writeb(struct yenta_socket *socket, unsigned offset, u8 val)
108 {
109         debug("%04x %02x\n", socket, offset, val);
110         pci_write_config_byte(socket->dev, offset, val);
111 }
112
113 static inline void config_writew(struct yenta_socket *socket, unsigned offset, u16 val)
114 {
115         debug("%04x %04x\n", socket, offset, val);
116         pci_write_config_word(socket->dev, offset, val);
117 }
118
119 static inline void config_writel(struct yenta_socket *socket, unsigned offset, u32 val)
120 {
121         debug("%04x %08x\n", socket, offset, val);
122         pci_write_config_dword(socket->dev, offset, val);
123 }
124
125 static inline u8 exca_readb(struct yenta_socket *socket, unsigned reg)
126 {
127         u8 val = readb(socket->base + 0x800 + reg);
128         debug("%04x %02x\n", socket, reg, val);
129         return val;
130 }
131
132 static inline u8 exca_readw(struct yenta_socket *socket, unsigned reg)
133 {
134         u16 val;
135         val = readb(socket->base + 0x800 + reg);
136         val |= readb(socket->base + 0x800 + reg + 1) << 8;
137         debug("%04x %04x\n", socket, reg, val);
138         return val;
139 }
140
141 static inline void exca_writeb(struct yenta_socket *socket, unsigned reg, u8 val)
142 {
143         debug("%04x %02x\n", socket, reg, val);
144         writeb(val, socket->base + 0x800 + reg);
145         readb(socket->base + 0x800 + reg); /* PCI write posting... */
146 }
147
148 static void exca_writew(struct yenta_socket *socket, unsigned reg, u16 val)
149 {
150         debug("%04x %04x\n", socket, reg, val);
151         writeb(val, socket->base + 0x800 + reg);
152         writeb(val >> 8, socket->base + 0x800 + reg + 1);
153
154         /* PCI write posting... */
155         readb(socket->base + 0x800 + reg);
156         readb(socket->base + 0x800 + reg + 1);
157 }
158
159 static ssize_t show_yenta_registers(struct device *yentadev, struct device_attribute *attr, char *buf)
160 {
161         struct pci_dev *dev = to_pci_dev(yentadev);
162         struct yenta_socket *socket = pci_get_drvdata(dev);
163         int offset = 0, i;
164
165         offset = snprintf(buf, PAGE_SIZE, "CB registers:");
166         for (i = 0; i < 0x24; i += 4) {
167                 unsigned val;
168                 if (!(i & 15))
169                         offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n%02x:", i);
170                 val = cb_readl(socket, i);
171                 offset += snprintf(buf + offset, PAGE_SIZE - offset, " %08x", val);
172         }
173
174         offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n\nExCA registers:");
175         for (i = 0; i < 0x45; i++) {
176                 unsigned char val;
177                 if (!(i & 7)) {
178                         if (i & 8) {
179                                 memcpy(buf + offset, " -", 2);
180                                 offset += 2;
181                         } else
182                                 offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n%02x:", i);
183                 }
184                 val = exca_readb(socket, i);
185                 offset += snprintf(buf + offset, PAGE_SIZE - offset, " %02x", val);
186         }
187         buf[offset++] = '\n';
188         return offset;
189 }
190
191 static DEVICE_ATTR(yenta_registers, S_IRUSR, show_yenta_registers, NULL);
192
193 /*
194  * Ugh, mixed-mode cardbus and 16-bit pccard state: things depend
195  * on what kind of card is inserted..
196  */
197 static int yenta_get_status(struct pcmcia_socket *sock, unsigned int *value)
198 {
199         struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
200         unsigned int val;
201         u32 state = cb_readl(socket, CB_SOCKET_STATE);
202
203         val  = (state & CB_3VCARD) ? SS_3VCARD : 0;
204         val |= (state & CB_XVCARD) ? SS_XVCARD : 0;
205         val |= (state & (CB_5VCARD | CB_3VCARD | CB_XVCARD | CB_YVCARD)) ? 0 : SS_PENDING;
206         val |= (state & (CB_CDETECT1 | CB_CDETECT2)) ? SS_PENDING : 0;
207
208
209         if (state & CB_CBCARD) {
210                 val |= SS_CARDBUS;
211                 val |= (state & CB_CARDSTS) ? SS_STSCHG : 0;
212                 val |= (state & (CB_CDETECT1 | CB_CDETECT2)) ? 0 : SS_DETECT;
213                 val |= (state & CB_PWRCYCLE) ? SS_POWERON | SS_READY : 0;
214         } else if (state & CB_16BITCARD) {
215                 u8 status = exca_readb(socket, I365_STATUS);
216                 val |= ((status & I365_CS_DETECT) == I365_CS_DETECT) ? SS_DETECT : 0;
217                 if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
218                         val |= (status & I365_CS_STSCHG) ? 0 : SS_STSCHG;
219                 } else {
220                         val |= (status & I365_CS_BVD1) ? 0 : SS_BATDEAD;
221                         val |= (status & I365_CS_BVD2) ? 0 : SS_BATWARN;
222                 }
223                 val |= (status & I365_CS_WRPROT) ? SS_WRPROT : 0;
224                 val |= (status & I365_CS_READY) ? SS_READY : 0;
225                 val |= (status & I365_CS_POWERON) ? SS_POWERON : 0;
226         }
227
228         *value = val;
229         return 0;
230 }
231
232 static void yenta_set_power(struct yenta_socket *socket, socket_state_t *state)
233 {
234         /* some birdges require to use the ExCA registers to power 16bit cards */
235         if (!(cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) &&
236             (socket->flags & YENTA_16BIT_POWER_EXCA)) {
237                 u8 reg, old;
238                 reg = old = exca_readb(socket, I365_POWER);
239                 reg &= ~(I365_VCC_MASK | I365_VPP1_MASK | I365_VPP2_MASK);
240
241                 /* i82365SL-DF style */
242                 if (socket->flags & YENTA_16BIT_POWER_DF) {
243                         switch (state->Vcc) {
244                         case 33:
245                                 reg |= I365_VCC_3V;
246                                 break;
247                         case 50:
248                                 reg |= I365_VCC_5V;
249                                 break;
250                         default:
251                                 reg = 0;
252                                 break;
253                         }
254                         switch (state->Vpp) {
255                         case 33:
256                         case 50:
257                                 reg |= I365_VPP1_5V;
258                                 break;
259                         case 120:
260                                 reg |= I365_VPP1_12V;
261                                 break;
262                         }
263                 } else {
264                         /* i82365SL-B style */
265                         switch (state->Vcc) {
266                         case 50:
267                                 reg |= I365_VCC_5V;
268                                 break;
269                         default:
270                                 reg = 0;
271                                 break;
272                         }
273                         switch (state->Vpp) {
274                         case 50:
275                                 reg |= I365_VPP1_5V | I365_VPP2_5V;
276                                 break;
277                         case 120:
278                                 reg |= I365_VPP1_12V | I365_VPP2_12V;
279                                 break;
280                         }
281                 }
282
283                 if (reg != old)
284                         exca_writeb(socket, I365_POWER, reg);
285         } else {
286                 u32 reg = 0;    /* CB_SC_STPCLK? */
287                 switch (state->Vcc) {
288                 case 33:
289                         reg = CB_SC_VCC_3V;
290                         break;
291                 case 50:
292                         reg = CB_SC_VCC_5V;
293                         break;
294                 default:
295                         reg = 0;
296                         break;
297                 }
298                 switch (state->Vpp) {
299                 case 33:
300                         reg |= CB_SC_VPP_3V;
301                         break;
302                 case 50:
303                         reg |= CB_SC_VPP_5V;
304                         break;
305                 case 120:
306                         reg |= CB_SC_VPP_12V;
307                         break;
308                 }
309                 if (reg != cb_readl(socket, CB_SOCKET_CONTROL))
310                         cb_writel(socket, CB_SOCKET_CONTROL, reg);
311         }
312 }
313
314 static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
315 {
316         struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
317         u16 bridge;
318
319         /* if powering down: do it immediately */
320         if (state->Vcc == 0)
321                 yenta_set_power(socket, state);
322
323         socket->io_irq = state->io_irq;
324         bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR);
325         if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
326                 u8 intr;
327                 bridge |= (state->flags & SS_RESET) ? CB_BRIDGE_CRST : 0;
328
329                 /* ISA interrupt control? */
330                 intr = exca_readb(socket, I365_INTCTL);
331                 intr = (intr & ~0xf);
332                 if (!socket->cb_irq) {
333                         intr |= state->io_irq;
334                         bridge |= CB_BRIDGE_INTR;
335                 }
336                 exca_writeb(socket, I365_INTCTL, intr);
337         }  else {
338                 u8 reg;
339
340                 reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA);
341                 reg |= (state->flags & SS_RESET) ? 0 : I365_PC_RESET;
342                 reg |= (state->flags & SS_IOCARD) ? I365_PC_IOCARD : 0;
343                 if (state->io_irq != socket->cb_irq) {
344                         reg |= state->io_irq;
345                         bridge |= CB_BRIDGE_INTR;
346                 }
347                 exca_writeb(socket, I365_INTCTL, reg);
348
349                 reg = exca_readb(socket, I365_POWER) & (I365_VCC_MASK|I365_VPP1_MASK);
350                 reg |= I365_PWR_NORESET;
351                 if (state->flags & SS_PWR_AUTO)
352                         reg |= I365_PWR_AUTO;
353                 if (state->flags & SS_OUTPUT_ENA)
354                         reg |= I365_PWR_OUT;
355                 if (exca_readb(socket, I365_POWER) != reg)
356                         exca_writeb(socket, I365_POWER, reg);
357
358                 /* CSC interrupt: no ISA irq for CSC */
359                 reg = I365_CSC_DETECT;
360                 if (state->flags & SS_IOCARD) {
361                         if (state->csc_mask & SS_STSCHG)
362                                 reg |= I365_CSC_STSCHG;
363                 } else {
364                         if (state->csc_mask & SS_BATDEAD)
365                                 reg |= I365_CSC_BVD1;
366                         if (state->csc_mask & SS_BATWARN)
367                                 reg |= I365_CSC_BVD2;
368                         if (state->csc_mask & SS_READY)
369                                 reg |= I365_CSC_READY;
370                 }
371                 exca_writeb(socket, I365_CSCINT, reg);
372                 exca_readb(socket, I365_CSC);
373                 if (sock->zoom_video)
374                         sock->zoom_video(sock, state->flags & SS_ZVCARD);
375         }
376         config_writew(socket, CB_BRIDGE_CONTROL, bridge);
377         /* Socket event mask: get card insert/remove events.. */
378         cb_writel(socket, CB_SOCKET_EVENT, -1);
379         cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
380
381         /* if powering up: do it as the last step when the socket is configured */
382         if (state->Vcc != 0)
383                 yenta_set_power(socket, state);
384         return 0;
385 }
386
387 static int yenta_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
388 {
389         struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
390         int map;
391         unsigned char ioctl, addr, enable;
392
393         map = io->map;
394
395         if (map > 1)
396                 return -EINVAL;
397
398         enable = I365_ENA_IO(map);
399         addr = exca_readb(socket, I365_ADDRWIN);
400
401         /* Disable the window before changing it.. */
402         if (addr & enable) {
403                 addr &= ~enable;
404                 exca_writeb(socket, I365_ADDRWIN, addr);
405         }
406
407         exca_writew(socket, I365_IO(map)+I365_W_START, io->start);
408         exca_writew(socket, I365_IO(map)+I365_W_STOP, io->stop);
409
410         ioctl = exca_readb(socket, I365_IOCTL) & ~I365_IOCTL_MASK(map);
411         if (io->flags & MAP_0WS)
412                 ioctl |= I365_IOCTL_0WS(map);
413         if (io->flags & MAP_16BIT)
414                 ioctl |= I365_IOCTL_16BIT(map);
415         if (io->flags & MAP_AUTOSZ)
416                 ioctl |= I365_IOCTL_IOCS16(map);
417         exca_writeb(socket, I365_IOCTL, ioctl);
418
419         if (io->flags & MAP_ACTIVE)
420                 exca_writeb(socket, I365_ADDRWIN, addr | enable);
421         return 0;
422 }
423
424 static int yenta_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *mem)
425 {
426         struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
427         struct pci_bus_region region;
428         int map;
429         unsigned char addr, enable;
430         unsigned int start, stop, card_start;
431         unsigned short word;
432
433         pcibios_resource_to_bus(socket->dev, &region, mem->res);
434
435         map = mem->map;
436         start = region.start;
437         stop = region.end;
438         card_start = mem->card_start;
439
440         if (map > 4 || start > stop || ((start ^ stop) >> 24) ||
441             (card_start >> 26) || mem->speed > 1000)
442                 return -EINVAL;
443
444         enable = I365_ENA_MEM(map);
445         addr = exca_readb(socket, I365_ADDRWIN);
446         if (addr & enable) {
447                 addr &= ~enable;
448                 exca_writeb(socket, I365_ADDRWIN, addr);
449         }
450
451         exca_writeb(socket, CB_MEM_PAGE(map), start >> 24);
452
453         word = (start >> 12) & 0x0fff;
454         if (mem->flags & MAP_16BIT)
455                 word |= I365_MEM_16BIT;
456         if (mem->flags & MAP_0WS)
457                 word |= I365_MEM_0WS;
458         exca_writew(socket, I365_MEM(map) + I365_W_START, word);
459
460         word = (stop >> 12) & 0x0fff;
461         switch (to_cycles(mem->speed)) {
462         case 0:
463                 break;
464         case 1:
465                 word |= I365_MEM_WS0;
466                 break;
467         case 2:
468                 word |= I365_MEM_WS1;
469                 break;
470         default:
471                 word |= I365_MEM_WS1 | I365_MEM_WS0;
472                 break;
473         }
474         exca_writew(socket, I365_MEM(map) + I365_W_STOP, word);
475
476         word = ((card_start - start) >> 12) & 0x3fff;
477         if (mem->flags & MAP_WRPROT)
478                 word |= I365_MEM_WRPROT;
479         if (mem->flags & MAP_ATTRIB)
480                 word |= I365_MEM_REG;
481         exca_writew(socket, I365_MEM(map) + I365_W_OFF, word);
482
483         if (mem->flags & MAP_ACTIVE)
484                 exca_writeb(socket, I365_ADDRWIN, addr | enable);
485         return 0;
486 }
487
488
489
490 static irqreturn_t yenta_interrupt(int irq, void *dev_id)
491 {
492         unsigned int events;
493         struct yenta_socket *socket = (struct yenta_socket *) dev_id;
494         u8 csc;
495         u32 cb_event;
496
497         /* Clear interrupt status for the event */
498         cb_event = cb_readl(socket, CB_SOCKET_EVENT);
499         cb_writel(socket, CB_SOCKET_EVENT, cb_event);
500
501         csc = exca_readb(socket, I365_CSC);
502
503         if (!(cb_event || csc))
504                 return IRQ_NONE;
505
506         events = (cb_event & (CB_CD1EVENT | CB_CD2EVENT)) ? SS_DETECT : 0 ;
507         events |= (csc & I365_CSC_DETECT) ? SS_DETECT : 0;
508         if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
509                 events |= (csc & I365_CSC_STSCHG) ? SS_STSCHG : 0;
510         } else {
511                 events |= (csc & I365_CSC_BVD1) ? SS_BATDEAD : 0;
512                 events |= (csc & I365_CSC_BVD2) ? SS_BATWARN : 0;
513                 events |= (csc & I365_CSC_READY) ? SS_READY : 0;
514         }
515
516         if (events)
517                 pcmcia_parse_events(&socket->socket, events);
518
519         return IRQ_HANDLED;
520 }
521
522 static void yenta_interrupt_wrapper(unsigned long data)
523 {
524         struct yenta_socket *socket = (struct yenta_socket *) data;
525
526         yenta_interrupt(0, (void *)socket);
527         socket->poll_timer.expires = jiffies + HZ;
528         add_timer(&socket->poll_timer);
529 }
530
531 static void yenta_clear_maps(struct yenta_socket *socket)
532 {
533         int i;
534         struct resource res = { .start = 0, .end = 0x0fff };
535         pccard_io_map io = { 0, 0, 0, 0, 1 };
536         pccard_mem_map mem = { .res = &res, };
537
538         yenta_set_socket(&socket->socket, &dead_socket);
539         for (i = 0; i < 2; i++) {
540                 io.map = i;
541                 yenta_set_io_map(&socket->socket, &io);
542         }
543         for (i = 0; i < 5; i++) {
544                 mem.map = i;
545                 yenta_set_mem_map(&socket->socket, &mem);
546         }
547 }
548
549 /* redoes voltage interrogation if required */
550 static void yenta_interrogate(struct yenta_socket *socket)
551 {
552         u32 state;
553
554         state = cb_readl(socket, CB_SOCKET_STATE);
555         if (!(state & (CB_5VCARD | CB_3VCARD | CB_XVCARD | CB_YVCARD)) ||
556             (state & (CB_CDETECT1 | CB_CDETECT2 | CB_NOTACARD | CB_BADVCCREQ)) ||
557             ((state & (CB_16BITCARD | CB_CBCARD)) == (CB_16BITCARD | CB_CBCARD)))
558                 cb_writel(socket, CB_SOCKET_FORCE, CB_CVSTEST);
559 }
560
561 /* Called at resume and initialization events */
562 static int yenta_sock_init(struct pcmcia_socket *sock)
563 {
564         struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
565
566         exca_writeb(socket, I365_GBLCTL, 0x00);
567         exca_writeb(socket, I365_GENCTL, 0x00);
568
569         /* Redo card voltage interrogation */
570         yenta_interrogate(socket);
571
572         yenta_clear_maps(socket);
573
574         if (socket->type && socket->type->sock_init)
575                 socket->type->sock_init(socket);
576
577         /* Re-enable CSC interrupts */
578         cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
579
580         return 0;
581 }
582
583 static int yenta_sock_suspend(struct pcmcia_socket *sock)
584 {
585         struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
586
587         /* Disable CSC interrupts */
588         cb_writel(socket, CB_SOCKET_MASK, 0x0);
589
590         return 0;
591 }
592
593 /*
594  * Use an adaptive allocation for the memory resource,
595  * sometimes the memory behind pci bridges is limited:
596  * 1/8 of the size of the io window of the parent.
597  * max 4 MB, min 16 kB. We try very hard to not get below
598  * the "ACC" values, though.
599  */
600 #define BRIDGE_MEM_MAX (4*1024*1024)
601 #define BRIDGE_MEM_ACC (128*1024)
602 #define BRIDGE_MEM_MIN (16*1024)
603
604 #define BRIDGE_IO_MAX 512
605 #define BRIDGE_IO_ACC 256
606 #define BRIDGE_IO_MIN 32
607
608 #ifndef PCIBIOS_MIN_CARDBUS_IO
609 #define PCIBIOS_MIN_CARDBUS_IO PCIBIOS_MIN_IO
610 #endif
611
612 static int yenta_search_one_res(struct resource *root, struct resource *res,
613                                 u32 min)
614 {
615         u32 align, size, start, end;
616
617         if (res->flags & IORESOURCE_IO) {
618                 align = 1024;
619                 size = BRIDGE_IO_MAX;
620                 start = PCIBIOS_MIN_CARDBUS_IO;
621                 end = ~0U;
622         } else {
623                 unsigned long avail = root->end - root->start;
624                 int i;
625                 size = BRIDGE_MEM_MAX;
626                 if (size > avail/8) {
627                         size = (avail+1)/8;
628                         /* round size down to next power of 2 */
629                         i = 0;
630                         while ((size /= 2) != 0)
631                                 i++;
632                         size = 1 << i;
633                 }
634                 if (size < min)
635                         size = min;
636                 align = size;
637                 start = PCIBIOS_MIN_MEM;
638                 end = ~0U;
639         }
640
641         do {
642                 if (allocate_resource(root, res, size, start, end, align,
643                                       NULL, NULL) == 0) {
644                         return 1;
645                 }
646                 size = size/2;
647                 align = size;
648         } while (size >= min);
649
650         return 0;
651 }
652
653
654 static int yenta_search_res(struct yenta_socket *socket, struct resource *res,
655                             u32 min)
656 {
657         int i;
658         for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
659                 struct resource *root = socket->dev->bus->resource[i];
660                 if (!root)
661                         continue;
662
663                 if ((res->flags ^ root->flags) &
664                     (IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH))
665                         continue; /* Wrong type */
666
667                 if (yenta_search_one_res(root, res, min))
668                         return 1;
669         }
670         return 0;
671 }
672
673 static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type, int addr_start, int addr_end)
674 {
675         struct pci_dev *dev = socket->dev;
676         struct resource *res;
677         struct pci_bus_region region;
678         unsigned mask;
679
680         res = dev->resource + PCI_BRIDGE_RESOURCES + nr;
681         /* Already allocated? */
682         if (res->parent)
683                 return 0;
684
685         /* The granularity of the memory limit is 4kB, on IO it's 4 bytes */
686         mask = ~0xfff;
687         if (type & IORESOURCE_IO)
688                 mask = ~3;
689
690         res->name = dev->subordinate->name;
691         res->flags = type;
692
693         region.start = config_readl(socket, addr_start) & mask;
694         region.end = config_readl(socket, addr_end) | ~mask;
695         if (region.start && region.end > region.start && !override_bios) {
696                 pcibios_bus_to_resource(dev, res, &region);
697                 if (pci_claim_resource(dev, PCI_BRIDGE_RESOURCES + nr) == 0)
698                         return 0;
699                 dev_printk(KERN_INFO, &dev->dev,
700                            "Preassigned resource %d busy or not available, "
701                            "reconfiguring...\n",
702                            nr);
703         }
704
705         if (type & IORESOURCE_IO) {
706                 if ((yenta_search_res(socket, res, BRIDGE_IO_MAX)) ||
707                     (yenta_search_res(socket, res, BRIDGE_IO_ACC)) ||
708                     (yenta_search_res(socket, res, BRIDGE_IO_MIN)))
709                         return 1;
710         } else {
711                 if (type & IORESOURCE_PREFETCH) {
712                         if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
713                             (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
714                             (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
715                                 return 1;
716                         /* Approximating prefetchable by non-prefetchable */
717                         res->flags = IORESOURCE_MEM;
718                 }
719                 if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
720                     (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
721                     (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
722                         return 1;
723         }
724
725         dev_printk(KERN_INFO, &dev->dev,
726                    "no resource of type %x available, trying to continue...\n",
727                    type);
728         res->start = res->end = res->flags = 0;
729         return 0;
730 }
731
732 /*
733  * Allocate the bridge mappings for the device..
734  */
735 static void yenta_allocate_resources(struct yenta_socket *socket)
736 {
737         int program = 0;
738         program += yenta_allocate_res(socket, 0, IORESOURCE_IO,
739                            PCI_CB_IO_BASE_0, PCI_CB_IO_LIMIT_0);
740         program += yenta_allocate_res(socket, 1, IORESOURCE_IO,
741                            PCI_CB_IO_BASE_1, PCI_CB_IO_LIMIT_1);
742         program += yenta_allocate_res(socket, 2, IORESOURCE_MEM|IORESOURCE_PREFETCH,
743                            PCI_CB_MEMORY_BASE_0, PCI_CB_MEMORY_LIMIT_0);
744         program += yenta_allocate_res(socket, 3, IORESOURCE_MEM,
745                            PCI_CB_MEMORY_BASE_1, PCI_CB_MEMORY_LIMIT_1);
746         if (program)
747                 pci_setup_cardbus(socket->dev->subordinate);
748 }
749
750
751 /*
752  * Free the bridge mappings for the device..
753  */
754 static void yenta_free_resources(struct yenta_socket *socket)
755 {
756         int i;
757         for (i = 0; i < 4; i++) {
758                 struct resource *res;
759                 res = socket->dev->resource + PCI_BRIDGE_RESOURCES + i;
760                 if (res->start != 0 && res->end != 0)
761                         release_resource(res);
762                 res->start = res->end = res->flags = 0;
763         }
764 }
765
766
767 /*
768  * Close it down - release our resources and go home..
769  */
770 static void __devexit yenta_close(struct pci_dev *dev)
771 {
772         struct yenta_socket *sock = pci_get_drvdata(dev);
773
774         /* Remove the register attributes */
775         device_remove_file(&dev->dev, &dev_attr_yenta_registers);
776
777         /* we don't want a dying socket registered */
778         pcmcia_unregister_socket(&sock->socket);
779
780         /* Disable all events so we don't die in an IRQ storm */
781         cb_writel(sock, CB_SOCKET_MASK, 0x0);
782         exca_writeb(sock, I365_CSCINT, 0);
783
784         if (sock->cb_irq)
785                 free_irq(sock->cb_irq, sock);
786         else
787                 del_timer_sync(&sock->poll_timer);
788
789         if (sock->base)
790                 iounmap(sock->base);
791         yenta_free_resources(sock);
792
793         pci_release_regions(dev);
794         pci_disable_device(dev);
795         pci_set_drvdata(dev, NULL);
796 }
797
798
799 static struct pccard_operations yenta_socket_operations = {
800         .init                   = yenta_sock_init,
801         .suspend                = yenta_sock_suspend,
802         .get_status             = yenta_get_status,
803         .set_socket             = yenta_set_socket,
804         .set_io_map             = yenta_set_io_map,
805         .set_mem_map            = yenta_set_mem_map,
806 };
807
808
809 #ifdef CONFIG_YENTA_TI
810 #include "ti113x.h"
811 #endif
812 #ifdef CONFIG_YENTA_RICOH
813 #include "ricoh.h"
814 #endif
815 #ifdef CONFIG_YENTA_TOSHIBA
816 #include "topic.h"
817 #endif
818 #ifdef CONFIG_YENTA_O2
819 #include "o2micro.h"
820 #endif
821
822 enum {
823         CARDBUS_TYPE_DEFAULT = -1,
824         CARDBUS_TYPE_TI,
825         CARDBUS_TYPE_TI113X,
826         CARDBUS_TYPE_TI12XX,
827         CARDBUS_TYPE_TI1250,
828         CARDBUS_TYPE_RICOH,
829         CARDBUS_TYPE_TOPIC95,
830         CARDBUS_TYPE_TOPIC97,
831         CARDBUS_TYPE_O2MICRO,
832         CARDBUS_TYPE_ENE,
833 };
834
835 /*
836  * Different cardbus controllers have slightly different
837  * initialization sequences etc details. List them here..
838  */
839 static struct cardbus_type cardbus_type[] = {
840 #ifdef CONFIG_YENTA_TI
841         [CARDBUS_TYPE_TI]       = {
842                 .override       = ti_override,
843                 .save_state     = ti_save_state,
844                 .restore_state  = ti_restore_state,
845                 .sock_init      = ti_init,
846         },
847         [CARDBUS_TYPE_TI113X]   = {
848                 .override       = ti113x_override,
849                 .save_state     = ti_save_state,
850                 .restore_state  = ti_restore_state,
851                 .sock_init      = ti_init,
852         },
853         [CARDBUS_TYPE_TI12XX]   = {
854                 .override       = ti12xx_override,
855                 .save_state     = ti_save_state,
856                 .restore_state  = ti_restore_state,
857                 .sock_init      = ti_init,
858         },
859         [CARDBUS_TYPE_TI1250]   = {
860                 .override       = ti1250_override,
861                 .save_state     = ti_save_state,
862                 .restore_state  = ti_restore_state,
863                 .sock_init      = ti_init,
864         },
865 #endif
866 #ifdef CONFIG_YENTA_RICOH
867         [CARDBUS_TYPE_RICOH]    = {
868                 .override       = ricoh_override,
869                 .save_state     = ricoh_save_state,
870                 .restore_state  = ricoh_restore_state,
871         },
872 #endif
873 #ifdef CONFIG_YENTA_TOSHIBA
874         [CARDBUS_TYPE_TOPIC95]  = {
875                 .override       = topic95_override,
876         },
877         [CARDBUS_TYPE_TOPIC97]  = {
878                 .override       = topic97_override,
879         },
880 #endif
881 #ifdef CONFIG_YENTA_O2
882         [CARDBUS_TYPE_O2MICRO]  = {
883                 .override       = o2micro_override,
884                 .restore_state  = o2micro_restore_state,
885         },
886 #endif
887 #ifdef CONFIG_YENTA_TI
888         [CARDBUS_TYPE_ENE]      = {
889                 .override       = ene_override,
890                 .save_state     = ti_save_state,
891                 .restore_state  = ti_restore_state,
892                 .sock_init      = ti_init,
893         },
894 #endif
895 };
896
897
898 /*
899  * Only probe "regular" interrupts, don't
900  * touch dangerous spots like the mouse irq,
901  * because there are mice that apparently
902  * get really confused if they get fondled
903  * too intimately.
904  *
905  * Default to 11, 10, 9, 7, 6, 5, 4, 3.
906  */
907 static u32 isa_interrupts = 0x0ef8;
908
909 static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask)
910 {
911         int i;
912         unsigned long val;
913         u32 mask;
914
915         /*
916          * Probe for usable interrupts using the force
917          * register to generate bogus card status events.
918          */
919         cb_writel(socket, CB_SOCKET_EVENT, -1);
920         cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
921         exca_writeb(socket, I365_CSCINT, 0);
922         val = probe_irq_on() & isa_irq_mask;
923         for (i = 1; i < 16; i++) {
924                 if (!((val >> i) & 1))
925                         continue;
926                 exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG | (i << 4));
927                 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
928                 udelay(100);
929                 cb_writel(socket, CB_SOCKET_EVENT, -1);
930         }
931         cb_writel(socket, CB_SOCKET_MASK, 0);
932         exca_writeb(socket, I365_CSCINT, 0);
933
934         mask = probe_irq_mask(val) & 0xffff;
935
936         return mask;
937 }
938
939
940 /*
941  * yenta PCI irq probing.
942  * currently only used in the TI/EnE initialization code
943  */
944 #ifdef CONFIG_YENTA_TI
945
946 /* interrupt handler, only used during probing */
947 static irqreturn_t yenta_probe_handler(int irq, void *dev_id)
948 {
949         struct yenta_socket *socket = (struct yenta_socket *) dev_id;
950         u8 csc;
951         u32 cb_event;
952
953         /* Clear interrupt status for the event */
954         cb_event = cb_readl(socket, CB_SOCKET_EVENT);
955         cb_writel(socket, CB_SOCKET_EVENT, -1);
956         csc = exca_readb(socket, I365_CSC);
957
958         if (cb_event || csc) {
959                 socket->probe_status = 1;
960                 return IRQ_HANDLED;
961         }
962
963         return IRQ_NONE;
964 }
965
966 /* probes the PCI interrupt, use only on override functions */
967 static int yenta_probe_cb_irq(struct yenta_socket *socket)
968 {
969         if (!socket->cb_irq)
970                 return -1;
971
972         socket->probe_status = 0;
973
974         if (request_irq(socket->cb_irq, yenta_probe_handler, IRQF_SHARED, "yenta", socket)) {
975                 dev_printk(KERN_WARNING, &socket->dev->dev,
976                            "request_irq() in yenta_probe_cb_irq() failed!\n");
977                 return -1;
978         }
979
980         /* generate interrupt, wait */
981         exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);
982         cb_writel(socket, CB_SOCKET_EVENT, -1);
983         cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
984         cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
985
986         msleep(100);
987
988         /* disable interrupts */
989         cb_writel(socket, CB_SOCKET_MASK, 0);
990         exca_writeb(socket, I365_CSCINT, 0);
991         cb_writel(socket, CB_SOCKET_EVENT, -1);
992         exca_readb(socket, I365_CSC);
993
994         free_irq(socket->cb_irq, socket);
995
996         return (int) socket->probe_status;
997 }
998
999 #endif /* CONFIG_YENTA_TI */
1000
1001
1002 /*
1003  * Set static data that doesn't need re-initializing..
1004  */
1005 static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_irq_mask)
1006 {
1007         socket->socket.pci_irq = socket->cb_irq;
1008         if (isa_probe)
1009                 socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask);
1010         else
1011                 socket->socket.irq_mask = 0;
1012
1013         dev_printk(KERN_INFO, &socket->dev->dev,
1014                    "ISA IRQ mask 0x%04x, PCI irq %d\n",
1015                    socket->socket.irq_mask, socket->cb_irq);
1016 }
1017
1018 /*
1019  * Initialize the standard cardbus registers
1020  */
1021 static void yenta_config_init(struct yenta_socket *socket)
1022 {
1023         u16 bridge;
1024         struct pci_dev *dev = socket->dev;
1025         struct pci_bus_region region;
1026
1027         pcibios_resource_to_bus(socket->dev, &region, &dev->resource[0]);
1028
1029         config_writel(socket, CB_LEGACY_MODE_BASE, 0);
1030         config_writel(socket, PCI_BASE_ADDRESS_0, region.start);
1031         config_writew(socket, PCI_COMMAND,
1032                         PCI_COMMAND_IO |
1033                         PCI_COMMAND_MEMORY |
1034                         PCI_COMMAND_MASTER |
1035                         PCI_COMMAND_WAIT);
1036
1037         /* MAGIC NUMBERS! Fixme */
1038         config_writeb(socket, PCI_CACHE_LINE_SIZE, L1_CACHE_BYTES / 4);
1039         config_writeb(socket, PCI_LATENCY_TIMER, 168);
1040         config_writel(socket, PCI_PRIMARY_BUS,
1041                 (176 << 24) |                      /* sec. latency timer */
1042                 (dev->subordinate->subordinate << 16) | /* subordinate bus */
1043                 (dev->subordinate->secondary << 8) |  /* secondary bus */
1044                 dev->subordinate->primary);                /* primary bus */
1045
1046         /*
1047          * Set up the bridging state:
1048          *  - enable write posting.
1049          *  - memory window 0 prefetchable, window 1 non-prefetchable
1050          *  - PCI interrupts enabled if a PCI interrupt exists..
1051          */
1052         bridge = config_readw(socket, CB_BRIDGE_CONTROL);
1053         bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
1054         bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN;
1055         config_writew(socket, CB_BRIDGE_CONTROL, bridge);
1056 }
1057
1058 /**
1059  * yenta_fixup_parent_bridge - Fix subordinate bus# of the parent bridge
1060  * @cardbus_bridge: The PCI bus which the CardBus bridge bridges to
1061  *
1062  * Checks if devices on the bus which the CardBus bridge bridges to would be
1063  * invisible during PCI scans because of a misconfigured subordinate number
1064  * of the parent brige - some BIOSes seem to be too lazy to set it right.
1065  * Does the fixup carefully by checking how far it can go without conflicts.
1066  * See http\://bugzilla.kernel.org/show_bug.cgi?id=2944 for more information.
1067  */
1068 static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
1069 {
1070         struct list_head *tmp;
1071         unsigned char upper_limit;
1072         /*
1073          * We only check and fix the parent bridge: All systems which need
1074          * this fixup that have been reviewed are laptops and the only bridge
1075          * which needed fixing was the parent bridge of the CardBus bridge:
1076          */
1077         struct pci_bus *bridge_to_fix = cardbus_bridge->parent;
1078
1079         /* Check bus numbers are already set up correctly: */
1080         if (bridge_to_fix->subordinate >= cardbus_bridge->subordinate)
1081                 return; /* The subordinate number is ok, nothing to do */
1082
1083         if (!bridge_to_fix->parent)
1084                 return; /* Root bridges are ok */
1085
1086         /* stay within the limits of the bus range of the parent: */
1087         upper_limit = bridge_to_fix->parent->subordinate;
1088
1089         /* check the bus ranges of all silbling bridges to prevent overlap */
1090         list_for_each(tmp, &bridge_to_fix->parent->children) {
1091                 struct pci_bus *silbling = pci_bus_b(tmp);
1092                 /*
1093                  * If the silbling has a higher secondary bus number
1094                  * and it's secondary is equal or smaller than our
1095                  * current upper limit, set the new upper limit to
1096                  * the bus number below the silbling's range:
1097                  */
1098                 if (silbling->secondary > bridge_to_fix->subordinate
1099                     && silbling->secondary <= upper_limit)
1100                         upper_limit = silbling->secondary - 1;
1101         }
1102
1103         /* Show that the wanted subordinate number is not possible: */
1104         if (cardbus_bridge->subordinate > upper_limit)
1105                 dev_printk(KERN_WARNING, &cardbus_bridge->dev,
1106                            "Upper limit for fixing this "
1107                            "bridge's parent bridge: #%02x\n", upper_limit);
1108
1109         /* If we have room to increase the bridge's subordinate number, */
1110         if (bridge_to_fix->subordinate < upper_limit) {
1111
1112                 /* use the highest number of the hidden bus, within limits */
1113                 unsigned char subordinate_to_assign =
1114                         min(cardbus_bridge->subordinate, upper_limit);
1115
1116                 dev_printk(KERN_INFO, &bridge_to_fix->dev,
1117                            "Raising subordinate bus# of parent "
1118                            "bus (#%02x) from #%02x to #%02x\n",
1119                            bridge_to_fix->number,
1120                            bridge_to_fix->subordinate, subordinate_to_assign);
1121
1122                 /* Save the new subordinate in the bus struct of the bridge */
1123                 bridge_to_fix->subordinate = subordinate_to_assign;
1124
1125                 /* and update the PCI config space with the new subordinate */
1126                 pci_write_config_byte(bridge_to_fix->self,
1127                         PCI_SUBORDINATE_BUS, bridge_to_fix->subordinate);
1128         }
1129 }
1130
1131 /*
1132  * Initialize a cardbus controller. Make sure we have a usable
1133  * interrupt, and that we can map the cardbus area. Fill in the
1134  * socket information structure..
1135  */
1136 static int __devinit yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
1137 {
1138         struct yenta_socket *socket;
1139         int ret;
1140
1141         /*
1142          * If we failed to assign proper bus numbers for this cardbus
1143          * controller during PCI probe, its subordinate pci_bus is NULL.
1144          * Bail out if so.
1145          */
1146         if (!dev->subordinate) {
1147                 dev_printk(KERN_ERR, &dev->dev, "no bus associated! "
1148                            "(try 'pci=assign-busses')\n");
1149                 return -ENODEV;
1150         }
1151
1152         socket = kzalloc(sizeof(struct yenta_socket), GFP_KERNEL);
1153         if (!socket)
1154                 return -ENOMEM;
1155
1156         /* prepare pcmcia_socket */
1157         socket->socket.ops = &yenta_socket_operations;
1158         socket->socket.resource_ops = &pccard_nonstatic_ops;
1159         socket->socket.dev.parent = &dev->dev;
1160         socket->socket.driver_data = socket;
1161         socket->socket.owner = THIS_MODULE;
1162         socket->socket.features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD;
1163         socket->socket.map_size = 0x1000;
1164         socket->socket.cb_dev = dev;
1165
1166         /* prepare struct yenta_socket */
1167         socket->dev = dev;
1168         pci_set_drvdata(dev, socket);
1169
1170         /*
1171          * Do some basic sanity checking..
1172          */
1173         if (pci_enable_device(dev)) {
1174                 ret = -EBUSY;
1175                 goto free;
1176         }
1177
1178         ret = pci_request_regions(dev, "yenta_socket");
1179         if (ret)
1180                 goto disable;
1181
1182         if (!pci_resource_start(dev, 0)) {
1183                 dev_printk(KERN_ERR, &dev->dev, "No cardbus resource!\n");
1184                 ret = -ENODEV;
1185                 goto release;
1186         }
1187
1188         /*
1189          * Ok, start setup.. Map the cardbus registers,
1190          * and request the IRQ.
1191          */
1192         socket->base = ioremap(pci_resource_start(dev, 0), 0x1000);
1193         if (!socket->base) {
1194                 ret = -ENOMEM;
1195                 goto release;
1196         }
1197
1198         /*
1199          * report the subsystem vendor and device for help debugging
1200          * the irq stuff...
1201          */
1202         dev_printk(KERN_INFO, &dev->dev, "CardBus bridge found [%04x:%04x]\n",
1203                    dev->subsystem_vendor, dev->subsystem_device);
1204
1205         yenta_config_init(socket);
1206
1207         /* Disable all events */
1208         cb_writel(socket, CB_SOCKET_MASK, 0x0);
1209
1210         /* Set up the bridge regions.. */
1211         yenta_allocate_resources(socket);
1212
1213         socket->cb_irq = dev->irq;
1214
1215         /* Do we have special options for the device? */
1216         if (id->driver_data != CARDBUS_TYPE_DEFAULT &&
1217             id->driver_data < ARRAY_SIZE(cardbus_type)) {
1218                 socket->type = &cardbus_type[id->driver_data];
1219
1220                 ret = socket->type->override(socket);
1221                 if (ret < 0)
1222                         goto unmap;
1223         }
1224
1225         /* We must finish initialization here */
1226
1227         if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
1228                 /* No IRQ or request_irq failed. Poll */
1229                 socket->cb_irq = 0; /* But zero is a valid IRQ number. */
1230                 init_timer(&socket->poll_timer);
1231                 socket->poll_timer.function = yenta_interrupt_wrapper;
1232                 socket->poll_timer.data = (unsigned long)socket;
1233                 socket->poll_timer.expires = jiffies + HZ;
1234                 add_timer(&socket->poll_timer);
1235                 dev_printk(KERN_INFO, &dev->dev,
1236                            "no PCI IRQ, CardBus support disabled for this "
1237                            "socket.\n");
1238                 dev_printk(KERN_INFO, &dev->dev,
1239                            "check your BIOS CardBus, BIOS IRQ or ACPI "
1240                            "settings.\n");
1241         } else {
1242                 socket->socket.features |= SS_CAP_CARDBUS;
1243         }
1244
1245         /* Figure out what the dang thing can do for the PCMCIA layer... */
1246         yenta_interrogate(socket);
1247         yenta_get_socket_capabilities(socket, isa_interrupts);
1248         dev_printk(KERN_INFO, &dev->dev,
1249                    "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));
1250
1251         yenta_fixup_parent_bridge(dev->subordinate);
1252
1253         /* Register it with the pcmcia layer.. */
1254         ret = pcmcia_register_socket(&socket->socket);
1255         if (ret == 0) {
1256                 /* Add the yenta register attributes */
1257                 ret = device_create_file(&dev->dev, &dev_attr_yenta_registers);
1258                 if (ret == 0)
1259                         goto out;
1260
1261                 /* error path... */
1262                 pcmcia_unregister_socket(&socket->socket);
1263         }
1264
1265  unmap:
1266         iounmap(socket->base);
1267  release:
1268         pci_release_regions(dev);
1269  disable:
1270         pci_disable_device(dev);
1271  free:
1272         kfree(socket);
1273  out:
1274         return ret;
1275 }
1276
1277 #ifdef CONFIG_PM
1278 static int yenta_dev_suspend_noirq(struct device *dev)
1279 {
1280         struct pci_dev *pdev = to_pci_dev(dev);
1281         struct yenta_socket *socket = pci_get_drvdata(pdev);
1282         int ret;
1283
1284         ret = pcmcia_socket_dev_suspend(dev);
1285
1286         if (!socket)
1287                 return ret;
1288
1289         if (socket->type && socket->type->save_state)
1290                 socket->type->save_state(socket);
1291
1292         pci_save_state(pdev);
1293         pci_read_config_dword(pdev, 16*4, &socket->saved_state[0]);
1294         pci_read_config_dword(pdev, 17*4, &socket->saved_state[1]);
1295         pci_disable_device(pdev);
1296
1297         /*
1298          * Some laptops (IBM T22) do not like us putting the Cardbus
1299          * bridge into D3.  At a guess, some other laptop will
1300          * probably require this, so leave it commented out for now.
1301          */
1302         /* pci_set_power_state(dev, 3); */
1303
1304         return ret;
1305 }
1306
1307 static int yenta_dev_resume_noirq(struct device *dev)
1308 {
1309         struct pci_dev *pdev = to_pci_dev(dev);
1310         struct yenta_socket *socket = pci_get_drvdata(pdev);
1311         int ret;
1312
1313         if (!socket)
1314                 return 0;
1315
1316         pci_write_config_dword(pdev, 16*4, socket->saved_state[0]);
1317         pci_write_config_dword(pdev, 17*4, socket->saved_state[1]);
1318
1319         ret = pci_enable_device(pdev);
1320         if (ret)
1321                 return ret;
1322
1323         pci_set_master(pdev);
1324
1325         if (socket->type && socket->type->restore_state)
1326                 socket->type->restore_state(socket);
1327
1328         pcmcia_socket_dev_early_resume(dev);
1329         return 0;
1330 }
1331
1332 static int yenta_dev_resume(struct device *dev)
1333 {
1334         pcmcia_socket_dev_late_resume(dev);
1335         return 0;
1336 }
1337
1338 static const struct dev_pm_ops yenta_pm_ops = {
1339         .suspend_noirq = yenta_dev_suspend_noirq,
1340         .resume_noirq = yenta_dev_resume_noirq,
1341         .resume = yenta_dev_resume,
1342         .freeze_noirq = yenta_dev_suspend_noirq,
1343         .thaw_noirq = yenta_dev_resume_noirq,
1344         .thaw = yenta_dev_resume,
1345         .poweroff_noirq = yenta_dev_suspend_noirq,
1346         .restore_noirq = yenta_dev_resume_noirq,
1347         .restore = yenta_dev_resume,
1348 };
1349
1350 #define YENTA_PM_OPS    (&yenta_pm_ops)
1351 #else
1352 #define YENTA_PM_OPS    NULL
1353 #endif
1354
1355 #define CB_ID(vend, dev, type)                          \
1356         {                                               \
1357                 .vendor         = vend,                 \
1358                 .device         = dev,                  \
1359                 .subvendor      = PCI_ANY_ID,           \
1360                 .subdevice      = PCI_ANY_ID,           \
1361                 .class          = PCI_CLASS_BRIDGE_CARDBUS << 8, \
1362                 .class_mask     = ~0,                   \
1363                 .driver_data    = CARDBUS_TYPE_##type,  \
1364         }
1365
1366 static struct pci_device_id yenta_table[] = {
1367         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1031, TI),
1368
1369         /*
1370          * TBD: Check if these TI variants can use more
1371          * advanced overrides instead.  (I can't get the
1372          * data sheets for these devices. --rmk)
1373          */
1374 #ifdef CONFIG_YENTA_TI
1375         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1210, TI),
1376
1377         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1130, TI113X),
1378         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1131, TI113X),
1379
1380         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1211, TI12XX),
1381         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1220, TI12XX),
1382         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1221, TI12XX),
1383         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1225, TI12XX),
1384         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1251A, TI12XX),
1385         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1251B, TI12XX),
1386         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1420, TI12XX),
1387         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1450, TI12XX),
1388         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1451A, TI12XX),
1389         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1510, TI12XX),
1390         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1520, TI12XX),
1391         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1620, TI12XX),
1392         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4410, TI12XX),
1393         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4450, TI12XX),
1394         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4451, TI12XX),
1395         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4510, TI12XX),
1396         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4520, TI12XX),
1397
1398         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250),
1399         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250),
1400
1401         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11, TI12XX),
1402         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X515, TI12XX),
1403         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX12, TI12XX),
1404         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X420, TI12XX),
1405         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X620, TI12XX),
1406         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7410, TI12XX),
1407         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7510, TI12XX),
1408         CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7610, TI12XX),
1409
1410         CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_710, TI12XX),
1411         CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_712, TI12XX),
1412         CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_720, TI12XX),
1413         CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_722, TI12XX),
1414         CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, ENE),
1415         CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, ENE),
1416         CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, ENE),
1417         CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1420, ENE),
1418 #endif /* CONFIG_YENTA_TI */
1419
1420 #ifdef CONFIG_YENTA_RICOH
1421         CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C465, RICOH),
1422         CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C466, RICOH),
1423         CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C475, RICOH),
1424         CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, RICOH),
1425         CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C478, RICOH),
1426 #endif
1427
1428 #ifdef CONFIG_YENTA_TOSHIBA
1429         CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC95, TOPIC95),
1430         CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC97, TOPIC97),
1431         CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC100, TOPIC97),
1432 #endif
1433
1434 #ifdef CONFIG_YENTA_O2
1435         CB_ID(PCI_VENDOR_ID_O2, PCI_ANY_ID, O2MICRO),
1436 #endif
1437
1438         /* match any cardbus bridge */
1439         CB_ID(PCI_ANY_ID, PCI_ANY_ID, DEFAULT),
1440         { /* all zeroes */ }
1441 };
1442 MODULE_DEVICE_TABLE(pci, yenta_table);
1443
1444
1445 static struct pci_driver yenta_cardbus_driver = {
1446         .name           = "yenta_cardbus",
1447         .id_table       = yenta_table,
1448         .probe          = yenta_probe,
1449         .remove         = __devexit_p(yenta_close),
1450         .driver.pm      = YENTA_PM_OPS,
1451 };
1452
1453
1454 static int __init yenta_socket_init(void)
1455 {
1456         return pci_register_driver(&yenta_cardbus_driver);
1457 }
1458
1459
1460 static void __exit yenta_socket_exit(void)
1461 {
1462         pci_unregister_driver(&yenta_cardbus_driver);
1463 }
1464
1465
1466 module_init(yenta_socket_init);
1467 module_exit(yenta_socket_exit);
1468
1469 MODULE_LICENSE("GPL");