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