2 * ds.c -- 16-bit PCMCIA core support
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.
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.
12 * (C) 1999 David A. Hinds
13 * (C) 2003 - 2004 Dominik Brodowski
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>
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>
41 #include <asm/atomic.h>
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>
52 #include "cs_internal.h"
54 /*====================================================================*/
56 /* Module parameters */
58 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
59 MODULE_DESCRIPTION("PCMCIA Driver Services");
60 MODULE_LICENSE("GPL");
63 static int ds_pc_debug;
65 module_param_named(pc_debug, ds_pc_debug, int, 0644);
67 #define ds_dbg(lvl, fmt, arg...) do { \
68 if (ds_pc_debug > (lvl)) \
69 printk(KERN_DEBUG "ds: " fmt , ## arg); \
72 #define ds_dbg(lvl, fmt, arg...) do { } while (0)
75 /*====================================================================*/
77 /* Device user information */
79 #define USER_MAGIC 0x7ea4
80 #define CHECK_USER(u) \
81 (((u) == NULL) || ((u)->user_magic != USER_MAGIC))
82 typedef struct user_info_t {
84 int event_head, event_tail;
85 event_t event[MAX_EVENTS];
86 struct user_info_t *next;
87 struct pcmcia_bus_socket *socket;
90 /* Socket state information */
91 struct pcmcia_bus_socket {
93 struct pcmcia_callback callback;
96 wait_queue_head_t queue;
97 struct pcmcia_socket *parent;
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 */
106 u8 device_add_pending;
107 struct work_struct device_add;
109 static spinlock_t pcmcia_dev_list_lock;
111 static struct bus_type pcmcia_bus_type;
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
118 /*====================================================================*/
120 static int major_dev = -1;
122 static int unbind_request(struct pcmcia_bus_socket *s);
124 /*====================================================================*/
126 /* code which was in cs.c before */
128 /* String tables for error messages */
130 typedef struct lookup_t {
135 static const lookup_t error_table[] = {
136 { CS_SUCCESS, "Operation succeeded" },
137 { CS_BAD_ADAPTER, "Bad adapter" },
138 { CS_BAD_ATTRIBUTE, "Bad attribute", },
139 { CS_BAD_BASE, "Bad base address" },
140 { CS_BAD_EDC, "Bad EDC" },
141 { CS_BAD_IRQ, "Bad IRQ" },
142 { CS_BAD_OFFSET, "Bad offset" },
143 { CS_BAD_PAGE, "Bad page number" },
144 { CS_READ_FAILURE, "Read failure" },
145 { CS_BAD_SIZE, "Bad size" },
146 { CS_BAD_SOCKET, "Bad socket" },
147 { CS_BAD_TYPE, "Bad type" },
148 { CS_BAD_VCC, "Bad Vcc" },
149 { CS_BAD_VPP, "Bad Vpp" },
150 { CS_BAD_WINDOW, "Bad window" },
151 { CS_WRITE_FAILURE, "Write failure" },
152 { CS_NO_CARD, "No card present" },
153 { CS_UNSUPPORTED_FUNCTION, "Usupported function" },
154 { CS_UNSUPPORTED_MODE, "Unsupported mode" },
155 { CS_BAD_SPEED, "Bad speed" },
156 { CS_BUSY, "Resource busy" },
157 { CS_GENERAL_FAILURE, "General failure" },
158 { CS_WRITE_PROTECTED, "Write protected" },
159 { CS_BAD_ARG_LENGTH, "Bad argument length" },
160 { CS_BAD_ARGS, "Bad arguments" },
161 { CS_CONFIGURATION_LOCKED, "Configuration locked" },
162 { CS_IN_USE, "Resource in use" },
163 { CS_NO_MORE_ITEMS, "No more items" },
164 { CS_OUT_OF_RESOURCE, "Out of resource" },
165 { CS_BAD_HANDLE, "Bad handle" },
166 { CS_BAD_TUPLE, "Bad CIS tuple" }
170 static const lookup_t service_table[] = {
171 { AccessConfigurationRegister, "AccessConfigurationRegister" },
172 { AddSocketServices, "AddSocketServices" },
173 { AdjustResourceInfo, "AdjustResourceInfo" },
174 { CheckEraseQueue, "CheckEraseQueue" },
175 { CloseMemory, "CloseMemory" },
176 { DeregisterClient, "DeregisterClient" },
177 { DeregisterEraseQueue, "DeregisterEraseQueue" },
178 { GetCardServicesInfo, "GetCardServicesInfo" },
179 { GetClientInfo, "GetClientInfo" },
180 { GetConfigurationInfo, "GetConfigurationInfo" },
181 { GetEventMask, "GetEventMask" },
182 { GetFirstClient, "GetFirstClient" },
183 { GetFirstRegion, "GetFirstRegion" },
184 { GetFirstTuple, "GetFirstTuple" },
185 { GetNextClient, "GetNextClient" },
186 { GetNextRegion, "GetNextRegion" },
187 { GetNextTuple, "GetNextTuple" },
188 { GetStatus, "GetStatus" },
189 { GetTupleData, "GetTupleData" },
190 { MapMemPage, "MapMemPage" },
191 { ModifyConfiguration, "ModifyConfiguration" },
192 { ModifyWindow, "ModifyWindow" },
193 { OpenMemory, "OpenMemory" },
194 { ParseTuple, "ParseTuple" },
195 { ReadMemory, "ReadMemory" },
196 { RegisterClient, "RegisterClient" },
197 { RegisterEraseQueue, "RegisterEraseQueue" },
198 { RegisterMTD, "RegisterMTD" },
199 { ReleaseConfiguration, "ReleaseConfiguration" },
200 { ReleaseIO, "ReleaseIO" },
201 { ReleaseIRQ, "ReleaseIRQ" },
202 { ReleaseWindow, "ReleaseWindow" },
203 { RequestConfiguration, "RequestConfiguration" },
204 { RequestIO, "RequestIO" },
205 { RequestIRQ, "RequestIRQ" },
206 { RequestSocketMask, "RequestSocketMask" },
207 { RequestWindow, "RequestWindow" },
208 { ResetCard, "ResetCard" },
209 { SetEventMask, "SetEventMask" },
210 { ValidateCIS, "ValidateCIS" },
211 { WriteMemory, "WriteMemory" },
212 { BindDevice, "BindDevice" },
213 { BindMTD, "BindMTD" },
214 { ReportError, "ReportError" },
215 { SuspendCard, "SuspendCard" },
216 { ResumeCard, "ResumeCard" },
217 { EjectCard, "EjectCard" },
218 { InsertCard, "InsertCard" },
219 { ReplaceCIS, "ReplaceCIS" }
223 static int pcmcia_report_error(client_handle_t handle, error_info_t *err)
228 if (CHECK_HANDLE(handle))
231 struct pcmcia_device *p_dev = handle_to_pdev(handle);
232 printk(KERN_NOTICE "%s: ", p_dev->dev.bus_id);
235 for (i = 0; i < ARRAY_SIZE(service_table); i++)
236 if (service_table[i].key == err->func)
238 if (i < ARRAY_SIZE(service_table))
239 serv = service_table[i].msg;
241 serv = "Unknown service number";
243 for (i = 0; i < ARRAY_SIZE(error_table); i++)
244 if (error_table[i].key == err->retcode)
246 if (i < ARRAY_SIZE(error_table))
247 printk("%s: %s\n", serv, error_table[i].msg);
249 printk("%s: Unknown error code %#x\n", serv, err->retcode);
254 /* end of code which was in cs.c before */
256 /*======================================================================*/
258 void cs_error(client_handle_t handle, int func, int ret)
260 error_info_t err = { func, ret };
261 pcmcia_report_error(handle, &err);
263 EXPORT_SYMBOL(cs_error);
265 #ifdef CONFIG_PCMCIA_DEBUG
268 static void pcmcia_check_driver(struct pcmcia_driver *p_drv)
270 struct pcmcia_device_id *did = p_drv->id_table;
274 while (did && did->match_flags) {
275 for (i=0; i<4; i++) {
276 if (!did->prod_id[i])
279 hash = crc32(0, did->prod_id[i], strlen(did->prod_id[i]));
280 if (hash == did->prod_id_hash[i])
283 printk(KERN_DEBUG "pcmcia: %s: invalid hash for "
284 "product string \"%s\": is 0x%x, should "
285 "be 0x%x\n", p_drv->drv.name, did->prod_id[i],
286 did->prod_id_hash[i], hash);
295 static inline void pcmcia_check_driver(struct pcmcia_driver *p_drv) {
301 #ifdef CONFIG_PCMCIA_LOAD_CIS
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/
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.
312 static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename)
314 struct pcmcia_socket *s = dev->socket;
315 const struct firmware *fw;
323 ds_dbg(1, "trying to load firmware %s\n", filename);
325 if (strlen(filename) > 14)
328 snprintf(path, 20, "%s", filename);
330 if (request_firmware(&fw, path, &dev->dev) == 0) {
331 if (fw->size >= CISTPL_MAX_CIS_SIZE)
334 cis = kmalloc(sizeof(cisdump_t), GFP_KERNEL);
338 memset(cis, 0, sizeof(cisdump_t));
340 cis->Length = fw->size + 1;
341 memcpy(cis->Data, fw->data, fw->size);
343 if (!pcmcia_replace_cis(s, cis))
347 release_firmware(fw);
352 #else /* !CONFIG_PCMCIA_LOAD_CIS */
354 static inline int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename)
362 /*======================================================================*/
364 static struct pcmcia_driver * get_pcmcia_driver (dev_info_t *dev_info);
365 static struct pcmcia_bus_socket * get_socket_info_by_nr(unsigned int nr);
367 static void pcmcia_release_bus_socket(struct kref *refcount)
369 struct pcmcia_bus_socket *s = container_of(refcount, struct pcmcia_bus_socket, refcount);
370 pcmcia_put_socket(s->parent);
374 static void pcmcia_put_bus_socket(struct pcmcia_bus_socket *s)
376 kref_put(&s->refcount, pcmcia_release_bus_socket);
379 static struct pcmcia_bus_socket *pcmcia_get_bus_socket(struct pcmcia_bus_socket *s)
381 kref_get(&s->refcount);
386 * pcmcia_register_driver - register a PCMCIA driver with the bus core
388 * Registers a PCMCIA driver with the PCMCIA bus core.
390 static int pcmcia_device_probe(struct device *dev);
391 static int pcmcia_device_remove(struct device * dev);
393 int pcmcia_register_driver(struct pcmcia_driver *driver)
398 pcmcia_check_driver(driver);
400 /* initialize common fields */
401 driver->drv.bus = &pcmcia_bus_type;
402 driver->drv.owner = driver->owner;
403 driver->drv.probe = pcmcia_device_probe;
404 driver->drv.remove = pcmcia_device_remove;
406 return driver_register(&driver->drv);
408 EXPORT_SYMBOL(pcmcia_register_driver);
411 * pcmcia_unregister_driver - unregister a PCMCIA driver with the bus core
413 void pcmcia_unregister_driver(struct pcmcia_driver *driver)
415 driver_unregister(&driver->drv);
417 EXPORT_SYMBOL(pcmcia_unregister_driver);
419 #ifdef CONFIG_PROC_FS
420 static struct proc_dir_entry *proc_pccard = NULL;
422 static int proc_read_drivers_callback(struct device_driver *driver, void *d)
425 struct pcmcia_driver *p_drv = container_of(driver,
426 struct pcmcia_driver, drv);
428 *p += sprintf(*p, "%-24.24s 1 %d\n", p_drv->drv.name,
429 #ifdef CONFIG_MODULE_UNLOAD
430 (p_drv->owner) ? module_refcount(p_drv->owner) : 1
440 static int proc_read_drivers(char *buf, char **start, off_t pos,
441 int count, int *eof, void *data)
445 bus_for_each_drv(&pcmcia_bus_type, NULL,
446 (void *) &p, proc_read_drivers_callback);
452 /* pcmcia_device handling */
454 static struct pcmcia_device * pcmcia_get_dev(struct pcmcia_device *p_dev)
456 struct device *tmp_dev;
457 tmp_dev = get_device(&p_dev->dev);
460 return to_pcmcia_dev(tmp_dev);
463 static void pcmcia_put_dev(struct pcmcia_device *p_dev)
466 put_device(&p_dev->dev);
469 static void pcmcia_release_dev(struct device *dev)
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);
478 static int pcmcia_device_probe(struct device * dev)
480 struct pcmcia_device *p_dev;
481 struct pcmcia_driver *p_drv;
484 dev = get_device(dev);
488 p_dev = to_pcmcia_dev(dev);
489 p_drv = to_pcmcia_drv(dev->driver);
491 if (!try_module_get(p_drv->owner)) {
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);
506 module_put(p_drv->owner);
508 if ((ret) || !(p_drv->attach))
514 static int pcmcia_device_remove(struct device * dev)
516 struct pcmcia_device *p_dev;
517 struct pcmcia_driver *p_drv;
519 /* detach the "instance" */
520 p_dev = to_pcmcia_dev(dev);
521 p_drv = to_pcmcia_drv(dev->driver);
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);
529 module_put(p_drv->owner);
538 * pcmcia_device_query -- determine information about a pcmcia device
540 static int pcmcia_device_query(struct pcmcia_device *p_dev)
542 cistpl_manfid_t manf_id;
543 cistpl_funcid_t func_id;
544 cistpl_vers_1_t vers1;
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;
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;
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 "
568 p_dev->func_id = CISTPL_FUNCID_MEMORY;
569 p_dev->has_func_id = 1;
573 if (!pccard_read_tuple(p_dev->socket, p_dev->func, CISTPL_VERS_1,
575 for (i=0; i < vers1.ns; i++) {
579 tmp = vers1.str + vers1.ofs[i];
581 length = strlen(tmp) + 1;
582 if ((length < 3) || (length > 255))
585 p_dev->prod_id[i] = kmalloc(sizeof(char) * length,
587 if (!p_dev->prod_id[i])
590 p_dev->prod_id[i] = strncpy(p_dev->prod_id[i],
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.
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
606 static DECLARE_MUTEX(device_add_lock);
608 static struct pcmcia_device * pcmcia_device_add(struct pcmcia_bus_socket *s, unsigned int function)
610 struct pcmcia_device *p_dev;
613 s = pcmcia_get_bus_socket(s);
617 down(&device_add_lock);
619 /* max of 2 devices per card */
620 if (s->device_count == 2)
623 p_dev = kmalloc(sizeof(struct pcmcia_device), GFP_KERNEL);
626 memset(p_dev, 0, sizeof(struct pcmcia_device));
628 p_dev->socket = s->parent;
629 p_dev->device_no = (s->device_count++);
630 p_dev->func = function;
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);
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;
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);
648 pcmcia_device_query(p_dev);
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);
658 up(&device_add_lock);
666 up(&device_add_lock);
667 pcmcia_put_bus_socket(s);
673 static int pcmcia_card_add(struct pcmcia_socket *s)
676 cistpl_longlink_mfc_t mfc;
677 unsigned int no_funcs, i;
680 if (!(s->resource_setup_done))
681 return -EAGAIN; /* try again, but later... */
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");
690 if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC, &mfc))
695 /* this doesn't handle multifunction devices on one pcmcia function
697 for (i=0; i < no_funcs; i++)
698 pcmcia_device_add(s->pcmcia, i);
704 static void pcmcia_delayed_add_pseudo_device(void *data)
706 struct pcmcia_bus_socket *s = data;
707 pcmcia_device_add(s, 0);
708 s->device_add_pending = 0;
711 static inline void pcmcia_add_pseudo_device(struct pcmcia_bus_socket *s)
713 if (!s->device_add_pending) {
714 schedule_work(&s->device_add);
715 s->device_add_pending = 1;
720 static int pcmcia_requery(struct device *dev, void * _data)
722 struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
723 if (!p_dev->dev.driver)
724 pcmcia_device_query(p_dev);
729 static void pcmcia_bus_rescan(struct pcmcia_socket *skt)
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))
738 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
740 /* if no devices were added for this socket yet because of
741 * missing resource information or other trouble, we need to
744 int ret = pcmcia_card_add(skt);
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);
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);
759 static inline int pcmcia_devmatch(struct pcmcia_device *dev,
760 struct pcmcia_device_id *did)
762 if (did->match_flags & PCMCIA_DEV_ID_MATCH_MANF_ID) {
763 if ((!dev->has_manf_id) || (dev->manf_id != did->manf_id))
767 if (did->match_flags & PCMCIA_DEV_ID_MATCH_CARD_ID) {
768 if ((!dev->has_card_id) || (dev->card_id != did->card_id))
772 if (did->match_flags & PCMCIA_DEV_ID_MATCH_FUNCTION) {
773 if (dev->func != did->function)
777 if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID1) {
778 if (!dev->prod_id[0])
780 if (strcmp(did->prod_id[0], dev->prod_id[0]))
784 if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID2) {
785 if (!dev->prod_id[1])
787 if (strcmp(did->prod_id[1], dev->prod_id[1]))
791 if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID3) {
792 if (!dev->prod_id[2])
794 if (strcmp(did->prod_id[2], dev->prod_id[2]))
798 if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID4) {
799 if (!dev->prod_id[3])
801 if (strcmp(did->prod_id[3], dev->prod_id[3]))
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.
812 if (dev->device_no == 0)
813 pcmcia_add_pseudo_device(dev->socket->pcmcia);
815 if (dev->device_no != did->device_no)
819 if (did->match_flags & PCMCIA_DEV_ID_MATCH_FUNC_ID) {
820 if ((!dev->has_func_id) || (dev->func_id != did->func_id))
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)
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.
834 if (!dev->allow_func_id_match)
838 if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) {
839 if (!dev->socket->fake_cis)
840 pcmcia_load_firmware(dev, did->cisfile);
842 if (!dev->socket->fake_cis)
846 if (did->match_flags & PCMCIA_DEV_ID_MATCH_ANONYMOUS) {
851 if (dev->has_manf_id || dev->has_card_id || dev->has_func_id)
855 dev->dev.driver_data = (void *) did;
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;
866 /* matching by cardmgr */
867 if (p_dev->cardmgr == p_drv)
870 while (did && did->match_flags) {
871 if (pcmcia_devmatch(p_dev, did))
879 #ifdef CONFIG_HOTPLUG
881 static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
882 char *buffer, int buffer_size)
884 struct pcmcia_device *p_dev;
886 u32 hash[4] = { 0, 0, 0, 0};
891 p_dev = to_pcmcia_dev(dev);
893 /* calculate hashes */
894 for (i=0; i<4; i++) {
895 if (!p_dev->prod_id[i])
897 hash[i] = crc32(0, p_dev->prod_id[i], strlen(p_dev->prod_id[i]));
902 if (add_hotplug_env_var(envp, num_envp, &i,
903 buffer, buffer_size, &length,
905 p_dev->socket->sock))
908 if (add_hotplug_env_var(envp, num_envp, &i,
909 buffer, buffer_size, &length,
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,
936 static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
937 char *buffer, int buffer_size)
944 /************************ per-device sysfs output ***************************/
946 #define pcmcia_device_attr(field, test, format) \
947 static ssize_t field##_show (struct device *dev, struct device_attribute *attr, char *buf) \
949 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); \
950 return p_dev->test ? sprintf (buf, format, p_dev->field) : -ENODEV; \
953 #define pcmcia_device_stringattr(name, field) \
954 static ssize_t name##_show (struct device *dev, struct device_attribute *attr, char *buf) \
956 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); \
957 return p_dev->field ? sprintf (buf, "%s\n", p_dev->field) : -ENODEV; \
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]);
970 static ssize_t pcmcia_store_allow_func_id_match (struct device * dev, struct device_attribute *attr,
971 const char * buf, size_t count)
973 struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
977 down(&p_dev->socket->skt_sem);
978 p_dev->allow_func_id_match = 1;
979 up(&p_dev->socket->skt_sem);
981 bus_rescan_devices(&pcmcia_bus_type);
986 static struct device_attribute pcmcia_dev_attrs[] = {
987 __ATTR(function, 0444, func_show, NULL),
995 __ATTR(allow_func_id_match, 0200, NULL, pcmcia_store_allow_func_id_match),
1000 /*======================================================================
1002 These manage a ring buffer of events pending for one user process
1004 ======================================================================*/
1006 static int queue_empty(user_info_t *user)
1008 return (user->event_head == user->event_tail);
1011 static event_t get_queued_event(user_info_t *user)
1013 user->event_tail = (user->event_tail+1) % MAX_EVENTS;
1014 return user->event[user->event_tail];
1017 static void queue_event(user_info_t *user, event_t event)
1019 user->event_head = (user->event_head+1) % MAX_EVENTS;
1020 if (user->event_head == user->event_tail)
1021 user->event_tail = (user->event_tail+1) % MAX_EVENTS;
1022 user->event[user->event_head] = event;
1025 static void handle_event(struct pcmcia_bus_socket *s, event_t event)
1028 for (user = s->user; user; user = user->next)
1029 queue_event(user, event);
1030 wake_up_interruptible(&s->queue);
1034 /*======================================================================
1036 The card status event handler.
1038 ======================================================================*/
1040 struct send_event_data {
1041 struct pcmcia_socket *skt;
1046 static int send_event_callback(struct device *dev, void * _data)
1048 struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1049 struct send_event_data *data = _data;
1051 /* we get called for all sockets, but may only pass the event
1052 * for drivers _on the affected socket_ */
1053 if (p_dev->socket != data->skt)
1056 if (p_dev->client.state & (CLIENT_UNBOUND|CLIENT_STALE))
1059 if (p_dev->client.EventMask & data->event)
1060 return EVENT(&p_dev->client, data->event, data->priority);
1065 static int send_event(struct pcmcia_socket *s, event_t event, int priority)
1068 struct send_event_data private;
1069 struct pcmcia_bus_socket *skt = pcmcia_get_bus_socket(s->pcmcia);
1075 private.event = event;
1076 private.priority = priority;
1078 ret = bus_for_each_dev(&pcmcia_bus_type, NULL, &private, send_event_callback);
1080 pcmcia_put_bus_socket(skt);
1085 /* Normally, the event is passed to individual drivers after
1086 * informing userspace. Only for CS_EVENT_CARD_REMOVAL this
1087 * is inversed to maintain historic compatibility.
1090 static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
1092 struct pcmcia_bus_socket *s = skt->pcmcia;
1095 ds_dbg(1, "ds_event(0x%06x, %d, 0x%p)\n",
1096 event, priority, s);
1100 case CS_EVENT_CARD_REMOVAL:
1101 s->state &= ~DS_SOCKET_PRESENT;
1102 send_event(skt, event, priority);
1104 handle_event(s, event);
1107 case CS_EVENT_CARD_INSERTION:
1108 s->state |= DS_SOCKET_PRESENT;
1109 pcmcia_card_add(skt);
1110 handle_event(s, event);
1113 case CS_EVENT_EJECTION_REQUEST:
1114 ret = send_event(skt, event, priority);
1118 handle_event(s, event);
1119 send_event(skt, event, priority);
1127 /*======================================================================
1129 bind_request() and bind_device() are merged by now. Register_client()
1130 is called right at the end of bind_request(), during the driver's
1131 ->attach() call. Individual descriptions:
1133 bind_request() connects a socket to a particular client driver.
1134 It looks up the specified device ID in the list of registered
1135 drivers, binds it to the socket, and tries to create an instance
1136 of the device. unbind_request() deletes a driver instance.
1138 Bind_device() associates a device driver with a particular socket.
1139 It is normally called by Driver Services after it has identified
1140 a newly inserted card. An instance of that driver will then be
1141 eligible to register as a client of this socket.
1143 Register_client() uses the dev_info_t handle to match the
1144 caller with a socket. The driver must have already been bound
1145 to a socket with bind_device() -- in fact, bind_device()
1146 allocates the client structure that will be used.
1148 ======================================================================*/
1150 static int bind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info)
1152 struct pcmcia_driver *p_drv;
1153 struct pcmcia_device *p_dev;
1155 unsigned long flags;
1157 s = pcmcia_get_bus_socket(s);
1161 ds_dbg(2, "bind_request(%d, '%s')\n", s->parent->sock,
1162 (char *)bind_info->dev_info);
1164 p_drv = get_pcmcia_driver(&bind_info->dev_info);
1170 if (!try_module_get(p_drv->owner)) {
1172 goto err_put_driver;
1175 spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
1176 list_for_each_entry(p_dev, &s->devices_list, socket_device_list) {
1177 if (p_dev->func == bind_info->function) {
1178 if ((p_dev->dev.driver == &p_drv->drv)) {
1179 if (p_dev->cardmgr) {
1180 /* if there's already a device
1181 * registered, and it was registered
1182 * by userspace before, we need to
1183 * return the "instance". */
1184 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1185 bind_info->instance = p_dev->instance;
1187 goto err_put_module;
1189 /* the correct driver managed to bind
1190 * itself magically to the correct
1192 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1193 p_dev->cardmgr = p_drv;
1195 goto err_put_module;
1197 } else if (!p_dev->dev.driver) {
1198 /* there's already a device available where
1199 * no device has been bound to yet. So we don't
1200 * need to register a device! */
1201 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1206 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1208 p_dev = pcmcia_device_add(s, bind_info->function);
1211 goto err_put_module;
1215 p_dev->cardmgr = p_drv;
1217 /* if a driver is already running, we can abort */
1218 if (p_dev->dev.driver)
1219 goto err_put_module;
1222 * Prevent this racing with a card insertion.
1224 down(&s->parent->skt_sem);
1225 bus_rescan_devices(&pcmcia_bus_type);
1226 up(&s->parent->skt_sem);
1228 /* check whether the driver indeed matched. I don't care if this
1229 * is racy or not, because it can only happen on cardmgr access
1232 if (!(p_dev->dev.driver == &p_drv->drv))
1233 p_dev->cardmgr = NULL;
1236 module_put(p_drv->owner);
1238 put_driver(&p_drv->drv);
1240 pcmcia_put_bus_socket(s);
1243 } /* bind_request */
1246 int pcmcia_register_client(client_handle_t *handle, client_reg_t *req)
1248 client_t *client = NULL;
1249 struct pcmcia_socket *s;
1250 struct pcmcia_bus_socket *skt = NULL;
1251 struct pcmcia_device *p_dev = NULL;
1253 /* Look for unbound client with matching dev_info */
1254 down_read(&pcmcia_socket_list_rwsem);
1255 list_for_each_entry(s, &pcmcia_socket_list, socket_list) {
1256 unsigned long flags;
1258 if (s->state & SOCKET_CARDBUS)
1264 skt = pcmcia_get_bus_socket(skt);
1267 spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
1268 list_for_each_entry(p_dev, &skt->devices_list, socket_device_list) {
1269 struct pcmcia_driver *p_drv;
1270 p_dev = pcmcia_get_dev(p_dev);
1273 if (!(p_dev->client.state & CLIENT_UNBOUND) ||
1274 (!p_dev->dev.driver)) {
1275 pcmcia_put_dev(p_dev);
1278 p_drv = to_pcmcia_drv(p_dev->dev.driver);
1279 if (!strncmp(p_drv->drv.name, (char *)req->dev_info, DEV_NAME_LEN)) {
1280 client = &p_dev->client;
1281 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1284 pcmcia_put_dev(p_dev);
1286 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1287 pcmcia_put_bus_socket(skt);
1290 up_read(&pcmcia_socket_list_rwsem);
1291 if (!p_dev || !client)
1294 pcmcia_put_bus_socket(skt); /* safe, as we already hold a reference from bind_device */
1297 client->state &= ~CLIENT_UNBOUND;
1299 client->EventMask = req->EventMask;
1300 client->event_handler = req->event_handler;
1301 client->event_callback_args = req->event_callback_args;
1302 client->event_callback_args.client_handle = client;
1304 if (s->state & SOCKET_CARDBUS)
1305 client->state |= CLIENT_CARDBUS;
1307 if ((!(s->state & SOCKET_CARDBUS)) && (s->functions == 0) &&
1308 (client->Function != BIND_FN_ALL)) {
1309 cistpl_longlink_mfc_t mfc;
1310 if (pccard_read_tuple(s, client->Function, CISTPL_LONGLINK_MFC, &mfc)
1312 s->functions = mfc.nfn;
1315 s->config = kmalloc(sizeof(config_t) * s->functions,
1318 goto out_no_resource;
1319 memset(s->config, 0, sizeof(config_t) * s->functions);
1322 ds_dbg(1, "register_client(): client 0x%p, dev %s\n",
1323 client, p_dev->dev.bus_id);
1324 if (client->EventMask & CS_EVENT_REGISTRATION_COMPLETE)
1325 EVENT(client, CS_EVENT_REGISTRATION_COMPLETE, CS_EVENT_PRI_LOW);
1327 if ((s->state & (SOCKET_PRESENT|SOCKET_CARDBUS)) == SOCKET_PRESENT) {
1328 if (client->EventMask & CS_EVENT_CARD_INSERTION)
1329 EVENT(client, CS_EVENT_CARD_INSERTION, CS_EVENT_PRI_LOW);
1335 pcmcia_put_dev(p_dev);
1336 return CS_OUT_OF_RESOURCE;
1337 } /* register_client */
1338 EXPORT_SYMBOL(pcmcia_register_client);
1341 /*====================================================================*/
1343 extern struct pci_bus *pcmcia_lookup_bus(struct pcmcia_socket *s);
1345 static int get_device_info(struct pcmcia_bus_socket *s, bind_info_t *bind_info, int first)
1348 struct pcmcia_device *p_dev;
1349 unsigned long flags;
1352 #ifdef CONFIG_CARDBUS
1354 * Some unbelievably ugly code to associate the PCI cardbus
1355 * device and its driver with the PCMCIA "bind" information.
1358 struct pci_bus *bus;
1360 bus = pcmcia_lookup_bus(s->parent);
1362 struct list_head *list;
1363 struct pci_dev *dev = NULL;
1365 list = bus->devices.next;
1366 while (list != &bus->devices) {
1367 struct pci_dev *pdev = pci_dev_b(list);
1375 /* Try to handle "next" here some way? */
1377 if (dev && dev->driver) {
1378 strlcpy(bind_info->name, dev->driver->name, DEV_NAME_LEN);
1379 bind_info->major = 0;
1380 bind_info->minor = 0;
1381 bind_info->next = NULL;
1388 spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
1389 list_for_each_entry(p_dev, &s->devices_list, socket_device_list) {
1390 if (p_dev->func == bind_info->function) {
1391 p_dev = pcmcia_get_dev(p_dev);
1397 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1401 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1403 if ((!p_dev->instance) ||
1404 (p_dev->instance->state & DEV_CONFIG_PENDING)) {
1410 node = p_dev->instance->dev;
1412 for (node = p_dev->instance->dev; node; node = node->next)
1413 if (node == bind_info->next)
1420 strlcpy(bind_info->name, node->dev_name, DEV_NAME_LEN);
1421 bind_info->major = node->major;
1422 bind_info->minor = node->minor;
1423 bind_info->next = node->next;
1426 pcmcia_put_dev(p_dev);
1428 } /* get_device_info */
1430 /*====================================================================*/
1432 /* unbind _all_ devices attached to a given pcmcia_bus_socket. The
1433 * drivers have been called with EVENT_CARD_REMOVAL before.
1435 static int unbind_request(struct pcmcia_bus_socket *s)
1437 struct pcmcia_device *p_dev;
1438 unsigned long flags;
1440 ds_dbg(2, "unbind_request(%d)\n", s->parent->sock);
1442 s->device_count = 0;
1445 /* unregister all pcmcia_devices registered with this socket*/
1446 spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
1447 if (list_empty(&s->devices_list)) {
1448 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1451 p_dev = list_entry((&s->devices_list)->next, struct pcmcia_device, socket_device_list);
1452 list_del(&p_dev->socket_device_list);
1453 p_dev->client.state |= CLIENT_STALE;
1454 spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
1456 device_unregister(&p_dev->dev);
1460 } /* unbind_request */
1462 int pcmcia_deregister_client(client_handle_t handle)
1464 struct pcmcia_socket *s;
1466 struct pcmcia_device *p_dev = handle_to_pdev(handle);
1468 if (CHECK_HANDLE(handle))
1469 return CS_BAD_HANDLE;
1472 ds_dbg(1, "deregister_client(%p)\n", handle);
1474 if (handle->state & (CLIENT_IRQ_REQ|CLIENT_IO_REQ|CLIENT_CONFIG_LOCKED))
1476 for (i = 0; i < MAX_WIN; i++)
1477 if (handle->state & CLIENT_WIN_REQ(i))
1480 if (handle->state & CLIENT_STALE) {
1481 handle->client_magic = 0;
1482 handle->state &= ~CLIENT_STALE;
1483 pcmcia_put_dev(p_dev);
1485 handle->state = CLIENT_UNBOUND;
1486 handle->event_handler = NULL;
1491 printk(KERN_WARNING "ds: deregister_client was called too early.\n");
1493 } /* deregister_client */
1494 EXPORT_SYMBOL(pcmcia_deregister_client);
1497 /*======================================================================
1499 The user-mode PC Card device interface
1501 ======================================================================*/
1503 static int ds_open(struct inode *inode, struct file *file)
1505 socket_t i = iminor(inode);
1506 struct pcmcia_bus_socket *s;
1509 ds_dbg(0, "ds_open(socket %d)\n", i);
1511 s = get_socket_info_by_nr(i);
1514 s = pcmcia_get_bus_socket(s);
1518 if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
1519 if (s->state & DS_SOCKET_BUSY) {
1520 pcmcia_put_bus_socket(s);
1524 s->state |= DS_SOCKET_BUSY;
1527 user = kmalloc(sizeof(user_info_t), GFP_KERNEL);
1529 pcmcia_put_bus_socket(s);
1532 user->event_tail = user->event_head = 0;
1533 user->next = s->user;
1534 user->user_magic = USER_MAGIC;
1537 file->private_data = user;
1539 if (s->state & DS_SOCKET_PRESENT)
1540 queue_event(user, CS_EVENT_CARD_INSERTION);
1544 /*====================================================================*/
1546 static int ds_release(struct inode *inode, struct file *file)
1548 struct pcmcia_bus_socket *s;
1549 user_info_t *user, **link;
1551 ds_dbg(0, "ds_release(socket %d)\n", iminor(inode));
1553 user = file->private_data;
1554 if (CHECK_USER(user))
1559 /* Unlink user data structure */
1560 if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
1561 s->state &= ~DS_SOCKET_BUSY;
1563 file->private_data = NULL;
1564 for (link = &s->user; *link; link = &(*link)->next)
1565 if (*link == user) break;
1569 user->user_magic = 0;
1571 pcmcia_put_bus_socket(s);
1576 /*====================================================================*/
1578 static ssize_t ds_read(struct file *file, char __user *buf,
1579 size_t count, loff_t *ppos)
1581 struct pcmcia_bus_socket *s;
1585 ds_dbg(2, "ds_read(socket %d)\n", iminor(file->f_dentry->d_inode));
1590 user = file->private_data;
1591 if (CHECK_USER(user))
1595 if (s->state & DS_SOCKET_DEAD)
1598 ret = wait_event_interruptible(s->queue, !queue_empty(user));
1600 ret = put_user(get_queued_event(user), (int __user *)buf) ? -EFAULT : 4;
1605 /*====================================================================*/
1607 static ssize_t ds_write(struct file *file, const char __user *buf,
1608 size_t count, loff_t *ppos)
1610 ds_dbg(2, "ds_write(socket %d)\n", iminor(file->f_dentry->d_inode));
1614 if ((file->f_flags & O_ACCMODE) == O_RDONLY)
1620 /*====================================================================*/
1622 /* No kernel lock - fine */
1623 static u_int ds_poll(struct file *file, poll_table *wait)
1625 struct pcmcia_bus_socket *s;
1628 ds_dbg(2, "ds_poll(socket %d)\n", iminor(file->f_dentry->d_inode));
1630 user = file->private_data;
1631 if (CHECK_USER(user))
1635 * We don't check for a dead socket here since that
1636 * will send cardmgr into an endless spin.
1638 poll_wait(file, &s->queue, wait);
1639 if (!queue_empty(user))
1640 return POLLIN | POLLRDNORM;
1644 /*====================================================================*/
1646 extern int pcmcia_adjust_resource_info(adjust_t *adj);
1648 static int ds_ioctl(struct inode * inode, struct file * file,
1649 u_int cmd, u_long arg)
1651 struct pcmcia_bus_socket *s;
1652 void __user *uarg = (char __user *)arg;
1655 ds_ioctl_arg_t *buf;
1658 ds_dbg(2, "ds_ioctl(socket %d, %#x, %#lx)\n", iminor(inode), cmd, arg);
1660 user = file->private_data;
1661 if (CHECK_USER(user))
1665 if (s->state & DS_SOCKET_DEAD)
1668 size = (cmd & IOCSIZE_MASK) >> IOCSIZE_SHIFT;
1669 if (size > sizeof(ds_ioctl_arg_t)) return -EINVAL;
1671 /* Permission check */
1672 if (!(cmd & IOC_OUT) && !capable(CAP_SYS_ADMIN))
1676 if (!access_ok(VERIFY_READ, uarg, size)) {
1677 ds_dbg(3, "ds_ioctl(): verify_read = %d\n", -EFAULT);
1681 if (cmd & IOC_OUT) {
1682 if (!access_ok(VERIFY_WRITE, uarg, size)) {
1683 ds_dbg(3, "ds_ioctl(): verify_write = %d\n", -EFAULT);
1687 buf = kmalloc(sizeof(ds_ioctl_arg_t), GFP_KERNEL);
1693 if (cmd & IOC_IN) __copy_from_user((char *)buf, uarg, size);
1696 case DS_ADJUST_RESOURCE_INFO:
1697 ret = pcmcia_adjust_resource_info(&buf->adjust);
1699 case DS_GET_CARD_SERVICES_INFO:
1700 ret = pcmcia_get_card_services_info(&buf->servinfo);
1702 case DS_GET_CONFIGURATION_INFO:
1703 if (buf->config.Function &&
1704 (buf->config.Function >= s->parent->functions))
1707 ret = pccard_get_configuration_info(s->parent,
1708 buf->config.Function, &buf->config);
1710 case DS_GET_FIRST_TUPLE:
1711 down(&s->parent->skt_sem);
1712 pcmcia_validate_mem(s->parent);
1713 up(&s->parent->skt_sem);
1714 ret = pccard_get_first_tuple(s->parent, BIND_FN_ALL, &buf->tuple);
1716 case DS_GET_NEXT_TUPLE:
1717 ret = pccard_get_next_tuple(s->parent, BIND_FN_ALL, &buf->tuple);
1719 case DS_GET_TUPLE_DATA:
1720 buf->tuple.TupleData = buf->tuple_parse.data;
1721 buf->tuple.TupleDataMax = sizeof(buf->tuple_parse.data);
1722 ret = pccard_get_tuple_data(s->parent, &buf->tuple);
1724 case DS_PARSE_TUPLE:
1725 buf->tuple.TupleData = buf->tuple_parse.data;
1726 ret = pccard_parse_tuple(&buf->tuple, &buf->tuple_parse.parse);
1729 ret = pccard_reset_card(s->parent);
1732 if (buf->status.Function &&
1733 (buf->status.Function >= s->parent->functions))
1736 ret = pccard_get_status(s->parent, buf->status.Function, &buf->status);
1738 case DS_VALIDATE_CIS:
1739 down(&s->parent->skt_sem);
1740 pcmcia_validate_mem(s->parent);
1741 up(&s->parent->skt_sem);
1742 ret = pccard_validate_cis(s->parent, BIND_FN_ALL, &buf->cisinfo);
1744 case DS_SUSPEND_CARD:
1745 ret = pcmcia_suspend_card(s->parent);
1747 case DS_RESUME_CARD:
1748 ret = pcmcia_resume_card(s->parent);
1751 err = pcmcia_eject_card(s->parent);
1753 case DS_INSERT_CARD:
1754 err = pcmcia_insert_card(s->parent);
1756 case DS_ACCESS_CONFIGURATION_REGISTER:
1757 if ((buf->conf_reg.Action == CS_WRITE) && !capable(CAP_SYS_ADMIN)) {
1761 if (buf->conf_reg.Function &&
1762 (buf->conf_reg.Function >= s->parent->functions))
1765 ret = pccard_access_configuration_register(s->parent,
1766 buf->conf_reg.Function, &buf->conf_reg);
1768 case DS_GET_FIRST_REGION:
1769 case DS_GET_NEXT_REGION:
1771 if (!capable(CAP_SYS_ADMIN)) {
1775 static int printed = 0;
1777 printk(KERN_WARNING "2.6. kernels use pcmciamtd instead of memory_cs.c and do not require special\n");
1778 printk(KERN_WARNING "MTD handling any more.\n");
1785 case DS_GET_FIRST_WINDOW:
1786 ret = pcmcia_get_window(s->parent, &buf->win_info.handle, 0,
1787 &buf->win_info.window);
1789 case DS_GET_NEXT_WINDOW:
1790 ret = pcmcia_get_window(s->parent, &buf->win_info.handle,
1791 buf->win_info.handle->index + 1, &buf->win_info.window);
1793 case DS_GET_MEM_PAGE:
1794 ret = pcmcia_get_mem_page(buf->win_info.handle,
1795 &buf->win_info.map);
1797 case DS_REPLACE_CIS:
1798 ret = pcmcia_replace_cis(s->parent, &buf->cisdump);
1800 case DS_BIND_REQUEST:
1801 if (!capable(CAP_SYS_ADMIN)) {
1805 err = bind_request(s, &buf->bind_info);
1807 case DS_GET_DEVICE_INFO:
1808 err = get_device_info(s, &buf->bind_info, 1);
1810 case DS_GET_NEXT_DEVICE:
1811 err = get_device_info(s, &buf->bind_info, 0);
1813 case DS_UNBIND_REQUEST:
1820 if ((err == 0) && (ret != CS_SUCCESS)) {
1821 ds_dbg(2, "ds_ioctl: ret = %d\n", ret);
1823 case CS_BAD_SOCKET: case CS_NO_CARD:
1824 err = -ENODEV; break;
1825 case CS_BAD_ARGS: case CS_BAD_ATTRIBUTE: case CS_BAD_IRQ:
1827 err = -EINVAL; break;
1829 err = -EBUSY; break;
1830 case CS_OUT_OF_RESOURCE:
1831 err = -ENOSPC; break;
1832 case CS_NO_MORE_ITEMS:
1833 err = -ENODATA; break;
1834 case CS_UNSUPPORTED_FUNCTION:
1835 err = -ENOSYS; break;
1841 if (cmd & IOC_OUT) {
1842 if (__copy_to_user(uarg, (char *)buf, size))
1851 /*====================================================================*/
1853 static struct file_operations ds_fops = {
1854 .owner = THIS_MODULE,
1856 .release = ds_release,
1863 static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev)
1865 struct pcmcia_socket *socket = class_get_devdata(class_dev);
1866 struct pcmcia_bus_socket *s;
1869 s = kmalloc(sizeof(struct pcmcia_bus_socket), GFP_KERNEL);
1872 memset(s, 0, sizeof(struct pcmcia_bus_socket));
1874 /* get reference to parent socket */
1875 s->parent = pcmcia_get_socket(socket);
1877 printk(KERN_ERR "PCMCIA obtaining reference to socket %p failed\n", socket);
1882 kref_init(&s->refcount);
1885 * Ugly. But we want to wait for the socket threads to have started up.
1886 * We really should let the drivers themselves drive some of this..
1890 init_waitqueue_head(&s->queue);
1891 INIT_LIST_HEAD(&s->devices_list);
1892 INIT_WORK(&s->device_add, pcmcia_delayed_add_pseudo_device, s);
1894 /* Set up hotline to Card Services */
1895 s->callback.owner = THIS_MODULE;
1896 s->callback.event = &ds_event;
1897 s->callback.requery = &pcmcia_bus_rescan;
1900 ret = pccard_register_pcmcia(socket, &s->callback);
1902 printk(KERN_ERR "PCMCIA registration PCCard core failed for socket %p\n", socket);
1903 pcmcia_put_bus_socket(s);
1904 socket->pcmcia = NULL;
1912 static void pcmcia_bus_remove_socket(struct class_device *class_dev)
1914 struct pcmcia_socket *socket = class_get_devdata(class_dev);
1916 if (!socket || !socket->pcmcia)
1919 pccard_register_pcmcia(socket, NULL);
1921 socket->pcmcia->state |= DS_SOCKET_DEAD;
1922 pcmcia_put_bus_socket(socket->pcmcia);
1923 socket->pcmcia = NULL;
1929 /* the pcmcia_bus_interface is used to handle pcmcia socket devices */
1930 static struct class_interface pcmcia_bus_interface = {
1931 .class = &pcmcia_socket_class,
1932 .add = &pcmcia_bus_add_socket,
1933 .remove = &pcmcia_bus_remove_socket,
1937 static struct bus_type pcmcia_bus_type = {
1939 .hotplug = pcmcia_bus_hotplug,
1940 .match = pcmcia_bus_match,
1941 .dev_attrs = pcmcia_dev_attrs,
1945 static int __init init_pcmcia_bus(void)
1949 spin_lock_init(&pcmcia_dev_list_lock);
1951 bus_register(&pcmcia_bus_type);
1952 class_interface_register(&pcmcia_bus_interface);
1954 /* Set up character device for user mode clients */
1955 i = register_chrdev(0, "pcmcia", &ds_fops);
1957 printk(KERN_NOTICE "unable to find a free device # for "
1958 "Driver Services (error=%d)\n", i);
1962 #ifdef CONFIG_PROC_FS
1963 proc_pccard = proc_mkdir("pccard", proc_bus);
1965 create_proc_read_entry("drivers",0,proc_pccard,proc_read_drivers,NULL);
1970 fs_initcall(init_pcmcia_bus); /* one level after subsys_initcall so that
1971 * pcmcia_socket_class is already registered */
1974 static void __exit exit_pcmcia_bus(void)
1976 class_interface_unregister(&pcmcia_bus_interface);
1978 #ifdef CONFIG_PROC_FS
1980 remove_proc_entry("drivers", proc_pccard);
1981 remove_proc_entry("pccard", proc_bus);
1984 if (major_dev != -1)
1985 unregister_chrdev(major_dev, "pcmcia");
1987 bus_unregister(&pcmcia_bus_type);
1989 module_exit(exit_pcmcia_bus);
1993 /* helpers for backwards-compatible functions */
1995 static struct pcmcia_bus_socket * get_socket_info_by_nr(unsigned int nr)
1997 struct pcmcia_socket * s = pcmcia_get_socket_by_nr(nr);
2004 /* backwards-compatible accessing of driver --- by name! */
2006 static struct pcmcia_driver * get_pcmcia_driver (dev_info_t *dev_info)
2008 struct device_driver *drv;
2009 struct pcmcia_driver *p_drv;
2011 drv = driver_find((char *) dev_info, &pcmcia_bus_type);
2015 p_drv = container_of(drv, struct pcmcia_driver, drv);