]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 5 Dec 2009 17:42:59 +0000 (09:42 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 5 Dec 2009 17:42:59 +0000 (09:42 -0800)
* git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6: (50 commits)
  pcmcia: rework the irq_req_t typedef
  pcmcia: remove deprecated handle_to_dev() macro
  pcmcia: pcmcia_request_window() doesn't need a pointer to a pointer
  pcmcia: remove unused "window_t" typedef
  pcmcia: move some window-related code to pcmcia_ioctl.c
  pcmcia: Change window_handle_t logic to unsigned long
  pcmcia: Pass struct pcmcia_socket to pcmcia_get_mem_page()
  pcmcia: Pass struct pcmcia_device to pcmcia_map_mem_page()
  pcmcia: Pass struct pcmcia_device to pcmcia_release_window()
  drivers/pcmcia: remove unnecessary kzalloc
  pcmcia: correct handling for Zoomed Video registers in topic.h
  pcmcia: fix printk formats
  pcmcia: autoload module pcmcia
  pcmcia/staging: update comedi drivers
  PCMCIA: stop duplicating pci_irq in soc_pcmcia_socket
  PCMCIA: ss: allow PCI IRQs > 255
  PCMCIA: soc_common: remove 'dev' member from soc_pcmcia_socket
  PCMCIA: soc_common: constify soc_pcmcia_socket ops member
  PCMCIA: sa1111: remove duplicated initializers
  PCMCIA: sa1111: wrap soc_pcmcia_socket to contain sa1111 specific data
  ...

1  2 
drivers/net/pcmcia/pcnet_cs.c
drivers/net/wireless/ray_cs.c
drivers/pcmcia/cs.c
drivers/serial/serial_cs.c
include/linux/pci_ids.h
include/pcmcia/ss.h

index 94c9ad2746bc68cede7ea8ae5f4a42b5114d3095,de2d10085635f2ad57742195c0e1a2b24a5189dd..cbe462ed221f7624bb46282208a5e0a21bb7cf32
  
  static const char *if_names[] = { "auto", "10baseT", "10base2"};
  
- #ifdef PCMCIA_DEBUG
- static int pc_debug = PCMCIA_DEBUG;
- module_param(pc_debug, int, 0);
- #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
- static char *version =
- "pcnet_cs.c 1.153 2003/11/09 18:53:09 (David Hinds)";
- #else
- #define DEBUG(n, args...)
- #endif
  
  /*====================================================================*/
  
@@@ -265,7 -256,7 +256,7 @@@ static int pcnet_probe(struct pcmcia_de
      pcnet_dev_t *info;
      struct net_device *dev;
  
-     DEBUG(0, "pcnet_attach()\n");
+     dev_dbg(&link->dev, "pcnet_attach()\n");
  
      /* Create new ethernet device */
      dev = __alloc_ei_netdev(sizeof(pcnet_dev_t));
      link->priv = dev;
  
      link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-     link->irq.IRQInfo1 = IRQ_LEVEL_ID;
      link->conf.Attributes = CONF_ENABLE_IRQ;
      link->conf.IntType = INT_MEMORY_AND_IO;
  
@@@ -297,7 -287,7 +287,7 @@@ static void pcnet_detach(struct pcmcia_
  {
        struct net_device *dev = link->priv;
  
-       DEBUG(0, "pcnet_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "pcnet_detach\n");
  
        if (link->dev_node)
                unregister_netdev(dev);
@@@ -326,17 -316,15 +316,15 @@@ static hw_info_t *get_hwinfo(struct pcm
      req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
      req.Base = 0; req.Size = 0;
      req.AccessSpeed = 0;
-     i = pcmcia_request_window(&link, &req, &link->win);
-     if (i != 0) {
-       cs_error(link, RequestWindow, i);
+     i = pcmcia_request_window(link, &req, &link->win);
+     if (i != 0)
        return NULL;
-     }
  
      virt = ioremap(req.Base, req.Size);
      mem.Page = 0;
      for (i = 0; i < NR_INFO; i++) {
        mem.CardOffset = hw_info[i].offset & ~(req.Size-1);
-       pcmcia_map_mem_page(link->win, &mem);
+       pcmcia_map_mem_page(link, link->win, &mem);
        base = &virt[hw_info[i].offset & (req.Size-1)];
        if ((readb(base+0) == hw_info[i].a0) &&
            (readb(base+2) == hw_info[i].a1) &&
      }
  
      iounmap(virt);
-     j = pcmcia_release_window(link->win);
-     if (j != 0)
-       cs_error(link, ReleaseWindow, j);
+     j = pcmcia_release_window(link, link->win);
      return (i < NR_INFO) ? hw_info+i : NULL;
  } /* get_hwinfo */
  
@@@ -495,9 -481,6 +481,6 @@@ static hw_info_t *get_hwired(struct pcm
  
  ======================================================================*/
  
- #define CS_CHECK(fn, ret) \
- do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
  static int try_io_port(struct pcmcia_device *link)
  {
      int j, ret;
@@@ -567,19 -550,19 +550,19 @@@ static int pcnet_config(struct pcmcia_d
  {
      struct net_device *dev = link->priv;
      pcnet_dev_t *info = PRIV(dev);
-     int last_ret, last_fn, start_pg, stop_pg, cm_offset;
+     int ret, start_pg, stop_pg, cm_offset;
      int has_shmem = 0;
      hw_info_t *local_hw_info;
  
-     DEBUG(0, "pcnet_config(0x%p)\n", link);
+     dev_dbg(&link->dev, "pcnet_config\n");
  
-     last_ret = pcmcia_loop_config(link, pcnet_confcheck, &has_shmem);
-     if (last_ret) {
-       cs_error(link, RequestIO, last_ret);
+     ret = pcmcia_loop_config(link, pcnet_confcheck, &has_shmem);
+     if (ret)
        goto failed;
-     }
  
-     CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
+     ret = pcmcia_request_irq(link, &link->irq);
+     if (ret)
+           goto failed;
  
      if (link->io.NumPorts2 == 8) {
        link->conf.Attributes |= CONF_ENABLE_SPKR;
        (link->card_id == PRODID_IBM_HOME_AND_AWAY))
        link->conf.ConfigIndex |= 0x10;
  
-     CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+     ret = pcmcia_request_configuration(link, &link->conf);
+     if (ret)
+           goto failed;
      dev->irq = link->irq.AssignedIRQ;
      dev->base_addr = link->io.BasePort1;
      if (info->flags & HAS_MISC_REG) {
        mii_phy_probe(dev);
  
      link->dev_node = &info->node;
-     SET_NETDEV_DEV(dev, &handle_to_dev(link));
+     SET_NETDEV_DEV(dev, &link->dev);
  
      if (register_netdev(dev) != 0) {
        printk(KERN_NOTICE "pcnet_cs: register_netdev() failed\n");
      printk(" hw_addr %pM\n", dev->dev_addr);
      return 0;
  
- cs_failed:
-     cs_error(link, last_fn, last_ret);
  failed:
      pcnet_release(link);
      return -ENODEV;
@@@ -706,7 -689,7 +689,7 @@@ static void pcnet_release(struct pcmcia
  {
        pcnet_dev_t *info = PRIV(link->priv);
  
-       DEBUG(0, "pcnet_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "pcnet_release\n");
  
        if (info->flags & USE_SHMEM)
                iounmap(info->base);
@@@ -960,7 -943,7 +943,7 @@@ static void mii_phy_probe(struct net_de
        phyid = tmp << 16;
        phyid |= mdio_read(mii_addr, i, MII_PHYID_REG2);
        phyid &= MII_PHYID_REV_MASK;
-       DEBUG(0, "%s: MII at %d is 0x%08x\n", dev->name, i, phyid);
+       pr_debug("%s: MII at %d is 0x%08x\n", dev->name, i, phyid);
        if (phyid == AM79C9XX_HOME_PHY) {
            info->pna_phy = i;
        } else if (phyid != AM79C9XX_ETH_PHY) {
@@@ -976,7 -959,7 +959,7 @@@ static int pcnet_open(struct net_devic
      struct pcmcia_device *link = info->p_dev;
      unsigned int nic_base = dev->base_addr;
  
-     DEBUG(2, "pcnet_open('%s')\n", dev->name);
+     dev_dbg(&link->dev, "pcnet_open('%s')\n", dev->name);
  
      if (!pcmcia_dev_present(link))
        return -ENODEV;
@@@ -1008,7 -991,7 +991,7 @@@ static int pcnet_close(struct net_devic
      pcnet_dev_t *info = PRIV(dev);
      struct pcmcia_device *link = info->p_dev;
  
-     DEBUG(2, "pcnet_close('%s')\n", dev->name);
+     dev_dbg(&link->dev, "pcnet_close('%s')\n", dev->name);
  
      ei_close(dev);
      free_irq(dev->irq, dev);
@@@ -1251,10 -1234,8 +1234,8 @@@ static void dma_block_input(struct net_
      int xfer_count = count;
      char *buf = skb->data;
  
- #ifdef PCMCIA_DEBUG
      if ((ei_debug > 4) && (count != 4))
-       printk(KERN_DEBUG "%s: [bi=%d]\n", dev->name, count+4);
- #endif
+       pr_debug("%s: [bi=%d]\n", dev->name, count+4);
      if (ei_status.dmaing) {
        printk(KERN_NOTICE "%s: DMAing conflict in dma_block_input."
               "[DMAstat:%1x][irqlock:%1x]\n",
@@@ -1495,7 -1476,7 +1476,7 @@@ static int setup_shmem_window(struct pc
      pcnet_dev_t *info = PRIV(dev);
      win_req_t req;
      memreq_t mem;
-     int i, window_size, offset, last_ret, last_fn;
+     int i, window_size, offset, ret;
  
      window_size = (stop_pg - start_pg) << 8;
      if (window_size > 32 * 1024)
      req.Attributes |= WIN_USE_WAIT;
      req.Base = 0; req.Size = window_size;
      req.AccessSpeed = mem_speed;
-     CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &link->win));
+     ret = pcmcia_request_window(link, &req, &link->win);
+     if (ret)
+           goto failed;
  
      mem.CardOffset = (start_pg << 8) + cm_offset;
      offset = mem.CardOffset % window_size;
      mem.CardOffset -= offset;
      mem.Page = 0;
-     CS_CHECK(MapMemPage, pcmcia_map_mem_page(link->win, &mem));
+     ret = pcmcia_map_mem_page(link, link->win, &mem);
+     if (ret)
+           goto failed;
  
      /* Try scribbling on the buffer */
      info->base = ioremap(req.Base, window_size);
      pcnet_reset_8390(dev);
      if (i != (TX_PAGES<<8)) {
        iounmap(info->base);
-       pcmcia_release_window(link->win);
-       info->base = NULL; link->win = NULL;
+       pcmcia_release_window(link, link->win);
+       info->base = NULL; link->win = 0;
        goto failed;
      }
  
      info->flags |= USE_SHMEM;
      return 0;
  
- cs_failed:
-     cs_error(link, last_fn, last_ret);
  failed:
      return 1;
  }
@@@ -1760,7 -1743,7 +1743,7 @@@ static struct pcmcia_device_id pcnet_id
        PCMCIA_DEVICE_CIS_MANF_CARD(0xc00f, 0x0002, "cis/LA-PCM.cis"),
        PCMCIA_DEVICE_CIS_PROD_ID12("KTI", "PE520 PLUS", 0xad180345, 0x9d58d392, "PE520.cis"),
        PCMCIA_DEVICE_CIS_PROD_ID12("NDC", "Ethernet", 0x01c43ae1, 0x00b2e941, "cis/NE2K.cis"),
 -      PCMCIA_DEVICE_CIS_PROD_ID12("PMX   ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "PE-200.cis"),
 +      PCMCIA_DEVICE_CIS_PROD_ID12("PMX   ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "cis/PE-200.cis"),
        PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "cis/tamarack.cis"),
        PCMCIA_DEVICE_PROD_ID12("Ethernet", "CF Size PC Card", 0x00b2e941, 0x43ac239b),
        PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
@@@ -1788,7 -1771,6 +1771,6 @@@ static int __init init_pcnet_cs(void
  
  static void __exit exit_pcnet_cs(void)
  {
-     DEBUG(0, "pcnet_cs: unloading\n");
      pcmcia_unregister_driver(&pcnet_driver);
  }
  
index 1c88c2ea59aa4e605fc738f8adde1e2d01ea26cb,91213f9e2c4fe54b9a5ed73ccab7649f9fce6c37..5b8e3e4cdd9f15a2cf0d278f73eb666ae338173d
@@@ -71,25 -71,7 +71,7 @@@ typedef u_char mac_addr[ETH_ALEN];   /* H
  #include "rayctl.h"
  #include "ray_cs.h"
  
- /* All the PCMCIA modules use PCMCIA_DEBUG to control debugging.  If
-    you do not define PCMCIA_DEBUG at all, all the debug code will be
-    left out.  If you compile with PCMCIA_DEBUG=0, the debug code will
-    be present but disabled -- but it can then be enabled for specific
-    modules at load time with a 'pc_debug=#' option to insmod.
- */
  
- #ifdef RAYLINK_DEBUG
- #define PCMCIA_DEBUG RAYLINK_DEBUG
- #endif
- #ifdef PCMCIA_DEBUG
- static int ray_debug;
- static int pc_debug = PCMCIA_DEBUG;
- module_param(pc_debug, int, 0);
- /* #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args); */
- #define DEBUG(n, args...) if (pc_debug > (n)) printk(args);
- #else
- #define DEBUG(n, args...)
- #endif
  /** Prototypes based on PCMCIA skeleton driver *******************************/
  static int ray_config(struct pcmcia_device *link);
  static void ray_release(struct pcmcia_device *link);
@@@ -325,7 -307,7 +307,7 @@@ static int ray_probe(struct pcmcia_devi
        ray_dev_t *local;
        struct net_device *dev;
  
-       DEBUG(1, "ray_attach()\n");
+       dev_dbg(&p_dev->dev, "ray_attach()\n");
  
        /* Allocate space for private device-specific data */
        dev = alloc_etherdev(sizeof(ray_dev_t));
        p_dev->io.IOAddrLines = 5;
  
        /* Interrupt setup. For PCMCIA, driver takes what's given */
-       p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
        p_dev->irq.Handler = &ray_interrupt;
  
        /* General socket configuration */
        p_dev->conf.ConfigIndex = 1;
  
        p_dev->priv = dev;
-       p_dev->irq.Instance = dev;
  
        local->finder = p_dev;
        local->card_status = CARD_INSERTED;
        local->authentication_state = UNAUTHENTICATED;
        local->num_multi = 0;
-       DEBUG(2, "ray_attach p_dev = %p,  dev = %p,  local = %p, intr = %p\n",
+       dev_dbg(&p_dev->dev, "ray_attach p_dev = %p,  dev = %p,  local = %p, intr = %p\n",
              p_dev, dev, local, &ray_interrupt);
  
        /* Raylink entries in the device structure */
  #endif /* WIRELESS_SPY */
  
  
-       DEBUG(2, "ray_cs ray_attach calling ether_setup.)\n");
+       dev_dbg(&p_dev->dev, "ray_cs ray_attach calling ether_setup.)\n");
        netif_stop_queue(dev);
  
        init_timer(&local->timer);
@@@ -393,7 -373,7 +373,7 @@@ static void ray_detach(struct pcmcia_de
        struct net_device *dev;
        ray_dev_t *local;
  
-       DEBUG(1, "ray_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "ray_detach\n");
  
        this_device = NULL;
        dev = link->priv;
                        unregister_netdev(dev);
                free_netdev(dev);
        }
-       DEBUG(2, "ray_cs ray_detach ending\n");
+       dev_dbg(&link->dev, "ray_cs ray_detach ending\n");
  } /* ray_detach */
  
  /*=============================================================================
      is received, to configure the PCMCIA socket, and to make the
      ethernet device available to the system.
  =============================================================================*/
- #define CS_CHECK(fn, ret) \
- do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
  #define MAX_TUPLE_SIZE 128
  static int ray_config(struct pcmcia_device *link)
  {
-       int last_fn = 0, last_ret = 0;
+       int ret = 0;
        int i;
        win_req_t req;
        memreq_t mem;
        struct net_device *dev = (struct net_device *)link->priv;
        ray_dev_t *local = netdev_priv(dev);
  
-       DEBUG(1, "ray_config(0x%p)\n", link);
+       dev_dbg(&link->dev, "ray_config\n");
  
        /* Determine card type and firmware version */
        printk(KERN_INFO "ray_cs Detected: %s%s%s%s\n",
        /* Now allocate an interrupt line.  Note that this does not
           actually assign a handler to the interrupt.
         */
-       CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
+       ret = pcmcia_request_irq(link, &link->irq);
+       if (ret)
+               goto failed;
        dev->irq = link->irq.AssignedIRQ;
  
        /* This actually configures the PCMCIA socket -- setting up
           the I/O windows and the interrupt mapping.
         */
-       CS_CHECK(RequestConfiguration,
-                pcmcia_request_configuration(link, &link->conf));
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
  
  /*** Set up 32k window for shared memory (transmit and control) ************/
        req.Attributes =
        req.Base = 0;
        req.Size = 0x8000;
        req.AccessSpeed = ray_mem_speed;
-       CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &link->win));
+       ret = pcmcia_request_window(link, &req, &link->win);
+       if (ret)
+               goto failed;
        mem.CardOffset = 0x0000;
        mem.Page = 0;
-       CS_CHECK(MapMemPage, pcmcia_map_mem_page(link->win, &mem));
+       ret = pcmcia_map_mem_page(link, link->win, &mem);
+       if (ret)
+               goto failed;
        local->sram = ioremap(req.Base, req.Size);
  
  /*** Set up 16k window for shared memory (receive buffer) ***************/
        req.Base = 0;
        req.Size = 0x4000;
        req.AccessSpeed = ray_mem_speed;
-       CS_CHECK(RequestWindow,
-                pcmcia_request_window(&link, &req, &local->rmem_handle));
+       ret = pcmcia_request_window(link, &req, &local->rmem_handle);
+       if (ret)
+               goto failed;
        mem.CardOffset = 0x8000;
        mem.Page = 0;
-       CS_CHECK(MapMemPage, pcmcia_map_mem_page(local->rmem_handle, &mem));
+       ret = pcmcia_map_mem_page(link, local->rmem_handle, &mem);
+       if (ret)
+               goto failed;
        local->rmem = ioremap(req.Base, req.Size);
  
  /*** Set up window for attribute memory ***********************************/
        req.Base = 0;
        req.Size = 0x1000;
        req.AccessSpeed = ray_mem_speed;
-       CS_CHECK(RequestWindow,
-                pcmcia_request_window(&link, &req, &local->amem_handle));
+       ret = pcmcia_request_window(link, &req, &local->amem_handle);
+       if (ret)
+               goto failed;
        mem.CardOffset = 0x0000;
        mem.Page = 0;
-       CS_CHECK(MapMemPage, pcmcia_map_mem_page(local->amem_handle, &mem));
+       ret = pcmcia_map_mem_page(link, local->amem_handle, &mem);
+       if (ret)
+               goto failed;
        local->amem = ioremap(req.Base, req.Size);
  
-       DEBUG(3, "ray_config sram=%p\n", local->sram);
-       DEBUG(3, "ray_config rmem=%p\n", local->rmem);
-       DEBUG(3, "ray_config amem=%p\n", local->amem);
+       dev_dbg(&link->dev, "ray_config sram=%p\n", local->sram);
+       dev_dbg(&link->dev, "ray_config rmem=%p\n", local->rmem);
+       dev_dbg(&link->dev, "ray_config amem=%p\n", local->amem);
        if (ray_init(dev) < 0) {
                ray_release(link);
                return -ENODEV;
        }
  
-       SET_NETDEV_DEV(dev, &handle_to_dev(link));
+       SET_NETDEV_DEV(dev, &link->dev);
        i = register_netdev(dev);
        if (i != 0) {
                printk("ray_config register_netdev() failed\n");
  
        return 0;
  
- cs_failed:
-       cs_error(link, last_fn, last_ret);
+ failed:
        ray_release(link);
        return -ENODEV;
  } /* ray_config */
@@@ -543,9 -532,9 +532,9 @@@ static int ray_init(struct net_device *
        struct ccs __iomem *pccs;
        ray_dev_t *local = netdev_priv(dev);
        struct pcmcia_device *link = local->finder;
-       DEBUG(1, "ray_init(0x%p)\n", dev);
+       dev_dbg(&link->dev, "ray_init(0x%p)\n", dev);
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(0, "ray_init - device not present\n");
+               dev_dbg(&link->dev, "ray_init - device not present\n");
                return -1;
        }
  
        local->fw_ver = local->startup_res.firmware_version[0];
        local->fw_bld = local->startup_res.firmware_version[1];
        local->fw_var = local->startup_res.firmware_version[2];
-       DEBUG(1, "ray_init firmware version %d.%d \n", local->fw_ver,
+       dev_dbg(&link->dev, "ray_init firmware version %d.%d \n", local->fw_ver,
              local->fw_bld);
  
        local->tib_length = 0x20;
        if ((local->fw_ver == 5) && (local->fw_bld >= 30))
                local->tib_length = local->startup_res.tib_length;
-       DEBUG(2, "ray_init tib_length = 0x%02x\n", local->tib_length);
+       dev_dbg(&link->dev, "ray_init tib_length = 0x%02x\n", local->tib_length);
        /* Initialize CCS's to buffer free state */
        pccs = ccs_base(local);
        for (i = 0; i < NUMBER_OF_CCS; i++) {
  
        clear_interrupt(local); /* Clear any interrupt from the card */
        local->card_status = CARD_AWAITING_PARAM;
-       DEBUG(2, "ray_init ending\n");
+       dev_dbg(&link->dev, "ray_init ending\n");
        return 0;
  } /* ray_init */
  
@@@ -605,9 -594,9 +594,9 @@@ static int dl_startup_params(struct net
        struct ccs __iomem *pccs;
        struct pcmcia_device *link = local->finder;
  
-       DEBUG(1, "dl_startup_params entered\n");
+       dev_dbg(&link->dev, "dl_startup_params entered\n");
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs dl_startup_params - device not present\n");
+               dev_dbg(&link->dev, "ray_cs dl_startup_params - device not present\n");
                return -1;
        }
  
        local->dl_param_ccs = ccsindex;
        pccs = ccs_base(local) + ccsindex;
        writeb(CCS_DOWNLOAD_STARTUP_PARAMS, &pccs->cmd);
-       DEBUG(2, "dl_startup_params start ccsindex = %d\n",
+       dev_dbg(&link->dev, "dl_startup_params start ccsindex = %d\n",
              local->dl_param_ccs);
        /* Interrupt the firmware to process the command */
        if (interrupt_ecf(local, ccsindex)) {
        local->timer.data = (long)local;
        local->timer.function = &verify_dl_startup;
        add_timer(&local->timer);
-       DEBUG(2,
+       dev_dbg(&link->dev,
              "ray_cs dl_startup_params started timer for verify_dl_startup\n");
        return 0;
  } /* dl_startup_params */
@@@ -717,11 -706,11 +706,11 @@@ static void verify_dl_startup(u_long da
        struct pcmcia_device *link = local->finder;
  
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs verify_dl_startup - device not present\n");
+               dev_dbg(&link->dev, "ray_cs verify_dl_startup - device not present\n");
                return;
        }
- #ifdef PCMCIA_DEBUG
-       if (pc_debug > 2) {
+ #if 0
+       {
                int i;
                printk(KERN_DEBUG
                       "verify_dl_startup parameters sent via ccs %d:\n",
@@@ -760,7 -749,7 +749,7 @@@ static void start_net(u_long data
        int ccsindex;
        struct pcmcia_device *link = local->finder;
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs start_net - device not present\n");
+               dev_dbg(&link->dev, "ray_cs start_net - device not present\n");
                return;
        }
        /* Fill in the CCS fields for the ECF */
        writeb(0, &pccs->var.start_network.update_param);
        /* Interrupt the firmware to process the command */
        if (interrupt_ecf(local, ccsindex)) {
-               DEBUG(1, "ray start net failed - card not ready for intr\n");
+               dev_dbg(&link->dev, "ray start net failed - card not ready for intr\n");
                writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status);
                return;
        }
@@@ -790,7 -779,7 +779,7 @@@ static void join_net(u_long data
        struct pcmcia_device *link = local->finder;
  
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs join_net - device not present\n");
+               dev_dbg(&link->dev, "ray_cs join_net - device not present\n");
                return;
        }
        /* Fill in the CCS fields for the ECF */
        writeb(0, &pccs->var.join_network.net_initiated);
        /* Interrupt the firmware to process the command */
        if (interrupt_ecf(local, ccsindex)) {
-               DEBUG(1, "ray join net failed - card not ready for intr\n");
+               dev_dbg(&link->dev, "ray join net failed - card not ready for intr\n");
                writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status);
                return;
        }
@@@ -821,7 -810,7 +810,7 @@@ static void ray_release(struct pcmcia_d
        ray_dev_t *local = netdev_priv(dev);
        int i;
  
-       DEBUG(1, "ray_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "ray_release\n");
  
        del_timer(&local->timer);
  
        iounmap(local->rmem);
        iounmap(local->amem);
        /* Do bother checking to see if these succeed or not */
-       i = pcmcia_release_window(local->amem_handle);
+       i = pcmcia_release_window(link, local->amem_handle);
        if (i != 0)
-               DEBUG(0, "ReleaseWindow(local->amem) ret = %x\n", i);
-       i = pcmcia_release_window(local->rmem_handle);
+               dev_dbg(&link->dev, "ReleaseWindow(local->amem) ret = %x\n", i);
+       i = pcmcia_release_window(link, local->rmem_handle);
        if (i != 0)
-               DEBUG(0, "ReleaseWindow(local->rmem) ret = %x\n", i);
+               dev_dbg(&link->dev, "ReleaseWindow(local->rmem) ret = %x\n", i);
        pcmcia_disable_device(link);
  
-       DEBUG(2, "ray_release ending\n");
+       dev_dbg(&link->dev, "ray_release ending\n");
  }
  
  static int ray_suspend(struct pcmcia_device *link)
@@@ -871,9 -860,9 +860,9 @@@ static int ray_dev_init(struct net_devi
        ray_dev_t *local = netdev_priv(dev);
        struct pcmcia_device *link = local->finder;
  
-       DEBUG(1, "ray_dev_init(dev=%p)\n", dev);
+       dev_dbg(&link->dev, "ray_dev_init(dev=%p)\n", dev);
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_dev_init - device not present\n");
+               dev_dbg(&link->dev, "ray_dev_init - device not present\n");
                return -1;
        }
  #ifdef RAY_IMMEDIATE_INIT
        /* Postpone the card init so that we can still configure the card,
         * for example using the Wireless Extensions. The init will happen
         * in ray_open() - Jean II */
-       DEBUG(1,
+       dev_dbg(&link->dev,
              "ray_dev_init: postponing card init to ray_open() ; Status = %d\n",
              local->card_status);
  #endif /* RAY_IMMEDIATE_INIT */
        memcpy(dev->dev_addr, &local->sparm.b4.a_mac_addr, ADDRLEN);
        memset(dev->broadcast, 0xff, ETH_ALEN);
  
-       DEBUG(2, "ray_dev_init ending\n");
+       dev_dbg(&link->dev, "ray_dev_init ending\n");
        return 0;
  }
  
@@@ -906,9 -895,9 +895,9 @@@ static int ray_dev_config(struct net_de
        ray_dev_t *local = netdev_priv(dev);
        struct pcmcia_device *link = local->finder;
        /* Dummy routine to satisfy device structure */
-       DEBUG(1, "ray_dev_config(dev=%p,ifmap=%p)\n", dev, map);
+       dev_dbg(&link->dev, "ray_dev_config(dev=%p,ifmap=%p)\n", dev, map);
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_dev_config - device not present\n");
+               dev_dbg(&link->dev, "ray_dev_config - device not present\n");
                return -1;
        }
  
@@@ -924,14 -913,14 +913,14 @@@ static netdev_tx_t ray_dev_start_xmit(s
        short length = skb->len;
  
        if (!pcmcia_dev_present(link)) {
-               DEBUG(2, "ray_dev_start_xmit - device not present\n");
+               dev_dbg(&link->dev, "ray_dev_start_xmit - device not present\n");
                dev_kfree_skb(skb);
                return NETDEV_TX_OK;
        }
  
-       DEBUG(3, "ray_dev_start_xmit(skb=%p, dev=%p)\n", skb, dev);
+       dev_dbg(&link->dev, "ray_dev_start_xmit(skb=%p, dev=%p)\n", skb, dev);
        if (local->authentication_state == NEED_TO_AUTH) {
-               DEBUG(0, "ray_cs Sending authentication request.\n");
+               dev_dbg(&link->dev, "ray_cs Sending authentication request.\n");
                if (!build_auth_frame(local, local->auth_id, OPEN_AUTH_REQUEST)) {
                        local->authentication_state = AUTHENTICATED;
                        netif_stop_queue(dev);
@@@ -971,7 -960,7 +960,7 @@@ static int ray_hw_xmit(unsigned char *d
        struct tx_msg __iomem *ptx;     /* Address of xmit buffer in PC space */
        short int addr;         /* Address of xmit buffer in card space */
  
-       DEBUG(3, "ray_hw_xmit(data=%p, len=%d, dev=%p)\n", data, len, dev);
+       pr_debug("ray_hw_xmit(data=%p, len=%d, dev=%p)\n", data, len, dev);
        if (len + TX_HEADER_LENGTH > TX_BUF_SIZE) {
                printk(KERN_INFO "ray_hw_xmit packet too large: %d bytes\n",
                       len);
        }
        switch (ccsindex = get_free_tx_ccs(local)) {
        case ECCSBUSY:
-               DEBUG(2, "ray_hw_xmit tx_ccs table busy\n");
+               pr_debug("ray_hw_xmit tx_ccs table busy\n");
        case ECCSFULL:
-               DEBUG(2, "ray_hw_xmit No free tx ccs\n");
+               pr_debug("ray_hw_xmit No free tx ccs\n");
        case ECARDGONE:
                netif_stop_queue(dev);
                return XMIT_NO_CCS;
        writeb(PSM_CAM, &pccs->var.tx_request.pow_sav_mode);
        writeb(local->net_default_tx_rate, &pccs->var.tx_request.tx_rate);
        writeb(0, &pccs->var.tx_request.antenna);
-       DEBUG(3, "ray_hw_xmit default_tx_rate = 0x%x\n",
+       pr_debug("ray_hw_xmit default_tx_rate = 0x%x\n",
              local->net_default_tx_rate);
  
        /* Interrupt the firmware to process the command */
        if (interrupt_ecf(local, ccsindex)) {
-               DEBUG(2, "ray_hw_xmit failed - ECF not ready for intr\n");
+               pr_debug("ray_hw_xmit failed - ECF not ready for intr\n");
  /* TBD very inefficient to copy packet to buffer, and then not
     send it, but the alternative is to queue the messages and that
     won't be done for a while.  Maybe set tbusy until a CCS is free?
@@@ -1040,7 -1029,7 +1029,7 @@@ static int translate_frame(ray_dev_t *l
  {
        __be16 proto = ((struct ethhdr *)data)->h_proto;
        if (ntohs(proto) >= 1536) { /* DIX II ethernet frame */
-               DEBUG(3, "ray_cs translate_frame DIX II\n");
+               pr_debug("ray_cs translate_frame DIX II\n");
                /* Copy LLC header to card buffer */
                memcpy_toio(&ptx->var, eth2_llc, sizeof(eth2_llc));
                memcpy_toio(((void __iomem *)&ptx->var) + sizeof(eth2_llc),
                            len - ETH_HLEN);
                return (int)sizeof(struct snaphdr_t) - ETH_HLEN;
        } else { /* already  802 type, and proto is length */
-               DEBUG(3, "ray_cs translate_frame 802\n");
+               pr_debug("ray_cs translate_frame 802\n");
                if (proto == htons(0xffff)) { /* evil netware IPX 802.3 without LLC */
-                       DEBUG(3, "ray_cs translate_frame evil IPX\n");
+                       pr_debug("ray_cs translate_frame evil IPX\n");
                        memcpy_toio(&ptx->var, data + ETH_HLEN, len - ETH_HLEN);
                        return 0 - ETH_HLEN;
                }
@@@ -1603,7 -1592,7 +1592,7 @@@ static int ray_open(struct net_device *
        struct pcmcia_device *link;
        link = local->finder;
  
-       DEBUG(1, "ray_open('%s')\n", dev->name);
+       dev_dbg(&link->dev, "ray_open('%s')\n", dev->name);
  
        if (link->open == 0)
                local->num_multi = 0;
        if (local->card_status == CARD_AWAITING_PARAM) {
                int i;
  
-               DEBUG(1, "ray_open: doing init now !\n");
+               dev_dbg(&link->dev, "ray_open: doing init now !\n");
  
                /* Download startup parameters */
                if ((i = dl_startup_params(dev)) < 0) {
        else
                netif_start_queue(dev);
  
-       DEBUG(2, "ray_open ending\n");
+       dev_dbg(&link->dev, "ray_open ending\n");
        return 0;
  } /* end ray_open */
  
@@@ -1640,7 -1629,7 +1629,7 @@@ static int ray_dev_close(struct net_dev
        struct pcmcia_device *link;
        link = local->finder;
  
-       DEBUG(1, "ray_dev_close('%s')\n", dev->name);
+       dev_dbg(&link->dev, "ray_dev_close('%s')\n", dev->name);
  
        link->open--;
        netif_stop_queue(dev);
  /*===========================================================================*/
  static void ray_reset(struct net_device *dev)
  {
-       DEBUG(1, "ray_reset entered\n");
+       pr_debug("ray_reset entered\n");
        return;
  }
  
@@@ -1669,17 -1658,17 +1658,17 @@@ static int interrupt_ecf(ray_dev_t *loc
        struct pcmcia_device *link = local->finder;
  
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs interrupt_ecf - device not present\n");
+               dev_dbg(&link->dev, "ray_cs interrupt_ecf - device not present\n");
                return -1;
        }
-       DEBUG(2, "interrupt_ecf(local=%p, ccs = 0x%x\n", local, ccs);
+       dev_dbg(&link->dev, "interrupt_ecf(local=%p, ccs = 0x%x\n", local, ccs);
  
        while (i &&
               (readb(local->amem + CIS_OFFSET + ECF_INTR_OFFSET) &
                ECF_INTR_SET))
                i--;
        if (i == 0) {
-               DEBUG(2, "ray_cs interrupt_ecf card not ready for interrupt\n");
+               dev_dbg(&link->dev, "ray_cs interrupt_ecf card not ready for interrupt\n");
                return -1;
        }
        /* Fill the mailbox, then kick the card */
@@@ -1698,12 -1687,12 +1687,12 @@@ static int get_free_tx_ccs(ray_dev_t *l
        struct pcmcia_device *link = local->finder;
  
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs get_free_tx_ccs - device not present\n");
+               dev_dbg(&link->dev, "ray_cs get_free_tx_ccs - device not present\n");
                return ECARDGONE;
        }
  
        if (test_and_set_bit(0, &local->tx_ccs_lock)) {
-               DEBUG(1, "ray_cs tx_ccs_lock busy\n");
+               dev_dbg(&link->dev, "ray_cs tx_ccs_lock busy\n");
                return ECCSBUSY;
        }
  
                }
        }
        local->tx_ccs_lock = 0;
-       DEBUG(2, "ray_cs ERROR no free tx CCS for raylink card\n");
+       dev_dbg(&link->dev, "ray_cs ERROR no free tx CCS for raylink card\n");
        return ECCSFULL;
  } /* get_free_tx_ccs */
  
@@@ -1730,11 -1719,11 +1719,11 @@@ static int get_free_ccs(ray_dev_t *loca
        struct pcmcia_device *link = local->finder;
  
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs get_free_ccs - device not present\n");
+               dev_dbg(&link->dev, "ray_cs get_free_ccs - device not present\n");
                return ECARDGONE;
        }
        if (test_and_set_bit(0, &local->ccs_lock)) {
-               DEBUG(1, "ray_cs ccs_lock busy\n");
+               dev_dbg(&link->dev, "ray_cs ccs_lock busy\n");
                return ECCSBUSY;
        }
  
                }
        }
        local->ccs_lock = 0;
-       DEBUG(1, "ray_cs ERROR no free CCS for raylink card\n");
+       dev_dbg(&link->dev, "ray_cs ERROR no free CCS for raylink card\n");
        return ECCSFULL;
  } /* get_free_ccs */
  
@@@ -1823,7 -1812,7 +1812,7 @@@ static struct net_device_stats *ray_get
        struct pcmcia_device *link = local->finder;
        struct status __iomem *p = local->sram + STATUS_BASE;
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs net_device_stats - device not present\n");
+               dev_dbg(&link->dev, "ray_cs net_device_stats - device not present\n");
                return &local->stats;
        }
        if (readb(&p->mrx_overflow_for_host)) {
@@@ -1856,12 -1845,12 +1845,12 @@@ static void ray_update_parm(struct net_
        struct ccs __iomem *pccs;
  
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_update_parm - device not present\n");
+               dev_dbg(&link->dev, "ray_update_parm - device not present\n");
                return;
        }
  
        if ((ccsindex = get_free_ccs(local)) < 0) {
-               DEBUG(0, "ray_update_parm - No free ccs\n");
+               dev_dbg(&link->dev, "ray_update_parm - No free ccs\n");
                return;
        }
        pccs = ccs_base(local) + ccsindex;
        }
        /* Interrupt the firmware to process the command */
        if (interrupt_ecf(local, ccsindex)) {
-               DEBUG(0, "ray_cs associate failed - ECF not ready for intr\n");
+               dev_dbg(&link->dev, "ray_cs associate failed - ECF not ready for intr\n");
                writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status);
        }
  }
@@@ -1891,12 -1880,12 +1880,12 @@@ static void ray_update_multi_list(struc
        void __iomem *p = local->sram + HOST_TO_ECF_BASE;
  
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_update_multi_list - device not present\n");
+               dev_dbg(&link->dev, "ray_update_multi_list - device not present\n");
                return;
        } else
-               DEBUG(2, "ray_update_multi_list(%p)\n", dev);
+               dev_dbg(&link->dev, "ray_update_multi_list(%p)\n", dev);
        if ((ccsindex = get_free_ccs(local)) < 0) {
-               DEBUG(1, "ray_update_multi - No free ccs\n");
+               dev_dbg(&link->dev, "ray_update_multi - No free ccs\n");
                return;
        }
        pccs = ccs_base(local) + ccsindex;
                for (dmip = &dev->mc_list; (dmi = *dmip) != NULL;
                     dmip = &dmi->next) {
                        memcpy_toio(p, dmi->dmi_addr, ETH_ALEN);
-                       DEBUG(1,
+                       dev_dbg(&link->dev,
                              "ray_update_multi add addr %02x%02x%02x%02x%02x%02x\n",
                              dmi->dmi_addr[0], dmi->dmi_addr[1],
                              dmi->dmi_addr[2], dmi->dmi_addr[3],
                if (i > 256 / ADDRLEN)
                        i = 256 / ADDRLEN;
                writeb((UCHAR) i, &pccs->var);
-               DEBUG(1, "ray_cs update_multi %d addresses in list\n", i);
+               dev_dbg(&link->dev, "ray_cs update_multi %d addresses in list\n", i);
                /* Interrupt the firmware to process the command */
                local->num_multi = i;
        }
        if (interrupt_ecf(local, ccsindex)) {
-               DEBUG(1,
+               dev_dbg(&link->dev,
                      "ray_cs update_multi failed - ECF not ready for intr\n");
                writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status);
        }
@@@ -1938,11 -1927,11 +1927,11 @@@ static void set_multicast_list(struct n
        ray_dev_t *local = netdev_priv(dev);
        UCHAR promisc;
  
-       DEBUG(2, "ray_cs set_multicast_list(%p)\n", dev);
+       pr_debug("ray_cs set_multicast_list(%p)\n", dev);
  
        if (dev->flags & IFF_PROMISC) {
                if (local->sparm.b5.a_promiscuous_mode == 0) {
-                       DEBUG(1, "ray_cs set_multicast_list promisc on\n");
+                       pr_debug("ray_cs set_multicast_list promisc on\n");
                        local->sparm.b5.a_promiscuous_mode = 1;
                        promisc = 1;
                        ray_update_parm(dev, OBJID_promiscuous_mode,
                }
        } else {
                if (local->sparm.b5.a_promiscuous_mode == 1) {
-                       DEBUG(1, "ray_cs set_multicast_list promisc off\n");
+                       pr_debug("ray_cs set_multicast_list promisc off\n");
                        local->sparm.b5.a_promiscuous_mode = 0;
                        promisc = 0;
                        ray_update_parm(dev, OBJID_promiscuous_mode,
@@@ -1984,19 -1973,19 +1973,19 @@@ static irqreturn_t ray_interrupt(int ir
        if (dev == NULL)        /* Note that we want interrupts with dev->start == 0 */
                return IRQ_NONE;
  
-       DEBUG(4, "ray_cs: interrupt for *dev=%p\n", dev);
+       pr_debug("ray_cs: interrupt for *dev=%p\n", dev);
  
        local = netdev_priv(dev);
        link = (struct pcmcia_device *)local->finder;
        if (!pcmcia_dev_present(link)) {
-               DEBUG(2,
-                     "ray_cs interrupt from device not present or suspended.\n");
+               pr_debug(
+                       "ray_cs interrupt from device not present or suspended.\n");
                return IRQ_NONE;
        }
        rcsindex = readb(&((struct scb __iomem *)(local->sram))->rcs_index);
  
        if (rcsindex >= (NUMBER_OF_CCS + NUMBER_OF_RCS)) {
-               DEBUG(1, "ray_cs interrupt bad rcsindex = 0x%x\n", rcsindex);
+               dev_dbg(&link->dev, "ray_cs interrupt bad rcsindex = 0x%x\n", rcsindex);
                clear_interrupt(local);
                return IRQ_HANDLED;
        }
                case CCS_DOWNLOAD_STARTUP_PARAMS:       /* Happens in firmware someday */
                        del_timer(&local->timer);
                        if (status == CCS_COMMAND_COMPLETE) {
-                               DEBUG(1,
+                               dev_dbg(&link->dev,
                                      "ray_cs interrupt download_startup_parameters OK\n");
                        } else {
-                               DEBUG(1,
+                               dev_dbg(&link->dev,
                                      "ray_cs interrupt download_startup_parameters fail\n");
                        }
                        break;
                case CCS_UPDATE_PARAMS:
-                       DEBUG(1, "ray_cs interrupt update params done\n");
+                       dev_dbg(&link->dev, "ray_cs interrupt update params done\n");
                        if (status != CCS_COMMAND_COMPLETE) {
                                tmp =
                                    readb(&pccs->var.update_param.
                                          failure_cause);
-                               DEBUG(0,
+                               dev_dbg(&link->dev,
                                      "ray_cs interrupt update params failed - reason %d\n",
                                      tmp);
                        }
                        break;
                case CCS_REPORT_PARAMS:
-                       DEBUG(1, "ray_cs interrupt report params done\n");
+                       dev_dbg(&link->dev, "ray_cs interrupt report params done\n");
                        break;
                case CCS_UPDATE_MULTICAST_LIST: /* Note that this CCS isn't returned */
-                       DEBUG(1,
+                       dev_dbg(&link->dev,
                              "ray_cs interrupt CCS Update Multicast List done\n");
                        break;
                case CCS_UPDATE_POWER_SAVINGS_MODE:
-                       DEBUG(1,
+                       dev_dbg(&link->dev,
                              "ray_cs interrupt update power save mode done\n");
                        break;
                case CCS_START_NETWORK:
                                if (readb
                                    (&pccs->var.start_network.net_initiated) ==
                                    1) {
-                                       DEBUG(0,
+                                       dev_dbg(&link->dev,
                                              "ray_cs interrupt network \"%s\" started\n",
                                              local->sparm.b4.a_current_ess_id);
                                } else {
-                                       DEBUG(0,
+                                       dev_dbg(&link->dev,
                                              "ray_cs interrupt network \"%s\" joined\n",
                                              local->sparm.b4.a_current_ess_id);
                                }
                                local->timer.expires = jiffies + HZ * 5;
                                local->timer.data = (long)local;
                                if (status == CCS_START_NETWORK) {
-                                       DEBUG(0,
+                                       dev_dbg(&link->dev,
                                              "ray_cs interrupt network \"%s\" start failed\n",
                                              local->sparm.b4.a_current_ess_id);
                                        local->timer.function = &start_net;
                                } else {
-                                       DEBUG(0,
+                                       dev_dbg(&link->dev,
                                              "ray_cs interrupt network \"%s\" join failed\n",
                                              local->sparm.b4.a_current_ess_id);
                                        local->timer.function = &join_net;
                case CCS_START_ASSOCIATION:
                        if (status == CCS_COMMAND_COMPLETE) {
                                local->card_status = CARD_ASSOC_COMPLETE;
-                               DEBUG(0, "ray_cs association successful\n");
+                               dev_dbg(&link->dev, "ray_cs association successful\n");
                        } else {
-                               DEBUG(0, "ray_cs association failed,\n");
+                               dev_dbg(&link->dev, "ray_cs association failed,\n");
                                local->card_status = CARD_ASSOC_FAILED;
                                join_net((u_long) local);
                        }
                        break;
                case CCS_TX_REQUEST:
                        if (status == CCS_COMMAND_COMPLETE) {
-                               DEBUG(3,
+                               dev_dbg(&link->dev,
                                      "ray_cs interrupt tx request complete\n");
                        } else {
-                               DEBUG(1,
+                               dev_dbg(&link->dev,
                                      "ray_cs interrupt tx request failed\n");
                        }
                        if (!sniffer)
                        netif_wake_queue(dev);
                        break;
                case CCS_TEST_MEMORY:
-                       DEBUG(1, "ray_cs interrupt mem test done\n");
+                       dev_dbg(&link->dev, "ray_cs interrupt mem test done\n");
                        break;
                case CCS_SHUTDOWN:
-                       DEBUG(1,
+                       dev_dbg(&link->dev,
                              "ray_cs interrupt Unexpected CCS returned - Shutdown\n");
                        break;
                case CCS_DUMP_MEMORY:
-                       DEBUG(1, "ray_cs interrupt dump memory done\n");
+                       dev_dbg(&link->dev, "ray_cs interrupt dump memory done\n");
                        break;
                case CCS_START_TIMER:
-                       DEBUG(2,
+                       dev_dbg(&link->dev,
                              "ray_cs interrupt DING - raylink timer expired\n");
                        break;
                default:
-                       DEBUG(1,
+                       dev_dbg(&link->dev,
                              "ray_cs interrupt Unexpected CCS 0x%x returned 0x%x\n",
                              rcsindex, cmd);
                }
                        ray_rx(dev, local, prcs);
                        break;
                case REJOIN_NET_COMPLETE:
-                       DEBUG(1, "ray_cs interrupt rejoin net complete\n");
+                       dev_dbg(&link->dev, "ray_cs interrupt rejoin net complete\n");
                        local->card_status = CARD_ACQ_COMPLETE;
                        /* do we need to clear tx buffers CCS's? */
                        if (local->sparm.b4.a_network_type == ADHOC) {
                                memcpy_fromio(&local->bss_id,
                                              prcs->var.rejoin_net_complete.
                                              bssid, ADDRLEN);
-                               DEBUG(1,
+                               dev_dbg(&link->dev,
                                      "ray_cs new BSSID = %02x%02x%02x%02x%02x%02x\n",
                                      local->bss_id[0], local->bss_id[1],
                                      local->bss_id[2], local->bss_id[3],
                        }
                        break;
                case ROAMING_INITIATED:
-                       DEBUG(1, "ray_cs interrupt roaming initiated\n");
+                       dev_dbg(&link->dev, "ray_cs interrupt roaming initiated\n");
                        netif_stop_queue(dev);
                        local->card_status = CARD_DOING_ACQ;
                        break;
                case JAPAN_CALL_SIGN_RXD:
-                       DEBUG(1, "ray_cs interrupt japan call sign rx\n");
+                       dev_dbg(&link->dev, "ray_cs interrupt japan call sign rx\n");
                        break;
                default:
-                       DEBUG(1,
+                       dev_dbg(&link->dev,
                              "ray_cs Unexpected interrupt for RCS 0x%x cmd = 0x%x\n",
                              rcsindex,
                              (unsigned int)readb(&prcs->interrupt_id));
@@@ -2186,7 -2175,7 +2175,7 @@@ static void ray_rx(struct net_device *d
        int rx_len;
        unsigned int pkt_addr;
        void __iomem *pmsg;
-       DEBUG(4, "ray_rx process rx packet\n");
+       pr_debug("ray_rx process rx packet\n");
  
        /* Calculate address of packet within Rx buffer */
        pkt_addr = ((readb(&prcs->var.rx_packet.rx_data_ptr[0]) << 8)
        pmsg = local->rmem + pkt_addr;
        switch (readb(pmsg)) {
        case DATA_TYPE:
-               DEBUG(4, "ray_rx data type\n");
+               pr_debug("ray_rx data type\n");
                rx_data(dev, prcs, pkt_addr, rx_len);
                break;
        case AUTHENTIC_TYPE:
-               DEBUG(4, "ray_rx authentic type\n");
+               pr_debug("ray_rx authentic type\n");
                if (sniffer)
                        rx_data(dev, prcs, pkt_addr, rx_len);
                else
                        rx_authenticate(local, prcs, pkt_addr, rx_len);
                break;
        case DEAUTHENTIC_TYPE:
-               DEBUG(4, "ray_rx deauth type\n");
+               pr_debug("ray_rx deauth type\n");
                if (sniffer)
                        rx_data(dev, prcs, pkt_addr, rx_len);
                else
                        rx_deauthenticate(local, prcs, pkt_addr, rx_len);
                break;
        case NULL_MSG_TYPE:
-               DEBUG(3, "ray_cs rx NULL msg\n");
+               pr_debug("ray_cs rx NULL msg\n");
                break;
        case BEACON_TYPE:
-               DEBUG(4, "ray_rx beacon type\n");
+               pr_debug("ray_rx beacon type\n");
                if (sniffer)
                        rx_data(dev, prcs, pkt_addr, rx_len);
  
                ray_get_stats(dev);
                break;
        default:
-               DEBUG(0, "ray_cs unknown pkt type %2x\n",
+               pr_debug("ray_cs unknown pkt type %2x\n",
                      (unsigned int)readb(pmsg));
                break;
        }
@@@ -2262,7 -2251,7 +2251,7 @@@ static void rx_data(struct net_device *
                            rx_len >
                            (dev->mtu + RX_MAC_HEADER_LENGTH + ETH_HLEN +
                             FCS_LEN)) {
-                               DEBUG(0,
+                               pr_debug(
                                      "ray_cs invalid packet length %d received \n",
                                      rx_len);
                                return;
                            rx_len >
                            (dev->mtu + RX_MAC_HEADER_LENGTH + ETH_HLEN +
                             FCS_LEN)) {
-                               DEBUG(0,
+                               pr_debug(
                                      "ray_cs invalid packet length %d received \n",
                                      rx_len);
                                return;
                        }
                }
        }
-       DEBUG(4, "ray_cs rx_data packet\n");
+       pr_debug("ray_cs rx_data packet\n");
        /* If fragmented packet, verify sizes of fragments add up */
        if (readb(&prcs->var.rx_packet.next_frag_rcs_index) != 0xFF) {
-               DEBUG(1, "ray_cs rx'ed fragment\n");
+               pr_debug("ray_cs rx'ed fragment\n");
                tmp = (readb(&prcs->var.rx_packet.totalpacketlength[0]) << 8)
                    + readb(&prcs->var.rx_packet.totalpacketlength[1]);
                total_len = tmp;
                } while (1);
  
                if (tmp < 0) {
-                       DEBUG(0,
+                       pr_debug(
                              "ray_cs rx_data fragment lengths don't add up\n");
                        local->stats.rx_dropped++;
                        release_frag_chain(local, prcs);
  
        skb = dev_alloc_skb(total_len + 5);
        if (skb == NULL) {
-               DEBUG(0, "ray_cs rx_data could not allocate skb\n");
+               pr_debug("ray_cs rx_data could not allocate skb\n");
                local->stats.rx_dropped++;
                if (readb(&prcs->var.rx_packet.next_frag_rcs_index) != 0xFF)
                        release_frag_chain(local, prcs);
        }
        skb_reserve(skb, 2);    /* Align IP on 16 byte (TBD check this) */
  
-       DEBUG(4, "ray_cs rx_data total_len = %x, rx_len = %x\n", total_len,
+       pr_debug("ray_cs rx_data total_len = %x, rx_len = %x\n", total_len,
              rx_len);
  
  /************************/
        tmp = 17;
        if (readb(&prcs->var.rx_packet.next_frag_rcs_index) != 0xFF) {
                prcslink = prcs;
-               DEBUG(1, "ray_cs rx_data in fragment loop\n");
+               pr_debug("ray_cs rx_data in fragment loop\n");
                do {
                        prcslink = rcs_base(local)
                            +
@@@ -2426,8 -2415,8 +2415,8 @@@ static void untranslate(ray_dev_t *loca
        memcpy(destaddr, ieee80211_get_DA(pmac), ADDRLEN);
        memcpy(srcaddr, ieee80211_get_SA(pmac), ADDRLEN);
  
- #ifdef PCMCIA_DEBUG
-       if (pc_debug > 3) {
+ #if 0
+       if {
                print_hex_dump(KERN_DEBUG, "skb->data before untranslate: ",
                               DUMP_PREFIX_NONE, 16, 1,
                               skb->data, 64, true);
  
        if (psnap->dsap != 0xaa || psnap->ssap != 0xaa || psnap->ctrl != 3) {
                /* not a snap type so leave it alone */
-               DEBUG(3, "ray_cs untranslate NOT SNAP %02x %02x %02x\n",
+               pr_debug("ray_cs untranslate NOT SNAP %02x %02x %02x\n",
                      psnap->dsap, psnap->ssap, psnap->ctrl);
  
                delta = RX_MAC_HEADER_LENGTH - ETH_HLEN;
        } else { /* Its a SNAP */
                if (memcmp(psnap->org, org_bridge, 3) == 0) {
                /* EtherII and nuke the LLC */
-                       DEBUG(3, "ray_cs untranslate Bridge encap\n");
+                       pr_debug("ray_cs untranslate Bridge encap\n");
                        delta = RX_MAC_HEADER_LENGTH
                            + sizeof(struct snaphdr_t) - ETH_HLEN;
                        peth = (struct ethhdr *)(skb->data + delta);
                        switch (ntohs(type)) {
                        case ETH_P_IPX:
                        case ETH_P_AARP:
-                               DEBUG(3, "ray_cs untranslate RFC IPX/AARP\n");
+                               pr_debug("ray_cs untranslate RFC IPX/AARP\n");
                                delta = RX_MAC_HEADER_LENGTH - ETH_HLEN;
                                peth = (struct ethhdr *)(skb->data + delta);
                                peth->h_proto =
                                    htons(len - RX_MAC_HEADER_LENGTH);
                                break;
                        default:
-                               DEBUG(3, "ray_cs untranslate RFC default\n");
+                               pr_debug("ray_cs untranslate RFC default\n");
                                delta = RX_MAC_HEADER_LENGTH +
                                    sizeof(struct snaphdr_t) - ETH_HLEN;
                                peth = (struct ethhdr *)(skb->data + delta);
        }
  /* TBD reserve  skb_reserve(skb, delta); */
        skb_pull(skb, delta);
-       DEBUG(3, "untranslate after skb_pull(%d), skb->data = %p\n", delta,
+       pr_debug("untranslate after skb_pull(%d), skb->data = %p\n", delta,
              skb->data);
        memcpy(peth->h_dest, destaddr, ADDRLEN);
        memcpy(peth->h_source, srcaddr, ADDRLEN);
- #ifdef PCMCIA_DEBUG
-       if (pc_debug > 3) {
+ #if 0
+       {
                int i;
                printk(KERN_DEBUG "skb->data after untranslate:");
                for (i = 0; i < 64; i++)
@@@ -2529,7 -2518,7 +2518,7 @@@ static void release_frag_chain(ray_dev_
        while (tmp--) {
                writeb(CCS_BUFFER_FREE, &prcslink->buffer_status);
                if (rcsindex >= (NUMBER_OF_CCS + NUMBER_OF_RCS)) {
-                       DEBUG(1, "ray_cs interrupt bad rcsindex = 0x%x\n",
+                       pr_debug("ray_cs interrupt bad rcsindex = 0x%x\n",
                              rcsindex);
                        break;
                }
  static void authenticate(ray_dev_t *local)
  {
        struct pcmcia_device *link = local->finder;
-       DEBUG(0, "ray_cs Starting authentication.\n");
+       dev_dbg(&link->dev, "ray_cs Starting authentication.\n");
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs authenticate - device not present\n");
+               dev_dbg(&link->dev, "ray_cs authenticate - device not present\n");
                return;
        }
  
@@@ -2573,11 -2562,11 +2562,11 @@@ static void rx_authenticate(ray_dev_t *
        copy_from_rx_buff(local, buff, pkt_addr, rx_len & 0xff);
        /* if we are trying to get authenticated */
        if (local->sparm.b4.a_network_type == ADHOC) {
-               DEBUG(1, "ray_cs rx_auth var= %02x %02x %02x %02x %02x %02x\n",
+               pr_debug("ray_cs rx_auth var= %02x %02x %02x %02x %02x %02x\n",
                      msg->var[0], msg->var[1], msg->var[2], msg->var[3],
                      msg->var[4], msg->var[5]);
                if (msg->var[2] == 1) {
-                       DEBUG(0, "ray_cs Sending authentication response.\n");
+                       pr_debug("ray_cs Sending authentication response.\n");
                        if (!build_auth_frame
                            (local, msg->mac.addr_2, OPEN_AUTH_RESPONSE)) {
                                local->authentication_state = NEED_TO_AUTH;
                        /* Verify authentication sequence #2 and success */
                        if (msg->var[2] == 2) {
                                if ((msg->var[3] | msg->var[4]) == 0) {
-                                       DEBUG(1, "Authentication successful\n");
+                                       pr_debug("Authentication successful\n");
                                        local->card_status = CARD_AUTH_COMPLETE;
                                        associate(local);
                                        local->authentication_state =
                                            AUTHENTICATED;
                                } else {
-                                       DEBUG(0, "Authentication refused\n");
+                                       pr_debug("Authentication refused\n");
                                        local->card_status = CARD_AUTH_REFUSED;
                                        join_net((u_long) local);
                                        local->authentication_state =
@@@ -2617,22 -2606,22 +2606,22 @@@ static void associate(ray_dev_t *local
        struct net_device *dev = link->priv;
        int ccsindex;
        if (!(pcmcia_dev_present(link))) {
-               DEBUG(2, "ray_cs associate - device not present\n");
+               dev_dbg(&link->dev, "ray_cs associate - device not present\n");
                return;
        }
        /* If no tx buffers available, return */
        if ((ccsindex = get_free_ccs(local)) < 0) {
  /* TBD should never be here but... what if we are? */
-               DEBUG(1, "ray_cs associate - No free ccs\n");
+               dev_dbg(&link->dev, "ray_cs associate - No free ccs\n");
                return;
        }
-       DEBUG(1, "ray_cs Starting association with access point\n");
+       dev_dbg(&link->dev, "ray_cs Starting association with access point\n");
        pccs = ccs_base(local) + ccsindex;
        /* fill in the CCS */
        writeb(CCS_START_ASSOCIATION, &pccs->cmd);
        /* Interrupt the firmware to process the command */
        if (interrupt_ecf(local, ccsindex)) {
-               DEBUG(1, "ray_cs associate failed - ECF not ready for intr\n");
+               dev_dbg(&link->dev, "ray_cs associate failed - ECF not ready for intr\n");
                writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status);
  
                del_timer(&local->timer);
@@@ -2655,7 -2644,7 +2644,7 @@@ static void rx_deauthenticate(ray_dev_
  /*  UCHAR buff[256];
      struct rx_msg *msg = (struct rx_msg *)buff;
  */
-       DEBUG(0, "Deauthentication frame received\n");
+       pr_debug("Deauthentication frame received\n");
        local->authentication_state = UNAUTHENTICATED;
        /* Need to reauthenticate or rejoin depending on reason code */
  /*  copy_from_rx_buff(local, buff, pkt_addr, rx_len & 0xff);
@@@ -2823,7 -2812,7 +2812,7 @@@ static int build_auth_frame(ray_dev_t *
  
        /* If no tx buffers available, return */
        if ((ccsindex = get_free_tx_ccs(local)) < 0) {
-               DEBUG(1, "ray_cs send authenticate - No free tx ccs\n");
+               pr_debug("ray_cs send authenticate - No free tx ccs\n");
                return -1;
        }
  
  
        /* Interrupt the firmware to process the command */
        if (interrupt_ecf(local, ccsindex)) {
-               DEBUG(1,
+               pr_debug(
                      "ray_cs send authentication request failed - ECF not ready for intr\n");
                writeb(CCS_BUFFER_FREE, &(pccs++)->buffer_status);
                return -1;
@@@ -2879,7 -2868,7 +2868,7 @@@ static int write_essid(struct file *fil
                       unsigned long count, void *data)
  {
        static char proc_essid[33];
 -      int len = count;
 +      unsigned int len = count;
  
        if (len > 32)
                len = 32;
@@@ -2942,9 -2931,9 +2931,9 @@@ static int __init init_ray_cs(void
  {
        int rc;
  
-       DEBUG(1, "%s\n", rcsid);
+       pr_debug("%s\n", rcsid);
        rc = pcmcia_register_driver(&ray_driver);
-       DEBUG(1, "raylink init_module register_pcmcia_driver returns 0x%x\n",
+       pr_debug("raylink init_module register_pcmcia_driver returns 0x%x\n",
              rc);
  
  #ifdef CONFIG_PROC_FS
  
  static void __exit exit_ray_cs(void)
  {
-       DEBUG(0, "ray_cs: cleanup_module\n");
+       pr_debug("ray_cs: cleanup_module\n");
  
  #ifdef CONFIG_PROC_FS
        remove_proc_entry("driver/ray_cs/ray_cs", NULL);
diff --combined drivers/pcmcia/cs.c
index 698d75cda084c36a4e15cdae7c6c1809bb9d417b,fc1c0c6baae208dbbce68fd65b0010ffeefc1822..790af87a922fc6e541f5ab2bb02d2b2f315388d9
@@@ -61,17 -61,6 +61,6 @@@ INT_MODULE_PARM(unreset_limit,       30);            /
  /* Access speed for attribute memory windows */
  INT_MODULE_PARM(cis_speed,    300);           /* ns */
  
- #ifdef CONFIG_PCMCIA_DEBUG
- static int pc_debug;
- module_param(pc_debug, int, 0644);
- int cs_debug_level(int level)
- {
-       return pc_debug > level;
- }
- #endif
  
  socket_state_t dead_socket = {
        .csc_mask       = SS_DETECT,
@@@ -98,13 -87,10 +87,13 @@@ EXPORT_SYMBOL(pcmcia_socket_list_rwsem)
   * These functions check for the appropriate struct pcmcia_soket arrays,
   * and pass them to the low-level functions pcmcia_{suspend,resume}_socket
   */
 +static int socket_early_resume(struct pcmcia_socket *skt);
 +static int socket_late_resume(struct pcmcia_socket *skt);
  static int socket_resume(struct pcmcia_socket *skt);
  static int socket_suspend(struct pcmcia_socket *skt);
  
 -int pcmcia_socket_dev_suspend(struct device *dev)
 +static void pcmcia_socket_dev_run(struct device *dev,
 +                                int (*cb)(struct pcmcia_socket *))
  {
        struct pcmcia_socket *socket;
  
                if (socket->dev.parent != dev)
                        continue;
                mutex_lock(&socket->skt_mutex);
 -              socket_suspend(socket);
 +              cb(socket);
                mutex_unlock(&socket->skt_mutex);
        }
        up_read(&pcmcia_socket_list_rwsem);
 +}
  
 +int pcmcia_socket_dev_suspend(struct device *dev)
 +{
 +      pcmcia_socket_dev_run(dev, socket_suspend);
        return 0;
  }
  EXPORT_SYMBOL(pcmcia_socket_dev_suspend);
  
 -int pcmcia_socket_dev_resume(struct device *dev)
 +void pcmcia_socket_dev_early_resume(struct device *dev)
  {
 -      struct pcmcia_socket *socket;
 +      pcmcia_socket_dev_run(dev, socket_early_resume);
 +}
 +EXPORT_SYMBOL(pcmcia_socket_dev_early_resume);
  
 -      down_read(&pcmcia_socket_list_rwsem);
 -      list_for_each_entry(socket, &pcmcia_socket_list, socket_list) {
 -              if (socket->dev.parent != dev)
 -                      continue;
 -              mutex_lock(&socket->skt_mutex);
 -              socket_resume(socket);
 -              mutex_unlock(&socket->skt_mutex);
 -      }
 -      up_read(&pcmcia_socket_list_rwsem);
 +void pcmcia_socket_dev_late_resume(struct device *dev)
 +{
 +      pcmcia_socket_dev_run(dev, socket_late_resume);
 +}
 +EXPORT_SYMBOL(pcmcia_socket_dev_late_resume);
  
 +int pcmcia_socket_dev_resume(struct device *dev)
 +{
 +      pcmcia_socket_dev_run(dev, socket_resume);
        return 0;
  }
  EXPORT_SYMBOL(pcmcia_socket_dev_resume);
@@@ -190,7 -171,7 +179,7 @@@ int pcmcia_register_socket(struct pcmci
        if (!socket || !socket->ops || !socket->dev.parent || !socket->resource_ops)
                return -EINVAL;
  
-       cs_dbg(socket, 0, "pcmcia_register_socket(0x%p)\n", socket->ops);
+       dev_dbg(&socket->dev, "pcmcia_register_socket(0x%p)\n", socket->ops);
  
        spin_lock_init(&socket->lock);
  
  
        pcmcia_parse_events(socket, SS_DETECT);
  
+       /*
+        * Let's try to get the PCMCIA module for 16-bit PCMCIA support.
+        * If it fails, it doesn't matter -- we still have 32-bit CardBus
+        * support to offer, so this is not a failure mode.
+        */
+       request_module_nowait("pcmcia");
        return 0;
  
   err:
@@@ -282,7 -270,7 +278,7 @@@ void pcmcia_unregister_socket(struct pc
        if (!socket)
                return;
  
-       cs_dbg(socket, 0, "pcmcia_unregister_socket(0x%p)\n", socket->ops);
+       dev_dbg(&socket->dev, "pcmcia_unregister_socket(0x%p)\n", socket->ops);
  
        if (socket->thread)
                kthread_stop(socket->thread);
@@@ -335,7 -323,7 +331,7 @@@ static int send_event(struct pcmcia_soc
        if (s->state & SOCKET_CARDBUS)
                return 0;
  
-       cs_dbg(s, 1, "send_event(event %d, pri %d, callback 0x%p)\n",
+       dev_dbg(&s->dev, "send_event(event %d, pri %d, callback 0x%p)\n",
           event, priority, s->callback);
  
        if (!s->callback)
  
  static void socket_remove_drivers(struct pcmcia_socket *skt)
  {
-       cs_dbg(skt, 4, "remove_drivers\n");
+       dev_dbg(&skt->dev, "remove_drivers\n");
  
        send_event(skt, CS_EVENT_CARD_REMOVAL, CS_EVENT_PRI_HIGH);
  }
@@@ -361,7 -349,7 +357,7 @@@ static int socket_reset(struct pcmcia_s
  {
        int status, i;
  
-       cs_dbg(skt, 4, "reset\n");
+       dev_dbg(&skt->dev, "reset\n");
  
        skt->socket.flags |= SS_OUTPUT_ENA | SS_RESET;
        skt->ops->set_socket(skt, &skt->socket);
                msleep(unreset_check * 10);
        }
  
-       cs_err(skt, "time out after reset.\n");
+       dev_printk(KERN_ERR, &skt->dev, "time out after reset.\n");
        return -ETIMEDOUT;
  }
  
@@@ -397,7 -385,7 +393,7 @@@ static void socket_shutdown(struct pcmc
  {
        int status;
  
-       cs_dbg(s, 4, "shutdown\n");
+       dev_dbg(&s->dev, "shutdown\n");
  
        socket_remove_drivers(s);
        s->state &= SOCKET_INUSE | SOCKET_PRESENT;
@@@ -432,7 -420,7 +428,7 @@@ static int socket_setup(struct pcmcia_s
  {
        int status, i;
  
-       cs_dbg(skt, 4, "setup\n");
+       dev_dbg(&skt->dev, "setup\n");
  
        skt->ops->get_status(skt, &status);
        if (!(status & SS_DETECT))
        }
  
        if (status & SS_PENDING) {
-               cs_err(skt, "voltage interrogation timed out.\n");
+               dev_printk(KERN_ERR, &skt->dev,
+                          "voltage interrogation timed out.\n");
                return -ETIMEDOUT;
        }
  
        if (status & SS_CARDBUS) {
                if (!(skt->features & SS_CAP_CARDBUS)) {
-                       cs_err(skt, "cardbus cards are not supported.\n");
+                       dev_printk(KERN_ERR, &skt->dev,
+                               "cardbus cards are not supported.\n");
                        return -EINVAL;
                }
                skt->state |= SOCKET_CARDBUS;
        else if (!(status & SS_XVCARD))
                skt->socket.Vcc = skt->socket.Vpp = 50;
        else {
-               cs_err(skt, "unsupported voltage key.\n");
+               dev_printk(KERN_ERR, &skt->dev, "unsupported voltage key.\n");
                return -EIO;
        }
  
  
        skt->ops->get_status(skt, &status);
        if (!(status & SS_POWERON)) {
-               cs_err(skt, "unable to apply power.\n");
+               dev_printk(KERN_ERR, &skt->dev, "unable to apply power.\n");
                return -EIO;
        }
  
@@@ -509,7 -499,7 +507,7 @@@ static int socket_insert(struct pcmcia_
  {
        int ret;
  
-       cs_dbg(skt, 4, "insert\n");
+       dev_dbg(&skt->dev, "insert\n");
  
        if (!cs_socket_get(skt))
                return -ENODEV;
                        skt->state |= SOCKET_CARDBUS_CONFIG;
                }
  #endif
-               cs_dbg(skt, 4, "insert done\n");
+               dev_dbg(&skt->dev, "insert done\n");
  
                send_event(skt, CS_EVENT_CARD_INSERTION, CS_EVENT_PRI_LOW);
        } else {
@@@ -554,29 -544,34 +552,29 @@@ static int socket_suspend(struct pcmcia
        return 0;
  }
  
 -/*
 - * Resume a socket.  If a card is present, verify its CIS against
 - * our cached copy.  If they are different, the card has been
 - * replaced, and we need to tell the drivers.
 - */
 -static int socket_resume(struct pcmcia_socket *skt)
 +static int socket_early_resume(struct pcmcia_socket *skt)
  {
 -      int ret;
 -
 -      if (!(skt->state & SOCKET_SUSPEND))
 -              return -EBUSY;
 -
        skt->socket = dead_socket;
        skt->ops->init(skt);
        skt->ops->set_socket(skt, &skt->socket);
 +      if (skt->state & SOCKET_PRESENT)
 +              skt->resume_status = socket_setup(skt, resume_delay);
 +      return 0;
 +}
  
 +static int socket_late_resume(struct pcmcia_socket *skt)
 +{
        if (!(skt->state & SOCKET_PRESENT)) {
                skt->state &= ~SOCKET_SUSPEND;
                return socket_insert(skt);
        }
  
 -      ret = socket_setup(skt, resume_delay);
 -      if (ret == 0) {
 +      if (skt->resume_status == 0) {
                /*
                 * FIXME: need a better check here for cardbus cards.
                 */
                if (verify_cis_cache(skt) != 0) {
-                       cs_dbg(skt, 4, "cis mismatch - different card\n");
+                       dev_dbg(&skt->dev, "cis mismatch - different card\n");
                        socket_remove_drivers(skt);
                        destroy_cis_cache(skt);
                        /*
                        msleep(200);
                        send_event(skt, CS_EVENT_CARD_INSERTION, CS_EVENT_PRI_LOW);
                } else {
-                       cs_dbg(skt, 4, "cis matches cache\n");
+                       dev_dbg(&skt->dev, "cis matches cache\n");
                        send_event(skt, CS_EVENT_PM_RESUME, CS_EVENT_PRI_LOW);
                }
        } else {
        return 0;
  }
  
 +/*
 + * Resume a socket.  If a card is present, verify its CIS against
 + * our cached copy.  If they are different, the card has been
 + * replaced, and we need to tell the drivers.
 + */
 +static int socket_resume(struct pcmcia_socket *skt)
 +{
 +      if (!(skt->state & SOCKET_SUSPEND))
 +              return -EBUSY;
 +
 +      socket_early_resume(skt);
 +      return socket_late_resume(skt);
 +}
 +
  static void socket_remove(struct pcmcia_socket *skt)
  {
        dev_printk(KERN_NOTICE, &skt->dev,
@@@ -723,7 -704,7 +721,7 @@@ static int pccardd(void *__skt
  void pcmcia_parse_events(struct pcmcia_socket *s, u_int events)
  {
        unsigned long flags;
-       cs_dbg(s, 4, "parse_events: events %08x\n", events);
+       dev_dbg(&s->dev, "parse_events: events %08x\n", events);
        if (s->thread) {
                spin_lock_irqsave(&s->thread_lock, flags);
                s->thread_events |= events;
@@@ -773,19 -754,22 +771,22 @@@ int pcmcia_reset_card(struct pcmcia_soc
  {
        int ret;
  
-       cs_dbg(skt, 1, "resetting socket\n");
+       dev_dbg(&skt->dev, "resetting socket\n");
  
        mutex_lock(&skt->skt_mutex);
        do {
                if (!(skt->state & SOCKET_PRESENT)) {
+                       dev_dbg(&skt->dev, "can't reset, not present\n");
                        ret = -ENODEV;
                        break;
                }
                if (skt->state & SOCKET_SUSPEND) {
+                       dev_dbg(&skt->dev, "can't reset, suspended\n");
                        ret = -EBUSY;
                        break;
                }
                if (skt->state & SOCKET_CARDBUS) {
+                       dev_dbg(&skt->dev, "can't reset, is cardbus\n");
                        ret = -EPERM;
                        break;
                }
@@@ -818,7 -802,7 +819,7 @@@ int pcmcia_suspend_card(struct pcmcia_s
  {
        int ret;
  
-       cs_dbg(skt, 1, "suspending socket\n");
+       dev_dbg(&skt->dev, "suspending socket\n");
  
        mutex_lock(&skt->skt_mutex);
        do {
@@@ -848,7 -832,7 +849,7 @@@ int pcmcia_resume_card(struct pcmcia_so
  {
        int ret;
      
-       cs_dbg(skt, 1, "waking up socket\n");
+       dev_dbg(&skt->dev, "waking up socket\n");
  
        mutex_lock(&skt->skt_mutex);
        do {
@@@ -876,7 -860,7 +877,7 @@@ int pcmcia_eject_card(struct pcmcia_soc
  {
        int ret;
      
-       cs_dbg(skt, 1, "user eject request\n");
+       dev_dbg(&skt->dev, "user eject request\n");
  
        mutex_lock(&skt->skt_mutex);
        do {
@@@ -905,7 -889,7 +906,7 @@@ int pcmcia_insert_card(struct pcmcia_so
  {
        int ret;
  
-       cs_dbg(skt, 1, "user insert request\n");
+       dev_dbg(&skt->dev, "user insert request\n");
  
        mutex_lock(&skt->skt_mutex);
        do {
index 7c7914f5fa02cb239fd27b109ed039045e6b2a0c,5d6f947ef7ff4821d89849985797cc0ec51773f8..fc413f0f8dd29b8eb03ef8695e8afcddbf7b9236
  
  #include "8250.h"
  
- #ifdef PCMCIA_DEBUG
- static int pc_debug = PCMCIA_DEBUG;
- module_param(pc_debug, int, 0644);
- #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
- static char *version = "serial_cs.c 1.134 2002/05/04 05:48:53 (David Hinds)";
- #else
- #define DEBUG(n, args...)
- #endif
  
  /*====================================================================*/
  
@@@ -121,24 -113,20 +113,20 @@@ static void quirk_setup_brainboxes_0104
  static int quirk_post_ibm(struct pcmcia_device *link)
  {
        conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
-       int last_ret, last_fn;
+       int ret;
+       ret = pcmcia_access_configuration_register(link, &reg);
+       if (ret)
+               goto failed;
  
-       last_ret = pcmcia_access_configuration_register(link, &reg);
-       if (last_ret) {
-               last_fn = AccessConfigurationRegister;
-               goto cs_failed;
-       }
        reg.Action = CS_WRITE;
        reg.Value = reg.Value | 1;
-       last_ret = pcmcia_access_configuration_register(link, &reg);
-       if (last_ret) {
-               last_fn = AccessConfigurationRegister;
-               goto cs_failed;
-       }
+       ret = pcmcia_access_configuration_register(link, &reg);
+       if (ret)
+               goto failed;
        return 0;
  
-  cs_failed:
-       cs_error(link, last_fn, last_ret);
+  failed:
        return -ENODEV;
  }
  
@@@ -283,7 -271,7 +271,7 @@@ static void serial_remove(struct pcmcia
        struct serial_info *info = link->priv;
        int i;
  
-       DEBUG(0, "serial_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "serial_release\n");
  
        /*
         * Recheck to see if the device is still configured.
@@@ -334,7 -322,7 +322,7 @@@ static int serial_probe(struct pcmcia_d
  {
        struct serial_info *info;
  
-       DEBUG(0, "serial_attach()\n");
+       dev_dbg(&link->dev, "serial_attach()\n");
  
        /* Create new serial device */
        info = kzalloc(sizeof (*info), GFP_KERNEL);
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
        link->io.NumPorts1 = 8;
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->conf.Attributes = CONF_ENABLE_IRQ;
        if (do_sound) {
                link->conf.Attributes |= CONF_ENABLE_SPKR;
@@@ -370,7 -357,7 +357,7 @@@ static void serial_detach(struct pcmcia
  {
        struct serial_info *info = link->priv;
  
-       DEBUG(0, "serial_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "serial_detach\n");
  
        /*
         * Ensure any outstanding scheduled tasks are completed.
@@@ -399,7 -386,7 +386,7 @@@ static int setup_serial(struct pcmcia_d
        port.irq = irq;
        port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ;
        port.uartclk = 1843200;
-       port.dev = &handle_to_dev(handle);
+       port.dev = &handle->dev;
        if (buggy_uart)
                port.flags |= UPF_BUGGY_UART;
  
  
  /*====================================================================*/
  
- static int
- first_tuple(struct pcmcia_device *handle, tuple_t * tuple, cisparse_t * parse)
- {
-       int i;
-       i = pcmcia_get_first_tuple(handle, tuple);
-       if (i != 0)
-               return i;
-       i = pcmcia_get_tuple_data(handle, tuple);
-       if (i != 0)
-               return i;
-       return pcmcia_parse_tuple(tuple, parse);
- }
- /*====================================================================*/
  static int simple_config_check(struct pcmcia_device *p_dev,
                               cistpl_cftable_entry_t *cf,
                               cistpl_cftable_entry_t *dflt,
@@@ -522,15 -494,13 +494,13 @@@ static int simple_config(struct pcmcia_
  
        printk(KERN_NOTICE
               "serial_cs: no usable port range found, giving up\n");
-       cs_error(link, RequestIO, i);
        return -1;
  
  found_port:
        i = pcmcia_request_irq(link, &link->irq);
-       if (i != 0) {
-               cs_error(link, RequestIRQ, i);
+       if (i != 0)
                link->irq.AssignedIRQ = 0;
-       }
        if (info->multi && (info->manfid == MANFID_3COM))
                link->conf.ConfigIndex &= ~(0x08);
  
                info->quirk->config(link);
  
        i = pcmcia_request_configuration(link, &link->conf);
-       if (i != 0) {
-               cs_error(link, RequestConfiguration, i);
+       if (i != 0)
                return -1;
-       }
        return setup_serial(link, info, link->io.BasePort1, link->irq.AssignedIRQ);
  }
  
@@@ -613,7 -581,6 +581,6 @@@ static int multi_config(struct pcmcia_d
                /* FIXME: comment does not fit, error handling does not fit */
                printk(KERN_NOTICE
                       "serial_cs: no usable port range found, giving up\n");
-               cs_error(link, RequestIRQ, i);
                link->irq.AssignedIRQ = 0;
        }
  
                info->quirk->config(link);
  
        i = pcmcia_request_configuration(link, &link->conf);
-       if (i != 0) {
-               cs_error(link, RequestConfiguration, i);
+       if (i != 0)
                return -ENODEV;
-       }
  
        /* The Oxford Semiconductor OXCF950 cards are in fact single-port:
         * 8 registers are for the UART, the others are extra registers.
        return 0;
  }
  
+ static int serial_check_for_multi(struct pcmcia_device *p_dev,
+                                 cistpl_cftable_entry_t *cf,
+                                 cistpl_cftable_entry_t *dflt,
+                                 unsigned int vcc,
+                                 void *priv_data)
+ {
+       struct serial_info *info = p_dev->priv;
+       if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0))
+               info->multi = cf->io.win[0].len >> 3;
+       if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) &&
+               (cf->io.win[1].len == 8))
+               info->multi = 2;
+       return 0; /* break */
+ }
  /*======================================================================
  
      serial_config() is scheduled to run after a CARD_INSERTION event
  static int serial_config(struct pcmcia_device * link)
  {
        struct serial_info *info = link->priv;
-       struct serial_cfg_mem *cfg_mem;
-       tuple_t *tuple;
-       u_char *buf;
-       cisparse_t *parse;
-       cistpl_cftable_entry_t *cf;
-       int i, last_ret, last_fn;
-       DEBUG(0, "serial_config(0x%p)\n", link);
-       cfg_mem = kmalloc(sizeof(struct serial_cfg_mem), GFP_KERNEL);
-       if (!cfg_mem)
-               goto failed;
+       int i;
  
-       tuple = &cfg_mem->tuple;
-       parse = &cfg_mem->parse;
-       cf = &parse->cftable_entry;
-       buf = cfg_mem->buf;
-       tuple->TupleData = (cisdata_t *) buf;
-       tuple->TupleOffset = 0;
-       tuple->TupleDataMax = 255;
-       tuple->Attributes = 0;
-       /* Get configuration register information */
-       tuple->DesiredTuple = CISTPL_CONFIG;
-       last_ret = first_tuple(link, tuple, parse);
-       if (last_ret != 0) {
-               last_fn = ParseTuple;
-               goto cs_failed;
-       }
-       link->conf.ConfigBase = parse->config.base;
-       link->conf.Present = parse->config.rmask[0];
+       dev_dbg(&link->dev, "serial_config\n");
  
        /* Is this a compliant multifunction card? */
-       tuple->DesiredTuple = CISTPL_LONGLINK_MFC;
-       tuple->Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK;
-       info->multi = (first_tuple(link, tuple, parse) == 0);
+       info->multi = (link->socket->functions > 1);
  
        /* Is this a multiport card? */
-       tuple->DesiredTuple = CISTPL_MANFID;
        info->manfid = link->manf_id;
        info->prodid = link->card_id;
  
  
        /* Another check for dual-serial cards: look for either serial or
           multifunction cards that ask for appropriate IO port ranges */
-       tuple->DesiredTuple = CISTPL_FUNCID;
        if ((info->multi == 0) &&
            (link->has_func_id) &&
            ((link->func_id == CISTPL_FUNCID_MULTI) ||
-            (link->func_id == CISTPL_FUNCID_SERIAL))) {
-               tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY;
-               if (first_tuple(link, tuple, parse) == 0) {
-                       if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0))
-                               info->multi = cf->io.win[0].len >> 3;
-                       if ((cf->io.nwin == 2) && (cf->io.win[0].len == 8) &&
-                           (cf->io.win[1].len == 8))
-                               info->multi = 2;
-               }
-       }
+            (link->func_id == CISTPL_FUNCID_SERIAL)))
+               pcmcia_loop_config(link, serial_check_for_multi, info);
  
        /*
         * Apply any multi-port quirk.
                        goto failed;
  
        link->dev_node = &info->node[0];
-       kfree(cfg_mem);
        return 0;
  
- cs_failed:
-       cs_error(link, last_fn, last_ret);
  failed:
        serial_remove(link);
-       kfree(cfg_mem);
        return -ENODEV;
  }
  
@@@ -879,10 -818,10 +818,10 @@@ static struct pcmcia_device_id serial_i
        PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0175, 0x0000, "cis/DP83903.cis"),
        PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "cis/3CXEM556.cis"),
        PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "cis/3CXEM556.cis"),
 -      PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "SW_8xx_SER.cis"),  /* Sierra Wireless AC850 3G Network Adapter R1 */
 -      PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0x0710, "SW_7xx_SER.cis"),  /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */
 -      PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "SW_555_SER.cis"),  /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */
 -      PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "SW_555_SER.cis"),  /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */
 +      PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC850", 0xd85f6206, 0x42a2c018, "cis/SW_8xx_SER.cis"), /* Sierra Wireless AC850 3G Network Adapter R1 */
 +      PCMCIA_DEVICE_CIS_PROD_ID12("Sierra Wireless", "AC710/AC750", 0xd85f6206, 0x761b11e0, "cis/SW_7xx_SER.cis"),  /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */
 +      PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "cis/SW_555_SER.cis"),  /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */
 +      PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "cis/SW_555_SER.cis"),  /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */
        PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "cis/MT5634ZLX.cis"),
        PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-2", 0x96913a85, 0x27ab5437, "cis/COMpad2.cis"),
        PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "cis/COMpad4.cis"),
diff --combined include/linux/pci_ids.h
index 84cf1f3b7838e70d30c8d010e0a964b82a2b785b,857cc349bf7102d1cbe21fd2059fad793774a2fe..daecca3c83008f480359878bf9b9f4ce80ee1748
  #define PCI_DEVICE_ID_ATI_IXP600_IDE  0x438c
  #define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390
  #define PCI_DEVICE_ID_ATI_IXP700_IDE  0x439c
 -/* AMD SB Chipset */
 -#define PCI_DEVICE_ID_AMD_SB900_IDE    0x780c
 -#define PCI_DEVICE_ID_AMD_SB900_SATA_IDE 0x7800
  
  #define PCI_VENDOR_ID_VLSI            0x1004
  #define PCI_DEVICE_ID_VLSI_82C592     0x0005
  #define PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM_PCIE 0x0361
  #define PCI_DEVICE_ID_IBM_ICOM_FOUR_PORT_MODEL        0x252
  
 +#define PCI_SUBVENDOR_ID_IBM          0x1014
 +#define PCI_SUBDEVICE_ID_IBM_SATURN_SERIAL_ONE_PORT   0x03d4
 +
  #define PCI_VENDOR_ID_UNISYS          0x1018
  #define PCI_DEVICE_ID_UNISYS_DMA_DIRECTOR 0x001C
  
  #define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450
  #define PCI_DEVICE_ID_AMD_8131_APIC   0x7451
  #define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458
 -#define PCI_DEVICE_ID_AMD_SB900_SMBUS 0x780b
 +#define PCI_DEVICE_ID_AMD_HUDSON2_SMBUS       0x780b
  #define PCI_DEVICE_ID_AMD_CS5535_IDE    0x208F
  #define PCI_DEVICE_ID_AMD_CS5536_ISA    0x2090
  #define PCI_DEVICE_ID_AMD_CS5536_FLASH  0x2091
  #define PCI_DEVICE_ID_AMD_CS5536_UDC    0x2096
  #define PCI_DEVICE_ID_AMD_CS5536_UOC    0x2097
  #define PCI_DEVICE_ID_AMD_CS5536_IDE    0x209A
 -
  #define PCI_DEVICE_ID_AMD_LX_VIDEO  0x2081
  #define PCI_DEVICE_ID_AMD_LX_AES    0x2082
 +#define PCI_DEVICE_ID_AMD_HUDSON2_IDE         0x780c
 +#define PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE    0x7800
  
  #define PCI_VENDOR_ID_TRIDENT         0x1023
  #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX       0x2000
  #define PCI_DEVICE_ID_O2_6730         0x673a
  #define PCI_DEVICE_ID_O2_6832         0x6832
  #define PCI_DEVICE_ID_O2_6836         0x6836
+ #define PCI_DEVICE_ID_O2_6812         0x6872
+ #define PCI_DEVICE_ID_O2_6933         0x6933
  
  #define PCI_VENDOR_ID_3DFX            0x121a
  #define PCI_DEVICE_ID_3DFX_VOODOO     0x0001
  #define PCI_DEVICE_ID_LAVA_DSERIAL    0x0100 /* 2x 16550 */
  #define PCI_DEVICE_ID_LAVA_QUATRO_A   0x0101 /* 2x 16550, half of 4 port */
  #define PCI_DEVICE_ID_LAVA_QUATRO_B   0x0102 /* 2x 16550, half of 4 port */
 +#define PCI_DEVICE_ID_LAVA_QUATTRO_A  0x0120 /* 2x 16550A, half of 4 port */
 +#define PCI_DEVICE_ID_LAVA_QUATTRO_B  0x0121 /* 2x 16550A, half of 4 port */
  #define PCI_DEVICE_ID_LAVA_OCTO_A     0x0180 /* 4x 16550A, half of 8 port */
  #define PCI_DEVICE_ID_LAVA_OCTO_B     0x0181 /* 4x 16550A, half of 8 port */
  #define PCI_DEVICE_ID_LAVA_PORT_PLUS  0x0200 /* 2x 16650 */
  #define PCI_DEVICE_ID_ADDIDATA_APCI7420_3      0x700D
  #define PCI_DEVICE_ID_ADDIDATA_APCI7300_3      0x700E
  #define PCI_DEVICE_ID_ADDIDATA_APCI7800_3      0x700F
 +#define PCI_DEVICE_ID_ADDIDATA_APCIe7300       0x7010
 +#define PCI_DEVICE_ID_ADDIDATA_APCIe7420       0x7011
 +#define PCI_DEVICE_ID_ADDIDATA_APCIe7500       0x7012
 +#define PCI_DEVICE_ID_ADDIDATA_APCIe7800       0x7013
  
  #define PCI_VENDOR_ID_PDC             0x15e9
  
diff --combined include/pcmcia/ss.h
index e0f6feb8588c0e062161431b31681542bb58450b,d85f725be7e30c51e7b62f51f4dbfb51b5a9972f..7c23be706f128bbc02365e868687aa3dbcc73047
@@@ -107,15 -107,6 +107,6 @@@ typedef struct io_window_t 
        struct resource         *res;
  } io_window_t;
  
- #define WINDOW_MAGIC  0xB35C
- typedef struct window_t {
-       u_short                 magic;
-       u_short                 index;
-       struct pcmcia_device    *handle;
-       struct pcmcia_socket    *sock;
-       pccard_mem_map          ctl;
- } window_t;
  /* Maximum number of IO windows per socket */
  #define MAX_IO_WIN 2
  
@@@ -155,7 -146,7 +146,7 @@@ struct pcmcia_socket 
                u_int                   Config;
        } irq;
        io_window_t                     io[MAX_IO_WIN];
-       window_t                        win[MAX_WIN];
+       pccard_mem_map                  win[MAX_WIN];
        struct list_head                cis_cache;
        size_t                          fake_cis_len;
        u8                              *fake_cis;
        u_int                           irq_mask;
        u_int                           map_size;
        u_int                           io_offset;
-       u_char                          pci_irq;
+       u_int                           pci_irq;
        struct pci_dev *                cb_dev;
  
  
        struct device                   dev;
        /* data internal to the socket driver */
        void                            *driver_data;
 +      /* status of the card during resume from a system sleep state */
 +      int                             resume_status;
  };
  
  
@@@ -282,8 -271,6 +273,8 @@@ extern struct pccard_resource_ops pccar
  
  /* socket drivers are expected to use these callbacks in their .drv struct */
  extern int pcmcia_socket_dev_suspend(struct device *dev);
 +extern void pcmcia_socket_dev_early_resume(struct device *dev);
 +extern void pcmcia_socket_dev_late_resume(struct device *dev);
  extern int pcmcia_socket_dev_resume(struct device *dev);
  
  /* socket drivers use this callback in their IRQ handler */