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