xref: /openbmc/linux/drivers/pcmcia/ds.c (revision f3539c12)
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 - 2010	Dominik Brodowski
14  */
15 
16 #include <linux/kernel.h>
17 #include <linux/module.h>
18 #include <linux/init.h>
19 #include <linux/errno.h>
20 #include <linux/list.h>
21 #include <linux/delay.h>
22 #include <linux/workqueue.h>
23 #include <linux/crc32.h>
24 #include <linux/firmware.h>
25 #include <linux/kref.h>
26 #include <linux/dma-mapping.h>
27 #include <linux/slab.h>
28 
29 #include <pcmcia/cistpl.h>
30 #include <pcmcia/ds.h>
31 #include <pcmcia/ss.h>
32 
33 #include "cs_internal.h"
34 
35 /*====================================================================*/
36 
37 /* Module parameters */
38 
39 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
40 MODULE_DESCRIPTION("PCMCIA Driver Services");
41 MODULE_LICENSE("GPL");
42 
43 
44 /*====================================================================*/
45 
46 static void pcmcia_check_driver(struct pcmcia_driver *p_drv)
47 {
48 	const struct pcmcia_device_id *did = p_drv->id_table;
49 	unsigned int i;
50 	u32 hash;
51 
52 	if (!p_drv->probe || !p_drv->remove)
53 		printk(KERN_DEBUG "pcmcia: %s lacks a requisite callback "
54 		       "function\n", p_drv->name);
55 
56 	while (did && did->match_flags) {
57 		for (i = 0; i < 4; i++) {
58 			if (!did->prod_id[i])
59 				continue;
60 
61 			hash = crc32(0, did->prod_id[i], strlen(did->prod_id[i]));
62 			if (hash == did->prod_id_hash[i])
63 				continue;
64 
65 			printk(KERN_DEBUG "pcmcia: %s: invalid hash for "
66 			       "product string \"%s\": is 0x%x, should "
67 			       "be 0x%x\n", p_drv->name, did->prod_id[i],
68 			       did->prod_id_hash[i], hash);
69 			printk(KERN_DEBUG "pcmcia: see "
70 				"Documentation/pcmcia/devicetable.txt for "
71 				"details\n");
72 		}
73 		did++;
74 	}
75 
76 	return;
77 }
78 
79 
80 /*======================================================================*/
81 
82 
83 struct pcmcia_dynid {
84 	struct list_head		node;
85 	struct pcmcia_device_id		id;
86 };
87 
88 /**
89  * pcmcia_store_new_id - add a new PCMCIA device ID to this driver and re-probe devices
90  * @driver: target device driver
91  * @buf: buffer for scanning device ID data
92  * @count: input size
93  *
94  * Adds a new dynamic PCMCIA device ID to this driver,
95  * and causes the driver to probe for all devices again.
96  */
97 static ssize_t
98 pcmcia_store_new_id(struct device_driver *driver, const char *buf, size_t count)
99 {
100 	struct pcmcia_dynid *dynid;
101 	struct pcmcia_driver *pdrv = to_pcmcia_drv(driver);
102 	__u16 match_flags, manf_id, card_id;
103 	__u8 func_id, function, device_no;
104 	__u32 prod_id_hash[4] = {0, 0, 0, 0};
105 	int fields = 0;
106 	int retval = 0;
107 
108 	fields = sscanf(buf, "%hx %hx %hx %hhx %hhx %hhx %x %x %x %x",
109 			&match_flags, &manf_id, &card_id, &func_id, &function, &device_no,
110 			&prod_id_hash[0], &prod_id_hash[1], &prod_id_hash[2], &prod_id_hash[3]);
111 	if (fields < 6)
112 		return -EINVAL;
113 
114 	dynid = kzalloc(sizeof(struct pcmcia_dynid), GFP_KERNEL);
115 	if (!dynid)
116 		return -ENOMEM;
117 
118 	dynid->id.match_flags = match_flags;
119 	dynid->id.manf_id = manf_id;
120 	dynid->id.card_id = card_id;
121 	dynid->id.func_id = func_id;
122 	dynid->id.function = function;
123 	dynid->id.device_no = device_no;
124 	memcpy(dynid->id.prod_id_hash, prod_id_hash, sizeof(__u32) * 4);
125 
126 	mutex_lock(&pdrv->dynids.lock);
127 	list_add_tail(&dynid->node, &pdrv->dynids.list);
128 	mutex_unlock(&pdrv->dynids.lock);
129 
130 	retval = driver_attach(&pdrv->drv);
131 
132 	if (retval)
133 		return retval;
134 	return count;
135 }
136 static DRIVER_ATTR(new_id, S_IWUSR, NULL, pcmcia_store_new_id);
137 
138 static void
139 pcmcia_free_dynids(struct pcmcia_driver *drv)
140 {
141 	struct pcmcia_dynid *dynid, *n;
142 
143 	mutex_lock(&drv->dynids.lock);
144 	list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
145 		list_del(&dynid->node);
146 		kfree(dynid);
147 	}
148 	mutex_unlock(&drv->dynids.lock);
149 }
150 
151 static int
152 pcmcia_create_newid_file(struct pcmcia_driver *drv)
153 {
154 	int error = 0;
155 	if (drv->probe != NULL)
156 		error = driver_create_file(&drv->drv, &driver_attr_new_id);
157 	return error;
158 }
159 
160 static void
161 pcmcia_remove_newid_file(struct pcmcia_driver *drv)
162 {
163 	driver_remove_file(&drv->drv, &driver_attr_new_id);
164 }
165 
166 /**
167  * pcmcia_register_driver - register a PCMCIA driver with the bus core
168  * @driver: the &driver being registered
169  *
170  * Registers a PCMCIA driver with the PCMCIA bus core.
171  */
172 int pcmcia_register_driver(struct pcmcia_driver *driver)
173 {
174 	int error;
175 
176 	if (!driver)
177 		return -EINVAL;
178 
179 	pcmcia_check_driver(driver);
180 
181 	/* initialize common fields */
182 	driver->drv.bus = &pcmcia_bus_type;
183 	driver->drv.owner = driver->owner;
184 	driver->drv.name = driver->name;
185 	mutex_init(&driver->dynids.lock);
186 	INIT_LIST_HEAD(&driver->dynids.list);
187 
188 	pr_debug("registering driver %s\n", driver->name);
189 
190 	error = driver_register(&driver->drv);
191 	if (error < 0)
192 		return error;
193 
194 	error = pcmcia_create_newid_file(driver);
195 	if (error)
196 		driver_unregister(&driver->drv);
197 
198 	return error;
199 }
200 EXPORT_SYMBOL(pcmcia_register_driver);
201 
202 /**
203  * pcmcia_unregister_driver - unregister a PCMCIA driver with the bus core
204  * @driver: the &driver being unregistered
205  */
206 void pcmcia_unregister_driver(struct pcmcia_driver *driver)
207 {
208 	pr_debug("unregistering driver %s\n", driver->name);
209 	pcmcia_remove_newid_file(driver);
210 	driver_unregister(&driver->drv);
211 	pcmcia_free_dynids(driver);
212 }
213 EXPORT_SYMBOL(pcmcia_unregister_driver);
214 
215 
216 /* pcmcia_device handling */
217 
218 static struct pcmcia_device *pcmcia_get_dev(struct pcmcia_device *p_dev)
219 {
220 	struct device *tmp_dev;
221 	tmp_dev = get_device(&p_dev->dev);
222 	if (!tmp_dev)
223 		return NULL;
224 	return to_pcmcia_dev(tmp_dev);
225 }
226 
227 static void pcmcia_put_dev(struct pcmcia_device *p_dev)
228 {
229 	if (p_dev)
230 		put_device(&p_dev->dev);
231 }
232 
233 static void pcmcia_release_function(struct kref *ref)
234 {
235 	struct config_t *c = container_of(ref, struct config_t, ref);
236 	pr_debug("releasing config_t\n");
237 	kfree(c);
238 }
239 
240 static void pcmcia_release_dev(struct device *dev)
241 {
242 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
243 	int i;
244 	dev_dbg(dev, "releasing device\n");
245 	pcmcia_put_socket(p_dev->socket);
246 	for (i = 0; i < 4; i++)
247 		kfree(p_dev->prod_id[i]);
248 	kfree(p_dev->devname);
249 	kref_put(&p_dev->function_config->ref, pcmcia_release_function);
250 	kfree(p_dev);
251 }
252 
253 
254 static int pcmcia_device_probe(struct device *dev)
255 {
256 	struct pcmcia_device *p_dev;
257 	struct pcmcia_driver *p_drv;
258 	struct pcmcia_socket *s;
259 	cistpl_config_t cis_config;
260 	int ret = 0;
261 
262 	dev = get_device(dev);
263 	if (!dev)
264 		return -ENODEV;
265 
266 	p_dev = to_pcmcia_dev(dev);
267 	p_drv = to_pcmcia_drv(dev->driver);
268 	s = p_dev->socket;
269 
270 	dev_dbg(dev, "trying to bind to %s\n", p_drv->name);
271 
272 	if ((!p_drv->probe) || (!p_dev->function_config) ||
273 	    (!try_module_get(p_drv->owner))) {
274 		ret = -EINVAL;
275 		goto put_dev;
276 	}
277 
278 	/* set up some more device information */
279 	ret = pccard_read_tuple(p_dev->socket, p_dev->func, CISTPL_CONFIG,
280 				&cis_config);
281 	if (!ret) {
282 		p_dev->config_base = cis_config.base;
283 		p_dev->config_regs = cis_config.rmask[0];
284 		dev_dbg(dev, "base %x, regs %x", p_dev->config_base,
285 			p_dev->config_regs);
286 	} else {
287 		dev_info(dev,
288 			 "pcmcia: could not parse base and rmask0 of CIS\n");
289 		p_dev->config_base = 0;
290 		p_dev->config_regs = 0;
291 	}
292 
293 	ret = p_drv->probe(p_dev);
294 	if (ret) {
295 		dev_dbg(dev, "binding to %s failed with %d\n",
296 			   p_drv->name, ret);
297 		goto put_module;
298 	}
299 	dev_dbg(dev, "%s bound: Vpp %d.%d, idx %x, IRQ %d", p_drv->name,
300 		p_dev->vpp/10, p_dev->vpp%10, p_dev->config_index, p_dev->irq);
301 	dev_dbg(dev, "resources: ioport %pR %pR iomem %pR %pR %pR",
302 		p_dev->resource[0], p_dev->resource[1], p_dev->resource[2],
303 		p_dev->resource[3], p_dev->resource[4]);
304 
305 	mutex_lock(&s->ops_mutex);
306 	if ((s->pcmcia_pfc) &&
307 	    (p_dev->socket->device_count == 1) && (p_dev->device_no == 0))
308 		pcmcia_parse_uevents(s, PCMCIA_UEVENT_REQUERY);
309 	mutex_unlock(&s->ops_mutex);
310 
311 put_module:
312 	if (ret)
313 		module_put(p_drv->owner);
314 put_dev:
315 	if (ret)
316 		put_device(dev);
317 	return ret;
318 }
319 
320 
321 /*
322  * Removes a PCMCIA card from the device tree and socket list.
323  */
324 static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *leftover)
325 {
326 	struct pcmcia_device	*p_dev;
327 	struct pcmcia_device	*tmp;
328 
329 	dev_dbg(leftover ? &leftover->dev : &s->dev,
330 		   "pcmcia_card_remove(%d) %s\n", s->sock,
331 		   leftover ? leftover->devname : "");
332 
333 	mutex_lock(&s->ops_mutex);
334 	if (!leftover)
335 		s->device_count = 0;
336 	else
337 		s->device_count = 1;
338 	mutex_unlock(&s->ops_mutex);
339 
340 	/* unregister all pcmcia_devices registered with this socket, except leftover */
341 	list_for_each_entry_safe(p_dev, tmp, &s->devices_list, socket_device_list) {
342 		if (p_dev == leftover)
343 			continue;
344 
345 		mutex_lock(&s->ops_mutex);
346 		list_del(&p_dev->socket_device_list);
347 		mutex_unlock(&s->ops_mutex);
348 
349 		dev_dbg(&p_dev->dev, "unregistering device\n");
350 		device_unregister(&p_dev->dev);
351 	}
352 
353 	return;
354 }
355 
356 static int pcmcia_device_remove(struct device *dev)
357 {
358 	struct pcmcia_device *p_dev;
359 	struct pcmcia_driver *p_drv;
360 	int i;
361 
362 	p_dev = to_pcmcia_dev(dev);
363 	p_drv = to_pcmcia_drv(dev->driver);
364 
365 	dev_dbg(dev, "removing device\n");
366 
367 	/* If we're removing the primary module driving a
368 	 * pseudo multi-function card, we need to unbind
369 	 * all devices
370 	 */
371 	if ((p_dev->socket->pcmcia_pfc) &&
372 	    (p_dev->socket->device_count > 0) &&
373 	    (p_dev->device_no == 0))
374 		pcmcia_card_remove(p_dev->socket, p_dev);
375 
376 	/* detach the "instance" */
377 	if (!p_drv)
378 		return 0;
379 
380 	if (p_drv->remove)
381 		p_drv->remove(p_dev);
382 
383 	/* check for proper unloading */
384 	if (p_dev->_irq || p_dev->_io || p_dev->_locked)
385 		dev_info(dev,
386 			 "pcmcia: driver %s did not release config properly\n",
387 			 p_drv->name);
388 
389 	for (i = 0; i < MAX_WIN; i++)
390 		if (p_dev->_win & CLIENT_WIN_REQ(i))
391 			dev_info(dev,
392 				 "pcmcia: driver %s did not release window properly\n",
393 				 p_drv->name);
394 
395 	/* references from pcmcia_probe_device */
396 	pcmcia_put_dev(p_dev);
397 	module_put(p_drv->owner);
398 
399 	return 0;
400 }
401 
402 
403 /*
404  * pcmcia_device_query -- determine information about a pcmcia device
405  */
406 static int pcmcia_device_query(struct pcmcia_device *p_dev)
407 {
408 	cistpl_manfid_t manf_id;
409 	cistpl_funcid_t func_id;
410 	cistpl_vers_1_t	*vers1;
411 	unsigned int i;
412 
413 	vers1 = kmalloc(sizeof(*vers1), GFP_KERNEL);
414 	if (!vers1)
415 		return -ENOMEM;
416 
417 	if (!pccard_read_tuple(p_dev->socket, BIND_FN_ALL,
418 			       CISTPL_MANFID, &manf_id)) {
419 		mutex_lock(&p_dev->socket->ops_mutex);
420 		p_dev->manf_id = manf_id.manf;
421 		p_dev->card_id = manf_id.card;
422 		p_dev->has_manf_id = 1;
423 		p_dev->has_card_id = 1;
424 		mutex_unlock(&p_dev->socket->ops_mutex);
425 	}
426 
427 	if (!pccard_read_tuple(p_dev->socket, p_dev->func,
428 			       CISTPL_FUNCID, &func_id)) {
429 		mutex_lock(&p_dev->socket->ops_mutex);
430 		p_dev->func_id = func_id.func;
431 		p_dev->has_func_id = 1;
432 		mutex_unlock(&p_dev->socket->ops_mutex);
433 	} else {
434 		/* rule of thumb: cards with no FUNCID, but with
435 		 * common memory device geometry information, are
436 		 * probably memory cards (from pcmcia-cs) */
437 		cistpl_device_geo_t *devgeo;
438 
439 		devgeo = kmalloc(sizeof(*devgeo), GFP_KERNEL);
440 		if (!devgeo) {
441 			kfree(vers1);
442 			return -ENOMEM;
443 		}
444 		if (!pccard_read_tuple(p_dev->socket, p_dev->func,
445 				      CISTPL_DEVICE_GEO, devgeo)) {
446 			dev_dbg(&p_dev->dev,
447 				   "mem device geometry probably means "
448 				   "FUNCID_MEMORY\n");
449 			mutex_lock(&p_dev->socket->ops_mutex);
450 			p_dev->func_id = CISTPL_FUNCID_MEMORY;
451 			p_dev->has_func_id = 1;
452 			mutex_unlock(&p_dev->socket->ops_mutex);
453 		}
454 		kfree(devgeo);
455 	}
456 
457 	if (!pccard_read_tuple(p_dev->socket, BIND_FN_ALL, CISTPL_VERS_1,
458 			       vers1)) {
459 		mutex_lock(&p_dev->socket->ops_mutex);
460 		for (i = 0; i < min_t(unsigned int, 4, vers1->ns); i++) {
461 			char *tmp;
462 			unsigned int length;
463 			char *new;
464 
465 			tmp = vers1->str + vers1->ofs[i];
466 
467 			length = strlen(tmp) + 1;
468 			if ((length < 2) || (length > 255))
469 				continue;
470 
471 			new = kstrdup(tmp, GFP_KERNEL);
472 			if (!new)
473 				continue;
474 
475 			tmp = p_dev->prod_id[i];
476 			p_dev->prod_id[i] = new;
477 			kfree(tmp);
478 		}
479 		mutex_unlock(&p_dev->socket->ops_mutex);
480 	}
481 
482 	kfree(vers1);
483 	return 0;
484 }
485 
486 
487 static struct pcmcia_device *pcmcia_device_add(struct pcmcia_socket *s,
488 					       unsigned int function)
489 {
490 	struct pcmcia_device *p_dev, *tmp_dev;
491 	int i;
492 
493 	s = pcmcia_get_socket(s);
494 	if (!s)
495 		return NULL;
496 
497 	pr_debug("adding device to %d, function %d\n", s->sock, function);
498 
499 	p_dev = kzalloc(sizeof(struct pcmcia_device), GFP_KERNEL);
500 	if (!p_dev)
501 		goto err_put;
502 
503 	mutex_lock(&s->ops_mutex);
504 	p_dev->device_no = (s->device_count++);
505 	mutex_unlock(&s->ops_mutex);
506 
507 	/* max of 2 PFC devices */
508 	if ((p_dev->device_no >= 2) && (function == 0))
509 		goto err_free;
510 
511 	/* max of 4 devices overall */
512 	if (p_dev->device_no >= 4)
513 		goto err_free;
514 
515 	p_dev->socket = s;
516 	p_dev->func   = function;
517 
518 	p_dev->dev.bus = &pcmcia_bus_type;
519 	p_dev->dev.parent = s->dev.parent;
520 	p_dev->dev.release = pcmcia_release_dev;
521 	/* by default don't allow DMA */
522 	p_dev->dma_mask = DMA_MASK_NONE;
523 	p_dev->dev.dma_mask = &p_dev->dma_mask;
524 	dev_set_name(&p_dev->dev, "%d.%d", p_dev->socket->sock, p_dev->device_no);
525 	if (!dev_name(&p_dev->dev))
526 		goto err_free;
527 	p_dev->devname = kasprintf(GFP_KERNEL, "pcmcia%s", dev_name(&p_dev->dev));
528 	if (!p_dev->devname)
529 		goto err_free;
530 	dev_dbg(&p_dev->dev, "devname is %s\n", p_dev->devname);
531 
532 	mutex_lock(&s->ops_mutex);
533 
534 	/*
535 	 * p_dev->function_config must be the same for all card functions.
536 	 * Note that this is serialized by ops_mutex, so that only one
537 	 * such struct will be created.
538 	 */
539 	list_for_each_entry(tmp_dev, &s->devices_list, socket_device_list)
540 		if (p_dev->func == tmp_dev->func) {
541 			p_dev->function_config = tmp_dev->function_config;
542 			p_dev->irq = tmp_dev->irq;
543 			kref_get(&p_dev->function_config->ref);
544 		}
545 
546 	/* Add to the list in pcmcia_bus_socket */
547 	list_add(&p_dev->socket_device_list, &s->devices_list);
548 
549 	if (pcmcia_setup_irq(p_dev))
550 		dev_warn(&p_dev->dev,
551 			"IRQ setup failed -- device might not work\n");
552 
553 	if (!p_dev->function_config) {
554 		config_t *c;
555 		dev_dbg(&p_dev->dev, "creating config_t\n");
556 		c = kzalloc(sizeof(struct config_t), GFP_KERNEL);
557 		if (!c) {
558 			mutex_unlock(&s->ops_mutex);
559 			goto err_unreg;
560 		}
561 		p_dev->function_config = c;
562 		kref_init(&c->ref);
563 		for (i = 0; i < MAX_IO_WIN; i++) {
564 			c->io[i].name = p_dev->devname;
565 			c->io[i].flags = IORESOURCE_IO;
566 		}
567 		for (i = 0; i < MAX_WIN; i++) {
568 			c->mem[i].name = p_dev->devname;
569 			c->mem[i].flags = IORESOURCE_MEM;
570 		}
571 	}
572 	for (i = 0; i < MAX_IO_WIN; i++)
573 		p_dev->resource[i] = &p_dev->function_config->io[i];
574 	for (; i < (MAX_IO_WIN + MAX_WIN); i++)
575 		p_dev->resource[i] = &p_dev->function_config->mem[i-MAX_IO_WIN];
576 
577 	mutex_unlock(&s->ops_mutex);
578 
579 	dev_notice(&p_dev->dev, "pcmcia: registering new device %s (IRQ: %d)\n",
580 		   p_dev->devname, p_dev->irq);
581 
582 	pcmcia_device_query(p_dev);
583 
584 	if (device_register(&p_dev->dev))
585 		goto err_unreg;
586 
587 	return p_dev;
588 
589  err_unreg:
590 	mutex_lock(&s->ops_mutex);
591 	list_del(&p_dev->socket_device_list);
592 	mutex_unlock(&s->ops_mutex);
593 
594  err_free:
595 	mutex_lock(&s->ops_mutex);
596 	s->device_count--;
597 	mutex_unlock(&s->ops_mutex);
598 
599 	for (i = 0; i < 4; i++)
600 		kfree(p_dev->prod_id[i]);
601 	kfree(p_dev->devname);
602 	kfree(p_dev);
603  err_put:
604 	pcmcia_put_socket(s);
605 
606 	return NULL;
607 }
608 
609 
610 static int pcmcia_card_add(struct pcmcia_socket *s)
611 {
612 	cistpl_longlink_mfc_t mfc;
613 	unsigned int no_funcs, i, no_chains;
614 	int ret = -EAGAIN;
615 
616 	mutex_lock(&s->ops_mutex);
617 	if (!(s->resource_setup_done)) {
618 		dev_dbg(&s->dev,
619 			   "no resources available, delaying card_add\n");
620 		mutex_unlock(&s->ops_mutex);
621 		return -EAGAIN; /* try again, but later... */
622 	}
623 
624 	if (pcmcia_validate_mem(s)) {
625 		dev_dbg(&s->dev, "validating mem resources failed, "
626 		       "delaying card_add\n");
627 		mutex_unlock(&s->ops_mutex);
628 		return -EAGAIN; /* try again, but later... */
629 	}
630 	mutex_unlock(&s->ops_mutex);
631 
632 	ret = pccard_validate_cis(s, &no_chains);
633 	if (ret || !no_chains) {
634 #if defined(CONFIG_MTD_PCMCIA_ANONYMOUS)
635 		/* Set up as an anonymous card. If we don't have anonymous
636 		   memory support then just error the card as there is no
637 		   point trying to second guess.
638 
639 		   Note: some cards have just a device entry, it may be
640 		   worth extending support to cover these in future */
641 		if (ret == -EIO) {
642 			dev_info(&s->dev, "no CIS, assuming an anonymous memory card.\n");
643 			pcmcia_replace_cis(s, "\xFF", 1);
644 			no_chains = 1;
645 			ret = 0;
646 		} else
647 #endif
648 		{
649 			dev_dbg(&s->dev, "invalid CIS or invalid resources\n");
650 			return -ENODEV;
651 		}
652 	}
653 
654 	if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC, &mfc))
655 		no_funcs = mfc.nfn;
656 	else
657 		no_funcs = 1;
658 	s->functions = no_funcs;
659 
660 	for (i = 0; i < no_funcs; i++)
661 		pcmcia_device_add(s, i);
662 
663 	return ret;
664 }
665 
666 
667 static int pcmcia_requery_callback(struct device *dev, void *_data)
668 {
669 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
670 	if (!p_dev->dev.driver) {
671 		dev_dbg(dev, "update device information\n");
672 		pcmcia_device_query(p_dev);
673 	}
674 
675 	return 0;
676 }
677 
678 
679 static void pcmcia_requery(struct pcmcia_socket *s)
680 {
681 	int has_pfc;
682 
683 	if (!(s->state & SOCKET_PRESENT))
684 		return;
685 
686 	if (s->functions == 0) {
687 		pcmcia_card_add(s);
688 		return;
689 	}
690 
691 	/* some device information might have changed because of a CIS
692 	 * update or because we can finally read it correctly... so
693 	 * determine it again, overwriting old values if necessary. */
694 	bus_for_each_dev(&pcmcia_bus_type, NULL, NULL, pcmcia_requery_callback);
695 
696 	/* if the CIS changed, we need to check whether the number of
697 	 * functions changed. */
698 	if (s->fake_cis) {
699 		int old_funcs, new_funcs;
700 		cistpl_longlink_mfc_t mfc;
701 
702 		/* does this cis override add or remove functions? */
703 		old_funcs = s->functions;
704 
705 		if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC,
706 					&mfc))
707 			new_funcs = mfc.nfn;
708 		else
709 			new_funcs = 1;
710 		if (old_funcs != new_funcs) {
711 			/* we need to re-start */
712 			pcmcia_card_remove(s, NULL);
713 			s->functions = 0;
714 			pcmcia_card_add(s);
715 		}
716 	}
717 
718 	/* If the PCMCIA device consists of two pseudo devices,
719 	 * call pcmcia_device_add() -- which will fail if both
720 	 * devices are already registered. */
721 	mutex_lock(&s->ops_mutex);
722 	has_pfc = s->pcmcia_pfc;
723 	mutex_unlock(&s->ops_mutex);
724 	if (has_pfc)
725 		pcmcia_device_add(s, 0);
726 
727 	/* we re-scan all devices, not just the ones connected to this
728 	 * socket. This does not matter, though. */
729 	if (bus_rescan_devices(&pcmcia_bus_type))
730 		dev_warn(&s->dev, "rescanning the bus failed\n");
731 }
732 
733 
734 #ifdef CONFIG_PCMCIA_LOAD_CIS
735 
736 /**
737  * pcmcia_load_firmware - load CIS from userspace if device-provided is broken
738  * @dev: the pcmcia device which needs a CIS override
739  * @filename: requested filename in /lib/firmware/
740  *
741  * This uses the in-kernel firmware loading mechanism to use a "fake CIS" if
742  * the one provided by the card is broken. The firmware files reside in
743  * /lib/firmware/ in userspace.
744  */
745 static int pcmcia_load_firmware(struct pcmcia_device *dev, char *filename)
746 {
747 	struct pcmcia_socket *s = dev->socket;
748 	const struct firmware *fw;
749 	int ret = -ENOMEM;
750 	cistpl_longlink_mfc_t mfc;
751 	int old_funcs, new_funcs = 1;
752 
753 	if (!filename)
754 		return -EINVAL;
755 
756 	dev_dbg(&dev->dev, "trying to load CIS file %s\n", filename);
757 
758 	if (request_firmware(&fw, filename, &dev->dev) == 0) {
759 		if (fw->size >= CISTPL_MAX_CIS_SIZE) {
760 			ret = -EINVAL;
761 			dev_err(&dev->dev, "pcmcia: CIS override is too big\n");
762 			goto release;
763 		}
764 
765 		if (!pcmcia_replace_cis(s, fw->data, fw->size))
766 			ret = 0;
767 		else {
768 			dev_err(&dev->dev, "pcmcia: CIS override failed\n");
769 			goto release;
770 		}
771 
772 		/* we need to re-start if the number of functions changed */
773 		old_funcs = s->functions;
774 		if (!pccard_read_tuple(s, BIND_FN_ALL, CISTPL_LONGLINK_MFC,
775 					&mfc))
776 			new_funcs = mfc.nfn;
777 
778 		if (old_funcs != new_funcs)
779 			ret = -EBUSY;
780 
781 		/* update information */
782 		pcmcia_device_query(dev);
783 
784 		/* requery (as number of functions might have changed) */
785 		pcmcia_parse_uevents(s, PCMCIA_UEVENT_REQUERY);
786 	}
787  release:
788 	release_firmware(fw);
789 
790 	return ret;
791 }
792 
793 #else /* !CONFIG_PCMCIA_LOAD_CIS */
794 
795 static inline int pcmcia_load_firmware(struct pcmcia_device *dev,
796 				       char *filename)
797 {
798 	return -ENODEV;
799 }
800 
801 #endif
802 
803 
804 static inline int pcmcia_devmatch(struct pcmcia_device *dev,
805 				  const struct pcmcia_device_id *did)
806 {
807 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_MANF_ID) {
808 		if ((!dev->has_manf_id) || (dev->manf_id != did->manf_id))
809 			return 0;
810 	}
811 
812 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_CARD_ID) {
813 		if ((!dev->has_card_id) || (dev->card_id != did->card_id))
814 			return 0;
815 	}
816 
817 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_FUNCTION) {
818 		if (dev->func != did->function)
819 			return 0;
820 	}
821 
822 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID1) {
823 		if (!dev->prod_id[0])
824 			return 0;
825 		if (strcmp(did->prod_id[0], dev->prod_id[0]))
826 			return 0;
827 	}
828 
829 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID2) {
830 		if (!dev->prod_id[1])
831 			return 0;
832 		if (strcmp(did->prod_id[1], dev->prod_id[1]))
833 			return 0;
834 	}
835 
836 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID3) {
837 		if (!dev->prod_id[2])
838 			return 0;
839 		if (strcmp(did->prod_id[2], dev->prod_id[2]))
840 			return 0;
841 	}
842 
843 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID4) {
844 		if (!dev->prod_id[3])
845 			return 0;
846 		if (strcmp(did->prod_id[3], dev->prod_id[3]))
847 			return 0;
848 	}
849 
850 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) {
851 		dev_dbg(&dev->dev, "this is a pseudo-multi-function device\n");
852 		mutex_lock(&dev->socket->ops_mutex);
853 		dev->socket->pcmcia_pfc = 1;
854 		mutex_unlock(&dev->socket->ops_mutex);
855 		if (dev->device_no != did->device_no)
856 			return 0;
857 	}
858 
859 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_FUNC_ID) {
860 		int ret;
861 
862 		if ((!dev->has_func_id) || (dev->func_id != did->func_id))
863 			return 0;
864 
865 		/* if this is a pseudo-multi-function device,
866 		 * we need explicit matches */
867 		if (dev->socket->pcmcia_pfc)
868 			return 0;
869 		if (dev->device_no)
870 			return 0;
871 
872 		/* also, FUNC_ID matching needs to be activated by userspace
873 		 * after it has re-checked that there is no possible module
874 		 * with a prod_id/manf_id/card_id match.
875 		 */
876 		mutex_lock(&dev->socket->ops_mutex);
877 		ret = dev->allow_func_id_match;
878 		mutex_unlock(&dev->socket->ops_mutex);
879 
880 		if (!ret) {
881 			dev_dbg(&dev->dev,
882 				"skipping FUNC_ID match until userspace ACK\n");
883 			return 0;
884 		}
885 	}
886 
887 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) {
888 		dev_dbg(&dev->dev, "device needs a fake CIS\n");
889 		if (!dev->socket->fake_cis)
890 			if (pcmcia_load_firmware(dev, did->cisfile))
891 				return 0;
892 	}
893 
894 	if (did->match_flags & PCMCIA_DEV_ID_MATCH_ANONYMOUS) {
895 		int i;
896 		for (i = 0; i < 4; i++)
897 			if (dev->prod_id[i])
898 				return 0;
899 		if (dev->has_manf_id || dev->has_card_id || dev->has_func_id)
900 			return 0;
901 	}
902 
903 	return 1;
904 }
905 
906 
907 static int pcmcia_bus_match(struct device *dev, struct device_driver *drv)
908 {
909 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
910 	struct pcmcia_driver *p_drv = to_pcmcia_drv(drv);
911 	const struct pcmcia_device_id *did = p_drv->id_table;
912 	struct pcmcia_dynid *dynid;
913 
914 	/* match dynamic devices first */
915 	mutex_lock(&p_drv->dynids.lock);
916 	list_for_each_entry(dynid, &p_drv->dynids.list, node) {
917 		dev_dbg(dev, "trying to match to %s\n", drv->name);
918 		if (pcmcia_devmatch(p_dev, &dynid->id)) {
919 			dev_dbg(dev, "matched to %s\n", drv->name);
920 			mutex_unlock(&p_drv->dynids.lock);
921 			return 1;
922 		}
923 	}
924 	mutex_unlock(&p_drv->dynids.lock);
925 
926 	while (did && did->match_flags) {
927 		dev_dbg(dev, "trying to match to %s\n", drv->name);
928 		if (pcmcia_devmatch(p_dev, did)) {
929 			dev_dbg(dev, "matched to %s\n", drv->name);
930 			return 1;
931 		}
932 		did++;
933 	}
934 
935 	return 0;
936 }
937 
938 static int pcmcia_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
939 {
940 	struct pcmcia_device *p_dev;
941 	int i;
942 	u32 hash[4] = { 0, 0, 0, 0};
943 
944 	if (!dev)
945 		return -ENODEV;
946 
947 	p_dev = to_pcmcia_dev(dev);
948 
949 	/* calculate hashes */
950 	for (i = 0; i < 4; i++) {
951 		if (!p_dev->prod_id[i])
952 			continue;
953 		hash[i] = crc32(0, p_dev->prod_id[i], strlen(p_dev->prod_id[i]));
954 	}
955 
956 	if (add_uevent_var(env, "SOCKET_NO=%u", p_dev->socket->sock))
957 		return -ENOMEM;
958 
959 	if (add_uevent_var(env, "DEVICE_NO=%02X", p_dev->device_no))
960 		return -ENOMEM;
961 
962 	if (add_uevent_var(env, "MODALIAS=pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02X"
963 			   "pa%08Xpb%08Xpc%08Xpd%08X",
964 			   p_dev->has_manf_id ? p_dev->manf_id : 0,
965 			   p_dev->has_card_id ? p_dev->card_id : 0,
966 			   p_dev->has_func_id ? p_dev->func_id : 0,
967 			   p_dev->func,
968 			   p_dev->device_no,
969 			   hash[0],
970 			   hash[1],
971 			   hash[2],
972 			   hash[3]))
973 		return -ENOMEM;
974 
975 	return 0;
976 }
977 
978 /************************ runtime PM support ***************************/
979 
980 static int pcmcia_dev_suspend(struct device *dev, pm_message_t state);
981 static int pcmcia_dev_resume(struct device *dev);
982 
983 static int runtime_suspend(struct device *dev)
984 {
985 	int rc;
986 
987 	device_lock(dev);
988 	rc = pcmcia_dev_suspend(dev, PMSG_SUSPEND);
989 	device_unlock(dev);
990 	return rc;
991 }
992 
993 static int runtime_resume(struct device *dev)
994 {
995 	int rc;
996 
997 	device_lock(dev);
998 	rc = pcmcia_dev_resume(dev);
999 	device_unlock(dev);
1000 	return rc;
1001 }
1002 
1003 /************************ per-device sysfs output ***************************/
1004 
1005 #define pcmcia_device_attr(field, test, format)				\
1006 static ssize_t field##_show (struct device *dev, struct device_attribute *attr, char *buf)		\
1007 {									\
1008 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);		\
1009 	return p_dev->test ? sprintf(buf, format, p_dev->field) : -ENODEV; \
1010 }									\
1011 static DEVICE_ATTR_RO(field);
1012 
1013 #define pcmcia_device_stringattr(name, field)					\
1014 static ssize_t name##_show (struct device *dev, struct device_attribute *attr, char *buf)		\
1015 {									\
1016 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);		\
1017 	return p_dev->field ? sprintf(buf, "%s\n", p_dev->field) : -ENODEV; \
1018 }									\
1019 static DEVICE_ATTR_RO(name);
1020 
1021 pcmcia_device_attr(func_id, has_func_id, "0x%02x\n");
1022 pcmcia_device_attr(manf_id, has_manf_id, "0x%04x\n");
1023 pcmcia_device_attr(card_id, has_card_id, "0x%04x\n");
1024 pcmcia_device_stringattr(prod_id1, prod_id[0]);
1025 pcmcia_device_stringattr(prod_id2, prod_id[1]);
1026 pcmcia_device_stringattr(prod_id3, prod_id[2]);
1027 pcmcia_device_stringattr(prod_id4, prod_id[3]);
1028 
1029 static ssize_t function_show(struct device *dev, struct device_attribute *attr,
1030 			     char *buf)
1031 {
1032 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1033 	return p_dev->socket ? sprintf(buf, "0x%02x\n", p_dev->func) : -ENODEV;
1034 }
1035 static DEVICE_ATTR_RO(function);
1036 
1037 static ssize_t resources_show(struct device *dev,
1038 			      struct device_attribute *attr, char *buf)
1039 {
1040 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1041 	char *str = buf;
1042 	int i;
1043 
1044 	for (i = 0; i < PCMCIA_NUM_RESOURCES; i++)
1045 		str += sprintf(str, "%pr\n", p_dev->resource[i]);
1046 
1047 	return str - buf;
1048 }
1049 static DEVICE_ATTR_RO(resources);
1050 
1051 static ssize_t pm_state_show(struct device *dev, struct device_attribute *attr, char *buf)
1052 {
1053 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1054 
1055 	if (p_dev->suspended)
1056 		return sprintf(buf, "off\n");
1057 	else
1058 		return sprintf(buf, "on\n");
1059 }
1060 
1061 static ssize_t pm_state_store(struct device *dev, struct device_attribute *attr,
1062 			      const char *buf, size_t count)
1063 {
1064 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1065 	int ret = 0;
1066 
1067 	if (!count)
1068 		return -EINVAL;
1069 
1070 	if ((!p_dev->suspended) && !strncmp(buf, "off", 3))
1071 		ret = runtime_suspend(dev);
1072 	else if (p_dev->suspended && !strncmp(buf, "on", 2))
1073 		ret = runtime_resume(dev);
1074 
1075 	return ret ? ret : count;
1076 }
1077 static DEVICE_ATTR_RW(pm_state);
1078 
1079 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
1080 {
1081 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1082 	int i;
1083 	u32 hash[4] = { 0, 0, 0, 0};
1084 
1085 	/* calculate hashes */
1086 	for (i = 0; i < 4; i++) {
1087 		if (!p_dev->prod_id[i])
1088 			continue;
1089 		hash[i] = crc32(0, p_dev->prod_id[i],
1090 				strlen(p_dev->prod_id[i]));
1091 	}
1092 	return sprintf(buf, "pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02X"
1093 				"pa%08Xpb%08Xpc%08Xpd%08X\n",
1094 				p_dev->has_manf_id ? p_dev->manf_id : 0,
1095 				p_dev->has_card_id ? p_dev->card_id : 0,
1096 				p_dev->has_func_id ? p_dev->func_id : 0,
1097 				p_dev->func, p_dev->device_no,
1098 				hash[0], hash[1], hash[2], hash[3]);
1099 }
1100 static DEVICE_ATTR_RO(modalias);
1101 
1102 static ssize_t allow_func_id_match_store(struct device *dev,
1103 		struct device_attribute *attr, const char *buf, size_t count)
1104 {
1105 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1106 
1107 	if (!count)
1108 		return -EINVAL;
1109 
1110 	mutex_lock(&p_dev->socket->ops_mutex);
1111 	p_dev->allow_func_id_match = 1;
1112 	mutex_unlock(&p_dev->socket->ops_mutex);
1113 	pcmcia_parse_uevents(p_dev->socket, PCMCIA_UEVENT_REQUERY);
1114 
1115 	return count;
1116 }
1117 static DEVICE_ATTR_WO(allow_func_id_match);
1118 
1119 static struct attribute *pcmcia_dev_attrs[] = {
1120 	&dev_attr_resources.attr,
1121 	&dev_attr_pm_state.attr,
1122 	&dev_attr_function.attr,
1123 	&dev_attr_func_id.attr,
1124 	&dev_attr_manf_id.attr,
1125 	&dev_attr_card_id.attr,
1126 	&dev_attr_prod_id1.attr,
1127 	&dev_attr_prod_id2.attr,
1128 	&dev_attr_prod_id3.attr,
1129 	&dev_attr_prod_id4.attr,
1130 	&dev_attr_modalias.attr,
1131 	&dev_attr_allow_func_id_match.attr,
1132 	NULL,
1133 };
1134 ATTRIBUTE_GROUPS(pcmcia_dev);
1135 
1136 /* PM support, also needed for reset */
1137 
1138 static int pcmcia_dev_suspend(struct device *dev, pm_message_t state)
1139 {
1140 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1141 	struct pcmcia_driver *p_drv = NULL;
1142 	int ret = 0;
1143 
1144 	mutex_lock(&p_dev->socket->ops_mutex);
1145 	if (p_dev->suspended) {
1146 		mutex_unlock(&p_dev->socket->ops_mutex);
1147 		return 0;
1148 	}
1149 	p_dev->suspended = 1;
1150 	mutex_unlock(&p_dev->socket->ops_mutex);
1151 
1152 	dev_dbg(dev, "suspending\n");
1153 
1154 	if (dev->driver)
1155 		p_drv = to_pcmcia_drv(dev->driver);
1156 
1157 	if (!p_drv)
1158 		goto out;
1159 
1160 	if (p_drv->suspend) {
1161 		ret = p_drv->suspend(p_dev);
1162 		if (ret) {
1163 			dev_err(dev,
1164 				"pcmcia: device %s (driver %s) did not want to go to sleep (%d)\n",
1165 				p_dev->devname, p_drv->name, ret);
1166 			mutex_lock(&p_dev->socket->ops_mutex);
1167 			p_dev->suspended = 0;
1168 			mutex_unlock(&p_dev->socket->ops_mutex);
1169 			goto out;
1170 		}
1171 	}
1172 
1173 	if (p_dev->device_no == p_dev->func) {
1174 		dev_dbg(dev, "releasing configuration\n");
1175 		pcmcia_release_configuration(p_dev);
1176 	}
1177 
1178  out:
1179 	return ret;
1180 }
1181 
1182 
1183 static int pcmcia_dev_resume(struct device *dev)
1184 {
1185 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1186 	struct pcmcia_driver *p_drv = NULL;
1187 	int ret = 0;
1188 
1189 	mutex_lock(&p_dev->socket->ops_mutex);
1190 	if (!p_dev->suspended) {
1191 		mutex_unlock(&p_dev->socket->ops_mutex);
1192 		return 0;
1193 	}
1194 	p_dev->suspended = 0;
1195 	mutex_unlock(&p_dev->socket->ops_mutex);
1196 
1197 	dev_dbg(dev, "resuming\n");
1198 
1199 	if (dev->driver)
1200 		p_drv = to_pcmcia_drv(dev->driver);
1201 
1202 	if (!p_drv)
1203 		goto out;
1204 
1205 	if (p_dev->device_no == p_dev->func) {
1206 		dev_dbg(dev, "requesting configuration\n");
1207 		ret = pcmcia_enable_device(p_dev);
1208 		if (ret)
1209 			goto out;
1210 	}
1211 
1212 	if (p_drv->resume)
1213 		ret = p_drv->resume(p_dev);
1214 
1215  out:
1216 	return ret;
1217 }
1218 
1219 
1220 static int pcmcia_bus_suspend_callback(struct device *dev, void *_data)
1221 {
1222 	struct pcmcia_socket *skt = _data;
1223 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1224 
1225 	if (p_dev->socket != skt || p_dev->suspended)
1226 		return 0;
1227 
1228 	return runtime_suspend(dev);
1229 }
1230 
1231 static int pcmcia_bus_resume_callback(struct device *dev, void *_data)
1232 {
1233 	struct pcmcia_socket *skt = _data;
1234 	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
1235 
1236 	if (p_dev->socket != skt || !p_dev->suspended)
1237 		return 0;
1238 
1239 	runtime_resume(dev);
1240 
1241 	return 0;
1242 }
1243 
1244 static int pcmcia_bus_resume(struct pcmcia_socket *skt)
1245 {
1246 	dev_dbg(&skt->dev, "resuming socket %d\n", skt->sock);
1247 	bus_for_each_dev(&pcmcia_bus_type, NULL, skt, pcmcia_bus_resume_callback);
1248 	return 0;
1249 }
1250 
1251 static int pcmcia_bus_suspend(struct pcmcia_socket *skt)
1252 {
1253 	dev_dbg(&skt->dev, "suspending socket %d\n", skt->sock);
1254 	if (bus_for_each_dev(&pcmcia_bus_type, NULL, skt,
1255 			     pcmcia_bus_suspend_callback)) {
1256 		pcmcia_bus_resume(skt);
1257 		return -EIO;
1258 	}
1259 	return 0;
1260 }
1261 
1262 static int pcmcia_bus_remove(struct pcmcia_socket *skt)
1263 {
1264 	atomic_set(&skt->present, 0);
1265 	pcmcia_card_remove(skt, NULL);
1266 
1267 	mutex_lock(&skt->ops_mutex);
1268 	destroy_cis_cache(skt);
1269 	pcmcia_cleanup_irq(skt);
1270 	mutex_unlock(&skt->ops_mutex);
1271 
1272 	return 0;
1273 }
1274 
1275 static int pcmcia_bus_add(struct pcmcia_socket *skt)
1276 {
1277 	atomic_set(&skt->present, 1);
1278 
1279 	mutex_lock(&skt->ops_mutex);
1280 	skt->pcmcia_pfc = 0;
1281 	destroy_cis_cache(skt); /* to be on the safe side... */
1282 	mutex_unlock(&skt->ops_mutex);
1283 
1284 	pcmcia_card_add(skt);
1285 
1286 	return 0;
1287 }
1288 
1289 static int pcmcia_bus_early_resume(struct pcmcia_socket *skt)
1290 {
1291 	if (!verify_cis_cache(skt))
1292 		return 0;
1293 
1294 	dev_dbg(&skt->dev, "cis mismatch - different card\n");
1295 
1296 	/* first, remove the card */
1297 	pcmcia_bus_remove(skt);
1298 
1299 	mutex_lock(&skt->ops_mutex);
1300 	destroy_cis_cache(skt);
1301 	kfree(skt->fake_cis);
1302 	skt->fake_cis = NULL;
1303 	skt->functions = 0;
1304 	mutex_unlock(&skt->ops_mutex);
1305 
1306 	/* now, add the new card */
1307 	pcmcia_bus_add(skt);
1308 	return 0;
1309 }
1310 
1311 
1312 /*
1313  * NOTE: This is racy. There's no guarantee the card will still be
1314  * physically present, even if the call to this function returns
1315  * non-NULL. Furthermore, the device driver most likely is unbound
1316  * almost immediately, so the timeframe where pcmcia_dev_present
1317  * returns NULL is probably really really small.
1318  */
1319 struct pcmcia_device *pcmcia_dev_present(struct pcmcia_device *_p_dev)
1320 {
1321 	struct pcmcia_device *p_dev;
1322 	struct pcmcia_device *ret = NULL;
1323 
1324 	p_dev = pcmcia_get_dev(_p_dev);
1325 	if (!p_dev)
1326 		return NULL;
1327 
1328 	if (atomic_read(&p_dev->socket->present) != 0)
1329 		ret = p_dev;
1330 
1331 	pcmcia_put_dev(p_dev);
1332 	return ret;
1333 }
1334 EXPORT_SYMBOL(pcmcia_dev_present);
1335 
1336 
1337 static struct pcmcia_callback pcmcia_bus_callback = {
1338 	.owner = THIS_MODULE,
1339 	.add = pcmcia_bus_add,
1340 	.remove = pcmcia_bus_remove,
1341 	.requery = pcmcia_requery,
1342 	.validate = pccard_validate_cis,
1343 	.suspend = pcmcia_bus_suspend,
1344 	.early_resume = pcmcia_bus_early_resume,
1345 	.resume = pcmcia_bus_resume,
1346 };
1347 
1348 static int pcmcia_bus_add_socket(struct device *dev,
1349 					   struct class_interface *class_intf)
1350 {
1351 	struct pcmcia_socket *socket = dev_get_drvdata(dev);
1352 	int ret;
1353 
1354 	socket = pcmcia_get_socket(socket);
1355 	if (!socket) {
1356 		dev_err(dev, "PCMCIA obtaining reference to socket failed\n");
1357 		return -ENODEV;
1358 	}
1359 
1360 	ret = sysfs_create_bin_file(&dev->kobj, &pccard_cis_attr);
1361 	if (ret) {
1362 		dev_err(dev, "PCMCIA registration failed\n");
1363 		pcmcia_put_socket(socket);
1364 		return ret;
1365 	}
1366 
1367 	INIT_LIST_HEAD(&socket->devices_list);
1368 	socket->pcmcia_pfc = 0;
1369 	socket->device_count = 0;
1370 	atomic_set(&socket->present, 0);
1371 
1372 	ret = pccard_register_pcmcia(socket, &pcmcia_bus_callback);
1373 	if (ret) {
1374 		dev_err(dev, "PCMCIA registration failed\n");
1375 		pcmcia_put_socket(socket);
1376 		return ret;
1377 	}
1378 
1379 	return 0;
1380 }
1381 
1382 static void pcmcia_bus_remove_socket(struct device *dev,
1383 				     struct class_interface *class_intf)
1384 {
1385 	struct pcmcia_socket *socket = dev_get_drvdata(dev);
1386 
1387 	if (!socket)
1388 		return;
1389 
1390 	pccard_register_pcmcia(socket, NULL);
1391 
1392 	/* unregister any unbound devices */
1393 	mutex_lock(&socket->skt_mutex);
1394 	pcmcia_card_remove(socket, NULL);
1395 	release_cis_mem(socket);
1396 	mutex_unlock(&socket->skt_mutex);
1397 
1398 	sysfs_remove_bin_file(&dev->kobj, &pccard_cis_attr);
1399 
1400 	pcmcia_put_socket(socket);
1401 
1402 	return;
1403 }
1404 
1405 
1406 /* the pcmcia_bus_interface is used to handle pcmcia socket devices */
1407 static struct class_interface pcmcia_bus_interface __refdata = {
1408 	.class = &pcmcia_socket_class,
1409 	.add_dev = &pcmcia_bus_add_socket,
1410 	.remove_dev = &pcmcia_bus_remove_socket,
1411 };
1412 
1413 
1414 struct bus_type pcmcia_bus_type = {
1415 	.name = "pcmcia",
1416 	.uevent = pcmcia_bus_uevent,
1417 	.match = pcmcia_bus_match,
1418 	.dev_groups = pcmcia_dev_groups,
1419 	.probe = pcmcia_device_probe,
1420 	.remove = pcmcia_device_remove,
1421 	.suspend = pcmcia_dev_suspend,
1422 	.resume = pcmcia_dev_resume,
1423 };
1424 
1425 
1426 static int __init init_pcmcia_bus(void)
1427 {
1428 	int ret;
1429 
1430 	ret = bus_register(&pcmcia_bus_type);
1431 	if (ret < 0) {
1432 		printk(KERN_WARNING "pcmcia: bus_register error: %d\n", ret);
1433 		return ret;
1434 	}
1435 	ret = class_interface_register(&pcmcia_bus_interface);
1436 	if (ret < 0) {
1437 		printk(KERN_WARNING
1438 			"pcmcia: class_interface_register error: %d\n", ret);
1439 		bus_unregister(&pcmcia_bus_type);
1440 		return ret;
1441 	}
1442 
1443 	return 0;
1444 }
1445 fs_initcall(init_pcmcia_bus); /* one level after subsys_initcall so that
1446 			       * pcmcia_socket_class is already registered */
1447 
1448 
1449 static void __exit exit_pcmcia_bus(void)
1450 {
1451 	class_interface_unregister(&pcmcia_bus_interface);
1452 
1453 	bus_unregister(&pcmcia_bus_type);
1454 }
1455 module_exit(exit_pcmcia_bus);
1456 
1457 
1458 MODULE_ALIAS("ds");
1459