0c7dc5b3875762b726574b1c2527d2954b752e29
[safe/jmp/linux-2.6] / drivers / pcmcia / ds.c
1 /*
2  * ds.c -- 16-bit PCMCIA core support
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * The initial developer of the original code is David A. Hinds
9  * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
10  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
11  *
12  * (C) 1999             David A. Hinds
13  * (C) 2003 - 2004      Dominik Brodowski
14  */
15
16 #include <linux/config.h>
17 #include <linux/module.h>
18 #include <linux/moduleparam.h>
19 #include <linux/init.h>
20 #include <linux/kernel.h>
21 #include <linux/major.h>
22 #include <linux/string.h>
23 #include <linux/errno.h>
24 #include <linux/slab.h>
25 #include <linux/mm.h>
26 #include <linux/fcntl.h>
27 #include <linux/sched.h>
28 #include <linux/smp_lock.h>
29 #include <linux/timer.h>
30 #include <linux/ioctl.h>
31 #include <linux/proc_fs.h>
32 #include <linux/poll.h>
33 #include <linux/pci.h>
34 #include <linux/list.h>
35 #include <linux/delay.h>
36 #include <linux/kref.h>
37 #include <linux/workqueue.h>
38 #include <linux/crc32.h>
39 #include <linux/firmware.h>
40
41 #include <asm/atomic.h>
42
43 #define IN_CARD_SERVICES
44 #include <pcmcia/version.h>
45 #include <pcmcia/cs_types.h>
46 #include <pcmcia/cs.h>
47 #include <pcmcia/bulkmem.h>
48 #include <pcmcia/cistpl.h>
49 #include <pcmcia/ds.h>
50 #include <pcmcia/ss.h>
51
52 #include "cs_internal.h"
53
54 /*====================================================================*/
55
56 /* Module parameters */
57
58 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
59 MODULE_DESCRIPTION("PCMCIA Driver Services");
60 MODULE_LICENSE("GPL");
61
62 #ifdef DEBUG
63 static int ds_pc_debug;
64
65 module_param_named(pc_debug, ds_pc_debug, int, 0644);
66
67 #define ds_dbg(lvl, fmt, arg...) do {                           \
68         if (ds_pc_debug > (lvl))                                        \
69                 printk(KERN_DEBUG "ds: " fmt , ## arg);         \
70 } while (0)
71 #else
72 #define ds_dbg(lvl, fmt, arg...) do { } while (0)
73 #endif
74
75 /*====================================================================*/
76
77 /* Device user information */
78 #define MAX_EVENTS      32
79 #define USER_MAGIC      0x7ea4
80 #define CHECK_USER(u) \
81     (((u) == NULL) || ((u)->user_magic != USER_MAGIC))
82 typedef struct user_info_t {
83     u_int               user_magic;
84     int                 event_head, event_tail;
85     event_t             event[MAX_EVENTS];
86     struct user_info_t  *next;
87     struct pcmcia_bus_socket *socket;
88 } user_info_t;
89
90 /* Socket state information */
91 struct pcmcia_bus_socket {
92         struct kref             refcount;
93         struct pcmcia_callback  callback;
94         int                     state;
95         user_info_t             *user;
96         wait_queue_head_t       queue;
97         struct pcmcia_socket    *parent;
98
99         /* the PCMCIA devices connected to this socket (normally one, more
100          * for multifunction devices: */
101         struct list_head        devices_list;
102         u8                      device_count; /* the number of devices, used
103                                                * only internally and subject
104                                                * to incorrectness and change */
105
106         u8                      device_add_pending;
107         struct work_struct      device_add;
108 };
109 static spinlock_t pcmcia_dev_list_lock;
110
111 static struct bus_type pcmcia_bus_type;
112
113 #define DS_SOCKET_PRESENT               0x01
114 #define DS_SOCKET_BUSY                  0x02
115 #define DS_SOCKET_REMOVAL_PENDING       0x10
116 #define DS_SOCKET_DEAD                  0x80
117
118 /*====================================================================*/
119 #ifdef CONFIG_PCMCIA_IOCTL
120
121 static int major_dev = -1;
122 static struct pcmcia_bus_socket * get_socket_info_by_nr(unsigned int nr);
123 static struct pcmcia_driver * get_pcmcia_driver (dev_info_t *dev_info);
124
125 #endif
126
127 static int unbind_request(struct pcmcia_bus_socket *s);
128
129 /*====================================================================*/
130
131 /* code which was in cs.c before */
132
133 /* String tables for error messages */
134
135 typedef struct lookup_t {
136     int key;
137     char *msg;
138 } lookup_t;
139
140 static const lookup_t error_table[] = {
141     { CS_SUCCESS,               "Operation succeeded" },
142     { CS_BAD_ADAPTER,           "Bad adapter" },
143     { CS_BAD_ATTRIBUTE,         "Bad attribute", },
144     { CS_BAD_BASE,              "Bad base address" },
145     { CS_BAD_EDC,               "Bad EDC" },
146     { CS_BAD_IRQ,               "Bad IRQ" },
147     { CS_BAD_OFFSET,            "Bad offset" },
148     { CS_BAD_PAGE,              "Bad page number" },
149     { CS_READ_FAILURE,          "Read failure" },
150     { CS_BAD_SIZE,              "Bad size" },
151     { CS_BAD_SOCKET,            "Bad socket" },
152     { CS_BAD_TYPE,              "Bad type" },
153     { CS_BAD_VCC,               "Bad Vcc" },
154     { CS_BAD_VPP,               "Bad Vpp" },
155     { CS_BAD_WINDOW,            "Bad window" },
156     { CS_WRITE_FAILURE,         "Write failure" },
157     { CS_NO_CARD,               "No card present" },
158     { CS_UNSUPPORTED_FUNCTION,  "Usupported function" },
159     { CS_UNSUPPORTED_MODE,      "Unsupported mode" },
160     { CS_BAD_SPEED,             "Bad speed" },
161     { CS_BUSY,                  "Resource busy" },
162     { CS_GENERAL_FAILURE,       "General failure" },
163     { CS_WRITE_PROTECTED,       "Write protected" },
164     { CS_BAD_ARG_LENGTH,        "Bad argument length" },
165     { CS_BAD_ARGS,              "Bad arguments" },
166     { CS_CONFIGURATION_LOCKED,  "Configuration locked" },
167     { CS_IN_USE,                "Resource in use" },
168     { CS_NO_MORE_ITEMS,         "No more items" },
169     { CS_OUT_OF_RESOURCE,       "Out of resource" },
170     { CS_BAD_HANDLE,            "Bad handle" },
171     { CS_BAD_TUPLE,             "Bad CIS tuple" }
172 };
173
174
175 static const lookup_t service_table[] = {
176     { AccessConfigurationRegister,      "AccessConfigurationRegister" },
177     { AddSocketServices,                "AddSocketServices" },
178     { AdjustResourceInfo,               "AdjustResourceInfo" },
179     { CheckEraseQueue,                  "CheckEraseQueue" },
180     { CloseMemory,                      "CloseMemory" },
181     { DeregisterClient,                 "DeregisterClient" },
182     { DeregisterEraseQueue,             "DeregisterEraseQueue" },
183     { GetCardServicesInfo,              "GetCardServicesInfo" },
184     { GetClientInfo,                    "GetClientInfo" },
185     { GetConfigurationInfo,             "GetConfigurationInfo" },
186     { GetEventMask,                     "GetEventMask" },
187     { GetFirstClient,                   "GetFirstClient" },
188     { GetFirstRegion,                   "GetFirstRegion" },
189     { GetFirstTuple,                    "GetFirstTuple" },
190     { GetNextClient,                    "GetNextClient" },
191     { GetNextRegion,                    "GetNextRegion" },
192     { GetNextTuple,                     "GetNextTuple" },
193     { GetStatus,                        "GetStatus" },
194     { GetTupleData,                     "GetTupleData" },
195     { MapMemPage,                       "MapMemPage" },
196     { ModifyConfiguration,              "ModifyConfiguration" },
197     { ModifyWindow,                     "ModifyWindow" },
198     { OpenMemory,                       "OpenMemory" },
199     { ParseTuple,                       "ParseTuple" },
200     { ReadMemory,                       "ReadMemory" },
201     { RegisterClient,                   "RegisterClient" },
202     { RegisterEraseQueue,               "RegisterEraseQueue" },
203     { RegisterMTD,                      "RegisterMTD" },
204     { ReleaseConfiguration,             "ReleaseConfiguration" },
205     { ReleaseIO,                        "ReleaseIO" },
206     { ReleaseIRQ,                       "ReleaseIRQ" },
207     { ReleaseWindow,                    "ReleaseWindow" },
208     { RequestConfiguration,             "RequestConfiguration" },
209     { RequestIO,                        "RequestIO" },
210     { RequestIRQ,                       "RequestIRQ" },
211     { RequestSocketMask,                "RequestSocketMask" },
212     { RequestWindow,                    "RequestWindow" },
213     { ResetCard,                        "ResetCard" },
214     { SetEventMask,                     "SetEventMask" },
215     { ValidateCIS,                      "ValidateCIS" },
216     { WriteMemory,                      "WriteMemory" },
217     { BindDevice,                       "BindDevice" },
218     { BindMTD,                          "BindMTD" },
219     { ReportError,                      "ReportError" },
220     { SuspendCard,                      "SuspendCard" },
221     { ResumeCard,                       "ResumeCard" },
222     { EjectCard,                        "EjectCard" },
223     { InsertCard,                       "InsertCard" },
224     { ReplaceCIS,                       "ReplaceCIS" }
225 };
226
227
228 static int pcmcia_report_error(client_handle_t handle, error_info_t *err)
229 {
230         int i;
231         char *serv;
232
233         if (CHECK_HANDLE(handle))
234                 printk(KERN_NOTICE);
235         else {
236                 struct pcmcia_device *p_dev = handle_to_pdev(handle);
237                 printk(KERN_NOTICE "%s: ", p_dev->dev.bus_id);
238         }
239
240         for (i = 0; i < ARRAY_SIZE(service_table); i++)
241                 if (service_table[i].key == err->func)
242                         break;
243         if (i < ARRAY_SIZE(service_table))
244                 serv = service_table[i].msg;
245         else
246                 serv = "Unknown service number";
247
248         for (i = 0; i < ARRAY_SIZE(error_table); i++)
249                 if (error_table[i].key == err->retcode)
250                         break;
251         if (i < ARRAY_SIZE(error_table))
252                 printk("%s: %s\n", serv, error_table[i].msg);
253         else
254                 printk("%s: Unknown error code %#x\n", serv, err->retcode);
255
256         return CS_SUCCESS;
257 } /* report_error */
258
259 /* end of code which was in cs.c before */
260
261 /*======================================================================*/
262
263 void cs_error(client_handle_t handle, int func, int ret)
264 {
265         error_info_t err = { func, ret };
266         pcmcia_report_error(handle, &err);
267 }
268 EXPORT_SYMBOL(cs_error);
269
270
271 static void pcmcia_check_driver(struct pcmcia_driver *p_drv)
272 {
273         struct pcmcia_device_id *did = p_drv->id_table;
274         unsigned int i;
275         u32 hash;
276
277         while (did && did->match_flags) {
278                 for (i=0; i<4; i++) {
279                         if (!did->prod_id[i])
280                                 continue;
281
282                         hash = crc32(0, did->prod_id[i], strlen(did->prod_id[i]));
283                         if (hash == did->prod_id_hash[i])
284                                 continue;
285
286                         printk(KERN_DEBUG "pcmcia: %s: invalid hash for "
287                                "product string \"%s\": is 0x%x, should "
288                                "be 0x%x\n", p_drv->drv.name, did->prod_id[i],
289                                did->prod_id_hash[i], hash);
290                         printk(KERN_DEBUG "pcmcia: see "
291                                 "Documentation/pcmcia/devicetable.txt for "
292                                 "details\n");
293                 }
294                 did++;
295         }
296
297         return;
298 }
299
300
301 #ifdef CONFIG_PCMCIA_LOAD_CIS
302
303 /**
304  * pcmcia_load_firmware - load CIS from userspace if device-provided is broken
305  * @dev - the pcmcia device which needs a CIS override
306  * @filename - requested filename in /lib/firmware/cis/
307  *
308  * This uses the in-kernel firmware loading mechanism to use a "fake CIS" if
309  * the one provided by the card is broken. The firmware files reside in
310  * /lib/firmware/cis/ in userspace.
311  */
312 static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename)
313 {
314         struct pcmcia_socket *s = dev->socket;
315         const struct firmware *fw;
316         char path[20];
317         int ret=-ENOMEM;
318         cisdump_t *cis;
319
320         if (!filename)
321                 return -EINVAL;
322
323         ds_dbg(1, "trying to load firmware %s\n", filename);
324
325         if (strlen(filename) > 14)
326                 return -EINVAL;
327
328         snprintf(path, 20, "%s", filename);
329
330         if (request_firmware(&fw, path, &dev->dev) == 0) {
331                 if (fw->size >= CISTPL_MAX_CIS_SIZE)
332                         goto release;
333
334                 cis = kmalloc(sizeof(cisdump_t), GFP_KERNEL);
335                 if (!cis)
336                         goto release;
337
338                 memset(cis, 0, sizeof(cisdump_t));
339
340                 cis->Length = fw->size + 1;
341                 memcpy(cis->Data, fw->data, fw->size);
342
343                 if (!pcmcia_replace_cis(s, cis))
344                         ret = 0;
345         }
346  release:
347         release_firmware(fw);
348
349         return (ret);
350 }
351
352 #else /* !CONFIG_PCMCIA_LOAD_CIS */
353
354 static inline int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename)
355 {
356         return -ENODEV;
357 }
358
359 #endif
360
361
362 /*======================================================================*/
363
364
365 static void pcmcia_release_bus_socket(struct kref *refcount)
366 {
367         struct pcmcia_bus_socket *s = container_of(refcount, struct pcmcia_bus_socket, refcount);
368         pcmcia_put_socket(s->parent);
369         kfree(s);
370 }
371
372 static void pcmcia_put_bus_socket(struct pcmcia_bus_socket *s)
373 {
374         kref_put(&s->refcount, pcmcia_release_bus_socket);
375 }
376
377 static struct pcmcia_bus_socket *pcmcia_get_bus_socket(struct pcmcia_bus_socket *s)
378 {
379         kref_get(&s->refcount);
380         return (s);
381 }
382
383 /**
384  * pcmcia_register_driver - register a PCMCIA driver with the bus core
385  *
386  * Registers a PCMCIA driver with the PCMCIA bus core.
387  */
388 static int pcmcia_device_probe(struct device *dev);
389 static int pcmcia_device_remove(struct device * dev);
390
391 int pcmcia_register_driver(struct pcmcia_driver *driver)
392 {
393         if (!driver)
394                 return -EINVAL;
395
396         pcmcia_check_driver(driver);
397
398         /* initialize common fields */
399         driver->drv.bus = &pcmcia_bus_type;
400         driver->drv.owner = driver->owner;
401         driver->drv.probe = pcmcia_device_probe;
402         driver->drv.remove = pcmcia_device_remove;
403
404         return driver_register(&driver->drv);
405 }
406 EXPORT_SYMBOL(pcmcia_register_driver);
407
408 /**
409  * pcmcia_unregister_driver - unregister a PCMCIA driver with the bus core
410  */
411 void pcmcia_unregister_driver(struct pcmcia_driver *driver)
412 {
413         driver_unregister(&driver->drv);
414 }
415 EXPORT_SYMBOL(pcmcia_unregister_driver);
416
417 #ifdef CONFIG_PCMCIA_IOCTL
418 #ifdef CONFIG_PROC_FS
419 static struct proc_dir_entry *proc_pccard = NULL;
420
421 static int proc_read_drivers_callback(struct device_driver *driver, void *d)
422 {
423         char **p = d;
424         struct pcmcia_driver *p_drv = container_of(driver,
425                                                    struct pcmcia_driver, drv);
426
427         *p += sprintf(*p, "%-24.24s 1 %d\n", p_drv->drv.name,
428 #ifdef CONFIG_MODULE_UNLOAD
429                       (p_drv->owner) ? module_refcount(p_drv->owner) : 1
430 #else
431                       1
432 #endif
433         );
434         d = (void *) p;
435
436         return 0;
437 }
438
439 static int proc_read_drivers(char *buf, char **start, off_t pos,
440                              int count, int *eof, void *data)
441 {
442         char *p = buf;
443
444         bus_for_each_drv(&pcmcia_bus_type, NULL, 
445                          (void *) &p, proc_read_drivers_callback);
446
447         return (p - buf);
448 }
449 #endif
450 #endif
451
452 /* pcmcia_device handling */
453
454 static struct pcmcia_device * pcmcia_get_dev(struct pcmcia_device *p_dev)
455 {
456         struct device *tmp_dev;
457         tmp_dev = get_device(&p_dev->dev);
458         if (!tmp_dev)
459                 return NULL;
460         return to_pcmcia_dev(tmp_dev);
461 }
462
463 static void pcmcia_put_dev(struct pcmcia_device *p_dev)
464 {
465         if (p_dev)
466                 put_device(&p_dev->dev);
467 }
468
469 static void pcmcia_release_dev(struct device *dev)
470 {
471         struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
472         ds_dbg(1, "releasing dev %p\n", p_dev);
473         pcmcia_put_bus_socket(p_dev->socket->pcmcia);
474         kfree(p_dev);
475 }
476
477
478 static int pcmcia_device_probe(struct device * dev)
479 {
480         struct pcmcia_device *p_dev;
481         struct pcmcia_driver *p_drv;
482         int ret = 0;
483
484         dev = get_device(dev);
485         if (!dev)
486                 return -ENODEV;
487
488         p_dev = to_pcmcia_dev(dev);
489         p_drv = to_pcmcia_drv(dev->driver);
490
491         if (!try_module_get(p_drv->owner)) {
492                 ret = -EINVAL;
493                 goto put_dev;
494         }
495
496         if (p_drv->attach) {
497                 p_dev->instance = p_drv->attach();
498                 if ((!p_dev->instance) || (p_dev->client.state & CLIENT_UNBOUND)) {
499                         printk(KERN_NOTICE "ds: unable to create instance "
500                                "of '%s'!\n", p_drv->drv.name);
501                         ret = -EINVAL;
502                 }
503         }
504
505         if (ret)
506                 module_put(p_drv->owner);
507  put_dev:
508         if ((ret) || !(p_drv->attach))
509                 put_device(dev);
510         return (ret);
511 }
512
513
514 static int pcmcia_device_remove(struct device * dev)
515 {
516         struct pcmcia_device *p_dev;
517         struct pcmcia_driver *p_drv;
518
519         /* detach the "instance" */
520         p_dev = to_pcmcia_dev(dev);
521         p_drv = to_pcmcia_drv(dev->driver);
522
523         if (p_drv) {
524                 if ((p_drv->detach) && (p_dev->instance)) {
525                         p_drv->detach(p_dev->instance);
526                         /* from pcmcia_probe_device */
527                         put_device(&p_dev->dev);
528                 }
529                 module_put(p_drv->owner);
530         }
531
532         return 0;
533 }
534
535
536
537 /*
538  * pcmcia_device_query -- determine information about a pcmcia device
539  */
540 static int pcmcia_device_query(struct pcmcia_device *p_dev)
541 {
542         cistpl_manfid_t manf_id;
543         cistpl_funcid_t func_id;
544         cistpl_vers_1_t vers1;
545         unsigned int i;
546
547         if (!pccard_read_tuple(p_dev->socket, p_dev->func,
548                                CISTPL_MANFID, &manf_id)) {
549                 p_dev->manf_id = manf_id.manf;
550                 p_dev->card_id = manf_id.card;
551                 p_dev->has_manf_id = 1;
552                 p_dev->has_card_id = 1;
553         }
554
555         if (!pccard_read_tuple(p_dev->socket, p_dev->func,
556                                CISTPL_FUNCID, &func_id)) {
557                 p_dev->func_id = func_id.func;
558                 p_dev->has_func_id = 1;
559         } else {
560                 /* rule of thumb: cards with no FUNCID, but with
561                  * common memory device geometry information, are
562                  * probably memory cards (from pcmcia-cs) */
563                 cistpl_device_geo_t devgeo;
564                 if (!pccard_read_tuple(p_dev->socket, p_dev->func,
565                                       CISTPL_DEVICE_GEO, &devgeo)) {
566                         ds_dbg(0, "mem device geometry probably means "
567                                "FUNCID_MEMORY\n");
568                         p_dev->func_id = CISTPL_FUNCID_MEMORY;
569                         p_dev->has_func_id = 1;
570                 }
571         }
572
573         if (!pccard_read_tuple(p_dev->socket, p_dev->func, CISTPL_VERS_1,
574                                &vers1)) {
575                 for (i=0; i < vers1.ns; i++) {
576                         char *tmp;
577                         unsigned int length;
578
579                         tmp = vers1.str + vers1.ofs[i];
580
581                         length = strlen(tmp) + 1;
582                         if ((length < 3) || (length > 255))
583                                 continue;
584
585                         p_dev->prod_id[i] = kmalloc(sizeof(char) * length,
586                                                     GFP_KERNEL);
587                         if (!p_dev->prod_id[i])
588                                 continue;
589
590                         p_dev->prod_id[i] = strncpy(p_dev->prod_id[i],
591                                                     tmp, length);
592                 }
593         }
594
595         return 0;
596 }
597
598
599 /* device_add_lock is needed to avoid double registration by cardmgr and kernel.
600  * Serializes pcmcia_device_add; will most likely be removed in future.
601  *
602  * While it has the caveat that adding new PCMCIA devices inside(!) device_register()
603  * won't work, this doesn't matter much at the moment: the driver core doesn't
604  * support it either.
605  */
606 static DECLARE_MUTEX(device_add_lock);
607
608 static struct pcmcia_device * pcmcia_device_add(struct pcmcia_bus_socket *s, unsigned int function)
609 {
610         struct pcmcia_device *p_dev;
611         unsigned long flags;
612
613         s = pcmcia_get_bus_socket(s);
614         if (!s)
615                 return NULL;
616
617         down(&device_add_lock);
618
619         /* max of 2 devices per card */
620         if (s->device_count == 2)
621                 goto err_put;
622
623         p_dev = kmalloc(sizeof(struct pcmcia_device), GFP_KERNEL);
624         if (!p_dev)
625                 goto err_put;
626         memset(p_dev, 0, sizeof(struct pcmcia_device));
627
628         p_dev->socket = s->parent;
629         p_dev->device_no = (s->device_count++);
630         p_dev->func   = function;
631
632         p_dev->dev.bus = &pcmcia_bus_type;
633         p_dev->dev.parent = s->parent->dev.dev;
634         p_dev->dev.release = pcmcia_release_dev;
635         sprintf (p_dev->dev.bus_id, "%d.%d", p_dev->socket->sock, p_dev->device_no);
636
637         /* compat */
638         p_dev->client.client_magic = CLIENT_MAGIC;
639         p_dev->client.Socket = s->parent;
640         p_dev->client.Function = function;
641         p_dev->client.state = CLIENT_UNBOUND;
642
643         /* Add to the list in pcmcia_bus_socket */
644         spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
645         list_add_tail(&p_dev->socket_device_list, &s->devices_list);
646         spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
647
648         pcmcia_device_query(p_dev);
649
650         if (device_register(&p_dev->dev)) {
651                 spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
652                 list_del(&p_dev->socket_device_list);
653                 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
654
655                 goto err_free;
656        }
657
658         up(&device_add_lock);
659
660         return p_dev;
661
662  err_free:
663         kfree(p_dev);
664         s->device_count--;
665  err_put:
666         up(&device_add_lock);
667         pcmcia_put_bus_socket(s);
668
669         return NULL;
670 }
671
672
673 static int pcmcia_card_add(struct pcmcia_socket *s)
674 {
675         cisinfo_t cisinfo;
676         cistpl_longlink_mfc_t mfc;
677         unsigned int no_funcs, i;
678         int ret = 0;
679
680         if (!(s->resource_setup_done))
681                 return -EAGAIN; /* try again, but later... */
682
683         pcmcia_validate_mem(s);
684         ret = pccard_validate_cis(s, BIND_FN_ALL, &cisinfo);
685         if (ret || !cisinfo.Chains) {
686                 ds_dbg(0, "invalid CIS or invalid resources\n");
687                 return -ENODEV;
688         }
689
690         if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC, &mfc))
691                 no_funcs = mfc.nfn;
692         else
693                 no_funcs = 1;
694
695         /* this doesn't handle multifunction devices on one pcmcia function
696          * yet. */
697         for (i=0; i < no_funcs; i++)
698                 pcmcia_device_add(s->pcmcia, i);
699
700         return (ret);
701 }
702
703
704 static void pcmcia_delayed_add_pseudo_device(void *data)
705 {
706         struct pcmcia_bus_socket *s = data;
707         pcmcia_device_add(s, 0);
708         s->device_add_pending = 0;
709 }
710
711 static inline void pcmcia_add_pseudo_device(struct pcmcia_bus_socket *s)
712 {
713         if (!s->device_add_pending) {
714                 schedule_work(&s->device_add);
715                 s->device_add_pending = 1;
716         }
717         return;
718 }
719
720 static int pcmcia_requery(struct device *dev, void * _data)
721 {
722         struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
723         if (!p_dev->dev.driver)
724                 pcmcia_device_query(p_dev);
725
726         return 0;
727 }
728
729 static void pcmcia_bus_rescan(struct pcmcia_socket *skt)
730 {
731         int no_devices=0;
732         unsigned long flags;
733
734         /* must be called with skt_sem held */
735         spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
736         if (list_empty(&skt->pcmcia->devices_list))
737                 no_devices=1;
738         spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
739
740         /* if no devices were added for this socket yet because of
741          * missing resource information or other trouble, we need to
742          * do this now. */
743         if (no_devices) {
744                 int ret = pcmcia_card_add(skt);
745                 if (ret)
746                         return;
747         }
748
749         /* some device information might have changed because of a CIS
750          * update or because we can finally read it correctly... so
751          * determine it again, overwriting old values if necessary. */
752         bus_for_each_dev(&pcmcia_bus_type, NULL, NULL, pcmcia_requery);
753
754         /* we re-scan all devices, not just the ones connected to this
755          * socket. This does not matter, though. */
756         bus_rescan_devices(&pcmcia_bus_type);
757 }
758
759 static inline int pcmcia_devmatch(struct pcmcia_device *dev,
760                                   struct pcmcia_device_id *did)
761 {
762         if (did->match_flags & PCMCIA_DEV_ID_MATCH_MANF_ID) {
763                 if ((!dev->has_manf_id) || (dev->manf_id != did->manf_id))
764                         return 0;
765         }
766
767         if (did->match_flags & PCMCIA_DEV_ID_MATCH_CARD_ID) {
768                 if ((!dev->has_card_id) || (dev->card_id != did->card_id))
769                         return 0;
770         }
771
772         if (did->match_flags & PCMCIA_DEV_ID_MATCH_FUNCTION) {
773                 if (dev->func != did->function)
774                         return 0;
775         }
776
777         if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID1) {
778                 if (!dev->prod_id[0])
779                         return 0;
780                 if (strcmp(did->prod_id[0], dev->prod_id[0]))
781                         return 0;
782         }
783
784         if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID2) {
785                 if (!dev->prod_id[1])
786                         return 0;
787                 if (strcmp(did->prod_id[1], dev->prod_id[1]))
788                         return 0;
789         }
790
791         if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID3) {
792                 if (!dev->prod_id[2])
793                         return 0;
794                 if (strcmp(did->prod_id[2], dev->prod_id[2]))
795                         return 0;
796         }
797
798         if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID4) {
799                 if (!dev->prod_id[3])
800                         return 0;
801                 if (strcmp(did->prod_id[3], dev->prod_id[3]))
802                         return 0;
803         }
804
805         if (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) {
806                 /* handle pseudo multifunction devices:
807                  * there are at most two pseudo multifunction devices.
808                  * if we're matching against the first, schedule a
809                  * call which will then check whether there are two
810                  * pseudo devices, and if not, add the second one.
811                  */
812                 if (dev->device_no == 0)
813                         pcmcia_add_pseudo_device(dev->socket->pcmcia);
814
815                 if (dev->device_no != did->device_no)
816                         return 0;
817         }
818
819         if (did->match_flags & PCMCIA_DEV_ID_MATCH_FUNC_ID) {
820                 if ((!dev->has_func_id) || (dev->func_id != did->func_id))
821                         return 0;
822
823                 /* if this is a pseudo-multi-function device,
824                  * we need explicit matches */
825                 if (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO)
826                         return 0;
827                 if (dev->device_no)
828                         return 0;
829
830                 /* also, FUNC_ID matching needs to be activated by userspace
831                  * after it has re-checked that there is no possible module
832                  * with a prod_id/manf_id/card_id match.
833                  */
834                 if (!dev->allow_func_id_match)
835                         return 0;
836         }
837
838         if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) {
839                 if (!dev->socket->fake_cis)
840                         pcmcia_load_firmware(dev, did->cisfile);
841
842                 if (!dev->socket->fake_cis)
843                         return 0;
844         }
845
846         if (did->match_flags & PCMCIA_DEV_ID_MATCH_ANONYMOUS) {
847                 int i;
848                 for (i=0; i<4; i++)
849                         if (dev->prod_id[i])
850                                 return 0;
851                 if (dev->has_manf_id || dev->has_card_id || dev->has_func_id)
852                         return 0;
853         }
854
855         dev->dev.driver_data = (void *) did;
856
857         return 1;
858 }
859
860
861 static int pcmcia_bus_match(struct device * dev, struct device_driver * drv) {
862         struct pcmcia_device * p_dev = to_pcmcia_dev(dev);
863         struct pcmcia_driver * p_drv = to_pcmcia_drv(drv);
864         struct pcmcia_device_id *did = p_drv->id_table;
865
866         /* matching by cardmgr */
867         if (p_dev->cardmgr == p_drv)
868                 return 1;
869
870         while (did && did->match_flags) {
871                 if (pcmcia_devmatch(p_dev, did))
872                         return 1;
873                 did++;
874         }
875
876         return 0;
877 }
878
879 #ifdef CONFIG_HOTPLUG
880
881 static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
882                               char *buffer, int buffer_size)
883 {
884         struct pcmcia_device *p_dev;
885         int i, length = 0;
886         u32 hash[4] = { 0, 0, 0, 0};
887
888         if (!dev)
889                 return -ENODEV;
890
891         p_dev = to_pcmcia_dev(dev);
892
893         /* calculate hashes */
894         for (i=0; i<4; i++) {
895                 if (!p_dev->prod_id[i])
896                         continue;
897                 hash[i] = crc32(0, p_dev->prod_id[i], strlen(p_dev->prod_id[i]));
898         }
899
900         i = 0;
901
902         if (add_hotplug_env_var(envp, num_envp, &i,
903                                 buffer, buffer_size, &length,
904                                 "SOCKET_NO=%u",
905                                 p_dev->socket->sock))
906                 return -ENOMEM;
907
908         if (add_hotplug_env_var(envp, num_envp, &i,
909                                 buffer, buffer_size, &length,
910                                 "DEVICE_NO=%02X",
911                                 p_dev->device_no))
912                 return -ENOMEM;
913
914         if (add_hotplug_env_var(envp, num_envp, &i,
915                                 buffer, buffer_size, &length,
916                                 "MODALIAS=pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02X"
917                                 "pa%08Xpb%08Xpc%08Xpd%08X",
918                                 p_dev->has_manf_id ? p_dev->manf_id : 0,
919                                 p_dev->has_card_id ? p_dev->card_id : 0,
920                                 p_dev->has_func_id ? p_dev->func_id : 0,
921                                 p_dev->func,
922                                 p_dev->device_no,
923                                 hash[0],
924                                 hash[1],
925                                 hash[2],
926                                 hash[3]))
927                 return -ENOMEM;
928
929         envp[i] = NULL;
930
931         return 0;
932 }
933
934 #else
935
936 static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
937                               char *buffer, int buffer_size)
938 {
939         return -ENODEV;
940 }
941
942 #endif
943
944 /************************ per-device sysfs output ***************************/
945
946 #define pcmcia_device_attr(field, test, format)                         \
947 static ssize_t field##_show (struct device *dev, struct device_attribute *attr, char *buf)              \
948 {                                                                       \
949         struct pcmcia_device *p_dev = to_pcmcia_dev(dev);               \
950         return p_dev->test ? sprintf (buf, format, p_dev->field) : -ENODEV; \
951 }
952
953 #define pcmcia_device_stringattr(name, field)                                   \
954 static ssize_t name##_show (struct device *dev, struct device_attribute *attr, char *buf)               \
955 {                                                                       \
956         struct pcmcia_device *p_dev = to_pcmcia_dev(dev);               \
957         return p_dev->field ? sprintf (buf, "%s\n", p_dev->field) : -ENODEV; \
958 }
959
960 pcmcia_device_attr(func, socket, "0x%02x\n");
961 pcmcia_device_attr(func_id, has_func_id, "0x%02x\n");
962 pcmcia_device_attr(manf_id, has_manf_id, "0x%04x\n");
963 pcmcia_device_attr(card_id, has_card_id, "0x%04x\n");
964 pcmcia_device_stringattr(prod_id1, prod_id[0]);
965 pcmcia_device_stringattr(prod_id2, prod_id[1]);
966 pcmcia_device_stringattr(prod_id3, prod_id[2]);
967 pcmcia_device_stringattr(prod_id4, prod_id[3]);
968
969
970 static ssize_t pcmcia_store_allow_func_id_match (struct device * dev, struct device_attribute *attr,
971                                                  const char * buf, size_t count)
972 {
973         struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
974         if (!count)
975                 return -EINVAL;
976
977         down(&p_dev->socket->skt_sem);
978         p_dev->allow_func_id_match = 1;
979         up(&p_dev->socket->skt_sem);
980
981         bus_rescan_devices(&pcmcia_bus_type);
982
983         return count;
984 }
985
986 static struct device_attribute pcmcia_dev_attrs[] = {
987         __ATTR(function, 0444, func_show, NULL),
988         __ATTR_RO(func_id),
989         __ATTR_RO(manf_id),
990         __ATTR_RO(card_id),
991         __ATTR_RO(prod_id1),
992         __ATTR_RO(prod_id2),
993         __ATTR_RO(prod_id3),
994         __ATTR_RO(prod_id4),
995         __ATTR(allow_func_id_match, 0200, NULL, pcmcia_store_allow_func_id_match),
996         __ATTR_NULL,
997 };
998
999
1000 /*======================================================================
1001
1002     These manage a ring buffer of events pending for one user process
1003     
1004 ======================================================================*/
1005
1006 #ifdef CONFIG_PCMCIA_IOCTL
1007
1008 static int queue_empty(user_info_t *user)
1009 {
1010     return (user->event_head == user->event_tail);
1011 }
1012
1013 static event_t get_queued_event(user_info_t *user)
1014 {
1015     user->event_tail = (user->event_tail+1) % MAX_EVENTS;
1016     return user->event[user->event_tail];
1017 }
1018
1019 static void queue_event(user_info_t *user, event_t event)
1020 {
1021     user->event_head = (user->event_head+1) % MAX_EVENTS;
1022     if (user->event_head == user->event_tail)
1023         user->event_tail = (user->event_tail+1) % MAX_EVENTS;
1024     user->event[user->event_head] = event;
1025 }
1026
1027 static void handle_event(struct pcmcia_bus_socket *s, event_t event)
1028 {
1029     user_info_t *user;
1030     for (user = s->user; user; user = user->next)
1031         queue_event(user, event);
1032     wake_up_interruptible(&s->queue);
1033 }
1034 #else
1035 static inline void handle_event(struct pcmcia_bus_socket *s, event_t event) { return; }
1036 static inline int handle_request(struct pcmcia_bus_socket *s, event_t event) { return CS_SUCCESS; }
1037 #endif
1038
1039
1040
1041 /*======================================================================
1042
1043     The card status event handler.
1044     
1045 ======================================================================*/
1046
1047 struct send_event_data {
1048         struct pcmcia_socket *skt;
1049         event_t event;
1050         int priority;
1051 };
1052
1053 static int send_event_callback(struct device *dev, void * _data)
1054 {
1055         struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1056         struct send_event_data *data = _data;
1057
1058         /* we get called for all sockets, but may only pass the event
1059          * for drivers _on the affected socket_ */
1060         if (p_dev->socket != data->skt)
1061                 return 0;
1062
1063         if (p_dev->client.state & (CLIENT_UNBOUND|CLIENT_STALE))
1064                 return 0;
1065
1066         if (p_dev->client.EventMask & data->event)
1067                 return EVENT(&p_dev->client, data->event, data->priority);
1068
1069         return 0;
1070 }
1071
1072 static int send_event(struct pcmcia_socket *s, event_t event, int priority)
1073 {
1074         int ret = 0;
1075         struct send_event_data private;
1076         struct pcmcia_bus_socket *skt = pcmcia_get_bus_socket(s->pcmcia);
1077
1078         if (!skt)
1079                 return 0;
1080
1081         private.skt = s;
1082         private.event = event;
1083         private.priority = priority;
1084
1085         ret = bus_for_each_dev(&pcmcia_bus_type, NULL, &private, send_event_callback);
1086
1087         pcmcia_put_bus_socket(skt);
1088         return ret;
1089 } /* send_event */
1090
1091
1092 /* Normally, the event is passed to individual drivers after
1093  * informing userspace. Only for CS_EVENT_CARD_REMOVAL this
1094  * is inversed to maintain historic compatibility.
1095  */
1096
1097 static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
1098 {
1099         struct pcmcia_bus_socket *s = skt->pcmcia;
1100         int ret = 0;
1101
1102         ds_dbg(1, "ds_event(0x%06x, %d, 0x%p)\n",
1103                event, priority, s);
1104     
1105         switch (event) {
1106
1107         case CS_EVENT_CARD_REMOVAL:
1108                 s->state &= ~DS_SOCKET_PRESENT;
1109                 send_event(skt, event, priority);
1110                 unbind_request(s);
1111                 handle_event(s, event);
1112                 break;
1113         
1114         case CS_EVENT_CARD_INSERTION:
1115                 s->state |= DS_SOCKET_PRESENT;
1116                 pcmcia_card_add(skt);
1117                 handle_event(s, event);
1118                 break;
1119
1120         case CS_EVENT_EJECTION_REQUEST:
1121                 ret = send_event(skt, event, priority);
1122                 break;
1123
1124         default:
1125                 handle_event(s, event);
1126                 send_event(skt, event, priority);
1127                 break;
1128     }
1129
1130     return 0;
1131 } /* ds_event */
1132
1133
1134 /*======================================================================
1135
1136     bind_request() and bind_device() are merged by now. Register_client()
1137     is called right at the end of bind_request(), during the driver's
1138     ->attach() call. Individual descriptions:
1139
1140     bind_request() connects a socket to a particular client driver.
1141     It looks up the specified device ID in the list of registered
1142     drivers, binds it to the socket, and tries to create an instance
1143     of the device.  unbind_request() deletes a driver instance.
1144     
1145     Bind_device() associates a device driver with a particular socket.
1146     It is normally called by Driver Services after it has identified
1147     a newly inserted card.  An instance of that driver will then be
1148     eligible to register as a client of this socket.
1149
1150     Register_client() uses the dev_info_t handle to match the
1151     caller with a socket.  The driver must have already been bound
1152     to a socket with bind_device() -- in fact, bind_device()
1153     allocates the client structure that will be used.
1154
1155 ======================================================================*/
1156
1157 #ifdef CONFIG_PCMCIA_IOCTL
1158
1159 static int bind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info)
1160 {
1161         struct pcmcia_driver *p_drv;
1162         struct pcmcia_device *p_dev;
1163         int ret = 0;
1164         unsigned long flags;
1165
1166         s = pcmcia_get_bus_socket(s);
1167         if (!s)
1168                 return -EINVAL;
1169
1170         ds_dbg(2, "bind_request(%d, '%s')\n", s->parent->sock,
1171                (char *)bind_info->dev_info);
1172
1173         p_drv = get_pcmcia_driver(&bind_info->dev_info);
1174         if (!p_drv) {
1175                 ret = -EINVAL;
1176                 goto err_put;
1177         }
1178
1179         if (!try_module_get(p_drv->owner)) {
1180                 ret = -EINVAL;
1181                 goto err_put_driver;
1182         }
1183
1184         spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
1185         list_for_each_entry(p_dev, &s->devices_list, socket_device_list) {
1186                 if (p_dev->func == bind_info->function) {
1187                         if ((p_dev->dev.driver == &p_drv->drv)) {
1188                                 if (p_dev->cardmgr) {
1189                                         /* if there's already a device
1190                                          * registered, and it was registered
1191                                          * by userspace before, we need to
1192                                          * return the "instance". */
1193                                         spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1194                                         bind_info->instance = p_dev->instance;
1195                                         ret = -EBUSY;
1196                                         goto err_put_module;
1197                                 } else {
1198                                         /* the correct driver managed to bind
1199                                          * itself magically to the correct
1200                                          * device. */
1201                                         spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1202                                         p_dev->cardmgr = p_drv;
1203                                         ret = 0;
1204                                         goto err_put_module;
1205                                 }
1206                         } else if (!p_dev->dev.driver) {
1207                                 /* there's already a device available where
1208                                  * no device has been bound to yet. So we don't
1209                                  * need to register a device! */
1210                                 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1211                                 goto rescan;
1212                         }
1213                 }
1214         }
1215         spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1216
1217         p_dev = pcmcia_device_add(s, bind_info->function);
1218         if (!p_dev) {
1219                 ret = -EIO;
1220                 goto err_put_module;
1221         }
1222
1223 rescan:
1224         p_dev->cardmgr = p_drv;
1225
1226         /* if a driver is already running, we can abort */
1227         if (p_dev->dev.driver)
1228                 goto err_put_module;
1229
1230         /*
1231          * Prevent this racing with a card insertion.
1232          */
1233         down(&s->parent->skt_sem);
1234         bus_rescan_devices(&pcmcia_bus_type);
1235         up(&s->parent->skt_sem);
1236
1237         /* check whether the driver indeed matched. I don't care if this
1238          * is racy or not, because it can only happen on cardmgr access
1239          * paths...
1240          */
1241         if (!(p_dev->dev.driver == &p_drv->drv))
1242                 p_dev->cardmgr = NULL;
1243
1244  err_put_module:
1245         module_put(p_drv->owner);
1246  err_put_driver:
1247         put_driver(&p_drv->drv);
1248  err_put:
1249         pcmcia_put_bus_socket(s);
1250
1251         return (ret);
1252 } /* bind_request */
1253
1254 #endif
1255
1256
1257 int pcmcia_register_client(client_handle_t *handle, client_reg_t *req)
1258 {
1259         client_t *client = NULL;
1260         struct pcmcia_socket *s;
1261         struct pcmcia_bus_socket *skt = NULL;
1262         struct pcmcia_device *p_dev = NULL;
1263
1264         /* Look for unbound client with matching dev_info */
1265         down_read(&pcmcia_socket_list_rwsem);
1266         list_for_each_entry(s, &pcmcia_socket_list, socket_list) {
1267                 unsigned long flags;
1268
1269                 if (s->state & SOCKET_CARDBUS)
1270                         continue;
1271
1272                 skt = s->pcmcia;
1273                 if (!skt)
1274                         continue;
1275                 skt = pcmcia_get_bus_socket(skt);
1276                 if (!skt)
1277                         continue;
1278                 spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
1279                 list_for_each_entry(p_dev, &skt->devices_list, socket_device_list) {
1280                         struct pcmcia_driver *p_drv;
1281                         p_dev = pcmcia_get_dev(p_dev);
1282                         if (!p_dev)
1283                                 continue;
1284                         if (!(p_dev->client.state & CLIENT_UNBOUND) ||
1285                             (!p_dev->dev.driver)) {
1286                                 pcmcia_put_dev(p_dev);
1287                                 continue;
1288                         }
1289                         p_drv = to_pcmcia_drv(p_dev->dev.driver);
1290                         if (!strncmp(p_drv->drv.name, (char *)req->dev_info, DEV_NAME_LEN)) {
1291                                 client = &p_dev->client;
1292                                 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1293                                 goto found;
1294                         }
1295                         pcmcia_put_dev(p_dev);
1296                 }
1297                 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1298                 pcmcia_put_bus_socket(skt);
1299         }
1300  found:
1301         up_read(&pcmcia_socket_list_rwsem);
1302         if (!p_dev || !client)
1303                 return -ENODEV;
1304
1305         pcmcia_put_bus_socket(skt); /* safe, as we already hold a reference from bind_device */
1306
1307         *handle = client;
1308         client->state &= ~CLIENT_UNBOUND;
1309         client->Socket = s;
1310         client->EventMask = req->EventMask;
1311         client->event_handler = req->event_handler;
1312         client->event_callback_args = req->event_callback_args;
1313         client->event_callback_args.client_handle = client;
1314
1315         if (s->state & SOCKET_CARDBUS)
1316                 client->state |= CLIENT_CARDBUS;
1317
1318         if ((!(s->state & SOCKET_CARDBUS)) && (s->functions == 0) &&
1319             (client->Function != BIND_FN_ALL)) {
1320                 cistpl_longlink_mfc_t mfc;
1321                 if (pccard_read_tuple(s, client->Function, CISTPL_LONGLINK_MFC, &mfc)
1322                     == CS_SUCCESS)
1323                         s->functions = mfc.nfn;
1324                 else
1325                         s->functions = 1;
1326                 s->config = kmalloc(sizeof(config_t) * s->functions,
1327                                     GFP_KERNEL);
1328                 if (!s->config)
1329                         goto out_no_resource;
1330                 memset(s->config, 0, sizeof(config_t) * s->functions);
1331         }
1332
1333         ds_dbg(1, "register_client(): client 0x%p, dev %s\n",
1334                client, p_dev->dev.bus_id);
1335         if (client->EventMask & CS_EVENT_REGISTRATION_COMPLETE)
1336                 EVENT(client, CS_EVENT_REGISTRATION_COMPLETE, CS_EVENT_PRI_LOW);
1337
1338         if ((s->state & (SOCKET_PRESENT|SOCKET_CARDBUS)) == SOCKET_PRESENT) {
1339                 if (client->EventMask & CS_EVENT_CARD_INSERTION)
1340                         EVENT(client, CS_EVENT_CARD_INSERTION, CS_EVENT_PRI_LOW);
1341         }
1342
1343         return CS_SUCCESS;
1344
1345  out_no_resource:
1346         pcmcia_put_dev(p_dev);
1347         return CS_OUT_OF_RESOURCE;
1348 } /* register_client */
1349 EXPORT_SYMBOL(pcmcia_register_client);
1350
1351
1352 /*====================================================================*/
1353 #ifdef CONFIG_PCMCIA_IOCTL
1354
1355 extern struct pci_bus *pcmcia_lookup_bus(struct pcmcia_socket *s);
1356
1357 static int get_device_info(struct pcmcia_bus_socket *s, bind_info_t *bind_info, int first)
1358 {
1359         dev_node_t *node;
1360         struct pcmcia_device *p_dev;
1361         unsigned long flags;
1362         int ret = 0;
1363
1364 #ifdef CONFIG_CARDBUS
1365         /*
1366          * Some unbelievably ugly code to associate the PCI cardbus
1367          * device and its driver with the PCMCIA "bind" information.
1368          */
1369         {
1370                 struct pci_bus *bus;
1371
1372                 bus = pcmcia_lookup_bus(s->parent);
1373                 if (bus) {
1374                         struct list_head *list;
1375                         struct pci_dev *dev = NULL;
1376
1377                         list = bus->devices.next;
1378                         while (list != &bus->devices) {
1379                                 struct pci_dev *pdev = pci_dev_b(list);
1380                                 list = list->next;
1381
1382                                 if (first) {
1383                                         dev = pdev;
1384                                         break;
1385                                 }
1386
1387                                 /* Try to handle "next" here some way? */
1388                         }
1389                         if (dev && dev->driver) {
1390                                 strlcpy(bind_info->name, dev->driver->name, DEV_NAME_LEN);
1391                                 bind_info->major = 0;
1392                                 bind_info->minor = 0;
1393                                 bind_info->next = NULL;
1394                                 return 0;
1395                         }
1396                 }
1397         }
1398 #endif
1399
1400         spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
1401         list_for_each_entry(p_dev, &s->devices_list, socket_device_list) {
1402                 if (p_dev->func == bind_info->function) {
1403                         p_dev = pcmcia_get_dev(p_dev);
1404                         if (!p_dev)
1405                                 continue;
1406                         goto found;
1407                 }
1408         }
1409         spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1410         return -ENODEV;
1411
1412  found:
1413         spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1414
1415         if ((!p_dev->instance) ||
1416             (p_dev->instance->state & DEV_CONFIG_PENDING)) {
1417                 ret = -EAGAIN;
1418                 goto err_put;
1419         }
1420
1421         if (first)
1422                 node = p_dev->instance->dev;
1423         else
1424                 for (node = p_dev->instance->dev; node; node = node->next)
1425                         if (node == bind_info->next)
1426                                 break;
1427         if (!node) {
1428                 ret = -ENODEV;
1429                 goto err_put;
1430         }
1431
1432         strlcpy(bind_info->name, node->dev_name, DEV_NAME_LEN);
1433         bind_info->major = node->major;
1434         bind_info->minor = node->minor;
1435         bind_info->next = node->next;
1436
1437  err_put:
1438         pcmcia_put_dev(p_dev);
1439         return (ret);
1440 } /* get_device_info */
1441
1442 #endif
1443
1444 /*====================================================================*/
1445
1446 /* unbind _all_ devices attached to a given pcmcia_bus_socket. The
1447  * drivers have been called with EVENT_CARD_REMOVAL before.
1448  */
1449 static int unbind_request(struct pcmcia_bus_socket *s)
1450 {
1451         struct pcmcia_device    *p_dev;
1452         unsigned long           flags;
1453
1454         ds_dbg(2, "unbind_request(%d)\n", s->parent->sock);
1455
1456         s->device_count = 0;
1457
1458         for (;;) {
1459                 /* unregister all pcmcia_devices registered with this socket*/
1460                 spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
1461                 if (list_empty(&s->devices_list)) {
1462                         spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1463                         return 0;
1464                 }
1465                 p_dev = list_entry((&s->devices_list)->next, struct pcmcia_device, socket_device_list);
1466                 list_del(&p_dev->socket_device_list);
1467                 p_dev->client.state |= CLIENT_STALE;
1468                 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1469
1470                 device_unregister(&p_dev->dev);
1471         }
1472
1473         return 0;
1474 } /* unbind_request */
1475
1476 int pcmcia_deregister_client(client_handle_t handle)
1477 {
1478         struct pcmcia_socket *s;
1479         int i;
1480         struct pcmcia_device *p_dev = handle_to_pdev(handle);
1481
1482         if (CHECK_HANDLE(handle))
1483                 return CS_BAD_HANDLE;
1484
1485         s = SOCKET(handle);
1486         ds_dbg(1, "deregister_client(%p)\n", handle);
1487
1488         if (handle->state & (CLIENT_IRQ_REQ|CLIENT_IO_REQ|CLIENT_CONFIG_LOCKED))
1489                 goto warn_out;
1490         for (i = 0; i < MAX_WIN; i++)
1491                 if (handle->state & CLIENT_WIN_REQ(i))
1492                         goto warn_out;
1493
1494         if (handle->state & CLIENT_STALE) {
1495                 handle->client_magic = 0;
1496                 handle->state &= ~CLIENT_STALE;
1497                 pcmcia_put_dev(p_dev);
1498         } else {
1499                 handle->state = CLIENT_UNBOUND;
1500                 handle->event_handler = NULL;
1501         }
1502
1503         return CS_SUCCESS;
1504  warn_out:
1505         printk(KERN_WARNING "ds: deregister_client was called too early.\n");
1506         return CS_IN_USE;
1507 } /* deregister_client */
1508 EXPORT_SYMBOL(pcmcia_deregister_client);
1509
1510
1511 /*======================================================================
1512
1513     The user-mode PC Card device interface
1514
1515 ======================================================================*/
1516
1517 #ifdef CONFIG_PCMCIA_IOCTL
1518
1519 static int ds_open(struct inode *inode, struct file *file)
1520 {
1521     socket_t i = iminor(inode);
1522     struct pcmcia_bus_socket *s;
1523     user_info_t *user;
1524
1525     ds_dbg(0, "ds_open(socket %d)\n", i);
1526
1527     s = get_socket_info_by_nr(i);
1528     if (!s)
1529             return -ENODEV;
1530     s = pcmcia_get_bus_socket(s);
1531     if (!s)
1532             return -ENODEV;
1533
1534     if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
1535             if (s->state & DS_SOCKET_BUSY) {
1536                     pcmcia_put_bus_socket(s);
1537                     return -EBUSY;
1538             }
1539         else
1540             s->state |= DS_SOCKET_BUSY;
1541     }
1542     
1543     user = kmalloc(sizeof(user_info_t), GFP_KERNEL);
1544     if (!user) {
1545             pcmcia_put_bus_socket(s);
1546             return -ENOMEM;
1547     }
1548     user->event_tail = user->event_head = 0;
1549     user->next = s->user;
1550     user->user_magic = USER_MAGIC;
1551     user->socket = s;
1552     s->user = user;
1553     file->private_data = user;
1554     
1555     if (s->state & DS_SOCKET_PRESENT)
1556         queue_event(user, CS_EVENT_CARD_INSERTION);
1557     return 0;
1558 } /* ds_open */
1559
1560 /*====================================================================*/
1561
1562 static int ds_release(struct inode *inode, struct file *file)
1563 {
1564     struct pcmcia_bus_socket *s;
1565     user_info_t *user, **link;
1566
1567     ds_dbg(0, "ds_release(socket %d)\n", iminor(inode));
1568
1569     user = file->private_data;
1570     if (CHECK_USER(user))
1571         goto out;
1572
1573     s = user->socket;
1574
1575     /* Unlink user data structure */
1576     if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
1577         s->state &= ~DS_SOCKET_BUSY;
1578     }
1579     file->private_data = NULL;
1580     for (link = &s->user; *link; link = &(*link)->next)
1581         if (*link == user) break;
1582     if (link == NULL)
1583         goto out;
1584     *link = user->next;
1585     user->user_magic = 0;
1586     kfree(user);
1587     pcmcia_put_bus_socket(s);
1588 out:
1589     return 0;
1590 } /* ds_release */
1591
1592 /*====================================================================*/
1593
1594 static ssize_t ds_read(struct file *file, char __user *buf,
1595                        size_t count, loff_t *ppos)
1596 {
1597     struct pcmcia_bus_socket *s;
1598     user_info_t *user;
1599     int ret;
1600
1601     ds_dbg(2, "ds_read(socket %d)\n", iminor(file->f_dentry->d_inode));
1602     
1603     if (count < 4)
1604         return -EINVAL;
1605
1606     user = file->private_data;
1607     if (CHECK_USER(user))
1608         return -EIO;
1609     
1610     s = user->socket;
1611     if (s->state & DS_SOCKET_DEAD)
1612         return -EIO;
1613
1614     ret = wait_event_interruptible(s->queue, !queue_empty(user));
1615     if (ret == 0)
1616         ret = put_user(get_queued_event(user), (int __user *)buf) ? -EFAULT : 4;
1617
1618     return ret;
1619 } /* ds_read */
1620
1621 /*====================================================================*/
1622
1623 static ssize_t ds_write(struct file *file, const char __user *buf,
1624                         size_t count, loff_t *ppos)
1625 {
1626     ds_dbg(2, "ds_write(socket %d)\n", iminor(file->f_dentry->d_inode));
1627
1628     if (count != 4)
1629         return -EINVAL;
1630     if ((file->f_flags & O_ACCMODE) == O_RDONLY)
1631         return -EBADF;
1632
1633     return -EIO;
1634 } /* ds_write */
1635
1636 /*====================================================================*/
1637
1638 /* No kernel lock - fine */
1639 static u_int ds_poll(struct file *file, poll_table *wait)
1640 {
1641     struct pcmcia_bus_socket *s;
1642     user_info_t *user;
1643
1644     ds_dbg(2, "ds_poll(socket %d)\n", iminor(file->f_dentry->d_inode));
1645     
1646     user = file->private_data;
1647     if (CHECK_USER(user))
1648         return POLLERR;
1649     s = user->socket;
1650     /*
1651      * We don't check for a dead socket here since that
1652      * will send cardmgr into an endless spin.
1653      */
1654     poll_wait(file, &s->queue, wait);
1655     if (!queue_empty(user))
1656         return POLLIN | POLLRDNORM;
1657     return 0;
1658 } /* ds_poll */
1659
1660 /*====================================================================*/
1661
1662 extern int pcmcia_adjust_resource_info(adjust_t *adj);
1663
1664 static int ds_ioctl(struct inode * inode, struct file * file,
1665                     u_int cmd, u_long arg)
1666 {
1667     struct pcmcia_bus_socket *s;
1668     void __user *uarg = (char __user *)arg;
1669     u_int size;
1670     int ret, err;
1671     ds_ioctl_arg_t *buf;
1672     user_info_t *user;
1673
1674     ds_dbg(2, "ds_ioctl(socket %d, %#x, %#lx)\n", iminor(inode), cmd, arg);
1675     
1676     user = file->private_data;
1677     if (CHECK_USER(user))
1678         return -EIO;
1679
1680     s = user->socket;
1681     if (s->state & DS_SOCKET_DEAD)
1682         return -EIO;
1683     
1684     size = (cmd & IOCSIZE_MASK) >> IOCSIZE_SHIFT;
1685     if (size > sizeof(ds_ioctl_arg_t)) return -EINVAL;
1686
1687     /* Permission check */
1688     if (!(cmd & IOC_OUT) && !capable(CAP_SYS_ADMIN))
1689         return -EPERM;
1690         
1691     if (cmd & IOC_IN) {
1692         if (!access_ok(VERIFY_READ, uarg, size)) {
1693             ds_dbg(3, "ds_ioctl(): verify_read = %d\n", -EFAULT);
1694             return -EFAULT;
1695         }
1696     }
1697     if (cmd & IOC_OUT) {
1698         if (!access_ok(VERIFY_WRITE, uarg, size)) {
1699             ds_dbg(3, "ds_ioctl(): verify_write = %d\n", -EFAULT);
1700             return -EFAULT;
1701         }
1702     }
1703     buf = kmalloc(sizeof(ds_ioctl_arg_t), GFP_KERNEL);
1704     if (!buf)
1705         return -ENOMEM;
1706     
1707     err = ret = 0;
1708     
1709     if (cmd & IOC_IN) __copy_from_user((char *)buf, uarg, size);
1710     
1711     switch (cmd) {
1712     case DS_ADJUST_RESOURCE_INFO:
1713         ret = pcmcia_adjust_resource_info(&buf->adjust);
1714         break;
1715     case DS_GET_CARD_SERVICES_INFO:
1716         ret = pcmcia_get_card_services_info(&buf->servinfo);
1717         break;
1718     case DS_GET_CONFIGURATION_INFO:
1719         if (buf->config.Function &&
1720            (buf->config.Function >= s->parent->functions))
1721             ret = CS_BAD_ARGS;
1722         else
1723             ret = pccard_get_configuration_info(s->parent,
1724                         buf->config.Function, &buf->config);
1725         break;
1726     case DS_GET_FIRST_TUPLE:
1727         down(&s->parent->skt_sem);
1728         pcmcia_validate_mem(s->parent);
1729         up(&s->parent->skt_sem);
1730         ret = pccard_get_first_tuple(s->parent, BIND_FN_ALL, &buf->tuple);
1731         break;
1732     case DS_GET_NEXT_TUPLE:
1733         ret = pccard_get_next_tuple(s->parent, BIND_FN_ALL, &buf->tuple);
1734         break;
1735     case DS_GET_TUPLE_DATA:
1736         buf->tuple.TupleData = buf->tuple_parse.data;
1737         buf->tuple.TupleDataMax = sizeof(buf->tuple_parse.data);
1738         ret = pccard_get_tuple_data(s->parent, &buf->tuple);
1739         break;
1740     case DS_PARSE_TUPLE:
1741         buf->tuple.TupleData = buf->tuple_parse.data;
1742         ret = pccard_parse_tuple(&buf->tuple, &buf->tuple_parse.parse);
1743         break;
1744     case DS_RESET_CARD:
1745         ret = pccard_reset_card(s->parent);
1746         break;
1747     case DS_GET_STATUS:
1748         if (buf->status.Function &&
1749            (buf->status.Function >= s->parent->functions))
1750             ret = CS_BAD_ARGS;
1751         else
1752         ret = pccard_get_status(s->parent, buf->status.Function, &buf->status);
1753         break;
1754     case DS_VALIDATE_CIS:
1755         down(&s->parent->skt_sem);
1756         pcmcia_validate_mem(s->parent);
1757         up(&s->parent->skt_sem);
1758         ret = pccard_validate_cis(s->parent, BIND_FN_ALL, &buf->cisinfo);
1759         break;
1760     case DS_SUSPEND_CARD:
1761         ret = pcmcia_suspend_card(s->parent);
1762         break;
1763     case DS_RESUME_CARD:
1764         ret = pcmcia_resume_card(s->parent);
1765         break;
1766     case DS_EJECT_CARD:
1767         err = pcmcia_eject_card(s->parent);
1768         break;
1769     case DS_INSERT_CARD:
1770         err = pcmcia_insert_card(s->parent);
1771         break;
1772     case DS_ACCESS_CONFIGURATION_REGISTER:
1773         if ((buf->conf_reg.Action == CS_WRITE) && !capable(CAP_SYS_ADMIN)) {
1774             err = -EPERM;
1775             goto free_out;
1776         }
1777         if (buf->conf_reg.Function &&
1778            (buf->conf_reg.Function >= s->parent->functions))
1779             ret = CS_BAD_ARGS;
1780         else
1781             ret = pccard_access_configuration_register(s->parent,
1782                         buf->conf_reg.Function, &buf->conf_reg);
1783         break;
1784     case DS_GET_FIRST_REGION:
1785     case DS_GET_NEXT_REGION:
1786     case DS_BIND_MTD:
1787         if (!capable(CAP_SYS_ADMIN)) {
1788                 err = -EPERM;
1789                 goto free_out;
1790         } else {
1791                 static int printed = 0;
1792                 if (!printed) {
1793                         printk(KERN_WARNING "2.6. kernels use pcmciamtd instead of memory_cs.c and do not require special\n");
1794                         printk(KERN_WARNING "MTD handling any more.\n");
1795                         printed++;
1796                 }
1797         }
1798         err = -EINVAL;
1799         goto free_out;
1800         break;
1801     case DS_GET_FIRST_WINDOW:
1802         ret = pcmcia_get_window(s->parent, &buf->win_info.handle, 0,
1803                         &buf->win_info.window);
1804         break;
1805     case DS_GET_NEXT_WINDOW:
1806         ret = pcmcia_get_window(s->parent, &buf->win_info.handle,
1807                         buf->win_info.handle->index + 1, &buf->win_info.window);
1808         break;
1809     case DS_GET_MEM_PAGE:
1810         ret = pcmcia_get_mem_page(buf->win_info.handle,
1811                            &buf->win_info.map);
1812         break;
1813     case DS_REPLACE_CIS:
1814         ret = pcmcia_replace_cis(s->parent, &buf->cisdump);
1815         break;
1816     case DS_BIND_REQUEST:
1817         if (!capable(CAP_SYS_ADMIN)) {
1818                 err = -EPERM;
1819                 goto free_out;
1820         }
1821         err = bind_request(s, &buf->bind_info);
1822         break;
1823     case DS_GET_DEVICE_INFO:
1824         err = get_device_info(s, &buf->bind_info, 1);
1825         break;
1826     case DS_GET_NEXT_DEVICE:
1827         err = get_device_info(s, &buf->bind_info, 0);
1828         break;
1829     case DS_UNBIND_REQUEST:
1830         err = 0;
1831         break;
1832     default:
1833         err = -EINVAL;
1834     }
1835     
1836     if ((err == 0) && (ret != CS_SUCCESS)) {
1837         ds_dbg(2, "ds_ioctl: ret = %d\n", ret);
1838         switch (ret) {
1839         case CS_BAD_SOCKET: case CS_NO_CARD:
1840             err = -ENODEV; break;
1841         case CS_BAD_ARGS: case CS_BAD_ATTRIBUTE: case CS_BAD_IRQ:
1842         case CS_BAD_TUPLE:
1843             err = -EINVAL; break;
1844         case CS_IN_USE:
1845             err = -EBUSY; break;
1846         case CS_OUT_OF_RESOURCE:
1847             err = -ENOSPC; break;
1848         case CS_NO_MORE_ITEMS:
1849             err = -ENODATA; break;
1850         case CS_UNSUPPORTED_FUNCTION:
1851             err = -ENOSYS; break;
1852         default:
1853             err = -EIO; break;
1854         }
1855     }
1856
1857     if (cmd & IOC_OUT) {
1858         if (__copy_to_user(uarg, (char *)buf, size))
1859             err = -EFAULT;
1860     }
1861
1862 free_out:
1863     kfree(buf);
1864     return err;
1865 } /* ds_ioctl */
1866
1867 /*====================================================================*/
1868
1869 static struct file_operations ds_fops = {
1870         .owner          = THIS_MODULE,
1871         .open           = ds_open,
1872         .release        = ds_release,
1873         .ioctl          = ds_ioctl,
1874         .read           = ds_read,
1875         .write          = ds_write,
1876         .poll           = ds_poll,
1877 };
1878
1879 #endif
1880
1881 static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev)
1882 {
1883         struct pcmcia_socket *socket = class_get_devdata(class_dev);
1884         struct pcmcia_bus_socket *s;
1885         int ret;
1886
1887         s = kmalloc(sizeof(struct pcmcia_bus_socket), GFP_KERNEL);
1888         if(!s)
1889                 return -ENOMEM;
1890         memset(s, 0, sizeof(struct pcmcia_bus_socket));
1891
1892         /* get reference to parent socket */
1893         s->parent = pcmcia_get_socket(socket);
1894         if (!s->parent) {
1895                 printk(KERN_ERR "PCMCIA obtaining reference to socket %p failed\n", socket);
1896                 kfree (s);
1897                 return -ENODEV;
1898         }
1899
1900         kref_init(&s->refcount);
1901     
1902         /*
1903          * Ugly. But we want to wait for the socket threads to have started up.
1904          * We really should let the drivers themselves drive some of this..
1905          */
1906         msleep(250);
1907
1908         init_waitqueue_head(&s->queue);
1909         INIT_LIST_HEAD(&s->devices_list);
1910         INIT_WORK(&s->device_add, pcmcia_delayed_add_pseudo_device, s);
1911
1912         /* Set up hotline to Card Services */
1913         s->callback.owner = THIS_MODULE;
1914         s->callback.event = &ds_event;
1915         s->callback.requery = &pcmcia_bus_rescan;
1916         socket->pcmcia = s;
1917
1918         ret = pccard_register_pcmcia(socket, &s->callback);
1919         if (ret) {
1920                 printk(KERN_ERR "PCMCIA registration PCCard core failed for socket %p\n", socket);
1921                 pcmcia_put_bus_socket(s);
1922                 socket->pcmcia = NULL;
1923                 return (ret);
1924         }
1925
1926         return 0;
1927 }
1928
1929
1930 static void pcmcia_bus_remove_socket(struct class_device *class_dev)
1931 {
1932         struct pcmcia_socket *socket = class_get_devdata(class_dev);
1933
1934         if (!socket || !socket->pcmcia)
1935                 return;
1936
1937         pccard_register_pcmcia(socket, NULL);
1938
1939         socket->pcmcia->state |= DS_SOCKET_DEAD;
1940         pcmcia_put_bus_socket(socket->pcmcia);
1941         socket->pcmcia = NULL;
1942
1943         return;
1944 }
1945
1946
1947 /* the pcmcia_bus_interface is used to handle pcmcia socket devices */
1948 static struct class_interface pcmcia_bus_interface = {
1949         .class = &pcmcia_socket_class,
1950         .add = &pcmcia_bus_add_socket,
1951         .remove = &pcmcia_bus_remove_socket,
1952 };
1953
1954
1955 static struct bus_type pcmcia_bus_type = {
1956         .name = "pcmcia",
1957         .hotplug = pcmcia_bus_hotplug,
1958         .match = pcmcia_bus_match,
1959         .dev_attrs = pcmcia_dev_attrs,
1960 };
1961
1962
1963 static int __init init_pcmcia_bus(void)
1964 {
1965 #ifdef CONFIG_PCMCIA_IOCTL
1966         int i;
1967 #endif
1968
1969         spin_lock_init(&pcmcia_dev_list_lock);
1970
1971         bus_register(&pcmcia_bus_type);
1972         class_interface_register(&pcmcia_bus_interface);
1973
1974 #ifdef CONFIG_PCMCIA_IOCTL
1975         /* Set up character device for user mode clients */
1976         i = register_chrdev(0, "pcmcia", &ds_fops);
1977         if (i < 0)
1978                 printk(KERN_NOTICE "unable to find a free device # for "
1979                        "Driver Services (error=%d)\n", i);
1980         else
1981                 major_dev = i;
1982
1983 #ifdef CONFIG_PROC_FS
1984         proc_pccard = proc_mkdir("pccard", proc_bus);
1985         if (proc_pccard)
1986                 create_proc_read_entry("drivers",0,proc_pccard,proc_read_drivers,NULL);
1987 #endif
1988 #endif
1989
1990         return 0;
1991 }
1992 fs_initcall(init_pcmcia_bus); /* one level after subsys_initcall so that 
1993                                * pcmcia_socket_class is already registered */
1994
1995
1996 static void __exit exit_pcmcia_bus(void)
1997 {
1998         class_interface_unregister(&pcmcia_bus_interface);
1999
2000 #ifdef CONFIG_PCMCIA_IOCTL
2001 #ifdef CONFIG_PROC_FS
2002         if (proc_pccard) {
2003                 remove_proc_entry("drivers", proc_pccard);
2004                 remove_proc_entry("pccard", proc_bus);
2005         }
2006 #endif
2007         if (major_dev != -1)
2008                 unregister_chrdev(major_dev, "pcmcia");
2009 #endif
2010
2011         bus_unregister(&pcmcia_bus_type);
2012 }
2013 module_exit(exit_pcmcia_bus);
2014
2015
2016
2017 /* helpers for backwards-compatible functions */
2018 #ifdef CONFIG_PCMCIA_IOCTL
2019 static struct pcmcia_bus_socket * get_socket_info_by_nr(unsigned int nr)
2020 {
2021         struct pcmcia_socket * s = pcmcia_get_socket_by_nr(nr);
2022         if (s && s->pcmcia)
2023                 return s->pcmcia;
2024         else
2025                 return NULL;
2026 }
2027
2028 /* backwards-compatible accessing of driver --- by name! */
2029
2030 static struct pcmcia_driver * get_pcmcia_driver (dev_info_t *dev_info)
2031 {
2032         struct device_driver *drv;
2033         struct pcmcia_driver *p_drv;
2034
2035         drv = driver_find((char *) dev_info, &pcmcia_bus_type);
2036         if (!drv)
2037                 return NULL;
2038
2039         p_drv = container_of(drv, struct pcmcia_driver, drv);
2040
2041         return (p_drv);
2042 }
2043 #endif
2044
2045 MODULE_ALIAS("ds");