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
  ...

110 files changed:
Documentation/pcmcia/driver-changes.txt
drivers/ata/pata_pcmcia.c
drivers/bluetooth/bluecard_cs.c
drivers/bluetooth/bt3c_cs.c
drivers/bluetooth/btuart_cs.c
drivers/bluetooth/dtl1_cs.c
drivers/char/pcmcia/cm4000_cs.c
drivers/char/pcmcia/cm4040_cs.c
drivers/char/pcmcia/ipwireless/hardware.c
drivers/char/pcmcia/ipwireless/main.c
drivers/char/pcmcia/synclink_cs.c
drivers/ide/ide-cs.c
drivers/isdn/hardware/avm/avm_cs.c
drivers/isdn/hisax/avma1_cs.c
drivers/isdn/hisax/elsa_cs.c
drivers/isdn/hisax/sedlbauer_cs.c
drivers/isdn/hisax/teles_cs.c
drivers/mtd/maps/pcmciamtd.c
drivers/net/pcmcia/3c574_cs.c
drivers/net/pcmcia/3c589_cs.c
drivers/net/pcmcia/axnet_cs.c
drivers/net/pcmcia/com20020_cs.c
drivers/net/pcmcia/fmvj18x_cs.c
drivers/net/pcmcia/ibmtr_cs.c
drivers/net/pcmcia/nmclan_cs.c
drivers/net/pcmcia/pcnet_cs.c
drivers/net/pcmcia/smc91c92_cs.c
drivers/net/pcmcia/xirc2ps_cs.c
drivers/net/wireless/airo_cs.c
drivers/net/wireless/atmel_cs.c
drivers/net/wireless/b43/pcmcia.c
drivers/net/wireless/hostap/hostap_cs.c
drivers/net/wireless/libertas/if_cs.c
drivers/net/wireless/netwave_cs.c
drivers/net/wireless/orinoco/orinoco_cs.c
drivers/net/wireless/orinoco/spectrum_cs.c
drivers/net/wireless/ray_cs.c
drivers/net/wireless/wavelan_cs.c
drivers/net/wireless/wl3501_cs.c
drivers/parport/parport_cs.c
drivers/pcmcia/Kconfig
drivers/pcmcia/Makefile
drivers/pcmcia/cardbus.c
drivers/pcmcia/cirrus.h
drivers/pcmcia/cistpl.c
drivers/pcmcia/cs.c
drivers/pcmcia/cs_internal.h
drivers/pcmcia/ds.c
drivers/pcmcia/i82365.c
drivers/pcmcia/m32r_cfc.c
drivers/pcmcia/m32r_pcc.c
drivers/pcmcia/m8xx_pcmcia.c
drivers/pcmcia/o2micro.h
drivers/pcmcia/pcmcia_ioctl.c
drivers/pcmcia/pcmcia_resource.c
drivers/pcmcia/pd6729.c
drivers/pcmcia/pd6729.h
drivers/pcmcia/pxa2xx_base.c
drivers/pcmcia/pxa2xx_base.h
drivers/pcmcia/pxa2xx_cm_x255.c
drivers/pcmcia/pxa2xx_cm_x270.c
drivers/pcmcia/pxa2xx_e740.c
drivers/pcmcia/pxa2xx_lubbock.c
drivers/pcmcia/pxa2xx_mainstone.c
drivers/pcmcia/pxa2xx_palmld.c
drivers/pcmcia/pxa2xx_palmtx.c
drivers/pcmcia/pxa2xx_sharpsl.c
drivers/pcmcia/pxa2xx_trizeps4.c
drivers/pcmcia/pxa2xx_viper.c
drivers/pcmcia/rsrc_mgr.c
drivers/pcmcia/sa1100_assabet.c
drivers/pcmcia/sa1100_badge4.c
drivers/pcmcia/sa1100_cerf.c
drivers/pcmcia/sa1100_generic.c
drivers/pcmcia/sa1100_h3600.c
drivers/pcmcia/sa1100_jornada720.c
drivers/pcmcia/sa1100_neponset.c
drivers/pcmcia/sa1100_shannon.c
drivers/pcmcia/sa1100_simpad.c
drivers/pcmcia/sa1111_generic.c
drivers/pcmcia/sa1111_generic.h
drivers/pcmcia/sa11xx_base.c
drivers/pcmcia/sa11xx_base.h
drivers/pcmcia/soc_common.c
drivers/pcmcia/soc_common.h
drivers/pcmcia/tcic.c
drivers/pcmcia/topic.h
drivers/scsi/pcmcia/aha152x_stub.c
drivers/scsi/pcmcia/fdomain_stub.c
drivers/scsi/pcmcia/nsp_cs.c
drivers/scsi/pcmcia/qlogic_stub.c
drivers/scsi/pcmcia/sym53c500_cs.c
drivers/serial/serial_cs.c
drivers/ssb/pcmcia.c
drivers/staging/comedi/drivers/cb_das16_cs.c
drivers/staging/comedi/drivers/das08_cs.c
drivers/staging/comedi/drivers/ni_daq_700.c
drivers/staging/comedi/drivers/ni_daq_dio24.c
drivers/staging/comedi/drivers/ni_labpc_cs.c
drivers/staging/comedi/drivers/ni_mio_cs.c
drivers/staging/comedi/drivers/quatech_daqp_cs.c
drivers/telephony/ixj_pcmcia.c
drivers/usb/host/sl811_cs.c
include/linux/pci_ids.h
include/pcmcia/cs.h
include/pcmcia/cs_types.h
include/pcmcia/ds.h
include/pcmcia/ss.h
sound/pcmcia/pdaudiocf/pdaudiocf.c
sound/pcmcia/vx/vxpocket.c

index 059934363cafaf18a15ebff592e167f8c84ee539..446f43b309dfea887937c8059634cc1b8f7642d8 100644 (file)
@@ -1,5 +1,17 @@
 This file details changes in 2.6 which affect PCMCIA card driver authors:
 
+* no cs_error / CS_CHECK / CONFIG_PCMCIA_DEBUG (as of 2.6.33)
+   Instead of the cs_error() callback or the CS_CHECK() macro, please use
+   Linux-style checking of return values, and -- if necessary -- debug
+   messages using "dev_dbg()" or "pr_debug()".
+
+* New CIS tuple access (as of 2.6.33)
+   Instead of pcmcia_get_{first,next}_tuple(), pcmcia_get_tuple_data() and
+   pcmcia_parse_tuple(), a driver shall use "pcmcia_get_tuple()" if it is
+   only interested in one (raw) tuple, or "pcmcia_loop_tuple()" if it is
+   interested in all tuples of one type. To decode the MAC from CISTPL_FUNCE,
+   a new helper "pcmcia_get_mac_from_cis()" was added.
+
 * New configuration loop helper (as of 2.6.28)
    By calling pcmcia_loop_config(), a driver can iterate over all available
    configuration options. During a driver's probe() phase, one doesn't need
index dc99e26f8e5ba8c5d1a5635de6816d2a868a44bb..1b392c9e853134ebe5180b61c88e6451252e198d 100644 (file)
@@ -177,9 +177,6 @@ static struct ata_port_operations pcmcia_8bit_port_ops = {
        .drain_fifo     = pcmcia_8bit_drain_fifo,
 };
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 
 struct pcmcia_config_check {
        unsigned long ctl_base;
@@ -252,7 +249,7 @@ static int pcmcia_init_one(struct pcmcia_device *pdev)
        struct ata_port *ap;
        struct ata_pcmcia_info *info;
        struct pcmcia_config_check *stk = NULL;
-       int last_ret = 0, last_fn = 0, is_kme = 0, ret = -ENOMEM, p;
+       int is_kme = 0, ret = -ENOMEM, p;
        unsigned long io_base, ctl_base;
        void __iomem *io_addr, *ctl_addr;
        int n_ports = 1;
@@ -271,7 +268,6 @@ static int pcmcia_init_one(struct pcmcia_device *pdev)
        pdev->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
        pdev->io.IOAddrLines = 3;
        pdev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-       pdev->irq.IRQInfo1 = IRQ_LEVEL_ID;
        pdev->conf.Attributes = CONF_ENABLE_IRQ;
        pdev->conf.IntType = INT_MEMORY_AND_IO;
 
@@ -296,8 +292,13 @@ static int pcmcia_init_one(struct pcmcia_device *pdev)
        }
        io_base = pdev->io.BasePort1;
        ctl_base = stk->ctl_base;
-       CS_CHECK(RequestIRQ, pcmcia_request_irq(pdev, &pdev->irq));
-       CS_CHECK(RequestConfiguration, pcmcia_request_configuration(pdev, &pdev->conf));
+       ret = pcmcia_request_irq(pdev, &pdev->irq);
+       if (ret)
+               goto failed;
+
+       ret = pcmcia_request_configuration(pdev, &pdev->conf);
+       if (ret)
+               goto failed;
 
        /* iomap */
        ret = -ENOMEM;
@@ -351,8 +352,6 @@ static int pcmcia_init_one(struct pcmcia_device *pdev)
        kfree(stk);
        return 0;
 
-cs_failed:
-       cs_error(pdev, last_fn, last_ret);
 failed:
        kfree(stk);
        info->ndev = 0;
index b0e569ba730d0e7ef1d8fafdcfee3ff20ab1a456..2acdc605cb4b670beefb8b0bf0ef326ff9c123e5 100644 (file)
@@ -867,11 +867,9 @@ static int bluecard_probe(struct pcmcia_device *link)
 
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
        link->io.NumPorts1 = 8;
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 
        link->irq.Handler = bluecard_interrupt;
-       link->irq.Instance = info;
 
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
@@ -905,22 +903,16 @@ static int bluecard_config(struct pcmcia_device *link)
                        break;
        }
 
-       if (i != 0) {
-               cs_error(link, RequestIO, i);
+       if (i != 0)
                goto failed;
-       }
 
        i = pcmcia_request_irq(link, &link->irq);
-       if (i != 0) {
-               cs_error(link, RequestIRQ, i);
+       if (i != 0)
                link->irq.AssignedIRQ = 0;
-       }
 
        i = pcmcia_request_configuration(link, &link->conf);
-       if (i != 0) {
-               cs_error(link, RequestConfiguration, i);
+       if (i != 0)
                goto failed;
-       }
 
        if (bluecard_open(info) != 0)
                goto failed;
index d58e22b9f06a46b2b6a082703f822519f0b815b7..d814a2755ccbe756310261698fd41d3740fc2ced 100644 (file)
@@ -659,11 +659,9 @@ static int bt3c_probe(struct pcmcia_device *link)
 
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
        link->io.NumPorts1 = 8;
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 
        link->irq.Handler = bt3c_interrupt;
-       link->irq.Instance = info;
 
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
@@ -740,21 +738,16 @@ static int bt3c_config(struct pcmcia_device *link)
                goto found_port;
 
        BT_ERR("No usable port range found");
-       cs_error(link, RequestIO, -ENODEV);
        goto failed;
 
 found_port:
        i = pcmcia_request_irq(link, &link->irq);
-       if (i != 0) {
-               cs_error(link, RequestIRQ, i);
+       if (i != 0)
                link->irq.AssignedIRQ = 0;
-       }
 
        i = pcmcia_request_configuration(link, &link->conf);
-       if (i != 0) {
-               cs_error(link, RequestConfiguration, i);
+       if (i != 0)
                goto failed;
-       }
 
        if (bt3c_open(info) != 0)
                goto failed;
index efd689a062eb231dcd95c58af780822d0f00c479..d339464dc15e7f06602e58c988e74961377447b9 100644 (file)
@@ -588,11 +588,9 @@ static int btuart_probe(struct pcmcia_device *link)
 
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
        link->io.NumPorts1 = 8;
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 
        link->irq.Handler = btuart_interrupt;
-       link->irq.Instance = info;
 
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
@@ -669,21 +667,16 @@ static int btuart_config(struct pcmcia_device *link)
                goto found_port;
 
        BT_ERR("No usable port range found");
-       cs_error(link, RequestIO, -ENODEV);
        goto failed;
 
 found_port:
        i = pcmcia_request_irq(link, &link->irq);
-       if (i != 0) {
-               cs_error(link, RequestIRQ, i);
+       if (i != 0)
                link->irq.AssignedIRQ = 0;
-       }
 
        i = pcmcia_request_configuration(link, &link->conf);
-       if (i != 0) {
-               cs_error(link, RequestConfiguration, i);
+       if (i != 0)
                goto failed;
-       }
 
        if (btuart_open(info) != 0)
                goto failed;
index b881a9cd8741d78cb3c24adfb3f868cb604c294d..4f02a6f3c980b246c1f9f9843d79e51da7cf2af1 100644 (file)
@@ -573,11 +573,9 @@ static int dtl1_probe(struct pcmcia_device *link)
 
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
        link->io.NumPorts1 = 8;
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
 
        link->irq.Handler = dtl1_interrupt;
-       link->irq.Instance = info;
 
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
@@ -622,16 +620,12 @@ static int dtl1_config(struct pcmcia_device *link)
                goto failed;
 
        i = pcmcia_request_irq(link, &link->irq);
-       if (i != 0) {
-               cs_error(link, RequestIRQ, i);
+       if (i != 0)
                link->irq.AssignedIRQ = 0;
-       }
 
        i = pcmcia_request_configuration(link, &link->conf);
-       if (i != 0) {
-               cs_error(link, RequestConfiguration, i);
+       if (i != 0)
                goto failed;
-       }
 
        if (dtl1_open(info) != 0)
                goto failed;
index c250a31efa537c1f15ab8466b20bcc779ba214f3..2db4c0a29b052540ba988e05a5c217804c3d5aed 100644 (file)
@@ -23,8 +23,6 @@
   * All rights reserved. Licensed under dual BSD/GPL license.
   */
 
-/* #define PCMCIA_DEBUG 6 */
-
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 
 /* #define ATR_CSUM */
 
-#ifdef PCMCIA_DEBUG
-#define reader_to_dev(x)       (&handle_to_dev(x->p_dev))
-static int pc_debug = PCMCIA_DEBUG;
-module_param(pc_debug, int, 0600);
-#define DEBUGP(n, rdr, x, args...) do {                                \
-       if (pc_debug >= (n))                                            \
-               dev_printk(KERN_DEBUG, reader_to_dev(rdr), "%s:" x,     \
-                          __func__ , ## args);                 \
+#define reader_to_dev(x)       (&x->p_dev->dev)
+
+/* n (debug level) is ignored */
+/* additional debug output may be enabled by re-compiling with
+ * CM4000_DEBUG set */
+/* #define CM4000_DEBUG */
+#define DEBUGP(n, rdr, x, args...) do {                \
+               dev_dbg(reader_to_dev(rdr), "%s:" x,    \
+                          __func__ , ## args);         \
        } while (0)
-#else
-#define DEBUGP(n, rdr, x, args...)
-#endif
+
 static char *version = "cm4000_cs.c v2.4.0gm6 - All bugs added by Harald Welte";
 
 #define        T_1SEC          (HZ)
@@ -174,14 +171,13 @@ static unsigned char fi_di_table[10][14] = {
 /* 9 */ {0x09,0x19,0x29,0x39,0x49,0x59,0x69,0x11,0x11,0x99,0xA9,0xB9,0xC9,0xD9}
 };
 
-#ifndef PCMCIA_DEBUG
+#ifndef CM4000_DEBUG
 #define        xoutb   outb
 #define        xinb    inb
 #else
 static inline void xoutb(unsigned char val, unsigned short port)
 {
-       if (pc_debug >= 7)
-               printk(KERN_DEBUG "outb(val=%.2x,port=%.4x)\n", val, port);
+       pr_debug("outb(val=%.2x,port=%.4x)\n", val, port);
        outb(val, port);
 }
 static inline unsigned char xinb(unsigned short port)
@@ -189,8 +185,7 @@ static inline unsigned char xinb(unsigned short port)
        unsigned char val;
 
        val = inb(port);
-       if (pc_debug >= 7)
-               printk(KERN_DEBUG "%.2x=inb(%.4x)\n", val, port);
+       pr_debug("%.2x=inb(%.4x)\n", val, port);
 
        return val;
 }
@@ -514,12 +509,10 @@ static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq)
        for (i = 0; i < 4; i++) {
                xoutb(i, REG_BUF_ADDR(iobase));
                xoutb(dev->pts[i], REG_BUF_DATA(iobase));       /* buf data */
-#ifdef PCMCIA_DEBUG
-               if (pc_debug >= 5)
-                       printk("0x%.2x ", dev->pts[i]);
+#ifdef CM4000_DEBUG
+               pr_debug("0x%.2x ", dev->pts[i]);
        }
-       if (pc_debug >= 5)
-               printk("\n");
+       pr_debug("\n");
 #else
        }
 #endif
@@ -579,14 +572,13 @@ static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq)
                pts_reply[i] = inb(REG_BUF_DATA(iobase));
        }
 
-#ifdef PCMCIA_DEBUG
+#ifdef CM4000_DEBUG
        DEBUGP(2, dev, "PTSreply: ");
        for (i = 0; i < num_bytes_read; i++) {
-               if (pc_debug >= 5)
-                       printk("0x%.2x ", pts_reply[i]);
+               pr_debug("0x%.2x ", pts_reply[i]);
        }
-       printk("\n");
-#endif /* PCMCIA_DEBUG */
+       pr_debug("\n");
+#endif /* CM4000_DEBUG */
 
        DEBUGP(5, dev, "Clear Tactive in Flags1\n");
        xoutb(0x20, REG_FLAGS1(iobase));
@@ -655,7 +647,7 @@ static void terminate_monitor(struct cm4000_dev *dev)
 
        DEBUGP(5, dev, "Delete timer\n");
        del_timer_sync(&dev->timer);
-#ifdef PCMCIA_DEBUG
+#ifdef CM4000_DEBUG
        dev->monitor_running = 0;
 #endif
 
@@ -898,7 +890,7 @@ static void monitor_card(unsigned long p)
                                DEBUGP(4, dev, "ATR checksum (0x%.2x, should "
                                       "be zero) failed\n", dev->atr_csum);
                        }
-#ifdef PCMCIA_DEBUG
+#ifdef CM4000_DEBUG
                        else if (test_bit(IS_BAD_LENGTH, &dev->flags)) {
                                DEBUGP(4, dev, "ATR length error\n");
                        } else {
@@ -1415,7 +1407,7 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        int size;
        int rc;
        void __user *argp = (void __user *)arg;
-#ifdef PCMCIA_DEBUG
+#ifdef CM4000_DEBUG
        char *ioctl_names[CM_IOC_MAXNR + 1] = {
                [_IOC_NR(CM_IOCGSTATUS)] "CM_IOCGSTATUS",
                [_IOC_NR(CM_IOCGATR)] "CM_IOCGATR",
@@ -1423,9 +1415,9 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
                [_IOC_NR(CM_IOCSPTS)] "CM_IOCSPTS",
                [_IOC_NR(CM_IOSDBGLVL)] "CM4000_DBGLVL",
        };
-#endif
        DEBUGP(3, dev, "cmm_ioctl(device=%d.%d) %s\n", imajor(inode),
               iminor(inode), ioctl_names[_IOC_NR(cmd)]);
+#endif
 
        lock_kernel();
        rc = -ENODEV;
@@ -1523,7 +1515,7 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
                }
        case CM_IOCARDOFF:
 
-#ifdef PCMCIA_DEBUG
+#ifdef CM4000_DEBUG
                DEBUGP(4, dev, "... in CM_IOCARDOFF\n");
                if (dev->flags0 & 0x01) {
                        DEBUGP(4, dev, "    Card inserted\n");
@@ -1625,18 +1617,9 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 
                }
                break;
-#ifdef PCMCIA_DEBUG
-       case CM_IOSDBGLVL:      /* set debug log level */
-               {
-                       int old_pc_debug = 0;
-
-                       old_pc_debug = pc_debug;
-                       if (copy_from_user(&pc_debug, argp, sizeof(int)))
-                               rc = -EFAULT;
-                       else if (old_pc_debug != pc_debug)
-                               DEBUGP(0, dev, "Changed debug log level "
-                                      "to %i\n", pc_debug);
-               }
+#ifdef CM4000_DEBUG
+       case CM_IOSDBGLVL:
+               rc = -ENOTTY;
                break;
 #endif
        default:
index 4f0723b07974615f5177134b49deb671580e8813..a6a70e476beaf4babb7446643775d92ed5866635 100644 (file)
@@ -17,8 +17,6 @@
  * All rights reserved, Dual BSD/GPL Licensed.
  */
 
-/* #define PCMCIA_DEBUG 6 */
-
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 #include "cm4040_cs.h"
 
 
-#ifdef PCMCIA_DEBUG
-#define reader_to_dev(x)       (&handle_to_dev(x->p_dev))
-static int pc_debug = PCMCIA_DEBUG;
-module_param(pc_debug, int, 0600);
-#define DEBUGP(n, rdr, x, args...) do {                                \
-       if (pc_debug >= (n))                                            \
-               dev_printk(KERN_DEBUG, reader_to_dev(rdr), "%s:" x,     \
-                          __func__ , ##args);                  \
+#define reader_to_dev(x)       (&x->p_dev->dev)
+
+/* n (debug level) is ignored */
+/* additional debug output may be enabled by re-compiling with
+ * CM4040_DEBUG set */
+/* #define CM4040_DEBUG */
+#define DEBUGP(n, rdr, x, args...) do {                \
+               dev_dbg(reader_to_dev(rdr), "%s:" x,    \
+                          __func__ , ## args);         \
        } while (0)
-#else
-#define DEBUGP(n, rdr, x, args...)
-#endif
 
 static char *version =
 "OMNIKEY CardMan 4040 v1.1.0gm5 - All bugs added by Harald Welte";
@@ -90,14 +86,13 @@ struct reader_dev {
 
 static struct pcmcia_device *dev_table[CM_MAX_DEV];
 
-#ifndef PCMCIA_DEBUG
+#ifndef CM4040_DEBUG
 #define        xoutb   outb
 #define        xinb    inb
 #else
 static inline void xoutb(unsigned char val, unsigned short port)
 {
-       if (pc_debug >= 7)
-               printk(KERN_DEBUG "outb(val=%.2x,port=%.4x)\n", val, port);
+       pr_debug("outb(val=%.2x,port=%.4x)\n", val, port);
        outb(val, port);
 }
 
@@ -106,8 +101,7 @@ static inline unsigned char xinb(unsigned short port)
        unsigned char val;
 
        val = inb(port);
-       if (pc_debug >= 7)
-               printk(KERN_DEBUG "%.2x=inb(%.4x)\n", val, port);
+       pr_debug("%.2x=inb(%.4x)\n", val, port);
        return val;
 }
 #endif
@@ -260,23 +254,22 @@ static ssize_t cm4040_read(struct file *filp, char __user *buf,
                        return -EIO;
                }
                dev->r_buf[i] = xinb(iobase + REG_OFFSET_BULK_IN);
-#ifdef PCMCIA_DEBUG
-               if (pc_debug >= 6)
-                       printk(KERN_DEBUG "%lu:%2x ", i, dev->r_buf[i]);
+#ifdef CM4040_DEBUG
+               pr_debug("%lu:%2x ", i, dev->r_buf[i]);
        }
-       printk("\n");
+       pr_debug("\n");
 #else
        }
 #endif
 
        bytes_to_read = 5 + le32_to_cpu(*(__le32 *)&dev->r_buf[1]);
 
-       DEBUGP(6, dev, "BytesToRead=%lu\n", bytes_to_read);
+       DEBUGP(6, dev, "BytesToRead=%zu\n", bytes_to_read);
 
        min_bytes_to_read = min(count, bytes_to_read + 5);
        min_bytes_to_read = min_t(size_t, min_bytes_to_read, READ_WRITE_BUFFER_SIZE);
 
-       DEBUGP(6, dev, "Min=%lu\n", min_bytes_to_read);
+       DEBUGP(6, dev, "Min=%zu\n", min_bytes_to_read);
 
        for (i = 0; i < (min_bytes_to_read-5); i++) {
                rc = wait_for_bulk_in_ready(dev);
@@ -288,11 +281,10 @@ static ssize_t cm4040_read(struct file *filp, char __user *buf,
                        return -EIO;
                }
                dev->r_buf[i+5] = xinb(iobase + REG_OFFSET_BULK_IN);
-#ifdef PCMCIA_DEBUG
-               if (pc_debug >= 6)
-                       printk(KERN_DEBUG "%lu:%2x ", i, dev->r_buf[i]);
+#ifdef CM4040_DEBUG
+               pr_debug("%lu:%2x ", i, dev->r_buf[i]);
        }
-       printk("\n");
+       pr_debug("\n");
 #else
        }
 #endif
@@ -547,7 +539,7 @@ static int cm4040_config_check(struct pcmcia_device *p_dev,
        p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK;
 
        rc = pcmcia_request_io(p_dev, &p_dev->io);
-       dev_printk(KERN_INFO, &handle_to_dev(p_dev),
+       dev_printk(KERN_INFO, &p_dev->dev,
                   "pcmcia_request_io returned 0x%x\n", rc);
        return rc;
 }
@@ -569,7 +561,7 @@ static int reader_config(struct pcmcia_device *link, int devno)
 
        fail_rc = pcmcia_request_configuration(link, &link->conf);
        if (fail_rc != 0) {
-               dev_printk(KERN_INFO, &handle_to_dev(link),
+               dev_printk(KERN_INFO, &link->dev,
                           "pcmcia_request_configuration failed 0x%x\n",
                           fail_rc);
                goto cs_release;
index 4c1820cad71230045624f002368c6c03efbd0061..99cffdab1056565c3e73276a3cf304a8224c5d8e 100644 (file)
@@ -1213,12 +1213,12 @@ static irqreturn_t ipwireless_handle_v2_v3_interrupt(int irq,
 
 irqreturn_t ipwireless_interrupt(int irq, void *dev_id)
 {
-       struct ipw_hardware *hw = dev_id;
+       struct ipw_dev *ipw = dev_id;
 
-       if (hw->hw_version == HW_VERSION_1)
-               return ipwireless_handle_v1_interrupt(irq, hw);
+       if (ipw->hardware->hw_version == HW_VERSION_1)
+               return ipwireless_handle_v1_interrupt(irq, ipw->hardware);
        else
-               return ipwireless_handle_v2_v3_interrupt(irq, hw);
+               return ipwireless_handle_v2_v3_interrupt(irq, ipw->hardware);
 }
 
 static void flush_packets_to_hw(struct ipw_hardware *hw)
index 5216fce0c62d57ce6d2947750ac7dc22f1b82f0e..dff24dae1485e28e9e365b975fe5fb86f91e6249 100644 (file)
@@ -65,10 +65,7 @@ static void signalled_reboot_work(struct work_struct *work_reboot)
        struct ipw_dev *ipw = container_of(work_reboot, struct ipw_dev,
                        work_reboot);
        struct pcmcia_device *link = ipw->link;
-       int ret = pcmcia_reset_card(link->socket);
-
-       if (ret != 0)
-               cs_error(link, ResetCard, ret);
+       pcmcia_reset_card(link->socket);
 }
 
 static void signalled_reboot_callback(void *callback_data)
@@ -79,208 +76,127 @@ static void signalled_reboot_callback(void *callback_data)
        schedule_work(&ipw->work_reboot);
 }
 
-static int config_ipwireless(struct ipw_dev *ipw)
+static int ipwireless_probe(struct pcmcia_device *p_dev,
+                           cistpl_cftable_entry_t *cfg,
+                           cistpl_cftable_entry_t *dflt,
+                           unsigned int vcc,
+                           void *priv_data)
 {
-       struct pcmcia_device *link = ipw->link;
-       int ret;
-       tuple_t tuple;
-       unsigned short buf[64];
-       cisparse_t parse;
-       unsigned short cor_value;
+       struct ipw_dev *ipw = priv_data;
+       struct resource *io_resource;
        memreq_t memreq_attr_memory;
        memreq_t memreq_common_memory;
+       int ret;
 
-       ipw->is_v2_card = 0;
-
-       tuple.Attributes = 0;
-       tuple.TupleData = (cisdata_t *) buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-
-       tuple.DesiredTuple = RETURN_FIRST_TUPLE;
-
-       ret = pcmcia_get_first_tuple(link, &tuple);
-
-       while (ret == 0) {
-               ret = pcmcia_get_tuple_data(link, &tuple);
-
-               if (ret != 0) {
-                       cs_error(link, GetTupleData, ret);
-                       goto exit0;
-               }
-               ret = pcmcia_get_next_tuple(link, &tuple);
-       }
-
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-
-       ret = pcmcia_get_first_tuple(link, &tuple);
-
-       if (ret != 0) {
-               cs_error(link, GetFirstTuple, ret);
-               goto exit0;
-       }
-
-       ret = pcmcia_get_tuple_data(link, &tuple);
-
-       if (ret != 0) {
-               cs_error(link, GetTupleData, ret);
-               goto exit0;
-       }
-
-       ret = pcmcia_parse_tuple(&tuple, &parse);
-
-       if (ret != 0) {
-               cs_error(link, ParseTuple, ret);
-               goto exit0;
-       }
-
-       link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-       link->io.BasePort1 = parse.cftable_entry.io.win[0].base;
-       link->io.NumPorts1 = parse.cftable_entry.io.win[0].len;
-       link->io.IOAddrLines = 16;
-
-       link->irq.IRQInfo1 = parse.cftable_entry.irq.IRQInfo1;
+       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+       p_dev->io.BasePort1 = cfg->io.win[0].base;
+       p_dev->io.NumPorts1 = cfg->io.win[0].len;
+       p_dev->io.IOAddrLines = 16;
 
        /* 0x40 causes it to generate level mode interrupts. */
        /* 0x04 enables IREQ pin. */
-       cor_value = parse.cftable_entry.index | 0x44;
-       link->conf.ConfigIndex = cor_value;
+       p_dev->conf.ConfigIndex = cfg->index | 0x44;
+       ret = pcmcia_request_io(p_dev, &p_dev->io);
+       if (ret)
+               return ret;
 
-       /* IRQ and I/O settings */
-       tuple.DesiredTuple = CISTPL_CONFIG;
+       io_resource = request_region(p_dev->io.BasePort1, p_dev->io.NumPorts1,
+                               IPWIRELESS_PCCARD_NAME);
 
-       ret = pcmcia_get_first_tuple(link, &tuple);
+       if (cfg->mem.nwin == 0)
+               return 0;
 
-       if (ret != 0) {
-               cs_error(link, GetFirstTuple, ret);
-               goto exit0;
-       }
+       ipw->request_common_memory.Attributes =
+               WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE;
+       ipw->request_common_memory.Base = cfg->mem.win[0].host_addr;
+       ipw->request_common_memory.Size = cfg->mem.win[0].len;
+       if (ipw->request_common_memory.Size < 0x1000)
+               ipw->request_common_memory.Size = 0x1000;
+       ipw->request_common_memory.AccessSpeed = 0;
 
-       ret = pcmcia_get_tuple_data(link, &tuple);
-
-       if (ret != 0) {
-               cs_error(link, GetTupleData, ret);
-               goto exit0;
-       }
+       ret = pcmcia_request_window(p_dev, &ipw->request_common_memory,
+                               &ipw->handle_common_memory);
 
-       ret = pcmcia_parse_tuple(&tuple, &parse);
+       if (ret != 0)
+               goto exit1;
 
-       if (ret != 0) {
-               cs_error(link, GetTupleData, ret);
-               goto exit0;
-       }
-       link->conf.Attributes = CONF_ENABLE_IRQ;
-       link->conf.ConfigBase = parse.config.base;
-       link->conf.Present = parse.config.rmask[0];
-       link->conf.IntType = INT_MEMORY_AND_IO;
+       memreq_common_memory.CardOffset = cfg->mem.win[0].card_addr;
+       memreq_common_memory.Page = 0;
 
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       link->irq.Handler = ipwireless_interrupt;
-       link->irq.Instance = ipw->hardware;
+       ret = pcmcia_map_mem_page(p_dev, ipw->handle_common_memory,
+                               &memreq_common_memory);
 
-       ret = pcmcia_request_io(link, &link->io);
+       if (ret != 0)
+               goto exit2;
 
-       if (ret != 0) {
-               cs_error(link, RequestIO, ret);
-               goto exit0;
-       }
+       ipw->is_v2_card = cfg->mem.win[0].len == 0x100;
 
-       request_region(link->io.BasePort1, link->io.NumPorts1,
+       ipw->common_memory = ioremap(ipw->request_common_memory.Base,
+                               ipw->request_common_memory.Size);
+       request_mem_region(ipw->request_common_memory.Base,
+                       ipw->request_common_memory.Size,
                        IPWIRELESS_PCCARD_NAME);
 
-       /* memory settings */
-
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-
-       ret = pcmcia_get_first_tuple(link, &tuple);
-
-       if (ret != 0) {
-               cs_error(link, GetFirstTuple, ret);
-               goto exit1;
-       }
-
-       ret = pcmcia_get_tuple_data(link, &tuple);
+       ipw->request_attr_memory.Attributes =
+               WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM | WIN_ENABLE;
+       ipw->request_attr_memory.Base = 0;
+       ipw->request_attr_memory.Size = 0;      /* this used to be 0x1000 */
+       ipw->request_attr_memory.AccessSpeed = 0;
 
-       if (ret != 0) {
-               cs_error(link, GetTupleData, ret);
-               goto exit1;
-       }
-
-       ret = pcmcia_parse_tuple(&tuple, &parse);
-
-       if (ret != 0) {
-               cs_error(link, ParseTuple, ret);
-               goto exit1;
-       }
+       ret = pcmcia_request_window(p_dev, &ipw->request_attr_memory,
+                               &ipw->handle_attr_memory);
 
-       if (parse.cftable_entry.mem.nwin > 0) {
-               ipw->request_common_memory.Attributes =
-                       WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE;
-               ipw->request_common_memory.Base =
-                       parse.cftable_entry.mem.win[0].host_addr;
-               ipw->request_common_memory.Size = parse.cftable_entry.mem.win[0].len;
-               if (ipw->request_common_memory.Size < 0x1000)
-                       ipw->request_common_memory.Size = 0x1000;
-               ipw->request_common_memory.AccessSpeed = 0;
-
-               ret = pcmcia_request_window(&link, &ipw->request_common_memory,
-                               &ipw->handle_common_memory);
+       if (ret != 0)
+               goto exit2;
 
-               if (ret != 0) {
-                       cs_error(link, RequestWindow, ret);
-                       goto exit1;
-               }
+       memreq_attr_memory.CardOffset = 0;
+       memreq_attr_memory.Page = 0;
 
-               memreq_common_memory.CardOffset =
-                       parse.cftable_entry.mem.win[0].card_addr;
-               memreq_common_memory.Page = 0;
+       ret = pcmcia_map_mem_page(p_dev, ipw->handle_attr_memory,
+                               &memreq_attr_memory);
 
-               ret = pcmcia_map_mem_page(ipw->handle_common_memory,
-                               &memreq_common_memory);
+       if (ret != 0)
+               goto exit3;
 
-               if (ret != 0) {
-                       cs_error(link, MapMemPage, ret);
-                       goto exit1;
-               }
+       ipw->attr_memory = ioremap(ipw->request_attr_memory.Base,
+                               ipw->request_attr_memory.Size);
+       request_mem_region(ipw->request_attr_memory.Base,
+                       ipw->request_attr_memory.Size, IPWIRELESS_PCCARD_NAME);
 
-               ipw->is_v2_card =
-                       parse.cftable_entry.mem.win[0].len == 0x100;
+       return 0;
 
-               ipw->common_memory = ioremap(ipw->request_common_memory.Base,
+exit3:
+       pcmcia_release_window(p_dev, ipw->handle_attr_memory);
+exit2:
+       if (ipw->common_memory) {
+               release_mem_region(ipw->request_common_memory.Base,
                                ipw->request_common_memory.Size);
-               request_mem_region(ipw->request_common_memory.Base,
-                               ipw->request_common_memory.Size, IPWIRELESS_PCCARD_NAME);
-
-               ipw->request_attr_memory.Attributes =
-                       WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM | WIN_ENABLE;
-               ipw->request_attr_memory.Base = 0;
-               ipw->request_attr_memory.Size = 0;      /* this used to be 0x1000 */
-               ipw->request_attr_memory.AccessSpeed = 0;
-
-               ret = pcmcia_request_window(&link, &ipw->request_attr_memory,
-                               &ipw->handle_attr_memory);
+               iounmap(ipw->common_memory);
+               pcmcia_release_window(p_dev, ipw->handle_common_memory);
+       } else
+               pcmcia_release_window(p_dev, ipw->handle_common_memory);
+exit1:
+       release_resource(io_resource);
+       pcmcia_disable_device(p_dev);
+       return -1;
+}
 
-               if (ret != 0) {
-                       cs_error(link, RequestWindow, ret);
-                       goto exit2;
-               }
+static int config_ipwireless(struct ipw_dev *ipw)
+{
+       struct pcmcia_device *link = ipw->link;
+       int ret = 0;
 
-               memreq_attr_memory.CardOffset = 0;
-               memreq_attr_memory.Page = 0;
+       ipw->is_v2_card = 0;
 
-               ret = pcmcia_map_mem_page(ipw->handle_attr_memory,
-                               &memreq_attr_memory);
+       ret = pcmcia_loop_config(link, ipwireless_probe, ipw);
+       if (ret != 0)
+               return ret;
 
-               if (ret != 0) {
-                       cs_error(link, MapMemPage, ret);
-                       goto exit2;
-               }
+       link->conf.Attributes = CONF_ENABLE_IRQ;
+       link->conf.IntType = INT_MEMORY_AND_IO;
 
-               ipw->attr_memory = ioremap(ipw->request_attr_memory.Base,
-                               ipw->request_attr_memory.Size);
-               request_mem_region(ipw->request_attr_memory.Base, ipw->request_attr_memory.Size,
-                               IPWIRELESS_PCCARD_NAME);
-       }
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
+       link->irq.Handler = ipwireless_interrupt;
 
        INIT_WORK(&ipw->work_reboot, signalled_reboot_work);
 
@@ -291,10 +207,8 @@ static int config_ipwireless(struct ipw_dev *ipw)
 
        ret = pcmcia_request_irq(link, &link->irq);
 
-       if (ret != 0) {
-               cs_error(link, RequestIRQ, ret);
-               goto exit3;
-       }
+       if (ret != 0)
+               goto exit;
 
        printk(KERN_INFO IPWIRELESS_PCCARD_NAME ": Card type %s\n",
                        ipw->is_v2_card ? "V2/V3" : "V1");
@@ -316,12 +230,12 @@ static int config_ipwireless(struct ipw_dev *ipw)
 
        ipw->network = ipwireless_network_create(ipw->hardware);
        if (!ipw->network)
-               goto exit3;
+               goto exit;
 
        ipw->tty = ipwireless_tty_create(ipw->hardware, ipw->network,
                        ipw->nodes);
        if (!ipw->tty)
-               goto exit3;
+               goto exit;
 
        ipwireless_init_hardware_v2_v3(ipw->hardware);
 
@@ -331,35 +245,27 @@ static int config_ipwireless(struct ipw_dev *ipw)
         */
        ret = pcmcia_request_configuration(link, &link->conf);
 
-       if (ret != 0) {
-               cs_error(link, RequestConfiguration, ret);
-               goto exit4;
-       }
+       if (ret != 0)
+               goto exit;
 
        link->dev_node = &ipw->nodes[0];
 
        return 0;
 
-exit4:
-       pcmcia_disable_device(link);
-exit3:
+exit:
        if (ipw->attr_memory) {
                release_mem_region(ipw->request_attr_memory.Base,
                                ipw->request_attr_memory.Size);
                iounmap(ipw->attr_memory);
-               pcmcia_release_window(ipw->handle_attr_memory);
-               pcmcia_disable_device(link);
+               pcmcia_release_window(link, ipw->handle_attr_memory);
        }
-exit2:
        if (ipw->common_memory) {
                release_mem_region(ipw->request_common_memory.Base,
                                ipw->request_common_memory.Size);
                iounmap(ipw->common_memory);
-               pcmcia_release_window(ipw->handle_common_memory);
+               pcmcia_release_window(link, ipw->handle_common_memory);
        }
-exit1:
        pcmcia_disable_device(link);
-exit0:
        return -1;
 }
 
@@ -378,9 +284,9 @@ static void release_ipwireless(struct ipw_dev *ipw)
                iounmap(ipw->attr_memory);
        }
        if (ipw->common_memory)
-               pcmcia_release_window(ipw->handle_common_memory);
+               pcmcia_release_window(ipw->link, ipw->handle_common_memory);
        if (ipw->attr_memory)
-               pcmcia_release_window(ipw->handle_attr_memory);
+               pcmcia_release_window(ipw->link, ipw->handle_attr_memory);
 
        /* Break the link with Card Services */
        pcmcia_disable_device(ipw->link);
@@ -406,7 +312,6 @@ static int ipwireless_attach(struct pcmcia_device *link)
 
        ipw->link = link;
        link->priv = ipw;
-       link->irq.Instance = ipw;
 
        /* Link this device into our device list. */
        link->dev_node = &ipw->nodes[0];
@@ -421,7 +326,6 @@ static int ipwireless_attach(struct pcmcia_device *link)
        ret = config_ipwireless(ipw);
 
        if (ret != 0) {
-               cs_error(link, RegisterClient, ret);
                ipwireless_detach(link);
                return ret;
        }
index caf6e4d194696204fa41632e220369a2ca2876a7..c31a0d913d370ae2f2354109bf3c57d410e6e155 100644 (file)
@@ -554,7 +554,6 @@ static int mgslpc_probe(struct pcmcia_device *link)
 
     /* Interrupt setup */
     link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-    link->irq.IRQInfo1   = IRQ_LEVEL_ID;
     link->irq.Handler = NULL;
 
     link->conf.Attributes = 0;
@@ -572,69 +571,51 @@ static int mgslpc_probe(struct pcmcia_device *link)
 /* Card has been inserted.
  */
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
+static int mgslpc_ioprobe(struct pcmcia_device *p_dev,
+                         cistpl_cftable_entry_t *cfg,
+                         cistpl_cftable_entry_t *dflt,
+                         unsigned int vcc,
+                         void *priv_data)
+{
+       if (cfg->io.nwin > 0) {
+               p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+               if (!(cfg->io.flags & CISTPL_IO_8BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
+               if (!(cfg->io.flags & CISTPL_IO_16BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+               p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK;
+               p_dev->io.BasePort1 = cfg->io.win[0].base;
+               p_dev->io.NumPorts1 = cfg->io.win[0].len;
+               return pcmcia_request_io(p_dev, &p_dev->io);
+       }
+       return -ENODEV;
+}
 
 static int mgslpc_config(struct pcmcia_device *link)
 {
     MGSLPC_INFO *info = link->priv;
-    tuple_t tuple;
-    cisparse_t parse;
-    int last_fn, last_ret;
-    u_char buf[64];
-    cistpl_cftable_entry_t dflt = { 0 };
-    cistpl_cftable_entry_t *cfg;
+    int ret;
 
     if (debug_level >= DEBUG_LEVEL_INFO)
            printk("mgslpc_config(0x%p)\n", link);
 
-    tuple.Attributes = 0;
-    tuple.TupleData = buf;
-    tuple.TupleDataMax = sizeof(buf);
-    tuple.TupleOffset = 0;
-
-    /* get CIS configuration entry */
-
-    tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-    CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-
-    cfg = &(parse.cftable_entry);
-    CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
-    CS_CHECK(ParseTuple, pcmcia_parse_tuple(&tuple, &parse));
-
-    if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
-    if (cfg->index == 0)
-           goto cs_failed;
-
-    link->conf.ConfigIndex = cfg->index;
-    link->conf.Attributes |= CONF_ENABLE_IRQ;
-
-    /* IO window settings */
-    link->io.NumPorts1 = 0;
-    if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
-           cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
-           link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-           if (!(io->flags & CISTPL_IO_8BIT))
-                   link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-           if (!(io->flags & CISTPL_IO_16BIT))
-                   link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-           link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
-           link->io.BasePort1 = io->win[0].base;
-           link->io.NumPorts1 = io->win[0].len;
-           CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
-    }
+    ret = pcmcia_loop_config(link, mgslpc_ioprobe, NULL);
+    if (ret != 0)
+           goto failed;
 
     link->conf.Attributes = CONF_ENABLE_IRQ;
     link->conf.IntType = INT_MEMORY_AND_IO;
     link->conf.ConfigIndex = 8;
     link->conf.Present = PRESENT_OPTION;
 
-    link->irq.Attributes |= IRQ_HANDLE_PRESENT;
     link->irq.Handler     = mgslpc_isr;
-    link->irq.Instance    = info;
-    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
 
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_irq(link, &link->irq);
+    if (ret)
+           goto failed;
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
 
     info->io_base = link->io.BasePort1;
     info->irq_level = link->irq.AssignedIRQ;
@@ -654,8 +635,7 @@ static int mgslpc_config(struct pcmcia_device *link)
     printk("\n");
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
+failed:
     mgslpc_release((u_long)link);
     return -ENODEV;
 }
index 063b933d864a81f04acc0bbabdce2ec0297b7088..dd6396384c25cd22f82149a4a188bd65aab35814 100644 (file)
@@ -60,15 +60,6 @@ MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
 MODULE_DESCRIPTION("PCMCIA ATA/IDE card driver");
 MODULE_LICENSE("Dual MPL/GPL");
 
-#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
-
-#ifdef CONFIG_PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, 0);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-#else
-#define DEBUG(n, args...)
-#endif
-
 /*====================================================================*/
 
 typedef struct ide_info_t {
@@ -98,7 +89,7 @@ static int ide_probe(struct pcmcia_device *link)
 {
     ide_info_t *info;
 
-    DEBUG(0, "ide_attach()\n");
+    dev_dbg(&link->dev, "ide_attach()\n");
 
     /* Create new ide device */
     info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -112,7 +103,6 @@ static int ide_probe(struct pcmcia_device *link)
     link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
     link->io.IOAddrLines = 3;
     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;
 
@@ -134,7 +124,7 @@ static void ide_detach(struct pcmcia_device *link)
     ide_hwif_t *hwif = info->host->ports[0];
     unsigned long data_addr, ctl_addr;
 
-    DEBUG(0, "ide_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "ide_detach(0x%p)\n", link);
 
     data_addr = hwif->io_ports.data_addr;
     ctl_addr  = hwif->io_ports.ctl_addr;
@@ -217,9 +207,6 @@ out_release:
 
 ======================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 struct pcmcia_config_check {
        unsigned long ctl_base;
        int skip_vcc;
@@ -282,11 +269,11 @@ static int ide_config(struct pcmcia_device *link)
 {
     ide_info_t *info = link->priv;
     struct pcmcia_config_check *stk = NULL;
-    int last_ret = 0, last_fn = 0, is_kme = 0;
+    int ret = 0, is_kme = 0;
     unsigned long io_base, ctl_base;
     struct ide_host *host;
 
-    DEBUG(0, "ide_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "ide_config(0x%p)\n", link);
 
     is_kme = ((link->manf_id == MANFID_KME) &&
              ((link->card_id == PRODID_KME_KXLC005_A) ||
@@ -306,8 +293,12 @@ static int ide_config(struct pcmcia_device *link)
     io_base = link->io.BasePort1;
     ctl_base = stk->ctl_base;
 
-    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_irq(link, &link->irq);
+    if (ret)
+           goto failed;
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
 
     /* disable drive interrupts during IDE probe */
     outb(0x02, ctl_base);
@@ -342,8 +333,6 @@ err_mem:
     printk(KERN_NOTICE "ide-cs: ide_config failed memory allocation\n");
     goto failed;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     kfree(stk);
     ide_release(link);
@@ -363,7 +352,7 @@ static void ide_release(struct pcmcia_device *link)
     ide_info_t *info = link->priv;
     struct ide_host *host = info->host;
 
-    DEBUG(0, "ide_release(0x%p)\n", link);
+    dev_dbg(&link->dev, "ide_release(0x%p)\n", link);
 
     if (info->ndev)
        /* FIXME: if this fails we need to queue the cleanup somehow
index c72565520e418cdad31796d9f310f4f103636117..5a6ae646a6363efe0e28ee0639fca7ef8263b35c 100644 (file)
@@ -111,8 +111,6 @@ static int avmcs_probe(struct pcmcia_device *p_dev)
     p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
     p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
 
-    p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
-
     /* General socket configuration */
     p_dev->conf.Attributes = CONF_ENABLE_IRQ;
     p_dev->conf.IntType = INT_MEMORY_AND_IO;
@@ -198,7 +196,6 @@ static int avmcs_config(struct pcmcia_device *link)
         */
        i = pcmcia_request_irq(link, &link->irq);
        if (i != 0) {
-           cs_error(link, RequestIRQ, i);
            /* undo */
            pcmcia_disable_device(link);
            break;
@@ -209,7 +206,6 @@ static int avmcs_config(struct pcmcia_device *link)
          */
        i = pcmcia_request_configuration(link, &link->conf);
        if (i != 0) {
-           cs_error(link, RequestConfiguration, i);
            pcmcia_disable_device(link);
            break;
        }
index 23560c897ec361d59526ffa1d36fad6264ddadcb..f9bdff39cf4aff3dd32e33ac2b417eb145e4fbf3 100644 (file)
@@ -30,22 +30,6 @@ MODULE_DESCRIPTION("ISDN4Linux: PCMCIA client driver for AVM A1/Fritz!PCMCIA car
 MODULE_AUTHOR("Carsten Paeth");
 MODULE_LICENSE("GPL");
 
-/*
-   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 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 =
-"avma1_cs.c 1.00 1998/01/23 10:00:00 (Carsten Paeth)";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -119,7 +103,7 @@ static int avma1cs_probe(struct pcmcia_device *p_dev)
 {
     local_info_t *local;
 
-    DEBUG(0, "avma1cs_attach()\n");
+    dev_dbg(&p_dev->dev, "avma1cs_attach()\n");
 
     /* Allocate space for private device-specific data */
     local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
@@ -139,8 +123,6 @@ static int avma1cs_probe(struct pcmcia_device *p_dev)
     p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
     p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
 
-    p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
-
     /* General socket configuration */
     p_dev->conf.Attributes = CONF_ENABLE_IRQ;
     p_dev->conf.IntType = INT_MEMORY_AND_IO;
@@ -161,7 +143,7 @@ static int avma1cs_probe(struct pcmcia_device *p_dev)
 
 static void avma1cs_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "avma1cs_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "avma1cs_detach(0x%p)\n", link);
        avma1cs_release(link);
        kfree(link->priv);
 } /* avma1cs_detach */
@@ -203,7 +185,7 @@ static int avma1cs_config(struct pcmcia_device *link)
 
     dev = link->priv;
 
-    DEBUG(0, "avma1cs_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "avma1cs_config(0x%p)\n", link);
 
     devname[0] = 0;
     if (link->prod_id[1])
@@ -218,7 +200,6 @@ static int avma1cs_config(struct pcmcia_device *link)
         */
        i = pcmcia_request_irq(link, &link->irq);
        if (i != 0) {
-           cs_error(link, RequestIRQ, i);
            /* undo */
            pcmcia_disable_device(link);
            break;
@@ -229,7 +210,6 @@ static int avma1cs_config(struct pcmcia_device *link)
         */
        i = pcmcia_request_configuration(link, &link->conf);
        if (i != 0) {
-           cs_error(link, RequestConfiguration, i);
            pcmcia_disable_device(link);
            break;
        }
@@ -281,7 +261,7 @@ static void avma1cs_release(struct pcmcia_device *link)
 {
        local_info_t *local = link->priv;
 
-       DEBUG(0, "avma1cs_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "avma1cs_release(0x%p)\n", link);
 
        /* now unregister function with hisax */
        HiSax_closecard(local->node.minor);
index f4d0fe29bcf8b1a855a69fa1c1395a4bd9ee863d..a2f709f5397413f8352e66391207875bdbd93c1d 100644 (file)
@@ -57,23 +57,6 @@ MODULE_DESCRIPTION("ISDN4Linux: PCMCIA client driver for Elsa PCM cards");
 MODULE_AUTHOR("Klaus Lichtenwalder");
 MODULE_LICENSE("Dual MPL/GPL");
 
-/*
-   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 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 =
-"elsa_cs.c $Revision: 1.2.2.4 $ $Date: 2004/01/25 15:07:06 $ (K.Lichtenwalder)";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -142,7 +125,7 @@ static int elsa_cs_probe(struct pcmcia_device *link)
 {
     local_info_t *local;
 
-    DEBUG(0, "elsa_cs_attach()\n");
+    dev_dbg(&link->dev, "elsa_cs_attach()\n");
 
     /* Allocate space for private device-specific data */
     local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
@@ -155,7 +138,6 @@ static int elsa_cs_probe(struct pcmcia_device *link)
 
     /* Interrupt setup */
     link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID|IRQ_SHARE_ID;
     link->irq.Handler = NULL;
 
     /*
@@ -188,7 +170,7 @@ static void elsa_cs_detach(struct pcmcia_device *link)
 {
        local_info_t *info = link->priv;
 
-       DEBUG(0, "elsa_cs_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "elsa_cs_detach(0x%p)\n", link);
 
        info->busy = 1;
        elsa_cs_release(link);
@@ -231,30 +213,25 @@ static int elsa_cs_configcheck(struct pcmcia_device *p_dev,
 static int elsa_cs_config(struct pcmcia_device *link)
 {
     local_info_t *dev;
-    int i, last_fn;
+    int i;
     IsdnCard_t icard;
 
-    DEBUG(0, "elsa_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "elsa_config(0x%p)\n", link);
     dev = link->priv;
 
     i = pcmcia_loop_config(link, elsa_cs_configcheck, NULL);
-    if (i != 0) {
-       last_fn = RequestIO;
-       goto cs_failed;
-    }
+    if (i != 0)
+       goto failed;
 
     i = pcmcia_request_irq(link, &link->irq);
     if (i != 0) {
         link->irq.AssignedIRQ = 0;
-       last_fn = RequestIRQ;
-        goto cs_failed;
+       goto failed;
     }
 
     i = pcmcia_request_configuration(link, &link->conf);
-    if (i != 0) {
-      last_fn = RequestConfiguration;
-      goto cs_failed;
-    }
+    if (i != 0)
+       goto failed;
 
     /* At this point, the dev_node_t structure(s) should be
        initialized and arranged in a linked list at link->dev. *//*  */
@@ -290,8 +267,7 @@ static int elsa_cs_config(struct pcmcia_device *link)
        ((local_info_t*)link->priv)->cardnr = i;
 
     return 0;
-cs_failed:
-    cs_error(link, last_fn, i);
+failed:
     elsa_cs_release(link);
     return -ENODEV;
 } /* elsa_cs_config */
@@ -308,7 +284,7 @@ static void elsa_cs_release(struct pcmcia_device *link)
 {
     local_info_t *local = link->priv;
 
-    DEBUG(0, "elsa_cs_release(0x%p)\n", link);
+    dev_dbg(&link->dev, "elsa_cs_release(0x%p)\n", link);
 
     if (local) {
        if (local->cardnr >= 0) {
index 9a3c9f5e4fe82b5e132bc426592e603b243a091b..af5d393cc2d0afe2f099ad72ef489c411117391b 100644 (file)
@@ -57,24 +57,6 @@ MODULE_DESCRIPTION("ISDN4Linux: PCMCIA client driver for Sedlbauer cards");
 MODULE_AUTHOR("Marcus Niemann");
 MODULE_LICENSE("Dual MPL/GPL");
 
-/*
-   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 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 =
-"sedlbauer_cs.c 1.1a 2001/01/28 15:04:04 (M.Niemann)";
-#else
-#define DEBUG(n, args...)
-#endif
-
 
 /*====================================================================*/
 
@@ -151,7 +133,7 @@ static int sedlbauer_probe(struct pcmcia_device *link)
 {
     local_info_t *local;
 
-    DEBUG(0, "sedlbauer_attach()\n");
+    dev_dbg(&link->dev, "sedlbauer_attach()\n");
 
     /* Allocate space for private device-specific data */
     local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
@@ -163,7 +145,6 @@ static int sedlbauer_probe(struct pcmcia_device *link)
 
     /* Interrupt setup */
     link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
     link->irq.Handler = NULL;
 
     /*
@@ -198,7 +179,7 @@ static int sedlbauer_probe(struct pcmcia_device *link)
 
 static void sedlbauer_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "sedlbauer_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "sedlbauer_detach(0x%p)\n", link);
 
        ((local_info_t *)link->priv)->stop = 1;
        sedlbauer_release(link);
@@ -214,9 +195,6 @@ static void sedlbauer_detach(struct pcmcia_device *link)
     device available to the system.
     
 ======================================================================*/
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int sedlbauer_config_check(struct pcmcia_device *p_dev,
                                  cistpl_cftable_entry_t *cfg,
                                  cistpl_cftable_entry_t *dflt,
@@ -293,11 +271,11 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev,
                req->Base = mem->win[0].host_addr;
                req->Size = mem->win[0].len;
                req->AccessSpeed = 0;
-               if (pcmcia_request_window(&p_dev, req, &p_dev->win) != 0)
+               if (pcmcia_request_window(p_dev, req, &p_dev->win) != 0)
                        return -ENODEV;
                map.Page = 0;
                map.CardOffset = mem->win[0].card_addr;
-               if (pcmcia_map_mem_page(p_dev->win, &map) != 0)
+               if (pcmcia_map_mem_page(p_dev, p_dev->win, &map) != 0)
                        return -ENODEV;
        }
        return 0;
@@ -309,10 +287,10 @@ static int sedlbauer_config(struct pcmcia_device *link)
 {
     local_info_t *dev = link->priv;
     win_req_t *req;
-    int last_fn, last_ret;
+    int ret;
     IsdnCard_t  icard;
 
-    DEBUG(0, "sedlbauer_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "sedlbauer_config(0x%p)\n", link);
 
     req = kzalloc(sizeof(win_req_t), GFP_KERNEL);
     if (!req)
@@ -330,8 +308,8 @@ static int sedlbauer_config(struct pcmcia_device *link)
       these things without consulting the CIS, and most client drivers
       will only use the CIS to fill in implementation-defined details.
     */
-    last_ret = pcmcia_loop_config(link, sedlbauer_config_check, req);
-    if (last_ret)
+    ret = pcmcia_loop_config(link, sedlbauer_config_check, req);
+    if (ret)
            goto failed;
 
     /*
@@ -339,15 +317,20 @@ static int sedlbauer_config(struct pcmcia_device *link)
        handler to the interrupt, unless the 'Handler' member of the
        irq structure is initialized.
     */
-    if (link->conf.Attributes & CONF_ENABLE_IRQ)
-       CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
+    if (link->conf.Attributes & CONF_ENABLE_IRQ) {
+           ret = pcmcia_request_irq(link, &link->irq);
+           if (ret)
+                   goto failed;
+    }
        
     /*
        This actually configures the PCMCIA socket -- setting up
        the I/O windows and the interrupt mapping, and putting the
        card and host interface into "Memory and IO" mode.
     */
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
 
     /*
       At this point, the dev_node_t structure(s) need to be
@@ -380,19 +363,18 @@ static int sedlbauer_config(struct pcmcia_device *link)
     icard.protocol = protocol;
     icard.typ = ISDN_CTYPE_SEDLBAUER_PCMCIA;
     
-    last_ret = hisax_init_pcmcia(link, &(((local_info_t*)link->priv)->stop), &icard);
-    if (last_ret < 0) {
-       printk(KERN_ERR "sedlbauer_cs: failed to initialize SEDLBAUER PCMCIA %d at i/o %#x\n",
-               last_ret, link->io.BasePort1);
+    ret = hisax_init_pcmcia(link, 
+                           &(((local_info_t *)link->priv)->stop), &icard);
+    if (ret < 0) {
+       printk(KERN_ERR "sedlbauer_cs: failed to initialize SEDLBAUER PCMCIA %d at i/o %#x\n",
+               ret, link->io.BasePort1);
        sedlbauer_release(link);
        return -ENODEV;
     } else
-       ((local_info_t*)link->priv)->cardnr = last_ret;
+       ((local_info_t *)link->priv)->cardnr = ret;
 
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     sedlbauer_release(link);
     return -ENODEV;
@@ -410,7 +392,7 @@ failed:
 static void sedlbauer_release(struct pcmcia_device *link)
 {
     local_info_t *local = link->priv;
-    DEBUG(0, "sedlbauer_release(0x%p)\n", link);
+    dev_dbg(&link->dev, "sedlbauer_release(0x%p)\n", link);
 
     if (local) {
        if (local->cardnr >= 0) {
index 623d111544d43dfe7859eef6ca14c82533c64a8c..ea705394ce2bf4c06d7d6c49b87dd5d0c16063e4 100644 (file)
@@ -38,23 +38,6 @@ MODULE_DESCRIPTION("ISDN4Linux: PCMCIA client driver for Teles PCMCIA cards");
 MODULE_AUTHOR("Christof Petig, christof.petig@wtal.de, Karsten Keil, kkeil@suse.de");
 MODULE_LICENSE("GPL");
 
-/*
-   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 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 =
-"teles_cs.c 2.10 2002/07/30 22:23:34 kkeil";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -133,7 +116,7 @@ static int teles_probe(struct pcmcia_device *link)
 {
     local_info_t *local;
 
-    DEBUG(0, "teles_attach()\n");
+    dev_dbg(&link->dev, "teles_attach()\n");
 
     /* Allocate space for private device-specific data */
     local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
@@ -145,7 +128,6 @@ static int teles_probe(struct pcmcia_device *link)
 
     /* Interrupt setup */
     link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID|IRQ_SHARE_ID;
     link->irq.Handler = NULL;
 
     /*
@@ -178,7 +160,7 @@ static void teles_detach(struct pcmcia_device *link)
 {
        local_info_t *info = link->priv;
 
-       DEBUG(0, "teles_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "teles_detach(0x%p)\n", link);
 
        info->busy = 1;
        teles_cs_release(link);
@@ -221,30 +203,25 @@ static int teles_cs_configcheck(struct pcmcia_device *p_dev,
 static int teles_cs_config(struct pcmcia_device *link)
 {
     local_info_t *dev;
-    int i, last_fn;
+    int i;
     IsdnCard_t icard;
 
-    DEBUG(0, "teles_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "teles_config(0x%p)\n", link);
     dev = link->priv;
 
     i = pcmcia_loop_config(link, teles_cs_configcheck, NULL);
-    if (i != 0) {
-       last_fn = RequestIO;
+    if (i != 0)
        goto cs_failed;
-    }
 
     i = pcmcia_request_irq(link, &link->irq);
     if (i != 0) {
         link->irq.AssignedIRQ = 0;
-       last_fn = RequestIRQ;
         goto cs_failed;
     }
 
     i = pcmcia_request_configuration(link, &link->conf);
-    if (i != 0) {
-      last_fn = RequestConfiguration;
+    if (i != 0)
       goto cs_failed;
-    }
 
     /* At this point, the dev_node_t structure(s) should be
        initialized and arranged in a linked list at link->dev. *//*  */
@@ -283,7 +260,6 @@ static int teles_cs_config(struct pcmcia_device *link)
     return 0;
 
 cs_failed:
-    cs_error(link, last_fn, i);
     teles_cs_release(link);
     return -ENODEV;
 } /* teles_cs_config */
@@ -300,7 +276,7 @@ static void teles_cs_release(struct pcmcia_device *link)
 {
     local_info_t *local = link->priv;
 
-    DEBUG(0, "teles_cs_release(0x%p)\n", link);
+    dev_dbg(&link->dev, "teles_cs_release(0x%p)\n", link);
 
     if (local) {
        if (local->cardnr >= 0) {
index d600c2deff73824a70edb5e36f29157f4a36e16a..689d6a79ffc0ed239b3ccdbae50e035b723c7351 100644 (file)
@@ -118,11 +118,9 @@ static caddr_t remap_window(struct map_info *map, unsigned long to)
                DEBUG(2, "Remapping window from 0x%8.8x to 0x%8.8x",
                      dev->offset, mrq.CardOffset);
                mrq.Page = 0;
-               ret = pcmcia_map_mem_page(win, &mrq);
-               if (ret != 0) {
-                       cs_error(dev->p_dev, MapMemPage, ret);
+               ret = pcmcia_map_mem_page(dev->p_dev, win, &mrq);
+               if (ret != 0)
                        return NULL;
-               }
                dev->offset = mrq.CardOffset;
        }
        return dev->win_base + (to & (dev->win_size-1));
@@ -327,8 +325,6 @@ static void pcmciamtd_set_vpp(struct map_info *map, int on)
 
        DEBUG(2, "dev = %p on = %d vpp = %d\n", dev, on, dev->vpp);
        ret = pcmcia_modify_configuration(link, &mod);
-       if (ret != 0)
-               cs_error(link, ModifyConfiguration, ret);
 }
 
 
@@ -348,107 +344,116 @@ static void pcmciamtd_release(struct pcmcia_device *link)
                        iounmap(dev->win_base);
                        dev->win_base = NULL;
                }
-               pcmcia_release_window(link->win);
+               pcmcia_release_window(link, link->win);
        }
        pcmcia_disable_device(link);
 }
 
 
-static void card_settings(struct pcmciamtd_dev *dev, struct pcmcia_device *link, int *new_name)
+#ifdef CONFIG_MTD_DEBUG
+static int pcmciamtd_cistpl_format(struct pcmcia_device *p_dev,
+                               tuple_t *tuple,
+                               void *priv_data)
 {
-       int rc;
-       tuple_t tuple;
        cisparse_t parse;
-       u_char buf[64];
-
-       tuple.Attributes = 0;
-       tuple.TupleData = (cisdata_t *)buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-       tuple.DesiredTuple = RETURN_FIRST_TUPLE;
-
-       rc = pcmcia_get_first_tuple(link, &tuple);
-       while (rc == 0) {
-               rc = pcmcia_get_tuple_data(link, &tuple);
-               if (rc != 0) {
-                       cs_error(link, GetTupleData, rc);
-                       break;
-               }
-               rc = pcmcia_parse_tuple(&tuple, &parse);
-               if (rc != 0) {
-                       cs_error(link, ParseTuple, rc);
-                       break;
-               }
 
-               switch(tuple.TupleCode) {
-               case  CISTPL_FORMAT: {
-                       cistpl_format_t *t = &parse.format;
-                       (void)t; /* Shut up, gcc */
-                       DEBUG(2, "Format type: %u, Error Detection: %u, offset = %u, length =%u",
-                             t->type, t->edc, t->offset, t->length);
-                       break;
+       if (!pcmcia_parse_tuple(tuple, &parse)) {
+               cistpl_format_t *t = &parse.format;
+               (void)t; /* Shut up, gcc */
+               DEBUG(2, "Format type: %u, Error Detection: %u, offset = %u, length =%u",
+                       t->type, t->edc, t->offset, t->length);
+       }
+       return -ENOSPC;
+}
 
-               }
+static int pcmciamtd_cistpl_jedec(struct pcmcia_device *p_dev,
+                               tuple_t *tuple,
+                               void *priv_data)
+{
+       cisparse_t parse;
+       int i;
 
-               case CISTPL_DEVICE: {
-                       cistpl_device_t *t = &parse.device;
-                       int i;
-                       DEBUG(2, "Common memory:");
-                       dev->pcmcia_map.size = t->dev[0].size;
-                       for(i = 0; i < t->ndev; i++) {
-                               DEBUG(2, "Region %d, type = %u", i, t->dev[i].type);
-                               DEBUG(2, "Region %d, wp = %u", i, t->dev[i].wp);
-                               DEBUG(2, "Region %d, speed = %u ns", i, t->dev[i].speed);
-                               DEBUG(2, "Region %d, size = %u bytes", i, t->dev[i].size);
-                       }
-                       break;
-               }
+       if (!pcmcia_parse_tuple(tuple, &parse)) {
+               cistpl_jedec_t *t = &parse.jedec;
+               for (i = 0; i < t->nid; i++)
+                       DEBUG(2, "JEDEC: 0x%02x 0x%02x", t->id[i].mfr, t->id[i].info);
+       }
+       return -ENOSPC;
+}
+#endif
 
-               case CISTPL_VERS_1: {
-                       cistpl_vers_1_t *t = &parse.version_1;
-                       int i;
-                       if(t->ns) {
-                               dev->mtd_name[0] = '\0';
-                               for(i = 0; i < t->ns; i++) {
-                                       if(i)
-                                               strcat(dev->mtd_name, " ");
-                                       strcat(dev->mtd_name, t->str+t->ofs[i]);
-                               }
-                       }
-                       DEBUG(2, "Found name: %s", dev->mtd_name);
-                       break;
-               }
+static int pcmciamtd_cistpl_device(struct pcmcia_device *p_dev,
+                               tuple_t *tuple,
+                               void *priv_data)
+{
+       struct pcmciamtd_dev *dev = priv_data;
+       cisparse_t parse;
+       cistpl_device_t *t = &parse.device;
+       int i;
 
-               case CISTPL_JEDEC_C: {
-                       cistpl_jedec_t *t = &parse.jedec;
-                       int i;
-                       for(i = 0; i < t->nid; i++) {
-                               DEBUG(2, "JEDEC: 0x%02x 0x%02x", t->id[i].mfr, t->id[i].info);
-                       }
-                       break;
-               }
+       if (pcmcia_parse_tuple(tuple, &parse))
+               return -EINVAL;
+
+       DEBUG(2, "Common memory:");
+       dev->pcmcia_map.size = t->dev[0].size;
+       /* from here on: DEBUG only */
+       for (i = 0; i < t->ndev; i++) {
+               DEBUG(2, "Region %d, type = %u", i, t->dev[i].type);
+               DEBUG(2, "Region %d, wp = %u", i, t->dev[i].wp);
+               DEBUG(2, "Region %d, speed = %u ns", i, t->dev[i].speed);
+               DEBUG(2, "Region %d, size = %u bytes", i, t->dev[i].size);
+       }
+       return 0;
+}
 
-               case CISTPL_DEVICE_GEO: {
-                       cistpl_device_geo_t *t = &parse.device_geo;
-                       int i;
-                       dev->pcmcia_map.bankwidth = t->geo[0].buswidth;
-                       for(i = 0; i < t->ngeo; i++) {
-                               DEBUG(2, "region: %d bankwidth = %u", i, t->geo[i].buswidth);
-                               DEBUG(2, "region: %d erase_block = %u", i, t->geo[i].erase_block);
-                               DEBUG(2, "region: %d read_block = %u", i, t->geo[i].read_block);
-                               DEBUG(2, "region: %d write_block = %u", i, t->geo[i].write_block);
-                               DEBUG(2, "region: %d partition = %u", i, t->geo[i].partition);
-                               DEBUG(2, "region: %d interleave = %u", i, t->geo[i].interleave);
-                       }
-                       break;
-               }
+static int pcmciamtd_cistpl_geo(struct pcmcia_device *p_dev,
+                               tuple_t *tuple,
+                               void *priv_data)
+{
+       struct pcmciamtd_dev *dev = priv_data;
+       cisparse_t parse;
+       cistpl_device_geo_t *t = &parse.device_geo;
+       int i;
 
-               default:
-                       DEBUG(2, "Unknown tuple code %d", tuple.TupleCode);
-               }
+       if (pcmcia_parse_tuple(tuple, &parse))
+               return -EINVAL;
+
+       dev->pcmcia_map.bankwidth = t->geo[0].buswidth;
+       /* from here on: DEBUG only */
+       for (i = 0; i < t->ngeo; i++) {
+               DEBUG(2, "region: %d bankwidth = %u", i, t->geo[i].buswidth);
+               DEBUG(2, "region: %d erase_block = %u", i, t->geo[i].erase_block);
+               DEBUG(2, "region: %d read_block = %u", i, t->geo[i].read_block);
+               DEBUG(2, "region: %d write_block = %u", i, t->geo[i].write_block);
+               DEBUG(2, "region: %d partition = %u", i, t->geo[i].partition);
+               DEBUG(2, "region: %d interleave = %u", i, t->geo[i].interleave);
+       }
+       return 0;
+}
+
+
+static void card_settings(struct pcmciamtd_dev *dev, struct pcmcia_device *link, int *new_name)
+{
+       int i;
 
-               rc = pcmcia_get_next_tuple(link, &tuple);
+       if (p_dev->prod_id[0]) {
+               dev->mtd_name[0] = '\0';
+               for (i = 0; i < 4; i++) {
+                       if (i)
+                               strcat(dev->mtd_name, " ");
+                       if (p_dev->prod_id[i])
+                               strcat(dev->mtd_name, p_dev->prod_id[i]);
+               }
+               DEBUG(2, "Found name: %s", dev->mtd_name);
        }
+
+#ifdef CONFIG_MTD_DEBUG
+       pcmcia_loop_tuple(p_dev, CISTPL_FORMAT, pcmciamtd_cistpl_format, NULL);
+       pcmcia_loop_tuple(p_dev, CISTPL_JEDEC_C, pcmciamtd_cistpl_jedec, NULL);
+#endif
+       pcmcia_loop_tuple(p_dev, CISTPL_DEVICE, pcmciamtd_cistpl_device, dev);
+       pcmcia_loop_tuple(p_dev, CISTPL_DEVICE_GEO, pcmciamtd_cistpl_geo, dev);
+
        if(!dev->pcmcia_map.size)
                dev->pcmcia_map.size = MAX_PCMCIA_ADDR;
 
@@ -481,16 +486,12 @@ static void card_settings(struct pcmciamtd_dev *dev, struct pcmcia_device *link,
  * MTD device available to the system.
  */
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int pcmciamtd_config(struct pcmcia_device *link)
 {
        struct pcmciamtd_dev *dev = link->priv;
        struct mtd_info *mtd = NULL;
        cs_status_t status;
        win_req_t req;
-       int last_ret = 0, last_fn = 0;
        int ret;
        int i;
        static char *probes[] = { "jedec_probe", "cfi_probe" };
@@ -529,7 +530,7 @@ static int pcmciamtd_config(struct pcmcia_device *link)
                int ret;
                DEBUG(2, "requesting window with size = %dKiB memspeed = %d",
                      req.Size >> 10, req.AccessSpeed);
-               ret = pcmcia_request_window(&link, &req, &link->win);
+               ret = pcmcia_request_window(link, &req, &link->win);
                DEBUG(2, "ret = %d dev->win_size = %d", ret, dev->win_size);
                if(ret) {
                        req.Size >>= 1;
@@ -577,7 +578,6 @@ static int pcmciamtd_config(struct pcmcia_device *link)
        DEBUG(2, "Setting Configuration");
        ret = pcmcia_request_configuration(link, &link->conf);
        if (ret != 0) {
-               cs_error(link, RequestConfiguration, ret);
                if (dev->win_base) {
                        iounmap(dev->win_base);
                        dev->win_base = NULL;
@@ -652,8 +652,7 @@ static int pcmciamtd_config(struct pcmcia_device *link)
        link->dev_node = &dev->node;
        return 0;
 
- cs_failed:
-       cs_error(link, last_fn, last_ret);
+ failed:
        err("CS Error, exiting");
        pcmciamtd_release(link);
        return -ENODEV;
index b58965a2b3ae256eba2642a7b98d1dbff4bfa9b9..17a27225cc98cbc076f705ec6c850812ed6f56c8 100644 (file)
@@ -118,14 +118,6 @@ INT_MODULE_PARM(full_duplex, 0);
 /* Autodetect link polarity reversal? */
 INT_MODULE_PARM(auto_polarity, 1);
 
-#ifdef PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-static char *version =
-"3c574_cs.c 1.65ac1 2003/04/07 Donald Becker/David Hinds, becker@scyld.com.\n";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -278,7 +270,7 @@ static int tc574_probe(struct pcmcia_device *link)
        struct el3_private *lp;
        struct net_device *dev;
 
-       DEBUG(0, "3c574_attach()\n");
+       dev_dbg(&link->dev, "3c574_attach()\n");
 
        /* Create the PC card device object. */
        dev = alloc_etherdev(sizeof(struct el3_private));
@@ -291,10 +283,8 @@ static int tc574_probe(struct pcmcia_device *link)
        spin_lock_init(&lp->window_lock);
        link->io.NumPorts1 = 32;
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
        link->irq.Handler = &el3_interrupt;
-       link->irq.Instance = dev;
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
        link->conf.ConfigIndex = 1;
@@ -319,7 +309,7 @@ static void tc574_detach(struct pcmcia_device *link)
 {
        struct net_device *dev = link->priv;
 
-       DEBUG(0, "3c574_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "3c574_detach()\n");
 
        if (link->dev_node)
                unregister_netdev(dev);
@@ -335,26 +325,23 @@ static void tc574_detach(struct pcmcia_device *link)
        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)
-
 static const char *ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
 
 static int tc574_config(struct pcmcia_device *link)
 {
        struct net_device *dev = link->priv;
        struct el3_private *lp = netdev_priv(dev);
-       tuple_t tuple;
-       __le16 buf[32];
-       int last_fn, last_ret, i, j;
+       int ret, i, j;
        unsigned int ioaddr;
        __be16 *phys_addr;
        char *cardname;
        __u32 config;
+       u8 *buf;
+       size_t len;
 
        phys_addr = (__be16 *)dev->dev_addr;
 
-       DEBUG(0, "3c574_config(0x%p)\n", link);
+       dev_dbg(&link->dev, "3c574_config()\n");
 
        link->io.IOAddrLines = 16;
        for (i = j = 0; j < 0x400; j += 0x20) {
@@ -363,12 +350,16 @@ static int tc574_config(struct pcmcia_device *link)
                if (i == 0)
                        break;
        }
-       if (i != 0) {
-               cs_error(link, RequestIO, i);
+       if (i != 0)
+               goto failed;
+
+       ret = pcmcia_request_irq(link, &link->irq);
+       if (ret)
+               goto failed;
+
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
                goto failed;
-       }
-       CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-       CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
 
        dev->irq = link->irq.AssignedIRQ;
        dev->base_addr = link->io.BasePort1;
@@ -378,16 +369,14 @@ static int tc574_config(struct pcmcia_device *link)
        /* The 3c574 normally uses an EEPROM for configuration info, including
           the hardware address.  The future products may include a modem chip
           and put the address in the CIS. */
-       tuple.Attributes = 0;
-       tuple.TupleData = (cisdata_t *)buf;
-       tuple.TupleDataMax = 64;
-       tuple.TupleOffset = 0;
-       tuple.DesiredTuple = 0x88;
-       if (pcmcia_get_first_tuple(link, &tuple) == 0) {
-               pcmcia_get_tuple_data(link, &tuple);
+
+       len = pcmcia_get_tuple(link, 0x88, &buf);
+       if (buf && len >= 6) {
                for (i = 0; i < 3; i++)
-                       phys_addr[i] = htons(le16_to_cpu(buf[i]));
+                       phys_addr[i] = htons(le16_to_cpu(buf[i * 2]));
+               kfree(buf);
        } else {
+               kfree(buf); /* 0 < len < 6 */
                EL3WINDOW(0);
                for (i = 0; i < 3; i++)
                        phys_addr[i] = htons(read_eeprom(ioaddr, i + 10));
@@ -435,7 +424,8 @@ static int tc574_config(struct pcmcia_device *link)
                        mii_status = mdio_read(ioaddr, phy & 0x1f, 1);
                        if (mii_status != 0xffff) {
                                lp->phys = phy & 0x1f;
-                               DEBUG(0, "  MII transceiver at index %d, status %x.\n",
+                               dev_dbg(&link->dev, "  MII transceiver at "
+                                       "index %d, status %x.\n",
                                          phy, mii_status);
                                if ((mii_status & 0x0040) == 0)
                                        mii_preamble_required = 1;
@@ -457,7 +447,7 @@ static int tc574_config(struct pcmcia_device *link)
        }
 
        link->dev_node = &lp->node;
-       SET_NETDEV_DEV(dev, &handle_to_dev(link));
+       SET_NETDEV_DEV(dev, &link->dev);
 
        if (register_netdev(dev) != 0) {
                printk(KERN_NOTICE "3c574_cs: register_netdev() failed\n");
@@ -478,8 +468,6 @@ static int tc574_config(struct pcmcia_device *link)
 
        return 0;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
 failed:
        tc574_release(link);
        return -ENODEV;
@@ -738,7 +726,7 @@ static int el3_open(struct net_device *dev)
        lp->media.expires = jiffies + HZ;
        add_timer(&lp->media);
        
-       DEBUG(2, "%s: opened, status %4.4x.\n",
+       dev_dbg(&link->dev, "%s: opened, status %4.4x.\n",
                  dev->name, inw(dev->base_addr + EL3_STATUS));
        
        return 0;
@@ -772,7 +760,7 @@ static void pop_tx_status(struct net_device *dev)
                if (tx_status & 0x30)
                        tc574_wait_for_completion(dev, TxReset);
                if (tx_status & 0x38) {
-                       DEBUG(1, "%s: transmit error: status 0x%02x\n",
+                       pr_debug("%s: transmit error: status 0x%02x\n",
                                  dev->name, tx_status);
                        outw(TxEnable, ioaddr + EL3_CMD);
                        dev->stats.tx_aborted_errors++;
@@ -788,7 +776,7 @@ static netdev_tx_t el3_start_xmit(struct sk_buff *skb,
        struct el3_private *lp = netdev_priv(dev);
        unsigned long flags;
 
-       DEBUG(3, "%s: el3_start_xmit(length = %ld) called, "
+       pr_debug("%s: el3_start_xmit(length = %ld) called, "
                  "status %4.4x.\n", dev->name, (long)skb->len,
                  inw(ioaddr + EL3_STATUS));
 
@@ -827,7 +815,7 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id)
                return IRQ_NONE;
        ioaddr = dev->base_addr;
 
-       DEBUG(3, "%s: interrupt, status %4.4x.\n",
+       pr_debug("%s: interrupt, status %4.4x.\n",
                  dev->name, inw(ioaddr + EL3_STATUS));
 
        spin_lock(&lp->window_lock);
@@ -836,7 +824,7 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id)
                   (IntLatch | RxComplete | RxEarly | StatsFull)) {
                if (!netif_device_present(dev) ||
                        ((status & 0xe000) != 0x2000)) {
-                       DEBUG(1, "%s: Interrupt from dead card\n", dev->name);
+                       pr_debug("%s: Interrupt from dead card\n", dev->name);
                        break;
                }
 
@@ -846,7 +834,7 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id)
                        work_budget = el3_rx(dev, work_budget);
 
                if (status & TxAvailable) {
-                       DEBUG(3, "  TX room bit was handled.\n");
+                       pr_debug("  TX room bit was handled.\n");
                        /* There's room in the FIFO for a full-sized packet. */
                        outw(AckIntr | TxAvailable, ioaddr + EL3_CMD);
                        netif_wake_queue(dev);
@@ -886,7 +874,7 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id)
                }
 
                if (--work_budget < 0) {
-                       DEBUG(0, "%s: Too much work in interrupt, "
+                       pr_debug("%s: Too much work in interrupt, "
                                  "status %4.4x.\n", dev->name, status);
                        /* Clear all interrupts */
                        outw(AckIntr | 0xFF, ioaddr + EL3_CMD);
@@ -896,7 +884,7 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id)
                outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD);
        }
 
-       DEBUG(3, "%s: exiting interrupt, status %4.4x.\n",
+       pr_debug("%s: exiting interrupt, status %4.4x.\n",
                  dev->name, inw(ioaddr + EL3_STATUS));
                  
        spin_unlock(&lp->window_lock);
@@ -1003,7 +991,7 @@ static void update_stats(struct net_device *dev)
        unsigned int ioaddr = dev->base_addr;
        u8 rx, tx, up;
 
-       DEBUG(2, "%s: updating the statistics.\n", dev->name);
+       pr_debug("%s: updating the statistics.\n", dev->name);
 
        if (inw(ioaddr+EL3_STATUS) == 0xffff) /* No card. */
                return;
@@ -1039,7 +1027,7 @@ static int el3_rx(struct net_device *dev, int worklimit)
        unsigned int ioaddr = dev->base_addr;
        short rx_status;
        
-       DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n",
+       pr_debug("%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n",
                  dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus));
        while (!((rx_status = inw(ioaddr + RxStatus)) & 0x8000) &&
                        worklimit > 0) {
@@ -1061,7 +1049,7 @@ static int el3_rx(struct net_device *dev, int worklimit)
 
                        skb = dev_alloc_skb(pkt_len+5);
 
-                       DEBUG(3, "  Receiving packet size %d status %4.4x.\n",
+                       pr_debug("  Receiving packet size %d status %4.4x.\n",
                                  pkt_len, rx_status);
                        if (skb != NULL) {
                                skb_reserve(skb, 2);
@@ -1072,7 +1060,7 @@ static int el3_rx(struct net_device *dev, int worklimit)
                                dev->stats.rx_packets++;
                                dev->stats.rx_bytes += pkt_len;
                        } else {
-                               DEBUG(1, "%s: couldn't allocate a sk_buff of"
+                               pr_debug("%s: couldn't allocate a sk_buff of"
                                          " size %d.\n", dev->name, pkt_len);
                                dev->stats.rx_dropped++;
                        }
@@ -1101,7 +1089,7 @@ static int el3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        struct mii_ioctl_data *data = if_mii(rq);
        int phy = lp->phys & 0x1f;
 
-       DEBUG(2, "%s: In ioct(%-.6s, %#4.4x) %4.4x %4.4x %4.4x %4.4x.\n",
+       pr_debug("%s: In ioct(%-.6s, %#4.4x) %4.4x %4.4x %4.4x %4.4x.\n",
                  dev->name, rq->ifr_ifrn.ifrn_name, cmd,
                  data->phy_id, data->reg_num, data->val_in, data->val_out);
 
@@ -1178,7 +1166,7 @@ static int el3_close(struct net_device *dev)
        struct el3_private *lp = netdev_priv(dev);
        struct pcmcia_device *link = lp->p_dev;
 
-       DEBUG(2, "%s: shutting down ethercard.\n", dev->name);
+       dev_dbg(&link->dev, "%s: shutting down ethercard.\n", dev->name);
        
        if (pcmcia_dev_present(link)) {
                unsigned long flags;
index 569fb06793cf7da4da614a597113e7eadeeed022..6f8d7e2e592246205df9ae45625ae1816e9f03b3 100644 (file)
@@ -130,14 +130,6 @@ MODULE_LICENSE("GPL");
 /* Special hook for setting if_port when module is loaded */
 INT_MODULE_PARM(if_port, 0);
 
-#ifdef PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-static char *version =
-DRV_NAME ".c " DRV_VERSION " 2001/10/13 00:08:50 (David Hinds)";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -189,7 +181,7 @@ static int tc589_probe(struct pcmcia_device *link)
     struct el3_private *lp;
     struct net_device *dev;
 
-    DEBUG(0, "3c589_attach()\n");
+    dev_dbg(&link->dev, "3c589_attach()\n");
 
     /* Create new ethernet device */
     dev = alloc_etherdev(sizeof(struct el3_private));
@@ -202,10 +194,8 @@ static int tc589_probe(struct pcmcia_device *link)
     spin_lock_init(&lp->lock);
     link->io.NumPorts1 = 16;
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_HANDLE_PRESENT;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
     link->irq.Handler = &el3_interrupt;
-    link->irq.Instance = dev;
     link->conf.Attributes = CONF_ENABLE_IRQ;
     link->conf.IntType = INT_MEMORY_AND_IO;
     link->conf.ConfigIndex = 1;
@@ -231,7 +221,7 @@ static void tc589_detach(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
 
-    DEBUG(0, "3c589_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "3c589_detach\n");
 
     if (link->dev_node)
        unregister_netdev(dev);
@@ -249,29 +239,20 @@ static void tc589_detach(struct pcmcia_device *link)
     
 ======================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int tc589_config(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
     struct el3_private *lp = netdev_priv(dev);
-    tuple_t tuple;
-    __le16 buf[32];
     __be16 *phys_addr;
-    int last_fn, last_ret, i, j, multi = 0, fifo;
+    int ret, i, j, multi = 0, fifo;
     unsigned int ioaddr;
     char *ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
+    u8 *buf;
+    size_t len;
     
-    DEBUG(0, "3c589_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "3c589_config\n");
 
     phys_addr = (__be16 *)dev->dev_addr;
-    tuple.Attributes = 0;
-    tuple.TupleData = (cisdata_t *)buf;
-    tuple.TupleDataMax = sizeof(buf);
-    tuple.TupleOffset = 0;
-    tuple.Attributes = TUPLE_RETURN_COMMON;
-
     /* Is this a 3c562? */
     if (link->manf_id != MANFID_3COM)
            printk(KERN_INFO "3c589_cs: hmmm, is this really a "
@@ -287,12 +268,16 @@ static int tc589_config(struct pcmcia_device *link)
        if (i == 0)
                break;
     }
-    if (i != 0) {
-       cs_error(link, RequestIO, i);
+    if (i != 0)
        goto failed;
-    }
-    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+
+    ret = pcmcia_request_irq(link, &link->irq);
+    if (ret)
+           goto failed;
+
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
        
     dev->irq = link->irq.AssignedIRQ;
     dev->base_addr = link->io.BasePort1;
@@ -301,12 +286,13 @@ static int tc589_config(struct pcmcia_device *link)
 
     /* The 3c589 has an extra EEPROM for configuration info, including
        the hardware address.  The 3c562 puts the address in the CIS. */
-    tuple.DesiredTuple = 0x88;
-    if (pcmcia_get_first_tuple(link, &tuple) == 0) {
-       pcmcia_get_tuple_data(link, &tuple);
-       for (i = 0; i < 3; i++)
-           phys_addr[i] = htons(le16_to_cpu(buf[i]));
+    len = pcmcia_get_tuple(link, 0x88, &buf);
+    if (buf && len >= 6) {
+           for (i = 0; i < 3; i++)
+                   phys_addr[i] = htons(le16_to_cpu(buf[i*2]));
+           kfree(buf);
     } else {
+       kfree(buf); /* 0 < len < 6 */
        for (i = 0; i < 3; i++)
            phys_addr[i] = htons(read_eeprom(ioaddr, i));
        if (phys_addr[0] == htons(0x6060)) {
@@ -328,7 +314,7 @@ static int tc589_config(struct pcmcia_device *link)
        printk(KERN_ERR "3c589_cs: invalid if_port requested\n");
     
     link->dev_node = &lp->node;
-    SET_NETDEV_DEV(dev, &handle_to_dev(link));
+    SET_NETDEV_DEV(dev, &link->dev);
 
     if (register_netdev(dev) != 0) {
        printk(KERN_ERR "3c589_cs: register_netdev() failed\n");
@@ -347,8 +333,6 @@ static int tc589_config(struct pcmcia_device *link)
           if_names[dev->if_port]);
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     tc589_release(link);
     return -ENODEV;
@@ -511,24 +495,8 @@ static void netdev_get_drvinfo(struct net_device *dev,
        sprintf(info->bus_info, "PCMCIA 0x%lx", dev->base_addr);
 }
 
-#ifdef PCMCIA_DEBUG
-static u32 netdev_get_msglevel(struct net_device *dev)
-{
-       return pc_debug;
-}
-
-static void netdev_set_msglevel(struct net_device *dev, u32 level)
-{
-       pc_debug = level;
-}
-#endif /* PCMCIA_DEBUG */
-
 static const struct ethtool_ops netdev_ethtool_ops = {
        .get_drvinfo            = netdev_get_drvinfo,
-#ifdef PCMCIA_DEBUG
-       .get_msglevel           = netdev_get_msglevel,
-       .set_msglevel           = netdev_set_msglevel,
-#endif /* PCMCIA_DEBUG */
 };
 
 static int el3_config(struct net_device *dev, struct ifmap *map)
@@ -563,7 +531,7 @@ static int el3_open(struct net_device *dev)
     lp->media.expires = jiffies + HZ;
     add_timer(&lp->media);
 
-    DEBUG(1, "%s: opened, status %4.4x.\n",
+    dev_dbg(&link->dev, "%s: opened, status %4.4x.\n",
          dev->name, inw(dev->base_addr + EL3_STATUS));
     
     return 0;
@@ -596,7 +564,7 @@ static void pop_tx_status(struct net_device *dev)
        if (tx_status & 0x30)
            tc589_wait_for_completion(dev, TxReset);
        if (tx_status & 0x38) {
-           DEBUG(1, "%s: transmit error: status 0x%02x\n",
+           pr_debug("%s: transmit error: status 0x%02x\n",
                  dev->name, tx_status);
            outw(TxEnable, ioaddr + EL3_CMD);
            dev->stats.tx_aborted_errors++;
@@ -612,7 +580,7 @@ static netdev_tx_t el3_start_xmit(struct sk_buff *skb,
     struct el3_private *priv = netdev_priv(dev);
     unsigned long flags;
 
-    DEBUG(3, "%s: el3_start_xmit(length = %ld) called, "
+    pr_debug("%s: el3_start_xmit(length = %ld) called, "
          "status %4.4x.\n", dev->name, (long)skb->len,
          inw(ioaddr + EL3_STATUS));
 
@@ -654,14 +622,14 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id)
 
     ioaddr = dev->base_addr;
 
-    DEBUG(3, "%s: interrupt, status %4.4x.\n",
+    pr_debug("%s: interrupt, status %4.4x.\n",
          dev->name, inw(ioaddr + EL3_STATUS));
 
     spin_lock(&lp->lock);    
     while ((status = inw(ioaddr + EL3_STATUS)) &
        (IntLatch | RxComplete | StatsFull)) {
        if ((status & 0xe000) != 0x2000) {
-           DEBUG(1, "%s: interrupt from dead card\n", dev->name);
+           pr_debug("%s: interrupt from dead card\n", dev->name);
            handled = 0;
            break;
        }
@@ -670,7 +638,7 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id)
            el3_rx(dev);
        
        if (status & TxAvailable) {
-           DEBUG(3, "    TX room bit was handled.\n");
+           pr_debug("    TX room bit was handled.\n");
            /* There's room in the FIFO for a full-sized packet. */
            outw(AckIntr | TxAvailable, ioaddr + EL3_CMD);
            netif_wake_queue(dev);
@@ -722,7 +690,7 @@ static irqreturn_t el3_interrupt(int irq, void *dev_id)
 
     lp->last_irq = jiffies;
     spin_unlock(&lp->lock);    
-    DEBUG(3, "%s: exiting interrupt, status %4.4x.\n",
+    pr_debug("%s: exiting interrupt, status %4.4x.\n",
          dev->name, inw(ioaddr + EL3_STATUS));
     return IRQ_RETVAL(handled);
 }
@@ -833,7 +801,7 @@ static void update_stats(struct net_device *dev)
 {
     unsigned int ioaddr = dev->base_addr;
 
-    DEBUG(2, "%s: updating the statistics.\n", dev->name);
+    pr_debug("%s: updating the statistics.\n", dev->name);
     /* Turn off statistics updates while reading. */
     outw(StatsDisable, ioaddr + EL3_CMD);
     /* Switch to the stats window, and read everything. */
@@ -861,7 +829,7 @@ static int el3_rx(struct net_device *dev)
     int worklimit = 32;
     short rx_status;
     
-    DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n",
+    pr_debug("%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n",
          dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RX_STATUS));
     while (!((rx_status = inw(ioaddr + RX_STATUS)) & 0x8000) &&
                    worklimit > 0) {
@@ -883,7 +851,7 @@ static int el3_rx(struct net_device *dev)
            
            skb = dev_alloc_skb(pkt_len+5);
            
-           DEBUG(3, "    Receiving packet size %d status %4.4x.\n",
+           pr_debug("    Receiving packet size %d status %4.4x.\n",
                  pkt_len, rx_status);
            if (skb != NULL) {
                skb_reserve(skb, 2);
@@ -894,7 +862,7 @@ static int el3_rx(struct net_device *dev)
                dev->stats.rx_packets++;
                dev->stats.rx_bytes += pkt_len;
            } else {
-               DEBUG(1, "%s: couldn't allocate a sk_buff of"
+               pr_debug("%s: couldn't allocate a sk_buff of"
                      " size %d.\n", dev->name, pkt_len);
                dev->stats.rx_dropped++;
            }
@@ -935,7 +903,7 @@ static int el3_close(struct net_device *dev)
     struct pcmcia_device *link = lp->p_dev;
     unsigned int ioaddr = dev->base_addr;
     
-    DEBUG(1, "%s: shutting down ethercard.\n", dev->name);
+    dev_dbg(&link->dev, "%s: shutting down ethercard.\n", dev->name);
 
     if (pcmcia_dev_present(link)) {
        /* Turn off statistics ASAP.  We update dev->stats below. */
index 3131a59a8d32b4cfbf1f032e237cece52b2f54ea..800597b82d18107e52c8fd5574a63c998e7a3cb4 100644 (file)
@@ -75,16 +75,6 @@ MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
 MODULE_DESCRIPTION("Asix AX88190 PCMCIA ethernet driver");
 MODULE_LICENSE("GPL");
 
-#ifdef PCMCIA_DEBUG
-#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)
-
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-static char *version =
-"axnet_cs.c 1.28 2002/06/29 06:27:37 (David Hinds)";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -167,7 +157,7 @@ static int axnet_probe(struct pcmcia_device *link)
     struct net_device *dev;
     struct ei_device *ei_local;
 
-    DEBUG(0, "axnet_attach()\n");
+    dev_dbg(&link->dev, "axnet_attach()\n");
 
     dev = alloc_etherdev(sizeof(struct ei_device) + sizeof(axnet_dev_t));
     if (!dev)
@@ -180,7 +170,6 @@ static int axnet_probe(struct pcmcia_device *link)
     info->p_dev = link;
     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;
 
@@ -205,7 +194,7 @@ static void axnet_detach(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
 
-    DEBUG(0, "axnet_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "axnet_detach(0x%p)\n", link);
 
     if (link->dev_node)
        unregister_netdev(dev);
@@ -272,9 +261,6 @@ static int get_prom(struct pcmcia_device *link)
 
 ======================================================================*/
 
-#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;
@@ -341,26 +327,29 @@ static int axnet_config(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
     axnet_dev_t *info = PRIV(dev);
-    int i, j, j2, last_ret, last_fn;
+    int i, j, j2, ret;
 
-    DEBUG(0, "axnet_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "axnet_config(0x%p)\n", link);
 
     /* don't trust the CIS on this; Linksys got it wrong */
     link->conf.Present = 0x63;
-    last_ret = pcmcia_loop_config(link, axnet_configcheck, NULL);
-    if (last_ret != 0) {
-       cs_error(link, RequestIO, last_ret);
+    ret = pcmcia_loop_config(link, axnet_configcheck, NULL);
+    if (ret != 0)
        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->conf.Status = CCSR_AUDIO_ENA;
     }
     
-    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;
 
@@ -410,7 +399,7 @@ static int axnet_config(struct pcmcia_device *link)
 
     info->phy_id = (i < 32) ? i : -1;
     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 "axnet_cs: register_netdev() failed\n");
@@ -426,14 +415,12 @@ static int axnet_config(struct pcmcia_device *link)
           dev->base_addr, dev->irq,
           dev->dev_addr);
     if (info->phy_id != -1) {
-       DEBUG(0, "  MII transceiver at index %d, status %x.\n", info->phy_id, j);
+       dev_dbg(&link->dev, "  MII transceiver at index %d, status %x.\n", info->phy_id, j);
     } else {
        printk(KERN_NOTICE "  No MII transceivers found!\n");
     }
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     axnet_release(link);
     return -ENODEV;
@@ -543,7 +530,7 @@ static int axnet_open(struct net_device *dev)
     struct pcmcia_device *link = info->p_dev;
     unsigned int nic_base = dev->base_addr;
     
-    DEBUG(2, "axnet_open('%s')\n", dev->name);
+    dev_dbg(&link->dev, "axnet_open('%s')\n", dev->name);
 
     if (!pcmcia_dev_present(link))
        return -ENODEV;
@@ -572,7 +559,7 @@ static int axnet_close(struct net_device *dev)
     axnet_dev_t *info = PRIV(dev);
     struct pcmcia_device *link = info->p_dev;
 
-    DEBUG(2, "axnet_close('%s')\n", dev->name);
+    dev_dbg(&link->dev, "axnet_close('%s')\n", dev->name);
 
     ax_close(dev);
     free_irq(dev->irq, dev);
@@ -741,10 +728,8 @@ static void block_input(struct net_device *dev, int count,
     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);
     outb_p(ring_offset & 0xff, nic_base + EN0_RSARLO);
     outb_p(ring_offset >> 8, nic_base + EN0_RSARHI);
     outb_p(E8390_RREAD+E8390_START, nic_base + AXNET_CMD);
@@ -762,10 +747,7 @@ static void block_output(struct net_device *dev, int count,
 {
     unsigned int nic_base = dev->base_addr;
 
-#ifdef PCMCIA_DEBUG
-    if (ei_debug > 4)
-       printk(KERN_DEBUG "%s: [bo=%d]\n", dev->name, count);
-#endif
+    pr_debug("%s: [bo=%d]\n", dev->name, count);
 
     /* Round the count up for word writes.  Do we need to do this?
        What effect will an odd byte count have on the 8390?
index 7b5c77b7bd27ebc9185a99da37ac7bc0871c96fb..21d9c9d815d12c9eb2e4d2302b0e99ea514aaf58 100644 (file)
 
 #define VERSION "arcnet: COM20020 PCMCIA support loaded.\n"
 
-#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)
+#ifdef DEBUG
 
 static void regdump(struct net_device *dev)
 {
@@ -92,7 +88,6 @@ static void regdump(struct net_device *dev)
 
 #else
 
-#define DEBUG(n, args...) do { } while (0)
 static inline void regdump(struct net_device *dev) { }
 
 #endif
@@ -144,7 +139,7 @@ static int com20020_probe(struct pcmcia_device *p_dev)
     struct net_device *dev;
     struct arcnet_local *lp;
 
-    DEBUG(0, "com20020_attach()\n");
+    dev_dbg(&p_dev->dev, "com20020_attach()\n");
 
     /* Create new network device */
     info = kzalloc(sizeof(struct com20020_dev_t), GFP_KERNEL);
@@ -169,11 +164,10 @@ static int com20020_probe(struct pcmcia_device *p_dev)
     p_dev->io.NumPorts1 = 16;
     p_dev->io.IOAddrLines = 16;
     p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
-    p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
     p_dev->conf.Attributes = CONF_ENABLE_IRQ;
     p_dev->conf.IntType = INT_MEMORY_AND_IO;
 
-    p_dev->irq.Instance = info->dev = dev;
+    info->dev = dev;
     p_dev->priv = info;
 
     return com20020_config(p_dev);
@@ -198,12 +192,12 @@ static void com20020_detach(struct pcmcia_device *link)
     struct com20020_dev_t *info = link->priv;
     struct net_device *dev = info->dev;
 
-    DEBUG(1,"detach...\n");
+    dev_dbg(&link->dev, "detach...\n");
 
-    DEBUG(0, "com20020_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "com20020_detach\n");
 
     if (link->dev_node) {
-       DEBUG(1,"unregister...\n");
+       dev_dbg(&link->dev, "unregister...\n");
 
        unregister_netdev(dev);
 
@@ -218,16 +212,16 @@ static void com20020_detach(struct pcmcia_device *link)
     com20020_release(link);
 
     /* Unlink device structure, free bits */
-    DEBUG(1,"unlinking...\n");
+    dev_dbg(&link->dev, "unlinking...\n");
     if (link->priv)
     {
        dev = info->dev;
        if (dev)
        {
-           DEBUG(1,"kfree...\n");
+           dev_dbg(&link->dev, "kfree...\n");
            free_netdev(dev);
        }
-       DEBUG(1,"kfree2...\n");
+       dev_dbg(&link->dev, "kfree2...\n");
        kfree(info);
     }
 
@@ -241,25 +235,22 @@ static void com20020_detach(struct pcmcia_device *link)
 
 ======================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int com20020_config(struct pcmcia_device *link)
 {
     struct arcnet_local *lp;
     com20020_dev_t *info;
     struct net_device *dev;
-    int i, last_ret, last_fn;
+    int i, ret;
     int ioaddr;
 
     info = link->priv;
     dev = info->dev;
 
-    DEBUG(1,"config...\n");
+    dev_dbg(&link->dev, "config...\n");
 
-    DEBUG(0, "com20020_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "com20020_config\n");
 
-    DEBUG(1,"arcnet: baseport1 is %Xh\n", link->io.BasePort1);
+    dev_dbg(&link->dev, "baseport1 is %Xh\n", link->io.BasePort1);
     i = -ENODEV;
     if (!link->io.BasePort1)
     {
@@ -276,26 +267,27 @@ static int com20020_config(struct pcmcia_device *link)
     
     if (i != 0)
     {
-       DEBUG(1,"arcnet: requestIO failed totally!\n");
+       dev_dbg(&link->dev, "requestIO failed totally!\n");
        goto failed;
     }
        
     ioaddr = dev->base_addr = link->io.BasePort1;
-    DEBUG(1,"arcnet: got ioaddr %Xh\n", ioaddr);
+    dev_dbg(&link->dev, "got ioaddr %Xh\n", ioaddr);
 
-    DEBUG(1,"arcnet: request IRQ %d (%Xh/%Xh)\n",
-          link->irq.AssignedIRQ,
-          link->irq.IRQInfo1, link->irq.IRQInfo2);
+    dev_dbg(&link->dev, "request IRQ %d\n",
+           link->irq.AssignedIRQ);
     i = pcmcia_request_irq(link, &link->irq);
     if (i != 0)
     {
-       DEBUG(1,"arcnet: requestIRQ failed totally!\n");
+       dev_dbg(&link->dev, "requestIRQ failed totally!\n");
        goto failed;
     }
 
     dev->irq = link->irq.AssignedIRQ;
 
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
 
     if (com20020_check(dev))
     {
@@ -308,26 +300,25 @@ static int com20020_config(struct pcmcia_device *link)
     lp->card_flags = ARC_CAN_10MBIT; /* pretend all of them can 10Mbit */
 
     link->dev_node = &info->node;
-    SET_NETDEV_DEV(dev, &handle_to_dev(link));
+    SET_NETDEV_DEV(dev, &link->dev);
 
     i = com20020_found(dev, 0);        /* calls register_netdev */
     
     if (i != 0) {
-       DEBUG(1,KERN_NOTICE "com20020_cs: com20020_found() failed\n");
+       dev_printk(KERN_NOTICE, &link->dev,
+               "com20020_cs: com20020_found() failed\n");
        link->dev_node = NULL;
        goto failed;
     }
 
     strcpy(info->node.dev_name, dev->name);
 
-    DEBUG(1,KERN_INFO "%s: port %#3lx, irq %d\n",
+    dev_dbg(&link->dev,KERN_INFO "%s: port %#3lx, irq %d\n",
            dev->name, dev->base_addr, dev->irq);
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
-    DEBUG(1,"com20020_config failed...\n");
+    dev_dbg(&link->dev, "com20020_config failed...\n");
     com20020_release(link);
     return -ENODEV;
 } /* com20020_config */
@@ -342,7 +333,7 @@ failed:
 
 static void com20020_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "com20020_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "com20020_release\n");
        pcmcia_disable_device(link);
 }
 
index 7e01fbdb87e0f52ad94cb99d834c52dbd97aeaeb..6e3e1ced6db491f15a115670268dad8aa0de4fc6 100644 (file)
@@ -72,13 +72,6 @@ MODULE_LICENSE("GPL");
 /* 0:4KB*2 TX buffer   else:8KB*2 TX buffer */
 INT_MODULE_PARM(sram_config, 0);
 
-#ifdef PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-static char *version = DRV_NAME ".c " DRV_VERSION " 2002/03/23";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 /*
@@ -245,7 +238,7 @@ static int fmvj18x_probe(struct pcmcia_device *link)
     local_info_t *lp;
     struct net_device *dev;
 
-    DEBUG(0, "fmvj18x_attach()\n");
+    dev_dbg(&link->dev, "fmvj18x_attach()\n");
 
     /* Make up a FMVJ18x specific data structure */
     dev = alloc_etherdev(sizeof(local_info_t));
@@ -262,10 +255,8 @@ static int fmvj18x_probe(struct pcmcia_device *link)
     link->io.IOAddrLines = 5;
 
     /* Interrupt setup */
-    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_HANDLE_PRESENT;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
     link->irq.Handler = &fjn_interrupt;
-    link->irq.Instance = dev;
 
     /* General socket configuration */
     link->conf.Attributes = CONF_ENABLE_IRQ;
@@ -285,7 +276,7 @@ static void fmvj18x_detach(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
 
-    DEBUG(0, "fmvj18x_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "fmvj18x_detach\n");
 
     if (link->dev_node)
        unregister_netdev(dev);
@@ -297,9 +288,6 @@ static void fmvj18x_detach(struct pcmcia_device *link)
 
 /*====================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int mfc_try_io_port(struct pcmcia_device *link)
 {
     int i, ret;
@@ -341,33 +329,38 @@ static int ungermann_try_io_port(struct pcmcia_device *link)
     return ret;        /* RequestIO failed */
 }
 
+static int fmvj18x_ioprobe(struct pcmcia_device *p_dev,
+                          cistpl_cftable_entry_t *cfg,
+                          cistpl_cftable_entry_t *dflt,
+                          unsigned int vcc,
+                          void *priv_data)
+{
+       return 0; /* strange, but that's what the code did already before... */
+}
+
 static int fmvj18x_config(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
     local_info_t *lp = netdev_priv(dev);
-    tuple_t tuple;
-    cisparse_t parse;
-    u_short buf[32];
-    int i, last_fn = 0, last_ret = 0, ret;
+    int i, ret;
     unsigned int ioaddr;
     cardtype_t cardtype;
     char *card_name = "unknown";
-    u_char *node_id;
+    u8 *buf;
+    size_t len;
+    u_char buggybuf[32];
+
+    dev_dbg(&link->dev, "fmvj18x_config\n");
 
-    DEBUG(0, "fmvj18x_config(0x%p)\n", link);
+    len = pcmcia_get_tuple(link, CISTPL_FUNCE, &buf);
+    kfree(buf);
 
-    tuple.TupleData = (u_char *)buf;
-    tuple.TupleDataMax = 64;
-    tuple.TupleOffset = 0;
-    tuple.DesiredTuple = CISTPL_FUNCE;
-    tuple.TupleOffset = 0;
-    if (pcmcia_get_first_tuple(link, &tuple) == 0) {
+    if (len) {
        /* Yes, I have CISTPL_FUNCE. Let's check CISTPL_MANFID */
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-       CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
-       CS_CHECK(ParseTuple, pcmcia_parse_tuple(&tuple, &parse));
-       link->conf.ConfigIndex = parse.cftable_entry.index;
+       ret = pcmcia_loop_config(link, fmvj18x_ioprobe, NULL);
+       if (ret != 0)
+               goto failed;
+
        switch (link->manf_id) {
        case MANFID_TDK:
            cardtype = TDK;
@@ -433,17 +426,24 @@ static int fmvj18x_config(struct pcmcia_device *link)
 
     if (link->io.NumPorts2 != 0) {
        link->irq.Attributes =
-               IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED|IRQ_HANDLE_PRESENT;
+               IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
        ret = mfc_try_io_port(link);
-       if (ret != 0) goto cs_failed;
+       if (ret != 0) goto failed;
     } else if (cardtype == UNGERMANN) {
        ret = ungermann_try_io_port(link);
-       if (ret != 0) goto cs_failed;
+       if (ret != 0) goto failed;
     } else { 
-       CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
+           ret = pcmcia_request_io(link, &link->io);
+           if (ret)
+                   goto failed;
     }
-    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_irq(link, &link->irq);
+    if (ret)
+           goto failed;
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
+
     dev->irq = link->irq.AssignedIRQ;
     dev->base_addr = link->io.BasePort1;
 
@@ -474,21 +474,21 @@ static int fmvj18x_config(struct pcmcia_device *link)
     case CONTEC:
     case NEC:
     case KME:
-       tuple.DesiredTuple = CISTPL_FUNCE;
-       tuple.TupleOffset = 0;
-       CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-       tuple.TupleOffset = 0;
-       CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
        if (cardtype == MBH10304) {
-           /* MBH10304's CIS_FUNCE is corrupted */
-           node_id = &(tuple.TupleData[5]);
            card_name = "FMV-J182";
-       } else {
-           while (tuple.TupleData[0] != CISTPL_FUNCE_LAN_NODE_ID ) {
-               CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
-               CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
+
+           len = pcmcia_get_tuple(link, CISTPL_FUNCE, &buf);
+           if (len < 11) {
+                   kfree(buf);
+                   goto failed;
            }
-           node_id = &(tuple.TupleData[2]);
+           /* Read MACID from CIS */
+           for (i = 5; i < 11; i++)
+                   dev->dev_addr[i] = buf[i];
+           kfree(buf);
+       } else {
+           if (pcmcia_get_mac_from_cis(link, dev))
+               goto failed;
            if( cardtype == TDK ) {
                card_name = "TDK LAK-CD021";
            } else if( cardtype == LA501 ) {
@@ -501,9 +501,6 @@ static int fmvj18x_config(struct pcmcia_device *link)
                card_name = "C-NET(PC)C";
            }
        }
-       /* Read MACID from CIS */
-       for (i = 0; i < 6; i++)
-           dev->dev_addr[i] = node_id[i];
        break;
     case UNGERMANN:
        /* Read MACID from register */
@@ -513,12 +510,12 @@ static int fmvj18x_config(struct pcmcia_device *link)
        break;
     case XXX10304:
        /* Read MACID from Buggy CIS */
-       if (fmvj18x_get_hwinfo(link, tuple.TupleData) == -1) {
+       if (fmvj18x_get_hwinfo(link, buggybuf) == -1) {
            printk(KERN_NOTICE "fmvj18x_cs: unable to read hardware net address.\n");
            goto failed;
        }
        for (i = 0 ; i < 6; i++) {
-           dev->dev_addr[i] = tuple.TupleData[i];
+           dev->dev_addr[i] = buggybuf[i];
        }
        card_name = "FMV-J182";
        break;
@@ -533,7 +530,7 @@ static int fmvj18x_config(struct pcmcia_device *link)
 
     lp->cardtype = cardtype;
     link->dev_node = &lp->node;
-    SET_NETDEV_DEV(dev, &handle_to_dev(link));
+    SET_NETDEV_DEV(dev, &link->dev);
 
     if (register_netdev(dev) != 0) {
        printk(KERN_NOTICE "fmvj18x_cs: register_netdev() failed\n");
@@ -551,9 +548,6 @@ static int fmvj18x_config(struct pcmcia_device *link)
 
     return 0;
     
-cs_failed:
-    /* All Card Services errors end up here */
-    cs_error(link, last_fn, last_ret);
 failed:
     fmvj18x_release(link);
     return -ENODEV;
@@ -571,16 +565,14 @@ static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id)
     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 -1;
-    }
 
     base = ioremap(req.Base, req.Size);
     mem.Page = 0;
     mem.CardOffset = 0;
-    pcmcia_map_mem_page(link->win, &mem);
+    pcmcia_map_mem_page(link, link->win, &mem);
 
     /*
      *  MBH10304 CISTPL_FUNCE_LAN_NODE_ID format
@@ -605,9 +597,7 @@ static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id)
     }
 
     iounmap(base);
-    j = pcmcia_release_window(link->win);
-    if (j != 0)
-       cs_error(link, ReleaseWindow, j);
+    j = pcmcia_release_window(link, link->win);
     return (i != 0x200) ? 0 : -1;
 
 } /* fmvj18x_get_hwinfo */
@@ -626,11 +616,9 @@ static int fmvj18x_setup_mfc(struct pcmcia_device *link)
     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 -1;
-    }
 
     lp->base = ioremap(req.Base, req.Size);
     if (lp->base == NULL) {
@@ -640,11 +628,10 @@ static int fmvj18x_setup_mfc(struct pcmcia_device *link)
 
     mem.Page = 0;
     mem.CardOffset = 0;
-    i = pcmcia_map_mem_page(link->win, &mem);
+    i = pcmcia_map_mem_page(link, link->win, &mem);
     if (i != 0) {
        iounmap(lp->base);
        lp->base = NULL;
-       cs_error(link, MapMemPage, i);
        return -1;
     }
     
@@ -671,15 +658,13 @@ static void fmvj18x_release(struct pcmcia_device *link)
     u_char __iomem *tmp;
     int j;
 
-    DEBUG(0, "fmvj18x_release(0x%p)\n", link);
+    dev_dbg(&link->dev, "fmvj18x_release\n");
 
     if (lp->base != NULL) {
        tmp = lp->base;
        lp->base = NULL;    /* set NULL before iounmap */
        iounmap(tmp);
-       j = pcmcia_release_window(link->win);
-       if (j != 0)
-           cs_error(link, ReleaseWindow, j);
+       j = pcmcia_release_window(link, link->win);
     }
 
     pcmcia_disable_device(link);
@@ -788,8 +773,8 @@ static irqreturn_t fjn_interrupt(int dummy, void *dev_id)
     outb(tx_stat, ioaddr + TX_STATUS);
     outb(rx_stat, ioaddr + RX_STATUS);
     
-    DEBUG(4, "%s: interrupt, rx_status %02x.\n", dev->name, rx_stat);
-    DEBUG(4, "               tx_status %02x.\n", tx_stat);
+    pr_debug("%s: interrupt, rx_status %02x.\n", dev->name, rx_stat);
+    pr_debug("               tx_status %02x.\n", tx_stat);
     
     if (rx_stat || (inb(ioaddr + RX_MODE) & F_BUF_EMP) == 0) {
        /* there is packet(s) in rx buffer */
@@ -809,8 +794,8 @@ static irqreturn_t fjn_interrupt(int dummy, void *dev_id)
        }
        netif_wake_queue(dev);
     }
-    DEBUG(4, "%s: exiting interrupt,\n", dev->name);
-    DEBUG(4, "    tx_status %02x, rx_status %02x.\n", tx_stat, rx_stat);
+    pr_debug("%s: exiting interrupt,\n", dev->name);
+    pr_debug("    tx_status %02x, rx_status %02x.\n", tx_stat, rx_stat);
 
     outb(D_TX_INTR, ioaddr + TX_INTR);
     outb(D_RX_INTR, ioaddr + RX_INTR);
@@ -882,7 +867,7 @@ static netdev_tx_t fjn_start_xmit(struct sk_buff *skb,
            return NETDEV_TX_BUSY;
        }
 
-       DEBUG(4, "%s: Transmitting a packet of length %lu.\n",
+       pr_debug("%s: Transmitting a packet of length %lu.\n",
              dev->name, (unsigned long)skb->len);
        dev->stats.tx_bytes += skb->len;
 
@@ -937,7 +922,7 @@ static void fjn_reset(struct net_device *dev)
     unsigned int ioaddr = dev->base_addr;
     int i;
 
-    DEBUG(4, "fjn_reset(%s) called.\n",dev->name);
+    pr_debug("fjn_reset(%s) called.\n",dev->name);
 
     /* Reset controller */
     if( sram_config == 0 ) 
@@ -1015,13 +1000,13 @@ static void fjn_rx(struct net_device *dev)
     unsigned int ioaddr = dev->base_addr;
     int boguscount = 10;       /* 5 -> 10: by agy 19940922 */
 
-    DEBUG(4, "%s: in rx_packet(), rx_status %02x.\n",
+    pr_debug("%s: in rx_packet(), rx_status %02x.\n",
          dev->name, inb(ioaddr + RX_STATUS));
 
     while ((inb(ioaddr + RX_MODE) & F_BUF_EMP) == 0) {
        u_short status = inw(ioaddr + DATAPORT);
 
-       DEBUG(4, "%s: Rxing packet mode %02x status %04x.\n",
+       pr_debug("%s: Rxing packet mode %02x status %04x.\n",
              dev->name, inb(ioaddr + RX_MODE), status);
 #ifndef final_version
        if (status == 0) {
@@ -1061,16 +1046,14 @@ static void fjn_rx(struct net_device *dev)
                 (pkt_len + 1) >> 1);
            skb->protocol = eth_type_trans(skb, dev);
 
-#ifdef PCMCIA_DEBUG
-           if (pc_debug > 5) {
+           {
                int i;
-               printk(KERN_DEBUG "%s: Rxed packet of length %d: ",
-                      dev->name, pkt_len);
+               pr_debug("%s: Rxed packet of length %d: ",
+                       dev->name, pkt_len);
                for (i = 0; i < 14; i++)
-                   printk(" %02x", skb->data[i]);
-               printk(".\n");
+                       pr_debug(" %02x", skb->data[i]);
+               pr_debug(".\n");
            }
-#endif
 
            netif_rx(skb);
            dev->stats.rx_packets++;
@@ -1094,7 +1077,7 @@ static void fjn_rx(struct net_device *dev)
        }
 
        if (i > 0)
-           DEBUG(5, "%s: Exint Rx packet with mode %02x after "
+           pr_debug("%s: Exint Rx packet with mode %02x after "
                  "%d ticks.\n", dev->name, inb(ioaddr + RX_MODE), i);
     }
 */
@@ -1112,24 +1095,8 @@ static void netdev_get_drvinfo(struct net_device *dev,
        sprintf(info->bus_info, "PCMCIA 0x%lx", dev->base_addr);
 }
 
-#ifdef PCMCIA_DEBUG
-static u32 netdev_get_msglevel(struct net_device *dev)
-{
-       return pc_debug;
-}
-
-static void netdev_set_msglevel(struct net_device *dev, u32 level)
-{
-       pc_debug = level;
-}
-#endif /* PCMCIA_DEBUG */
-
 static const struct ethtool_ops netdev_ethtool_ops = {
        .get_drvinfo            = netdev_get_drvinfo,
-#ifdef PCMCIA_DEBUG
-       .get_msglevel           = netdev_get_msglevel,
-       .set_msglevel           = netdev_set_msglevel,
-#endif /* PCMCIA_DEBUG */
 };
 
 static int fjn_config(struct net_device *dev, struct ifmap *map){
@@ -1141,7 +1108,7 @@ static int fjn_open(struct net_device *dev)
     struct local_info_t *lp = netdev_priv(dev);
     struct pcmcia_device *link = lp->p_dev;
 
-    DEBUG(4, "fjn_open('%s').\n", dev->name);
+    pr_debug("fjn_open('%s').\n", dev->name);
 
     if (!pcmcia_dev_present(link))
        return -ENODEV;
@@ -1167,7 +1134,7 @@ static int fjn_close(struct net_device *dev)
     struct pcmcia_device *link = lp->p_dev;
     unsigned int ioaddr = dev->base_addr;
 
-    DEBUG(4, "fjn_close('%s').\n", dev->name);
+    pr_debug("fjn_close('%s').\n", dev->name);
 
     lp->open_time = 0;
     netif_stop_queue(dev);
index 06618af1a4680d6c208536c903aa5de8638e8d2f..37f4a6fdc3ef46525a7655e1c45cd71382e278b8 100644 (file)
 #define PCMCIA
 #include "../tokenring/ibmtr.c"
 
-#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 =
-"ibmtr_cs.c 1.10   1996/01/06 05:19:00 (Steve Kipisz)\n"
-"           2.2.7  1999/05/03 12:00:00 (Mike Phillips)\n"
-"           2.4.2  2001/30/28 Midnight (Burt Silverman)\n";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -130,6 +119,12 @@ static const struct ethtool_ops netdev_ethtool_ops = {
        .get_drvinfo            = netdev_get_drvinfo,
 };
 
+static irqreturn_t ibmtr_interrupt(int irq, void *dev_id) {
+       ibmtr_dev_t *info = dev_id;
+       struct net_device *dev = info->dev;
+       return tok_interrupt(irq, dev);
+};
+
 /*======================================================================
 
     ibmtr_attach() creates an "instance" of the driver, allocating
@@ -143,7 +138,7 @@ static int __devinit ibmtr_attach(struct pcmcia_device *link)
     ibmtr_dev_t *info;
     struct net_device *dev;
 
-    DEBUG(0, "ibmtr_attach()\n");
+    dev_dbg(&link->dev, "ibmtr_attach()\n");
 
     /* Create new token-ring device */
     info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -161,14 +156,13 @@ static int __devinit ibmtr_attach(struct pcmcia_device *link)
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
     link->io.NumPorts1 = 4;
     link->io.IOAddrLines = 16;
-    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
-    link->irq.Handler = &tok_interrupt;
+    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
+    link->irq.Handler = ibmtr_interrupt;
     link->conf.Attributes = CONF_ENABLE_IRQ;
     link->conf.IntType = INT_MEMORY_AND_IO;
     link->conf.Present = PRESENT_OPTION;
 
-    link->irq.Instance = info->dev = dev;
+    info->dev = dev;
 
     SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
 
@@ -190,7 +184,7 @@ static void ibmtr_detach(struct pcmcia_device *link)
     struct net_device *dev = info->dev;
      struct tok_info *ti = netdev_priv(dev);
 
-    DEBUG(0, "ibmtr_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "ibmtr_detach\n");
     
     /* 
      * When the card removal interrupt hits tok_interrupt(), 
@@ -217,9 +211,6 @@ static void ibmtr_detach(struct pcmcia_device *link)
 
 ======================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int __devinit ibmtr_config(struct pcmcia_device *link)
 {
     ibmtr_dev_t *info = link->priv;
@@ -227,9 +218,9 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
     struct tok_info *ti = netdev_priv(dev);
     win_req_t req;
     memreq_t mem;
-    int i, last_ret, last_fn;
+    int i, ret;
 
-    DEBUG(0, "ibmtr_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "ibmtr_config\n");
 
     link->conf.ConfigIndex = 0x61;
 
@@ -241,11 +232,15 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
     if (i != 0) {
        /* Couldn't get 0xA20-0xA23.  Try ALTERNATE at 0xA24-0xA27. */
        link->io.BasePort1 = 0xA24;
-       CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
+       ret = pcmcia_request_io(link, &link->io);
+       if (ret)
+               goto failed;
     }
     dev->base_addr = link->io.BasePort1;
 
-    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;
     ti->irq = link->irq.AssignedIRQ;
     ti->global_int_enable=GLOBAL_INT_ENABLE+((dev->irq==9) ? 2 : dev->irq);
@@ -256,11 +251,15 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
     req.Base = 0; 
     req.Size = 0x2000;
     req.AccessSpeed = 250;
-    CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &link->win));
+    ret = pcmcia_request_window(link, &req, &link->win);
+    if (ret)
+           goto failed;
 
     mem.CardOffset = mmiobase;
     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;
     ti->mmio = ioremap(req.Base, req.Size);
 
     /* Allocate the SRAM memory window */
@@ -269,17 +268,23 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
     req.Base = 0;
     req.Size = sramsize * 1024;
     req.AccessSpeed = 250;
-    CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &info->sram_win_handle));
+    ret = pcmcia_request_window(link, &req, &info->sram_win_handle);
+    if (ret)
+           goto failed;
 
     mem.CardOffset = srambase;
     mem.Page = 0;
-    CS_CHECK(MapMemPage, pcmcia_map_mem_page(info->sram_win_handle, &mem));
+    ret = pcmcia_map_mem_page(link, info->sram_win_handle, &mem);
+    if (ret)
+           goto failed;
 
     ti->sram_base = mem.CardOffset >> 12;
     ti->sram_virt = ioremap(req.Base, req.Size);
     ti->sram_phys = req.Base;
 
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
 
     /*  Set up the Token-Ring Controller Configuration Register and
         turn on the card.  Check the "Local Area Network Credit Card
@@ -287,7 +292,7 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
     ibmtr_hw_setup(dev, mmiobase);
 
     link->dev_node = &info->node;
-    SET_NETDEV_DEV(dev, &handle_to_dev(link));
+    SET_NETDEV_DEV(dev, &link->dev);
 
     i = ibmtr_probe_card(dev);
     if (i != 0) {
@@ -305,8 +310,6 @@ static int __devinit ibmtr_config(struct pcmcia_device *link)
           dev->dev_addr);
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     ibmtr_release(link);
     return -ENODEV;
@@ -325,12 +328,12 @@ static void ibmtr_release(struct pcmcia_device *link)
        ibmtr_dev_t *info = link->priv;
        struct net_device *dev = info->dev;
 
-       DEBUG(0, "ibmtr_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "ibmtr_release\n");
 
        if (link->win) {
                struct tok_info *ti = netdev_priv(dev);
                iounmap(ti->mmio);
-               pcmcia_release_window(info->sram_win_handle);
+               pcmcia_release_window(link, info->sram_win_handle);
        }
        pcmcia_disable_device(link);
 }
index 5ed6339c52bcbb6e021e08b334b6e614eacf75f8..dae5ef6b26092a334544b2dcd66872317e1b30a8 100644 (file)
@@ -381,13 +381,6 @@ typedef struct _mace_private {
 Private Global Variables
 ---------------------------------------------------------------------------- */
 
-#ifdef PCMCIA_DEBUG
-static char rcsid[] =
-"nmclan_cs.c,v 0.16 1995/07/01 06:42:17 rpao Exp rpao";
-static char *version =
-DRV_NAME " " DRV_VERSION " (Roger C. Pao)";
-#endif
-
 static const char *if_names[]={
     "Auto", "10baseT", "BNC",
 };
@@ -406,12 +399,6 @@ MODULE_LICENSE("GPL");
 /* 0=auto, 1=10baseT, 2 = 10base2, default=auto */
 INT_MODULE_PARM(if_port, 0);
 
-#ifdef PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-#else
-#define DEBUG(n, args...)
-#endif
 
 /* ----------------------------------------------------------------------------
 Function Prototypes
@@ -462,8 +449,7 @@ static int nmclan_probe(struct pcmcia_device *link)
     mace_private *lp;
     struct net_device *dev;
 
-    DEBUG(0, "nmclan_attach()\n");
-    DEBUG(1, "%s\n", rcsid);
+    dev_dbg(&link->dev, "nmclan_attach()\n");
 
     /* Create new ethernet device */
     dev = alloc_etherdev(sizeof(mace_private));
@@ -477,10 +463,8 @@ static int nmclan_probe(struct pcmcia_device *link)
     link->io.NumPorts1 = 32;
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
     link->io.IOAddrLines = 5;
-    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
     link->irq.Handler = &mace_interrupt;
-    link->irq.Instance = dev;
     link->conf.Attributes = CONF_ENABLE_IRQ;
     link->conf.IntType = INT_MEMORY_AND_IO;
     link->conf.ConfigIndex = 1;
@@ -507,7 +491,7 @@ static void nmclan_detach(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
 
-    DEBUG(0, "nmclan_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "nmclan_detach\n");
 
     if (link->dev_node)
        unregister_netdev(dev);
@@ -654,37 +638,40 @@ nmclan_config
        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)
-
 static int nmclan_config(struct pcmcia_device *link)
 {
   struct net_device *dev = link->priv;
   mace_private *lp = netdev_priv(dev);
-  tuple_t tuple;
-  u_char buf[64];
-  int i, last_ret, last_fn;
+  u8 *buf;
+  size_t len;
+  int i, ret;
   unsigned int ioaddr;
 
-  DEBUG(0, "nmclan_config(0x%p)\n", link);
+  dev_dbg(&link->dev, "nmclan_config\n");
+
+  ret = pcmcia_request_io(link, &link->io);
+  if (ret)
+         goto failed;
+  ret = pcmcia_request_irq(link, &link->irq);
+  if (ret)
+         goto failed;
+  ret = pcmcia_request_configuration(link, &link->conf);
+  if (ret)
+         goto failed;
 
-  CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
-  CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-  CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
   dev->irq = link->irq.AssignedIRQ;
   dev->base_addr = link->io.BasePort1;
 
   ioaddr = dev->base_addr;
 
   /* Read the ethernet address from the CIS. */
-  tuple.DesiredTuple = 0x80 /* CISTPL_CFTABLE_ENTRY_MISC */;
-  tuple.TupleData = buf;
-  tuple.TupleDataMax = 64;
-  tuple.TupleOffset = 0;
-  tuple.Attributes = 0;
-  CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-  CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
-  memcpy(dev->dev_addr, tuple.TupleData, ETHER_ADDR_LEN);
+  len = pcmcia_get_tuple(link, 0x80, &buf);
+  if (!buf || len < ETHER_ADDR_LEN) {
+         kfree(buf);
+         goto failed;
+  }
+  memcpy(dev->dev_addr, buf, ETHER_ADDR_LEN);
+  kfree(buf);
 
   /* Verify configuration by reading the MACE ID. */
   {
@@ -693,7 +680,7 @@ static int nmclan_config(struct pcmcia_device *link)
     sig[0] = mace_read(lp, ioaddr, MACE_CHIPIDL);
     sig[1] = mace_read(lp, ioaddr, MACE_CHIPIDH);
     if ((sig[0] == 0x40) && ((sig[1] & 0x0F) == 0x09)) {
-      DEBUG(0, "nmclan_cs configured: mace id=%x %x\n",
+      dev_dbg(&link->dev, "nmclan_cs configured: mace id=%x %x\n",
            sig[0], sig[1]);
     } else {
       printk(KERN_NOTICE "nmclan_cs: mace id not found: %x %x should"
@@ -712,7 +699,7 @@ static int nmclan_config(struct pcmcia_device *link)
     printk(KERN_NOTICE "nmclan_cs: invalid if_port requested\n");
 
   link->dev_node = &lp->node;
-  SET_NETDEV_DEV(dev, &handle_to_dev(link));
+  SET_NETDEV_DEV(dev, &link->dev);
 
   i = register_netdev(dev);
   if (i != 0) {
@@ -729,8 +716,6 @@ static int nmclan_config(struct pcmcia_device *link)
         dev->dev_addr);
   return 0;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
 failed:
        nmclan_release(link);
        return -ENODEV;
@@ -744,7 +729,7 @@ nmclan_release
 ---------------------------------------------------------------------------- */
 static void nmclan_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "nmclan_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "nmclan_release\n");
        pcmcia_disable_device(link);
 }
 
@@ -795,7 +780,7 @@ static void nmclan_reset(struct net_device *dev)
   /* Reset Xilinx */
   reg.Action = CS_WRITE;
   reg.Offset = CISREG_COR;
-  DEBUG(1, "nmclan_reset: OrigCorValue=0x%lX, resetting...\n",
+  dev_dbg(&link->dev, "nmclan_reset: OrigCorValue=0x%lX, resetting...\n",
        OrigCorValue);
   reg.Value = COR_SOFT_RESET;
   pcmcia_access_configuration_register(link, &reg);
@@ -872,7 +857,7 @@ static int mace_close(struct net_device *dev)
   mace_private *lp = netdev_priv(dev);
   struct pcmcia_device *link = lp->p_dev;
 
-  DEBUG(2, "%s: shutting down ethercard.\n", dev->name);
+  dev_dbg(&link->dev, "%s: shutting down ethercard.\n", dev->name);
 
   /* Mask off all interrupts from the MACE chip. */
   outb(0xFF, ioaddr + AM2150_MACE_BASE + MACE_IMR);
@@ -891,24 +876,8 @@ static void netdev_get_drvinfo(struct net_device *dev,
        sprintf(info->bus_info, "PCMCIA 0x%lx", dev->base_addr);
 }
 
-#ifdef PCMCIA_DEBUG
-static u32 netdev_get_msglevel(struct net_device *dev)
-{
-       return pc_debug;
-}
-
-static void netdev_set_msglevel(struct net_device *dev, u32 level)
-{
-       pc_debug = level;
-}
-#endif /* PCMCIA_DEBUG */
-
 static const struct ethtool_ops netdev_ethtool_ops = {
        .get_drvinfo            = netdev_get_drvinfo,
-#ifdef PCMCIA_DEBUG
-       .get_msglevel           = netdev_get_msglevel,
-       .set_msglevel           = netdev_set_msglevel,
-#endif /* PCMCIA_DEBUG */
 };
 
 /* ----------------------------------------------------------------------------
@@ -946,7 +915,7 @@ static netdev_tx_t mace_start_xmit(struct sk_buff *skb,
 
   netif_stop_queue(dev);
 
-  DEBUG(3, "%s: mace_start_xmit(length = %ld) called.\n",
+  pr_debug("%s: mace_start_xmit(length = %ld) called.\n",
        dev->name, (long)skb->len);
 
 #if (!TX_INTERRUPTABLE)
@@ -1008,7 +977,7 @@ static irqreturn_t mace_interrupt(int irq, void *dev_id)
   int IntrCnt = MACE_MAX_IR_ITERATIONS;
 
   if (dev == NULL) {
-    DEBUG(2, "mace_interrupt(): irq 0x%X for unknown device.\n",
+    pr_debug("mace_interrupt(): irq 0x%X for unknown device.\n",
          irq);
     return IRQ_NONE;
   }
@@ -1031,7 +1000,7 @@ static irqreturn_t mace_interrupt(int irq, void *dev_id)
   }
 
   if (!netif_device_present(dev)) {
-    DEBUG(2, "%s: interrupt from dead card\n", dev->name);
+    pr_debug("%s: interrupt from dead card\n", dev->name);
     return IRQ_NONE;
   }
 
@@ -1039,7 +1008,7 @@ static irqreturn_t mace_interrupt(int irq, void *dev_id)
     /* WARNING: MACE_IR is a READ/CLEAR port! */
     status = inb(ioaddr + AM2150_MACE_BASE + MACE_IR);
 
-    DEBUG(3, "mace_interrupt: irq 0x%X status 0x%X.\n", irq, status);
+    pr_debug("mace_interrupt: irq 0x%X status 0x%X.\n", irq, status);
 
     if (status & MACE_IR_RCVINT) {
       mace_rx(dev, MACE_MAX_RX_ITERATIONS);
@@ -1158,7 +1127,7 @@ static int mace_rx(struct net_device *dev, unsigned char RxCnt)
   ) {
     rx_status = inw(ioaddr + AM2150_RCV);
 
-    DEBUG(3, "%s: in mace_rx(), framecnt 0x%X, rx_status"
+    pr_debug("%s: in mace_rx(), framecnt 0x%X, rx_status"
          " 0x%X.\n", dev->name, rx_framecnt, rx_status);
 
     if (rx_status & MACE_RCVFS_RCVSTS) { /* Error, update stats. */
@@ -1185,7 +1154,7 @@ static int mace_rx(struct net_device *dev, unsigned char RxCnt)
       lp->mace_stats.rfs_rcvcc += inb(ioaddr + AM2150_RCV);
         /* rcv collision count */
 
-      DEBUG(3, "    receiving packet size 0x%X rx_status"
+      pr_debug("    receiving packet size 0x%X rx_status"
            " 0x%X.\n", pkt_len, rx_status);
 
       skb = dev_alloc_skb(pkt_len+2);
@@ -1204,7 +1173,7 @@ static int mace_rx(struct net_device *dev, unsigned char RxCnt)
        outb(0xFF, ioaddr + AM2150_RCV_NEXT); /* skip to next frame */
        continue;
       } else {
-       DEBUG(1, "%s: couldn't allocate a sk_buff of size"
+       pr_debug("%s: couldn't allocate a sk_buff of size"
              " %d.\n", dev->name, pkt_len);
        lp->linux_stats.rx_dropped++;
       }
@@ -1220,28 +1189,28 @@ pr_linux_stats
 ---------------------------------------------------------------------------- */
 static void pr_linux_stats(struct net_device_stats *pstats)
 {
-  DEBUG(2, "pr_linux_stats\n");
-  DEBUG(2, " rx_packets=%-7ld        tx_packets=%ld\n",
+  pr_debug("pr_linux_stats\n");
+  pr_debug(" rx_packets=%-7ld        tx_packets=%ld\n",
        (long)pstats->rx_packets, (long)pstats->tx_packets);
-  DEBUG(2, " rx_errors=%-7ld         tx_errors=%ld\n",
+  pr_debug(" rx_errors=%-7ld         tx_errors=%ld\n",
        (long)pstats->rx_errors, (long)pstats->tx_errors);
-  DEBUG(2, " rx_dropped=%-7ld        tx_dropped=%ld\n",
+  pr_debug(" rx_dropped=%-7ld        tx_dropped=%ld\n",
        (long)pstats->rx_dropped, (long)pstats->tx_dropped);
-  DEBUG(2, " multicast=%-7ld         collisions=%ld\n",
+  pr_debug(" multicast=%-7ld         collisions=%ld\n",
        (long)pstats->multicast, (long)pstats->collisions);
 
-  DEBUG(2, " rx_length_errors=%-7ld  rx_over_errors=%ld\n",
+  pr_debug(" rx_length_errors=%-7ld  rx_over_errors=%ld\n",
        (long)pstats->rx_length_errors, (long)pstats->rx_over_errors);
-  DEBUG(2, " rx_crc_errors=%-7ld     rx_frame_errors=%ld\n",
+  pr_debug(" rx_crc_errors=%-7ld     rx_frame_errors=%ld\n",
        (long)pstats->rx_crc_errors, (long)pstats->rx_frame_errors);
-  DEBUG(2, " rx_fifo_errors=%-7ld    rx_missed_errors=%ld\n",
+  pr_debug(" rx_fifo_errors=%-7ld    rx_missed_errors=%ld\n",
        (long)pstats->rx_fifo_errors, (long)pstats->rx_missed_errors);
 
-  DEBUG(2, " tx_aborted_errors=%-7ld tx_carrier_errors=%ld\n",
+  pr_debug(" tx_aborted_errors=%-7ld tx_carrier_errors=%ld\n",
        (long)pstats->tx_aborted_errors, (long)pstats->tx_carrier_errors);
-  DEBUG(2, " tx_fifo_errors=%-7ld    tx_heartbeat_errors=%ld\n",
+  pr_debug(" tx_fifo_errors=%-7ld    tx_heartbeat_errors=%ld\n",
        (long)pstats->tx_fifo_errors, (long)pstats->tx_heartbeat_errors);
-  DEBUG(2, " tx_window_errors=%ld\n",
+  pr_debug(" tx_window_errors=%ld\n",
        (long)pstats->tx_window_errors);
 } /* pr_linux_stats */
 
@@ -1250,48 +1219,48 @@ pr_mace_stats
 ---------------------------------------------------------------------------- */
 static void pr_mace_stats(mace_statistics *pstats)
 {
-  DEBUG(2, "pr_mace_stats\n");
+  pr_debug("pr_mace_stats\n");
 
-  DEBUG(2, " xmtsv=%-7d             uflo=%d\n",
+  pr_debug(" xmtsv=%-7d             uflo=%d\n",
        pstats->xmtsv, pstats->uflo);
-  DEBUG(2, " lcol=%-7d              more=%d\n",
+  pr_debug(" lcol=%-7d              more=%d\n",
        pstats->lcol, pstats->more);
-  DEBUG(2, " one=%-7d               defer=%d\n",
+  pr_debug(" one=%-7d               defer=%d\n",
        pstats->one, pstats->defer);
-  DEBUG(2, " lcar=%-7d              rtry=%d\n",
+  pr_debug(" lcar=%-7d              rtry=%d\n",
        pstats->lcar, pstats->rtry);
 
   /* MACE_XMTRC */
-  DEBUG(2, " exdef=%-7d             xmtrc=%d\n",
+  pr_debug(" exdef=%-7d             xmtrc=%d\n",
        pstats->exdef, pstats->xmtrc);
 
   /* RFS1--Receive Status (RCVSTS) */
-  DEBUG(2, " oflo=%-7d              clsn=%d\n",
+  pr_debug(" oflo=%-7d              clsn=%d\n",
        pstats->oflo, pstats->clsn);
-  DEBUG(2, " fram=%-7d              fcs=%d\n",
+  pr_debug(" fram=%-7d              fcs=%d\n",
        pstats->fram, pstats->fcs);
 
   /* RFS2--Runt Packet Count (RNTPC) */
   /* RFS3--Receive Collision Count (RCVCC) */
-  DEBUG(2, " rfs_rntpc=%-7d         rfs_rcvcc=%d\n",
+  pr_debug(" rfs_rntpc=%-7d         rfs_rcvcc=%d\n",
        pstats->rfs_rntpc, pstats->rfs_rcvcc);
 
   /* MACE_IR */
-  DEBUG(2, " jab=%-7d               babl=%d\n",
+  pr_debug(" jab=%-7d               babl=%d\n",
        pstats->jab, pstats->babl);
-  DEBUG(2, " cerr=%-7d              rcvcco=%d\n",
+  pr_debug(" cerr=%-7d              rcvcco=%d\n",
        pstats->cerr, pstats->rcvcco);
-  DEBUG(2, " rntpco=%-7d            mpco=%d\n",
+  pr_debug(" rntpco=%-7d            mpco=%d\n",
        pstats->rntpco, pstats->mpco);
 
   /* MACE_MPC */
-  DEBUG(2, " mpc=%d\n", pstats->mpc);
+  pr_debug(" mpc=%d\n", pstats->mpc);
 
   /* MACE_RNTPC */
-  DEBUG(2, " rntpc=%d\n", pstats->rntpc);
+  pr_debug(" rntpc=%d\n", pstats->rntpc);
 
   /* MACE_RCVCC */
-  DEBUG(2, " rcvcc=%d\n", pstats->rcvcc);
+  pr_debug(" rcvcc=%d\n", pstats->rcvcc);
 
 } /* pr_mace_stats */
 
@@ -1360,7 +1329,7 @@ static struct net_device_stats *mace_get_stats(struct net_device *dev)
 
   update_stats(dev->base_addr, dev);
 
-  DEBUG(1, "%s: updating the statistics.\n", dev->name);
+  pr_debug("%s: updating the statistics.\n", dev->name);
   pr_linux_stats(&lp->linux_stats);
   pr_mace_stats(&lp->mace_stats);
 
@@ -1427,7 +1396,7 @@ static void BuildLAF(int *ladrf, int *adr)
   ladrf[byte] |= (1 << (hashcode & 7));
 
 #ifdef PCMCIA_DEBUG
-  if (pc_debug > 2)
+  if (0)
     printk(KERN_DEBUG "    adr =%pM\n", adr);
   printk(KERN_DEBUG "    hashcode = %d(decimal), ladrf[0:63] =", hashcode);
   for (i = 0; i < 8; i++)
@@ -1454,12 +1423,12 @@ static void restore_multicast_list(struct net_device *dev)
   unsigned int ioaddr = dev->base_addr;
   int i;
 
-  DEBUG(2, "%s: restoring Rx mode to %d addresses.\n",
+  pr_debug("%s: restoring Rx mode to %d addresses.\n",
        dev->name, num_addrs);
 
   if (num_addrs > 0) {
 
-    DEBUG(1, "Attempt to restore multicast list detected.\n");
+    pr_debug("Attempt to restore multicast list detected.\n");
 
     mace_write(lp, ioaddr, MACE_IAC, MACE_IAC_ADDRCHG | MACE_IAC_LOGADDR);
     /* Poll ADDRCHG bit */
@@ -1511,11 +1480,11 @@ static void set_multicast_list(struct net_device *dev)
   struct dev_mc_list *dmi = dev->mc_list;
 
 #ifdef PCMCIA_DEBUG
-  if (pc_debug > 1) {
+  {
     static int old;
     if (dev->mc_count != old) {
       old = dev->mc_count;
-      DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
+      pr_debug("%s: setting Rx mode to %d addresses.\n",
            dev->name, old);
     }
   }
@@ -1546,7 +1515,7 @@ static void restore_multicast_list(struct net_device *dev)
   unsigned int ioaddr = dev->base_addr;
   mace_private *lp = netdev_priv(dev);
 
-  DEBUG(2, "%s: restoring Rx mode to %d addresses.\n", dev->name,
+  pr_debug("%s: restoring Rx mode to %d addresses.\n", dev->name,
        lp->multicast_num_addrs);
 
   if (dev->flags & IFF_PROMISC) {
@@ -1567,11 +1536,11 @@ static void set_multicast_list(struct net_device *dev)
   mace_private *lp = netdev_priv(dev);
 
 #ifdef PCMCIA_DEBUG
-  if (pc_debug > 1) {
+  {
     static int old;
     if (dev->mc_count != old) {
       old = dev->mc_count;
-      DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
+      pr_debug("%s: setting Rx mode to %d addresses.\n",
            dev->name, old);
     }
   }
index 94c9ad2746bc68cede7ea8ae5f4a42b5114d3095..cbe462ed221f7624bb46282208a5e0a21bb7cf32 100644 (file)
 
 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 @@ static int pcnet_probe(struct pcmcia_device *link)
     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));
@@ -275,7 +266,6 @@ static int pcnet_probe(struct pcmcia_device *link)
     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 @@ static void pcnet_detach(struct pcmcia_device *link)
 {
        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 @@ static hw_info_t *get_hwinfo(struct pcmcia_device *link)
     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) &&
@@ -348,9 +336,7 @@ static hw_info_t *get_hwinfo(struct pcmcia_device *link)
     }
 
     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 @@ static hw_info_t *get_hwired(struct pcmcia_device *link)
 
 ======================================================================*/
 
-#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 @@ static int pcnet_config(struct pcmcia_device *link)
 {
     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;
@@ -589,7 +572,9 @@ static int pcnet_config(struct pcmcia_device *link)
        (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) {
@@ -660,7 +645,7 @@ static int pcnet_config(struct pcmcia_device *link)
        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");
@@ -687,8 +672,6 @@ static int pcnet_config(struct pcmcia_device *link)
     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 @@ static void pcnet_release(struct pcmcia_device *link)
 {
        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 @@ static void mii_phy_probe(struct net_device *dev)
        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 @@ static int pcnet_open(struct net_device *dev)
     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 @@ static int pcnet_close(struct net_device *dev)
     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 @@ static void dma_block_input(struct net_device *dev, int count,
     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 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
     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)
@@ -1509,13 +1490,17 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
     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);
@@ -1527,8 +1512,8 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
     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;
     }
 
@@ -1549,8 +1534,6 @@ static int setup_shmem_window(struct pcmcia_device *link, int start_pg,
     info->flags |= USE_SHMEM;
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     return 1;
 }
@@ -1788,7 +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 7bde2cd34c7e823882ba515ed88d7c6ed290a9cc..9e0da370912e42f4b78df2a315f4e06863e0c580 100644 (file)
@@ -79,14 +79,6 @@ MODULE_FIRMWARE(FIRMWARE_NAME);
 */
 INT_MODULE_PARM(if_port, 0);
 
-#ifdef PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-static const char *version =
-"smc91c92_cs.c 1.123 2006/11/09 Donald Becker, becker@scyld.com.\n";
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-#else
-#define DEBUG(n, args...)
-#endif
 
 #define DRV_NAME       "smc91c92_cs"
 #define DRV_VERSION    "1.123"
@@ -126,12 +118,6 @@ struct smc_private {
     int                                rx_ovrn;
 };
 
-struct smc_cfg_mem {
-    tuple_t tuple;
-    cisparse_t parse;
-    u_char buf[255];
-};
-
 /* Special definitions for Megahertz multifunction cards */
 #define MEGAHERTZ_ISR          0x0380
 
@@ -329,7 +315,7 @@ static int smc91c92_probe(struct pcmcia_device *link)
     struct smc_private *smc;
     struct net_device *dev;
 
-    DEBUG(0, "smc91c92_attach()\n");
+    dev_dbg(&link->dev, "smc91c92_attach()\n");
 
     /* Create new ethernet device */
     dev = alloc_etherdev(sizeof(struct smc_private));
@@ -343,10 +329,8 @@ static int smc91c92_probe(struct pcmcia_device *link)
     link->io.NumPorts1 = 16;
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
     link->io.IOAddrLines = 4;
-    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_HANDLE_PRESENT;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
     link->irq.Handler = &smc_interrupt;
-    link->irq.Instance = dev;
     link->conf.Attributes = CONF_ENABLE_IRQ;
     link->conf.IntType = INT_MEMORY_AND_IO;
 
@@ -377,7 +361,7 @@ static void smc91c92_detach(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
 
-    DEBUG(0, "smc91c92_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "smc91c92_detach\n");
 
     if (link->dev_node)
        unregister_netdev(dev);
@@ -408,34 +392,7 @@ static int cvt_ascii_address(struct net_device *dev, char *s)
     return 0;
 }
 
-/*====================================================================*/
-
-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 next_tuple(struct pcmcia_device *handle, tuple_t *tuple,
-               cisparse_t *parse)
-{
-       int i;
-
-       if ((i = pcmcia_get_next_tuple(handle, tuple)) != 0 ||
-                       (i = pcmcia_get_tuple_data(handle, tuple)) != 0)
-               return i;
-       return pcmcia_parse_tuple(tuple, parse);
-}
-
-/*======================================================================
+/*====================================================================
 
     Configuration stuff for Megahertz cards
 
@@ -490,19 +447,14 @@ static int mhz_mfc_config(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
     struct smc_private *smc = netdev_priv(dev);
-    struct smc_cfg_mem *cfg_mem;
     win_req_t req;
     memreq_t mem;
     int i;
 
-    cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL);
-    if (!cfg_mem)
-           return -ENOMEM;
-
     link->conf.Attributes |= CONF_ENABLE_SPKR;
     link->conf.Status = CCSR_AUDIO_ENA;
     link->irq.Attributes =
-       IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED|IRQ_HANDLE_PRESENT;
+       IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
     link->io.IOAddrLines = 16;
     link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
     link->io.NumPorts2 = 8;
@@ -510,91 +462,80 @@ static int mhz_mfc_config(struct pcmcia_device *link)
     /* The Megahertz combo cards have modem-like CIS entries, so
        we have to explicitly try a bunch of port combinations. */
     if (pcmcia_loop_config(link, mhz_mfc_config_check, NULL))
-       goto free_cfg_mem;
+           return -ENODEV;
+
     dev->base_addr = link->io.BasePort1;
 
     /* Allocate a memory window, for accessing the ISR */
     req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
     req.Base = req.Size = 0;
     req.AccessSpeed = 0;
-    i = pcmcia_request_window(&link, &req, &link->win);
+    i = pcmcia_request_window(link, &req, &link->win);
     if (i != 0)
-       goto free_cfg_mem;
+           return -ENODEV;
+
     smc->base = ioremap(req.Base, req.Size);
     mem.CardOffset = mem.Page = 0;
     if (smc->manfid == MANFID_MOTOROLA)
        mem.CardOffset = link->conf.ConfigBase;
-    i = pcmcia_map_mem_page(link->win, &mem);
+    i = pcmcia_map_mem_page(link, link->win, &mem);
 
     if ((i == 0)
        && (smc->manfid == MANFID_MEGAHERTZ)
        && (smc->cardid == PRODID_MEGAHERTZ_EM3288))
        mhz_3288_power(link);
 
-free_cfg_mem:
-    kfree(cfg_mem);
-    return -ENODEV;
+    return 0;
 }
 
-static int mhz_setup(struct pcmcia_device *link)
+static int pcmcia_get_versmac(struct pcmcia_device *p_dev,
+                             tuple_t *tuple,
+                             void *priv)
 {
-    struct net_device *dev = link->priv;
-    struct smc_cfg_mem *cfg_mem;
-    tuple_t *tuple;
-    cisparse_t *parse;
-    u_char *buf, *station_addr;
-    int rc;
+       struct net_device *dev = priv;
+       cisparse_t parse;
 
-    cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL);
-    if (!cfg_mem)
-       return -1;
+       if (pcmcia_parse_tuple(tuple, &parse))
+               return -EINVAL;
 
-    tuple = &cfg_mem->tuple;
-    parse = &cfg_mem->parse;
-    buf = cfg_mem->buf;
+       if ((parse.version_1.ns > 3) &&
+           (cvt_ascii_address(dev,
+                              (parse.version_1.str + parse.version_1.ofs[3]))))
+               return 0;
 
-    tuple->Attributes = tuple->TupleOffset = 0;
-    tuple->TupleData = (cisdata_t *)buf;
-    tuple->TupleDataMax = 255;
+       return -EINVAL;
+};
+
+static int mhz_setup(struct pcmcia_device *link)
+{
+    struct net_device *dev = link->priv;
+    size_t len;
+    u8 *buf;
+    int rc;
 
     /* Read the station address from the CIS.  It is stored as the last
        (fourth) string in the Version 1 Version/ID tuple. */
-    tuple->DesiredTuple = CISTPL_VERS_1;
-    if (first_tuple(link, tuple, parse) != 0) {
-       rc = -1;
-       goto free_cfg_mem;
-    }
+    if ((link->prod_id[3]) &&
+       (cvt_ascii_address(dev, link->prod_id[3]) == 0))
+           return 0;
+
+    /* Workarounds for broken cards start here. */
     /* Ugh -- the EM1144 card has two VERS_1 tuples!?! */
-    if (next_tuple(link, tuple, parse) != 0)
-       first_tuple(link, tuple, parse);
-    if (parse->version_1.ns > 3) {
-       station_addr = parse->version_1.str + parse->version_1.ofs[3];
-       if (cvt_ascii_address(dev, station_addr) == 0) {
-               rc = 0;
-               goto free_cfg_mem;
-       }
-    }
+    if (!pcmcia_loop_tuple(link, CISTPL_VERS_1, pcmcia_get_versmac, dev))
+           return 0;
 
     /* Another possibility: for the EM3288, in a special tuple */
-    tuple->DesiredTuple = 0x81;
-    if (pcmcia_get_first_tuple(link, tuple) != 0) {
-       rc = -1;
-       goto free_cfg_mem;
-    }
-    if (pcmcia_get_tuple_data(link, tuple) != 0) {
-       rc = -1;
-       goto free_cfg_mem;
-    }
-    buf[12] = '\0';
-    if (cvt_ascii_address(dev, buf) == 0) {
-       rc = 0;
-       goto free_cfg_mem;
-   }
     rc = -1;
-free_cfg_mem:
-   kfree(cfg_mem);
-   return rc;
-}
+    len = pcmcia_get_tuple(link, 0x81, &buf);
+    if (buf && len >= 13) {
+           buf[12] = '\0';
+           if (cvt_ascii_address(dev, buf))
+                   rc = 0;
+    }
+    kfree(buf);
+
+    return rc;
+};
 
 /*======================================================================
 
@@ -684,58 +625,21 @@ static int smc_config(struct pcmcia_device *link)
     return i;
 }
 
+
 static int smc_setup(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
-    struct smc_cfg_mem *cfg_mem;
-    tuple_t *tuple;
-    cisparse_t *parse;
-    cistpl_lan_node_id_t *node_id;
-    u_char *buf, *station_addr;
-    int i, rc;
-
-    cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL);
-    if (!cfg_mem)
-           return -ENOMEM;
-
-    tuple = &cfg_mem->tuple;
-    parse = &cfg_mem->parse;
-    buf = cfg_mem->buf;
-
-    tuple->Attributes = tuple->TupleOffset = 0;
-    tuple->TupleData = (cisdata_t *)buf;
-    tuple->TupleDataMax = 255;
 
     /* Check for a LAN function extension tuple */
-    tuple->DesiredTuple = CISTPL_FUNCE;
-    i = first_tuple(link, tuple, parse);
-    while (i == 0) {
-       if (parse->funce.type == CISTPL_FUNCE_LAN_NODE_ID)
-           break;
-       i = next_tuple(link, tuple, parse);
-    }
-    if (i == 0) {
-       node_id = (cistpl_lan_node_id_t *)parse->funce.data;
-       if (node_id->nb == 6) {
-           for (i = 0; i < 6; i++)
-               dev->dev_addr[i] = node_id->id[i];
-           rc = 0;
-           goto free_cfg_mem;
-       }
-    }
+    if (!pcmcia_get_mac_from_cis(link, dev))
+           return 0;
+
     /* Try the third string in the Version 1 Version/ID tuple. */
     if (link->prod_id[2]) {
-       station_addr = link->prod_id[2];
-       if (cvt_ascii_address(dev, station_addr) == 0) {
-               rc = 0;
-               goto free_cfg_mem;
-       }
+           if (cvt_ascii_address(dev, link->prod_id[2]) == 0)
+                   return 0;
     }
-
-    rc = -1;
-free_cfg_mem:
-    kfree(cfg_mem);
-    return rc;
+    return -1;
 }
 
 /*====================================================================*/
@@ -749,7 +653,7 @@ static int osi_config(struct pcmcia_device *link)
     link->conf.Attributes |= CONF_ENABLE_SPKR;
     link->conf.Status = CCSR_AUDIO_ENA;
     link->irq.Attributes =
-       IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED|IRQ_HANDLE_PRESENT;
+       IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
     link->io.NumPorts1 = 64;
     link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
     link->io.NumPorts2 = 8;
@@ -794,41 +698,31 @@ static int osi_load_firmware(struct pcmcia_device *link)
        return err;
 }
 
-static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid)
+static int pcmcia_osi_mac(struct pcmcia_device *p_dev,
+                         tuple_t *tuple,
+                         void *priv)
 {
-    struct net_device *dev = link->priv;
-    struct smc_cfg_mem *cfg_mem;
-    tuple_t *tuple;
-    u_char *buf;
-    int i, rc;
+       struct net_device *dev = priv;
+       int i;
 
-    cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL);
-    if (!cfg_mem)
-        return -1;
+       if (tuple->TupleDataLen < 8)
+               return -EINVAL;
+       if (tuple->TupleData[0] != 0x04)
+               return -EINVAL;
+       for (i = 0; i < 6; i++)
+               dev->dev_addr[i] = tuple->TupleData[i+2];
+       return 0;
+};
 
-    tuple = &cfg_mem->tuple;
-    buf = cfg_mem->buf;
 
-    tuple->Attributes = TUPLE_RETURN_COMMON;
-    tuple->TupleData = (cisdata_t *)buf;
-    tuple->TupleDataMax = 255;
-    tuple->TupleOffset = 0;
+static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid)
+{
+    struct net_device *dev = link->priv;
+    int rc;
 
     /* Read the station address from tuple 0x90, subtuple 0x04 */
-    tuple->DesiredTuple = 0x90;
-    i = pcmcia_get_first_tuple(link, tuple);
-    while (i == 0) {
-       i = pcmcia_get_tuple_data(link, tuple);
-       if ((i != 0) || (buf[0] == 0x04))
-           break;
-       i = pcmcia_get_next_tuple(link, tuple);
-    }
-    if (i != 0) {
-       rc = -1;
-       goto free_cfg_mem;
-    }
-    for (i = 0; i < 6; i++)
-       dev->dev_addr[i] = buf[i+2];
+    if (pcmcia_loop_tuple(link, 0x90, pcmcia_osi_mac, dev))
+           return -1;
 
     if (((manfid == MANFID_OSITECH) &&
         (cardid == PRODID_OSITECH_SEVEN)) ||
@@ -836,20 +730,17 @@ static int osi_setup(struct pcmcia_device *link, u_short manfid, u_short cardid)
         (cardid == PRODID_PSION_NET100))) {
        rc = osi_load_firmware(link);
        if (rc)
-               goto free_cfg_mem;
+               return rc;
     } else if (manfid == MANFID_OSITECH) {
        /* Make sure both functions are powered up */
        set_bits(0x300, link->io.BasePort1 + OSITECH_AUI_PWR);
        /* Now, turn on the interrupt for both card functions */
        set_bits(0x300, link->io.BasePort1 + OSITECH_RESET_ISR);
-       DEBUG(2, "AUI/PWR: %4.4x RESET/ISR: %4.4x\n",
+       dev_dbg(&link->dev, "AUI/PWR: %4.4x RESET/ISR: %4.4x\n",
              inw(link->io.BasePort1 + OSITECH_AUI_PWR),
              inw(link->io.BasePort1 + OSITECH_RESET_ISR));
     }
-    rc = 0;
-free_cfg_mem:
-   kfree(cfg_mem);
-   return rc;
+    return 0;
 }
 
 static int smc91c92_suspend(struct pcmcia_device *link)
@@ -959,12 +850,6 @@ static int check_sig(struct pcmcia_device *link)
 
 ======================================================================*/
 
-#define CS_EXIT_TEST(ret, svc, label)  \
-if (ret != 0) {                                \
-       cs_error(link, svc, ret);       \
-       goto label;                     \
-}
-
 static int smc91c92_config(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
@@ -974,7 +859,7 @@ static int smc91c92_config(struct pcmcia_device *link)
     unsigned int ioaddr;
     u_long mir;
 
-    DEBUG(0, "smc91c92_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "smc91c92_config\n");
 
     smc->manfid = link->manf_id;
     smc->cardid = link->card_id;
@@ -990,12 +875,15 @@ static int smc91c92_config(struct pcmcia_device *link)
     } else {
        i = smc_config(link);
     }
-    CS_EXIT_TEST(i, RequestIO, config_failed);
+    if (i)
+           goto config_failed;
 
     i = pcmcia_request_irq(link, &link->irq);
-    CS_EXIT_TEST(i, RequestIRQ, config_failed);
+    if (i)
+           goto config_failed;
     i = pcmcia_request_configuration(link, &link->conf);
-    CS_EXIT_TEST(i, RequestConfiguration, config_failed);
+    if (i)
+           goto config_failed;
 
     if (smc->manfid == MANFID_MOTOROLA)
        mot_config(link);
@@ -1074,7 +962,7 @@ static int smc91c92_config(struct pcmcia_device *link)
     }
 
     link->dev_node = &smc->node;
-    SET_NETDEV_DEV(dev, &handle_to_dev(link));
+    SET_NETDEV_DEV(dev, &link->dev);
 
     if (register_netdev(dev) != 0) {
        printk(KERN_ERR "smc91c92_cs: register_netdev() failed\n");
@@ -1100,7 +988,7 @@ static int smc91c92_config(struct pcmcia_device *link)
 
     if (smc->cfg & CFG_MII_SELECT) {
        if (smc->mii_if.phy_id != -1) {
-           DEBUG(0, "  MII transceiver at index %d, status %x.\n",
+           dev_dbg(&link->dev, "  MII transceiver at index %d, status %x.\n",
                  smc->mii_if.phy_id, j);
        } else {
            printk(KERN_NOTICE "  No MII transceivers found!\n");
@@ -1110,7 +998,7 @@ static int smc91c92_config(struct pcmcia_device *link)
 
 config_undo:
     unregister_netdev(dev);
-config_failed:                 /* CS_EXIT_TEST() calls jump to here... */
+config_failed:
     smc91c92_release(link);
     return -ENODEV;
 } /* smc91c92_config */
@@ -1125,7 +1013,7 @@ config_failed:                    /* CS_EXIT_TEST() calls jump to here... */
 
 static void smc91c92_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "smc91c92_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "smc91c92_release\n");
        if (link->win) {
                struct net_device *dev = link->priv;
                struct smc_private *smc = netdev_priv(dev);
@@ -1222,10 +1110,10 @@ static int smc_open(struct net_device *dev)
     struct smc_private *smc = netdev_priv(dev);
     struct pcmcia_device *link = smc->p_dev;
 
-#ifdef PCMCIA_DEBUG
-    DEBUG(0, "%s: smc_open(%p), ID/Window %4.4x.\n",
+    dev_dbg(&link->dev, "%s: smc_open(%p), ID/Window %4.4x.\n",
          dev->name, dev, inw(dev->base_addr + BANK_SELECT));
-    if (pc_debug > 1) smc_dump(dev);
+#ifdef PCMCIA_DEBUG
+    smc_dump(dev);
 #endif
 
     /* Check that the PCMCIA card is still here. */
@@ -1260,7 +1148,7 @@ static int smc_close(struct net_device *dev)
     struct pcmcia_device *link = smc->p_dev;
     unsigned int ioaddr = dev->base_addr;
 
-    DEBUG(0, "%s: smc_close(), status %4.4x.\n",
+    dev_dbg(&link->dev, "%s: smc_close(), status %4.4x.\n",
          dev->name, inw(ioaddr + BANK_SELECT));
 
     netif_stop_queue(dev);
@@ -1327,7 +1215,7 @@ static void smc_hardware_send_packet(struct net_device * dev)
        u_char *buf = skb->data;
        u_int length = skb->len; /* The chip will pad to ethernet min. */
 
-       DEBUG(2, "%s: Trying to xmit packet of length %d.\n",
+       pr_debug("%s: Trying to xmit packet of length %d.\n",
              dev->name, length);
        
        /* send the packet length: +6 for status word, length, and ctl */
@@ -1382,7 +1270,7 @@ static netdev_tx_t smc_start_xmit(struct sk_buff *skb,
 
     netif_stop_queue(dev);
 
-    DEBUG(2, "%s: smc_start_xmit(length = %d) called,"
+    pr_debug("%s: smc_start_xmit(length = %d) called,"
          " status %4.4x.\n", dev->name, skb->len, inw(ioaddr + 2));
 
     if (smc->saved_skb) {
@@ -1429,7 +1317,7 @@ static netdev_tx_t smc_start_xmit(struct sk_buff *skb,
     }
 
     /* Otherwise defer until the Tx-space-allocated interrupt. */
-    DEBUG(2, "%s: memory allocation deferred.\n", dev->name);
+    pr_debug("%s: memory allocation deferred.\n", dev->name);
     outw((IM_ALLOC_INT << 8) | (ir & 0xff00), ioaddr + INTERRUPT);
     spin_unlock_irqrestore(&smc->lock, flags);
 
@@ -1494,7 +1382,7 @@ static void smc_eph_irq(struct net_device *dev)
 
     SMC_SELECT_BANK(0);
     ephs = inw(ioaddr + EPH);
-    DEBUG(2, "%s: Ethernet protocol handler interrupt, status"
+    pr_debug("%s: Ethernet protocol handler interrupt, status"
          " %4.4x.\n", dev->name, ephs);
     /* Could be a counter roll-over warning: update stats. */
     card_stats = inw(ioaddr + COUNTER);
@@ -1534,7 +1422,7 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id)
 
     ioaddr = dev->base_addr;
 
-    DEBUG(3, "%s: SMC91c92 interrupt %d at %#x.\n", dev->name,
+    pr_debug("%s: SMC91c92 interrupt %d at %#x.\n", dev->name,
          irq, ioaddr);
 
     spin_lock(&smc->lock);
@@ -1543,7 +1431,7 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id)
     if ((saved_bank & 0xff00) != 0x3300) {
        /* The device does not exist -- the card could be off-line, or
           maybe it has been ejected. */
-       DEBUG(1, "%s: SMC91c92 interrupt %d for non-existent"
+       pr_debug("%s: SMC91c92 interrupt %d for non-existent"
              "/ejected device.\n", dev->name, irq);
        handled = 0;
        goto irq_done;
@@ -1557,7 +1445,7 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id)
 
     do { /* read the status flag, and mask it */
        status = inw(ioaddr + INTERRUPT) & 0xff;
-       DEBUG(3, "%s: Status is %#2.2x (mask %#2.2x).\n", dev->name,
+       pr_debug("%s: Status is %#2.2x (mask %#2.2x).\n", dev->name,
              status, mask);
        if ((status & mask) == 0) {
            if (bogus_cnt == INTR_WORK)
@@ -1602,7 +1490,7 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id)
            smc_eph_irq(dev);
     } while (--bogus_cnt);
 
-    DEBUG(3, "  Restoring saved registers mask %2.2x bank %4.4x"
+    pr_debug("  Restoring saved registers mask %2.2x bank %4.4x"
          " pointer %4.4x.\n", mask, saved_bank, saved_pointer);
 
     /* restore state register */
@@ -1610,7 +1498,7 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id)
     outw(saved_pointer, ioaddr + POINTER);
     SMC_SELECT_BANK(saved_bank);
 
-    DEBUG(3, "%s: Exiting interrupt IRQ%d.\n", dev->name, irq);
+    pr_debug("%s: Exiting interrupt IRQ%d.\n", dev->name, irq);
 
 irq_done:
 
@@ -1661,7 +1549,7 @@ static void smc_rx(struct net_device *dev)
     rx_status = inw(ioaddr + DATA_1);
     packet_length = inw(ioaddr + DATA_1) & 0x07ff;
 
-    DEBUG(2, "%s: Receive status %4.4x length %d.\n",
+    pr_debug("%s: Receive status %4.4x length %d.\n",
          dev->name, rx_status, packet_length);
 
     if (!(rx_status & RS_ERRORS)) {            
@@ -1672,7 +1560,7 @@ static void smc_rx(struct net_device *dev)
        skb = dev_alloc_skb(packet_length+2);
        
        if (skb == NULL) {
-           DEBUG(1, "%s: Low memory, packet dropped.\n", dev->name);
+           pr_debug("%s: Low memory, packet dropped.\n", dev->name);
            dev->stats.rx_dropped++;
            outw(MC_RELEASE, ioaddr + MMU_CMD);
            return;
@@ -1832,7 +1720,7 @@ static void smc_reset(struct net_device *dev)
     struct smc_private *smc = netdev_priv(dev);
     int i;
 
-    DEBUG(0, "%s: smc91c92 reset called.\n", dev->name);
+    pr_debug("%s: smc91c92 reset called.\n", dev->name);
 
     /* The first interaction must be a write to bring the chip out
        of sleep mode. */
@@ -2149,18 +2037,6 @@ static u32 smc_get_link(struct net_device *dev)
        return ret;
 }
 
-#ifdef PCMCIA_DEBUG
-static u32 smc_get_msglevel(struct net_device *dev)
-{
-       return pc_debug;
-}
-
-static void smc_set_msglevel(struct net_device *dev, u32 val)
-{
-       pc_debug = val;
-}
-#endif
-
 static int smc_nway_reset(struct net_device *dev)
 {
        struct smc_private *smc = netdev_priv(dev);
@@ -2184,10 +2060,6 @@ static const struct ethtool_ops ethtool_ops = {
        .get_settings = smc_get_settings,
        .set_settings = smc_set_settings,
        .get_link = smc_get_link,
-#ifdef PCMCIA_DEBUG
-       .get_msglevel = smc_get_msglevel,
-       .set_msglevel = smc_set_msglevel,
-#endif
        .nway_reset = smc_nway_reset,
 };
 
index cf842310253816a94bcd2e22bd59158fd94c6442..fe504b7f369f8294c13a56733ddd5d42a64e096a 100644 (file)
@@ -211,20 +211,6 @@ enum xirc_cmd {        /* Commands */
 
 static const char *if_names[] = { "Auto", "10BaseT", "10Base2", "AUI", "100BaseT" };
 
-/****************
- * 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 PCMCIA_DEBUG
-static int pc_debug = PCMCIA_DEBUG;
-module_param(pc_debug, int, 0);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KDBG_XIRC args)
-#else
-#define DEBUG(n, args...)
-#endif
 
 #define KDBG_XIRC KERN_DEBUG   "xirc2ps_cs: "
 #define KERR_XIRC KERN_ERR     "xirc2ps_cs: "
@@ -359,7 +345,7 @@ static void xirc_tx_timeout(struct net_device *dev);
 static void xirc2ps_tx_timeout_task(struct work_struct *work);
 static void set_addresses(struct net_device *dev);
 static void set_multicast_list(struct net_device *dev);
-static int set_card_type(struct pcmcia_device *link, const void *s);
+static int set_card_type(struct pcmcia_device *link);
 static int do_config(struct net_device *dev, struct ifmap *map);
 static int do_open(struct net_device *dev);
 static int do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
@@ -371,28 +357,6 @@ static void do_powerdown(struct net_device *dev);
 static int do_stop(struct net_device *dev);
 
 /*=============== Helper functions =========================*/
-static int
-first_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
-{
-       int err;
-
-       if ((err = pcmcia_get_first_tuple(handle, tuple)) == 0 &&
-                       (err = pcmcia_get_tuple_data(handle, tuple)) == 0)
-               err = pcmcia_parse_tuple(tuple, parse);
-       return err;
-}
-
-static int
-next_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
-{
-       int err;
-
-       if ((err = pcmcia_get_next_tuple(handle, tuple)) == 0 &&
-                       (err = pcmcia_get_tuple_data(handle, tuple)) == 0)
-               err = pcmcia_parse_tuple(tuple, parse);
-       return err;
-}
-
 #define SelectPage(pgnr)   outb((pgnr), ioaddr + XIRCREG_PR)
 #define GetByte(reg)      ((unsigned)inb(ioaddr + (reg)))
 #define GetWord(reg)      ((unsigned)inw(ioaddr + (reg)))
@@ -400,7 +364,7 @@ next_tuple(struct pcmcia_device *handle, tuple_t *tuple, cisparse_t *parse)
 #define PutWord(reg,value) outw((value), ioaddr+(reg))
 
 /*====== Functions used for debugging =================================*/
-#if defined(PCMCIA_DEBUG) && 0 /* reading regs may change system status */
+#if 0 /* reading regs may change system status */
 static void
 PrintRegisters(struct net_device *dev)
 {
@@ -432,7 +396,7 @@ PrintRegisters(struct net_device *dev)
        }
     }
 }
-#endif /* PCMCIA_DEBUG */
+#endif /* 0 */
 
 /*============== MII Management functions ===============*/
 
@@ -576,7 +540,7 @@ xirc2ps_probe(struct pcmcia_device *link)
     struct net_device *dev;
     local_info_t *local;
 
-    DEBUG(0, "attach()\n");
+    dev_dbg(&link->dev, "attach()\n");
 
     /* Allocate the device structure */
     dev = alloc_etherdev(sizeof(local_info_t));
@@ -592,7 +556,6 @@ xirc2ps_probe(struct pcmcia_device *link)
     link->conf.IntType = INT_MEMORY_AND_IO;
     link->conf.ConfigIndex = 1;
     link->irq.Handler = xirc2ps_interrupt;
-    link->irq.Instance = dev;
 
     /* Fill in card specific entries */
     dev->netdev_ops = &netdev_ops;
@@ -615,7 +578,7 @@ xirc2ps_detach(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
 
-    DEBUG(0, "detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "detach\n");
 
     if (link->dev_node)
        unregister_netdev(dev);
@@ -644,17 +607,25 @@ xirc2ps_detach(struct pcmcia_device *link)
  *
  */
 static int
-set_card_type(struct pcmcia_device *link, const void *s)
+set_card_type(struct pcmcia_device *link)
 {
     struct net_device *dev = link->priv;
     local_info_t *local = netdev_priv(dev);
-  #ifdef PCMCIA_DEBUG
-    unsigned cisrev = ((const unsigned char *)s)[2];
-  #endif
-    unsigned mediaid= ((const unsigned char *)s)[3];
-    unsigned prodid = ((const unsigned char *)s)[4];
+    u8 *buf;
+    unsigned int cisrev, mediaid, prodid;
+    size_t len;
+
+    len = pcmcia_get_tuple(link, CISTPL_MANFID, &buf);
+    if (len < 5) {
+           dev_err(&link->dev, "invalid CIS -- sorry\n");
+           return 0;
+    }
 
-    DEBUG(0, "cisrev=%02x mediaid=%02x prodid=%02x\n",
+    cisrev = buf[2];
+    mediaid = buf[3];
+    prodid = buf[4];
+
+    dev_dbg(&link->dev, "cisrev=%02x mediaid=%02x prodid=%02x\n",
          cisrev, mediaid, prodid);
 
     local->mohawk = 0;
@@ -761,6 +732,26 @@ xirc2ps_config_check(struct pcmcia_device *p_dev,
 
 }
 
+
+static int pcmcia_get_mac_ce(struct pcmcia_device *p_dev,
+                            tuple_t *tuple,
+                            void *priv)
+{
+       struct net_device *dev = priv;
+       int i;
+
+       if (tuple->TupleDataLen != 13)
+               return -EINVAL;
+       if ((tuple->TupleData[0] != 2) || (tuple->TupleData[1] != 1) ||
+               (tuple->TupleData[2] != 6))
+               return -EINVAL;
+       /* another try  (James Lehmer's CE2 version 4.1)*/
+       for (i = 2; i < 6; i++)
+               dev->dev_addr[i] = tuple->TupleData[i+2];
+       return 0;
+};
+
+
 /****************
  * xirc2ps_config() is scheduled to run after a CARD_INSERTION event
  * is received, to configure the PCMCIA socket, and to make the
@@ -772,33 +763,21 @@ xirc2ps_config(struct pcmcia_device * link)
     struct net_device *dev = link->priv;
     local_info_t *local = netdev_priv(dev);
     unsigned int ioaddr;
-    tuple_t tuple;
-    cisparse_t parse;
-    int err, i;
-    u_char buf[64];
-    cistpl_lan_node_id_t *node_id = (cistpl_lan_node_id_t*)parse.funce.data;
+    int err;
+    u8 *buf;
+    size_t len;
 
     local->dingo_ccr = NULL;
 
-    DEBUG(0, "config(0x%p)\n", link);
-
-    /*
-     * This reads the card's CONFIG tuple to find its configuration
-     * registers.
-     */
-    tuple.Attributes = 0;
-    tuple.TupleData = buf;
-    tuple.TupleDataMax = 64;
-    tuple.TupleOffset = 0;
+    dev_dbg(&link->dev, "config\n");
 
     /* Is this a valid card */
-    tuple.DesiredTuple = CISTPL_MANFID;
-    if ((err=first_tuple(link, &tuple, &parse))) {
+    if (link->has_manf_id == 0) {
        printk(KNOT_XIRC "manfid not found in CIS\n");
        goto failure;
     }
 
-    switch(parse.manfid.manf) {
+    switch (link->manf_id) {
       case MANFID_XIRCOM:
        local->manf_str = "Xircom";
        break;
@@ -817,65 +796,44 @@ xirc2ps_config(struct pcmcia_device * link)
        break;
       default:
        printk(KNOT_XIRC "Unknown Card Manufacturer ID: 0x%04x\n",
-              (unsigned)parse.manfid.manf);
+              (unsigned)link->manf_id);
        goto failure;
     }
-    DEBUG(0, "found %s card\n", local->manf_str);
+    dev_dbg(&link->dev, "found %s card\n", local->manf_str);
 
-    if (!set_card_type(link, buf)) {
+    if (!set_card_type(link)) {
        printk(KNOT_XIRC "this card is not supported\n");
        goto failure;
     }
 
     /* get the ethernet address from the CIS */
-    tuple.DesiredTuple = CISTPL_FUNCE;
-    for (err = first_tuple(link, &tuple, &parse); !err;
-                            err = next_tuple(link, &tuple, &parse)) {
-       /* Once I saw two CISTPL_FUNCE_LAN_NODE_ID entries:
-        * the first one with a length of zero the second correct -
-        * so I skip all entries with length 0 */
-       if (parse.funce.type == CISTPL_FUNCE_LAN_NODE_ID
-           && ((cistpl_lan_node_id_t *)parse.funce.data)->nb)
-           break;
-    }
-    if (err) { /* not found: try to get the node-id from tuple 0x89 */
-       tuple.DesiredTuple = 0x89;  /* data layout looks like tuple 0x22 */
-       if ((err = pcmcia_get_first_tuple(link, &tuple)) == 0 &&
-               (err = pcmcia_get_tuple_data(link, &tuple)) == 0) {
-           if (tuple.TupleDataLen == 8 && *buf == CISTPL_FUNCE_LAN_NODE_ID)
-               memcpy(&parse, buf, 8);
-           else
-               err = -1;
-       }
-    }
-    if (err) { /* another try  (James Lehmer's CE2 version 4.1)*/
-       tuple.DesiredTuple = CISTPL_FUNCE;
-       for (err = first_tuple(link, &tuple, &parse); !err;
-                                err = next_tuple(link, &tuple, &parse)) {
-           if (parse.funce.type == 0x02 && parse.funce.data[0] == 1
-               && parse.funce.data[1] == 6 && tuple.TupleDataLen == 13) {
-               buf[1] = 4;
-               memcpy(&parse, buf+1, 8);
-               break;
+    err = pcmcia_get_mac_from_cis(link, dev);
+
+    /* not found: try to get the node-id from tuple 0x89 */
+    if (err) {
+           len = pcmcia_get_tuple(link, 0x89, &buf);
+           /* data layout looks like tuple 0x22 */
+           if (buf && len == 8) {
+                   if (*buf == CISTPL_FUNCE_LAN_NODE_ID) {
+                           int i;
+                           for (i = 2; i < 6; i++)
+                                   dev->dev_addr[i] = buf[i+2];
+                   } else
+                           err = -1;
            }
-       }
+           kfree(buf);
     }
+
+    if (err)
+       err = pcmcia_loop_tuple(link, CISTPL_FUNCE, pcmcia_get_mac_ce, dev);
+
     if (err) {
        printk(KNOT_XIRC "node-id not found in CIS\n");
        goto failure;
     }
-    node_id = (cistpl_lan_node_id_t *)parse.funce.data;
-    if (node_id->nb != 6) {
-       printk(KNOT_XIRC "malformed node-id in CIS\n");
-       goto failure;
-    }
-    for (i=0; i < 6; i++)
-       dev->dev_addr[i] = node_id->id[i];
 
     link->io.IOAddrLines =10;
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-    link->irq.Attributes = IRQ_HANDLE_PRESENT;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
     if (local->modem) {
        int pass;
 
@@ -916,10 +874,8 @@ xirc2ps_config(struct pcmcia_device * link)
                goto port_found;
        }
        link->io.BasePort1 = 0; /* let CS decide */
-       if ((err=pcmcia_request_io(link, &link->io))) {
-           cs_error(link, RequestIO, err);
+       if ((err=pcmcia_request_io(link, &link->io)))
            goto config_error;
-       }
     }
   port_found:
     if (err)
@@ -929,19 +885,15 @@ xirc2ps_config(struct pcmcia_device * link)
      * Now allocate an interrupt line. Note that this does not
      * actually assign a handler to the interrupt.
      */
-    if ((err=pcmcia_request_irq(link, &link->irq))) {
-       cs_error(link, RequestIRQ, err);
+    if ((err=pcmcia_request_irq(link, &link->irq)))
        goto config_error;
-    }
 
     /****************
      * This actually configures the PCMCIA socket -- setting up
      * the I/O windows and the interrupt mapping.
      */
-    if ((err=pcmcia_request_configuration(link, &link->conf))) {
-       cs_error(link, RequestConfiguration, err);
+    if ((err=pcmcia_request_configuration(link, &link->conf)))
        goto config_error;
-    }
 
     if (local->dingo) {
        conf_reg_t reg;
@@ -956,17 +908,13 @@ xirc2ps_config(struct pcmcia_device * link)
        reg.Action = CS_WRITE;
        reg.Offset = CISREG_IOBASE_0;
        reg.Value = link->io.BasePort2 & 0xff;
-       if ((err = pcmcia_access_configuration_register(link, &reg))) {
-           cs_error(link, AccessConfigurationRegister, err);
+       if ((err = pcmcia_access_configuration_register(link, &reg)))
            goto config_error;
-       }
        reg.Action = CS_WRITE;
        reg.Offset = CISREG_IOBASE_1;
        reg.Value = (link->io.BasePort2 >> 8) & 0xff;
-       if ((err = pcmcia_access_configuration_register(link, &reg))) {
-           cs_error(link, AccessConfigurationRegister, err);
+       if ((err = pcmcia_access_configuration_register(link, &reg)))
            goto config_error;
-       }
 
        /* There is no config entry for the Ethernet part which
         * is at 0x0800. So we allocate a window into the attribute
@@ -975,17 +923,14 @@ xirc2ps_config(struct pcmcia_device * link)
        req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
        req.Base = req.Size = 0;
        req.AccessSpeed = 0;
-       if ((err = pcmcia_request_window(&link, &req, &link->win))) {
-           cs_error(link, RequestWindow, err);
+       if ((err = pcmcia_request_window(link, &req, &link->win)))
            goto config_error;
-       }
+
        local->dingo_ccr = ioremap(req.Base,0x1000) + 0x0800;
        mem.CardOffset = 0x0;
        mem.Page = 0;
-       if ((err = pcmcia_map_mem_page(link->win, &mem))) {
-           cs_error(link, MapMemPage, err);
+       if ((err = pcmcia_map_mem_page(link, link->win, &mem)))
            goto config_error;
-       }
 
        /* Setup the CCRs; there are no infos in the CIS about the Ethernet
         * part.
@@ -1044,7 +989,7 @@ xirc2ps_config(struct pcmcia_device * link)
        do_reset(dev, 1); /* a kludge to make the cem56 work */
 
     link->dev_node = &local->node;
-    SET_NETDEV_DEV(dev, &handle_to_dev(link));
+    SET_NETDEV_DEV(dev, &link->dev);
 
     if ((err=register_netdev(dev))) {
        printk(KNOT_XIRC "register_netdev() failed\n");
@@ -1077,7 +1022,7 @@ xirc2ps_config(struct pcmcia_device * link)
 static void
 xirc2ps_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "release(0x%p)\n", link);
+       dev_dbg(&link->dev, "release\n");
 
        if (link->win) {
                struct net_device *dev = link->priv;
@@ -1144,7 +1089,7 @@ xirc2ps_interrupt(int irq, void *dev_id)
        PutByte(XIRCREG_CR, 0);
     }
 
-    DEBUG(6, "%s: interrupt %d at %#x.\n", dev->name, irq, ioaddr);
+    pr_debug("%s: interrupt %d at %#x.\n", dev->name, irq, ioaddr);
 
     saved_page = GetByte(XIRCREG_PR);
     /* Read the ISR to see whats the cause for the interrupt.
@@ -1154,7 +1099,7 @@ xirc2ps_interrupt(int irq, void *dev_id)
     bytes_rcvd = 0;
   loop_entry:
     if (int_status == 0xff) { /* card may be ejected */
-       DEBUG(3, "%s: interrupt %d for dead card\n", dev->name, irq);
+       pr_debug("%s: interrupt %d for dead card\n", dev->name, irq);
        goto leave;
     }
     eth_status = GetByte(XIRCREG_ESR);
@@ -1167,7 +1112,7 @@ xirc2ps_interrupt(int irq, void *dev_id)
     PutByte(XIRCREG40_TXST0, 0);
     PutByte(XIRCREG40_TXST1, 0);
 
-    DEBUG(3, "%s: ISR=%#2.2x ESR=%#2.2x RSR=%#2.2x TSR=%#4.4x\n",
+    pr_debug("%s: ISR=%#2.2x ESR=%#2.2x RSR=%#2.2x TSR=%#4.4x\n",
          dev->name, int_status, eth_status, rx_status, tx_status);
 
     /***** receive section ******/
@@ -1178,14 +1123,14 @@ xirc2ps_interrupt(int irq, void *dev_id)
            /* too many bytes received during this int, drop the rest of the
             * packets */
            dev->stats.rx_dropped++;
-           DEBUG(2, "%s: RX drop, too much done\n", dev->name);
+           pr_debug("%s: RX drop, too much done\n", dev->name);
        } else if (rsr & PktRxOk) {
            struct sk_buff *skb;
 
            pktlen = GetWord(XIRCREG0_RBC);
            bytes_rcvd += pktlen;
 
-           DEBUG(5, "rsr=%#02x packet_length=%u\n", rsr, pktlen);
+           pr_debug("rsr=%#02x packet_length=%u\n", rsr, pktlen);
 
            skb = dev_alloc_skb(pktlen+3); /* 1 extra so we can use insw */
            if (!skb) {
@@ -1253,19 +1198,19 @@ xirc2ps_interrupt(int irq, void *dev_id)
                    dev->stats.multicast++;
            }
        } else { /* bad packet */
-           DEBUG(5, "rsr=%#02x\n", rsr);
+           pr_debug("rsr=%#02x\n", rsr);
        }
        if (rsr & PktTooLong) {
            dev->stats.rx_frame_errors++;
-           DEBUG(3, "%s: Packet too long\n", dev->name);
+           pr_debug("%s: Packet too long\n", dev->name);
        }
        if (rsr & CRCErr) {
            dev->stats.rx_crc_errors++;
-           DEBUG(3, "%s: CRC error\n", dev->name);
+           pr_debug("%s: CRC error\n", dev->name);
        }
        if (rsr & AlignErr) {
            dev->stats.rx_fifo_errors++; /* okay ? */
-           DEBUG(3, "%s: Alignment error\n", dev->name);
+           pr_debug("%s: Alignment error\n", dev->name);
        }
 
        /* clear the received/dropped/error packet */
@@ -1277,7 +1222,7 @@ xirc2ps_interrupt(int irq, void *dev_id)
     if (rx_status & 0x10) { /* Receive overrun */
        dev->stats.rx_over_errors++;
        PutByte(XIRCREG_CR, ClearRxOvrun);
-       DEBUG(3, "receive overrun cleared\n");
+       pr_debug("receive overrun cleared\n");
     }
 
     /***** transmit section ******/
@@ -1290,13 +1235,13 @@ xirc2ps_interrupt(int irq, void *dev_id)
        if (nn < n) /* rollover */
            dev->stats.tx_packets += 256 - n;
        else if (n == nn) { /* happens sometimes - don't know why */
-           DEBUG(0, "PTR not changed?\n");
+           pr_debug("PTR not changed?\n");
        } else
            dev->stats.tx_packets += lp->last_ptr_value - n;
        netif_wake_queue(dev);
     }
     if (tx_status & 0x0002) {  /* Execessive collissions */
-       DEBUG(0, "tx restarted due to execssive collissions\n");
+       pr_debug("tx restarted due to execssive collissions\n");
        PutByte(XIRCREG_CR, RestartTx);  /* restart transmitter process */
     }
     if (tx_status & 0x0040)
@@ -1315,14 +1260,14 @@ xirc2ps_interrupt(int irq, void *dev_id)
                maxrx_bytes = 2000;
            else if (maxrx_bytes > 22000)
                maxrx_bytes = 22000;
-           DEBUG(1, "set maxrx=%u (rcvd=%u ticks=%lu)\n",
+           pr_debug("set maxrx=%u (rcvd=%u ticks=%lu)\n",
                  maxrx_bytes, bytes_rcvd, duration);
        } else if (!duration && maxrx_bytes < 22000) {
            /* now much faster */
            maxrx_bytes += 2000;
            if (maxrx_bytes > 22000)
                maxrx_bytes = 22000;
-           DEBUG(1, "set maxrx=%u\n", maxrx_bytes);
+           pr_debug("set maxrx=%u\n", maxrx_bytes);
        }
     }
 
@@ -1372,7 +1317,7 @@ do_start_xmit(struct sk_buff *skb, struct net_device *dev)
     unsigned freespace;
     unsigned pktlen = skb->len;
 
-    DEBUG(1, "do_start_xmit(skb=%p, dev=%p) len=%u\n",
+    pr_debug("do_start_xmit(skb=%p, dev=%p) len=%u\n",
          skb, dev, pktlen);
 
 
@@ -1398,7 +1343,7 @@ do_start_xmit(struct sk_buff *skb, struct net_device *dev)
     freespace &= 0x7fff;
     /* TRS doesn't work - (indeed it is eliminated with sil-rev 1) */
     okay = pktlen +2 < freespace;
-    DEBUG(2 + (okay ? 2 : 0), "%s: avail. tx space=%u%s\n",
+    pr_debug("%s: avail. tx space=%u%s\n",
          dev->name, freespace, okay ? " (okay)":" (not enough)");
     if (!okay) { /* not enough space */
        return NETDEV_TX_BUSY;  /* upper layer may decide to requeue this packet */
@@ -1500,7 +1445,7 @@ do_config(struct net_device *dev, struct ifmap *map)
 {
     local_info_t *local = netdev_priv(dev);
 
-    DEBUG(0, "do_config(%p)\n", dev);
+    pr_debug("do_config(%p)\n", dev);
     if (map->port != 255 && map->port != dev->if_port) {
        if (map->port > 4)
            return -EINVAL;
@@ -1527,7 +1472,7 @@ do_open(struct net_device *dev)
     local_info_t *lp = netdev_priv(dev);
     struct pcmcia_device *link = lp->p_dev;
 
-    DEBUG(0, "do_open(%p)\n", dev);
+    dev_dbg(&link->dev, "do_open(%p)\n", dev);
 
     /* Check that the PCMCIA card is still here. */
     /* Physical device present signature. */
@@ -1561,7 +1506,7 @@ do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
     unsigned int ioaddr = dev->base_addr;
     struct mii_ioctl_data *data = if_mii(rq);
 
-    DEBUG(1, "%s: ioctl(%-.6s, %#04x) %04x %04x %04x %04x\n",
+    pr_debug("%s: ioctl(%-.6s, %#04x) %04x %04x %04x %04x\n",
          dev->name, rq->ifr_ifrn.ifrn_name, cmd,
          data->phy_id, data->reg_num, data->val_in, data->val_out);
 
@@ -1610,7 +1555,7 @@ do_reset(struct net_device *dev, int full)
     unsigned int ioaddr = dev->base_addr;
     unsigned value;
 
-    DEBUG(0, "%s: do_reset(%p,%d)\n", dev? dev->name:"eth?", dev, full);
+    pr_debug("%s: do_reset(%p,%d)\n", dev? dev->name:"eth?", dev, full);
 
     hardreset(dev);
     PutByte(XIRCREG_CR, SoftReset); /* set */
@@ -1648,8 +1593,8 @@ do_reset(struct net_device *dev, int full)
     }
     msleep(40);                             /* wait 40 msec to let it complete */
 
-  #ifdef PCMCIA_DEBUG
-    if (pc_debug) {
+  #if 0
+    {
        SelectPage(0);
        value = GetByte(XIRCREG_ESR);    /* read the ESR */
        printk(KERN_DEBUG "%s: ESR is: %#02x\n", dev->name, value);
@@ -1666,7 +1611,7 @@ do_reset(struct net_device *dev, int full)
        value |= DisableLinkPulse;
     PutByte(XIRCREG1_ECR, value);
   #endif
-    DEBUG(0, "%s: ECR is: %#02x\n", dev->name, value);
+    pr_debug("%s: ECR is: %#02x\n", dev->name, value);
 
     SelectPage(0x42);
     PutByte(XIRCREG42_SWC0, 0x20); /* disable source insertion */
@@ -1844,7 +1789,7 @@ do_powerdown(struct net_device *dev)
 
     unsigned int ioaddr = dev->base_addr;
 
-    DEBUG(0, "do_powerdown(%p)\n", dev);
+    pr_debug("do_powerdown(%p)\n", dev);
 
     SelectPage(4);
     PutByte(XIRCREG4_GPR1, 0);      /* clear bit 0: power down */
@@ -1858,7 +1803,7 @@ do_stop(struct net_device *dev)
     local_info_t *lp = netdev_priv(dev);
     struct pcmcia_device *link = lp->p_dev;
 
-    DEBUG(0, "do_stop(%p)\n", dev);
+    dev_dbg(&link->dev, "do_stop(%p)\n", dev);
 
     if (!link)
        return -ENODEV;
index d0593ed9170eb281d820a8e3aadaa3b3f04e71fd..f6036fb423196b59a0bac41a255ff29debe33a5a 100644 (file)
 
 #include "airo.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 PCMCIA_DEBUG
-static int pc_debug = PCMCIA_DEBUG;
-module_param(pc_debug, int, 0);
-static char *version = "$Revision: 1.2 $";
-#define DEBUG(n, args...) if (pc_debug > (n)) printk(KERN_DEBUG args);
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -145,11 +130,10 @@ static int airo_probe(struct pcmcia_device *p_dev)
 {
        local_info_t *local;
 
-       DEBUG(0, "airo_attach()\n");
+       dev_dbg(&p_dev->dev, "airo_attach()\n");
 
        /* Interrupt setup */
        p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-       p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
        p_dev->irq.Handler = NULL;
 
        /*
@@ -184,7 +168,7 @@ static int airo_probe(struct pcmcia_device *p_dev)
 
 static void airo_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "airo_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "airo_detach\n");
 
        airo_release(link);
 
@@ -204,9 +188,6 @@ static void airo_detach(struct pcmcia_device *link)
 
   ======================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int airo_cs_config_check(struct pcmcia_device *p_dev,
                                cistpl_cftable_entry_t *cfg,
                                cistpl_cftable_entry_t *dflt,
@@ -275,11 +256,11 @@ static int airo_cs_config_check(struct pcmcia_device *p_dev,
                req->Base = mem->win[0].host_addr;
                req->Size = mem->win[0].len;
                req->AccessSpeed = 0;
-               if (pcmcia_request_window(&p_dev, req, &p_dev->win) != 0)
+               if (pcmcia_request_window(p_dev, req, &p_dev->win) != 0)
                        return -ENODEV;
                map.Page = 0;
                map.CardOffset = mem->win[0].card_addr;
-               if (pcmcia_map_mem_page(p_dev->win, &map) != 0)
+               if (pcmcia_map_mem_page(p_dev, p_dev->win, &map) != 0)
                        return -ENODEV;
        }
        /* If we got this far, we're cool! */
@@ -291,11 +272,11 @@ static int airo_config(struct pcmcia_device *link)
 {
        local_info_t *dev;
        win_req_t *req;
-       int last_fn, last_ret;
+       int ret;
 
        dev = link->priv;
 
-       DEBUG(0, "airo_config(0x%p)\n", link);
+       dev_dbg(&link->dev, "airo_config\n");
 
        req = kzalloc(sizeof(win_req_t), GFP_KERNEL);
        if (!req)
@@ -315,8 +296,8 @@ static int airo_config(struct pcmcia_device *link)
         * and most client drivers will only use the CIS to fill in
         * implementation-defined details.
         */
-       last_ret = pcmcia_loop_config(link, airo_cs_config_check, req);
-       if (last_ret)
+       ret = pcmcia_loop_config(link, airo_cs_config_check, req);
+       if (ret)
                goto failed;
 
        /*
@@ -324,21 +305,25 @@ static int airo_config(struct pcmcia_device *link)
          handler to the interrupt, unless the 'Handler' member of the
          irq structure is initialized.
        */
-       if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
+       if (link->conf.Attributes & CONF_ENABLE_IRQ) {
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
+       }
 
        /*
          This actually configures the PCMCIA socket -- setting up
          the I/O windows and the interrupt mapping, and putting the
          card and host interface into "Memory and IO" mode.
        */
-       CS_CHECK(RequestConfiguration,
-                pcmcia_request_configuration(link, &link->conf));
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
        ((local_info_t *)link->priv)->eth_dev =
                init_airo_card(link->irq.AssignedIRQ,
-                              link->io.BasePort1, 1, &handle_to_dev(link));
+                              link->io.BasePort1, 1, &link->dev);
        if (!((local_info_t *)link->priv)->eth_dev)
-               goto cs_failed;
+               goto failed;
 
        /*
          At this point, the dev_node_t structure(s) need to be
@@ -368,8 +353,6 @@ static int airo_config(struct pcmcia_device *link)
        kfree(req);
        return 0;
 
- cs_failed:
-       cs_error(link, last_fn, last_ret);
  failed:
        airo_release(link);
        kfree(req);
@@ -386,7 +369,7 @@ static int airo_config(struct pcmcia_device *link)
 
 static void airo_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "airo_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "airo_release\n");
        pcmcia_disable_device(link);
 }
 
index ddaa859c3491d8209a5e834a1a4d1ec0c59ad05f..32407911842f0f3b4d60dcf9bb5c20a93bb26e79 100644 (file)
 
 #include "atmel.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 PCMCIA_DEBUG
-static int pc_debug = PCMCIA_DEBUG;
-module_param(pc_debug, int, 0);
-static char *version = "$Revision: 1.2 $";
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args);
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -155,11 +139,10 @@ static int atmel_probe(struct pcmcia_device *p_dev)
 {
        local_info_t *local;
 
-       DEBUG(0, "atmel_attach()\n");
+       dev_dbg(&p_dev->dev, "atmel_attach()\n");
 
        /* Interrupt setup */
        p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-       p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
        p_dev->irq.Handler = NULL;
 
        /*
@@ -194,7 +177,7 @@ static int atmel_probe(struct pcmcia_device *p_dev)
 
 static void atmel_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "atmel_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "atmel_detach\n");
 
        atmel_release(link);
 
@@ -209,9 +192,6 @@ static void atmel_detach(struct pcmcia_device *link)
 
   ======================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 /* Call-back function to interrogate PCMCIA-specific information
    about the current existance of the card */
 static int card_present(void *arg)
@@ -275,13 +255,13 @@ static int atmel_config_check(struct pcmcia_device *p_dev,
 static int atmel_config(struct pcmcia_device *link)
 {
        local_info_t *dev;
-       int last_fn, last_ret;
+       int ret;
        struct pcmcia_device_id *did;
 
        dev = link->priv;
-       did = dev_get_drvdata(&handle_to_dev(link));
+       did = dev_get_drvdata(&link->dev);
 
-       DEBUG(0, "atmel_config(0x%p)\n", link);
+       dev_dbg(&link->dev, "atmel_config\n");
 
        /*
          In this loop, we scan the CIS for configuration table entries,
@@ -303,31 +283,36 @@ static int atmel_config(struct pcmcia_device *link)
          handler to the interrupt, unless the 'Handler' member of the
          irq structure is initialized.
        */
-       if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
+       if (link->conf.Attributes & CONF_ENABLE_IRQ) {
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
+       }
 
        /*
          This actually configures the PCMCIA socket -- setting up
          the I/O windows and the interrupt mapping, and putting the
          card and host interface into "Memory and IO" mode.
        */
-       CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        if (link->irq.AssignedIRQ == 0) {
                printk(KERN_ALERT
                       "atmel: cannot assign IRQ: check that CONFIG_ISA is set in kernel config.");
-               goto cs_failed;
+               goto failed;
        }
 
        ((local_info_t*)link->priv)->eth_dev =
                init_atmel_card(link->irq.AssignedIRQ,
                                link->io.BasePort1,
                                did ? did->driver_info : ATMEL_FW_TYPE_NONE,
-                               &handle_to_dev(link),
+                               &link->dev,
                                card_present,
                                link);
        if (!((local_info_t*)link->priv)->eth_dev)
-                       goto cs_failed;
+                       goto failed;
 
 
        /*
@@ -340,8 +325,6 @@ static int atmel_config(struct pcmcia_device *link)
 
        return 0;
 
- cs_failed:
-       cs_error(link, last_fn, last_ret);
  failed:
        atmel_release(link);
        return -ENODEV;
@@ -359,7 +342,7 @@ static void atmel_release(struct pcmcia_device *link)
 {
        struct net_device *dev = ((local_info_t*)link->priv)->eth_dev;
 
-       DEBUG(0, "atmel_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "atmel_release\n");
 
        if (dev)
                stop_atmel_card(dev);
index 6c3a74964ab888585e0466424290415fcdf653e0..984174bc7b0ff5411b7961f59b494cd8edeafc36 100644 (file)
@@ -65,35 +65,15 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
        struct ssb_bus *ssb;
        win_req_t win;
        memreq_t mem;
-       tuple_t tuple;
-       cisparse_t parse;
        int err = -ENOMEM;
        int res = 0;
-       unsigned char buf[64];
 
        ssb = kzalloc(sizeof(*ssb), GFP_KERNEL);
        if (!ssb)
                goto out_error;
 
        err = -ENODEV;
-       tuple.DesiredTuple = CISTPL_CONFIG;
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
 
-       res = pcmcia_get_first_tuple(dev, &tuple);
-       if (res != 0)
-               goto err_kfree_ssb;
-       res = pcmcia_get_tuple_data(dev, &tuple);
-       if (res != 0)
-               goto err_kfree_ssb;
-       res = pcmcia_parse_tuple(&tuple, &parse);
-       if (res != 0)
-               goto err_kfree_ssb;
-
-       dev->conf.ConfigBase = parse.config.base;
-       dev->conf.Present = parse.config.rmask[0];
        dev->conf.Attributes = CONF_ENABLE_IRQ;
        dev->conf.IntType = INT_MEMORY_AND_IO;
 
@@ -107,20 +87,18 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
        win.Base = 0;
        win.Size = SSB_CORE_SIZE;
        win.AccessSpeed = 250;
-       res = pcmcia_request_window(&dev, &win, &dev->win);
+       res = pcmcia_request_window(dev, &win, &dev->win);
        if (res != 0)
                goto err_kfree_ssb;
 
        mem.CardOffset = 0;
        mem.Page = 0;
-       res = pcmcia_map_mem_page(dev->win, &mem);
+       res = pcmcia_map_mem_page(dev, dev->win, &mem);
        if (res != 0)
                goto err_disable;
 
        dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-       dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
        dev->irq.Handler = NULL; /* The handler is registered later. */
-       dev->irq.Instance = NULL;
        res = pcmcia_request_irq(dev, &dev->irq);
        if (res != 0)
                goto err_disable;
index ad8eab4a639b05fe82f41d7977f06448f2119760..c9640a3e02c99e60ba3db7c1e701542457197355 100644 (file)
@@ -274,9 +274,6 @@ static int sandisk_enable_wireless(struct net_device *dev)
        conf_reg_t reg;
        struct hostap_interface *iface = netdev_priv(dev);
        local_info_t *local = iface->local;
-       tuple_t tuple;
-       cisparse_t *parse = NULL;
-       u_char buf[64];
        struct hostap_cs_priv *hw_priv = local->hw_priv;
 
        if (hw_priv->link->io.NumPorts1 < 0x42) {
@@ -285,28 +282,13 @@ static int sandisk_enable_wireless(struct net_device *dev)
                goto done;
        }
 
-       parse = kmalloc(sizeof(cisparse_t), GFP_KERNEL);
-       if (parse == NULL) {
-               ret = -ENOMEM;
-               goto done;
-       }
-
-       tuple.Attributes = TUPLE_RETURN_COMMON;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-
        if (hw_priv->link->manf_id != 0xd601 || hw_priv->link->card_id != 0x0101) {
                /* No SanDisk manfid found */
                ret = -ENODEV;
                goto done;
        }
 
-       tuple.DesiredTuple = CISTPL_LONGLINK_MFC;
-       if (pcmcia_get_first_tuple(hw_priv->link, &tuple) ||
-           pcmcia_get_tuple_data(hw_priv->link, &tuple) ||
-           pcmcia_parse_tuple(&tuple, parse) ||
-               parse->longlink_mfc.nfn < 2) {
+       if (hw_priv->link->socket->functions < 2) {
                /* No multi-function links found */
                ret = -ENODEV;
                goto done;
@@ -354,7 +336,6 @@ static int sandisk_enable_wireless(struct net_device *dev)
        udelay(10);
 
 done:
-       kfree(parse);
        return ret;
 }
 
@@ -529,10 +510,6 @@ static void prism2_detach(struct pcmcia_device *link)
 }
 
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
-
 /* run after a CARD_INSERTION event is received to configure the PCMCIA
  * socket and make the device available to the system */
 
@@ -624,7 +601,6 @@ static int prism2_config(struct pcmcia_device *link)
        struct hostap_interface *iface;
        local_info_t *local;
        int ret = 1;
-       int last_fn, last_ret;
        struct hostap_cs_priv *hw_priv;
 
        PDEBUG(DEBUG_FLOW, "prism2_config()\n");
@@ -636,19 +612,18 @@ static int prism2_config(struct pcmcia_device *link)
        }
 
        /* Look for an appropriate configuration table entry in the CIS */
-       last_ret = pcmcia_loop_config(link, prism2_config_check, NULL);
-       if (last_ret) {
+       ret = pcmcia_loop_config(link, prism2_config_check, NULL);
+       if (ret) {
                if (!ignore_cis_vcc)
                        printk(KERN_ERR "GetNextTuple(): No matching "
                               "CIS configuration.  Maybe you need the "
                               "ignore_cis_vcc=1 parameter.\n");
-               cs_error(link, RequestIO, last_ret);
                goto failed;
        }
 
        /* Need to allocate net_device before requesting IRQ handler */
        dev = prism2_init_local_data(&prism2_pccard_funcs, 0,
-                                    &handle_to_dev(link));
+                                    &link->dev);
        if (dev == NULL)
                goto failed;
        link->priv = dev;
@@ -666,13 +641,11 @@ static int prism2_config(struct pcmcia_device *link)
         * irq structure is initialized.
         */
        if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-               link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING |
-                                      IRQ_HANDLE_PRESENT;
-               link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+               link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
                link->irq.Handler = prism2_interrupt;
-               link->irq.Instance = dev;
-               CS_CHECK(RequestIRQ,
-                        pcmcia_request_irq(link, &link->irq));
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
        }
 
        /*
@@ -680,8 +653,9 @@ static int prism2_config(struct pcmcia_device *link)
         * the I/O windows and the interrupt mapping, and putting the
         * card and host interface into "Memory and IO" mode.
         */
-       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;
@@ -714,9 +688,6 @@ static int prism2_config(struct pcmcia_device *link)
        }
        return ret;
 
- cs_failed:
-       cs_error(link, last_fn, last_ret);
-
  failed:
        kfree(hw_priv);
        prism2_release((u_long)link);
index 62381768f2d599e2ff65932a09908d3b1c5ddaa0..b1d84592b959d742a22cd890e726be4392caaf54 100644 (file)
@@ -590,7 +590,7 @@ static int if_cs_prog_helper(struct if_cs_card *card)
 
        /* TODO: make firmware file configurable */
        ret = request_firmware(&fw, "libertas_cs_helper.fw",
-               &handle_to_dev(card->p_dev));
+               &card->p_dev->dev);
        if (ret) {
                lbs_pr_err("can't load helper firmware\n");
                ret = -ENODEV;
@@ -663,7 +663,7 @@ static int if_cs_prog_real(struct if_cs_card *card)
 
        /* TODO: make firmware file configurable */
        ret = request_firmware(&fw, "libertas_cs.fw",
-               &handle_to_dev(card->p_dev));
+               &card->p_dev->dev);
        if (ret) {
                lbs_pr_err("can't load firmware\n");
                ret = -ENODEV;
@@ -793,18 +793,37 @@ static void if_cs_release(struct pcmcia_device *p_dev)
  * configure the card at this point -- we wait until we receive a card
  * insertion event.
  */
+
+static int if_cs_ioprobe(struct pcmcia_device *p_dev,
+                        cistpl_cftable_entry_t *cfg,
+                        cistpl_cftable_entry_t *dflt,
+                        unsigned int vcc,
+                        void *priv_data)
+{
+       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+       p_dev->io.BasePort1 = cfg->io.win[0].base;
+       p_dev->io.NumPorts1 = cfg->io.win[0].len;
+
+       /* Do we need to allocate an interrupt? */
+       if (cfg->irq.IRQInfo1)
+               p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+
+       /* IO window settings */
+       if (cfg->io.nwin != 1) {
+               lbs_pr_err("wrong CIS (check number of IO windows)\n");
+               return -ENODEV;
+       }
+
+       /* This reserves IO space but doesn't actually enable it */
+       return pcmcia_request_io(p_dev, &p_dev->io);
+}
+
 static int if_cs_probe(struct pcmcia_device *p_dev)
 {
        int ret = -ENOMEM;
        unsigned int prod_id;
        struct lbs_private *priv;
        struct if_cs_card *card;
-       /* CIS parsing */
-       tuple_t tuple;
-       cisparse_t parse;
-       cistpl_cftable_entry_t *cfg = &parse.cftable_entry;
-       cistpl_io_t *io = &cfg->io;
-       u_char buf[64];
 
        lbs_deb_enter(LBS_DEB_CS);
 
@@ -818,48 +837,15 @@ static int if_cs_probe(struct pcmcia_device *p_dev)
 
        p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
        p_dev->irq.Handler = NULL;
-       p_dev->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
 
        p_dev->conf.Attributes = 0;
        p_dev->conf.IntType = INT_MEMORY_AND_IO;
 
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       if ((ret = pcmcia_get_first_tuple(p_dev, &tuple)) != 0 ||
-           (ret = pcmcia_get_tuple_data(p_dev, &tuple)) != 0 ||
-           (ret = pcmcia_parse_tuple(&tuple, &parse)) != 0)
-       {
-               lbs_pr_err("error in pcmcia_get_first_tuple etc\n");
-               goto out1;
-       }
-
-       p_dev->conf.ConfigIndex = cfg->index;
-
-       /* Do we need to allocate an interrupt? */
-       if (cfg->irq.IRQInfo1) {
-               p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
-       }
-
-       /* IO window settings */
-       if (cfg->io.nwin != 1) {
-               lbs_pr_err("wrong CIS (check number of IO windows)\n");
-               ret = -ENODEV;
+       if (pcmcia_loop_config(p_dev, if_cs_ioprobe, NULL)) {
+               lbs_pr_err("error in pcmcia_loop_config\n");
                goto out1;
        }
-       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-       p_dev->io.BasePort1 = io->win[0].base;
-       p_dev->io.NumPorts1 = io->win[0].len;
 
-       /* This reserves IO space but doesn't actually enable it */
-       ret = pcmcia_request_io(p_dev, &p_dev->io);
-       if (ret) {
-               lbs_pr_err("error in pcmcia_request_io\n");
-               goto out1;
-       }
 
        /*
         * Allocate an interrupt line.  Note that this does not assign
index 9498b46c99a48d1355eedd18b8044f3402432156..e61e6b9440abec403af70d32efb8c99961021af5 100644 (file)
@@ -145,23 +145,6 @@ static const unsigned int txConfEUD    = 0x10; /* Enable Uni-Data packets */
 static const unsigned int txConfKey    = 0x02; /* Scramble data packets */
 static const unsigned int txConfLoop   = 0x01; /* Loopback mode */
 
-/*
-   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 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 =
-"netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -383,7 +366,7 @@ static int netwave_probe(struct pcmcia_device *link)
     struct net_device *dev;
     netwave_private *priv;
 
-    DEBUG(0, "netwave_attach()\n");
+    dev_dbg(&link->dev, "netwave_attach()\n");
 
     /* Initialize the struct pcmcia_device structure */
     dev = alloc_etherdev(sizeof(netwave_private));
@@ -401,8 +384,7 @@ static int netwave_probe(struct pcmcia_device *link)
     link->io.IOAddrLines = 5;
     
     /* Interrupt setup */
-    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-    link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
     link->irq.Handler = &netwave_interrupt;
     
     /* General socket configuration */
@@ -421,8 +403,6 @@ static int netwave_probe(struct pcmcia_device *link)
 
     dev->watchdog_timeo = TX_TIMEOUT;
 
-    link->irq.Instance = dev;
-
     return netwave_pcmcia_config( link);
 } /* netwave_attach */
 
@@ -438,7 +418,7 @@ static void netwave_detach(struct pcmcia_device *link)
 {
        struct net_device *dev = link->priv;
 
-       DEBUG(0, "netwave_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "netwave_detach\n");
 
        netwave_release(link);
 
@@ -725,18 +705,15 @@ static const struct iw_handler_def        netwave_handler_def =
  *
  */
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int netwave_pcmcia_config(struct pcmcia_device *link) {
     struct net_device *dev = link->priv;
     netwave_private *priv = netdev_priv(dev);
-    int i, j, last_ret, last_fn;
+    int i, j, ret;
     win_req_t req;
     memreq_t mem;
     u_char __iomem *ramBase = NULL;
 
-    DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "netwave_pcmcia_config\n");
 
     /*
      *  Try allocating IO ports.  This tries a few fixed addresses.
@@ -749,22 +726,24 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) {
        if (i == 0)
                break;
     }
-    if (i != 0) {
-       cs_error(link, RequestIO, i);
+    if (i != 0)
        goto failed;
-    }
 
     /*
      *  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;
 
     /*
      *  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;
 
     /*
      *  Allocate a 32K memory window.  Note that the struct pcmcia_device
@@ -772,14 +751,18 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) {
      *  device needs several windows, you'll need to keep track of
      *  the handles in your private data structure, dev->priv.
      */
-    DEBUG(1, "Setting mem speed of %d\n", mem_speed);
+    dev_dbg(&link->dev, "Setting mem speed of %d\n", mem_speed);
 
     req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_CM|WIN_ENABLE;
     req.Base = 0; req.Size = 0x8000;
     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 = 0x20000; 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;
 
     /* Store base address of the common window frame */
     ramBase = ioremap(req.Base, 0x8000);
@@ -787,7 +770,7 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) {
 
     dev->irq = link->irq.AssignedIRQ;
     dev->base_addr = link->io.BasePort1;
-    SET_NETDEV_DEV(dev, &handle_to_dev(link));
+    SET_NETDEV_DEV(dev, &link->dev);
 
     if (register_netdev(dev) != 0) {
        printk(KERN_DEBUG "netwave_cs: register_netdev() failed\n");
@@ -818,8 +801,6 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) {
           get_uint16(ramBase + NETWAVE_EREG_ARW+2));
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     netwave_release(link);
     return -ENODEV;
@@ -837,7 +818,7 @@ static void netwave_release(struct pcmcia_device *link)
        struct net_device *dev = link->priv;
        netwave_private *priv = netdev_priv(dev);
 
-       DEBUG(0, "netwave_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "netwave_release\n");
 
        pcmcia_disable_device(link);
        if (link->win)
@@ -892,7 +873,7 @@ static void netwave_reset(struct net_device *dev) {
     u_char __iomem *ramBase = priv->ramBase;
     unsigned int iobase = dev->base_addr;
 
-    DEBUG(0, "netwave_reset: Done with hardware reset\n");
+    pr_debug("netwave_reset: Done with hardware reset\n");
 
     priv->timeoutCounter = 0;
 
@@ -988,7 +969,7 @@ static int netwave_hw_xmit(unsigned char* data, int len,
 
     dev->stats.tx_bytes += len;
 
-    DEBUG(3, "Transmitting with SPCQ %x SPU %x LIF %x ISPLQ %x\n",
+    pr_debug("Transmitting with SPCQ %x SPU %x LIF %x ISPLQ %x\n",
          readb(ramBase + NETWAVE_EREG_SPCQ),
          readb(ramBase + NETWAVE_EREG_SPU),
          readb(ramBase + NETWAVE_EREG_LIF),
@@ -1000,7 +981,7 @@ static int netwave_hw_xmit(unsigned char* data, int len,
     MaxData    = get_uint16(ramBase + NETWAVE_EREG_TDP+2);
     DataOffset = get_uint16(ramBase + NETWAVE_EREG_TDP+4);
        
-    DEBUG(3, "TxFreeList %x, MaxData %x, DataOffset %x\n",
+    pr_debug("TxFreeList %x, MaxData %x, DataOffset %x\n",
          TxFreeList, MaxData, DataOffset);
 
     /* Copy packet to the adapter fragment buffers */
@@ -1088,7 +1069,7 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id)
         status = inb(iobase + NETWAVE_REG_ASR);
                
        if (!pcmcia_dev_present(link)) {
-           DEBUG(1, "netwave_interrupt: Interrupt with status 0x%x "
+           pr_debug("netwave_interrupt: Interrupt with status 0x%x "
                  "from removed or suspended card!\n", status);
            break;
        }
@@ -1132,7 +1113,7 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id)
            int txStatus;
 
            txStatus = readb(ramBase + NETWAVE_EREG_TSER);
-           DEBUG(3, "Transmit done. TSER = %x id %x\n", 
+           pr_debug("Transmit done. TSER = %x id %x\n",
                  txStatus, readb(ramBase + NETWAVE_EREG_TSER + 1));
            
            if (txStatus & 0x20) {
@@ -1156,7 +1137,7 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id)
                 *      TxGU and TxNOAP is set. (Those are the only ones
                 *      to set TxErr).
                 */
-               DEBUG(3, "netwave_interrupt: TxDN with error status %x\n", 
+               pr_debug("netwave_interrupt: TxDN with error status %x\n",
                      txStatus);
                
                /* Clear out TxGU, TxNOAP, TxErr and TxTrys */
@@ -1164,7 +1145,7 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id)
                writeb(0xdf & txStatus, ramBase+NETWAVE_EREG_TSER+4);
                ++dev->stats.tx_errors;
            }
-           DEBUG(3, "New status is TSER %x ASR %x\n",
+           pr_debug("New status is TSER %x ASR %x\n",
                  readb(ramBase + NETWAVE_EREG_TSER),
                  inb(iobase + NETWAVE_REG_ASR));
 
@@ -1172,7 +1153,7 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id)
        }
        /* TxBA, this would trigger on all error packets received */
        /* if (status & 0x01) {
-          DEBUG(4, "Transmit buffers available, %x\n", status);
+          pr_debug("Transmit buffers available, %x\n", status);
           }
           */
     }
@@ -1190,7 +1171,7 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id)
  */
 static void netwave_watchdog(struct net_device *dev) {
 
-    DEBUG(1, "%s: netwave_watchdog: watchdog timer expired\n", dev->name);
+    pr_debug("%s: netwave_watchdog: watchdog timer expired\n", dev->name);
     netwave_reset(dev);
     dev->trans_start = jiffies;
     netif_wake_queue(dev);
@@ -1211,7 +1192,7 @@ static int netwave_rx(struct net_device *dev)
     int i;
     u_char *ptr;
        
-    DEBUG(3, "xinw_rx: Receiving ... \n");
+    pr_debug("xinw_rx: Receiving ... \n");
 
     /* Receive max 10 packets for now. */
     for (i = 0; i < 10; i++) {
@@ -1237,7 +1218,7 @@ static int netwave_rx(struct net_device *dev)
                
        skb = dev_alloc_skb(rcvLen+5);
        if (skb == NULL) {
-           DEBUG(1, "netwave_rx: Could not allocate an sk_buff of "
+           pr_debug("netwave_rx: Could not allocate an sk_buff of "
                  "length %d\n", rcvLen);
            ++dev->stats.rx_dropped;
            /* Tell the adapter to skip the packet */
@@ -1279,7 +1260,7 @@ static int netwave_rx(struct net_device *dev)
        wait_WOC(iobase);
        writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0);
        writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1);
-       DEBUG(3, "Packet reception ok\n");
+       pr_debug("Packet reception ok\n");
     }
     return 0;
 }
@@ -1288,7 +1269,7 @@ static int netwave_open(struct net_device *dev) {
     netwave_private *priv = netdev_priv(dev);
     struct pcmcia_device *link = priv->p_dev;
 
-    DEBUG(1, "netwave_open: starting.\n");
+    dev_dbg(&link->dev, "netwave_open: starting.\n");
     
     if (!pcmcia_dev_present(link))
        return -ENODEV;
@@ -1305,7 +1286,7 @@ static int netwave_close(struct net_device *dev) {
     netwave_private *priv = netdev_priv(dev);
     struct pcmcia_device *link = priv->p_dev;
 
-    DEBUG(1, "netwave_close: finishing.\n");
+    dev_dbg(&link->dev, "netwave_close: finishing.\n");
 
     link->open--;
     netif_stop_queue(dev);
@@ -1358,11 +1339,11 @@ static void set_multicast_list(struct net_device *dev)
     u_char  rcvMode = 0;
    
 #ifdef PCMCIA_DEBUG
-    if (pc_debug > 2) {
-       static int old;
+    {
+       xstatic int old;
        if (old != dev->mc_count) {
            old = dev->mc_count;
-           DEBUG(0, "%s: setting Rx mode to %d addresses.\n",
+           pr_debug("%s: setting Rx mode to %d addresses.\n",
                  dev->name, dev->mc_count);
        }
     }
index 38c1c9d2abb85dd43b6f7627699f5af135fd1a53..f27bb8367c983e2efc3019223b2d52d835394cd3 100644 (file)
@@ -109,7 +109,7 @@ orinoco_cs_probe(struct pcmcia_device *link)
        struct orinoco_private *priv;
        struct orinoco_pccard *card;
 
-       priv = alloc_orinocodev(sizeof(*card), &handle_to_dev(link),
+       priv = alloc_orinocodev(sizeof(*card), &link->dev,
                                orinoco_cs_hard_reset, NULL);
        if (!priv)
                return -ENOMEM;
@@ -120,10 +120,8 @@ orinoco_cs_probe(struct pcmcia_device *link)
        link->priv = priv;
 
        /* Interrupt setup */
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
        link->irq.Handler = orinoco_interrupt;
-       link->irq.Instance = priv;
 
        /* General socket configuration defaults can go here.  In this
         * client, we assume very little, and rely on the CIS for
@@ -160,12 +158,6 @@ static void orinoco_cs_detach(struct pcmcia_device *link)
  * device available to the system.
  */
 
-#define CS_CHECK(fn, ret) do { \
-       last_fn = (fn); \
-       if ((last_ret = (ret)) != 0) \
-               goto cs_failed; \
-} while (0)
-
 static int orinoco_cs_config_check(struct pcmcia_device *p_dev,
                                   cistpl_cftable_entry_t *cfg,
                                   cistpl_cftable_entry_t *dflt,
@@ -240,7 +232,7 @@ orinoco_cs_config(struct pcmcia_device *link)
        struct orinoco_private *priv = link->priv;
        struct orinoco_pccard *card = priv->card;
        hermes_t *hw = &priv->hw;
-       int last_fn, last_ret;
+       int ret;
        void __iomem *mem;
 
        /*
@@ -257,13 +249,12 @@ orinoco_cs_config(struct pcmcia_device *link)
         * and most client drivers will only use the CIS to fill in
         * implementation-defined details.
         */
-       last_ret = pcmcia_loop_config(link, orinoco_cs_config_check, NULL);
-       if (last_ret) {
+       ret = pcmcia_loop_config(link, orinoco_cs_config_check, NULL);
+       if (ret) {
                if (!ignore_cis_vcc)
                        printk(KERN_ERR PFX "GetNextTuple(): No matching "
                               "CIS configuration.  Maybe you need the "
                               "ignore_cis_vcc=1 parameter.\n");
-               cs_error(link, RequestIO, last_ret);
                goto failed;
        }
 
@@ -272,14 +263,16 @@ orinoco_cs_config(struct pcmcia_device *link)
         * a handler to the interrupt, unless the 'Handler' member of
         * the irq structure is initialized.
         */
-       CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
+       ret = pcmcia_request_irq(link, &link->irq);
+       if (ret)
+               goto failed;
 
        /* We initialize the hermes structure before completing PCMCIA
         * configuration just in case the interrupt handler gets
         * called. */
        mem = ioport_map(link->io.BasePort1, link->io.NumPorts1);
        if (!mem)
-               goto cs_failed;
+               goto failed;
 
        hermes_struct_init(hw, mem, HERMES_16BIT_REGSPACING);
 
@@ -288,8 +281,9 @@ orinoco_cs_config(struct pcmcia_device *link)
         * the I/O windows and the interrupt mapping, and putting the
         * card and host interface into "Memory and IO" mode.
         */
-       CS_CHECK(RequestConfiguration,
-                pcmcia_request_configuration(link, &link->conf));
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        /* Ok, we have the configuration, prepare to register the netdev */
        card->node.major = card->node.minor = 0;
@@ -315,9 +309,6 @@ orinoco_cs_config(struct pcmcia_device *link)
                                       * net_device has been registered */
        return 0;
 
- cs_failed:
-       cs_error(link, last_fn, last_ret);
-
  failed:
        orinoco_cs_release(link);
        return -ENODEV;
index c361310b885d83b0fb076fc0cdfd2f0cfa5bb15a..59bda240fdc228712490e6dfe7a0bea1d0b4c3f4 100644 (file)
@@ -73,9 +73,6 @@ static void spectrum_cs_release(struct pcmcia_device *link);
 #define HCR_MEM16      0x10    /* memory width bit, should be preserved */
 
 
-#define CS_CHECK(fn, ret) \
-  do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 /*
  * Reset the card using configuration registers COR and CCSR.
  * If IDLE is 1, stop the firmware, so that it can be safely rewritten.
@@ -83,7 +80,7 @@ static void spectrum_cs_release(struct pcmcia_device *link);
 static int
 spectrum_reset(struct pcmcia_device *link, int idle)
 {
-       int last_ret, last_fn;
+       int ret;
        conf_reg_t reg;
        u_int save_cor;
 
@@ -95,23 +92,26 @@ spectrum_reset(struct pcmcia_device *link, int idle)
        reg.Function = 0;
        reg.Action = CS_READ;
        reg.Offset = CISREG_COR;
-       CS_CHECK(AccessConfigurationRegister,
-                pcmcia_access_configuration_register(link, &reg));
+       ret = pcmcia_access_configuration_register(link, &reg);
+       if (ret)
+               goto failed;
        save_cor = reg.Value;
 
        /* Soft-Reset card */
        reg.Action = CS_WRITE;
        reg.Offset = CISREG_COR;
        reg.Value = (save_cor | COR_SOFT_RESET);
-       CS_CHECK(AccessConfigurationRegister,
-                pcmcia_access_configuration_register(link, &reg));
+       ret = pcmcia_access_configuration_register(link, &reg);
+       if (ret)
+               goto failed;
        udelay(1000);
 
        /* Read CCSR */
        reg.Action = CS_READ;
        reg.Offset = CISREG_CCSR;
-       CS_CHECK(AccessConfigurationRegister,
-                pcmcia_access_configuration_register(link, &reg));
+       ret = pcmcia_access_configuration_register(link, &reg);
+       if (ret)
+               goto failed;
 
        /*
         * Start or stop the firmware.  Memory width bit should be
@@ -120,21 +120,22 @@ spectrum_reset(struct pcmcia_device *link, int idle)
        reg.Action = CS_WRITE;
        reg.Offset = CISREG_CCSR;
        reg.Value = (idle ? HCR_IDLE : HCR_RUN) | (reg.Value & HCR_MEM16);
-       CS_CHECK(AccessConfigurationRegister,
-                pcmcia_access_configuration_register(link, &reg));
+       ret = pcmcia_access_configuration_register(link, &reg);
+       if (ret)
+               goto failed;
        udelay(1000);
 
        /* Restore original COR configuration index */
        reg.Action = CS_WRITE;
        reg.Offset = CISREG_COR;
        reg.Value = (save_cor & ~COR_SOFT_RESET);
-       CS_CHECK(AccessConfigurationRegister,
-                pcmcia_access_configuration_register(link, &reg));
+       ret = pcmcia_access_configuration_register(link, &reg);
+       if (ret)
+               goto failed;
        udelay(1000);
        return 0;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
+failed:
        return -ENODEV;
 }
 
@@ -181,7 +182,7 @@ spectrum_cs_probe(struct pcmcia_device *link)
        struct orinoco_private *priv;
        struct orinoco_pccard *card;
 
-       priv = alloc_orinocodev(sizeof(*card), &handle_to_dev(link),
+       priv = alloc_orinocodev(sizeof(*card), &link->dev,
                                spectrum_cs_hard_reset,
                                spectrum_cs_stop_firmware);
        if (!priv)
@@ -193,10 +194,8 @@ spectrum_cs_probe(struct pcmcia_device *link)
        link->priv = priv;
 
        /* Interrupt setup */
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
        link->irq.Handler = orinoco_interrupt;
-       link->irq.Instance = priv;
 
        /* General socket configuration defaults can go here.  In this
         * client, we assume very little, and rely on the CIS for
@@ -307,7 +306,7 @@ spectrum_cs_config(struct pcmcia_device *link)
        struct orinoco_private *priv = link->priv;
        struct orinoco_pccard *card = priv->card;
        hermes_t *hw = &priv->hw;
-       int last_fn, last_ret;
+       int ret;
        void __iomem *mem;
 
        /*
@@ -324,13 +323,12 @@ spectrum_cs_config(struct pcmcia_device *link)
         * and most client drivers will only use the CIS to fill in
         * implementation-defined details.
         */
-       last_ret = pcmcia_loop_config(link, spectrum_cs_config_check, NULL);
-       if (last_ret) {
+       ret = pcmcia_loop_config(link, spectrum_cs_config_check, NULL);
+       if (ret) {
                if (!ignore_cis_vcc)
                        printk(KERN_ERR PFX "GetNextTuple(): No matching "
                               "CIS configuration.  Maybe you need the "
                               "ignore_cis_vcc=1 parameter.\n");
-               cs_error(link, RequestIO, last_ret);
                goto failed;
        }
 
@@ -339,14 +337,16 @@ spectrum_cs_config(struct pcmcia_device *link)
         * a handler to the interrupt, unless the 'Handler' member of
         * the irq structure is initialized.
         */
-       CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
+       ret = pcmcia_request_irq(link, &link->irq);
+       if (ret)
+               goto failed;
 
        /* We initialize the hermes structure before completing PCMCIA
         * configuration just in case the interrupt handler gets
         * called. */
        mem = ioport_map(link->io.BasePort1, link->io.NumPorts1);
        if (!mem)
-               goto cs_failed;
+               goto failed;
 
        hermes_struct_init(hw, mem, HERMES_16BIT_REGSPACING);
 
@@ -355,8 +355,9 @@ spectrum_cs_config(struct pcmcia_device *link)
         * the I/O windows and the interrupt mapping, and putting the
         * card and host interface into "Memory and IO" mode.
         */
-       CS_CHECK(RequestConfiguration,
-                pcmcia_request_configuration(link, &link->conf));
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        /* Ok, we have the configuration, prepare to register the netdev */
        card->node.major = card->node.minor = 0;
@@ -386,9 +387,6 @@ spectrum_cs_config(struct pcmcia_device *link)
                                       * net_device has been registered */
        return 0;
 
- cs_failed:
-       cs_error(link, last_fn, last_ret);
-
  failed:
        spectrum_cs_release(link);
        return -ENODEV;
index 1c88c2ea59aa4e605fc738f8adde1e2d01ea26cb..5b8e3e4cdd9f15a2cf0d278f73eb666ae338173d 100644 (file)
@@ -71,25 +71,7 @@ typedef u_char mac_addr[ETH_ALEN];   /* Hardware address */
 #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 @@ static int ray_probe(struct pcmcia_device *p_dev)
        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));
@@ -341,8 +323,7 @@ static int ray_probe(struct pcmcia_device *p_dev)
        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 */
@@ -351,13 +332,12 @@ static int ray_probe(struct pcmcia_device *p_dev)
        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 */
@@ -370,7 +350,7 @@ static int ray_probe(struct pcmcia_device *p_dev)
 #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 @@ static void ray_detach(struct pcmcia_device *link)
        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;
@@ -408,7 +388,7 @@ static void ray_detach(struct pcmcia_device *link)
                        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 */
 
 /*=============================================================================
@@ -416,19 +396,17 @@ static void ray_detach(struct pcmcia_device *link)
     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",
@@ -440,14 +418,17 @@ static int ray_config(struct pcmcia_device *link)
        /* 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 =
@@ -455,10 +436,14 @@ static int ray_config(struct pcmcia_device *link)
        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) ***************/
@@ -467,11 +452,14 @@ static int ray_config(struct pcmcia_device *link)
        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 ***********************************/
@@ -480,22 +468,25 @@ static int ray_config(struct pcmcia_device *link)
        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");
@@ -511,9 +502,7 @@ static int ray_config(struct pcmcia_device *link)
 
        return 0;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
-
+failed:
        ray_release(link);
        return -ENODEV;
 } /* ray_config */
@@ -543,9 +532,9 @@ static int ray_init(struct net_device *dev)
        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;
        }
 
@@ -567,13 +556,13 @@ static int ray_init(struct net_device *dev)
        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++) {
@@ -592,7 +581,7 @@ static int ray_init(struct net_device *dev)
 
        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 @@ static int dl_startup_params(struct net_device *dev)
        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;
        }
 
@@ -625,7 +614,7 @@ static int dl_startup_params(struct net_device *dev)
        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)) {
@@ -641,7 +630,7 @@ static int dl_startup_params(struct net_device *dev)
        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 @@ static void verify_dl_startup(u_long data)
        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 @@ 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 */
@@ -771,7 +760,7 @@ static void start_net(u_long data)
        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 @@ 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 */
@@ -802,7 +791,7 @@ static void join_net(u_long data)
        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 @@ static void ray_release(struct pcmcia_device *link)
        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);
 
@@ -829,15 +818,15 @@ static void ray_release(struct pcmcia_device *link)
        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 @@ static int ray_dev_init(struct net_device *dev)
        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
@@ -887,7 +876,7 @@ static int ray_dev_init(struct net_device *dev)
        /* 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 */
@@ -896,7 +885,7 @@ static int ray_dev_init(struct net_device *dev)
        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 @@ static int ray_dev_config(struct net_device *dev, struct ifmap *map)
        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 @@ static netdev_tx_t ray_dev_start_xmit(struct sk_buff *skb,
        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 @@ static int ray_hw_xmit(unsigned char *data, int len, struct net_device *dev,
        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);
@@ -979,9 +968,9 @@ static int ray_hw_xmit(unsigned char *data, int len, struct net_device *dev,
        }
        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;
@@ -1018,12 +1007,12 @@ static int ray_hw_xmit(unsigned char *data, int len, struct net_device *dev,
        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 @@ static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx,
 {
        __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),
@@ -1056,9 +1045,9 @@ static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx,
                            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 @@ static int ray_open(struct net_device *dev)
        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;
@@ -1613,7 +1602,7 @@ static int ray_open(struct net_device *dev)
        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) {
@@ -1629,7 +1618,7 @@ static int ray_open(struct net_device *dev)
        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 @@ static int ray_dev_close(struct net_device *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);
@@ -1656,7 +1645,7 @@ static int ray_dev_close(struct net_device *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 @@ static int interrupt_ecf(ray_dev_t *local, int ccs)
        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 @@ static int get_free_tx_ccs(ray_dev_t *local)
        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;
        }
 
@@ -1716,7 +1705,7 @@ static int get_free_tx_ccs(ray_dev_t *local)
                }
        }
        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 @@ static int get_free_ccs(ray_dev_t *local)
        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;
        }
 
@@ -1747,7 +1736,7 @@ static int get_free_ccs(ray_dev_t *local)
                }
        }
        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 @@ static struct net_device_stats *ray_get_stats(struct net_device *dev)
        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 @@ static void ray_update_parm(struct net_device *dev, UCHAR objid, UCHAR *value,
        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;
@@ -1874,7 +1863,7 @@ static void ray_update_parm(struct net_device *dev, UCHAR objid, UCHAR *value,
        }
        /* 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 @@ static void ray_update_multi_list(struct net_device *dev, int all)
        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;
@@ -1910,7 +1899,7 @@ static void ray_update_multi_list(struct net_device *dev, int all)
                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],
@@ -1921,12 +1910,12 @@ static void ray_update_multi_list(struct net_device *dev, int all)
                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 @@ static void set_multicast_list(struct net_device *dev)
        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,
@@ -1950,7 +1939,7 @@ static void set_multicast_list(struct net_device *dev)
                }
        } 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 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
        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;
        }
@@ -2008,33 +1997,33 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
                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:
@@ -2043,11 +2032,11 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
                                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);
                                }
@@ -2075,12 +2064,12 @@ static irqreturn_t ray_interrupt(int irq, void *dev_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;
@@ -2091,19 +2080,19 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
                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)
@@ -2111,21 +2100,21 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
                        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);
                }
@@ -2139,7 +2128,7 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
                        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) {
@@ -2149,7 +2138,7 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
                                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],
@@ -2159,15 +2148,15 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
                        }
                        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 @@ static void ray_rx(struct net_device *dev, ray_dev_t *local,
        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)
@@ -2199,28 +2188,28 @@ static void ray_rx(struct net_device *dev, ray_dev_t *local,
        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);
 
@@ -2233,7 +2222,7 @@ static void ray_rx(struct net_device *dev, ray_dev_t *local,
                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 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *prcs,
                            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;
@@ -2273,17 +2262,17 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *prcs,
                            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;
@@ -2301,7 +2290,7 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *prcs,
                } 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);
@@ -2313,7 +2302,7 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *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);
@@ -2321,7 +2310,7 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *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);
 
 /************************/
@@ -2354,7 +2343,7 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *prcs,
        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 @@ static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len)
        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);
@@ -2441,7 +2430,7 @@ static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len)
 
        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;
@@ -2450,7 +2439,7 @@ static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len)
        } 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);
@@ -2459,14 +2448,14 @@ static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len)
                        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);
@@ -2482,12 +2471,12 @@ static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len)
        }
 /* 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 @@ static void release_frag_chain(ray_dev_t *local, struct rcs __iomem *prcs)
        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;
                }
@@ -2543,9 +2532,9 @@ static void release_frag_chain(ray_dev_t *local, struct rcs __iomem *prcs)
 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 @@ static void rx_authenticate(ray_dev_t *local, struct rcs __iomem *prcs,
        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;
@@ -2591,13 +2580,13 @@ static void rx_authenticate(ray_dev_t *local, struct rcs __iomem *prcs,
                        /* 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 @@ 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 @@ static void rx_deauthenticate(ray_dev_t *local, struct rcs __iomem *prcs,
 /*  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 @@ static int build_auth_frame(ray_dev_t *local, UCHAR *dest, int auth_type)
 
        /* 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;
        }
 
@@ -2855,7 +2844,7 @@ static int build_auth_frame(ray_dev_t *local, UCHAR *dest, int auth_type)
 
        /* 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;
@@ -2942,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
@@ -2964,7 +2953,7 @@ static int __init init_ray_cs(void)
 
 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);
index 431a20ec6db6d9e39674f93c658a9239bc45a9b6..33918fd5b2311180ee53bac82b26be933c1459ce 100644 (file)
@@ -3656,10 +3656,7 @@ wv_pcmcia_reset(struct net_device *      dev)
 
   i = pcmcia_access_configuration_register(link, &reg);
   if (i != 0)
-    {
-      cs_error(link, AccessConfigurationRegister, i);
       return FALSE;
-    }
       
 #ifdef DEBUG_CONFIG_INFO
   printk(KERN_DEBUG "%s: wavelan_pcmcia_reset(): Config reg is 0x%x\n",
@@ -3670,19 +3667,13 @@ wv_pcmcia_reset(struct net_device *     dev)
   reg.Value = reg.Value | COR_SW_RESET;
   i = pcmcia_access_configuration_register(link, &reg);
   if (i != 0)
-    {
-      cs_error(link, AccessConfigurationRegister, i);
       return FALSE;
-    }
       
   reg.Action = CS_WRITE;
   reg.Value = COR_LEVEL_IRQ | COR_CONFIG;
   i = pcmcia_access_configuration_register(link, &reg);
   if (i != 0)
-    {
-      cs_error(link, AccessConfigurationRegister, i);
       return FALSE;
-    }
 
 #ifdef DEBUG_CONFIG_TRACE
   printk(KERN_DEBUG "%s: <-wv_pcmcia_reset()\n", dev->name);
@@ -3857,10 +3848,7 @@ wv_pcmcia_config(struct pcmcia_device *  link)
     {
       i = pcmcia_request_io(link, &link->io);
       if (i != 0)
-       {
-         cs_error(link, RequestIO, i);
          break;
-       }
 
       /*
        * Now allocate an interrupt line.  Note that this does not
@@ -3868,10 +3856,7 @@ wv_pcmcia_config(struct pcmcia_device *  link)
        */
       i = pcmcia_request_irq(link, &link->irq);
       if (i != 0)
-       {
-         cs_error(link, RequestIRQ, i);
          break;
-       }
 
       /*
        * This actually configures the PCMCIA socket -- setting up
@@ -3880,10 +3865,7 @@ wv_pcmcia_config(struct pcmcia_device *  link)
       link->conf.ConfigIndex = 1;
       i = pcmcia_request_configuration(link, &link->conf);
       if (i != 0)
-       {
-         cs_error(link, RequestConfiguration, i);
          break;
-       }
 
       /*
        * Allocate a small memory window.  Note that the struct pcmcia_device
@@ -3894,24 +3876,18 @@ wv_pcmcia_config(struct pcmcia_device * link)
       req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;
       req.Base = req.Size = 0;
       req.AccessSpeed = mem_speed;
-      i = pcmcia_request_window(&link, &req, &link->win);
+      i = pcmcia_request_window(link, &req, &link->win);
       if (i != 0)
-       {
-         cs_error(link, RequestWindow, i);
          break;
-       }
 
       lp->mem = ioremap(req.Base, req.Size);
       dev->mem_start = (u_long)lp->mem;
       dev->mem_end = dev->mem_start + req.Size;
 
       mem.CardOffset = 0; mem.Page = 0;
-      i = pcmcia_map_mem_page(link->win, &mem);
+      i = pcmcia_map_mem_page(link, link->win, &mem);
       if (i != 0)
-       {
-         cs_error(link, MapMemPage, i);
          break;
-       }
 
       /* Feed device with this info... */
       dev->irq = link->irq.AssignedIRQ;
@@ -3923,7 +3899,7 @@ wv_pcmcia_config(struct pcmcia_device *   link)
             lp->mem, dev->irq, (u_int) dev->base_addr);
 #endif
 
-      SET_NETDEV_DEV(dev, &handle_to_dev(link));
+      SET_NETDEV_DEV(dev, &link->dev);
       i = register_netdev(dev);
       if(i != 0)
        {
@@ -4462,8 +4438,7 @@ wavelan_probe(struct pcmcia_device *p_dev)
   p_dev->io.IOAddrLines = 3;
 
   /* Interrupt setup */
-  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 = wavelan_interrupt;
 
   /* General socket configuration */
@@ -4475,7 +4450,7 @@ wavelan_probe(struct pcmcia_device *p_dev)
   if (!dev)
       return -ENOMEM;
 
-  p_dev->priv = p_dev->irq.Instance = dev;
+  p_dev->priv = dev;
 
   lp = netdev_priv(dev);
 
index 4f1e0cfe609ba5dec34f73364994b294bdfd3a8a..5f0401a52cff4e0ea60688ee5a7230ec6d23d229 100644 (file)
 /* For rough constant delay */
 #define WL3501_NOPLOOP(n) { int x = 0; while (x++ < n) slow_down_io(); }
 
-/*
- * 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.
- */
-#define PCMCIA_DEBUG 0
-#ifdef PCMCIA_DEBUG
-static int pc_debug = PCMCIA_DEBUG;
-module_param(pc_debug, int, 0);
-#define dprintk(n, format, args...) \
-       { if (pc_debug > (n)) \
-               printk(KERN_INFO "%s: " format "\n", __func__ , ##args); }
-#else
-#define dprintk(n, format, args...)
-#endif
+
 
 #define wl3501_outb(a, b) { outb(a, b); slow_down_io(); }
 #define wl3501_outb_p(a, b) { outb_p(a, b); slow_down_io(); }
@@ -684,10 +668,10 @@ static void wl3501_mgmt_scan_confirm(struct wl3501_card *this, u16 addr)
        int matchflag = 0;
        struct wl3501_scan_confirm sig;
 
-       dprintk(3, "entry");
+       pr_debug("entry");
        wl3501_get_from_wla(this, addr, &sig, sizeof(sig));
        if (sig.status == WL3501_STATUS_SUCCESS) {
-               dprintk(3, "success");
+               pr_debug("success");
                if ((this->net_type == IW_MODE_INFRA &&
                     (sig.cap_info & WL3501_MGMT_CAPABILITY_ESS)) ||
                    (this->net_type == IW_MODE_ADHOC &&
@@ -722,7 +706,7 @@ static void wl3501_mgmt_scan_confirm(struct wl3501_card *this, u16 addr)
                        }
                }
        } else if (sig.status == WL3501_STATUS_TIMEOUT) {
-               dprintk(3, "timeout");
+               pr_debug("timeout");
                this->join_sta_bss = 0;
                for (i = this->join_sta_bss; i < this->bss_cnt; i++)
                        if (!wl3501_mgmt_join(this, i))
@@ -879,7 +863,7 @@ static int wl3501_mgmt_auth(struct wl3501_card *this)
                .timeout = 1000,
        };
 
-       dprintk(3, "entry");
+       pr_debug("entry");
        memcpy(sig.mac_addr, this->bssid, ETH_ALEN);
        return wl3501_esbq_exec(this, &sig, sizeof(sig));
 }
@@ -893,7 +877,7 @@ static int wl3501_mgmt_association(struct wl3501_card *this)
                .cap_info        = this->cap_info,
        };
 
-       dprintk(3, "entry");
+       pr_debug("entry");
        memcpy(sig.mac_addr, this->bssid, ETH_ALEN);
        return wl3501_esbq_exec(this, &sig, sizeof(sig));
 }
@@ -903,7 +887,7 @@ static void wl3501_mgmt_join_confirm(struct net_device *dev, u16 addr)
        struct wl3501_card *this = netdev_priv(dev);
        struct wl3501_join_confirm sig;
 
-       dprintk(3, "entry");
+       pr_debug("entry");
        wl3501_get_from_wla(this, addr, &sig, sizeof(sig));
        if (sig.status == WL3501_STATUS_SUCCESS) {
                if (this->net_type == IW_MODE_INFRA) {
@@ -962,7 +946,7 @@ static inline void wl3501_md_confirm_interrupt(struct net_device *dev,
 {
        struct wl3501_md_confirm sig;
 
-       dprintk(3, "entry");
+       pr_debug("entry");
        wl3501_get_from_wla(this, addr, &sig, sizeof(sig));
        wl3501_free_tx_buffer(this, sig.data);
        if (netif_queue_stopped(dev))
@@ -1017,7 +1001,7 @@ static inline void wl3501_md_ind_interrupt(struct net_device *dev,
 static inline void wl3501_get_confirm_interrupt(struct wl3501_card *this,
                                                u16 addr, void *sig, int size)
 {
-       dprintk(3, "entry");
+       pr_debug("entry");
        wl3501_get_from_wla(this, addr, &this->sig_get_confirm,
                            sizeof(this->sig_get_confirm));
        wake_up(&this->wait);
@@ -1029,7 +1013,7 @@ static inline void wl3501_start_confirm_interrupt(struct net_device *dev,
 {
        struct wl3501_start_confirm sig;
 
-       dprintk(3, "entry");
+       pr_debug("entry");
        wl3501_get_from_wla(this, addr, &sig, sizeof(sig));
        if (sig.status == WL3501_STATUS_SUCCESS)
                netif_wake_queue(dev);
@@ -1041,7 +1025,7 @@ static inline void wl3501_assoc_confirm_interrupt(struct net_device *dev,
        struct wl3501_card *this = netdev_priv(dev);
        struct wl3501_assoc_confirm sig;
 
-       dprintk(3, "entry");
+       pr_debug("entry");
        wl3501_get_from_wla(this, addr, &sig, sizeof(sig));
 
        if (sig.status == WL3501_STATUS_SUCCESS)
@@ -1053,7 +1037,7 @@ static inline void wl3501_auth_confirm_interrupt(struct wl3501_card *this,
 {
        struct wl3501_auth_confirm sig;
 
-       dprintk(3, "entry");
+       pr_debug("entry");
        wl3501_get_from_wla(this, addr, &sig, sizeof(sig));
 
        if (sig.status == WL3501_STATUS_SUCCESS)
@@ -1069,7 +1053,7 @@ static inline void wl3501_rx_interrupt(struct net_device *dev)
        u8 sig_id;
        struct wl3501_card *this = netdev_priv(dev);
 
-       dprintk(3, "entry");
+       pr_debug("entry");
 loop:
        morepkts = 0;
        if (!wl3501_esbq_confirm(this))
@@ -1302,7 +1286,7 @@ static int wl3501_reset(struct net_device *dev)
        wl3501_ack_interrupt(this);
        wl3501_unblock_interrupt(this);
        wl3501_mgmt_scan(this, 100);
-       dprintk(1, "%s: device reset", dev->name);
+       pr_debug("%s: device reset", dev->name);
        rc = 0;
 out:
        return rc;
@@ -1376,7 +1360,7 @@ static int wl3501_open(struct net_device *dev)
        link->open++;
 
        /* Initial WL3501 firmware */
-       dprintk(1, "%s: Initialize WL3501 firmware...", dev->name);
+       pr_debug("%s: Initialize WL3501 firmware...", dev->name);
        if (wl3501_init_firmware(this))
                goto fail;
        /* Initial device variables */
@@ -1388,7 +1372,7 @@ static int wl3501_open(struct net_device *dev)
        wl3501_unblock_interrupt(this);
        wl3501_mgmt_scan(this, 100);
        rc = 0;
-       dprintk(1, "%s: WL3501 opened", dev->name);
+       pr_debug("%s: WL3501 opened", dev->name);
        printk(KERN_INFO "%s: Card Name: %s\n"
                         "%s: Firmware Date: %s\n",
                         dev->name, this->card_name,
@@ -1914,8 +1898,7 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
        p_dev->io.IOAddrLines   = 5;
 
        /* Interrupt setup */
-       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 = wl3501_interrupt;
 
        /* General socket configuration */
@@ -1938,16 +1921,13 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
        dev->wireless_handlers  = &wl3501_handler_def;
        SET_ETHTOOL_OPS(dev, &ops);
        netif_stop_queue(dev);
-       p_dev->priv = p_dev->irq.Instance = dev;
+       p_dev->priv = dev;
 
        return wl3501_config(p_dev);
 out_link:
        return -ENOMEM;
 }
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 /**
  * wl3501_config - configure the PCMCIA socket and make eth device available
  * @link - FILL_IN
@@ -1959,7 +1939,7 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
 static int wl3501_config(struct pcmcia_device *link)
 {
        struct net_device *dev = link->priv;
-       int i = 0, j, last_fn, last_ret;
+       int i = 0, j, ret;
        struct wl3501_card *this;
 
        /* Try allocating IO ports.  This tries a few fixed addresses.  If you
@@ -1975,24 +1955,26 @@ static int wl3501_config(struct pcmcia_device *link)
                if (i == 0)
                        break;
        }
-       if (i != 0) {
-               cs_error(link, RequestIO, i);
+       if (i != 0)
                goto failed;
-       }
 
        /* 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;
 
        /* 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;
 
        dev->irq = link->irq.AssignedIRQ;
        dev->base_addr = link->io.BasePort1;
-       SET_NETDEV_DEV(dev, &handle_to_dev(link));
+       SET_NETDEV_DEV(dev, &link->dev);
        if (register_netdev(dev)) {
                printk(KERN_NOTICE "wl3501_cs: register_netdev() failed\n");
                goto failed;
@@ -2041,8 +2023,6 @@ static int wl3501_config(struct pcmcia_device *link)
        netif_start_queue(dev);
        return 0;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
 failed:
        wl3501_release(link);
        return -ENODEV;
index 8fdfa4f537a6ec9b4e189641f61130163c7dfa5c..7dd370fa343934904c0f7b349a532a8a03d4e642 100644 (file)
@@ -67,14 +67,6 @@ MODULE_LICENSE("Dual MPL/GPL");
 
 INT_MODULE_PARM(epp_mode, 1);
 
-#ifdef PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
-static char *version =
-"parport_cs.c 1.29 2002/10/11 06:57:41 (David Hinds)";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -103,7 +95,7 @@ static int parport_probe(struct pcmcia_device *link)
 {
     parport_info_t *info;
 
-    DEBUG(0, "parport_attach()\n");
+    dev_dbg(&link->dev, "parport_attach()\n");
 
     /* Create new parport device */
     info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -114,7 +106,6 @@ static int parport_probe(struct pcmcia_device *link)
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
     link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
     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;
 
@@ -132,7 +123,7 @@ static int parport_probe(struct pcmcia_device *link)
 
 static void parport_detach(struct pcmcia_device *link)
 {
-    DEBUG(0, "parport_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "parport_detach\n");
 
     parport_cs_release(link);
 
@@ -147,9 +138,6 @@ static void parport_detach(struct pcmcia_device *link)
 
 ======================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int parport_config_check(struct pcmcia_device *p_dev,
                                cistpl_cftable_entry_t *cfg,
                                cistpl_cftable_entry_t *dflt,
@@ -178,18 +166,20 @@ static int parport_config(struct pcmcia_device *link)
 {
     parport_info_t *info = link->priv;
     struct parport *p;
-    int last_ret, last_fn;
+    int ret;
 
-    DEBUG(0, "parport_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "parport_config\n");
 
-    last_ret = pcmcia_loop_config(link, parport_config_check, NULL);
-    if (last_ret) {
-           cs_error(link, RequestIO, last_ret);
+    ret = pcmcia_loop_config(link, parport_config_check, NULL);
+    if (ret)
            goto failed;
-    }
 
-    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_irq(link, &link->irq);
+    if (ret)
+           goto failed;
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
 
     p = parport_pc_probe_port(link->io.BasePort1, link->io.BasePort2,
                              link->irq.AssignedIRQ, PARPORT_DMA_NONE,
@@ -213,8 +203,6 @@ static int parport_config(struct pcmcia_device *link)
 
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     parport_cs_release(link);
     return -ENODEV;
@@ -232,7 +220,7 @@ static void parport_cs_release(struct pcmcia_device *link)
 {
        parport_info_t *info = link->priv;
 
-       DEBUG(0, "parport_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "parport_release\n");
 
        if (info->ndev) {
                struct parport *p = info->port;
index 17f38a781d47b5d3a2510da5a2e680e7bf8f2346..f3ccbccf5f21f86690ae1d7b5893678f860d8da0 100644 (file)
@@ -17,24 +17,6 @@ menuconfig PCCARD
 
 if PCCARD
 
-config PCMCIA_DEBUG
-       bool "Enable PCCARD debugging"
-       help
-         Say Y here to enable PCMCIA subsystem debugging.  You
-         will need to choose the debugging level either via the
-         kernel command line, or module options depending whether
-         you build the PCMCIA as modules.
-
-         The kernel command line options are:
-           pcmcia_core.pc_debug=N
-           pcmcia.pc_debug=N
-           sa11xx_core.pc_debug=N
-
-         The module option is called pc_debug=N
-
-         In all the above examples, N is the debugging verbosity
-         level.
-
 config PCMCIA
        tristate "16-bit PCMCIA support"
        select CRC32
@@ -196,9 +178,13 @@ config PCMCIA_BCM63XX
        tristate "bcm63xx pcmcia support"
        depends on BCM63XX && PCMCIA
 
+config PCMCIA_SOC_COMMON
+       bool
+
 config PCMCIA_SA1100
        tristate "SA1100 support"
        depends on ARM && ARCH_SA1100 && PCMCIA
+       select PCMCIA_SOC_COMMON
        help
          Say Y here to include support for SA11x0-based PCMCIA or CF
          sockets, found on HP iPAQs, Yopy, and other StrongARM(R)/
@@ -209,6 +195,7 @@ config PCMCIA_SA1100
 config PCMCIA_SA1111
        tristate "SA1111 support"
        depends on ARM && ARCH_SA1100 && SA1111 && PCMCIA
+       select PCMCIA_SOC_COMMON
        help
          Say Y  here to include support for SA1111-based PCMCIA or CF
          sockets, found on the Jornada 720, Graphicsmaster and other
@@ -222,9 +209,28 @@ config PCMCIA_PXA2XX
        depends on (ARCH_LUBBOCK || MACH_MAINSTONE || PXA_SHARPSL \
                    || MACH_ARMCORE || ARCH_PXA_PALM || TRIZEPS_PCMCIA \
                    || ARCH_VIPER || ARCH_PXA_ESERIES || MACH_STARGATE2)
+       select PCMCIA_SOC_COMMON
        help
          Say Y here to include support for the PXA2xx PCMCIA controller
 
+config PCMCIA_DEBUG
+       bool "Enable debugging"
+       depends on (PCMCIA_SA1111 || PCMCIA_SA1100 || PCMCIA_PXA2XX)
+       help
+         Say Y here to enable debugging for the SoC PCMCIA layer.
+         You will need to choose the debugging level either via the
+         kernel command line, or module options depending whether
+         you build the drivers as modules.
+
+         The kernel command line options are:
+           sa11xx_core.pc_debug=N
+           pxa2xx_core.pc_debug=N
+
+         The module option is called pc_debug=N
+
+         In all the above examples, N is the debugging verbosity
+         level.
+
 config PCMCIA_PROBE
        bool
        default y if ISA && !ARCH_SA1100 && !ARCH_CLPS711X && !PARISC
index a03a38acd77d5a1ed1b34f63a24b03611c67d47f..382938313991a263d77a43c5a03d28516f9939cb 100644 (file)
@@ -22,8 +22,9 @@ obj-$(CONFIG_I82365)                          += i82365.o
 obj-$(CONFIG_I82092)                           += i82092.o
 obj-$(CONFIG_TCIC)                             += tcic.o
 obj-$(CONFIG_PCMCIA_M8XX)                      += m8xx_pcmcia.o
-obj-$(CONFIG_PCMCIA_SA1100)                    += sa11xx_core.o sa1100_cs.o
-obj-$(CONFIG_PCMCIA_SA1111)                    += sa11xx_core.o sa1111_cs.o
+obj-$(CONFIG_PCMCIA_SOC_COMMON)                        += soc_common.o
+obj-$(CONFIG_PCMCIA_SA1100)                    += sa11xx_base.o sa1100_cs.o
+obj-$(CONFIG_PCMCIA_SA1111)                    += sa11xx_base.o sa1111_cs.o
 obj-$(CONFIG_M32R_PCC)                         += m32r_pcc.o
 obj-$(CONFIG_M32R_CFC)                         += m32r_cfc.o
 obj-$(CONFIG_PCMCIA_AU1X00)                    += au1x00_ss.o
@@ -35,9 +36,6 @@ obj-$(CONFIG_BFIN_CFPCMCIA)                   += bfin_cf_pcmcia.o
 obj-$(CONFIG_AT91_CF)                          += at91_cf.o
 obj-$(CONFIG_ELECTRA_CF)                       += electra_cf.o
 
-sa11xx_core-y                                  += soc_common.o sa11xx_base.o
-pxa2xx_core-y                                  += soc_common.o pxa2xx_base.o
-
 au1x00_ss-y                                    += au1000_generic.o
 au1x00_ss-$(CONFIG_MIPS_PB1000)                        += au1000_pb1x00.o
 au1x00_ss-$(CONFIG_MIPS_PB1100)                        += au1000_pb1x00.o
@@ -77,4 +75,4 @@ pxa2xx-obj-$(CONFIG_MACH_PALMLD)              += pxa2xx_palmld.o
 pxa2xx-obj-$(CONFIG_MACH_E740)                 += pxa2xx_e740.o
 pxa2xx-obj-$(CONFIG_MACH_STARGATE2)            += pxa2xx_stargate2.o
 
-obj-$(CONFIG_PCMCIA_PXA2XX)                    += pxa2xx_core.o $(pxa2xx-obj-y)
+obj-$(CONFIG_PCMCIA_PXA2XX)                    += pxa2xx_base.o $(pxa2xx-obj-y)
index db77e1f3309a087a6c93c06d251284981df80311..4cd70d0568109d061d6b716140adc52494cfd062 100644 (file)
@@ -91,7 +91,7 @@ static u_int xlate_rom_addr(void __iomem *b, u_int addr)
 static void cb_release_cis_mem(struct pcmcia_socket * s)
 {
        if (s->cb_cis_virt) {
-               cs_dbg(s, 1, "cb_release_cis_mem()\n");
+               dev_dbg(&s->dev, "cb_release_cis_mem()\n");
                iounmap(s->cb_cis_virt);
                s->cb_cis_virt = NULL;
                s->cb_cis_res = NULL;
@@ -132,7 +132,7 @@ int read_cb_mem(struct pcmcia_socket * s, int space, u_int addr, u_int len, void
        struct pci_dev *dev;
        struct resource *res;
 
-       cs_dbg(s, 3, "read_cb_mem(%d, %#x, %u)\n", space, addr, len);
+       dev_dbg(&s->dev, "read_cb_mem(%d, %#x, %u)\n", space, addr, len);
 
        dev = pci_get_slot(s->cb_dev->subordinate, 0);
        if (!dev)
index ecd4fc7f666f286170251c99943f23ebdf29edce..446a4576e73e6c717d44b5dd954f1f606fd3e414 100644 (file)
 #ifndef _LINUX_CIRRUS_H
 #define _LINUX_CIRRUS_H
 
-#ifndef PCI_VENDOR_ID_CIRRUS
-#define PCI_VENDOR_ID_CIRRUS           0x1013
-#endif
-#ifndef PCI_DEVICE_ID_CIRRUS_6729
-#define PCI_DEVICE_ID_CIRRUS_6729      0x1100
-#endif
-#ifndef PCI_DEVICE_ID_CIRRUS_6832
-#define PCI_DEVICE_ID_CIRRUS_6832      0x1110
-#endif
-
 #define PD67_MISC_CTL_1                0x16    /* Misc control 1 */
 #define PD67_FIFO_CTL          0x17    /* FIFO control */
 #define PD67_MISC_CTL_2                0x1E    /* Misc control 2 */
index 6c4a4fc836309e0af50b0a252de0a964a8291612..8c1b73cf021b2fee37c17f792748f27b0ec5f794 100644 (file)
@@ -138,7 +138,7 @@ int pcmcia_read_cis_mem(struct pcmcia_socket *s, int attr, u_int addr,
     void __iomem *sys, *end;
     unsigned char *buf = ptr;
     
-    cs_dbg(s, 3, "pcmcia_read_cis_mem(%d, %#x, %u)\n", attr, addr, len);
+    dev_dbg(&s->dev, "pcmcia_read_cis_mem(%d, %#x, %u)\n", attr, addr, len);
 
     if (attr & IS_INDIRECT) {
        /* Indirect accesses use a bunch of special registers at fixed
@@ -190,7 +190,7 @@ int pcmcia_read_cis_mem(struct pcmcia_socket *s, int attr, u_int addr,
            addr = 0;
        }
     }
-    cs_dbg(s, 3, "  %#2.2x %#2.2x %#2.2x %#2.2x ...\n",
+    dev_dbg(&s->dev, "  %#2.2x %#2.2x %#2.2x %#2.2x ...\n",
          *(u_char *)(ptr+0), *(u_char *)(ptr+1),
          *(u_char *)(ptr+2), *(u_char *)(ptr+3));
     return 0;
@@ -204,7 +204,7 @@ void pcmcia_write_cis_mem(struct pcmcia_socket *s, int attr, u_int addr,
     void __iomem *sys, *end;
     unsigned char *buf = ptr;
     
-    cs_dbg(s, 3, "pcmcia_write_cis_mem(%d, %#x, %u)\n", attr, addr, len);
+    dev_dbg(&s->dev, "pcmcia_write_cis_mem(%d, %#x, %u)\n", attr, addr, len);
 
     if (attr & IS_INDIRECT) {
        /* Indirect accesses use a bunch of special registers at fixed
@@ -584,7 +584,7 @@ int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function, tuple_
        ofs += link[1] + 2;
     }
     if (i == MAX_TUPLES) {
-       cs_dbg(s, 1, "cs: overrun in pcmcia_get_next_tuple\n");
+       dev_dbg(&s->dev, "cs: overrun in pcmcia_get_next_tuple\n");
        return -ENOSPC;
     }
     
@@ -1440,7 +1440,7 @@ int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse)
        break;
     }
     if (ret)
-           __cs_dbg(0, "parse_tuple failed %d\n", ret);
+           pr_debug("parse_tuple failed %d\n", ret);
     return ret;
 }
 EXPORT_SYMBOL(pcmcia_parse_tuple);
@@ -1482,6 +1482,67 @@ done:
 }
 EXPORT_SYMBOL(pccard_read_tuple);
 
+
+/**
+ * pccard_loop_tuple() - loop over tuples in the CIS
+ * @s:         the struct pcmcia_socket where the card is inserted
+ * @function:  the device function we loop for
+ * @code:      which CIS code shall we look for?
+ * @parse:     buffer where the tuple shall be parsed (or NULL, if no parse)
+ * @priv_data: private data to be passed to the loop_tuple function.
+ * @loop_tuple:        function to call for each CIS entry of type @function. IT
+ *             gets passed the raw tuple, the paresed tuple (if @parse is
+ *             set) and @priv_data.
+ *
+ * pccard_loop_tuple() loops over all CIS entries of type @function, and
+ * calls the @loop_tuple function for each entry. If the call to @loop_tuple
+ * returns 0, the loop exits. Returns 0 on success or errorcode otherwise.
+ */
+int pccard_loop_tuple(struct pcmcia_socket *s, unsigned int function,
+                     cisdata_t code, cisparse_t *parse, void *priv_data,
+                     int (*loop_tuple) (tuple_t *tuple,
+                                        cisparse_t *parse,
+                                        void *priv_data))
+{
+       tuple_t tuple;
+       cisdata_t *buf;
+       int ret;
+
+       buf = kzalloc(256, GFP_KERNEL);
+       if (buf == NULL) {
+               dev_printk(KERN_WARNING, &s->dev, "no memory to read tuple\n");
+               return -ENOMEM;
+       }
+
+       tuple.TupleData = buf;
+       tuple.TupleDataMax = 255;
+       tuple.TupleOffset = 0;
+       tuple.DesiredTuple = code;
+       tuple.Attributes = 0;
+
+       ret = pccard_get_first_tuple(s, function, &tuple);
+       while (!ret) {
+               if (pccard_get_tuple_data(s, &tuple))
+                       goto next_entry;
+
+               if (parse)
+                       if (pcmcia_parse_tuple(&tuple, parse))
+                               goto next_entry;
+
+               ret = loop_tuple(&tuple, parse, priv_data);
+               if (!ret)
+                       break;
+
+next_entry:
+               ret = pccard_get_next_tuple(s, function, &tuple);
+       }
+
+       kfree(buf);
+       return ret;
+}
+EXPORT_SYMBOL(pccard_loop_tuple);
+
+
 /*======================================================================
 
     This tries to determine if a card has a sensible CIS.  It returns
index 698d75cda084c36a4e15cdae7c6c1809bb9d417b..790af87a922fc6e541f5ab2bb02d2b2f315388d9 100644 (file)
@@ -61,17 +61,6 @@ INT_MODULE_PARM(unreset_limit,       30);            /* unreset_check's */
 /* 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,
@@ -190,7 +179,7 @@ int pcmcia_register_socket(struct pcmcia_socket *socket)
        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);
 
@@ -262,6 +251,13 @@ int pcmcia_register_socket(struct pcmcia_socket *socket)
 
        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 +278,7 @@ void pcmcia_unregister_socket(struct pcmcia_socket *socket)
        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 +331,7 @@ static int send_event(struct pcmcia_socket *s, event_t event, int priority)
        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)
@@ -352,7 +348,7 @@ static int send_event(struct pcmcia_socket *s, event_t event, int priority)
 
 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 +357,7 @@ static int socket_reset(struct pcmcia_socket *skt)
 {
        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);
@@ -383,7 +379,7 @@ static int socket_reset(struct pcmcia_socket *skt)
                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 +393,7 @@ static void socket_shutdown(struct pcmcia_socket *s)
 {
        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 +428,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
 {
        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))
@@ -452,13 +448,15 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
        }
 
        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;
@@ -472,7 +470,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
        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;
        }
 
@@ -489,7 +487,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
 
        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 +507,7 @@ static int socket_insert(struct pcmcia_socket *skt)
 {
        int ret;
 
-       cs_dbg(skt, 4, "insert\n");
+       dev_dbg(&skt->dev, "insert\n");
 
        if (!cs_socket_get(skt))
                return -ENODEV;
@@ -529,7 +527,7 @@ static int socket_insert(struct pcmcia_socket *skt)
                        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 {
@@ -576,7 +574,7 @@ static int socket_late_resume(struct pcmcia_socket *skt)
                 * 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);
                        /*
@@ -587,7 +585,7 @@ static int socket_late_resume(struct pcmcia_socket *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 {
@@ -723,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 +771,22 @@ int pcmcia_reset_card(struct pcmcia_socket *skt)
 {
        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 +819,7 @@ int pcmcia_suspend_card(struct pcmcia_socket *skt)
 {
        int ret;
 
-       cs_dbg(skt, 1, "suspending socket\n");
+       dev_dbg(&skt->dev, "suspending socket\n");
 
        mutex_lock(&skt->skt_mutex);
        do {
@@ -848,7 +849,7 @@ int pcmcia_resume_card(struct pcmcia_socket *skt)
 {
        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 +877,7 @@ int pcmcia_eject_card(struct pcmcia_socket *skt)
 {
        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 +906,7 @@ int pcmcia_insert_card(struct pcmcia_socket *skt)
 {
        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 1f4098f1354db464cccf1b8ab0f7345c62516ee8..3bc02d53a3a30ae91bd61a6bd3bd2554958c93b9 100644 (file)
@@ -107,28 +107,6 @@ static inline void cs_socket_put(struct pcmcia_socket *skt)
        }
 }
 
-#ifdef CONFIG_PCMCIA_DEBUG
-extern int cs_debug_level(int);
-
-#define cs_dbg(skt, lvl, fmt, arg...) do {             \
-       if (cs_debug_level(lvl))                        \
-               dev_printk(KERN_DEBUG, &skt->dev,       \
-                "cs: " fmt, ## arg);                   \
-} while (0)
-#define __cs_dbg(lvl, fmt, arg...) do {                        \
-       if (cs_debug_level(lvl))                        \
-               printk(KERN_DEBUG                       \
-                "cs: " fmt, ## arg);                   \
-} while (0)
-
-#else
-#define cs_dbg(skt, lvl, fmt, arg...) do { } while (0)
-#define __cs_dbg(lvl, fmt, arg...) do { } while (0)
-#endif
-
-#define cs_err(skt, fmt, arg...) \
-       dev_printk(KERN_ERR, &skt->dev, "cs: " fmt, ## arg)
-
 
 /*
  * Stuff internal to module "pcmcia_core":
@@ -170,10 +148,6 @@ extern struct rw_semaphore pcmcia_socket_list_rwsem;
 extern struct list_head pcmcia_socket_list;
 extern struct class pcmcia_socket_class;
 
-int pcmcia_get_window(struct pcmcia_socket *s,
-                     window_handle_t *handle,
-                     int idx,
-                     win_req_t *req);
 int pccard_register_pcmcia(struct pcmcia_socket *s, struct pcmcia_callback *c);
 struct pcmcia_socket *pcmcia_get_socket_by_nr(unsigned int nr);
 
@@ -199,6 +173,22 @@ int pcmcia_replace_cis(struct pcmcia_socket *s,
                       const u8 *data, const size_t len);
 int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *count);
 
+/* loop over CIS entries */
+int pccard_loop_tuple(struct pcmcia_socket *s, unsigned int function,
+                     cisdata_t code, cisparse_t *parse, void *priv_data,
+                     int (*loop_tuple) (tuple_t *tuple,
+                                        cisparse_t *parse,
+                                        void *priv_data));
+
+int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function,
+                       tuple_t *tuple);
+
+int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function,
+                       tuple_t *tuple);
+
+int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple);
+
+
 /* rsrc_mgr.c */
 int pcmcia_validate_mem(struct pcmcia_socket *s);
 struct resource *pcmcia_find_io_region(unsigned long base,
index f5b7079f13d36e90d606215af99965a3b2f1fe52..05893d41dd418d19dde7847da6f33c7926b2b966 100644 (file)
@@ -41,129 +41,11 @@ MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
 MODULE_DESCRIPTION("PCMCIA Driver Services");
 MODULE_LICENSE("GPL");
 
-#ifdef CONFIG_PCMCIA_DEBUG
-int ds_pc_debug;
-
-module_param_named(pc_debug, ds_pc_debug, int, 0644);
-
-#define ds_dbg(lvl, fmt, arg...) do {                          \
-       if (ds_pc_debug > (lvl))                                \
-               printk(KERN_DEBUG "ds: " fmt , ## arg);         \
-} while (0)
-#define ds_dev_dbg(lvl, dev, fmt, arg...) do {                         \
-       if (ds_pc_debug > (lvl))                                        \
-               dev_printk(KERN_DEBUG, dev, "ds: " fmt , ## arg);       \
-} while (0)
-#else
-#define ds_dbg(lvl, fmt, arg...) do { } while (0)
-#define ds_dev_dbg(lvl, dev, fmt, arg...) do { } while (0)
-#endif
 
 spinlock_t pcmcia_dev_list_lock;
 
 /*====================================================================*/
 
-/* code which was in cs.c before */
-
-/* String tables for error messages */
-
-typedef struct lookup_t {
-    const int key;
-    const char *msg;
-} lookup_t;
-
-static const lookup_t error_table[] = {
-    { 0,                       "Operation succeeded" },
-    { -EIO,                    "Input/Output error" },
-    { -ENODEV,                 "No card present" },
-    { -EINVAL,                 "Bad parameter" },
-    { -EACCES,                 "Configuration locked" },
-    { -EBUSY,                  "Resource in use" },
-    { -ENOSPC,                 "No more items" },
-    { -ENOMEM,                 "Out of resource" },
-};
-
-
-static const lookup_t service_table[] = {
-    { AccessConfigurationRegister,     "AccessConfigurationRegister" },
-    { AddSocketServices,               "AddSocketServices" },
-    { AdjustResourceInfo,              "AdjustResourceInfo" },
-    { CheckEraseQueue,                 "CheckEraseQueue" },
-    { CloseMemory,                     "CloseMemory" },
-    { DeregisterClient,                        "DeregisterClient" },
-    { DeregisterEraseQueue,            "DeregisterEraseQueue" },
-    { GetCardServicesInfo,             "GetCardServicesInfo" },
-    { GetClientInfo,                   "GetClientInfo" },
-    { GetConfigurationInfo,            "GetConfigurationInfo" },
-    { GetEventMask,                    "GetEventMask" },
-    { GetFirstClient,                  "GetFirstClient" },
-    { GetFirstRegion,                  "GetFirstRegion" },
-    { GetFirstTuple,                   "GetFirstTuple" },
-    { GetNextClient,                   "GetNextClient" },
-    { GetNextRegion,                   "GetNextRegion" },
-    { GetNextTuple,                    "GetNextTuple" },
-    { GetStatus,                       "GetStatus" },
-    { GetTupleData,                    "GetTupleData" },
-    { MapMemPage,                      "MapMemPage" },
-    { ModifyConfiguration,             "ModifyConfiguration" },
-    { ModifyWindow,                    "ModifyWindow" },
-    { OpenMemory,                      "OpenMemory" },
-    { ParseTuple,                      "ParseTuple" },
-    { ReadMemory,                      "ReadMemory" },
-    { RegisterClient,                  "RegisterClient" },
-    { RegisterEraseQueue,              "RegisterEraseQueue" },
-    { RegisterMTD,                     "RegisterMTD" },
-    { ReleaseConfiguration,            "ReleaseConfiguration" },
-    { ReleaseIO,                       "ReleaseIO" },
-    { ReleaseIRQ,                      "ReleaseIRQ" },
-    { ReleaseWindow,                   "ReleaseWindow" },
-    { RequestConfiguration,            "RequestConfiguration" },
-    { RequestIO,                       "RequestIO" },
-    { RequestIRQ,                      "RequestIRQ" },
-    { RequestSocketMask,               "RequestSocketMask" },
-    { RequestWindow,                   "RequestWindow" },
-    { ResetCard,                       "ResetCard" },
-    { SetEventMask,                    "SetEventMask" },
-    { ValidateCIS,                     "ValidateCIS" },
-    { WriteMemory,                     "WriteMemory" },
-    { BindDevice,                      "BindDevice" },
-    { BindMTD,                         "BindMTD" },
-    { ReportError,                     "ReportError" },
-    { SuspendCard,                     "SuspendCard" },
-    { ResumeCard,                      "ResumeCard" },
-    { EjectCard,                       "EjectCard" },
-    { InsertCard,                      "InsertCard" },
-    { ReplaceCIS,                      "ReplaceCIS" }
-};
-
-const char *pcmcia_error_func(int func)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(service_table); i++)
-               if (service_table[i].key == func)
-                       return service_table[i].msg;
-
-       return "Unknown service number";
-}
-EXPORT_SYMBOL(pcmcia_error_func);
-
-const char *pcmcia_error_ret(int ret)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(error_table); i++)
-               if (error_table[i].key == ret)
-                       return error_table[i].msg;
-
-       return "unknown";
-}
-EXPORT_SYMBOL(pcmcia_error_ret);
-
-/*======================================================================*/
-
-
-
 static void pcmcia_check_driver(struct pcmcia_driver *p_drv)
 {
        struct pcmcia_device_id *did = p_drv->id_table;
@@ -303,7 +185,7 @@ int pcmcia_register_driver(struct pcmcia_driver *driver)
        spin_lock_init(&driver->dynids.lock);
        INIT_LIST_HEAD(&driver->dynids.list);
 
-       ds_dbg(3, "registering driver %s\n", driver->drv.name);
+       pr_debug("registering driver %s\n", driver->drv.name);
 
        error = driver_register(&driver->drv);
        if (error < 0)
@@ -323,7 +205,7 @@ EXPORT_SYMBOL(pcmcia_register_driver);
  */
 void pcmcia_unregister_driver(struct pcmcia_driver *driver)
 {
-       ds_dbg(3, "unregistering driver %s\n", driver->drv.name);
+       pr_debug("unregistering driver %s\n", driver->drv.name);
        driver_unregister(&driver->drv);
        pcmcia_free_dynids(driver);
 }
@@ -350,14 +232,14 @@ void pcmcia_put_dev(struct pcmcia_device *p_dev)
 static void pcmcia_release_function(struct kref *ref)
 {
        struct config_t *c = container_of(ref, struct config_t, ref);
-       ds_dbg(1, "releasing config_t\n");
+       pr_debug("releasing config_t\n");
        kfree(c);
 }
 
 static void pcmcia_release_dev(struct device *dev)
 {
        struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
-       ds_dev_dbg(1, dev, "releasing device\n");
+       dev_dbg(dev, "releasing device\n");
        pcmcia_put_socket(p_dev->socket);
        kfree(p_dev->devname);
        kref_put(&p_dev->function_config->ref, pcmcia_release_function);
@@ -367,7 +249,7 @@ static void pcmcia_release_dev(struct device *dev)
 static void pcmcia_add_device_later(struct pcmcia_socket *s, int mfc)
 {
        if (!s->pcmcia_state.device_add_pending) {
-               ds_dev_dbg(1, &s->dev, "scheduling to add %s secondary"
+               dev_dbg(&s->dev, "scheduling to add %s secondary"
                       " device to %d\n", mfc ? "mfc" : "pfc", s->sock);
                s->pcmcia_state.device_add_pending = 1;
                s->pcmcia_state.mfc_pfc = mfc;
@@ -405,7 +287,7 @@ static int pcmcia_device_probe(struct device * dev)
         */
        did = dev_get_drvdata(&p_dev->dev);
 
-       ds_dev_dbg(1, dev, "trying to bind to %s\n", p_drv->drv.name);
+       dev_dbg(dev, "trying to bind to %s\n", p_drv->drv.name);
 
        if ((!p_drv->probe) || (!p_dev->function_config) ||
            (!try_module_get(p_drv->owner))) {
@@ -428,7 +310,7 @@ static int pcmcia_device_probe(struct device * dev)
 
        ret = p_drv->probe(p_dev);
        if (ret) {
-               ds_dev_dbg(1, dev, "binding to %s failed with %d\n",
+               dev_dbg(dev, "binding to %s failed with %d\n",
                           p_drv->drv.name, ret);
                goto put_module;
        }
@@ -456,7 +338,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *le
        struct pcmcia_device    *tmp;
        unsigned long           flags;
 
-       ds_dev_dbg(2, leftover ? &leftover->dev : &s->dev,
+       dev_dbg(leftover ? &leftover->dev : &s->dev,
                   "pcmcia_card_remove(%d) %s\n", s->sock,
                   leftover ? leftover->devname : "");
 
@@ -475,7 +357,7 @@ static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *le
                p_dev->_removed=1;
                spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
 
-               ds_dev_dbg(2, &p_dev->dev, "unregistering device\n");
+               dev_dbg(&p_dev->dev, "unregistering device\n");
                device_unregister(&p_dev->dev);
        }
 
@@ -492,7 +374,7 @@ static int pcmcia_device_remove(struct device * dev)
        p_dev = to_pcmcia_dev(dev);
        p_drv = to_pcmcia_drv(dev->driver);
 
-       ds_dev_dbg(1, dev, "removing device\n");
+       dev_dbg(dev, "removing device\n");
 
        /* If we're removing the primary module driving a
         * pseudo multi-function card, we need to unbind
@@ -572,7 +454,7 @@ static int pcmcia_device_query(struct pcmcia_device *p_dev)
                }
                if (!pccard_read_tuple(p_dev->socket, p_dev->func,
                                      CISTPL_DEVICE_GEO, devgeo)) {
-                       ds_dev_dbg(0, &p_dev->dev,
+                       dev_dbg(&p_dev->dev,
                                   "mem device geometry probably means "
                                   "FUNCID_MEMORY\n");
                        p_dev->func_id = CISTPL_FUNCID_MEMORY;
@@ -628,7 +510,7 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
 
        mutex_lock(&device_add_lock);
 
-       ds_dbg(3, "adding device to %d, function %d\n", s->sock, function);
+       pr_debug("adding device to %d, function %d\n", s->sock, function);
 
        /* max of 4 devices per card */
        if (s->device_count == 4)
@@ -654,7 +536,7 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
        p_dev->devname = kasprintf(GFP_KERNEL, "pcmcia%s", dev_name(&p_dev->dev));
        if (!p_dev->devname)
                goto err_free;
-       ds_dev_dbg(3, &p_dev->dev, "devname is %s\n", p_dev->devname);
+       dev_dbg(&p_dev->dev, "devname is %s\n", p_dev->devname);
 
        spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
 
@@ -677,7 +559,7 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
        spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
 
        if (!p_dev->function_config) {
-               ds_dev_dbg(3, &p_dev->dev, "creating config_t\n");
+               dev_dbg(&p_dev->dev, "creating config_t\n");
                p_dev->function_config = kzalloc(sizeof(struct config_t),
                                                 GFP_KERNEL);
                if (!p_dev->function_config)
@@ -722,20 +604,20 @@ static int pcmcia_card_add(struct pcmcia_socket *s)
        int ret = 0;
 
        if (!(s->resource_setup_done)) {
-               ds_dev_dbg(3, &s->dev,
+               dev_dbg(&s->dev,
                           "no resources available, delaying card_add\n");
                return -EAGAIN; /* try again, but later... */
        }
 
        if (pcmcia_validate_mem(s)) {
-               ds_dev_dbg(3, &s->dev, "validating mem resources failed, "
+               dev_dbg(&s->dev, "validating mem resources failed, "
                       "delaying card_add\n");
                return -EAGAIN; /* try again, but later... */
        }
 
        ret = pccard_validate_cis(s, &no_chains);
        if (ret || !no_chains) {
-               ds_dev_dbg(0, &s->dev, "invalid CIS or invalid resources\n");
+               dev_dbg(&s->dev, "invalid CIS or invalid resources\n");
                return -ENODEV;
        }
 
@@ -756,7 +638,7 @@ static void pcmcia_delayed_add_device(struct work_struct *work)
 {
        struct pcmcia_socket *s =
                container_of(work, struct pcmcia_socket, device_add);
-       ds_dev_dbg(1, &s->dev, "adding additional device to %d\n", s->sock);
+       dev_dbg(&s->dev, "adding additional device to %d\n", s->sock);
        pcmcia_device_add(s, s->pcmcia_state.mfc_pfc);
        s->pcmcia_state.device_add_pending = 0;
        s->pcmcia_state.mfc_pfc = 0;
@@ -766,7 +648,7 @@ static int pcmcia_requery(struct device *dev, void * _data)
 {
        struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
        if (!p_dev->dev.driver) {
-               ds_dev_dbg(1, dev, "update device information\n");
+               dev_dbg(dev, "update device information\n");
                pcmcia_device_query(p_dev);
        }
 
@@ -780,7 +662,7 @@ static void pcmcia_bus_rescan(struct pcmcia_socket *skt, int new_cis)
        unsigned long flags;
 
        /* must be called with skt_mutex held */
-       ds_dev_dbg(0, &skt->dev, "re-scanning socket %d\n", skt->sock);
+       dev_dbg(&skt->dev, "re-scanning socket %d\n", skt->sock);
 
        spin_lock_irqsave(&pcmcia_dev_list_lock, flags);
        if (list_empty(&skt->devices_list))
@@ -835,7 +717,7 @@ static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename)
        if (!filename)
                return -EINVAL;
 
-       ds_dev_dbg(1, &dev->dev, "trying to load CIS file %s\n", filename);
+       dev_dbg(&dev->dev, "trying to load CIS file %s\n", filename);
 
        if (request_firmware(&fw, filename, &dev->dev) == 0) {
                if (fw->size >= CISTPL_MAX_CIS_SIZE) {
@@ -953,14 +835,14 @@ static inline int pcmcia_devmatch(struct pcmcia_device *dev,
                 * after it has re-checked that there is no possible module
                 * with a prod_id/manf_id/card_id match.
                 */
-               ds_dev_dbg(0, &dev->dev,
+               dev_dbg(&dev->dev,
                        "skipping FUNC_ID match until userspace interaction\n");
                if (!dev->allow_func_id_match)
                        return 0;
        }
 
        if (did->match_flags & PCMCIA_DEV_ID_MATCH_FAKE_CIS) {
-               ds_dev_dbg(0, &dev->dev, "device needs a fake CIS\n");
+               dev_dbg(&dev->dev, "device needs a fake CIS\n");
                if (!dev->socket->fake_cis)
                        pcmcia_load_firmware(dev, did->cisfile);
 
@@ -992,9 +874,9 @@ static int pcmcia_bus_match(struct device * dev, struct device_driver * drv) {
        /* match dynamic devices first */
        spin_lock(&p_drv->dynids.lock);
        list_for_each_entry(dynid, &p_drv->dynids.list, node) {
-               ds_dev_dbg(3, dev, "trying to match to %s\n", drv->name);
+               dev_dbg(dev, "trying to match to %s\n", drv->name);
                if (pcmcia_devmatch(p_dev, &dynid->id)) {
-                       ds_dev_dbg(0, dev, "matched to %s\n", drv->name);
+                       dev_dbg(dev, "matched to %s\n", drv->name);
                        spin_unlock(&p_drv->dynids.lock);
                        return 1;
                }
@@ -1004,15 +886,15 @@ static int pcmcia_bus_match(struct device * dev, struct device_driver * drv) {
 #ifdef CONFIG_PCMCIA_IOCTL
        /* matching by cardmgr */
        if (p_dev->cardmgr == p_drv) {
-               ds_dev_dbg(0, dev, "cardmgr matched to %s\n", drv->name);
+               dev_dbg(dev, "cardmgr matched to %s\n", drv->name);
                return 1;
        }
 #endif
 
        while (did && did->match_flags) {
-               ds_dev_dbg(3, dev, "trying to match to %s\n", drv->name);
+               dev_dbg(dev, "trying to match to %s\n", drv->name);
                if (pcmcia_devmatch(p_dev, did)) {
-                       ds_dev_dbg(0, dev, "matched to %s\n", drv->name);
+                       dev_dbg(dev, "matched to %s\n", drv->name);
                        return 1;
                }
                did++;
@@ -1218,7 +1100,7 @@ static int pcmcia_dev_suspend(struct device * dev, pm_message_t state)
        if (p_dev->suspended)
                return 0;
 
-       ds_dev_dbg(2, dev, "suspending\n");
+       dev_dbg(dev, "suspending\n");
 
        if (dev->driver)
                p_drv = to_pcmcia_drv(dev->driver);
@@ -1238,7 +1120,7 @@ static int pcmcia_dev_suspend(struct device * dev, pm_message_t state)
        }
 
        if (p_dev->device_no == p_dev->func) {
-               ds_dev_dbg(2, dev, "releasing configuration\n");
+               dev_dbg(dev, "releasing configuration\n");
                pcmcia_release_configuration(p_dev);
        }
 
@@ -1258,7 +1140,7 @@ static int pcmcia_dev_resume(struct device * dev)
        if (!p_dev->suspended)
                return 0;
 
-       ds_dev_dbg(2, dev, "resuming\n");
+       dev_dbg(dev, "resuming\n");
 
        if (dev->driver)
                p_drv = to_pcmcia_drv(dev->driver);
@@ -1267,7 +1149,7 @@ static int pcmcia_dev_resume(struct device * dev)
                goto out;
 
        if (p_dev->device_no == p_dev->func) {
-               ds_dev_dbg(2, dev, "requesting configuration\n");
+               dev_dbg(dev, "requesting configuration\n");
                ret = pcmcia_request_configuration(p_dev, &p_dev->conf);
                if (ret)
                        goto out;
@@ -1309,14 +1191,14 @@ static int pcmcia_bus_resume_callback(struct device *dev, void * _data)
 
 static int pcmcia_bus_resume(struct pcmcia_socket *skt)
 {
-       ds_dev_dbg(2, &skt->dev, "resuming socket %d\n", skt->sock);
+       dev_dbg(&skt->dev, "resuming socket %d\n", skt->sock);
        bus_for_each_dev(&pcmcia_bus_type, NULL, skt, pcmcia_bus_resume_callback);
        return 0;
 }
 
 static int pcmcia_bus_suspend(struct pcmcia_socket *skt)
 {
-       ds_dev_dbg(2, &skt->dev, "suspending socket %d\n", skt->sock);
+       dev_dbg(&skt->dev, "suspending socket %d\n", skt->sock);
        if (bus_for_each_dev(&pcmcia_bus_type, NULL, skt,
                             pcmcia_bus_suspend_callback)) {
                pcmcia_bus_resume(skt);
@@ -1348,7 +1230,7 @@ static int ds_event(struct pcmcia_socket *skt, event_t event, int priority)
                return -ENODEV;
        }
 
-       ds_dev_dbg(1, &skt->dev, "ds_event(0x%06x, %d, 0x%p)\n",
+       dev_dbg(&skt->dev, "ds_event(0x%06x, %d, 0x%p)\n",
                   event, priority, skt);
 
        switch (event) {
index a4aacb830b80772d0f59a99a8bf029b4be6001f8..c13fd9360511b89fe3b52f37477bb86a6dab5f1a 100644 (file)
 #include "vg468.h"
 #include "ricoh.h"
 
-#ifdef CONFIG_PCMCIA_DEBUG
-static const char version[] =
-"i82365.c 1.265 1999/11/10 18:36:21 (David Hinds)";
-
-static int pc_debug;
-
-module_param(pc_debug, int, 0644);
-
-#define debug(lvl, fmt, arg...) do {                           \
-       if (pc_debug > (lvl))                                   \
-               printk(KERN_DEBUG "i82365: " fmt , ## arg);     \
-} while (0)
-#else
-#define debug(lvl, fmt, arg...) do { } while (0)
-#endif
 
 static irqreturn_t i365_count_irq(int, void *);
 static inline int _check_irq(int irq, int flags)
@@ -501,13 +486,13 @@ static irqreturn_t i365_count_irq(int irq, void *dev)
 {
     i365_get(irq_sock, I365_CSC);
     irq_hits++;
-    debug(2, "-> hit on irq %d\n", irq);
+    pr_debug("i82365: -> hit on irq %d\n", irq);
     return IRQ_HANDLED;
 }
 
 static u_int __init test_irq(u_short sock, int irq)
 {
-    debug(2, "  testing ISA irq %d\n", irq);
+    pr_debug("i82365:  testing ISA irq %d\n", irq);
     if (request_irq(irq, i365_count_irq, IRQF_PROBE_SHARED, "scan",
                        i365_count_irq) != 0)
        return 1;
@@ -515,7 +500,7 @@ static u_int __init test_irq(u_short sock, int irq)
     msleep(10);
     if (irq_hits) {
        free_irq(irq, i365_count_irq);
-       debug(2, "    spurious hit!\n");
+       pr_debug("i82365:    spurious hit!\n");
        return 1;
     }
 
@@ -528,7 +513,7 @@ static u_int __init test_irq(u_short sock, int irq)
 
     /* mask all interrupts */
     i365_set(sock, I365_CSCINT, 0);
-    debug(2, "    hits = %d\n", irq_hits);
+    pr_debug("i82365:    hits = %d\n", irq_hits);
     
     return (irq_hits != 1);
 }
@@ -854,7 +839,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev)
     u_long flags = 0;
     int handled = 0;
 
-    debug(4, "pcic_interrupt(%d)\n", irq);
+    pr_debug("pcic_interrupt(%d)\n", irq);
 
     for (j = 0; j < 20; j++) {
        active = 0;
@@ -878,7 +863,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev)
                events |= (csc & I365_CSC_READY) ? SS_READY : 0;
            }
            ISA_UNLOCK(i, flags);
-           debug(2, "socket %d event 0x%02x\n", i, events);
+           pr_debug("socket %d event 0x%02x\n", i, events);
 
            if (events)
                pcmcia_parse_events(&socket[i].socket, events);
@@ -890,7 +875,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev)
     if (j == 20)
        printk(KERN_NOTICE "i82365: infinite loop in interrupt handler\n");
 
-    debug(4, "interrupt done\n");
+    pr_debug("pcic_interrupt done\n");
     return IRQ_RETVAL(handled);
 } /* pcic_interrupt */
 
@@ -932,7 +917,7 @@ static int i365_get_status(u_short sock, u_int *value)
        }
     }
     
-    debug(1, "GetStatus(%d) = %#4.4x\n", sock, *value);
+    pr_debug("GetStatus(%d) = %#4.4x\n", sock, *value);
     return 0;
 } /* i365_get_status */
 
@@ -943,7 +928,7 @@ static int i365_set_socket(u_short sock, socket_state_t *state)
     struct i82365_socket *t = &socket[sock];
     u_char reg;
     
-    debug(1, "SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
+    pr_debug("SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
          "io_irq %d, csc_mask %#2.2x)\n", sock, state->flags,
          state->Vcc, state->Vpp, state->io_irq, state->csc_mask);
     
@@ -1052,7 +1037,7 @@ static int i365_set_io_map(u_short sock, struct pccard_io_map *io)
 {
     u_char map, ioctl;
     
-    debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, "
+    pr_debug("SetIOMap(%d, %d, %#2.2x, %d ns, "
          "%#llx-%#llx)\n", sock, io->map, io->flags, io->speed,
          (unsigned long long)io->start, (unsigned long long)io->stop);
     map = io->map;
@@ -1082,7 +1067,7 @@ static int i365_set_mem_map(u_short sock, struct pccard_mem_map *mem)
     u_short base, i;
     u_char map;
     
-    debug(1, "SetMemMap(%d, %d, %#2.2x, %d ns, %#llx-%#llx, "
+    pr_debug("SetMemMap(%d, %d, %#2.2x, %d ns, %#llx-%#llx, "
          "%#x)\n", sock, mem->map, mem->flags, mem->speed,
          (unsigned long long)mem->res->start,
          (unsigned long long)mem->res->end, mem->card_start);
index 7dfbee1dcd769acbc9a3ec6308b3cbb72813ceb1..26a621c9e2fcb08c7608494f8494c31978552c04 100644 (file)
 
 #include "m32r_cfc.h"
 
-#ifdef CONFIG_PCMCIA_DEBUG
-static int m32r_cfc_debug;
-module_param(m32r_cfc_debug, int, 0644);
-#define debug(lvl, fmt, arg...) do {                           \
-       if (m32r_cfc_debug > (lvl))                             \
-               printk(KERN_DEBUG "m32r_cfc: " fmt , ## arg);   \
-} while (0)
-#else
-#define debug(n, args...) do { } while (0)
-#endif
-
 /* Poll status interval -- 0 means default to interrupt */
 static int poll_interval = 0;
 
@@ -123,7 +112,7 @@ void pcc_ioread_byte(int sock, unsigned long port, void *buf, size_t size,
        unsigned char *bp = (unsigned char *)buf;
        unsigned long flags;
 
-       debug(3, "m32r_cfc: pcc_ioread_byte: sock=%d, port=%#lx, buf=%p, "
+       pr_debug("m32r_cfc: pcc_ioread_byte: sock=%d, port=%#lx, buf=%p, "
                 "size=%u, nmemb=%d, flag=%d\n",
                  sock, port, buf, size, nmemb, flag);
 
@@ -132,7 +121,7 @@ void pcc_ioread_byte(int sock, unsigned long port, void *buf, size_t size,
                printk("m32r_cfc:ioread_byte null port :%#lx\n",port);
                return;
        }
-       debug(3, "m32r_cfc: pcc_ioread_byte: addr=%#lx\n", addr);
+       pr_debug("m32r_cfc: pcc_ioread_byte: addr=%#lx\n", addr);
 
        spin_lock_irqsave(&pcc_lock, flags);
        /* read Byte */
@@ -148,7 +137,7 @@ void pcc_ioread_word(int sock, unsigned long port, void *buf, size_t size,
        unsigned short *bp = (unsigned short *)buf;
        unsigned long flags;
 
-       debug(3, "m32r_cfc: pcc_ioread_word: sock=%d, port=%#lx, "
+       pr_debug("m32r_cfc: pcc_ioread_word: sock=%d, port=%#lx, "
                 "buf=%p, size=%u, nmemb=%d, flag=%d\n",
                 sock, port, buf, size, nmemb, flag);
 
@@ -163,7 +152,7 @@ void pcc_ioread_word(int sock, unsigned long port, void *buf, size_t size,
                printk("m32r_cfc:ioread_word null port :%#lx\n",port);
                return;
        }
-       debug(3, "m32r_cfc: pcc_ioread_word: addr=%#lx\n", addr);
+       pr_debug("m32r_cfc: pcc_ioread_word: addr=%#lx\n", addr);
 
        spin_lock_irqsave(&pcc_lock, flags);
        /* read Word */
@@ -179,7 +168,7 @@ void pcc_iowrite_byte(int sock, unsigned long port, void *buf, size_t size,
        unsigned char *bp = (unsigned char *)buf;
        unsigned long flags;
 
-       debug(3, "m32r_cfc: pcc_iowrite_byte: sock=%d, port=%#lx, "
+       pr_debug("m32r_cfc: pcc_iowrite_byte: sock=%d, port=%#lx, "
                 "buf=%p, size=%u, nmemb=%d, flag=%d\n",
                 sock, port, buf, size, nmemb, flag);
 
@@ -189,7 +178,7 @@ void pcc_iowrite_byte(int sock, unsigned long port, void *buf, size_t size,
                printk("m32r_cfc:iowrite_byte null port:%#lx\n",port);
                return;
        }
-       debug(3, "m32r_cfc: pcc_iowrite_byte: addr=%#lx\n", addr);
+       pr_debug("m32r_cfc: pcc_iowrite_byte: addr=%#lx\n", addr);
 
        spin_lock_irqsave(&pcc_lock, flags);
        while (nmemb--)
@@ -204,7 +193,7 @@ void pcc_iowrite_word(int sock, unsigned long port, void *buf, size_t size,
        unsigned short *bp = (unsigned short *)buf;
        unsigned long flags;
 
-       debug(3, "m32r_cfc: pcc_iowrite_word: sock=%d, port=%#lx, "
+       pr_debug("m32r_cfc: pcc_iowrite_word: sock=%d, port=%#lx, "
                 "buf=%p, size=%u, nmemb=%d, flag=%d\n",
                 sock, port, buf, size, nmemb, flag);
 
@@ -226,7 +215,7 @@ void pcc_iowrite_word(int sock, unsigned long port, void *buf, size_t size,
                return;
        }
 #endif
-       debug(3, "m32r_cfc: pcc_iowrite_word: addr=%#lx\n", addr);
+       pr_debug("m32r_cfc: pcc_iowrite_word: addr=%#lx\n", addr);
 
        spin_lock_irqsave(&pcc_lock, flags);
        while (nmemb--)
@@ -262,7 +251,7 @@ static struct timer_list poll_timer;
 static unsigned int pcc_get(u_short sock, unsigned int reg)
 {
        unsigned int val = inw(reg);
-       debug(3, "m32r_cfc: pcc_get: reg(0x%08x)=0x%04x\n", reg, val);
+       pr_debug("m32r_cfc: pcc_get: reg(0x%08x)=0x%04x\n", reg, val);
        return val;
 }
 
@@ -270,7 +259,7 @@ static unsigned int pcc_get(u_short sock, unsigned int reg)
 static void pcc_set(u_short sock, unsigned int reg, unsigned int data)
 {
        outw(data, reg);
-       debug(3, "m32r_cfc: pcc_set: reg(0x%08x)=0x%04x\n", reg, data);
+       pr_debug("m32r_cfc: pcc_set: reg(0x%08x)=0x%04x\n", reg, data);
 }
 
 /*======================================================================
@@ -286,14 +275,14 @@ static int __init is_alive(u_short sock)
 {
        unsigned int stat;
 
-       debug(3, "m32r_cfc: is_alive:\n");
+       pr_debug("m32r_cfc: is_alive:\n");
 
        printk("CF: ");
        stat = pcc_get(sock, (unsigned int)PLD_CFSTS);
        if (!stat)
                printk("No ");
        printk("Card is detected at socket %d : stat = 0x%08x\n", sock, stat);
-       debug(3, "m32r_cfc: is_alive: sock stat is 0x%04x\n", stat);
+       pr_debug("m32r_cfc: is_alive: sock stat is 0x%04x\n", stat);
 
        return 0;
 }
@@ -303,7 +292,7 @@ static void add_pcc_socket(ulong base, int irq, ulong mapaddr,
 {
        pcc_socket_t *t = &socket[pcc_sockets];
 
-       debug(3, "m32r_cfc: add_pcc_socket: base=%#lx, irq=%d, "
+       pr_debug("m32r_cfc: add_pcc_socket: base=%#lx, irq=%d, "
                 "mapaddr=%#lx, ioaddr=%08x\n",
                 base, irq, mapaddr, ioaddr);
 
@@ -358,7 +347,7 @@ static void add_pcc_socket(ulong base, int irq, ulong mapaddr,
        /* eject interrupt */
        request_irq(irq+1, pcc_interrupt, 0, "m32r_cfc", pcc_interrupt);
 #endif
-       debug(3, "m32r_cfc: enable CFMSK, RDYSEL\n");
+       pr_debug("m32r_cfc: enable CFMSK, RDYSEL\n");
        pcc_set(pcc_sockets, (unsigned int)PLD_CFIMASK, 0x01);
 #endif /* CONFIG_PLAT_USRV */
 #if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_USRV) || defined(CONFIG_PLAT_OPSPUT)
@@ -378,26 +367,26 @@ static irqreturn_t pcc_interrupt(int irq, void *dev)
        u_int events = 0;
        int handled = 0;
 
-       debug(3, "m32r_cfc: pcc_interrupt: irq=%d, dev=%p\n", irq, dev);
+       pr_debug("m32r_cfc: pcc_interrupt: irq=%d, dev=%p\n", irq, dev);
        for (i = 0; i < pcc_sockets; i++) {
                if (socket[i].cs_irq1 != irq && socket[i].cs_irq2 != irq)
                        continue;
 
                handled = 1;
-               debug(3, "m32r_cfc: pcc_interrupt: socket %d irq 0x%02x ",
+               pr_debug("m32r_cfc: pcc_interrupt: socket %d irq 0x%02x ",
                        i, irq);
                events |= SS_DETECT;    /* insert or eject */
                if (events)
                        pcmcia_parse_events(&socket[i].socket, events);
        }
-       debug(3, "m32r_cfc: pcc_interrupt: done\n");
+       pr_debug("m32r_cfc: pcc_interrupt: done\n");
 
        return IRQ_RETVAL(handled);
 } /* pcc_interrupt */
 
 static void pcc_interrupt_wrapper(u_long data)
 {
-       debug(3, "m32r_cfc: pcc_interrupt_wrapper:\n");
+       pr_debug("m32r_cfc: pcc_interrupt_wrapper:\n");
        pcc_interrupt(0, NULL);
        init_timer(&poll_timer);
        poll_timer.expires = jiffies + poll_interval;
@@ -410,17 +399,17 @@ static int _pcc_get_status(u_short sock, u_int *value)
 {
        u_int status;
 
-       debug(3, "m32r_cfc: _pcc_get_status:\n");
+       pr_debug("m32r_cfc: _pcc_get_status:\n");
        status = pcc_get(sock, (unsigned int)PLD_CFSTS);
        *value = (status) ? SS_DETECT : 0;
-       debug(3, "m32r_cfc: _pcc_get_status: status=0x%08x\n", status);
+       pr_debug("m32r_cfc: _pcc_get_status: status=0x%08x\n", status);
 
 #if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_USRV) || defined(CONFIG_PLAT_OPSPUT)
        if ( status ) {
                /* enable CF power */
                status = inw((unsigned int)PLD_CPCR);
                if (!(status & PLD_CPCR_CF)) {
-                       debug(3, "m32r_cfc: _pcc_get_status: "
+                       pr_debug("m32r_cfc: _pcc_get_status: "
                                 "power on (CPCR=0x%08x)\n", status);
                        status |= PLD_CPCR_CF;
                        outw(status, (unsigned int)PLD_CPCR);
@@ -439,7 +428,7 @@ static int _pcc_get_status(u_short sock, u_int *value)
                status &= ~PLD_CPCR_CF;
                outw(status, (unsigned int)PLD_CPCR);
                udelay(100);
-               debug(3, "m32r_cfc: _pcc_get_status: "
+               pr_debug("m32r_cfc: _pcc_get_status: "
                         "power off (CPCR=0x%08x)\n", status);
        }
 #elif defined(CONFIG_PLAT_MAPPI2) || defined(CONFIG_PLAT_MAPPI3)
@@ -465,13 +454,13 @@ static int _pcc_get_status(u_short sock, u_int *value)
                /* disable CF power */
                pcc_set(sock, (unsigned int)PLD_CPCR, 0);
                udelay(100);
-               debug(3, "m32r_cfc: _pcc_get_status: "
+               pr_debug("m32r_cfc: _pcc_get_status: "
                         "power off (CPCR=0x%08x)\n", status);
        }
 #else
 #error no platform configuration
 #endif
-       debug(3, "m32r_cfc: _pcc_get_status: GetStatus(%d) = %#4.4x\n",
+       pr_debug("m32r_cfc: _pcc_get_status: GetStatus(%d) = %#4.4x\n",
                 sock, *value);
        return 0;
 } /* _get_status */
@@ -480,7 +469,7 @@ static int _pcc_get_status(u_short sock, u_int *value)
 
 static int _pcc_set_socket(u_short sock, socket_state_t *state)
 {
-       debug(3, "m32r_cfc: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
+       pr_debug("m32r_cfc: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
                  "io_irq %d, csc_mask %#2.2x)\n", sock, state->flags,
                  state->Vcc, state->Vpp, state->io_irq, state->csc_mask);
 
@@ -492,41 +481,39 @@ static int _pcc_set_socket(u_short sock, socket_state_t *state)
        }
 #endif
        if (state->flags & SS_RESET) {
-               debug(3, ":RESET\n");
+               pr_debug(":RESET\n");
                pcc_set(sock,(unsigned int)PLD_CFRSTCR,0x101);
        }else{
                pcc_set(sock,(unsigned int)PLD_CFRSTCR,0x100);
        }
        if (state->flags & SS_OUTPUT_ENA){
-               debug(3, ":OUTPUT_ENA\n");
+               pr_debug(":OUTPUT_ENA\n");
                /* bit clear */
                pcc_set(sock,(unsigned int)PLD_CFBUFCR,0);
        } else {
                pcc_set(sock,(unsigned int)PLD_CFBUFCR,1);
        }
 
-#ifdef CONFIG_PCMCIA_DEBUG
        if(state->flags & SS_IOCARD){
-               debug(3, ":IOCARD");
+               pr_debug(":IOCARD");
        }
        if (state->flags & SS_PWR_AUTO) {
-               debug(3, ":PWR_AUTO");
+               pr_debug(":PWR_AUTO");
        }
        if (state->csc_mask & SS_DETECT)
-               debug(3, ":csc-SS_DETECT");
+               pr_debug(":csc-SS_DETECT");
        if (state->flags & SS_IOCARD) {
                if (state->csc_mask & SS_STSCHG)
-                       debug(3, ":STSCHG");
+                       pr_debug(":STSCHG");
        } else {
                if (state->csc_mask & SS_BATDEAD)
-                       debug(3, ":BATDEAD");
+                       pr_debug(":BATDEAD");
                if (state->csc_mask & SS_BATWARN)
-                       debug(3, ":BATWARN");
+                       pr_debug(":BATWARN");
                if (state->csc_mask & SS_READY)
-                       debug(3, ":READY");
+                       pr_debug(":READY");
        }
-       debug(3, "\n");
-#endif
+       pr_debug("\n");
        return 0;
 } /* _set_socket */
 
@@ -536,7 +523,7 @@ static int _pcc_set_io_map(u_short sock, struct pccard_io_map *io)
 {
        u_char map;
 
-       debug(3, "m32r_cfc: SetIOMap(%d, %d, %#2.2x, %d ns, "
+       pr_debug("m32r_cfc: SetIOMap(%d, %d, %#2.2x, %d ns, "
                  "%#llx-%#llx)\n", sock, io->map, io->flags,
                  io->speed, (unsigned long long)io->start,
                  (unsigned long long)io->stop);
@@ -554,7 +541,7 @@ static int _pcc_set_mem_map(u_short sock, struct pccard_mem_map *mem)
        u_long addr;
        pcc_socket_t *t = &socket[sock];
 
-       debug(3, "m32r_cfc: SetMemMap(%d, %d, %#2.2x, %d ns, "
+       pr_debug("m32r_cfc: SetMemMap(%d, %d, %#2.2x, %d ns, "
                 "%#llx, %#x)\n", sock, map, mem->flags,
                 mem->speed, (unsigned long long)mem->static_start,
                 mem->card_start);
@@ -640,11 +627,11 @@ static int pcc_get_status(struct pcmcia_socket *s, u_int *value)
        unsigned int sock = container_of(s, struct pcc_socket, socket)->number;
 
        if (socket[sock].flags & IS_ALIVE) {
-               debug(3, "m32r_cfc: pcc_get_status: sock(%d) -EINVAL\n", sock);
+               dev_dbg(&s->dev, "pcc_get_status: sock(%d) -EINVAL\n", sock);
                *value = 0;
                return -EINVAL;
        }
-       debug(3, "m32r_cfc: pcc_get_status: sock(%d)\n", sock);
+       dev_dbg(&s->dev, "pcc_get_status: sock(%d)\n", sock);
        LOCKED(_pcc_get_status(sock, value));
 }
 
@@ -653,10 +640,10 @@ static int pcc_set_socket(struct pcmcia_socket *s, socket_state_t *state)
        unsigned int sock = container_of(s, struct pcc_socket, socket)->number;
 
        if (socket[sock].flags & IS_ALIVE) {
-               debug(3, "m32r_cfc: pcc_set_socket: sock(%d) -EINVAL\n", sock);
+               dev_dbg(&s->dev, "pcc_set_socket: sock(%d) -EINVAL\n", sock);
                return -EINVAL;
        }
-       debug(3, "m32r_cfc: pcc_set_socket: sock(%d)\n", sock);
+       dev_dbg(&s->dev, "pcc_set_socket: sock(%d)\n", sock);
        LOCKED(_pcc_set_socket(sock, state));
 }
 
@@ -665,10 +652,10 @@ static int pcc_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
        unsigned int sock = container_of(s, struct pcc_socket, socket)->number;
 
        if (socket[sock].flags & IS_ALIVE) {
-               debug(3, "m32r_cfc: pcc_set_io_map: sock(%d) -EINVAL\n", sock);
+               dev_dbg(&s->dev, "pcc_set_io_map: sock(%d) -EINVAL\n", sock);
                return -EINVAL;
        }
-       debug(3, "m32r_cfc: pcc_set_io_map: sock(%d)\n", sock);
+       dev_dbg(&s->dev, "pcc_set_io_map: sock(%d)\n", sock);
        LOCKED(_pcc_set_io_map(sock, io));
 }
 
@@ -677,16 +664,16 @@ static int pcc_set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem)
        unsigned int sock = container_of(s, struct pcc_socket, socket)->number;
 
        if (socket[sock].flags & IS_ALIVE) {
-               debug(3, "m32r_cfc: pcc_set_mem_map: sock(%d) -EINVAL\n", sock);
+               dev_dbg(&s->dev, "pcc_set_mem_map: sock(%d) -EINVAL\n", sock);
                return -EINVAL;
        }
-       debug(3, "m32r_cfc: pcc_set_mem_map: sock(%d)\n", sock);
+       dev_dbg(&s->dev, "pcc_set_mem_map: sock(%d)\n", sock);
        LOCKED(_pcc_set_mem_map(sock, mem));
 }
 
 static int pcc_init(struct pcmcia_socket *s)
 {
-       debug(3, "m32r_cfc: pcc_init()\n");
+       dev_dbg(&s->dev, "pcc_init()\n");
        return 0;
 }
 
index c6524f99ccc390b14f10c1e21d6f7ddd80cdb6a8..72844c5a6d05fb53999ded835e5bf56f22ba6a21 100644 (file)
 
 #define PCC_DEBUG_DBEX
 
-#ifdef CONFIG_PCMCIA_DEBUG
-static int m32r_pcc_debug;
-module_param(m32r_pcc_debug, int, 0644);
-#define debug(lvl, fmt, arg...) do {                           \
-       if (m32r_pcc_debug > (lvl))                             \
-               printk(KERN_DEBUG "m32r_pcc: " fmt , ## arg);   \
-} while (0)
-#else
-#define debug(n, args...) do { } while (0)
-#endif
 
 /* Poll status interval -- 0 means default to interrupt */
 static int poll_interval = 0;
@@ -358,7 +348,7 @@ static irqreturn_t pcc_interrupt(int irq, void *dev)
        u_int events, active;
        int handled = 0;
 
-       debug(4, "m32r: pcc_interrupt(%d)\n", irq);
+       pr_debug("m32r_pcc: pcc_interrupt(%d)\n", irq);
 
        for (j = 0; j < 20; j++) {
                active = 0;
@@ -369,13 +359,14 @@ static irqreturn_t pcc_interrupt(int irq, void *dev)
                        handled = 1;
                        irc = pcc_get(i, PCIRC);
                        irc >>=16;
-                       debug(2, "m32r-pcc:interrupt: socket %d pcirc 0x%02x ", i, irc);
+                       pr_debug("m32r_pcc: interrupt: socket %d pcirc 0x%02x ",
+                               i, irc);
                        if (!irc)
                                continue;
 
                        events = (irc) ? SS_DETECT : 0;
                        events |= (pcc_get(i,PCCR) & PCCR_PCEN) ? SS_READY : 0;
-                       debug(2, " event 0x%02x\n", events);
+                       pr_debug("m32r_pcc: event 0x%02x\n", events);
 
                        if (events)
                                pcmcia_parse_events(&socket[i].socket, events);
@@ -388,7 +379,7 @@ static irqreturn_t pcc_interrupt(int irq, void *dev)
        if (j == 20)
                printk(KERN_NOTICE "m32r-pcc: infinite loop in interrupt handler\n");
 
-       debug(4, "m32r-pcc: interrupt done\n");
+       pr_debug("m32r_pcc: interrupt done\n");
 
        return IRQ_RETVAL(handled);
 } /* pcc_interrupt */
@@ -422,7 +413,7 @@ static int _pcc_get_status(u_short sock, u_int *value)
        status = pcc_get(sock,PCCSIGCR);
        *value |= (status & PCCSIGCR_VEN) ? SS_POWERON : 0;
 
-       debug(3, "m32r-pcc: GetStatus(%d) = %#4.4x\n", sock, *value);
+       pr_debug("m32r_pcc: GetStatus(%d) = %#4.4x\n", sock, *value);
        return 0;
 } /* _get_status */
 
@@ -432,7 +423,7 @@ static int _pcc_set_socket(u_short sock, socket_state_t *state)
 {
        u_long reg = 0;
 
-       debug(3, "m32r-pcc: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
+       pr_debug("m32r_pcc: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
                  "io_irq %d, csc_mask %#2.2x)", sock, state->flags,
                  state->Vcc, state->Vpp, state->io_irq, state->csc_mask);
 
@@ -448,11 +439,11 @@ static int _pcc_set_socket(u_short sock, socket_state_t *state)
        }
 
        if (state->flags & SS_RESET) {
-               debug(3, ":RESET\n");
+               pr_debug("m32r_pcc: :RESET\n");
                reg |= PCCSIGCR_CRST;
        }
        if (state->flags & SS_OUTPUT_ENA){
-               debug(3, ":OUTPUT_ENA\n");
+               pr_debug("m32r_pcc: :OUTPUT_ENA\n");
                /* bit clear */
        } else {
                reg |= PCCSIGCR_SEN;
@@ -460,28 +451,26 @@ static int _pcc_set_socket(u_short sock, socket_state_t *state)
 
        pcc_set(sock,PCCSIGCR,reg);
 
-#ifdef CONFIG_PCMCIA_DEBUG
        if(state->flags & SS_IOCARD){
-               debug(3, ":IOCARD");
+               pr_debug("m32r_pcc: :IOCARD");
        }
        if (state->flags & SS_PWR_AUTO) {
-               debug(3, ":PWR_AUTO");
+               pr_debug("m32r_pcc: :PWR_AUTO");
        }
        if (state->csc_mask & SS_DETECT)
-               debug(3, ":csc-SS_DETECT");
+               pr_debug("m32r_pcc: :csc-SS_DETECT");
        if (state->flags & SS_IOCARD) {
                if (state->csc_mask & SS_STSCHG)
-                       debug(3, ":STSCHG");
+                       pr_debug("m32r_pcc: :STSCHG");
        } else {
                if (state->csc_mask & SS_BATDEAD)
-                       debug(3, ":BATDEAD");
+                       pr_debug("m32r_pcc: :BATDEAD");
                if (state->csc_mask & SS_BATWARN)
-                       debug(3, ":BATWARN");
+                       pr_debug("m32r_pcc: :BATWARN");
                if (state->csc_mask & SS_READY)
-                       debug(3, ":READY");
+                       pr_debug("m32r_pcc: :READY");
        }
-       debug(3, "\n");
-#endif
+       pr_debug("m32r_pcc: \n");
        return 0;
 } /* _set_socket */
 
@@ -491,7 +480,7 @@ static int _pcc_set_io_map(u_short sock, struct pccard_io_map *io)
 {
        u_char map;
 
-       debug(3, "m32r-pcc: SetIOMap(%d, %d, %#2.2x, %d ns, "
+       pr_debug("m32r_pcc: SetIOMap(%d, %d, %#2.2x, %d ns, "
                  "%#llx-%#llx)\n", sock, io->map, io->flags,
                  io->speed, (unsigned long long)io->start,
                  (unsigned long long)io->stop);
@@ -515,7 +504,7 @@ static int _pcc_set_mem_map(u_short sock, struct pccard_mem_map *mem)
 #endif
 #endif
 
-       debug(3, "m32r-pcc: SetMemMap(%d, %d, %#2.2x, %d ns, "
+       pr_debug("m32r_pcc: SetMemMap(%d, %d, %#2.2x, %d ns, "
                 "%#llx,  %#x)\n", sock, map, mem->flags,
                 mem->speed, (unsigned long long)mem->static_start,
                 mem->card_start);
@@ -662,7 +651,7 @@ static int pcc_set_mem_map(struct pcmcia_socket *s, struct pccard_mem_map *mem)
 
 static int pcc_init(struct pcmcia_socket *s)
 {
-       debug(4, "m32r-pcc: init call\n");
+       pr_debug("m32r_pcc: init call\n");
        return 0;
 }
 
index 403559ba49dd74954a2ea50516c6e82d4b973a61..7f79c4e169ae982175b48899333f686b32397365 100644 (file)
 #include <pcmcia/cs.h>
 #include <pcmcia/ss.h>
 
-#ifdef CONFIG_PCMCIA_DEBUG
-static int pc_debug;
-module_param(pc_debug, int, 0);
-#define dprintk(args...) printk(KERN_DEBUG "m8xx_pcmcia: " args);
-#else
-#define dprintk(args...)
-#endif
-
 #define pcmcia_info(args...) printk(KERN_INFO "m8xx_pcmcia: "args)
 #define pcmcia_error(args...) printk(KERN_ERR "m8xx_pcmcia: "args)
 
@@ -565,7 +557,7 @@ static irqreturn_t m8xx_interrupt(int irq, void *dev)
        unsigned int i, events, pscr, pipr, per;
        pcmconf8xx_t *pcmcia = socket[0].pcmcia;
 
-       dprintk("Interrupt!\n");
+       pr_debug("m8xx_pcmcia: Interrupt!\n");
        /* get interrupt sources */
 
        pscr = in_be32(&pcmcia->pcmc_pscr);
@@ -614,7 +606,7 @@ static irqreturn_t m8xx_interrupt(int irq, void *dev)
 
                /* call the handler */
 
-               dprintk("slot %u: events = 0x%02x, pscr = 0x%08x, "
+               pr_debug("m8xx_pcmcia: slot %u: events = 0x%02x, pscr = 0x%08x, "
                        "pipr = 0x%08x\n", i, events, pscr, pipr);
 
                if (events) {
@@ -641,7 +633,7 @@ static irqreturn_t m8xx_interrupt(int irq, void *dev)
        /* clear the interrupt sources */
        out_be32(&pcmcia->pcmc_pscr, pscr);
 
-       dprintk("Interrupt done.\n");
+       pr_debug("m8xx_pcmcia: Interrupt done.\n");
 
        return IRQ_HANDLED;
 }
@@ -815,7 +807,7 @@ static int m8xx_get_status(struct pcmcia_socket *sock, unsigned int *value)
                };
        }
 
-       dprintk("GetStatus(%d) = %#2.2x\n", lsock, *value);
+       pr_debug("m8xx_pcmcia: GetStatus(%d) = %#2.2x\n", lsock, *value);
        return 0;
 }
 
@@ -828,7 +820,7 @@ static int m8xx_set_socket(struct pcmcia_socket *sock, socket_state_t * state)
        unsigned long flags;
        pcmconf8xx_t *pcmcia = socket[0].pcmcia;
 
-       dprintk("SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
+       pr_debug("m8xx_pcmcia: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
                "io_irq %d, csc_mask %#2.2x)\n", lsock, state->flags,
                state->Vcc, state->Vpp, state->io_irq, state->csc_mask);
 
@@ -974,7 +966,7 @@ static int m8xx_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
 #define M8XX_SIZE (io->stop - io->start + 1)
 #define M8XX_BASE (PCMCIA_IO_WIN_BASE + io->start)
 
-       dprintk("SetIOMap(%d, %d, %#2.2x, %d ns, "
+       pr_debug("m8xx_pcmcia: SetIOMap(%d, %d, %#2.2x, %d ns, "
                "%#4.4llx-%#4.4llx)\n", lsock, io->map, io->flags,
                io->speed, (unsigned long long)io->start,
                (unsigned long long)io->stop);
@@ -988,7 +980,7 @@ static int m8xx_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
 
        if (io->flags & MAP_ACTIVE) {
 
-               dprintk("io->flags & MAP_ACTIVE\n");
+               pr_debug("m8xx_pcmcia: io->flags & MAP_ACTIVE\n");
 
                winnr = (PCMCIA_MEM_WIN_NO * PCMCIA_SOCKETS_NO)
                    + (lsock * PCMCIA_IO_WIN_NO) + io->map;
@@ -1018,8 +1010,8 @@ static int m8xx_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
 
                out_be32(&w->or, reg);
 
-               dprintk("Socket %u: Mapped io window %u at %#8.8x, "
-                       "OR = %#8.8x.\n", lsock, io->map, w->br, w->or);
+               pr_debug("m8xx_pcmcia: Socket %u: Mapped io window %u at "
+                       "%#8.8x, OR = %#8.8x.\n", lsock, io->map, w->br, w->or);
        } else {
                /* shutdown IO window */
                winnr = (PCMCIA_MEM_WIN_NO * PCMCIA_SOCKETS_NO)
@@ -1033,14 +1025,14 @@ static int m8xx_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
                out_be32(&w->or, 0);    /* turn off window */
                out_be32(&w->br, 0);    /* turn off base address */
 
-               dprintk("Socket %u: Unmapped io window %u at %#8.8x, "
-                       "OR = %#8.8x.\n", lsock, io->map, w->br, w->or);
+               pr_debug("m8xx_pcmcia: Socket %u: Unmapped io window %u at "
+                       "%#8.8x, OR = %#8.8x.\n", lsock, io->map, w->br, w->or);
        }
 
        /* copy the struct and modify the copy */
        s->io_win[io->map] = *io;
        s->io_win[io->map].flags &= (MAP_WRPROT | MAP_16BIT | MAP_ACTIVE);
-       dprintk("SetIOMap exit\n");
+       pr_debug("m8xx_pcmcia: SetIOMap exit\n");
 
        return 0;
 }
@@ -1055,7 +1047,7 @@ static int m8xx_set_mem_map(struct pcmcia_socket *sock,
        unsigned int reg, winnr;
        pcmconf8xx_t *pcmcia = s->pcmcia;
 
-       dprintk("SetMemMap(%d, %d, %#2.2x, %d ns, "
+       pr_debug("m8xx_pcmcia: SetMemMap(%d, %d, %#2.2x, %d ns, "
                "%#5.5llx, %#5.5x)\n", lsock, mem->map, mem->flags,
                mem->speed, (unsigned long long)mem->static_start,
                mem->card_start);
@@ -1098,7 +1090,7 @@ static int m8xx_set_mem_map(struct pcmcia_socket *sock,
 
        out_be32(&w->or, reg);
 
-       dprintk("Socket %u: Mapped memory window %u at %#8.8x, "
+       pr_debug("m8xx_pcmcia: Socket %u: Mapped memory window %u at %#8.8x, "
                "OR = %#8.8x.\n", lsock, mem->map, w->br, w->or);
 
        if (mem->flags & MAP_ACTIVE) {
@@ -1108,7 +1100,7 @@ static int m8xx_set_mem_map(struct pcmcia_socket *sock,
                    + mem->card_start;
        }
 
-       dprintk("SetMemMap(%d, %d, %#2.2x, %d ns, "
+       pr_debug("m8xx_pcmcia: SetMemMap(%d, %d, %#2.2x, %d ns, "
                "%#5.5llx, %#5.5x)\n", lsock, mem->map, mem->flags,
                mem->speed, (unsigned long long)mem->static_start,
                mem->card_start);
@@ -1129,7 +1121,7 @@ static int m8xx_sock_init(struct pcmcia_socket *sock)
        pccard_io_map io = { 0, 0, 0, 0, 1 };
        pccard_mem_map mem = { 0, 0, 0, 0, 0, 0 };
 
-       dprintk("sock_init(%d)\n", s);
+       pr_debug("m8xx_pcmcia: sock_init(%d)\n", s);
 
        m8xx_set_socket(sock, &dead_socket);
        for (i = 0; i < PCMCIA_IO_WIN_NO; i++) {
index 72188c462c9cc6222b82ff8e79c87e35b3731201..624442fc0d35ceb7d609be947fb2c7dda2e20d5d 100644 (file)
 #ifndef _LINUX_O2MICRO_H
 #define _LINUX_O2MICRO_H
 
-#ifndef PCI_VENDOR_ID_O2
-#define PCI_VENDOR_ID_O2               0x1217
-#endif
-#ifndef PCI_DEVICE_ID_O2_6729
-#define PCI_DEVICE_ID_O2_6729          0x6729
-#endif
-#ifndef PCI_DEVICE_ID_O2_6730
-#define PCI_DEVICE_ID_O2_6730          0x673a
-#endif
-#ifndef PCI_DEVICE_ID_O2_6832
-#define PCI_DEVICE_ID_O2_6832          0x6832
-#endif
-#ifndef PCI_DEVICE_ID_O2_6836
-#define PCI_DEVICE_ID_O2_6836          0x6836
-#endif
-#ifndef PCI_DEVICE_ID_O2_6812
-#define PCI_DEVICE_ID_O2_6812          0x6872
-#endif
-#ifndef PCI_DEVICE_ID_O2_6933
-#define PCI_DEVICE_ID_O2_6933           0x6933
-#endif
-
 /* Additional PCI configuration registers */
 
 #define O2_MUX_CONTROL         0x90    /* 32 bit */
index 30cf71d2ee235ce57cbef4d32600f63dd7b8f324..c4d7908fa37f1974f413627cd3b274512ec872ae 100644 (file)
@@ -58,17 +58,6 @@ typedef struct user_info_t {
 } user_info_t;
 
 
-#ifdef CONFIG_PCMCIA_DEBUG
-extern int ds_pc_debug;
-
-#define ds_dbg(lvl, fmt, arg...) do {          \
-       if (ds_pc_debug >= lvl)                         \
-               printk(KERN_DEBUG "ds: " fmt , ## arg);         \
-} while (0)
-#else
-#define ds_dbg(lvl, fmt, arg...) do { } while (0)
-#endif
-
 static struct pcmcia_device *get_pcmcia_device(struct pcmcia_socket *s,
                                                unsigned int function)
 {
@@ -229,6 +218,61 @@ static int pcmcia_adjust_resource_info(adjust_t *adj)
        return (ret);
 }
 
+
+/** pcmcia_get_window
+ */
+static int pcmcia_get_window(struct pcmcia_socket *s, window_handle_t *wh_out,
+                       window_handle_t wh, win_req_t *req)
+{
+       pccard_mem_map *win;
+       window_handle_t w;
+
+       wh--;
+       if (!s || !(s->state & SOCKET_PRESENT))
+               return -ENODEV;
+       if (wh >= MAX_WIN)
+               return -EINVAL;
+       for (w = wh; w < MAX_WIN; w++)
+               if (s->state & SOCKET_WIN_REQ(w))
+                       break;
+       if (w == MAX_WIN)
+               return -EINVAL;
+       win = &s->win[w];
+       req->Base = win->res->start;
+       req->Size = win->res->end - win->res->start + 1;
+       req->AccessSpeed = win->speed;
+       req->Attributes = 0;
+       if (win->flags & MAP_ATTRIB)
+               req->Attributes |= WIN_MEMORY_TYPE_AM;
+       if (win->flags & MAP_ACTIVE)
+               req->Attributes |= WIN_ENABLE;
+       if (win->flags & MAP_16BIT)
+               req->Attributes |= WIN_DATA_WIDTH_16;
+       if (win->flags & MAP_USE_WAIT)
+               req->Attributes |= WIN_USE_WAIT;
+
+       *wh_out = w + 1;
+       return 0;
+} /* pcmcia_get_window */
+
+
+/** pcmcia_get_mem_page
+ *
+ * Change the card address of an already open memory window.
+ */
+static int pcmcia_get_mem_page(struct pcmcia_socket *skt, window_handle_t wh,
+                       memreq_t *req)
+{
+       wh--;
+       if (wh >= MAX_WIN)
+               return -EINVAL;
+
+       req->Page = 0;
+       req->CardOffset = skt->win[wh].card_start;
+       return 0;
+} /* pcmcia_get_mem_page */
+
+
 /** pccard_get_status
  *
  * Get the current socket state bits.  We don't support the latched
@@ -431,7 +475,7 @@ static int bind_request(struct pcmcia_socket *s, bind_info_t *bind_info)
        if (!s)
                return -EINVAL;
 
-       ds_dbg(2, "bind_request(%d, '%s')\n", s->sock,
+       pr_debug("bind_request(%d, '%s')\n", s->sock,
               (char *)bind_info->dev_info);
 
        p_drv = get_pcmcia_driver(&bind_info->dev_info);
@@ -623,7 +667,7 @@ static int ds_open(struct inode *inode, struct file *file)
     static int warning_printed = 0;
     int ret = 0;
 
-    ds_dbg(0, "ds_open(socket %d)\n", i);
+    pr_debug("ds_open(socket %d)\n", i);
 
     lock_kernel();
     s = pcmcia_get_socket_by_nr(i);
@@ -685,7 +729,7 @@ static int ds_release(struct inode *inode, struct file *file)
     struct pcmcia_socket *s;
     user_info_t *user, **link;
 
-    ds_dbg(0, "ds_release(socket %d)\n", iminor(inode));
+    pr_debug("ds_release(socket %d)\n", iminor(inode));
 
     user = file->private_data;
     if (CHECK_USER(user))
@@ -719,7 +763,7 @@ static ssize_t ds_read(struct file *file, char __user *buf,
     user_info_t *user;
     int ret;
 
-    ds_dbg(2, "ds_read(socket %d)\n", iminor(file->f_path.dentry->d_inode));
+    pr_debug("ds_read(socket %d)\n", iminor(file->f_path.dentry->d_inode));
 
     if (count < 4)
        return -EINVAL;
@@ -744,7 +788,7 @@ static ssize_t ds_read(struct file *file, char __user *buf,
 static ssize_t ds_write(struct file *file, const char __user *buf,
                        size_t count, loff_t *ppos)
 {
-    ds_dbg(2, "ds_write(socket %d)\n", iminor(file->f_path.dentry->d_inode));
+    pr_debug("ds_write(socket %d)\n", iminor(file->f_path.dentry->d_inode));
 
     if (count != 4)
        return -EINVAL;
@@ -762,7 +806,7 @@ static u_int ds_poll(struct file *file, poll_table *wait)
     struct pcmcia_socket *s;
     user_info_t *user;
 
-    ds_dbg(2, "ds_poll(socket %d)\n", iminor(file->f_path.dentry->d_inode));
+    pr_debug("ds_poll(socket %d)\n", iminor(file->f_path.dentry->d_inode));
 
     user = file->private_data;
     if (CHECK_USER(user))
@@ -790,7 +834,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
     ds_ioctl_arg_t *buf;
     user_info_t *user;
 
-    ds_dbg(2, "ds_ioctl(socket %d, %#x, %#lx)\n", iminor(inode), cmd, arg);
+    pr_debug("ds_ioctl(socket %d, %#x, %#lx)\n", iminor(inode), cmd, arg);
 
     user = file->private_data;
     if (CHECK_USER(user))
@@ -809,13 +853,13 @@ static int ds_ioctl(struct inode * inode, struct file * file,
 
     if (cmd & IOC_IN) {
        if (!access_ok(VERIFY_READ, uarg, size)) {
-           ds_dbg(3, "ds_ioctl(): verify_read = %d\n", -EFAULT);
+           pr_debug("ds_ioctl(): verify_read = %d\n", -EFAULT);
            return -EFAULT;
        }
     }
     if (cmd & IOC_OUT) {
        if (!access_ok(VERIFY_WRITE, uarg, size)) {
-           ds_dbg(3, "ds_ioctl(): verify_write = %d\n", -EFAULT);
+           pr_debug("ds_ioctl(): verify_write = %d\n", -EFAULT);
            return -EFAULT;
        }
     }
@@ -927,15 +971,15 @@ static int ds_ioctl(struct inode * inode, struct file * file,
        goto free_out;
        break;
     case DS_GET_FIRST_WINDOW:
-       ret = pcmcia_get_window(s, &buf->win_info.handle, 0,
+       ret = pcmcia_get_window(s, &buf->win_info.handle, 1,
                        &buf->win_info.window);
        break;
     case DS_GET_NEXT_WINDOW:
        ret = pcmcia_get_window(s, &buf->win_info.handle,
-                       buf->win_info.handle->index + 1, &buf->win_info.window);
+                       buf->win_info.handle + 1, &buf->win_info.window);
        break;
     case DS_GET_MEM_PAGE:
-       ret = pcmcia_get_mem_page(buf->win_info.handle,
+       ret = pcmcia_get_mem_page(s, buf->win_info.handle,
                           &buf->win_info.map);
        break;
     case DS_REPLACE_CIS:
@@ -962,7 +1006,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
     }
 
     if ((err == 0) && (ret != 0)) {
-       ds_dbg(2, "ds_ioctl: ret = %d\n", ret);
+       pr_debug("ds_ioctl: ret = %d\n", ret);
        switch (ret) {
        case -ENODEV:
        case -EINVAL:
index d919e96c0afd62f5bde18da2ca0a974b63b66079..a8bf8c1b45ede688ab3613eeaf570356d0baa795 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/delay.h>
 #include <linux/pci.h>
 #include <linux/device.h>
+#include <linux/netdevice.h>
 
 #include <pcmcia/cs_types.h>
 #include <pcmcia/ss.h>
@@ -43,21 +44,6 @@ static u8 pcmcia_used_irq[NR_IRQS];
 #endif
 
 
-#ifdef CONFIG_PCMCIA_DEBUG
-extern int ds_pc_debug;
-
-#define ds_dbg(skt, lvl, fmt, arg...) do {                     \
-       if (ds_pc_debug >= lvl)                                 \
-               dev_printk(KERN_DEBUG, &skt->dev,               \
-                          "pcmcia_resource: " fmt,             \
-                          ## arg);                             \
-} while (0)
-#else
-#define ds_dbg(skt, lvl, fmt, arg...) do { } while (0)
-#endif
-
-
-
 /** alloc_io_space
  *
  * Special stuff for managing IO windows, because they are scarce
@@ -72,14 +58,14 @@ static int alloc_io_space(struct pcmcia_socket *s, u_int attr,
        align = (*base) ? (lines ? 1<<lines : 0) : 1;
        if (align && (align < num)) {
                if (*base) {
-                       ds_dbg(s, 0, "odd IO request: num %#x align %#x\n",
+                       dev_dbg(&s->dev, "odd IO request: num %#x align %#x\n",
                               num, align);
                        align = 0;
                } else
                        while (align && (align < num)) align <<= 1;
        }
        if (*base & ~(align-1)) {
-               ds_dbg(s, 0, "odd IO request: base %#x align %#x\n",
+               dev_dbg(&s->dev, "odd IO request: base %#x align %#x\n",
                       *base, align);
                align = 0;
        }
@@ -173,8 +159,10 @@ int pcmcia_access_configuration_register(struct pcmcia_device *p_dev,
        s = p_dev->socket;
        c = p_dev->function_config;
 
-       if (!(c->state & CONFIG_LOCKED))
+       if (!(c->state & CONFIG_LOCKED)) {
+               dev_dbg(&s->dev, "Configuration isnt't locked\n");
                return -EACCES;
+       }
 
        addr = (c->ConfigBase + reg->Offset) >> 1;
 
@@ -188,6 +176,7 @@ int pcmcia_access_configuration_register(struct pcmcia_device *p_dev,
                pcmcia_write_cis_mem(s, 1, addr, 1, &val);
                break;
        default:
+               dev_dbg(&s->dev, "Invalid conf register request\n");
                return -EINVAL;
                break;
        }
@@ -196,68 +185,21 @@ int pcmcia_access_configuration_register(struct pcmcia_device *p_dev,
 EXPORT_SYMBOL(pcmcia_access_configuration_register);
 
 
-/** pcmcia_get_window
- */
-int pcmcia_get_window(struct pcmcia_socket *s, window_handle_t *handle,
-                     int idx, win_req_t *req)
-{
-       window_t *win;
-       int w;
-
-       if (!s || !(s->state & SOCKET_PRESENT))
-               return -ENODEV;
-       for (w = idx; w < MAX_WIN; w++)
-               if (s->state & SOCKET_WIN_REQ(w))
-                       break;
-       if (w == MAX_WIN)
-               return -EINVAL;
-       win = &s->win[w];
-       req->Base = win->ctl.res->start;
-       req->Size = win->ctl.res->end - win->ctl.res->start + 1;
-       req->AccessSpeed = win->ctl.speed;
-       req->Attributes = 0;
-       if (win->ctl.flags & MAP_ATTRIB)
-               req->Attributes |= WIN_MEMORY_TYPE_AM;
-       if (win->ctl.flags & MAP_ACTIVE)
-               req->Attributes |= WIN_ENABLE;
-       if (win->ctl.flags & MAP_16BIT)
-               req->Attributes |= WIN_DATA_WIDTH_16;
-       if (win->ctl.flags & MAP_USE_WAIT)
-               req->Attributes |= WIN_USE_WAIT;
-       *handle = win;
-       return 0;
-} /* pcmcia_get_window */
-EXPORT_SYMBOL(pcmcia_get_window);
-
-
-/** pcmcia_get_mem_page
- *
- * Change the card address of an already open memory window.
- */
-int pcmcia_get_mem_page(window_handle_t win, memreq_t *req)
+int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t wh,
+                       memreq_t *req)
 {
-       if ((win == NULL) || (win->magic != WINDOW_MAGIC))
-               return -EINVAL;
-       req->Page = 0;
-       req->CardOffset = win->ctl.card_start;
-       return 0;
-} /* pcmcia_get_mem_page */
-EXPORT_SYMBOL(pcmcia_get_mem_page);
-
+       struct pcmcia_socket *s = p_dev->socket;
 
-int pcmcia_map_mem_page(window_handle_t win, memreq_t *req)
-{
-       struct pcmcia_socket *s;
-       if ((win == NULL) || (win->magic != WINDOW_MAGIC))
+       wh--;
+       if (wh >= MAX_WIN)
                return -EINVAL;
-       s = win->sock;
        if (req->Page != 0) {
-               ds_dbg(s, 0, "failure: requested page is zero\n");
+               dev_dbg(&s->dev, "failure: requested page is zero\n");
                return -EINVAL;
        }
-       win->ctl.card_start = req->CardOffset;
-       if (s->ops->set_mem_map(s, &win->ctl) != 0) {
-               ds_dbg(s, 0, "failed to set_mem_map\n");
+       s->win[wh].card_start = req->CardOffset;
+       if (s->ops->set_mem_map(s, &s->win[wh]) != 0) {
+               dev_dbg(&s->dev, "failed to set_mem_map\n");
                return -EIO;
        }
        return 0;
@@ -278,10 +220,14 @@ int pcmcia_modify_configuration(struct pcmcia_device *p_dev,
        s = p_dev->socket;
        c = p_dev->function_config;
 
-       if (!(s->state & SOCKET_PRESENT))
+       if (!(s->state & SOCKET_PRESENT)) {
+               dev_dbg(&s->dev, "No card present\n");
                return -ENODEV;
-       if (!(c->state & CONFIG_LOCKED))
+       }
+       if (!(c->state & CONFIG_LOCKED)) {
+               dev_dbg(&s->dev, "Configuration isnt't locked\n");
                return -EACCES;
+       }
 
        if (mod->Attributes & CONF_IRQ_CHANGE_VALID) {
                if (mod->Attributes & CONF_ENABLE_IRQ) {
@@ -295,7 +241,7 @@ int pcmcia_modify_configuration(struct pcmcia_device *p_dev,
        }
 
        if (mod->Attributes & CONF_VCC_CHANGE_VALID) {
-               ds_dbg(s, 0, "changing Vcc is not allowed at this time\n");
+               dev_dbg(&s->dev, "changing Vcc is not allowed at this time\n");
                return -EINVAL;
        }
 
@@ -303,7 +249,7 @@ int pcmcia_modify_configuration(struct pcmcia_device *p_dev,
        if ((mod->Attributes & CONF_VPP1_CHANGE_VALID) &&
            (mod->Attributes & CONF_VPP2_CHANGE_VALID)) {
                if (mod->Vpp1 != mod->Vpp2) {
-                       ds_dbg(s, 0, "Vpp1 and Vpp2 must be the same\n");
+                       dev_dbg(&s->dev, "Vpp1 and Vpp2 must be the same\n");
                        return -EINVAL;
                }
                s->socket.Vpp = mod->Vpp1;
@@ -314,7 +260,7 @@ int pcmcia_modify_configuration(struct pcmcia_device *p_dev,
                }
        } else if ((mod->Attributes & CONF_VPP1_CHANGE_VALID) ||
                   (mod->Attributes & CONF_VPP2_CHANGE_VALID)) {
-               ds_dbg(s, 0, "changing Vcc is not allowed at this time\n");
+               dev_dbg(&s->dev, "changing Vcc is not allowed at this time\n");
                return -EINVAL;
        }
 
@@ -425,11 +371,11 @@ static int pcmcia_release_irq(struct pcmcia_device *p_dev, irq_req_t *req)
        if (c->state & CONFIG_LOCKED)
                return -EACCES;
        if (c->irq.Attributes != req->Attributes) {
-               ds_dbg(s, 0, "IRQ attributes must match assigned ones\n");
+               dev_dbg(&s->dev, "IRQ attributes must match assigned ones\n");
                return -EINVAL;
        }
        if (s->irq.AssignedIRQ != req->AssignedIRQ) {
-               ds_dbg(s, 0, "IRQ must match assigned one\n");
+               dev_dbg(&s->dev, "IRQ must match assigned one\n");
                return -EINVAL;
        }
        if (--s->irq.Config == 0) {
@@ -437,8 +383,8 @@ static int pcmcia_release_irq(struct pcmcia_device *p_dev, irq_req_t *req)
                s->irq.AssignedIRQ = 0;
        }
 
-       if (req->Attributes & IRQ_HANDLE_PRESENT) {
-               free_irq(req->AssignedIRQ, req->Instance);
+       if (req->Handler) {
+               free_irq(req->AssignedIRQ, p_dev->priv);
        }
 
 #ifdef CONFIG_PCMCIA_PROBE
@@ -449,30 +395,34 @@ static int pcmcia_release_irq(struct pcmcia_device *p_dev, irq_req_t *req)
 } /* pcmcia_release_irq */
 
 
-int pcmcia_release_window(window_handle_t win)
+int pcmcia_release_window(struct pcmcia_device *p_dev, window_handle_t wh)
 {
-       struct pcmcia_socket *s;
+       struct pcmcia_socket *s = p_dev->socket;
+       pccard_mem_map *win;
 
-       if ((win == NULL) || (win->magic != WINDOW_MAGIC))
+       wh--;
+       if (wh >= MAX_WIN)
                return -EINVAL;
-       s = win->sock;
-       if (!(win->handle->_win & CLIENT_WIN_REQ(win->index)))
+
+       win = &s->win[wh];
+
+       if (!(p_dev->_win & CLIENT_WIN_REQ(wh))) {
+               dev_dbg(&s->dev, "not releasing unknown window\n");
                return -EINVAL;
+       }
 
        /* Shut down memory window */
-       win->ctl.flags &= ~MAP_ACTIVE;
-       s->ops->set_mem_map(s, &win->ctl);
-       s->state &= ~SOCKET_WIN_REQ(win->index);
+       win->flags &= ~MAP_ACTIVE;
+       s->ops->set_mem_map(s, win);
+       s->state &= ~SOCKET_WIN_REQ(wh);
 
        /* Release system memory */
-       if (win->ctl.res) {
-               release_resource(win->ctl.res);
-               kfree(win->ctl.res);
-               win->ctl.res = NULL;
+       if (win->res) {
+               release_resource(win->res);
+               kfree(win->res);
+               win->res = NULL;
        }
-       win->handle->_win &= ~CLIENT_WIN_REQ(win->index);
-
-       win->magic = 0;
+       p_dev->_win &= ~CLIENT_WIN_REQ(wh);
 
        return 0;
 } /* pcmcia_release_window */
@@ -492,12 +442,14 @@ int pcmcia_request_configuration(struct pcmcia_device *p_dev,
                return -ENODEV;
 
        if (req->IntType & INT_CARDBUS) {
-               ds_dbg(p_dev->socket, 0, "IntType may not be INT_CARDBUS\n");
+               dev_dbg(&s->dev, "IntType may not be INT_CARDBUS\n");
                return -EINVAL;
        }
        c = p_dev->function_config;
-       if (c->state & CONFIG_LOCKED)
+       if (c->state & CONFIG_LOCKED) {
+               dev_dbg(&s->dev, "Configuration is locked\n");
                return -EACCES;
+       }
 
        /* Do power control.  We don't allow changes in Vcc. */
        s->socket.Vpp = req->Vpp;
@@ -609,40 +561,44 @@ int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req)
        struct pcmcia_socket *s = p_dev->socket;
        config_t *c;
 
-       if (!(s->state & SOCKET_PRESENT))
+       if (!(s->state & SOCKET_PRESENT)) {
+               dev_dbg(&s->dev, "No card present\n");
                return -ENODEV;
+       }
 
        if (!req)
                return -EINVAL;
        c = p_dev->function_config;
-       if (c->state & CONFIG_LOCKED)
+       if (c->state & CONFIG_LOCKED) {
+               dev_dbg(&s->dev, "Configuration is locked\n");
                return -EACCES;
+       }
        if (c->state & CONFIG_IO_REQ) {
-               ds_dbg(s, 0, "IO already configured\n");
+               dev_dbg(&s->dev, "IO already configured\n");
                return -EBUSY;
        }
        if (req->Attributes1 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS)) {
-               ds_dbg(s, 0, "bad attribute setting for IO region 1\n");
+               dev_dbg(&s->dev, "bad attribute setting for IO region 1\n");
                return -EINVAL;
        }
        if ((req->NumPorts2 > 0) &&
            (req->Attributes2 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS))) {
-               ds_dbg(s, 0, "bad attribute setting for IO region 2\n");
+               dev_dbg(&s->dev, "bad attribute setting for IO region 2\n");
                return -EINVAL;
        }
 
-       ds_dbg(s, 1, "trying to allocate resource 1\n");
+       dev_dbg(&s->dev, "trying to allocate resource 1\n");
        if (alloc_io_space(s, req->Attributes1, &req->BasePort1,
                           req->NumPorts1, req->IOAddrLines)) {
-               ds_dbg(s, 0, "allocation of resource 1 failed\n");
+               dev_dbg(&s->dev, "allocation of resource 1 failed\n");
                return -EBUSY;
        }
 
        if (req->NumPorts2) {
-               ds_dbg(s, 1, "trying to allocate resource 2\n");
+               dev_dbg(&s->dev, "trying to allocate resource 2\n");
                if (alloc_io_space(s, req->Attributes2, &req->BasePort2,
                                   req->NumPorts2, req->IOAddrLines)) {
-                       ds_dbg(s, 0, "allocation of resource 2 failed\n");
+                       dev_dbg(&s->dev, "allocation of resource 2 failed\n");
                        release_io_space(s, req->BasePort1, req->NumPorts1);
                        return -EBUSY;
                }
@@ -680,13 +636,17 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
        int ret = -EINVAL, irq = 0;
        int type;
 
-       if (!(s->state & SOCKET_PRESENT))
+       if (!(s->state & SOCKET_PRESENT)) {
+               dev_dbg(&s->dev, "No card present\n");
                return -ENODEV;
+       }
        c = p_dev->function_config;
-       if (c->state & CONFIG_LOCKED)
+       if (c->state & CONFIG_LOCKED) {
+               dev_dbg(&s->dev, "Configuration is locked\n");
                return -EACCES;
+       }
        if (c->state & CONFIG_IRQ_REQ) {
-               ds_dbg(s, 0, "IRQ already configured\n");
+               dev_dbg(&s->dev, "IRQ already configured\n");
                return -EBUSY;
        }
 
@@ -704,7 +664,7 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
        /* if the underlying IRQ infrastructure allows for it, only allocate
         * the IRQ, but do not enable it
         */
-       if (!(req->Attributes & IRQ_HANDLE_PRESENT))
+       if (!(req->Handler))
                type |= IRQ_NOAUTOEN;
 #endif /* IRQ_NOAUTOEN */
 
@@ -714,7 +674,7 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
        } else {
                int try;
                u32 mask = s->irq_mask;
-               void *data = &p_dev->dev.driver; /* something unique to this device */
+               void *data = p_dev; /* something unique to this device */
 
                for (try = 0; try < 64; try++) {
                        irq = try % 32;
@@ -731,12 +691,12 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
                         * registering a dummy handle works, i.e. if the IRQ isn't
                         * marked as used by the kernel resource management core */
                        ret = request_irq(irq,
-                                         (req->Attributes & IRQ_HANDLE_PRESENT) ? req->Handler : test_action,
+                                         (req->Handler) ? req->Handler : test_action,
                                          type,
                                          p_dev->devname,
-                                         (req->Attributes & IRQ_HANDLE_PRESENT) ? req->Instance : data);
+                                         (req->Handler) ? p_dev->priv : data);
                        if (!ret) {
-                               if (!(req->Attributes & IRQ_HANDLE_PRESENT))
+                               if (!req->Handler)
                                        free_irq(irq, data);
                                break;
                        }
@@ -745,17 +705,22 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
 #endif
        /* only assign PCI irq if no IRQ already assigned */
        if (ret && !s->irq.AssignedIRQ) {
-               if (!s->pci_irq)
+               if (!s->pci_irq) {
+                       dev_printk(KERN_INFO, &s->dev, "no IRQ found\n");
                        return ret;
+               }
                type = IRQF_SHARED;
                irq = s->pci_irq;
        }
 
-       if (ret && (req->Attributes & IRQ_HANDLE_PRESENT)) {
+       if (ret && req->Handler) {
                ret = request_irq(irq, req->Handler, type,
-                                 p_dev->devname, req->Instance);
-               if (ret)
+                                 p_dev->devname, p_dev->priv);
+               if (ret) {
+                       dev_printk(KERN_INFO, &s->dev,
+                               "request_irq() failed\n");
                        return ret;
+               }
        }
 
        /* Make sure the fact the request type was overridden is passed back */
@@ -787,17 +752,19 @@ EXPORT_SYMBOL(pcmcia_request_irq);
  * Request_window() establishes a mapping between card memory space
  * and system memory space.
  */
-int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req, window_handle_t *wh)
+int pcmcia_request_window(struct pcmcia_device *p_dev, win_req_t *req, window_handle_t *wh)
 {
-       struct pcmcia_socket *s = (*p_dev)->socket;
-       window_t *win;
+       struct pcmcia_socket *s = p_dev->socket;
+       pccard_mem_map *win;
        u_long align;
        int w;
 
-       if (!(s->state & SOCKET_PRESENT))
+       if (!(s->state & SOCKET_PRESENT)) {
+               dev_dbg(&s->dev, "No card present\n");
                return -ENODEV;
+       }
        if (req->Attributes & (WIN_PAGED | WIN_SHARED)) {
-               ds_dbg(s, 0, "bad attribute setting for iomem region\n");
+               dev_dbg(&s->dev, "bad attribute setting for iomem region\n");
                return -EINVAL;
        }
 
@@ -808,12 +775,12 @@ int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req, window_h
                  (req->Attributes & WIN_STRICT_ALIGN)) ?
                 req->Size : s->map_size);
        if (req->Size & (s->map_size-1)) {
-               ds_dbg(s, 0, "invalid map size\n");
+               dev_dbg(&s->dev, "invalid map size\n");
                return -EINVAL;
        }
        if ((req->Base && (s->features & SS_CAP_STATIC_MAP)) ||
            (req->Base & (align-1))) {
-               ds_dbg(s, 0, "invalid base address\n");
+               dev_dbg(&s->dev, "invalid base address\n");
                return -EINVAL;
        }
        if (req->Base)
@@ -823,52 +790,48 @@ int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req, window_h
        for (w = 0; w < MAX_WIN; w++)
                if (!(s->state & SOCKET_WIN_REQ(w))) break;
        if (w == MAX_WIN) {
-               ds_dbg(s, 0, "all windows are used already\n");
+               dev_dbg(&s->dev, "all windows are used already\n");
                return -EINVAL;
        }
 
        win = &s->win[w];
-       win->magic = WINDOW_MAGIC;
-       win->index = w;
-       win->handle = *p_dev;
-       win->sock = s;
 
        if (!(s->features & SS_CAP_STATIC_MAP)) {
-               win->ctl.res = pcmcia_find_mem_region(req->Base, req->Size, align,
+               win->res = pcmcia_find_mem_region(req->Base, req->Size, align,
                                                      (req->Attributes & WIN_MAP_BELOW_1MB), s);
-               if (!win->ctl.res) {
-                       ds_dbg(s, 0, "allocating mem region failed\n");
+               if (!win->res) {
+                       dev_dbg(&s->dev, "allocating mem region failed\n");
                        return -EINVAL;
                }
        }
-       (*p_dev)->_win |= CLIENT_WIN_REQ(w);
+       p_dev->_win |= CLIENT_WIN_REQ(w);
 
        /* Configure the socket controller */
-       win->ctl.map = w+1;
-       win->ctl.flags = 0;
-       win->ctl.speed = req->AccessSpeed;
+       win->map = w+1;
+       win->flags = 0;
+       win->speed = req->AccessSpeed;
        if (req->Attributes & WIN_MEMORY_TYPE)
-               win->ctl.flags |= MAP_ATTRIB;
+               win->flags |= MAP_ATTRIB;
        if (req->Attributes & WIN_ENABLE)
-               win->ctl.flags |= MAP_ACTIVE;
+               win->flags |= MAP_ACTIVE;
        if (req->Attributes & WIN_DATA_WIDTH_16)
-               win->ctl.flags |= MAP_16BIT;
+               win->flags |= MAP_16BIT;
        if (req->Attributes & WIN_USE_WAIT)
-               win->ctl.flags |= MAP_USE_WAIT;
-       win->ctl.card_start = 0;
-       if (s->ops->set_mem_map(s, &win->ctl) != 0) {
-               ds_dbg(s, 0, "failed to set memory mapping\n");
+               win->flags |= MAP_USE_WAIT;
+       win->card_start = 0;
+       if (s->ops->set_mem_map(s, win) != 0) {
+               dev_dbg(&s->dev, "failed to set memory mapping\n");
                return -EIO;
        }
        s->state |= SOCKET_WIN_REQ(w);
 
        /* Return window handle */
        if (s->features & SS_CAP_STATIC_MAP) {
-               req->Base = win->ctl.static_start;
+               req->Base = win->static_start;
        } else {
-               req->Base = win->ctl.res->start;
+               req->Base = win->res->start;
        }
-       *wh = win;
+       *wh = w + 1;
 
        return 0;
 } /* pcmcia_request_window */
@@ -879,18 +842,45 @@ void pcmcia_disable_device(struct pcmcia_device *p_dev) {
        pcmcia_release_io(p_dev, &p_dev->io);
        pcmcia_release_irq(p_dev, &p_dev->irq);
        if (p_dev->win)
-               pcmcia_release_window(p_dev->win);
+               pcmcia_release_window(p_dev, p_dev->win);
 }
 EXPORT_SYMBOL(pcmcia_disable_device);
 
 
 struct pcmcia_cfg_mem {
-       tuple_t tuple;
+       struct pcmcia_device *p_dev;
+       void *priv_data;
+       int (*conf_check) (struct pcmcia_device *p_dev,
+                          cistpl_cftable_entry_t *cfg,
+                          cistpl_cftable_entry_t *dflt,
+                          unsigned int vcc,
+                          void *priv_data);
        cisparse_t parse;
-       u8 buf[256];
        cistpl_cftable_entry_t dflt;
 };
 
+/**
+ * pcmcia_do_loop_config() - internal helper for pcmcia_loop_config()
+ *
+ * pcmcia_do_loop_config() is the internal callback for the call from
+ * pcmcia_loop_config() to pccard_loop_tuple(). Data is transferred
+ * by a struct pcmcia_cfg_mem.
+ */
+static int pcmcia_do_loop_config(tuple_t *tuple, cisparse_t *parse, void *priv)
+{
+       cistpl_cftable_entry_t *cfg = &parse->cftable_entry;
+       struct pcmcia_cfg_mem *cfg_mem = priv;
+
+       /* default values */
+       cfg_mem->p_dev->conf.ConfigIndex = cfg->index;
+       if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
+               cfg_mem->dflt = *cfg;
+
+       return cfg_mem->conf_check(cfg_mem->p_dev, cfg, &cfg_mem->dflt,
+                                  cfg_mem->p_dev->socket->socket.Vcc,
+                                  cfg_mem->priv_data);
+}
+
 /**
  * pcmcia_loop_config() - loop over configuration options
  * @p_dev:     the struct pcmcia_device which we need to loop for.
@@ -913,48 +903,174 @@ int pcmcia_loop_config(struct pcmcia_device *p_dev,
                       void *priv_data)
 {
        struct pcmcia_cfg_mem *cfg_mem;
-
-       tuple_t *tuple;
        int ret;
-       unsigned int vcc;
 
        cfg_mem = kzalloc(sizeof(struct pcmcia_cfg_mem), GFP_KERNEL);
        if (cfg_mem == NULL)
                return -ENOMEM;
 
-       /* get the current Vcc setting */
-       vcc = p_dev->socket->socket.Vcc;
+       cfg_mem->p_dev = p_dev;
+       cfg_mem->conf_check = conf_check;
+       cfg_mem->priv_data = priv_data;
 
-       tuple = &cfg_mem->tuple;
-       tuple->TupleData = cfg_mem->buf;
-       tuple->TupleDataMax = 255;
-       tuple->TupleOffset = 0;
-       tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       tuple->Attributes = 0;
+       ret = pccard_loop_tuple(p_dev->socket, p_dev->func,
+                               CISTPL_CFTABLE_ENTRY, &cfg_mem->parse,
+                               cfg_mem, pcmcia_do_loop_config);
 
-       ret = pcmcia_get_first_tuple(p_dev, tuple);
-       while (!ret) {
-               cistpl_cftable_entry_t *cfg = &cfg_mem->parse.cftable_entry;
+       kfree(cfg_mem);
+       return ret;
+}
+EXPORT_SYMBOL(pcmcia_loop_config);
+
+
+struct pcmcia_loop_mem {
+       struct pcmcia_device *p_dev;
+       void *priv_data;
+       int (*loop_tuple) (struct pcmcia_device *p_dev,
+                          tuple_t *tuple,
+                          void *priv_data);
+};
+
+/**
+ * pcmcia_do_loop_tuple() - internal helper for pcmcia_loop_config()
+ *
+ * pcmcia_do_loop_tuple() is the internal callback for the call from
+ * pcmcia_loop_tuple() to pccard_loop_tuple(). Data is transferred
+ * by a struct pcmcia_cfg_mem.
+ */
+static int pcmcia_do_loop_tuple(tuple_t *tuple, cisparse_t *parse, void *priv)
+{
+       struct pcmcia_loop_mem *loop = priv;
+
+       return loop->loop_tuple(loop->p_dev, tuple, loop->priv_data);
+};
+
+/**
+ * pcmcia_loop_tuple() - loop over tuples in the CIS
+ * @p_dev:     the struct pcmcia_device which we need to loop for.
+ * @code:      which CIS code shall we look for?
+ * @priv_data: private data to be passed to the loop_tuple function.
+ * @loop_tuple:        function to call for each CIS entry of type @function. IT
+ *             gets passed the raw tuple and @priv_data.
+ *
+ * pcmcia_loop_tuple() loops over all CIS entries of type @function, and
+ * calls the @loop_tuple function for each entry. If the call to @loop_tuple
+ * returns 0, the loop exits. Returns 0 on success or errorcode otherwise.
+ */
+int pcmcia_loop_tuple(struct pcmcia_device *p_dev, cisdata_t code,
+                     int (*loop_tuple) (struct pcmcia_device *p_dev,
+                                        tuple_t *tuple,
+                                        void *priv_data),
+                     void *priv_data)
+{
+       struct pcmcia_loop_mem loop = {
+               .p_dev = p_dev,
+               .loop_tuple = loop_tuple,
+               .priv_data = priv_data};
 
-               if (pcmcia_get_tuple_data(p_dev, tuple))
-                       goto next_entry;
+       return pccard_loop_tuple(p_dev->socket, p_dev->func, code, NULL,
+                                &loop, pcmcia_do_loop_tuple);
+};
+EXPORT_SYMBOL(pcmcia_loop_tuple);
 
-               if (pcmcia_parse_tuple(tuple, &cfg_mem->parse))
-                       goto next_entry;
 
-               /* default values */
-               p_dev->conf.ConfigIndex = cfg->index;
-               if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-                       cfg_mem->dflt = *cfg;
+struct pcmcia_loop_get {
+       size_t len;
+       cisdata_t **buf;
+};
 
-               ret = conf_check(p_dev, cfg, &cfg_mem->dflt, vcc, priv_data);
-               if (!ret)
-                       break;
+/**
+ * pcmcia_do_get_tuple() - internal helper for pcmcia_get_tuple()
+ *
+ * pcmcia_do_get_tuple() is the internal callback for the call from
+ * pcmcia_get_tuple() to pcmcia_loop_tuple(). As we're only interested in
+ * the first tuple, return 0 unconditionally. Create a memory buffer large
+ * enough to hold the content of the tuple, and fill it with the tuple data.
+ * The caller is responsible to free the buffer.
+ */
+static int pcmcia_do_get_tuple(struct pcmcia_device *p_dev, tuple_t *tuple,
+                              void *priv)
+{
+       struct pcmcia_loop_get *get = priv;
+
+       *get->buf = kzalloc(tuple->TupleDataLen, GFP_KERNEL);
+       if (*get->buf) {
+               get->len = tuple->TupleDataLen;
+               memcpy(*get->buf, tuple->TupleData, tuple->TupleDataLen);
+       } else
+               dev_dbg(&p_dev->dev, "do_get_tuple: out of memory\n");
+       return 0;
+};
 
-next_entry:
-               ret = pcmcia_get_next_tuple(p_dev, tuple);
+/**
+ * pcmcia_get_tuple() - get first tuple from CIS
+ * @p_dev:     the struct pcmcia_device which we need to loop for.
+ * @code:      which CIS code shall we look for?
+ * @buf:        pointer to store the buffer to.
+ *
+ * pcmcia_get_tuple() gets the content of the first CIS entry of type @code.
+ * It returns the buffer length (or zero). The caller is responsible to free
+ * the buffer passed in @buf.
+ */
+size_t pcmcia_get_tuple(struct pcmcia_device *p_dev, cisdata_t code,
+                       unsigned char **buf)
+{
+       struct pcmcia_loop_get get = {
+               .len = 0,
+               .buf = buf,
+       };
+
+       *get.buf = NULL;
+       pcmcia_loop_tuple(p_dev, code, pcmcia_do_get_tuple, &get);
+
+       return get.len;
+};
+EXPORT_SYMBOL(pcmcia_get_tuple);
+
+
+/**
+ * pcmcia_do_get_mac() - internal helper for pcmcia_get_mac_from_cis()
+ *
+ * pcmcia_do_get_mac() is the internal callback for the call from
+ * pcmcia_get_mac_from_cis() to pcmcia_loop_tuple(). We check whether the
+ * tuple contains a proper LAN_NODE_ID of length 6, and copy the data
+ * to struct net_device->dev_addr[i].
+ */
+static int pcmcia_do_get_mac(struct pcmcia_device *p_dev, tuple_t *tuple,
+                            void *priv)
+{
+       struct net_device *dev = priv;
+       int i;
+
+       if (tuple->TupleData[0] != CISTPL_FUNCE_LAN_NODE_ID)
+               return -EINVAL;
+       if (tuple->TupleDataLen < ETH_ALEN + 2) {
+               dev_warn(&p_dev->dev, "Invalid CIS tuple length for "
+                       "LAN_NODE_ID\n");
+               return -EINVAL;
        }
 
-       return ret;
-}
-EXPORT_SYMBOL(pcmcia_loop_config);
+       if (tuple->TupleData[1] != ETH_ALEN) {
+               dev_warn(&p_dev->dev, "Invalid header for LAN_NODE_ID\n");
+               return -EINVAL;
+       }
+       for (i = 0; i < 6; i++)
+               dev->dev_addr[i] = tuple->TupleData[i+2];
+       return 0;
+};
+
+/**
+ * pcmcia_get_mac_from_cis() - read out MAC address from CISTPL_FUNCE
+ * @p_dev:     the struct pcmcia_device for which we want the address.
+ * @dev:       a properly prepared struct net_device to store the info to.
+ *
+ * pcmcia_get_mac_from_cis() reads out the hardware MAC address from
+ * CISTPL_FUNCE and stores it into struct net_device *dev->dev_addr which
+ * must be set up properly by the driver (see examples!).
+ */
+int pcmcia_get_mac_from_cis(struct pcmcia_device *p_dev, struct net_device *dev)
+{
+       return pcmcia_loop_tuple(p_dev, CISTPL_FUNCE, pcmcia_do_get_mac, dev);
+};
+EXPORT_SYMBOL(pcmcia_get_mac_from_cis);
+
index 70a33468bcd0b6851f2320578963b74a4df9ea96..e1741cd875aaae9861bcab302e67be4c106af1e5 100644 (file)
@@ -213,7 +213,8 @@ static irqreturn_t pd6729_interrupt(int irq, void *dev)
 
                        if (csc & I365_CSC_DETECT) {
                                events |= SS_DETECT;
-                               dprintk("Card detected in socket %i!\n", i);
+                               dev_vdbg(&socket[i].socket.dev,
+                                       "Card detected in socket %i!\n", i);
                        }
 
                        if (indirect_read(&socket[i], I365_INTCTL)
@@ -331,11 +332,11 @@ static int pd6729_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
        reg = I365_PWR_NORESET; /* default: disable resetdrv on resume */
 
        if (state->flags & SS_PWR_AUTO) {
-               dprintk("Auto power\n");
+               dev_dbg(&sock->dev, "Auto power\n");
                reg |= I365_PWR_AUTO;   /* automatic power mngmnt */
        }
        if (state->flags & SS_OUTPUT_ENA) {
-               dprintk("Power Enabled\n");
+               dev_dbg(&sock->dev, "Power Enabled\n");
                reg |= I365_PWR_OUT;    /* enable power */
        }
 
@@ -343,40 +344,44 @@ static int pd6729_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
        case 0:
                break;
        case 33:
-               dprintk("setting voltage to Vcc to 3.3V on socket %i\n",
+               dev_dbg(&sock->dev,
+                       "setting voltage to Vcc to 3.3V on socket %i\n",
                        socket->number);
                reg |= I365_VCC_5V;
                indirect_setbit(socket, PD67_MISC_CTL_1, PD67_MC1_VCC_3V);
                break;
        case 50:
-               dprintk("setting voltage to Vcc to 5V on socket %i\n",
+               dev_dbg(&sock->dev,
+                       "setting voltage to Vcc to 5V on socket %i\n",
                        socket->number);
                reg |= I365_VCC_5V;
                indirect_resetbit(socket, PD67_MISC_CTL_1, PD67_MC1_VCC_3V);
                break;
        default:
-               dprintk("pd6729: pd6729_set_socket called with "
-                               "invalid VCC power value: %i\n",
-                       state->Vcc);
+               dev_dbg(&sock->dev,
+                       "pd6729_set_socket called with invalid VCC power "
+                       "value: %i\n", state->Vcc);
                return -EINVAL;
        }
 
        switch (state->Vpp) {
        case 0:
-               dprintk("not setting Vpp on socket %i\n", socket->number);
+               dev_dbg(&sock->dev, "not setting Vpp on socket %i\n",
+                       socket->number);
                break;
        case 33:
        case 50:
-               dprintk("setting Vpp to Vcc for socket %i\n", socket->number);
+               dev_dbg(&sock->dev, "setting Vpp to Vcc for socket %i\n",
+                       socket->number);
                reg |= I365_VPP1_5V;
                break;
        case 120:
-               dprintk("setting Vpp to 12.0\n");
+               dev_dbg(&sock->dev, "setting Vpp to 12.0\n");
                reg |= I365_VPP1_12V;
                break;
        default:
-               dprintk("pd6729: pd6729_set_socket called with invalid VPP power value: %i\n",
-                       state->Vpp);
+               dev_dbg(&sock->dev, "pd6729: pd6729_set_socket called with "
+                       "invalid VPP power value: %i\n", state->Vpp);
                return -EINVAL;
        }
 
@@ -438,7 +443,7 @@ static int pd6729_set_io_map(struct pcmcia_socket *sock,
 
        /* Check error conditions */
        if (map > 1) {
-               dprintk("pd6729_set_io_map with invalid map");
+               dev_dbg(&sock->dev, "pd6729_set_io_map with invalid map\n");
                return -EINVAL;
        }
 
@@ -446,7 +451,7 @@ static int pd6729_set_io_map(struct pcmcia_socket *sock,
        if (indirect_read(socket, I365_ADDRWIN) & I365_ENA_IO(map))
                indirect_resetbit(socket, I365_ADDRWIN, I365_ENA_IO(map));
 
-       /* dprintk("set_io_map: Setting range to %x - %x\n",
+       /* dev_dbg(&sock->dev, "set_io_map: Setting range to %x - %x\n",
           io->start, io->stop);*/
 
        /* write the new values */
@@ -478,12 +483,12 @@ static int pd6729_set_mem_map(struct pcmcia_socket *sock,
 
        map = mem->map;
        if (map > 4) {
-               printk("pd6729_set_mem_map: invalid map");
+               dev_warn(&sock->dev, "invalid map requested\n");
                return -EINVAL;
        }
 
        if ((mem->res->start > mem->res->end) || (mem->speed > 1000)) {
-               printk("pd6729_set_mem_map: invalid address / speed");
+               dev_warn(&sock->dev, "invalid invalid address / speed\n");
                return -EINVAL;
        }
 
@@ -529,12 +534,12 @@ static int pd6729_set_mem_map(struct pcmcia_socket *sock,
        if (mem->flags & MAP_WRPROT)
                i |= I365_MEM_WRPROT;
        if (mem->flags & MAP_ATTRIB) {
-               /* dprintk("requesting attribute memory for socket %i\n",
-                       socket->number);*/
+               /* dev_dbg(&sock->dev, "requesting attribute memory for "
+                  "socket %i\n", socket->number);*/
                i |= I365_MEM_REG;
        } else {
-               /* dprintk("requesting normal memory for socket %i\n",
-                       socket->number);*/
+               /* dev_dbg(&sock->dev, "requesting normal memory for "
+                  "socket %i\n", socket->number);*/
        }
        indirect_write16(socket, base + I365_W_OFF, i);
 
@@ -577,7 +582,7 @@ static struct pccard_operations pd6729_operations = {
 
 static irqreturn_t pd6729_test(int irq, void *dev)
 {
-       dprintk("-> hit on irq %d\n", irq);
+       pr_devel("-> hit on irq %d\n", irq);
        return IRQ_HANDLED;
 }
 
@@ -642,13 +647,13 @@ static int __devinit pd6729_pci_probe(struct pci_dev *dev,
                goto err_out_free_mem;
 
        if (!pci_resource_start(dev, 0)) {
-               printk(KERN_INFO "pd6729: refusing to load the driver "
-                                "as the io_base is 0.\n");
+               dev_warn(&dev->dev, "refusing to load the driver as the "
+                       "io_base is NULL.\n");
                goto err_out_free_mem;
        }
 
-       printk(KERN_INFO "pd6729: Cirrus PD6729 PCI to PCMCIA Bridge "
-               "at 0x%llx on irq %d\n",
+       dev_info(&dev->dev, "Cirrus PD6729 PCI to PCMCIA Bridge at 0x%llx "
+               "on irq %d\n",
                (unsigned long long)pci_resource_start(dev, 0), dev->irq);
        /*
         * Since we have no memory BARs some firmware may not
@@ -656,14 +661,14 @@ static int __devinit pd6729_pci_probe(struct pci_dev *dev,
         */
        pci_read_config_byte(dev, PCI_COMMAND, &configbyte);
        if (!(configbyte & PCI_COMMAND_MEMORY)) {
-               printk(KERN_DEBUG "pd6729: Enabling PCI_COMMAND_MEMORY.\n");
+               dev_dbg(&dev->dev, "pd6729: Enabling PCI_COMMAND_MEMORY.\n");
                configbyte |= PCI_COMMAND_MEMORY;
                pci_write_config_byte(dev, PCI_COMMAND, configbyte);
        }
 
        ret = pci_request_regions(dev, "pd6729");
        if (ret) {
-               printk(KERN_INFO "pd6729: pci request region failed.\n");
+               dev_warn(&dev->dev, "pci request region failed.\n");
                goto err_out_disable;
        }
 
@@ -672,7 +677,7 @@ static int __devinit pd6729_pci_probe(struct pci_dev *dev,
 
        mask = pd6729_isa_scan();
        if (irq_mode == 0 && mask == 0) {
-               printk(KERN_INFO "pd6729: no ISA interrupt is available.\n");
+               dev_warn(&dev->dev, "no ISA interrupt is available.\n");
                goto err_out_free_res;
        }
 
@@ -697,8 +702,8 @@ static int __devinit pd6729_pci_probe(struct pci_dev *dev,
                /* Register the interrupt handler */
                if ((ret = request_irq(dev->irq, pd6729_interrupt, IRQF_SHARED,
                                                        "pd6729", socket))) {
-                       printk(KERN_ERR "pd6729: Failed to register irq %d, "
-                                                       "aborting\n", dev->irq);
+                       dev_err(&dev->dev, "Failed to register irq %d\n",
+                               dev->irq);
                        goto err_out_free_res;
                }
        } else {
@@ -713,8 +718,7 @@ static int __devinit pd6729_pci_probe(struct pci_dev *dev,
        for (i = 0; i < MAX_SOCKETS; i++) {
                ret = pcmcia_register_socket(&socket[i].socket);
                if (ret) {
-                       printk(KERN_INFO "pd6729: pcmcia_register_socket "
-                                              "failed.\n");
+                       dev_warn(&dev->dev, "pcmcia_register_socket failed.\n");
                        for (j = 0; j < i ; j++)
                                pcmcia_unregister_socket(&socket[j].socket);
                        goto err_out_free_res2;
index f392e458cdfd7f7d91957041c506b790aa68108b..41418d394c55bf2c31dab3a12f3b1bc0d2b42913 100644 (file)
@@ -1,13 +1,6 @@
 #ifndef _INCLUDE_GUARD_PD6729_H_
 #define _INCLUDE_GUARD_PD6729_H_
 
-/* Debuging defines */
-#ifdef NOTRACE
-#define dprintk(fmt, args...) printk(fmt , ## args)
-#else
-#define dprintk(fmt, args...) do {} while (0)
-#endif
-
 /* Flags for I365_GENCTL */
 #define I365_DF_VS1            0x40    /* DF-step Voltage Sense */
 #define I365_DF_VS2            0x80
index 0e35acb1366b118773e34db9578daf1b30582119..84dde7768ad54cd6c8d1fbd0899afd2c38700a95 100644 (file)
@@ -228,9 +228,43 @@ static const char *skt_names[] = {
 #define SKT_DEV_INFO_SIZE(n) \
        (sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket))
 
+int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt)
+{
+       skt->res_skt.start = _PCMCIA(skt->nr);
+       skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1;
+       skt->res_skt.name = skt_names[skt->nr];
+       skt->res_skt.flags = IORESOURCE_MEM;
+
+       skt->res_io.start = _PCMCIAIO(skt->nr);
+       skt->res_io.end = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
+       skt->res_io.name = "io";
+       skt->res_io.flags = IORESOURCE_MEM | IORESOURCE_BUSY;
+
+       skt->res_mem.start = _PCMCIAMem(skt->nr);
+       skt->res_mem.end = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
+       skt->res_mem.name = "memory";
+       skt->res_mem.flags = IORESOURCE_MEM;
+
+       skt->res_attr.start = _PCMCIAAttr(skt->nr);
+       skt->res_attr.end = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
+       skt->res_attr.name = "attribute";
+       skt->res_attr.flags = IORESOURCE_MEM;
+
+       return soc_pcmcia_add_one(skt);
+}
+
+void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops)
+{
+       /* Provide our PXA2xx specific timing routines. */
+       ops->set_timing  = pxa2xx_pcmcia_set_timing;
+#ifdef CONFIG_CPU_FREQ
+       ops->frequency_change = pxa2xx_pcmcia_frequency_change;
+#endif
+}
+
 int __pxa2xx_drv_pcmcia_probe(struct device *dev)
 {
-       int i, ret;
+       int i, ret = 0;
        struct pcmcia_low_level *ops;
        struct skt_dev_info *sinfo;
        struct soc_pcmcia_socket *skt;
@@ -240,6 +274,8 @@ int __pxa2xx_drv_pcmcia_probe(struct device *dev)
 
        ops = (struct pcmcia_low_level *)dev->platform_data;
 
+       pxa2xx_drv_pcmcia_ops(ops);
+
        sinfo = kzalloc(SKT_DEV_INFO_SIZE(ops->nr), GFP_KERNEL);
        if (!sinfo)
                return -ENOMEM;
@@ -250,40 +286,25 @@ int __pxa2xx_drv_pcmcia_probe(struct device *dev)
        for (i = 0; i < ops->nr; i++) {
                skt = &sinfo->skt[i];
 
-               skt->nr         = ops->first + i;
-               skt->irq        = NO_IRQ;
-
-               skt->res_skt.start      = _PCMCIA(skt->nr);
-               skt->res_skt.end        = _PCMCIA(skt->nr) + PCMCIASp - 1;
-               skt->res_skt.name       = skt_names[skt->nr];
-               skt->res_skt.flags      = IORESOURCE_MEM;
-
-               skt->res_io.start       = _PCMCIAIO(skt->nr);
-               skt->res_io.end         = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
-               skt->res_io.name        = "io";
-               skt->res_io.flags       = IORESOURCE_MEM | IORESOURCE_BUSY;
+               skt->nr = ops->first + i;
+               skt->ops = ops;
+               skt->socket.owner = ops->owner;
+               skt->socket.dev.parent = dev;
+               skt->socket.pci_irq = NO_IRQ;
 
-               skt->res_mem.start      = _PCMCIAMem(skt->nr);
-               skt->res_mem.end        = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
-               skt->res_mem.name       = "memory";
-               skt->res_mem.flags      = IORESOURCE_MEM;
-
-               skt->res_attr.start     = _PCMCIAAttr(skt->nr);
-               skt->res_attr.end       = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
-               skt->res_attr.name      = "attribute";
-               skt->res_attr.flags     = IORESOURCE_MEM;
+               ret = pxa2xx_drv_pcmcia_add_one(skt);
+               if (ret)
+                       break;
        }
 
-       /* Provide our PXA2xx specific timing routines. */
-       ops->set_timing  = pxa2xx_pcmcia_set_timing;
-#ifdef CONFIG_CPU_FREQ
-       ops->frequency_change = pxa2xx_pcmcia_frequency_change;
-#endif
-
-       ret = soc_common_drv_pcmcia_probe(dev, ops, sinfo);
-
-       if (!ret)
+       if (ret) {
+               while (--i >= 0)
+                       soc_pcmcia_remove_one(&sinfo->skt[i]);
+               kfree(sinfo);
+       } else {
                pxa2xx_configure_sockets(dev);
+               dev_set_drvdata(dev, sinfo);
+       }
 
        return ret;
 }
@@ -297,7 +318,16 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
 
 static int pxa2xx_drv_pcmcia_remove(struct platform_device *dev)
 {
-       return soc_common_drv_pcmcia_remove(&dev->dev);
+       struct skt_dev_info *sinfo = platform_get_drvdata(dev);
+       int i;
+
+       platform_set_drvdata(dev, NULL);
+
+       for (i = 0; i < sinfo->nskt; i++)
+               soc_pcmcia_remove_one(&sinfo->skt[i]);
+
+       kfree(sinfo);
+       return 0;
 }
 
 static int pxa2xx_drv_pcmcia_suspend(struct device *dev)
index 235d681652c3f625ae31be4b4d592c5bae5ff176..cb5efaec886f2c807849d2dc467aa71b631c6b1a 100644 (file)
@@ -1,3 +1,6 @@
 /* temporary measure */
 extern int __pxa2xx_drv_pcmcia_probe(struct device *);
 
+int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt);
+void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops);
+
index 5143a760153b9626aaf15df274e795732951ed80..05913d0bbdbef64b513ab89f1c7fe448c6002248 100644 (file)
@@ -44,7 +44,7 @@ static int cmx255_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
                return ret;
        gpio_direction_output(GPIO_PCMCIA_RESET, 0);
 
-       skt->irq = skt->nr == 0 ? PCMCIA_S0_RDYINT : PCMCIA_S1_RDYINT;
+       skt->socket.pci_irq = skt->nr == 0 ? PCMCIA_S0_RDYINT : PCMCIA_S1_RDYINT;
        ret = soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
        if (!ret)
                gpio_free(GPIO_PCMCIA_RESET);
index a7b943d01e34a85a0e27897f55eec9ba1670b853..5662646b84da9bdb8eda5666f7251b3a3de4faec 100644 (file)
@@ -38,7 +38,7 @@ static int cmx270_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
                return ret;
        gpio_direction_output(GPIO_PCMCIA_RESET, 0);
 
-       skt->irq = PCMCIA_S0_RDYINT;
+       skt->socket.pci_irq = PCMCIA_S0_RDYINT;
        ret = soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
        if (!ret)
                gpio_free(GPIO_PCMCIA_RESET);
index d09c0dc4a31a80bce783e7b3fdda1459399a3fc9..8bfbd4dca131e1a252e4b539fd8927703f28e646 100644 (file)
@@ -38,7 +38,7 @@ static struct pcmcia_irqs cd_irqs[] = {
 
 static int e740_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
-       skt->irq = skt->nr == 0 ? IRQ_GPIO(GPIO_E740_PCMCIA_RDY0) :
+       skt->socket.pci_irq = skt->nr == 0 ? IRQ_GPIO(GPIO_E740_PCMCIA_RDY0) :
                                IRQ_GPIO(GPIO_E740_PCMCIA_RDY1);
 
        return soc_pcmcia_request_irqs(skt, &cd_irqs[skt->nr], 1);
index 6cbb1b1f7cfdf0a2224853f7cda97469b6deeffa..b9f8c8fb42bd52417eb1236a8f18b77dea6c5592 100644 (file)
@@ -32,6 +32,7 @@ static int
 lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
                                const socket_state_t *state)
 {
+       struct sa1111_pcmcia_socket *s = to_skt(skt);
        unsigned int pa_dwr_mask, pa_dwr_set, misc_mask, misc_set;
        int ret = 0;
 
@@ -149,7 +150,7 @@ lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 
        if (ret == 0) {
                lubbock_set_misc_wr(misc_mask, misc_set);
-               sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set);
+               sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set);
        }
 
 #if 1
@@ -175,7 +176,7 @@ lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
                         * Switch to 5V,  Configure socket with 5V voltage
                         */
                        lubbock_set_misc_wr(misc_mask, 0);
-                       sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, 0);
+                       sa1111_set_io(s->dev, pa_dwr_mask, 0);
 
                        /*
                         * It takes about 100ms to turn off Vcc.
@@ -200,12 +201,8 @@ lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 
 static struct pcmcia_low_level lubbock_pcmcia_ops = {
        .owner                  = THIS_MODULE,
-       .hw_init                = sa1111_pcmcia_hw_init,
-       .hw_shutdown            = sa1111_pcmcia_hw_shutdown,
-       .socket_state           = sa1111_pcmcia_socket_state,
        .configure_socket       = lubbock_pcmcia_configure_socket,
        .socket_init            = sa1111_pcmcia_socket_init,
-       .socket_suspend         = sa1111_pcmcia_socket_suspend,
        .first                  = 0,
        .nr                     = 2,
 };
@@ -228,8 +225,9 @@ int pcmcia_lubbock_init(struct sa1111_dev *sadev)
                /* Set CF Socket 1 power to standby mode. */
                lubbock_set_misc_wr((1 << 15) | (1 << 14), 0);
 
-               sadev->dev.platform_data = &lubbock_pcmcia_ops;
-               ret = __pxa2xx_drv_pcmcia_probe(&sadev->dev);
+               pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops);
+               ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops,
+                               pxa2xx_drv_pcmcia_add_one);
        }
 
        return ret;
index 1138551ba8f61fb8f77669b9c2fcb0dea0cf5645..92016fe932b46bfd720b6ecfc56fca26a6add563 100644 (file)
@@ -44,7 +44,7 @@ static int mst_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
         * before we enable them as outputs.
         */
 
-       skt->irq = (skt->nr == 0) ? MAINSTONE_S0_IRQ : MAINSTONE_S1_IRQ;
+       skt->socket.pci_irq = (skt->nr == 0) ? MAINSTONE_S0_IRQ : MAINSTONE_S1_IRQ;
        return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
index 5ba9b3664a00abdf8eb5bab95c80cccb12ab2d31..6fb6f7f0672ea7d29f7ce23d709881037ab4250c 100644 (file)
@@ -45,7 +45,7 @@ static int palmld_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
        if (ret)
                goto err4;
 
-       skt->irq = IRQ_GPIO(GPIO_NR_PALMLD_PCMCIA_READY);
+       skt->socket.pci_irq = IRQ_GPIO(GPIO_NR_PALMLD_PCMCIA_READY);
        return 0;
 
 err4:
index e07b5c51ec5bbda422c27bb99c9743b9a1af4b7c..b07b247a399fd5960653164722899a7c40d185bb 100644 (file)
@@ -53,7 +53,7 @@ static int palmtx_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
        if (ret)
                goto err5;
 
-       skt->irq = gpio_to_irq(GPIO_NR_PALMTX_PCMCIA_READY);
+       skt->socket.pci_irq = gpio_to_irq(GPIO_NR_PALMTX_PCMCIA_READY);
        return 0;
 
 err5:
index bc43f78f6f0ba10ae8caa184f76d96cb30389475..0ea3b29440e6b394a5608f41f749610f62b45091 100644 (file)
@@ -66,7 +66,7 @@ static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
                }
        }
 
-       skt->irq = SCOOP_DEV[skt->nr].irq;
+       skt->socket.pci_irq = SCOOP_DEV[skt->nr].irq;
 
        return 0;
 }
index e0e5cb339b4a8e41e1f046af7a4c8eab561ed8a3..b7e596620db16c594a7ba3cc73c2bbd9643b0e43 100644 (file)
@@ -53,7 +53,7 @@ static int trizeps_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
                        gpio_free(GPIO_PRDY);
                        return -EINVAL;
                }
-               skt->irq = IRQ_GPIO(GPIO_PRDY);
+               skt->socket.pci_irq = IRQ_GPIO(GPIO_PRDY);
                break;
 
 #ifndef CONFIG_MACH_TRIZEPS_CONXS
@@ -63,7 +63,7 @@ static int trizeps_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
                break;
        }
        /* release the reset of this card */
-       pr_debug("%s: sock %d irq %d\n", __func__, skt->nr, skt->irq);
+       pr_debug("%s: sock %d irq %d\n", __func__, skt->nr, skt->socket.pci_irq);
 
        /* supplementory irqs for the socket */
        for (i = 0; i < ARRAY_SIZE(irqs); i++) {
index 17871360fe99efd1247365b51d345510a82858f3..27be2e154df2a92782dbfafa48598c00dc3cd72f 100644 (file)
@@ -40,7 +40,7 @@ static int viper_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
        unsigned long flags;
 
-       skt->irq = gpio_to_irq(VIPER_CF_RDY_GPIO);
+       skt->socket.pci_irq = gpio_to_irq(VIPER_CF_RDY_GPIO);
 
        if (gpio_request(VIPER_CF_CD_GPIO, "CF detect"))
                goto err_request_cd;
index e592e0e0d7ed3a88dcdb0b4379b1ad69edfd3cc3..de0e770ce6a30ec404fb9fb1833ce793ab5d55b5 100644 (file)
@@ -18,6 +18,7 @@
 #include <pcmcia/cs_types.h>
 #include <pcmcia/ss.h>
 #include <pcmcia/cs.h>
+#include <pcmcia/cistpl.h>
 #include "cs_internal.h"
 
 
index ac8aa09ba0da56b33f12e3a9ba0168ef73e54779..fd013a1ef47abcdd5746f4fa7f9885670fc2a9cd 100644 (file)
@@ -27,7 +27,7 @@ static struct pcmcia_irqs irqs[] = {
 
 static int assabet_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
-       skt->irq = ASSABET_IRQ_GPIO_CF_IRQ;
+       skt->socket.pci_irq = ASSABET_IRQ_GPIO_CF_IRQ;
 
        return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
index 1ca9737ea79ea17c414a9aea9d99ab3a7c7a8cf6..1ce53f493bef64238c9eb26d20ea495ab90718cd 100644 (file)
@@ -127,13 +127,10 @@ badge4_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state
 
 static struct pcmcia_low_level badge4_pcmcia_ops = {
        .owner                  = THIS_MODULE,
-       .hw_init                = sa1111_pcmcia_hw_init,
-       .hw_shutdown            = sa1111_pcmcia_hw_shutdown,
-       .socket_state           = sa1111_pcmcia_socket_state,
        .configure_socket       = badge4_pcmcia_configure_socket,
-
        .socket_init            = sa1111_pcmcia_socket_init,
-       .socket_suspend         = sa1111_pcmcia_socket_suspend,
+       .first                  = 0,
+       .nr                     = 2,
 };
 
 int pcmcia_badge4_init(struct device *dev)
@@ -146,7 +143,9 @@ int pcmcia_badge4_init(struct device *dev)
                       __func__,
                       badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc);
 
-               ret = sa11xx_drv_pcmcia_probe(dev, &badge4_pcmcia_ops, 0, 2);
+               sa11xx_drv_pcmcia_ops(&badge4_pcmcia_ops);
+               ret = sa1111_pcmcia_add(dev, &badge4_pcmcia_ops,
+                               sa11xx_drv_pcmcia_add_one);
        }
 
        return ret;
index 63e6bc431a0d71fa5cc847d2637818db44cc211e..9bf088b1727592b256c5bafcc3bb6188310d2e0c 100644 (file)
@@ -27,7 +27,7 @@ static struct pcmcia_irqs irqs[] = {
 
 static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
-       skt->irq = CERF_IRQ_GPIO_CF_IRQ;
+       skt->socket.pci_irq = CERF_IRQ_GPIO_CF_IRQ;
 
        return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
index 2d0e997515308d931bb683d5f58ae8bd624ed5c3..11cc3ba1260ab6bf7763005a3436b85658fd524f 100644 (file)
@@ -83,7 +83,16 @@ static int sa11x0_drv_pcmcia_probe(struct platform_device *dev)
 
 static int sa11x0_drv_pcmcia_remove(struct platform_device *dev)
 {
-       return soc_common_drv_pcmcia_remove(&dev->dev);
+       struct skt_dev_info *sinfo = platform_get_drvdata(dev);
+       int i;
+
+       platform_set_drvdata(dev, NULL);
+
+       for (i = 0; i < sinfo->nskt; i++)
+               soc_pcmcia_remove_one(&sinfo->skt[i]);
+
+       kfree(sinfo);
+       return 0;
 }
 
 static int sa11x0_drv_pcmcia_suspend(struct platform_device *dev,
index 0cc3748f3758d866c0decfd9f7ce020c4cd97b39..3a121ac697d695712048ffc51bd29f4b71683c63 100644 (file)
@@ -25,8 +25,8 @@ static struct pcmcia_irqs irqs[] = {
 
 static int h3600_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
-       skt->irq = skt->nr ? IRQ_GPIO_H3600_PCMCIA_IRQ1
-                          : IRQ_GPIO_H3600_PCMCIA_IRQ0;
+       skt->socket.pci_irq = skt->nr ? IRQ_GPIO_H3600_PCMCIA_IRQ1
+                                     : IRQ_GPIO_H3600_PCMCIA_IRQ0;
 
 
        return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
index 7eedb42f800c1f4591c5f4aaa5b7aa6ada01be64..6bcabee6bde468f7dbd82b4f015d0063ea26d526 100644 (file)
 #define SOCKET1_POWER  (GPIO_GPIO1 | GPIO_GPIO3)
 #define SOCKET1_3V     GPIO_GPIO3
 
-static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
-{
-       unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3;
-
-       /*
-       * What is all this crap for?
-       */
-       GRER |= 0x00000002;
-       /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */
-       sa1111_set_io_dir(SA1111_DEV(skt->dev), pin, 0, 0);
-       sa1111_set_io(SA1111_DEV(skt->dev), pin, 0);
-       sa1111_set_sleep_io(SA1111_DEV(skt->dev), pin, 0);
-
-       return sa1111_pcmcia_hw_init(skt);
-}
-
 static int
 jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
+       struct sa1111_pcmcia_socket *s = to_skt(skt);
        unsigned int pa_dwr_mask, pa_dwr_set;
        int ret;
 
@@ -97,7 +82,7 @@ jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_s
                unsigned long flags;
 
                local_irq_save(flags);
-               sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set);
+               sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set);
                local_irq_restore(flags);
        }
 
@@ -106,21 +91,30 @@ jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_s
 
 static struct pcmcia_low_level jornada720_pcmcia_ops = {
        .owner                  = THIS_MODULE,
-       .hw_init                = jornada720_pcmcia_hw_init,
-       .hw_shutdown            = sa1111_pcmcia_hw_shutdown,
-       .socket_state           = sa1111_pcmcia_socket_state,
        .configure_socket       = jornada720_pcmcia_configure_socket,
-
        .socket_init            = sa1111_pcmcia_socket_init,
-       .socket_suspend         = sa1111_pcmcia_socket_suspend,
+       .first                  = 0,
+       .nr                     = 2,
 };
 
 int __devinit pcmcia_jornada720_init(struct device *dev)
 {
        int ret = -ENODEV;
 
-       if (machine_is_jornada720())
-               ret = sa11xx_drv_pcmcia_probe(dev, &jornada720_pcmcia_ops, 0, 2);
+       if (machine_is_jornada720()) {
+               unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3;
+
+               GRER |= 0x00000002;
+
+               /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */
+               sa1111_set_io_dir(dev, pin, 0, 0);
+               sa1111_set_io(dev, pin, 0);
+               sa1111_set_sleep_io(dev, pin, 0);
+
+               sa11xx_drv_pcmcia_ops(&jornada720_pcmcia_ops);
+               ret = sa1111_pcmcia_add(dev, &jornada720_pcmcia_ops,
+                               sa11xx_drv_pcmcia_add_one);
+       }
 
        return ret;
 }
index 0c76d337815bca429b2ef094e19c01f1bd39e8a8..c95639b5f2a06095c9c586aebe80f0e1bed9fa8a 100644 (file)
@@ -43,6 +43,7 @@
 static int
 neponset_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
+       struct sa1111_pcmcia_socket *s = to_skt(skt);
        unsigned int ncr_mask, ncr_set, pa_dwr_mask, pa_dwr_set;
        int ret;
 
@@ -99,7 +100,7 @@ neponset_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_sta
                NCR_0 = (NCR_0 & ~ncr_mask) | ncr_set;
 
                local_irq_restore(flags);
-               sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set);
+               sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set);
        }
 
        return 0;
@@ -115,12 +116,10 @@ static void neponset_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 
 static struct pcmcia_low_level neponset_pcmcia_ops = {
        .owner                  = THIS_MODULE,
-       .hw_init                = sa1111_pcmcia_hw_init,
-       .hw_shutdown            = sa1111_pcmcia_hw_shutdown,
-       .socket_state           = sa1111_pcmcia_socket_state,
        .configure_socket       = neponset_pcmcia_configure_socket,
        .socket_init            = neponset_pcmcia_socket_init,
-       .socket_suspend         = sa1111_pcmcia_socket_suspend,
+       .first                  = 0,
+       .nr                     = 2,
 };
 
 int pcmcia_neponset_init(struct sa1111_dev *sadev)
@@ -135,7 +134,9 @@ int pcmcia_neponset_init(struct sa1111_dev *sadev)
                sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0);
                sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);
                sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);
-               ret = sa11xx_drv_pcmcia_probe(&sadev->dev, &neponset_pcmcia_ops, 0, 2);
+               sa11xx_drv_pcmcia_ops(&neponset_pcmcia_ops);
+               ret = sa1111_pcmcia_add(sadev, &neponset_pcmcia_ops,
+                               sa11xx_drv_pcmcia_add_one);
        }
 
        return ret;
index 46d8c1977c2a44592652fc4abfb9ce1aeb1ca3fa..c4d51867a050fa09703b469424d10d3a604c4971 100644 (file)
@@ -28,7 +28,7 @@ static int shannon_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
        GAFR &= ~(SHANNON_GPIO_EJECT_0 | SHANNON_GPIO_EJECT_1 | 
                  SHANNON_GPIO_RDY_0 | SHANNON_GPIO_RDY_1);
 
-       skt->irq = skt->nr ? SHANNON_IRQ_GPIO_RDY_1 : SHANNON_IRQ_GPIO_RDY_0;
+       skt->socket.pci_irq = skt->nr ? SHANNON_IRQ_GPIO_RDY_1 : SHANNON_IRQ_GPIO_RDY_0;
 
        return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
index 33a08ae09fdfa7aec75ca698548fe46b8d0903ab..05bd504e6f18a47ff43c24d7bbba27c185ebe822 100644 (file)
@@ -28,7 +28,7 @@ static int simpad_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 
        clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
 
-       skt->irq = IRQ_GPIO_CF_IRQ;
+       skt->socket.pci_irq = IRQ_GPIO_CF_IRQ;
 
        return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
index 4be4e172ffa180aebccd78bd0fa0e241e6b97f74..de6bc333d29907187137203392d659096c312b8b 100644 (file)
@@ -28,23 +28,20 @@ static struct pcmcia_irqs irqs[] = {
        { 1, IRQ_S1_BVD1_STSCHG, "SA1111 CF BVD1"            },
 };
 
-int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
+static int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
-       if (skt->irq == NO_IRQ)
-               skt->irq = skt->nr ? IRQ_S1_READY_NINT : IRQ_S0_READY_NINT;
-
        return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-void sa1111_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
+static void sa1111_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
        soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 void sa1111_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 {
-       struct sa1111_dev *sadev = SA1111_DEV(skt->dev);
-       unsigned long status = sa1111_readl(sadev->mapbase + SA1111_PCSR);
+       struct sa1111_pcmcia_socket *s = to_skt(skt);
+       unsigned long status = sa1111_readl(s->dev->mapbase + SA1111_PCSR);
 
        switch (skt->nr) {
        case 0:
@@ -71,7 +68,7 @@ void sa1111_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_sta
 
 int sa1111_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
-       struct sa1111_dev *sadev = SA1111_DEV(skt->dev);
+       struct sa1111_pcmcia_socket *s = to_skt(skt);
        unsigned int pccr_skt_mask, pccr_set_mask, val;
        unsigned long flags;
 
@@ -100,10 +97,10 @@ int sa1111_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_s
                pccr_set_mask |= PCCR_S0_FLT|PCCR_S1_FLT;
 
        local_irq_save(flags);
-       val = sa1111_readl(sadev->mapbase + SA1111_PCCR);
+       val = sa1111_readl(s->dev->mapbase + SA1111_PCCR);
        val &= ~pccr_skt_mask;
        val |= pccr_set_mask & pccr_skt_mask;
-       sa1111_writel(val, sadev->mapbase + SA1111_PCCR);
+       sa1111_writel(val, s->dev->mapbase + SA1111_PCCR);
        local_irq_restore(flags);
 
        return 0;
@@ -114,15 +111,51 @@ void sa1111_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
        soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-void sa1111_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
+static void sa1111_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
        soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
+int sa1111_pcmcia_add(struct sa1111_dev *dev, struct pcmcia_low_level *ops,
+       int (*add)(struct soc_pcmcia_socket *))
+{
+       struct sa1111_pcmcia_socket *s;
+       int i, ret = 0;
+
+       ops->hw_init = sa1111_pcmcia_hw_init;
+       ops->hw_shutdown = sa1111_pcmcia_hw_shutdown;
+       ops->socket_state = sa1111_pcmcia_socket_state;
+       ops->socket_suspend = sa1111_pcmcia_socket_suspend;
+
+       for (i = 0; i < ops->nr; i++) {
+               s = kzalloc(sizeof(*s), GFP_KERNEL);
+               if (!s)
+                       return -ENOMEM;
+
+               s->soc.nr = ops->first + i;
+               s->soc.ops = ops;
+               s->soc.socket.owner = ops->owner;
+               s->soc.socket.dev.parent = &dev->dev;
+               s->soc.socket.pci_irq = s->soc.nr ? IRQ_S1_READY_NINT : IRQ_S0_READY_NINT;
+               s->dev = dev;
+
+               ret = add(&s->soc);
+               if (ret == 0) {
+                       s->next = dev_get_drvdata(&dev->dev);
+                       dev_set_drvdata(&dev->dev, s);
+               } else
+                       kfree(s);
+       }
+
+       return ret;
+}
+
 static int pcmcia_probe(struct sa1111_dev *dev)
 {
        void __iomem *base;
 
+       dev_set_drvdata(&dev->dev, NULL);
+
        if (!request_mem_region(dev->res.start, 512,
                                SA1111_DRIVER_NAME(dev)))
                return -EBUSY;
@@ -152,7 +185,15 @@ static int pcmcia_probe(struct sa1111_dev *dev)
 
 static int __devexit pcmcia_remove(struct sa1111_dev *dev)
 {
-       soc_common_drv_pcmcia_remove(&dev->dev);
+       struct sa1111_pcmcia_socket *next, *s = dev_get_drvdata(&dev->dev);
+
+       dev_set_drvdata(&dev->dev, NULL);
+
+       for (; next = s->next, s; s = next) {
+               soc_pcmcia_remove_one(&s->soc);
+               kfree(s);
+       }
+
        release_mem_region(dev->res.start, 512);
        return 0;
 }
index 10ced4a210d7b18ac967ee8a2598d889efb5936f..02dc8577cdafcaa9f5b9dd09a6fd5948d60e35a1 100644 (file)
@@ -1,12 +1,23 @@
 #include "soc_common.h"
 #include "sa11xx_base.h"
 
-extern int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *);
-extern void sa1111_pcmcia_hw_shutdown(struct soc_pcmcia_socket *);
+struct sa1111_pcmcia_socket {
+       struct soc_pcmcia_socket soc;
+       struct sa1111_dev *dev;
+       struct sa1111_pcmcia_socket *next;
+};
+
+static inline struct sa1111_pcmcia_socket *to_skt(struct soc_pcmcia_socket *s)
+{
+       return container_of(s, struct sa1111_pcmcia_socket, soc);
+}
+
+int sa1111_pcmcia_add(struct sa1111_dev *dev, struct pcmcia_low_level *ops,
+       int (*add)(struct soc_pcmcia_socket *));
+
 extern void sa1111_pcmcia_socket_state(struct soc_pcmcia_socket *, struct pcmcia_state *);
 extern int sa1111_pcmcia_configure_socket(struct soc_pcmcia_socket *, const socket_state_t *);
 extern void sa1111_pcmcia_socket_init(struct soc_pcmcia_socket *);
-extern void sa1111_pcmcia_socket_suspend(struct soc_pcmcia_socket *);
 
 extern int pcmcia_badge4_init(struct device *);
 extern int pcmcia_jornada720_init(struct device *);
index e15d59f2d8a90f76f0b1e1a55e377956f8801f18..fc9a6527019b033d21a3d234cc09b2d0c29b792d 100644 (file)
@@ -171,12 +171,58 @@ static const char *skt_names[] = {
 #define SKT_DEV_INFO_SIZE(n) \
        (sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket))
 
+int sa11xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt)
+{
+       skt->res_skt.start = _PCMCIA(skt->nr);
+       skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1;
+       skt->res_skt.name = skt_names[skt->nr];
+       skt->res_skt.flags = IORESOURCE_MEM;
+
+       skt->res_io.start = _PCMCIAIO(skt->nr);
+       skt->res_io.end = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
+       skt->res_io.name = "io";
+       skt->res_io.flags = IORESOURCE_MEM | IORESOURCE_BUSY;
+
+       skt->res_mem.start = _PCMCIAMem(skt->nr);
+       skt->res_mem.end = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
+       skt->res_mem.name = "memory";
+       skt->res_mem.flags = IORESOURCE_MEM;
+
+       skt->res_attr.start = _PCMCIAAttr(skt->nr);
+       skt->res_attr.end = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
+       skt->res_attr.name = "attribute";
+       skt->res_attr.flags = IORESOURCE_MEM;
+
+       return soc_pcmcia_add_one(skt);
+}
+EXPORT_SYMBOL(sa11xx_drv_pcmcia_add_one);
+
+void sa11xx_drv_pcmcia_ops(struct pcmcia_low_level *ops)
+{
+       /*
+        * set default MECR calculation if the board specific
+        * code did not specify one...
+        */
+       if (!ops->get_timing)
+               ops->get_timing = sa1100_pcmcia_default_mecr_timing;
+
+       /* Provide our SA11x0 specific timing routines. */
+       ops->set_timing  = sa1100_pcmcia_set_timing;
+       ops->show_timing = sa1100_pcmcia_show_timing;
+#ifdef CONFIG_CPU_FREQ
+       ops->frequency_change = sa1100_pcmcia_frequency_change;
+#endif
+}
+EXPORT_SYMBOL(sa11xx_drv_pcmcia_ops);
+
 int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
                            int first, int nr)
 {
        struct skt_dev_info *sinfo;
        struct soc_pcmcia_socket *skt;
-       int i;
+       int i, ret = 0;
+
+       sa11xx_drv_pcmcia_ops(ops);
 
        sinfo = kzalloc(SKT_DEV_INFO_SIZE(nr), GFP_KERNEL);
        if (!sinfo)
@@ -188,45 +234,26 @@ int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
        for (i = 0; i < nr; i++) {
                skt = &sinfo->skt[i];
 
-               skt->nr         = first + i;
-               skt->irq        = NO_IRQ;
-
-               skt->res_skt.start      = _PCMCIA(skt->nr);
-               skt->res_skt.end        = _PCMCIA(skt->nr) + PCMCIASp - 1;
-               skt->res_skt.name       = skt_names[skt->nr];
-               skt->res_skt.flags      = IORESOURCE_MEM;
-
-               skt->res_io.start       = _PCMCIAIO(skt->nr);
-               skt->res_io.end         = _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
-               skt->res_io.name        = "io";
-               skt->res_io.flags       = IORESOURCE_MEM | IORESOURCE_BUSY;
+               skt->nr = first + i;
+               skt->ops = ops;
+               skt->socket.owner = ops->owner;
+               skt->socket.dev.parent = dev;
+               skt->socket.pci_irq = NO_IRQ;
 
-               skt->res_mem.start      = _PCMCIAMem(skt->nr);
-               skt->res_mem.end        = _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
-               skt->res_mem.name       = "memory";
-               skt->res_mem.flags      = IORESOURCE_MEM;
-
-               skt->res_attr.start     = _PCMCIAAttr(skt->nr);
-               skt->res_attr.end       = _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
-               skt->res_attr.name      = "attribute";
-               skt->res_attr.flags     = IORESOURCE_MEM;
+               ret = sa11xx_drv_pcmcia_add_one(skt);
+               if (ret)
+                       break;
        }
 
-       /*
-        * set default MECR calculation if the board specific
-        * code did not specify one...
-        */
-       if (!ops->get_timing)
-               ops->get_timing = sa1100_pcmcia_default_mecr_timing;
-
-       /* Provide our SA11x0 specific timing routines. */
-       ops->set_timing  = sa1100_pcmcia_set_timing;
-       ops->show_timing = sa1100_pcmcia_show_timing;
-#ifdef CONFIG_CPU_FREQ
-       ops->frequency_change = sa1100_pcmcia_frequency_change;
-#endif
+       if (ret) {
+               while (--i >= 0)
+                       soc_pcmcia_remove_one(&sinfo->skt[i]);
+               kfree(sinfo);
+       } else {
+               dev_set_drvdata(dev, sinfo);
+       }
 
-       return soc_common_drv_pcmcia_probe(dev, ops, sinfo);
+       return ret;
 }
 EXPORT_SYMBOL(sa11xx_drv_pcmcia_probe);
 
index 7bc208280527884ad8f9774abdb18965857bca11..3d76d720f463de5628e8c1427505cc84bb1a0dbe 100644 (file)
@@ -118,6 +118,8 @@ static inline unsigned int sa1100_pcmcia_cmd_time(unsigned int cpu_clock_khz,
 }
 
 
+int sa11xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt);
+void sa11xx_drv_pcmcia_ops(struct pcmcia_low_level *ops);
 extern int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr);
 
 #endif  /* !defined(_PCMCIA_SA1100_H) */
index ef7e9e58782b2328c66ab14d4b563656ee3a84a2..6f1a86b43c606ac5e21b9353363da911cc53c314 100644 (file)
@@ -144,10 +144,10 @@ soc_common_pcmcia_config_skt(struct soc_pcmcia_socket *skt, socket_state_t *stat
                 */
                if (skt->irq_state != 1 && state->io_irq) {
                        skt->irq_state = 1;
-                       set_irq_type(skt->irq, IRQ_TYPE_EDGE_FALLING);
+                       set_irq_type(skt->socket.pci_irq, IRQ_TYPE_EDGE_FALLING);
                } else if (skt->irq_state == 1 && state->io_irq == 0) {
                        skt->irq_state = 0;
-                       set_irq_type(skt->irq, IRQ_TYPE_NONE);
+                       set_irq_type(skt->socket.pci_irq, IRQ_TYPE_NONE);
                }
 
                skt->cs_state = *state;
@@ -492,7 +492,8 @@ static ssize_t show_status(struct device *dev, struct device_attribute *attr, ch
 
        p+=sprintf(p, "Vcc      : %d\n", skt->cs_state.Vcc);
        p+=sprintf(p, "Vpp      : %d\n", skt->cs_state.Vpp);
-       p+=sprintf(p, "IRQ      : %d (%d)\n", skt->cs_state.io_irq, skt->irq);
+       p+=sprintf(p, "IRQ      : %d (%d)\n", skt->cs_state.io_irq,
+               skt->socket.pci_irq);
        if (skt->ops->show_timing)
                p+=skt->ops->show_timing(skt, p);
 
@@ -574,7 +575,7 @@ void soc_pcmcia_enable_irqs(struct soc_pcmcia_socket *skt,
 EXPORT_SYMBOL(soc_pcmcia_enable_irqs);
 
 
-LIST_HEAD(soc_pcmcia_sockets);
+static LIST_HEAD(soc_pcmcia_sockets);
 static DEFINE_MUTEX(soc_pcmcia_sockets_lock);
 
 #ifdef CONFIG_CPU_FREQ
@@ -609,177 +610,137 @@ static int soc_pcmcia_cpufreq_register(void)
                                "notifier for PCMCIA (%d)\n", ret);
        return ret;
 }
+fs_initcall(soc_pcmcia_cpufreq_register);
 
 static void soc_pcmcia_cpufreq_unregister(void)
 {
        cpufreq_unregister_notifier(&soc_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER);
 }
+module_exit(soc_pcmcia_cpufreq_unregister);
 
-#else
-static int soc_pcmcia_cpufreq_register(void) { return 0; }
-static void soc_pcmcia_cpufreq_unregister(void) {}
 #endif
 
-int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
-                               struct skt_dev_info *sinfo)
+void soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt)
 {
-       struct soc_pcmcia_socket *skt;
-       int ret, i;
-
        mutex_lock(&soc_pcmcia_sockets_lock);
+       del_timer_sync(&skt->poll_timer);
 
-       /*
-        * Initialise the per-socket structure.
-        */
-       for (i = 0; i < sinfo->nskt; i++) {
-               skt = &sinfo->skt[i];
+       pcmcia_unregister_socket(&skt->socket);
 
-               skt->socket.ops = &soc_common_pcmcia_operations;
-               skt->socket.owner = ops->owner;
-               skt->socket.dev.parent = dev;
+       flush_scheduled_work();
 
-               init_timer(&skt->poll_timer);
-               skt->poll_timer.function = soc_common_pcmcia_poll_event;
-               skt->poll_timer.data = (unsigned long)skt;
-               skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD;
+       skt->ops->hw_shutdown(skt);
 
-               skt->dev        = dev;
-               skt->ops        = ops;
+       soc_common_pcmcia_config_skt(skt, &dead_socket);
 
-               ret = request_resource(&iomem_resource, &skt->res_skt);
-               if (ret)
-                       goto out_err_1;
+       list_del(&skt->node);
+       mutex_unlock(&soc_pcmcia_sockets_lock);
 
-               ret = request_resource(&skt->res_skt, &skt->res_io);
-               if (ret)
-                       goto out_err_2;
+       iounmap(skt->virt_io);
+       skt->virt_io = NULL;
+       release_resource(&skt->res_attr);
+       release_resource(&skt->res_mem);
+       release_resource(&skt->res_io);
+       release_resource(&skt->res_skt);
+}
+EXPORT_SYMBOL(soc_pcmcia_remove_one);
 
-               ret = request_resource(&skt->res_skt, &skt->res_mem);
-               if (ret)
-                       goto out_err_3;
+int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt)
+{
+       int ret;
 
-               ret = request_resource(&skt->res_skt, &skt->res_attr);
-               if (ret)
-                       goto out_err_4;
+       init_timer(&skt->poll_timer);
+       skt->poll_timer.function = soc_common_pcmcia_poll_event;
+       skt->poll_timer.data = (unsigned long)skt;
+       skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD;
 
-               skt->virt_io = ioremap(skt->res_io.start, 0x10000);
-               if (skt->virt_io == NULL) {
-                       ret = -ENOMEM;
-                       goto out_err_5;
-               }
+       ret = request_resource(&iomem_resource, &skt->res_skt);
+       if (ret)
+               goto out_err_1;
 
-               if (list_empty(&soc_pcmcia_sockets))
-                       soc_pcmcia_cpufreq_register();
+       ret = request_resource(&skt->res_skt, &skt->res_io);
+       if (ret)
+               goto out_err_2;
 
-               list_add(&skt->node, &soc_pcmcia_sockets);
+       ret = request_resource(&skt->res_skt, &skt->res_mem);
+       if (ret)
+               goto out_err_3;
 
-               /*
-                * We initialize default socket timing here, because
-                * we are not guaranteed to see a SetIOMap operation at
-                * runtime.
-                */
-               ops->set_timing(skt);
+       ret = request_resource(&skt->res_skt, &skt->res_attr);
+       if (ret)
+               goto out_err_4;
 
-               ret = ops->hw_init(skt);
-               if (ret)
-                       goto out_err_6;
+       skt->virt_io = ioremap(skt->res_io.start, 0x10000);
+       if (skt->virt_io == NULL) {
+               ret = -ENOMEM;
+               goto out_err_5;
+       }
 
-               skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD;
-               skt->socket.resource_ops = &pccard_static_ops;
-               skt->socket.irq_mask = 0;
-               skt->socket.map_size = PAGE_SIZE;
-               skt->socket.pci_irq = skt->irq;
-               skt->socket.io_offset = (unsigned long)skt->virt_io;
+       mutex_lock(&soc_pcmcia_sockets_lock);
 
-               skt->status = soc_common_pcmcia_skt_state(skt);
+       list_add(&skt->node, &soc_pcmcia_sockets);
 
-               ret = pcmcia_register_socket(&skt->socket);
-               if (ret)
-                       goto out_err_7;
+       /*
+        * We initialize default socket timing here, because
+        * we are not guaranteed to see a SetIOMap operation at
+        * runtime.
+        */
+       skt->ops->set_timing(skt);
 
-               WARN_ON(skt->socket.sock != i);
+       ret = skt->ops->hw_init(skt);
+       if (ret)
+               goto out_err_6;
 
-               add_timer(&skt->poll_timer);
+       skt->socket.ops = &soc_common_pcmcia_operations;
+       skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD;
+       skt->socket.resource_ops = &pccard_static_ops;
+       skt->socket.irq_mask = 0;
+       skt->socket.map_size = PAGE_SIZE;
+       skt->socket.io_offset = (unsigned long)skt->virt_io;
 
-               ret = device_create_file(&skt->socket.dev, &dev_attr_status);
-               if (ret)
-                       goto out_err_8;
-       }
+       skt->status = soc_common_pcmcia_skt_state(skt);
 
-       dev_set_drvdata(dev, sinfo);
-       ret = 0;
-       goto out;
+       ret = pcmcia_register_socket(&skt->socket);
+       if (ret)
+               goto out_err_7;
 
-       do {
-               skt = &sinfo->skt[i];
+       add_timer(&skt->poll_timer);
+
+       mutex_unlock(&soc_pcmcia_sockets_lock);
+
+       ret = device_create_file(&skt->socket.dev, &dev_attr_status);
+       if (ret)
+               goto out_err_8;
+
+       return ret;
 
-               device_remove_file(&skt->socket.dev, &dev_attr_status);
  out_err_8:
-               del_timer_sync(&skt->poll_timer);
-               pcmcia_unregister_socket(&skt->socket);
+       mutex_lock(&soc_pcmcia_sockets_lock);
+       del_timer_sync(&skt->poll_timer);
+       pcmcia_unregister_socket(&skt->socket);
 
  out_err_7:
-               flush_scheduled_work();
+       flush_scheduled_work();
 
-               ops->hw_shutdown(skt);
+       skt->ops->hw_shutdown(skt);
  out_err_6:
-               list_del(&skt->node);
-               iounmap(skt->virt_io);
+       list_del(&skt->node);
+       mutex_unlock(&soc_pcmcia_sockets_lock);
+       iounmap(skt->virt_io);
  out_err_5:
-               release_resource(&skt->res_attr);
+       release_resource(&skt->res_attr);
  out_err_4:
-               release_resource(&skt->res_mem);
+       release_resource(&skt->res_mem);
  out_err_3:
-               release_resource(&skt->res_io);
+       release_resource(&skt->res_io);
  out_err_2:
-               release_resource(&skt->res_skt);
+       release_resource(&skt->res_skt);
  out_err_1:
-               i--;
-       } while (i > 0);
 
-       kfree(sinfo);
-
- out:
-       mutex_unlock(&soc_pcmcia_sockets_lock);
        return ret;
 }
+EXPORT_SYMBOL(soc_pcmcia_add_one);
 
-int soc_common_drv_pcmcia_remove(struct device *dev)
-{
-       struct skt_dev_info *sinfo = dev_get_drvdata(dev);
-       int i;
-
-       dev_set_drvdata(dev, NULL);
-
-       mutex_lock(&soc_pcmcia_sockets_lock);
-       for (i = 0; i < sinfo->nskt; i++) {
-               struct soc_pcmcia_socket *skt = &sinfo->skt[i];
-
-               del_timer_sync(&skt->poll_timer);
-
-               pcmcia_unregister_socket(&skt->socket);
-
-               flush_scheduled_work();
-
-               skt->ops->hw_shutdown(skt);
-
-               soc_common_pcmcia_config_skt(skt, &dead_socket);
-
-               list_del(&skt->node);
-               iounmap(skt->virt_io);
-               skt->virt_io = NULL;
-               release_resource(&skt->res_attr);
-               release_resource(&skt->res_mem);
-               release_resource(&skt->res_io);
-               release_resource(&skt->res_skt);
-       }
-       if (list_empty(&soc_pcmcia_sockets))
-               soc_pcmcia_cpufreq_unregister();
-
-       mutex_unlock(&soc_pcmcia_sockets_lock);
-
-       kfree(sinfo);
-
-       return 0;
-}
-EXPORT_SYMBOL(soc_common_drv_pcmcia_remove);
+MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
+MODULE_DESCRIPTION("Linux PCMCIA Card Services: Common SoC support");
+MODULE_LICENSE("Dual MPL/GPL");
index 290e143839ee68802e29ee2688eb31270ddf5f00..e40824ce6b0b2f0960be487acb8cedb3e01cb9fb 100644 (file)
@@ -30,14 +30,12 @@ struct soc_pcmcia_socket {
        /*
         * Info from low level handler
         */
-       struct device           *dev;
        unsigned int            nr;
-       unsigned int            irq;
 
        /*
         * Core PCMCIA state
         */
-       struct pcmcia_low_level *ops;
+       const struct pcmcia_low_level *ops;
 
        unsigned int            status;
        socket_state_t          cs_state;
@@ -135,10 +133,8 @@ extern void soc_pcmcia_enable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_
 extern void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *, struct soc_pcmcia_timing *);
 
 
-extern struct list_head soc_pcmcia_sockets;
-
-extern int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, struct skt_dev_info *sinfo);
-extern int soc_common_drv_pcmcia_remove(struct device *dev);
+void soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt);
+int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt);
 
 
 #ifdef CONFIG_PCMCIA_DEBUG
index 6918849d511ec3f447bd5f536e75a91dc61e83ec..12c49ee135e1edb36ce47a17d06f3be9ee2fe822 100644 (file)
 #include <pcmcia/ss.h>
 #include "tcic.h"
 
-#ifdef CONFIG_PCMCIA_DEBUG
-static int pc_debug;
-
-module_param(pc_debug, int, 0644);
-static const char version[] =
-"tcic.c 1.111 2000/02/15 04:13:12 (David Hinds)";
-
-#define debug(lvl, fmt, arg...) do {                           \
-       if (pc_debug > (lvl))                                   \
-               printk(KERN_DEBUG "tcic: " fmt , ## arg);       \
-} while (0)
-#else
-#define debug(lvl, fmt, arg...) do { } while (0)
-#endif
-
 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
 MODULE_DESCRIPTION("Databook TCIC-2 PCMCIA socket driver");
 MODULE_LICENSE("Dual MPL/GPL");
@@ -574,7 +559,7 @@ static irqreturn_t tcic_interrupt(int irq, void *dev)
     } else
        active = 1;
 
-    debug(2, "tcic_interrupt()\n");
+    pr_debug("tcic_interrupt()\n");
     
     for (i = 0; i < sockets; i++) {
        psock = socket_table[i].psock;
@@ -611,13 +596,13 @@ static irqreturn_t tcic_interrupt(int irq, void *dev)
     }
     active = 0;
     
-    debug(2, "interrupt done\n");
+    pr_debug("interrupt done\n");
     return IRQ_HANDLED;
 } /* tcic_interrupt */
 
 static void tcic_timer(u_long data)
 {
-    debug(2, "tcic_timer()\n");
+    pr_debug("tcic_timer()\n");
     tcic_timer_pending = 0;
     tcic_interrupt(0, NULL);
 } /* tcic_timer */
@@ -644,7 +629,7 @@ static int tcic_get_status(struct pcmcia_socket *sock, u_int *value)
     reg = tcic_getb(TCIC_PWR);
     if (reg & (TCIC_PWR_VCC(psock)|TCIC_PWR_VPP(psock)))
        *value |= SS_POWERON;
-    debug(1, "GetStatus(%d) = %#2.2x\n", psock, *value);
+    dev_dbg(&sock->dev, "GetStatus(%d) = %#2.2x\n", psock, *value);
     return 0;
 } /* tcic_get_status */
 
@@ -656,7 +641,7 @@ static int tcic_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
     u_char reg;
     u_short scf1, scf2;
 
-    debug(1, "SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
+    dev_dbg(&sock->dev, "SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
          "io_irq %d, csc_mask %#2.2x)\n", psock, state->flags,
          state->Vcc, state->Vpp, state->io_irq, state->csc_mask);
     tcic_setw(TCIC_ADDR+2, (psock << TCIC_SS_SHFT) | TCIC_ADR2_INDREG);
@@ -731,7 +716,7 @@ static int tcic_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
     u_int addr;
     u_short base, len, ioctl;
     
-    debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, "
+    dev_dbg(&sock->dev, "SetIOMap(%d, %d, %#2.2x, %d ns, "
          "%#llx-%#llx)\n", psock, io->map, io->flags, io->speed,
          (unsigned long long)io->start, (unsigned long long)io->stop);
     if ((io->map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) ||
@@ -768,7 +753,7 @@ static int tcic_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *m
     u_short addr, ctl;
     u_long base, len, mmap;
 
-    debug(1, "SetMemMap(%d, %d, %#2.2x, %d ns, "
+    dev_dbg(&sock->dev, "SetMemMap(%d, %d, %#2.2x, %d ns, "
          "%#llx-%#llx, %#x)\n", psock, mem->map, mem->flags,
          mem->speed, (unsigned long long)mem->res->start,
          (unsigned long long)mem->res->end, mem->card_start);
index edccfa5bb40087b0a0b9cbefae7bdbae5d781348..615a45a8fe8674fe4d920d87884bde653f2e3b3a 100644 (file)
@@ -114,22 +114,17 @@ static void topic97_zoom_video(struct pcmcia_socket *sock, int onoff)
                reg_zv |= TOPIC97_ZV_CONTROL_ENABLE;
                config_writeb(socket, TOPIC97_ZOOM_VIDEO_CONTROL, reg_zv);
 
-               reg = config_readb(socket, TOPIC97_MISC2);
-               reg |= TOPIC97_MISC2_ZV_ENABLE;
-               config_writeb(socket, TOPIC97_MISC2, reg);
-
-               /* not sure this is needed, doc is unclear */
-#if 0
                reg = config_readb(socket, TOPIC97_AUDIO_VIDEO_SWITCH);
                reg |= TOPIC97_AVS_AUDIO_CONTROL | TOPIC97_AVS_VIDEO_CONTROL;
                config_writeb(socket, TOPIC97_AUDIO_VIDEO_SWITCH, reg);
-#endif
-       }
-       else {
+       } else {
                reg_zv &= ~TOPIC97_ZV_CONTROL_ENABLE;
                config_writeb(socket, TOPIC97_ZOOM_VIDEO_CONTROL, reg_zv);
-       }
 
+               reg = config_readb(socket, TOPIC97_AUDIO_VIDEO_SWITCH);
+               reg &= ~(TOPIC97_AVS_AUDIO_CONTROL | TOPIC97_AVS_VIDEO_CONTROL);
+               config_writeb(socket, TOPIC97_AUDIO_VIDEO_SWITCH, reg);
+       }
 }
 
 static int topic97_override(struct yenta_socket *socket)
index 67cde0138061dd2b23179e72d3cda93e19b276e8..528733b4a392ca9072a749e5497eafcdcac2900a 100644 (file)
 #include <pcmcia/cistpl.h>
 #include <pcmcia/ds.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 =
-"aha152x_cs.c 1.54 2000/06/12 21:27:25 (David Hinds)";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /*====================================================================*/
 
@@ -103,7 +94,7 @@ static int aha152x_probe(struct pcmcia_device *link)
 {
     scsi_info_t *info;
 
-    DEBUG(0, "aha152x_attach()\n");
+    dev_dbg(&link->dev, "aha152x_attach()\n");
 
     /* Create new SCSI device */
     info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -115,7 +106,6 @@ static int aha152x_probe(struct pcmcia_device *link)
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
     link->io.IOAddrLines = 10;
     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;
     link->conf.Present = PRESENT_OPTION;
@@ -127,7 +117,7 @@ static int aha152x_probe(struct pcmcia_device *link)
 
 static void aha152x_detach(struct pcmcia_device *link)
 {
-    DEBUG(0, "aha152x_detach(0x%p)\n", link);
+    dev_dbg(&link->dev, "aha152x_detach\n");
 
     aha152x_release_cs(link);
 
@@ -137,9 +127,6 @@ static void aha152x_detach(struct pcmcia_device *link)
 
 /*====================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int aha152x_config_check(struct pcmcia_device *p_dev,
                                cistpl_cftable_entry_t *cfg,
                                cistpl_cftable_entry_t *dflt,
@@ -164,19 +151,22 @@ static int aha152x_config_cs(struct pcmcia_device *link)
 {
     scsi_info_t *info = link->priv;
     struct aha152x_setup s;
-    int last_ret, last_fn;
+    int ret;
     struct Scsi_Host *host;
 
-    DEBUG(0, "aha152x_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "aha152x_config\n");
 
-    last_ret = pcmcia_loop_config(link, aha152x_config_check, NULL);
-    if (last_ret) {
-       cs_error(link, RequestIO, last_ret);
-       goto failed;
-    }
+    ret = pcmcia_loop_config(link, aha152x_config_check, NULL);
+    if (ret)
+           goto failed;
 
-    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_irq(link, &link->irq);
+    if (ret)
+           goto failed;
+
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
     
     /* Set configuration options for the aha152x driver */
     memset(&s, 0, sizeof(s));
@@ -194,7 +184,7 @@ static int aha152x_config_cs(struct pcmcia_device *link)
     host = aha152x_probe_one(&s);
     if (host == NULL) {
        printk(KERN_INFO "aha152x_cs: no SCSI devices found\n");
-       goto cs_failed;
+       goto failed;
     }
 
     sprintf(info->node.dev_name, "scsi%d", host->host_no);
@@ -203,8 +193,6 @@ static int aha152x_config_cs(struct pcmcia_device *link)
 
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     aha152x_release_cs(link);
     return -ENODEV;
index 06254f46a0ddda146322e0b106faa13b90bb9882..914040684079514e32fa9919c513f4f7b5c3759a 100644 (file)
@@ -59,16 +59,6 @@ MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
 MODULE_DESCRIPTION("Future Domain PCMCIA SCSI driver");
 MODULE_LICENSE("Dual MPL/GPL");
 
-#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 =
-"fdomain_cs.c 1.47 2001/10/13 00:08:52 (David Hinds)";
-#else
-#define DEBUG(n, args...)
-#endif
-
 /*====================================================================*/
 
 typedef struct scsi_info_t {
@@ -86,7 +76,7 @@ static int fdomain_probe(struct pcmcia_device *link)
 {
        scsi_info_t *info;
 
-       DEBUG(0, "fdomain_attach()\n");
+       dev_dbg(&link->dev, "fdomain_attach()\n");
 
        /* Create new SCSI device */
        info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -99,7 +89,6 @@ static int fdomain_probe(struct pcmcia_device *link)
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
        link->io.IOAddrLines = 10;
        link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
        link->conf.Present = PRESENT_OPTION;
@@ -111,7 +100,7 @@ static int fdomain_probe(struct pcmcia_device *link)
 
 static void fdomain_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "fdomain_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "fdomain_detach\n");
 
        fdomain_release(link);
 
@@ -120,9 +109,6 @@ static void fdomain_detach(struct pcmcia_device *link)
 
 /*====================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int fdomain_config_check(struct pcmcia_device *p_dev,
                                cistpl_cftable_entry_t *cfg,
                                cistpl_cftable_entry_t *dflt,
@@ -137,20 +123,22 @@ static int fdomain_config_check(struct pcmcia_device *p_dev,
 static int fdomain_config(struct pcmcia_device *link)
 {
     scsi_info_t *info = link->priv;
-    int last_ret, last_fn;
+    int ret;
     char str[22];
     struct Scsi_Host *host;
 
-    DEBUG(0, "fdomain_config(0x%p)\n", link);
+    dev_dbg(&link->dev, "fdomain_config\n");
 
-    last_ret = pcmcia_loop_config(link, fdomain_config_check, NULL);
-    if (last_ret) {
-           cs_error(link, RequestIO, last_ret);
+    ret = pcmcia_loop_config(link, fdomain_config_check, NULL);
+    if (ret)
            goto failed;
-    }
 
-    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+    ret = pcmcia_request_irq(link, &link->irq);
+    if (ret)
+           goto failed;
+    ret = pcmcia_request_configuration(link, &link->conf);
+    if (ret)
+           goto failed;
 
     /* A bad hack... */
     release_region(link->io.BasePort1, link->io.NumPorts1);
@@ -162,11 +150,11 @@ static int fdomain_config(struct pcmcia_device *link)
     host = __fdomain_16x0_detect(&fdomain_driver_template);
     if (!host) {
         printk(KERN_INFO "fdomain_cs: no SCSI devices found\n");
-       goto cs_failed;
+       goto failed;
     }
 
     if (scsi_add_host(host, NULL))
-           goto cs_failed;
+           goto failed;
     scsi_scan_host(host);
 
     sprintf(info->node.dev_name, "scsi%d", host->host_no);
@@ -175,8 +163,6 @@ static int fdomain_config(struct pcmcia_device *link)
 
     return 0;
 
-cs_failed:
-    cs_error(link, last_fn, last_ret);
 failed:
     fdomain_release(link);
     return -ENODEV;
@@ -188,7 +174,7 @@ static void fdomain_release(struct pcmcia_device *link)
 {
        scsi_info_t *info = link->priv;
 
-       DEBUG(0, "fdomain_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "fdomain_release\n");
 
        scsi_remove_host(info->host);
        pcmcia_disable_device(link);
index e32c344d7ad853c03f4a5338b2786e3a72cdc247..c2341af587a3111e1920678400f75be246afb017 100644 (file)
@@ -1564,12 +1564,10 @@ static int nsp_cs_probe(struct pcmcia_device *link)
        link->io.IOAddrLines     = 10;  /* not used */
 
        /* Interrupt setup */
-       link->irq.Attributes     = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1       = IRQ_LEVEL_ID;
+       link->irq.Attributes     = IRQ_TYPE_EXCLUSIVE;
 
        /* Interrupt handler */
        link->irq.Handler        = &nspintr;
-       link->irq.Instance       = info;
        link->irq.Attributes     |= IRQF_SHARED;
 
        /* General socket configuration */
@@ -1684,10 +1682,10 @@ static int nsp_cs_config_check(struct pcmcia_device *p_dev,
                        if (cfg_mem->req.Size < 0x1000)
                                cfg_mem->req.Size = 0x1000;
                        cfg_mem->req.AccessSpeed = 0;
-                       if (pcmcia_request_window(&p_dev, &cfg_mem->req, &p_dev->win) != 0)
+                       if (pcmcia_request_window(p_dev, &cfg_mem->req, &p_dev->win) != 0)
                                goto next_entry;
                        map.Page = 0; map.CardOffset = mem->win[0].card_addr;
-                       if (pcmcia_map_mem_page(p_dev->win, &map) != 0)
+                       if (pcmcia_map_mem_page(p_dev, p_dev->win, &map) != 0)
                                goto next_entry;
 
                        cfg_mem->data->MmioAddress = (unsigned long) ioremap_nocache(cfg_mem->req.Base, cfg_mem->req.Size);
index 20c3e5e6d88ad369fedf8f059bb6e7c597ecc826..f85f094870b4bf95a9de3a779767218762016728 100644 (file)
 
 static char qlogic_name[] = "qlogic_cs";
 
-#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 = "qlogic_cs.c 1.79-ac 2002/10/26 (David Hinds)";
-#else
-#define DEBUG(n, args...)
-#endif
-
 static struct scsi_host_template qlogicfas_driver_template = {
        .module                 = THIS_MODULE,
        .name                   = qlogic_name,
@@ -159,7 +150,7 @@ static int qlogic_probe(struct pcmcia_device *link)
 {
        scsi_info_t *info;
 
-       DEBUG(0, "qlogic_attach()\n");
+       dev_dbg(&link->dev, "qlogic_attach()\n");
 
        /* Create new SCSI device */
        info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -171,7 +162,6 @@ static int qlogic_probe(struct pcmcia_device *link)
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
        link->io.IOAddrLines = 10;
        link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
        link->conf.Present = PRESENT_OPTION;
@@ -183,7 +173,7 @@ static int qlogic_probe(struct pcmcia_device *link)
 
 static void qlogic_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "qlogic_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "qlogic_detach\n");
 
        qlogic_release(link);
        kfree(link->priv);
@@ -192,9 +182,6 @@ static void qlogic_detach(struct pcmcia_device *link)
 
 /*====================================================================*/
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int qlogic_config_check(struct pcmcia_device *p_dev,
                               cistpl_cftable_entry_t *cfg,
                               cistpl_cftable_entry_t *dflt,
@@ -213,19 +200,22 @@ static int qlogic_config_check(struct pcmcia_device *p_dev,
 static int qlogic_config(struct pcmcia_device * link)
 {
        scsi_info_t *info = link->priv;
-       int last_ret, last_fn;
+       int ret;
        struct Scsi_Host *host;
 
-       DEBUG(0, "qlogic_config(0x%p)\n", link);
+       dev_dbg(&link->dev, "qlogic_config\n");
 
-       last_ret = pcmcia_loop_config(link, qlogic_config_check, NULL);
-       if (last_ret) {
-               cs_error(link, RequestIO, last_ret);
+       ret = pcmcia_loop_config(link, qlogic_config_check, NULL);
+       if (ret)
+               goto failed;
+
+       ret = pcmcia_request_irq(link, &link->irq);
+       if (ret)
                goto failed;
-       }
 
-       CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-       CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        if ((info->manf_id == MANFID_MACNICA) || (info->manf_id == MANFID_PIONEER) || (info->manf_id == 0x0098)) {
                /* set ATAcmd */
@@ -244,7 +234,7 @@ static int qlogic_config(struct pcmcia_device * link)
        
        if (!host) {
                printk(KERN_INFO "%s: no SCSI devices found\n", qlogic_name);
-               goto cs_failed;
+               goto failed;
        }
 
        sprintf(info->node.dev_name, "scsi%d", host->host_no);
@@ -253,12 +243,9 @@ static int qlogic_config(struct pcmcia_device * link)
 
        return 0;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
-       pcmcia_disable_device(link);
 failed:
+       pcmcia_disable_device(link);
        return -ENODEV;
-
 }                              /* qlogic_config */
 
 /*====================================================================*/
@@ -267,7 +254,7 @@ static void qlogic_release(struct pcmcia_device *link)
 {
        scsi_info_t *info = link->priv;
 
-       DEBUG(0, "qlogic_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "qlogic_release\n");
 
        scsi_remove_host(info->host);
 
index b330c11a1752378e95dd831dc053646a63d3171a..e7564d8f0cbf2318c6808a5e3744a5f9b161e077 100644 (file)
 #include <pcmcia/ds.h>
 #include <pcmcia/ciscode.h>
 
-/* ================================================================== */
-
-#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 =
-"sym53c500_cs.c 0.9c 2004/10/27 (Bob Tracy)";
-#else
-#define DEBUG(n, args...)
-#endif
 
 /* ================================================================== */
 
@@ -525,7 +514,7 @@ SYM53C500_release(struct pcmcia_device *link)
        struct scsi_info_t *info = link->priv;
        struct Scsi_Host *shost = info->host;
 
-       DEBUG(0, "SYM53C500_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "SYM53C500_release\n");
 
        /*
        *  Do this before releasing/freeing resources.
@@ -697,9 +686,6 @@ static struct scsi_host_template sym53c500_driver_template = {
      .shost_attrs              = SYM53C500_shost_attrs
 };
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static int SYM53C500_config_check(struct pcmcia_device *p_dev,
                                  cistpl_cftable_entry_t *cfg,
                                  cistpl_cftable_entry_t *dflt,
@@ -719,24 +705,27 @@ static int
 SYM53C500_config(struct pcmcia_device *link)
 {
        struct scsi_info_t *info = link->priv;
-       int last_ret, last_fn;
+       int ret;
        int irq_level, port_base;
        struct Scsi_Host *host;
        struct scsi_host_template *tpnt = &sym53c500_driver_template;
        struct sym53c500_data *data;
 
-       DEBUG(0, "SYM53C500_config(0x%p)\n", link);
+       dev_dbg(&link->dev, "SYM53C500_config\n");
 
        info->manf_id = link->manf_id;
 
-       last_ret = pcmcia_loop_config(link, SYM53C500_config_check, NULL);
-       if (last_ret) {
-               cs_error(link, RequestIO, last_ret);
+       ret = pcmcia_loop_config(link, SYM53C500_config_check, NULL);
+       if (ret)
+               goto failed;
+
+       ret = pcmcia_request_irq(link, &link->irq);
+       if (ret)
                goto failed;
-       }
 
-       CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-       CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        /*
        *  That's the trouble with copying liberally from another driver.
@@ -824,8 +813,6 @@ err_release:
        printk(KERN_INFO "sym53c500_cs: no SCSI devices found\n");
        return -ENODEV;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
 failed:
        SYM53C500_release(link);
        return -ENODEV;
@@ -855,7 +842,7 @@ static int sym53c500_resume(struct pcmcia_device *link)
 static void
 SYM53C500_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "SYM53C500_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "SYM53C500_detach\n");
 
        SYM53C500_release(link);
 
@@ -868,7 +855,7 @@ SYM53C500_probe(struct pcmcia_device *link)
 {
        struct scsi_info_t *info;
 
-       DEBUG(0, "SYM53C500_attach()\n");
+       dev_dbg(&link->dev, "SYM53C500_attach()\n");
 
        /* Create new SCSI device */
        info = kzalloc(sizeof(*info), GFP_KERNEL);
@@ -880,7 +867,6 @@ SYM53C500_probe(struct pcmcia_device *link)
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
        link->io.IOAddrLines = 10;
        link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
 
index 7c7914f5fa02cb239fd27b109ed039045e6b2a0c..fc413f0f8dd29b8eb03ef8695e8afcddbf7b9236 100644 (file)
 
 #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 @@ static void quirk_setup_brainboxes_0104(struct pcmcia_device *link, struct uart_
 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 @@ static void serial_remove(struct pcmcia_device *link)
        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 @@ static int serial_probe(struct pcmcia_device *link)
 {
        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);
@@ -346,7 +334,6 @@ static int serial_probe(struct pcmcia_device *link)
        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 @@ static void serial_detach(struct pcmcia_device *link)
 {
        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 @@ static int setup_serial(struct pcmcia_device *handle, struct serial_info * info,
        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;
 
@@ -426,21 +413,6 @@ static int setup_serial(struct pcmcia_device *handle, struct serial_info * info,
 
 /*====================================================================*/
 
-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 @@ static int simple_config(struct pcmcia_device *link)
 
        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);
 
@@ -541,10 +511,8 @@ found_port:
                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 @@ static int multi_config(struct pcmcia_device *link)
                /* 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;
        }
 
@@ -624,10 +591,8 @@ static int multi_config(struct pcmcia_device *link)
                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.
@@ -665,6 +630,25 @@ static int multi_config(struct pcmcia_device *link)
        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
@@ -676,46 +660,14 @@ static int multi_config(struct pcmcia_device *link)
 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;
 
@@ -730,20 +682,11 @@ static int serial_config(struct pcmcia_device * link)
 
        /* 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.
@@ -768,14 +711,10 @@ static int serial_config(struct pcmcia_device * link)
                        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;
 }
 
index 100e7a5c5ea1f3a48991845ba1e1cf06758e462c..e72f4046a5e0ee1cccb46a7bd11362261f9f3e0b 100644 (file)
@@ -617,136 +617,140 @@ static int ssb_pcmcia_sprom_check_crc(const u16 *sprom, size_t size)
        }                                               \
   } while (0)
 
-int ssb_pcmcia_get_invariants(struct ssb_bus *bus,
-                             struct ssb_init_invariants *iv)
+static int ssb_pcmcia_get_mac(struct pcmcia_device *p_dev,
+                       tuple_t *tuple,
+                       void *priv)
 {
-       tuple_t tuple;
-       int res;
-       unsigned char buf[32];
+       struct ssb_sprom *sprom = priv;
+
+       if (tuple->TupleData[0] != CISTPL_FUNCE_LAN_NODE_ID)
+               return -EINVAL;
+       if (tuple->TupleDataLen != ETH_ALEN + 2)
+               return -EINVAL;
+       if (tuple->TupleData[1] != ETH_ALEN)
+               return -EINVAL;
+       memcpy(sprom->il0mac, &tuple->TupleData[2], ETH_ALEN);
+       return 0;
+};
+
+static int ssb_pcmcia_do_get_invariants(struct pcmcia_device *p_dev,
+                                       tuple_t *tuple,
+                                       void *priv)
+{
+       struct ssb_init_invariants *iv = priv;
        struct ssb_sprom *sprom = &iv->sprom;
        struct ssb_boardinfo *bi = &iv->boardinfo;
        const char *error_description;
 
+       GOTO_ERROR_ON(tuple->TupleDataLen < 1, "VEN tpl < 1");
+       switch (tuple->TupleData[0]) {
+       case SSB_PCMCIA_CIS_ID:
+               GOTO_ERROR_ON((tuple->TupleDataLen != 5) &&
+                             (tuple->TupleDataLen != 7),
+                             "id tpl size");
+               bi->vendor = tuple->TupleData[1] |
+                       ((u16)tuple->TupleData[2] << 8);
+               break;
+       case SSB_PCMCIA_CIS_BOARDREV:
+               GOTO_ERROR_ON(tuple->TupleDataLen != 2,
+                       "boardrev tpl size");
+               sprom->board_rev = tuple->TupleData[1];
+               break;
+       case SSB_PCMCIA_CIS_PA:
+               GOTO_ERROR_ON((tuple->TupleDataLen != 9) &&
+                       (tuple->TupleDataLen != 10),
+                       "pa tpl size");
+               sprom->pa0b0 = tuple->TupleData[1] |
+                       ((u16)tuple->TupleData[2] << 8);
+               sprom->pa0b1 = tuple->TupleData[3] |
+                       ((u16)tuple->TupleData[4] << 8);
+               sprom->pa0b2 = tuple->TupleData[5] |
+                       ((u16)tuple->TupleData[6] << 8);
+               sprom->itssi_a = tuple->TupleData[7];
+               sprom->itssi_bg = tuple->TupleData[7];
+               sprom->maxpwr_a = tuple->TupleData[8];
+               sprom->maxpwr_bg = tuple->TupleData[8];
+               break;
+       case SSB_PCMCIA_CIS_OEMNAME:
+               /* We ignore this. */
+               break;
+       case SSB_PCMCIA_CIS_CCODE:
+               GOTO_ERROR_ON(tuple->TupleDataLen != 2,
+                       "ccode tpl size");
+               sprom->country_code = tuple->TupleData[1];
+               break;
+       case SSB_PCMCIA_CIS_ANTENNA:
+               GOTO_ERROR_ON(tuple->TupleDataLen != 2,
+                       "ant tpl size");
+               sprom->ant_available_a = tuple->TupleData[1];
+               sprom->ant_available_bg = tuple->TupleData[1];
+               break;
+       case SSB_PCMCIA_CIS_ANTGAIN:
+               GOTO_ERROR_ON(tuple->TupleDataLen != 2,
+                       "antg tpl size");
+               sprom->antenna_gain.ghz24.a0 = tuple->TupleData[1];
+               sprom->antenna_gain.ghz24.a1 = tuple->TupleData[1];
+               sprom->antenna_gain.ghz24.a2 = tuple->TupleData[1];
+               sprom->antenna_gain.ghz24.a3 = tuple->TupleData[1];
+               sprom->antenna_gain.ghz5.a0 = tuple->TupleData[1];
+               sprom->antenna_gain.ghz5.a1 = tuple->TupleData[1];
+               sprom->antenna_gain.ghz5.a2 = tuple->TupleData[1];
+               sprom->antenna_gain.ghz5.a3 = tuple->TupleData[1];
+               break;
+       case SSB_PCMCIA_CIS_BFLAGS:
+               GOTO_ERROR_ON((tuple->TupleDataLen != 3) &&
+                       (tuple->TupleDataLen != 5),
+                       "bfl tpl size");
+               sprom->boardflags_lo = tuple->TupleData[1] |
+                       ((u16)tuple->TupleData[2] << 8);
+               break;
+       case SSB_PCMCIA_CIS_LEDS:
+               GOTO_ERROR_ON(tuple->TupleDataLen != 5,
+                       "leds tpl size");
+               sprom->gpio0 = tuple->TupleData[1];
+               sprom->gpio1 = tuple->TupleData[2];
+               sprom->gpio2 = tuple->TupleData[3];
+               sprom->gpio3 = tuple->TupleData[4];
+               break;
+       }
+       return -ENOSPC; /* continue with next entry */
+
+error:
+       ssb_printk(KERN_ERR PFX
+                  "PCMCIA: Failed to fetch device invariants: %s\n",
+                  error_description);
+       return -ENODEV;
+}
+
+
+int ssb_pcmcia_get_invariants(struct ssb_bus *bus,
+                             struct ssb_init_invariants *iv)
+{
+       struct ssb_sprom *sprom = &iv->sprom;
+       int res;
+
        memset(sprom, 0xFF, sizeof(*sprom));
        sprom->revision = 1;
        sprom->boardflags_lo = 0;
        sprom->boardflags_hi = 0;
 
        /* First fetch the MAC address. */
-       memset(&tuple, 0, sizeof(tuple));
-       tuple.DesiredTuple = CISTPL_FUNCE;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       res = pcmcia_get_first_tuple(bus->host_pcmcia, &tuple);
-       GOTO_ERROR_ON(res != 0, "MAC first tpl");
-       res = pcmcia_get_tuple_data(bus->host_pcmcia, &tuple);
-       GOTO_ERROR_ON(res != 0, "MAC first tpl data");
-       while (1) {
-               GOTO_ERROR_ON(tuple.TupleDataLen < 1, "MAC tpl < 1");
-               if (tuple.TupleData[0] == CISTPL_FUNCE_LAN_NODE_ID)
-                       break;
-               res = pcmcia_get_next_tuple(bus->host_pcmcia, &tuple);
-               GOTO_ERROR_ON(res != 0, "MAC next tpl");
-               res = pcmcia_get_tuple_data(bus->host_pcmcia, &tuple);
-               GOTO_ERROR_ON(res != 0, "MAC next tpl data");
+       res = pcmcia_loop_tuple(bus->host_pcmcia, CISTPL_FUNCE,
+                               ssb_pcmcia_get_mac, sprom);
+       if (res != 0) {
+               ssb_printk(KERN_ERR PFX
+                       "PCMCIA: Failed to fetch MAC address\n");
+               return -ENODEV;
        }
-       GOTO_ERROR_ON(tuple.TupleDataLen != ETH_ALEN + 2, "MAC tpl size");
-       memcpy(sprom->il0mac, &tuple.TupleData[2], ETH_ALEN);
 
        /* Fetch the vendor specific tuples. */
-       memset(&tuple, 0, sizeof(tuple));
-       tuple.DesiredTuple = SSB_PCMCIA_CIS;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       res = pcmcia_get_first_tuple(bus->host_pcmcia, &tuple);
-       GOTO_ERROR_ON(res != 0, "VEN first tpl");
-       res = pcmcia_get_tuple_data(bus->host_pcmcia, &tuple);
-       GOTO_ERROR_ON(res != 0, "VEN first tpl data");
-       while (1) {
-               GOTO_ERROR_ON(tuple.TupleDataLen < 1, "VEN tpl < 1");
-               switch (tuple.TupleData[0]) {
-               case SSB_PCMCIA_CIS_ID:
-                       GOTO_ERROR_ON((tuple.TupleDataLen != 5) &&
-                                     (tuple.TupleDataLen != 7),
-                                     "id tpl size");
-                       bi->vendor = tuple.TupleData[1] |
-                              ((u16)tuple.TupleData[2] << 8);
-                       break;
-               case SSB_PCMCIA_CIS_BOARDREV:
-                       GOTO_ERROR_ON(tuple.TupleDataLen != 2,
-                                     "boardrev tpl size");
-                       sprom->board_rev = tuple.TupleData[1];
-                       break;
-               case SSB_PCMCIA_CIS_PA:
-                       GOTO_ERROR_ON((tuple.TupleDataLen != 9) &&
-                                     (tuple.TupleDataLen != 10),
-                                     "pa tpl size");
-                       sprom->pa0b0 = tuple.TupleData[1] |
-                                ((u16)tuple.TupleData[2] << 8);
-                       sprom->pa0b1 = tuple.TupleData[3] |
-                                ((u16)tuple.TupleData[4] << 8);
-                       sprom->pa0b2 = tuple.TupleData[5] |
-                                ((u16)tuple.TupleData[6] << 8);
-                       sprom->itssi_a = tuple.TupleData[7];
-                       sprom->itssi_bg = tuple.TupleData[7];
-                       sprom->maxpwr_a = tuple.TupleData[8];
-                       sprom->maxpwr_bg = tuple.TupleData[8];
-                       break;
-               case SSB_PCMCIA_CIS_OEMNAME:
-                       /* We ignore this. */
-                       break;
-               case SSB_PCMCIA_CIS_CCODE:
-                       GOTO_ERROR_ON(tuple.TupleDataLen != 2,
-                                     "ccode tpl size");
-                       sprom->country_code = tuple.TupleData[1];
-                       break;
-               case SSB_PCMCIA_CIS_ANTENNA:
-                       GOTO_ERROR_ON(tuple.TupleDataLen != 2,
-                                     "ant tpl size");
-                       sprom->ant_available_a = tuple.TupleData[1];
-                       sprom->ant_available_bg = tuple.TupleData[1];
-                       break;
-               case SSB_PCMCIA_CIS_ANTGAIN:
-                       GOTO_ERROR_ON(tuple.TupleDataLen != 2,
-                                     "antg tpl size");
-                       sprom->antenna_gain.ghz24.a0 = tuple.TupleData[1];
-                       sprom->antenna_gain.ghz24.a1 = tuple.TupleData[1];
-                       sprom->antenna_gain.ghz24.a2 = tuple.TupleData[1];
-                       sprom->antenna_gain.ghz24.a3 = tuple.TupleData[1];
-                       sprom->antenna_gain.ghz5.a0 = tuple.TupleData[1];
-                       sprom->antenna_gain.ghz5.a1 = tuple.TupleData[1];
-                       sprom->antenna_gain.ghz5.a2 = tuple.TupleData[1];
-                       sprom->antenna_gain.ghz5.a3 = tuple.TupleData[1];
-                       break;
-               case SSB_PCMCIA_CIS_BFLAGS:
-                       GOTO_ERROR_ON((tuple.TupleDataLen != 3) &&
-                                     (tuple.TupleDataLen != 5),
-                                     "bfl tpl size");
-                       sprom->boardflags_lo = tuple.TupleData[1] |
-                                        ((u16)tuple.TupleData[2] << 8);
-                       break;
-               case SSB_PCMCIA_CIS_LEDS:
-                       GOTO_ERROR_ON(tuple.TupleDataLen != 5,
-                                     "leds tpl size");
-                       sprom->gpio0 = tuple.TupleData[1];
-                       sprom->gpio1 = tuple.TupleData[2];
-                       sprom->gpio2 = tuple.TupleData[3];
-                       sprom->gpio3 = tuple.TupleData[4];
-                       break;
-               }
-               res = pcmcia_get_next_tuple(bus->host_pcmcia, &tuple);
-               if (res == -ENOSPC)
-                       break;
-               GOTO_ERROR_ON(res != 0, "VEN next tpl");
-               res = pcmcia_get_tuple_data(bus->host_pcmcia, &tuple);
-               GOTO_ERROR_ON(res != 0, "VEN next tpl data");
-       }
+       res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS,
+                               ssb_pcmcia_do_get_invariants, sprom);
+       if ((res == 0) || (res == -ENOSPC))
+               return 0;
 
-       return 0;
-error:
        ssb_printk(KERN_ERR PFX
-                  "PCMCIA: Failed to fetch device invariants: %s\n",
-                  error_description);
+                       "PCMCIA: Failed to fetch device invariants\n");
        return -ENODEV;
 }
 
index 80c0df8656f317d5517d49bd2df494a95fb10f13..39923cb388be5053c09a3e3b4e3ce28ffa72b51f 100644 (file)
@@ -141,37 +141,14 @@ static int das16cs_timer_insn_config(struct comedi_device *dev,
                                     struct comedi_insn *insn,
                                     unsigned int *data);
 
-static int get_prodid(struct comedi_device *dev, struct pcmcia_device *link)
-{
-       tuple_t tuple;
-       u_short buf[128];
-       int prodid = 0;
-
-       tuple.TupleData = (cisdata_t *) buf;
-       tuple.TupleOffset = 0;
-       tuple.TupleDataMax = 255;
-       tuple.DesiredTuple = CISTPL_MANFID;
-       tuple.Attributes = TUPLE_RETURN_COMMON;
-       if ((pcmcia_get_first_tuple(link, &tuple) == 0) &&
-           (pcmcia_get_tuple_data(link, &tuple) == 0)) {
-               prodid = le16_to_cpu(buf[1]);
-       }
-
-       return prodid;
-}
-
 static const struct das16cs_board *das16cs_probe(struct comedi_device *dev,
                                                 struct pcmcia_device *link)
 {
-       int id;
        int i;
 
-       id = get_prodid(dev, link);
-
        for (i = 0; i < n_boards; i++) {
-               if (das16cs_boards[i].device_id == id) {
+               if (das16cs_boards[i].device_id == link->card_id)
                        return das16cs_boards + i;
-               }
        }
 
        printk("unknown board!\n");
@@ -660,27 +637,8 @@ static int das16cs_timer_insn_config(struct comedi_device *dev,
 
 ======================================================================*/
 
-/*
-   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.
-*/
 #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
 
-#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 =
-    "cb_das16_cs.c pcmcia code (David Schleef), modified from dummy_cs.c 1.31 2001/08/24 12:13:13 (David Hinds)";
-#else
-#define DEBUG(n, args...)
-#endif
-
-/*====================================================================*/
-
 static void das16cs_pcmcia_config(struct pcmcia_device *link);
 static void das16cs_pcmcia_release(struct pcmcia_device *link);
 static int das16cs_pcmcia_suspend(struct pcmcia_device *p_dev);
@@ -733,7 +691,7 @@ static int das16cs_pcmcia_attach(struct pcmcia_device *link)
 {
        struct local_info_t *local;
 
-       DEBUG(0, "das16cs_pcmcia_attach()\n");
+       dev_dbg(&link->dev, "das16cs_pcmcia_attach()\n");
 
        /* Allocate space for private device-specific data */
        local = kzalloc(sizeof(struct local_info_t), GFP_KERNEL);
@@ -745,7 +703,6 @@ static int das16cs_pcmcia_attach(struct pcmcia_device *link)
        /* Initialize the pcmcia_device structure */
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->irq.Handler = NULL;
 
        link->conf.Attributes = 0;
@@ -760,7 +717,7 @@ static int das16cs_pcmcia_attach(struct pcmcia_device *link)
 
 static void das16cs_pcmcia_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "das16cs_pcmcia_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "das16cs_pcmcia_detach\n");
 
        if (link->dev_node) {
                ((struct local_info_t *)link->priv)->stop = 1;
@@ -771,118 +728,55 @@ static void das16cs_pcmcia_detach(struct pcmcia_device *link)
                kfree(link->priv);
 }                              /* das16cs_pcmcia_detach */
 
-static void das16cs_pcmcia_config(struct pcmcia_device *link)
-{
-       struct local_info_t *dev = link->priv;
-       tuple_t tuple;
-       cisparse_t parse;
-       int last_fn, last_ret;
-       u_char buf[64];
-       cistpl_cftable_entry_t dflt = { 0 };
 
-       DEBUG(0, "das16cs_pcmcia_config(0x%p)\n", link);
-
-       /*
-          This reads the card's CONFIG tuple to find its configuration
-          registers.
-        */
-       tuple.DesiredTuple = CISTPL_CONFIG;
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-
-       last_fn = GetFirstTuple;
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret != 0)
-               goto cs_failed;
-
-       last_fn = GetTupleData;
-       last_ret = pcmcia_get_tuple_data(link, &tuple);
-       if (last_ret != 0)
-               goto cs_failed;
-
-       last_fn = ParseTuple;
-       last_ret = pcmcia_parse_tuple(&tuple, &parse);
-       if (last_ret != 0)
-               goto cs_failed;
-
-       link->conf.ConfigBase = parse.config.base;
-       link->conf.Present = parse.config.rmask[0];
+static int das16cs_pcmcia_config_loop(struct pcmcia_device *p_dev,
+                               cistpl_cftable_entry_t *cfg,
+                               cistpl_cftable_entry_t *dflt,
+                               unsigned int vcc,
+                               void *priv_data)
+{
+       if (cfg->index == 0)
+               return -EINVAL;
 
-       /*
-          In this loop, we scan the CIS for configuration table entries,
-          each of which describes a valid card configuration, including
-          voltage, IO window, memory window, and interrupt settings.
-
-          We make no assumptions about the card to be configured: we use
-          just the information available in the CIS.  In an ideal world,
-          this would work for any PCMCIA card, but it requires a complete
-          and accurate CIS.  In practice, a driver usually "knows" most of
-          these things without consulting the CIS, and most client drivers
-          will only use the CIS to fill in implementation-defined details.
-        */
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       last_fn = GetFirstTuple;
-
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret)
-               goto cs_failed;
-
-       while (1) {
-               cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-               if (pcmcia_get_tuple_data(link, &tuple))
-                       goto next_entry;
-               if (pcmcia_parse_tuple(&tuple, &parse))
-                       goto next_entry;
-
-               if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-                       dflt = *cfg;
-               if (cfg->index == 0)
-                       goto next_entry;
-               link->conf.ConfigIndex = cfg->index;
-
-               /* Does this card need audio output? */
-/*     if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
-               link->conf.Attributes |= CONF_ENABLE_SPKR;
-               link->conf.Status = CCSR_AUDIO_ENA;
-       }
-*/
-               /* Do we need to allocate an interrupt? */
-               if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
-                       link->conf.Attributes |= CONF_ENABLE_IRQ;
-
-               /* IO window settings */
-               link->io.NumPorts1 = link->io.NumPorts2 = 0;
-               if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
-                       cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
-                       link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-                       if (!(io->flags & CISTPL_IO_8BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-                       if (!(io->flags & CISTPL_IO_16BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-                       link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
-                       link->io.BasePort1 = io->win[0].base;
-                       link->io.NumPorts1 = io->win[0].len;
-                       if (io->nwin > 1) {
-                               link->io.Attributes2 = link->io.Attributes1;
-                               link->io.BasePort2 = io->win[1].base;
-                               link->io.NumPorts2 = io->win[1].len;
-                       }
-                       /* This reserves IO space but doesn't actually enable it */
-                       if (pcmcia_request_io(link, &link->io))
-                               goto next_entry;
+       /* Do we need to allocate an interrupt? */
+       if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+               p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+
+       /* IO window settings */
+       p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
+       if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
+               cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
+               p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+               if (!(io->flags & CISTPL_IO_8BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
+               if (!(io->flags & CISTPL_IO_16BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+               p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
+               p_dev->io.BasePort1 = io->win[0].base;
+               p_dev->io.NumPorts1 = io->win[0].len;
+               if (io->nwin > 1) {
+                       p_dev->io.Attributes2 = p_dev->io.Attributes1;
+                       p_dev->io.BasePort2 = io->win[1].base;
+                       p_dev->io.NumPorts2 = io->win[1].len;
                }
+               /* This reserves IO space but doesn't actually enable it */
+               return pcmcia_request_io(p_dev, &p_dev->io);
+       }
 
-               /* If we got this far, we're cool! */
-               break;
+       return 0;
+}
+
+static void das16cs_pcmcia_config(struct pcmcia_device *link)
+{
+       struct local_info_t *dev = link->priv;
+       int ret;
 
-next_entry:
-               last_fn = GetNextTuple;
+       dev_dbg(&link->dev, "das16cs_pcmcia_config\n");
 
-               last_ret = pcmcia_get_next_tuple(link, &tuple);
-               if (last_ret)
-                       goto cs_failed;
+       ret = pcmcia_loop_config(link, das16cs_pcmcia_config_loop, NULL);
+       if (ret) {
+               dev_warn(&link->dev, "no configuration found\n");
+               goto failed;
        }
 
        /*
@@ -891,21 +785,18 @@ next_entry:
           irq structure is initialized.
         */
        if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-               last_fn = RequestIRQ;
-
-               last_ret = pcmcia_request_irq(link, &link->irq);
-               if (last_ret)
-                       goto cs_failed;
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
        }
        /*
           This actually configures the PCMCIA socket -- setting up
           the I/O windows and the interrupt mapping, and putting the
           card and host interface into "Memory and IO" mode.
         */
-       last_fn = RequestConfiguration;
-       last_ret = pcmcia_request_configuration(link, &link->conf);
-       if (last_ret)
-               goto cs_failed;
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        /*
           At this point, the dev_node_t structure(s) need to be
@@ -930,14 +821,13 @@ next_entry:
 
        return;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
+failed:
        das16cs_pcmcia_release(link);
 }                              /* das16cs_pcmcia_config */
 
 static void das16cs_pcmcia_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "das16cs_pcmcia_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "das16cs_pcmcia_release\n");
        pcmcia_disable_device(link);
 }                              /* das16cs_pcmcia_release */
 
@@ -983,14 +873,13 @@ struct pcmcia_driver das16cs_driver = {
 
 static int __init init_das16cs_pcmcia_cs(void)
 {
-       DEBUG(0, "%s\n", version);
        pcmcia_register_driver(&das16cs_driver);
        return 0;
 }
 
 static void __exit exit_das16cs_pcmcia_cs(void)
 {
-       DEBUG(0, "das16cs_pcmcia_cs: unloading\n");
+       pr_debug("das16cs_pcmcia_cs: unloading\n");
        pcmcia_unregister_driver(&das16cs_driver);
 }
 
index 9cab21eaaa186f23e8179f22e13b578dffa34f7f..9b945e5fdd32a026b3c713aaa58b0b9022ac1391 100644 (file)
@@ -110,25 +110,6 @@ static int das08_cs_attach(struct comedi_device *dev,
 
 ======================================================================*/
 
-/*
-   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 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 const char *version =
-    "das08.c pcmcia code (Frank Hess), modified from dummy_cs.c 1.31 2001/08/24 12:13:13 (David Hinds)";
-#else
-#define DEBUG(n, args...)
-#endif
-
-/*====================================================================*/
 static void das08_pcmcia_config(struct pcmcia_device *link);
 static void das08_pcmcia_release(struct pcmcia_device *link);
 static int das08_pcmcia_suspend(struct pcmcia_device *p_dev);
@@ -181,7 +162,7 @@ static int das08_pcmcia_attach(struct pcmcia_device *link)
 {
        struct local_info_t *local;
 
-       DEBUG(0, "das08_pcmcia_attach()\n");
+       dev_dbg(&link->dev, "das08_pcmcia_attach()\n");
 
        /* Allocate space for private device-specific data */
        local = kzalloc(sizeof(struct local_info_t), GFP_KERNEL);
@@ -192,7 +173,6 @@ static int das08_pcmcia_attach(struct pcmcia_device *link)
 
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->irq.Handler = NULL;
 
        /*
@@ -224,7 +204,7 @@ static int das08_pcmcia_attach(struct pcmcia_device *link)
 static void das08_pcmcia_detach(struct pcmcia_device *link)
 {
 
-       DEBUG(0, "das08_pcmcia_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "das08_pcmcia_detach\n");
 
        if (link->dev_node) {
                ((struct local_info_t *)link->priv)->stop = 1;
@@ -237,6 +217,44 @@ static void das08_pcmcia_detach(struct pcmcia_device *link)
 
 }                              /* das08_pcmcia_detach */
 
+
+static int das08_pcmcia_config_loop(struct pcmcia_device *p_dev,
+                               cistpl_cftable_entry_t *cfg,
+                               cistpl_cftable_entry_t *dflt,
+                               unsigned int vcc,
+                               void *priv_data)
+{
+       if (cfg->index == 0)
+               return -ENODEV;
+
+       /* Do we need to allocate an interrupt? */
+       if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+               p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+
+       /* IO window settings */
+       p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
+       if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
+               cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
+               p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+               if (!(io->flags & CISTPL_IO_8BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
+               if (!(io->flags & CISTPL_IO_16BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+               p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
+               p_dev->io.BasePort1 = io->win[0].base;
+               p_dev->io.NumPorts1 = io->win[0].len;
+               if (io->nwin > 1) {
+                       p_dev->io.Attributes2 = p_dev->io.Attributes1;
+                       p_dev->io.BasePort2 = io->win[1].base;
+                       p_dev->io.NumPorts2 = io->win[1].len;
+               }
+               /* This reserves IO space but doesn't actually enable it */
+               return pcmcia_request_io(p_dev, &p_dev->io);
+       }
+       return 0;
+}
+
+
 /*======================================================================
 
     das08_pcmcia_config() is scheduled to run after a CARD_INSERTION event
@@ -248,128 +266,20 @@ static void das08_pcmcia_detach(struct pcmcia_device *link)
 static void das08_pcmcia_config(struct pcmcia_device *link)
 {
        struct local_info_t *dev = link->priv;
-       tuple_t tuple;
-       cisparse_t parse;
-       int last_fn, last_ret;
-       u_char buf[64];
-       cistpl_cftable_entry_t dflt = { 0 };
-
-       DEBUG(0, "das08_pcmcia_config(0x%p)\n", link);
-
-       /*
-          This reads the card's CONFIG tuple to find its configuration
-          registers.
-        */
-       tuple.DesiredTuple = CISTPL_CONFIG;
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-       last_fn = GetFirstTuple;
-
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret)
-               goto cs_failed;
-
-       last_fn = GetTupleData;
-
-       last_ret = pcmcia_get_tuple_data(link, &tuple);
-       if (last_ret)
-               goto cs_failed;
-
-       last_fn = ParseTuple;
-
-       last_ret = pcmcia_parse_tuple(&tuple, &parse);
-       if (last_ret)
-               goto cs_failed;
-
-       link->conf.ConfigBase = parse.config.base;
-       link->conf.Present = parse.config.rmask[0];
-
-       /*
-          In this loop, we scan the CIS for configuration table entries,
-          each of which describes a valid card configuration, including
-          voltage, IO window, memory window, and interrupt settings.
-
-          We make no assumptions about the card to be configured: we use
-          just the information available in the CIS.  In an ideal world,
-          this would work for any PCMCIA card, but it requires a complete
-          and accurate CIS.  In practice, a driver usually "knows" most of
-          these things without consulting the CIS, and most client drivers
-          will only use the CIS to fill in implementation-defined details.
-        */
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       last_fn = GetFirstTuple;
-
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret)
-               goto cs_failed;
-
-       while (1) {
-               cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-
-               last_ret = pcmcia_get_tuple_data(link, &tuple);
-               if (last_ret)
-                       goto next_entry;
-
-               last_ret = pcmcia_parse_tuple(&tuple, &parse);
-               if (last_ret)
-                       goto next_entry;
-
-               if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-                       dflt = *cfg;
-               if (cfg->index == 0)
-                       goto next_entry;
-               link->conf.ConfigIndex = cfg->index;
-
-               /* Does this card need audio output? */
-/*     if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
-               link->conf.Attributes |= CONF_ENABLE_SPKR;
-               link->conf.Status = CCSR_AUDIO_ENA;
-       }
-*/
-               /* Do we need to allocate an interrupt? */
-               if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
-                       link->conf.Attributes |= CONF_ENABLE_IRQ;
-
-               /* IO window settings */
-               link->io.NumPorts1 = link->io.NumPorts2 = 0;
-               if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
-                       cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
-                       link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-                       if (!(io->flags & CISTPL_IO_8BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-                       if (!(io->flags & CISTPL_IO_16BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-                       link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
-                       link->io.BasePort1 = io->win[0].base;
-                       link->io.NumPorts1 = io->win[0].len;
-                       if (io->nwin > 1) {
-                               link->io.Attributes2 = link->io.Attributes1;
-                               link->io.BasePort2 = io->win[1].base;
-                               link->io.NumPorts2 = io->win[1].len;
-                       }
-                       /* This reserves IO space but doesn't actually enable it */
-                       if (pcmcia_request_io(link, &link->io) != 0)
-                               goto next_entry;
-               }
-
-               /* If we got this far, we're cool! */
-               break;
+       int ret;
 
-next_entry:
-               last_fn = GetNextTuple;
+       dev_dbg(&link->dev, "das08_pcmcia_config\n");
 
-               last_ret = pcmcia_get_next_tuple(link, &tuple);
-               if (last_ret)
-                       goto cs_failed;
+       ret = pcmcia_loop_config(link, das08_pcmcia_config_loop, NULL);
+       if (ret) {
+               dev_warn(&link->dev, "no configuration found\n");
+               goto failed;
        }
 
        if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-               last_fn = RequestIRQ;
-               last_ret = pcmcia_request_irq(link, &link->irq);
-               if (last_ret)
-                       goto cs_failed;
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
        }
 
        /*
@@ -377,10 +287,9 @@ next_entry:
           the I/O windows and the interrupt mapping, and putting the
           card and host interface into "Memory and IO" mode.
         */
-       last_fn = RequestConfiguration;
-       last_ret = pcmcia_request_configuration(link, &link->conf);
-       if (last_ret)
-               goto cs_failed;
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        /*
           At this point, the dev_node_t structure(s) need to be
@@ -405,8 +314,7 @@ next_entry:
 
        return;
 
-cs_failed:
-       cs_error(link, last_fn, last_ret);
+failed:
        das08_pcmcia_release(link);
 
 }                              /* das08_pcmcia_config */
@@ -421,7 +329,7 @@ cs_failed:
 
 static void das08_pcmcia_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "das08_pcmcia_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "das08_pcmcia_release\n");
        pcmcia_disable_device(link);
 }                              /* das08_pcmcia_release */
 
@@ -477,14 +385,13 @@ struct pcmcia_driver das08_cs_driver = {
 
 static int __init init_das08_pcmcia_cs(void)
 {
-       DEBUG(0, "%s\n", version);
        pcmcia_register_driver(&das08_cs_driver);
        return 0;
 }
 
 static void __exit exit_das08_pcmcia_cs(void)
 {
-       DEBUG(0, "das08_pcmcia_cs: unloading\n");
+       pr_debug("das08_pcmcia_cs: unloading\n");
        pcmcia_unregister_driver(&das08_cs_driver);
 }
 
index ec31a39706648a212083d1215e9e51bf2ea75519..ef5e1183d47d30d6448bf63440cf41219ab48c52 100644 (file)
@@ -436,25 +436,7 @@ static int dio700_detach(struct comedi_device *dev)
        return 0;
 };
 
-/* PCMCIA crap */
-
-/*
-   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 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 = "ni_daq_700.c, based on dummy_cs.c";
-#else
-#define DEBUG(n, args...)
-#endif
-
-/*====================================================================*/
+/* PCMCIA crap -- watch your words, please! */
 
 static void dio700_config(struct pcmcia_device *link);
 static void dio700_release(struct pcmcia_device *link);
@@ -510,7 +492,7 @@ static int dio700_cs_attach(struct pcmcia_device *link)
 
        printk(KERN_INFO "ni_daq_700:  cs-attach\n");
 
-       DEBUG(0, "dio700_cs_attach()\n");
+       dev_dbg(&link->dev, "dio700_cs_attach()\n");
 
        /* Allocate space for private device-specific data */
        local = kzalloc(sizeof(struct local_info_t), GFP_KERNEL);
@@ -521,7 +503,6 @@ static int dio700_cs_attach(struct pcmcia_device *link)
 
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->irq.Handler = NULL;
 
        /*
@@ -555,7 +536,7 @@ static void dio700_cs_detach(struct pcmcia_device *link)
 
        printk(KERN_INFO "ni_daq_700: cs-detach!\n");
 
-       DEBUG(0, "dio700_cs_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "dio700_cs_detach\n");
 
        if (link->dev_node) {
                ((struct local_info_t *)link->priv)->stop = 1;
@@ -576,141 +557,85 @@ static void dio700_cs_detach(struct pcmcia_device *link)
 
 ======================================================================*/
 
-static void dio700_config(struct pcmcia_device *link)
+static int dio700_pcmcia_config_loop(struct pcmcia_device *p_dev,
+                               cistpl_cftable_entry_t *cfg,
+                               cistpl_cftable_entry_t *dflt,
+                               unsigned int vcc,
+                               void *priv_data)
 {
-       struct local_info_t *dev = link->priv;
-       tuple_t tuple;
-       cisparse_t parse;
-       int last_ret;
-       u_char buf[64];
-       win_req_t req;
+       win_req_t *req = priv_data;
        memreq_t map;
-       cistpl_cftable_entry_t dflt = { 0 };
 
-       printk(KERN_INFO "ni_daq_700:  cs-config\n");
-
-       DEBUG(0, "dio700_config(0x%p)\n", link);
+       if (cfg->index == 0)
+               return -ENODEV;
 
-       /*
-          This reads the card's CONFIG tuple to find its configuration
-          registers.
-        */
-       tuple.DesiredTuple = CISTPL_CONFIG;
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetFirstTuple, last_ret);
-               goto cs_failed;
+       /* Does this card need audio output? */
+       if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
+               p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
+               p_dev->conf.Status = CCSR_AUDIO_ENA;
        }
 
-       last_ret = pcmcia_get_tuple_data(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetTupleData, last_ret);
-               goto cs_failed;
+       /* Do we need to allocate an interrupt? */
+       if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+               p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+
+       /* IO window settings */
+       p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
+       if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
+               cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
+               p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+               if (!(io->flags & CISTPL_IO_8BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
+               if (!(io->flags & CISTPL_IO_16BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+               p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
+               p_dev->io.BasePort1 = io->win[0].base;
+               p_dev->io.NumPorts1 = io->win[0].len;
+               if (io->nwin > 1) {
+                       p_dev->io.Attributes2 = p_dev->io.Attributes1;
+                       p_dev->io.BasePort2 = io->win[1].base;
+                       p_dev->io.NumPorts2 = io->win[1].len;
+               }
+               /* This reserves IO space but doesn't actually enable it */
+               if (pcmcia_request_io(p_dev, &p_dev->io) != 0)
+                       return -ENODEV;
        }
 
-       last_ret = pcmcia_parse_tuple(&tuple, &parse);
-       if (last_ret) {
-               cs_error(link, ParseTuple, last_ret);
-               goto cs_failed;
+       if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
+               cistpl_mem_t *mem =
+                       (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
+               req->Attributes = WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM;
+               req->Attributes |= WIN_ENABLE;
+               req->Base = mem->win[0].host_addr;
+               req->Size = mem->win[0].len;
+               if (req->Size < 0x1000)
+                       req->Size = 0x1000;
+               req->AccessSpeed = 0;
+               if (pcmcia_request_window(p_dev, req, &p_dev->win))
+                       return -ENODEV;
+               map.Page = 0;
+               map.CardOffset = mem->win[0].card_addr;
+               if (pcmcia_map_mem_page(p_dev, p_dev->win, &map))
+                       return -ENODEV;
        }
-       link->conf.ConfigBase = parse.config.base;
-       link->conf.Present = parse.config.rmask[0];
-
-       /*
-          In this loop, we scan the CIS for configuration table entries,
-          each of which describes a valid card configuration, including
-          voltage, IO window, memory window, and interrupt settings.
-
-          We make no assumptions about the card to be configured: we use
-          just the information available in the CIS.  In an ideal world,
-          this would work for any PCMCIA card, but it requires a complete
-          and accurate CIS.  In practice, a driver usually "knows" most of
-          these things without consulting the CIS, and most client drivers
-          will only use the CIS to fill in implementation-defined details.
-        */
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret != 0) {
-               cs_error(link, GetFirstTuple, last_ret);
-               goto cs_failed;
-       }
-       while (1) {
-               cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-               if (pcmcia_get_tuple_data(link, &tuple) != 0)
-                       goto next_entry;
-               if (pcmcia_parse_tuple(&tuple, &parse) != 0)
-                       goto next_entry;
-
-               if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-                       dflt = *cfg;
-               if (cfg->index == 0)
-                       goto next_entry;
-               link->conf.ConfigIndex = cfg->index;
-
-               /* Does this card need audio output? */
-               if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
-                       link->conf.Attributes |= CONF_ENABLE_SPKR;
-                       link->conf.Status = CCSR_AUDIO_ENA;
-               }
+       /* If we got this far, we're cool! */
+       return 0;
+}
 
-               /* Do we need to allocate an interrupt? */
-               if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
-                       link->conf.Attributes |= CONF_ENABLE_IRQ;
-
-               /* IO window settings */
-               link->io.NumPorts1 = link->io.NumPorts2 = 0;
-               if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
-                       cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
-                       link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-                       if (!(io->flags & CISTPL_IO_8BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-                       if (!(io->flags & CISTPL_IO_16BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-                       link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
-                       link->io.BasePort1 = io->win[0].base;
-                       link->io.NumPorts1 = io->win[0].len;
-                       if (io->nwin > 1) {
-                               link->io.Attributes2 = link->io.Attributes1;
-                               link->io.BasePort2 = io->win[1].base;
-                               link->io.NumPorts2 = io->win[1].len;
-                       }
-                       /* This reserves IO space but doesn't actually enable it */
-                       if (pcmcia_request_io(link, &link->io) != 0)
-                               goto next_entry;
-               }
+static void dio700_config(struct pcmcia_device *link)
+{
+       struct local_info_t *dev = link->priv;
+       win_req_t req;
+       int ret;
 
-               if ((cfg->mem.nwin > 0) || (dflt.mem.nwin > 0)) {
-                       cistpl_mem_t *mem =
-                           (cfg->mem.nwin) ? &cfg->mem : &dflt.mem;
-                       req.Attributes = WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM;
-                       req.Attributes |= WIN_ENABLE;
-                       req.Base = mem->win[0].host_addr;
-                       req.Size = mem->win[0].len;
-                       if (req.Size < 0x1000)
-                               req.Size = 0x1000;
-                       req.AccessSpeed = 0;
-                       if (pcmcia_request_window(&link, &req, &link->win))
-                               goto next_entry;
-                       map.Page = 0;
-                       map.CardOffset = mem->win[0].card_addr;
-                       if (pcmcia_map_mem_page(link->win, &map))
-                               goto next_entry;
-               }
-               /* If we got this far, we're cool! */
-               break;
+       printk(KERN_INFO "ni_daq_700:  cs-config\n");
 
-next_entry:
+       dev_dbg(&link->dev, "dio700_config\n");
 
-               last_ret = pcmcia_get_next_tuple(link, &tuple);
-               if (last_ret) {
-                       cs_error(link, GetNextTuple, last_ret);
-                       goto cs_failed;
-               }
+       ret = pcmcia_loop_config(link, dio700_pcmcia_config_loop, &req);
+       if (ret) {
+               dev_warn(&link->dev, "no configuration found\n");
+               goto failed;
        }
 
        /*
@@ -719,11 +644,9 @@ next_entry:
           irq structure is initialized.
         */
        if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-               last_ret = pcmcia_request_irq(link, &link->irq);
-               if (last_ret) {
-                       cs_error(link, RequestIRQ, last_ret);
-                       goto cs_failed;
-               }
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
        }
 
        /*
@@ -731,11 +654,9 @@ next_entry:
           the I/O windows and the interrupt mapping, and putting the
           card and host interface into "Memory and IO" mode.
         */
-       last_ret = pcmcia_request_configuration(link, &link->conf);
-       if (last_ret != 0) {
-               cs_error(link, RequestConfiguration, last_ret);
-               goto cs_failed;
-       }
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret != 0)
+               goto failed;
 
        /*
           At this point, the dev_node_t structure(s) need to be
@@ -763,7 +684,7 @@ next_entry:
 
        return;
 
-cs_failed:
+failed:
        printk(KERN_INFO "ni_daq_700 cs failed");
        dio700_release(link);
 
@@ -771,7 +692,7 @@ cs_failed:
 
 static void dio700_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "dio700_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "dio700_release\n");
 
        pcmcia_disable_device(link);
 }                              /* dio700_release */
@@ -830,15 +751,13 @@ struct pcmcia_driver dio700_cs_driver = {
 
 static int __init init_dio700_cs(void)
 {
-       printk("ni_daq_700:  cs-init \n");
-       DEBUG(0, "%s\n", version);
        pcmcia_register_driver(&dio700_cs_driver);
        return 0;
 }
 
 static void __exit exit_dio700_cs(void)
 {
-       DEBUG(0, "ni_daq_700: unloading\n");
+       pr_debug("ni_daq_700: unloading\n");
        pcmcia_unregister_driver(&dio700_cs_driver);
 }
 
index 0700a8bddd1e415d721a2815fc30521824bc7875..9017be3a92f15939e3fcd2c9123dbe2171101496 100644 (file)
@@ -187,25 +187,7 @@ static int dio24_detach(struct comedi_device *dev)
        return 0;
 };
 
-/* PCMCIA crap */
-
-/*
-   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 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 = "ni_daq_dio24.c, based on dummy_cs.c";
-#else
-#define DEBUG(n, args...)
-#endif
-
-/*====================================================================*/
+/* PCMCIA crap -- watch your words! */
 
 static void dio24_config(struct pcmcia_device *link);
 static void dio24_release(struct pcmcia_device *link);
@@ -261,7 +243,7 @@ static int dio24_cs_attach(struct pcmcia_device *link)
 
        printk(KERN_INFO "ni_daq_dio24: HOLA SOY YO - CS-attach!\n");
 
-       DEBUG(0, "dio24_cs_attach()\n");
+       dev_dbg(&link->dev, "dio24_cs_attach()\n");
 
        /* Allocate space for private device-specific data */
        local = kzalloc(sizeof(struct local_info_t), GFP_KERNEL);
@@ -272,7 +254,6 @@ static int dio24_cs_attach(struct pcmcia_device *link)
 
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->irq.Handler = NULL;
 
        /*
@@ -306,7 +287,7 @@ static void dio24_cs_detach(struct pcmcia_device *link)
 
        printk(KERN_INFO "ni_daq_dio24: HOLA SOY YO - cs-detach!\n");
 
-       DEBUG(0, "dio24_cs_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "dio24_cs_detach\n");
 
        if (link->dev_node) {
                ((struct local_info_t *)link->priv)->stop = 1;
@@ -327,142 +308,85 @@ static void dio24_cs_detach(struct pcmcia_device *link)
 
 ======================================================================*/
 
-static void dio24_config(struct pcmcia_device *link)
+static int dio24_pcmcia_config_loop(struct pcmcia_device *p_dev,
+                               cistpl_cftable_entry_t *cfg,
+                               cistpl_cftable_entry_t *dflt,
+                               unsigned int vcc,
+                               void *priv_data)
 {
-       struct local_info_t *dev = link->priv;
-       tuple_t tuple;
-       cisparse_t parse;
-       int last_ret;
-       u_char buf[64];
-       win_req_t req;
+       win_req_t *req = priv_data;
        memreq_t map;
-       cistpl_cftable_entry_t dflt = { 0 };
 
-       printk(KERN_INFO "ni_daq_dio24: HOLA SOY YO! - config\n");
-
-       DEBUG(0, "dio24_config(0x%p)\n", link);
-
-       /*
-          This reads the card's CONFIG tuple to find its configuration
-          registers.
-        */
-       tuple.DesiredTuple = CISTPL_CONFIG;
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetFirstTuple, last_ret);
-               goto cs_failed;
-       }
+       if (cfg->index == 0)
+               return -ENODEV;
 
-       last_ret = pcmcia_get_tuple_data(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetTupleData, last_ret);
-               goto cs_failed;
+       /* Does this card need audio output? */
+       if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
+               p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
+               p_dev->conf.Status = CCSR_AUDIO_ENA;
        }
 
-       last_ret = pcmcia_parse_tuple(&tuple, &parse);
-       if (last_ret) {
-               cs_error(link, ParseTuple, last_ret);
-               goto cs_failed;
+       /* Do we need to allocate an interrupt? */
+       if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+               p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+
+       /* IO window settings */
+       p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
+       if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
+               cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
+               p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+               if (!(io->flags & CISTPL_IO_8BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
+               if (!(io->flags & CISTPL_IO_16BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+               p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
+               p_dev->io.BasePort1 = io->win[0].base;
+               p_dev->io.NumPorts1 = io->win[0].len;
+               if (io->nwin > 1) {
+                       p_dev->io.Attributes2 = p_dev->io.Attributes1;
+                       p_dev->io.BasePort2 = io->win[1].base;
+                       p_dev->io.NumPorts2 = io->win[1].len;
+               }
+               /* This reserves IO space but doesn't actually enable it */
+               if (pcmcia_request_io(p_dev, &p_dev->io) != 0)
+                       return -ENODEV;
        }
-       link->conf.ConfigBase = parse.config.base;
-       link->conf.Present = parse.config.rmask[0];
-
-       /*
-          In this loop, we scan the CIS for configuration table entries,
-          each of which describes a valid card configuration, including
-          voltage, IO window, memory window, and interrupt settings.
-
-          We make no assumptions about the card to be configured: we use
-          just the information available in the CIS.  In an ideal world,
-          this would work for any PCMCIA card, but it requires a complete
-          and accurate CIS.  In practice, a driver usually "knows" most of
-          these things without consulting the CIS, and most client drivers
-          will only use the CIS to fill in implementation-defined details.
-        */
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
 
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetFirstTuple, last_ret);
-               goto cs_failed;
+       if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
+               cistpl_mem_t *mem =
+                       (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
+               req->Attributes = WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM;
+               req->Attributes |= WIN_ENABLE;
+               req->Base = mem->win[0].host_addr;
+               req->Size = mem->win[0].len;
+               if (req->Size < 0x1000)
+                       req->Size = 0x1000;
+               req->AccessSpeed = 0;
+               if (pcmcia_request_window(p_dev, req, &p_dev->win))
+                       return -ENODEV;
+               map.Page = 0;
+               map.CardOffset = mem->win[0].card_addr;
+               if (pcmcia_map_mem_page(p_dev, p_dev->win, &map))
+                       return -ENODEV;
        }
-       while (1) {
-               cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-               if (pcmcia_get_tuple_data(link, &tuple) != 0)
-                       goto next_entry;
-               if (pcmcia_parse_tuple(&tuple, &parse) != 0)
-                       goto next_entry;
-
-               if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-                       dflt = *cfg;
-               if (cfg->index == 0)
-                       goto next_entry;
-               link->conf.ConfigIndex = cfg->index;
-
-               /* Does this card need audio output? */
-               if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
-                       link->conf.Attributes |= CONF_ENABLE_SPKR;
-                       link->conf.Status = CCSR_AUDIO_ENA;
-               }
+       /* If we got this far, we're cool! */
+       return 0;
+}
 
-               /* Do we need to allocate an interrupt? */
-               if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
-                       link->conf.Attributes |= CONF_ENABLE_IRQ;
-
-               /* IO window settings */
-               link->io.NumPorts1 = link->io.NumPorts2 = 0;
-               if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
-                       cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
-                       link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-                       if (!(io->flags & CISTPL_IO_8BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-                       if (!(io->flags & CISTPL_IO_16BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-                       link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
-                       link->io.BasePort1 = io->win[0].base;
-                       link->io.NumPorts1 = io->win[0].len;
-                       if (io->nwin > 1) {
-                               link->io.Attributes2 = link->io.Attributes1;
-                               link->io.BasePort2 = io->win[1].base;
-                               link->io.NumPorts2 = io->win[1].len;
-                       }
-                       /* This reserves IO space but doesn't actually enable it */
-                       if (pcmcia_request_io(link, &link->io) != 0)
-                               goto next_entry;
-               }
+static void dio24_config(struct pcmcia_device *link)
+{
+       struct local_info_t *dev = link->priv;
+       int ret;
+       win_req_t req;
 
-               if ((cfg->mem.nwin > 0) || (dflt.mem.nwin > 0)) {
-                       cistpl_mem_t *mem =
-                           (cfg->mem.nwin) ? &cfg->mem : &dflt.mem;
-                       req.Attributes = WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM;
-                       req.Attributes |= WIN_ENABLE;
-                       req.Base = mem->win[0].host_addr;
-                       req.Size = mem->win[0].len;
-                       if (req.Size < 0x1000)
-                               req.Size = 0x1000;
-                       req.AccessSpeed = 0;
-                       if (pcmcia_request_window(&link, &req, &link->win))
-                               goto next_entry;
-                       map.Page = 0;
-                       map.CardOffset = mem->win[0].card_addr;
-                       if (pcmcia_map_mem_page(link->win, &map))
-                               goto next_entry;
-               }
-               /* If we got this far, we're cool! */
-               break;
+       printk(KERN_INFO "ni_daq_dio24: HOLA SOY YO! - config\n");
 
-next_entry:
+       dev_dbg(&link->dev, "dio24_config\n");
 
-               last_ret = pcmcia_get_next_tuple(link, &tuple);
-               if (last_ret) {
-                       cs_error(link, GetNextTuple, last_ret);
-                       goto cs_failed;
-               }
+       ret = pcmcia_loop_config(link, dio24_pcmcia_config_loop, &req);
+       if (ret) {
+               dev_warn(&link->dev, "no configuration found\n");
+               goto failed;
        }
 
        /*
@@ -471,11 +395,9 @@ next_entry:
           irq structure is initialized.
         */
        if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-               last_ret = pcmcia_request_irq(link, &link->irq);
-               if (last_ret) {
-                       cs_error(link, RequestIRQ, last_ret);
-                       goto cs_failed;
-               }
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
        }
 
        /*
@@ -483,11 +405,9 @@ next_entry:
           the I/O windows and the interrupt mapping, and putting the
           card and host interface into "Memory and IO" mode.
         */
-       last_ret = pcmcia_request_configuration(link, &link->conf);
-       if (last_ret) {
-               cs_error(link, RequestConfiguration, last_ret);
-               goto cs_failed;
-       }
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        /*
           At this point, the dev_node_t structure(s) need to be
@@ -515,7 +435,7 @@ next_entry:
 
        return;
 
-cs_failed:
+failed:
        printk(KERN_INFO "Fallo");
        dio24_release(link);
 
@@ -523,7 +443,7 @@ cs_failed:
 
 static void dio24_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "dio24_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "dio24_release\n");
 
        pcmcia_disable_device(link);
 }                              /* dio24_release */
@@ -582,14 +502,12 @@ struct pcmcia_driver dio24_cs_driver = {
 static int __init init_dio24_cs(void)
 {
        printk("ni_daq_dio24: HOLA SOY YO!\n");
-       DEBUG(0, "%s\n", version);
        pcmcia_register_driver(&dio24_cs_driver);
        return 0;
 }
 
 static void __exit exit_dio24_cs(void)
 {
-       DEBUG(0, "ni_dio24: unloading\n");
        pcmcia_unregister_driver(&dio24_cs_driver);
 }
 
index a3053b8da1c64c67cb6876488884c039ee3dfca4..7d514b3ee75436c5f4c8e345cd8ffdf57b15f93e 100644 (file)
@@ -153,23 +153,6 @@ static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it)
        return labpc_common_attach(dev, iobase, irq, 0);
 }
 
-/*
-   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 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 const char *version =
-    "ni_labpc.c, based on dummy_cs.c 1.31 2001/08/24 12:13:13";
-#else
-#define DEBUG(n, args...)
-#endif
-
 /*====================================================================*/
 
 /*
@@ -236,7 +219,7 @@ static int labpc_cs_attach(struct pcmcia_device *link)
 {
        struct local_info_t *local;
 
-       DEBUG(0, "labpc_cs_attach()\n");
+       dev_dbg(&link->dev, "labpc_cs_attach()\n");
 
        /* Allocate space for private device-specific data */
        local = kzalloc(sizeof(struct local_info_t), GFP_KERNEL);
@@ -247,7 +230,6 @@ static int labpc_cs_attach(struct pcmcia_device *link)
 
        /* Interrupt setup */
        link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_FORCED_PULSE;
-       link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_PULSE_ID;
        link->irq.Handler = NULL;
 
        /*
@@ -278,7 +260,7 @@ static int labpc_cs_attach(struct pcmcia_device *link)
 
 static void labpc_cs_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "labpc_cs_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "labpc_cs_detach\n");
 
        /*
           If the device is currently configured and active, we won't
@@ -305,135 +287,84 @@ static void labpc_cs_detach(struct pcmcia_device *link)
 
 ======================================================================*/
 
-static void labpc_config(struct pcmcia_device *link)
+static int labpc_pcmcia_config_loop(struct pcmcia_device *p_dev,
+                               cistpl_cftable_entry_t *cfg,
+                               cistpl_cftable_entry_t *dflt,
+                               unsigned int vcc,
+                               void *priv_data)
 {
-       struct local_info_t *dev = link->priv;
-       tuple_t tuple;
-       cisparse_t parse;
-       int last_ret;
-       u_char buf[64];
-       win_req_t req;
+       win_req_t *req = priv_data;
        memreq_t map;
-       cistpl_cftable_entry_t dflt = { 0 };
 
-       DEBUG(0, "labpc_config(0x%p)\n", link);
+       if (cfg->index == 0)
+               return -ENODEV;
 
-       /*
-          This reads the card's CONFIG tuple to find its configuration
-          registers.
-        */
-       tuple.DesiredTuple = CISTPL_CONFIG;
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetFirstTuple, last_ret);
-               goto cs_failed;
+       /* Does this card need audio output? */
+       if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
+               p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
+               p_dev->conf.Status = CCSR_AUDIO_ENA;
        }
 
-       last_ret = pcmcia_get_tuple_data(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetTupleData, last_ret);
-               goto cs_failed;
+       /* Do we need to allocate an interrupt? */
+       if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+               p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+
+       /* IO window settings */
+       p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
+       if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
+               cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
+               p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+               if (!(io->flags & CISTPL_IO_8BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
+               if (!(io->flags & CISTPL_IO_16BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+               p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
+               p_dev->io.BasePort1 = io->win[0].base;
+               p_dev->io.NumPorts1 = io->win[0].len;
+               if (io->nwin > 1) {
+                       p_dev->io.Attributes2 = p_dev->io.Attributes1;
+                       p_dev->io.BasePort2 = io->win[1].base;
+                       p_dev->io.NumPorts2 = io->win[1].len;
+               }
+               /* This reserves IO space but doesn't actually enable it */
+               if (pcmcia_request_io(p_dev, &p_dev->io) != 0)
+                       return -ENODEV;
        }
 
-       last_ret = pcmcia_parse_tuple(&tuple, &parse);
-       if (last_ret) {
-               cs_error(link, ParseTuple, last_ret);
-               goto cs_failed;
+       if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
+               cistpl_mem_t *mem =
+                       (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
+               req->Attributes = WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM;
+               req->Attributes |= WIN_ENABLE;
+               req->Base = mem->win[0].host_addr;
+               req->Size = mem->win[0].len;
+               if (req->Size < 0x1000)
+                       req->Size = 0x1000;
+               req->AccessSpeed = 0;
+               if (pcmcia_request_window(p_dev, req, &p_dev->win))
+                       return -ENODEV;
+               map.Page = 0;
+               map.CardOffset = mem->win[0].card_addr;
+               if (pcmcia_map_mem_page(p_dev, p_dev->win, &map))
+                       return -ENODEV;
        }
-       link->conf.ConfigBase = parse.config.base;
-       link->conf.Present = parse.config.rmask[0];
+       /* If we got this far, we're cool! */
+       return 0;
+}
 
-       /*
-          In this loop, we scan the CIS for configuration table entries,
-          each of which describes a valid card configuration, including
-          voltage, IO window, memory window, and interrupt settings.
-
-          We make no assumptions about the card to be configured: we use
-          just the information available in the CIS.  In an ideal world,
-          this would work for any PCMCIA card, but it requires a complete
-          and accurate CIS.  In practice, a driver usually "knows" most of
-          these things without consulting the CIS, and most client drivers
-          will only use the CIS to fill in implementation-defined details.
-        */
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetFirstTuple, last_ret);
-               goto cs_failed;
-       }
-       while (1) {
-               cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-               if (pcmcia_get_tuple_data(link, &tuple))
-                       goto next_entry;
-               if (pcmcia_parse_tuple(&tuple, &parse))
-                       goto next_entry;
-
-               if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-                       dflt = *cfg;
-               if (cfg->index == 0)
-                       goto next_entry;
-               link->conf.ConfigIndex = cfg->index;
-
-               /* Does this card need audio output? */
-               if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
-                       link->conf.Attributes |= CONF_ENABLE_SPKR;
-                       link->conf.Status = CCSR_AUDIO_ENA;
-               }
 
-               /* Do we need to allocate an interrupt? */
-               if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
-                       link->conf.Attributes |= CONF_ENABLE_IRQ;
-
-               /* IO window settings */
-               link->io.NumPorts1 = link->io.NumPorts2 = 0;
-               if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
-                       cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
-                       link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-                       link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
-                       link->io.BasePort1 = io->win[0].base;
-                       link->io.NumPorts1 = io->win[0].len;
-                       if (io->nwin > 1) {
-                               link->io.Attributes2 = link->io.Attributes1;
-                               link->io.BasePort2 = io->win[1].base;
-                               link->io.NumPorts2 = io->win[1].len;
-                       }
-                       /* This reserves IO space but doesn't actually enable it */
-                       if (pcmcia_request_io(link, &link->io))
-                               goto next_entry;
-               }
+static void labpc_config(struct pcmcia_device *link)
+{
+       struct local_info_t *dev = link->priv;
+       int ret;
+       win_req_t req;
 
-               if ((cfg->mem.nwin > 0) || (dflt.mem.nwin > 0)) {
-                       cistpl_mem_t *mem =
-                           (cfg->mem.nwin) ? &cfg->mem : &dflt.mem;
-                       req.Attributes = WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM;
-                       req.Attributes |= WIN_ENABLE;
-                       req.Base = mem->win[0].host_addr;
-                       req.Size = mem->win[0].len;
-                       if (req.Size < 0x1000)
-                               req.Size = 0x1000;
-                       req.AccessSpeed = 0;
-                       link->win = (window_handle_t) link;
-                       if (pcmcia_request_window(&link, &req, &link->win))
-                               goto next_entry;
-                       map.Page = 0;
-                       map.CardOffset = mem->win[0].card_addr;
-                       if (pcmcia_map_mem_page(link->win, &map))
-                               goto next_entry;
-               }
-               /* If we got this far, we're cool! */
-               break;
+       dev_dbg(&link->dev, "labpc_config\n");
 
-next_entry:
-               last_ret = pcmcia_get_next_tuple(link, &tuple);
-               if (last_ret) {
-                       cs_error(link, GetNextTuple, last_ret);
-                       goto cs_failed;
-               }
+       ret = pcmcia_loop_config(link, labpc_pcmcia_config_loop, &req);
+       if (ret) {
+               dev_warn(&link->dev, "no configuration found\n");
+               goto failed;
        }
 
        /*
@@ -442,11 +373,9 @@ next_entry:
           irq structure is initialized.
         */
        if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-               last_ret = pcmcia_request_irq(link, &link->irq);
-               if (last_ret) {
-                       cs_error(link, RequestIRQ, last_ret);
-                       goto cs_failed;
-               }
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
        }
 
        /*
@@ -454,11 +383,9 @@ next_entry:
           the I/O windows and the interrupt mapping, and putting the
           card and host interface into "Memory and IO" mode.
         */
-       last_ret = pcmcia_request_configuration(link, &link->conf);
-       if (last_ret) {
-               cs_error(link, RequestConfiguration, last_ret);
-               goto cs_failed;
-       }
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        /*
           At this point, the dev_node_t structure(s) need to be
@@ -486,14 +413,14 @@ next_entry:
 
        return;
 
-cs_failed:
+failed:
        labpc_release(link);
 
 }                              /* labpc_config */
 
 static void labpc_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "labpc_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "labpc_release\n");
 
        pcmcia_disable_device(link);
 }                              /* labpc_release */
@@ -551,14 +478,12 @@ struct pcmcia_driver labpc_cs_driver = {
 
 static int __init init_labpc_cs(void)
 {
-       DEBUG(0, "%s\n", version);
        pcmcia_register_driver(&labpc_cs_driver);
        return 0;
 }
 
 static void __exit exit_labpc_cs(void)
 {
-       DEBUG(0, "ni_labpc: unloading\n");
        pcmcia_unregister_driver(&labpc_cs_driver);
 }
 
index 9aef87fc81dcd3560cda172fef89471b87b14bec..d692f4bb47eaed1bd9930d152e584e0a968ef42a 100644 (file)
@@ -274,7 +274,6 @@ static int cs_attach(struct pcmcia_device *link)
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
        link->io.NumPorts1 = 16;
        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;
 
@@ -312,96 +311,47 @@ static int mio_cs_resume(struct pcmcia_device *link)
        return 0;
 }
 
-static void mio_cs_config(struct pcmcia_device *link)
-{
-       tuple_t tuple;
-       u_short buf[128];
-       cisparse_t parse;
-       int manfid = 0, prodid = 0;
-       int ret;
-
-       DPRINTK("mio_cs_config(link=%p)\n", link);
 
-       tuple.TupleData = (cisdata_t *) buf;
-       tuple.TupleOffset = 0;
-       tuple.TupleDataMax = 255;
-       tuple.Attributes = 0;
+static int mio_pcmcia_config_loop(struct pcmcia_device *p_dev,
+                               cistpl_cftable_entry_t *cfg,
+                               cistpl_cftable_entry_t *dflt,
+                               unsigned int vcc,
+                               void *priv_data)
+{
+       int base, ret;
 
-       tuple.DesiredTuple = CISTPL_CONFIG;
-       ret = pcmcia_get_first_tuple(link, &tuple);
-       ret = pcmcia_get_tuple_data(link, &tuple);
-       ret = pcmcia_parse_tuple(&tuple, &parse);
-       link->conf.ConfigBase = parse.config.base;
-       link->conf.Present = parse.config.rmask[0];
+       p_dev->io.NumPorts1 = cfg->io.win[0].len;
+       p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK;
+       p_dev->io.NumPorts2 = 0;
 
-#if 0
-       tuple.DesiredTuple = CISTPL_LONGLINK_MFC;
-       tuple.Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK;
-       info->multi(first_tuple(link, &tuple, &parse) == 0);
-#endif
-
-       tuple.DesiredTuple = CISTPL_MANFID;
-       tuple.Attributes = TUPLE_RETURN_COMMON;
-       if ((pcmcia_get_first_tuple(link, &tuple) == 0) &&
-           (pcmcia_get_tuple_data(link, &tuple) == 0)) {
-               manfid = le16_to_cpu(buf[0]);
-               prodid = le16_to_cpu(buf[1]);
+       for (base = 0x000; base < 0x400; base += 0x20) {
+               p_dev->io.BasePort1 = base;
+               ret = pcmcia_request_io(p_dev, &p_dev->io);
+               if (!ret)
+                       return 0;
        }
-       /* printk("manfid = 0x%04x, 0x%04x\n",manfid,prodid); */
+       return -ENODEV;
+}
 
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       tuple.Attributes = 0;
-       ret = pcmcia_get_first_tuple(link, &tuple);
-       ret = pcmcia_get_tuple_data(link, &tuple);
-       ret = pcmcia_parse_tuple(&tuple, &parse);
 
-#if 0
-       printk(" index: 0x%x\n", parse.cftable_entry.index);
-       printk(" flags: 0x%x\n", parse.cftable_entry.flags);
-       printk(" io flags: 0x%x\n", parse.cftable_entry.io.flags);
-       printk(" io nwin: 0x%x\n", parse.cftable_entry.io.nwin);
-       printk(" io base: 0x%x\n", parse.cftable_entry.io.win[0].base);
-       printk(" io len: 0x%x\n", parse.cftable_entry.io.win[0].len);
-       printk(" irq1: 0x%x\n", parse.cftable_entry.irq.IRQInfo1);
-       printk(" irq2: 0x%x\n", parse.cftable_entry.irq.IRQInfo2);
-       printk(" mem flags: 0x%x\n", parse.cftable_entry.mem.flags);
-       printk(" mem nwin: 0x%x\n", parse.cftable_entry.mem.nwin);
-       printk(" subtuples: 0x%x\n", parse.cftable_entry.subtuples);
-#endif
+static void mio_cs_config(struct pcmcia_device *link)
+{
+       int ret;
 
-#if 0
-       link->io.NumPorts1 = 0x20;
-       link->io.IOAddrLines = 5;
-       link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-#endif
-       link->io.NumPorts1 = parse.cftable_entry.io.win[0].len;
-       link->io.IOAddrLines =
-           parse.cftable_entry.io.flags & CISTPL_IO_LINES_MASK;
-       link->io.NumPorts2 = 0;
+       DPRINTK("mio_cs_config(link=%p)\n", link);
 
-       {
-               int base;
-               for (base = 0x000; base < 0x400; base += 0x20) {
-                       link->io.BasePort1 = base;
-                       ret = pcmcia_request_io(link, &link->io);
-                       /* printk("RequestIO 0x%02x\n",ret); */
-                       if (!ret)
-                               break;
-               }
+       ret = pcmcia_loop_config(link, mio_pcmcia_config_loop, NULL);
+       if (ret) {
+               dev_warn(&link->dev, "no configuration found\n");
+               return;
        }
 
-       link->irq.IRQInfo1 = parse.cftable_entry.irq.IRQInfo1;
-       link->irq.IRQInfo2 = parse.cftable_entry.irq.IRQInfo2;
        ret = pcmcia_request_irq(link, &link->irq);
        if (ret) {
                printk("pcmcia_request_irq() returned error: %i\n", ret);
        }
-       /* printk("RequestIRQ 0x%02x\n",ret); */
-
-       link->conf.ConfigIndex = 1;
 
        ret = pcmcia_request_configuration(link, &link->conf);
-       /* printk("RequestConfiguration %d\n",ret); */
 
        link->dev_node = &dev_node;
 }
@@ -475,40 +425,17 @@ static int mio_cs_attach(struct comedi_device *dev, struct comedi_devconfig *it)
        return 0;
 }
 
-static int get_prodid(struct comedi_device *dev, struct pcmcia_device *link)
-{
-       tuple_t tuple;
-       u_short buf[128];
-       int prodid = 0;
-
-       tuple.TupleData = (cisdata_t *) buf;
-       tuple.TupleOffset = 0;
-       tuple.TupleDataMax = 255;
-       tuple.DesiredTuple = CISTPL_MANFID;
-       tuple.Attributes = TUPLE_RETURN_COMMON;
-       if ((pcmcia_get_first_tuple(link, &tuple) == 0) &&
-           (pcmcia_get_tuple_data(link, &tuple) == 0)) {
-               prodid = le16_to_cpu(buf[1]);
-       }
-
-       return prodid;
-}
-
 static int ni_getboardtype(struct comedi_device *dev,
                           struct pcmcia_device *link)
 {
-       int id;
        int i;
 
-       id = get_prodid(dev, link);
-
        for (i = 0; i < n_ni_boards; i++) {
-               if (ni_boards[i].device_id == id) {
+               if (ni_boards[i].device_id == link->card_id)
                        return i;
-               }
        }
 
-       printk("unknown board 0x%04x -- pretend it is a ", id);
+       printk("unknown board 0x%04x -- pretend it is a ", link->card_id);
 
        return 0;
 }
index 344b82353e08ba96013c50cfc93b822d949d8aaa..5256fd9331629409b79aac5436c0cf25d32e1f81 100644 (file)
@@ -55,23 +55,6 @@ Devices: [Quatech] DAQP-208 (daqp), DAQP-308
 #include <pcmcia/cisreg.h>
 #include <pcmcia/ds.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 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 = "quatech_daqp_cs.c 1.10 2003/04/21 (Brent Baccala)";
-#else
-#define DEBUG(n, args...)
-#endif
-
 /* Maximum number of separate DAQP devices we'll allow */
 #define MAX_DEV         4
 
@@ -863,8 +846,6 @@ static int daqp_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 {
        int ret;
        struct local_info_t *local = dev_table[it->options[0]];
-       tuple_t tuple;
-       int i;
        struct comedi_subdevice *s;
 
        if (it->options[0] < 0 || it->options[0] >= MAX_DEV || !local) {
@@ -883,29 +864,10 @@ static int daqp_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 
        strcpy(local->board_name, "DAQP");
        dev->board_name = local->board_name;
-
-       tuple.DesiredTuple = CISTPL_VERS_1;
-       if (pcmcia_get_first_tuple(local->link, &tuple) == 0) {
-               u_char buf[128];
-
-               buf[0] = buf[sizeof(buf) - 1] = 0;
-               tuple.TupleData = buf;
-               tuple.TupleDataMax = sizeof(buf);
-               tuple.TupleOffset = 2;
-               if (pcmcia_get_tuple_data(local->link, &tuple) == 0) {
-
-                       for (i = 0; i < tuple.TupleDataLen - 4; i++)
-                               if (buf[i] == 0)
-                                       break;
-                       for (i++; i < tuple.TupleDataLen - 4; i++)
-                               if (buf[i] == 0)
-                                       break;
-                       i++;
-                       if ((i < tuple.TupleDataLen - 4)
-                           && (strncmp(buf + i, "DAQP", 4) == 0)) {
-                               strncpy(local->board_name, buf + i,
-                                       sizeof(local->board_name));
-                       }
+       if (local->link->prod_id[2]) {
+               if (strncmp(local->link->prod_id[2], "DAQP", 4) == 0) {
+                       strncpy(local->board_name, local->link->prod_id[2],
+                               sizeof(local->board_name));
                }
        }
 
@@ -1058,7 +1020,7 @@ static int daqp_cs_attach(struct pcmcia_device *link)
        struct local_info_t *local;
        int i;
 
-       DEBUG(0, "daqp_cs_attach()\n");
+       dev_dbg(&link->dev, "daqp_cs_attach()\n");
 
        for (i = 0; i < MAX_DEV; i++)
                if (dev_table[i] == NULL)
@@ -1079,10 +1041,8 @@ static int daqp_cs_attach(struct pcmcia_device *link)
        link->priv = local;
 
        /* Interrupt setup */
-       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
        link->irq.Handler = daqp_interrupt;
-       link->irq.Instance = local;
 
        /*
           General socket configuration defaults can go here.  In this
@@ -1112,7 +1072,7 @@ static void daqp_cs_detach(struct pcmcia_device *link)
 {
        struct local_info_t *dev = link->priv;
 
-       DEBUG(0, "daqp_cs_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "daqp_cs_detach\n");
 
        if (link->dev_node) {
                dev->stop = 1;
@@ -1134,115 +1094,54 @@ static void daqp_cs_detach(struct pcmcia_device *link)
 
 ======================================================================*/
 
-static void daqp_cs_config(struct pcmcia_device *link)
-{
-       struct local_info_t *dev = link->priv;
-       tuple_t tuple;
-       cisparse_t parse;
-       int last_ret;
-       u_char buf[64];
-
-       DEBUG(0, "daqp_cs_config(0x%p)\n", link);
-
-       /*
-          This reads the card's CONFIG tuple to find its configuration
-          registers.
-        */
-       tuple.DesiredTuple = CISTPL_CONFIG;
-       tuple.Attributes = 0;
-       tuple.TupleData = buf;
-       tuple.TupleDataMax = sizeof(buf);
-       tuple.TupleOffset = 0;
-
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetFirstTuple, last_ret);
-               goto cs_failed;
-       }
 
-       last_ret = pcmcia_get_tuple_data(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetTupleData, last_ret);
-               goto cs_failed;
-       }
-
-       last_ret = pcmcia_parse_tuple(&tuple, &parse);
-       if (last_ret) {
-               cs_error(link, ParseTuple, last_ret);
-               goto cs_failed;
-       }
-       link->conf.ConfigBase = parse.config.base;
-       link->conf.Present = parse.config.rmask[0];
+static int daqp_pcmcia_config_loop(struct pcmcia_device *p_dev,
+                               cistpl_cftable_entry_t *cfg,
+                               cistpl_cftable_entry_t *dflt,
+                               unsigned int vcc,
+                               void *priv_data)
+{
+       if (cfg->index == 0)
+               return -ENODEV;
 
-       /*
-          In this loop, we scan the CIS for configuration table entries,
-          each of which describes a valid card configuration, including
-          voltage, IO window, memory window, and interrupt settings.
-
-          We make no assumptions about the card to be configured: we use
-          just the information available in the CIS.  In an ideal world,
-          this would work for any PCMCIA card, but it requires a complete
-          and accurate CIS.  In practice, a driver usually "knows" most of
-          these things without consulting the CIS, and most client drivers
-          will only use the CIS to fill in implementation-defined details.
-        */
-       tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-       last_ret = pcmcia_get_first_tuple(link, &tuple);
-       if (last_ret) {
-               cs_error(link, GetFirstTuple, last_ret);
-               goto cs_failed;
+       /* Do we need to allocate an interrupt? */
+       if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
+               p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
+
+       /* IO window settings */
+       p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
+       if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
+               cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
+               p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+               if (!(io->flags & CISTPL_IO_8BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
+               if (!(io->flags & CISTPL_IO_16BIT))
+                       p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+               p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
+               p_dev->io.BasePort1 = io->win[0].base;
+               p_dev->io.NumPorts1 = io->win[0].len;
+               if (io->nwin > 1) {
+                       p_dev->io.Attributes2 = p_dev->io.Attributes1;
+                       p_dev->io.BasePort2 = io->win[1].base;
+                       p_dev->io.NumPorts2 = io->win[1].len;
+               }
        }
 
-       while (1) {
-               cistpl_cftable_entry_t dflt = { 0 };
-               cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-               if (pcmcia_get_tuple_data(link, &tuple))
-                       goto next_entry;
-               if (pcmcia_parse_tuple(&tuple, &parse))
-                       goto next_entry;
-
-               if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-                       dflt = *cfg;
-               if (cfg->index == 0)
-                       goto next_entry;
-               link->conf.ConfigIndex = cfg->index;
-
-               /* Do we need to allocate an interrupt? */
-               if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
-                       link->conf.Attributes |= CONF_ENABLE_IRQ;
-
-               /* IO window settings */
-               link->io.NumPorts1 = link->io.NumPorts2 = 0;
-               if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {
-                       cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;
-                       link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-                       if (!(io->flags & CISTPL_IO_8BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
-                       if (!(io->flags & CISTPL_IO_16BIT))
-                               link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-                       link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
-                       link->io.BasePort1 = io->win[0].base;
-                       link->io.NumPorts1 = io->win[0].len;
-                       if (io->nwin > 1) {
-                               link->io.Attributes2 = link->io.Attributes1;
-                               link->io.BasePort2 = io->win[1].base;
-                               link->io.NumPorts2 = io->win[1].len;
-                       }
-               }
+       /* This reserves IO space but doesn't actually enable it */
+       return pcmcia_request_io(p_dev, &p_dev->io);
+}
 
-               /* This reserves IO space but doesn't actually enable it */
-               if (pcmcia_request_io(link, &link->io))
-                       goto next_entry;
+static void daqp_cs_config(struct pcmcia_device *link)
+{
+       struct local_info_t *dev = link->priv;
+       int ret;
 
-               /* If we got this far, we're cool! */
-               break;
+       dev_dbg(&link->dev, "daqp_cs_config\n");
 
-next_entry:
-               last_ret = pcmcia_get_next_tuple(link, &tuple);
-               if (last_ret) {
-                       cs_error(link, GetNextTuple, last_ret);
-                       goto cs_failed;
-               }
+       ret = pcmcia_loop_config(link, daqp_pcmcia_config_loop, NULL);
+       if (ret) {
+               dev_warn(&link->dev, "no configuration found\n");
+               goto failed;
        }
 
        /*
@@ -1251,11 +1150,9 @@ next_entry:
           irq structure is initialized.
         */
        if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-               last_ret = pcmcia_request_irq(link, &link->irq);
-               if (last_ret) {
-                       cs_error(link, RequestIRQ, last_ret);
-                       goto cs_failed;
-               }
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
        }
 
        /*
@@ -1263,11 +1160,9 @@ next_entry:
           the I/O windows and the interrupt mapping, and putting the
           card and host interface into "Memory and IO" mode.
         */
-       last_ret = pcmcia_request_configuration(link, &link->conf);
-       if (last_ret) {
-               cs_error(link, RequestConfiguration, last_ret);
-               goto cs_failed;
-       }
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        /*
           At this point, the dev_node_t structure(s) need to be
@@ -1296,14 +1191,14 @@ next_entry:
 
        return;
 
-cs_failed:
+failed:
        daqp_cs_release(link);
 
 }                              /* daqp_cs_config */
 
 static void daqp_cs_release(struct pcmcia_device *link)
 {
-       DEBUG(0, "daqp_cs_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "daqp_cs_release\n");
 
        pcmcia_disable_device(link);
 }                              /* daqp_cs_release */
@@ -1363,7 +1258,6 @@ struct pcmcia_driver daqp_cs_driver = {
 
 int __init init_module(void)
 {
-       DEBUG(0, "%s\n", version);
        pcmcia_register_driver(&daqp_cs_driver);
        comedi_driver_register(&driver_daqp);
        return 0;
@@ -1371,7 +1265,6 @@ int __init init_module(void)
 
 void __exit cleanup_module(void)
 {
-       DEBUG(0, "daqp_cs: unloading\n");
        comedi_driver_unregister(&driver_daqp);
        pcmcia_unregister_driver(&daqp_cs_driver);
 }
index 347c3ed1d9f15fbe1edd10944b6b44b72ace07ac..d442fd35620a1b9667d81547e65cb5d7f3bde7e7 100644 (file)
  *     PCMCIA service support for Quicknet cards
  */
  
-#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)
-#else
-#define DEBUG(n, args...)
-#endif
 
 typedef struct ixj_info_t {
        int ndev;
@@ -39,7 +32,7 @@ static void ixj_cs_release(struct pcmcia_device * link);
 
 static int ixj_probe(struct pcmcia_device *p_dev)
 {
-       DEBUG(0, "ixj_attach()\n");
+       dev_dbg(&p_dev->dev, "ixj_attach()\n");
        /* Create new ixj device */
        p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
        p_dev->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
@@ -55,33 +48,30 @@ static int ixj_probe(struct pcmcia_device *p_dev)
 
 static void ixj_detach(struct pcmcia_device *link)
 {
-       DEBUG(0, "ixj_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "ixj_detach\n");
 
        ixj_cs_release(link);
 
         kfree(link->priv);
 }
 
-#define CS_CHECK(fn, ret) \
-do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-
 static void ixj_get_serial(struct pcmcia_device * link, IXJ * j)
 {
        char *str;
        int i, place;
-       DEBUG(0, "ixj_get_serial(0x%p)\n", link);
+       dev_dbg(&link->dev, "ixj_get_serial\n");
 
        str = link->prod_id[0];
        if (!str)
-               goto cs_failed;
+               goto failed;
        printk("%s", str);
        str = link->prod_id[1];
        if (!str)
-               goto cs_failed;
+               goto failed;
        printk(" %s", str);
        str = link->prod_id[2];
        if (!str)
-               goto cs_failed;
+               goto failed;
        place = 1;
        for (i = strlen(str) - 1; i >= 0; i--) {
                switch (str[i]) {
@@ -118,9 +108,9 @@ static void ixj_get_serial(struct pcmcia_device * link, IXJ * j)
        }
        str = link->prod_id[3];
        if (!str)
-               goto cs_failed;
+               goto failed;
        printk(" version %s\n", str);
-      cs_failed:
+failed:
        return;
 }
 
@@ -151,13 +141,13 @@ static int ixj_config(struct pcmcia_device * link)
        cistpl_cftable_entry_t dflt = { 0 };
 
        info = link->priv;
-       DEBUG(0, "ixj_config(0x%p)\n", link);
+       dev_dbg(&link->dev, "ixj_config\n");
 
        if (pcmcia_loop_config(link, ixj_config_check, &dflt))
-               goto cs_failed;
+               goto failed;
 
        if (pcmcia_request_configuration(link, &link->conf))
-               goto cs_failed;
+               goto failed;
 
        /*
         *      Register the card with the core.
@@ -170,7 +160,7 @@ static int ixj_config(struct pcmcia_device * link)
        ixj_get_serial(link, j);
        return 0;
 
-      cs_failed:
+failed:
        ixj_cs_release(link);
        return -ENODEV;
 }
@@ -178,7 +168,7 @@ static int ixj_config(struct pcmcia_device * link)
 static void ixj_cs_release(struct pcmcia_device *link)
 {
        ixj_info_t *info = link->priv;
-       DEBUG(0, "ixj_cs_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "ixj_cs_release\n");
        info->ndev = 0;
        pcmcia_disable_device(link);
 }
index 516848dd9b48b2aed0193c77d8b0cbcbc765b7a6..39d253e841f6412f3aa7d8bd08e54ba28d37bb05 100644 (file)
@@ -37,28 +37,8 @@ MODULE_LICENSE("GPL");
 /* MACROS                                                             */
 /*====================================================================*/
 
-#if defined(DEBUG) || defined(PCMCIA_DEBUG)
-
-static int pc_debug = 0;
-module_param(pc_debug, int, 0644);
-
-#define DBG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG "sl811_cs: " args)
-
-#else
-#define DBG(n, args...) do{}while(0)
-#endif /* no debugging */
-
 #define INFO(args...) printk(KERN_INFO "sl811_cs: " args)
 
-#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0444)
-
-#define CS_CHECK(fn, ret) \
-       do { \
-               last_fn = (fn); \
-               if ((last_ret = (ret)) != 0) \
-                       goto cs_failed; \
-       } while (0)
-
 /*====================================================================*/
 /* VARIABLES                                                          */
 /*====================================================================*/
@@ -76,7 +56,7 @@ static void sl811_cs_release(struct pcmcia_device * link);
 
 static void release_platform_dev(struct device * dev)
 {
-       DBG(0, "sl811_cs platform_dev release\n");
+       dev_dbg(dev, "sl811_cs platform_dev release\n");
        dev->parent = NULL;
 }
 
@@ -140,7 +120,7 @@ static int sl811_hc_init(struct device *parent, resource_size_t base_addr,
 
 static void sl811_cs_detach(struct pcmcia_device *link)
 {
-       DBG(0, "sl811_cs_detach(0x%p)\n", link);
+       dev_dbg(&link->dev, "sl811_cs_detach\n");
 
        sl811_cs_release(link);
 
@@ -150,7 +130,7 @@ static void sl811_cs_detach(struct pcmcia_device *link)
 
 static void sl811_cs_release(struct pcmcia_device * link)
 {
-       DBG(0, "sl811_cs_release(0x%p)\n", link);
+       dev_dbg(&link->dev, "sl811_cs_release\n");
 
        pcmcia_disable_device(link);
        platform_device_unregister(&platform_dev);
@@ -205,11 +185,11 @@ static int sl811_cs_config_check(struct pcmcia_device *p_dev,
 
 static int sl811_cs_config(struct pcmcia_device *link)
 {
-       struct device           *parent = &handle_to_dev(link);
+       struct device           *parent = &link->dev;
        local_info_t            *dev = link->priv;
-       int                     last_fn, last_ret;
+       int                     ret;
 
-       DBG(0, "sl811_cs_config(0x%p)\n", link);
+       dev_dbg(&link->dev, "sl811_cs_config\n");
 
        if (pcmcia_loop_config(link, sl811_cs_config_check, NULL))
                goto failed;
@@ -217,14 +197,16 @@ static int sl811_cs_config(struct pcmcia_device *link)
        /* require an IRQ and two registers */
        if (!link->io.NumPorts1 || link->io.NumPorts1 < 2)
                goto failed;
-       if (link->conf.Attributes & CONF_ENABLE_IRQ)
-               CS_CHECK(RequestIRQ,
-                       pcmcia_request_irq(link, &link->irq));
-       else
+       if (link->conf.Attributes & CONF_ENABLE_IRQ) {
+               ret = pcmcia_request_irq(link, &link->irq);
+               if (ret)
+                       goto failed;
+       } else
                goto failed;
 
-       CS_CHECK(RequestConfiguration,
-               pcmcia_request_configuration(link, &link->conf));
+       ret = pcmcia_request_configuration(link, &link->conf);
+       if (ret)
+               goto failed;
 
        sprintf(dev->node.dev_name, driver_name);
        dev->node.major = dev->node.minor = 0;
@@ -241,8 +223,6 @@ static int sl811_cs_config(struct pcmcia_device *link)
 
        if (sl811_hc_init(parent, link->io.BasePort1, link->irq.AssignedIRQ)
                        < 0) {
-cs_failed:
-               cs_error(link, last_fn, last_ret);
 failed:
                printk(KERN_WARNING "sl811_cs_config failed\n");
                sl811_cs_release(link);
@@ -263,7 +243,6 @@ static int sl811_cs_probe(struct pcmcia_device *link)
 
        /* Initialize */
        link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
-       link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
        link->irq.Handler = NULL;
 
        link->conf.Attributes = 0;
index 84cf1f3b7838e70d30c8d010e0a964b82a2b785b..daecca3c83008f480359878bf9b9f4ce80ee1748 100644 (file)
 #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
index 904468a191ef43c46c8a7fa091967a4f9f09e1c5..afc2bfb9e917bcb63ebda29847b00e848111d8be 100644 (file)
 #ifndef _LINUX_CS_H
 #define _LINUX_CS_H
 
+#ifdef __KERNEL__
+#include <linux/interrupt.h>
+#endif
+
 /* For AccessConfigurationRegister */
 typedef struct conf_reg_t {
     u_char     Function;
@@ -111,11 +115,9 @@ typedef struct io_req_t {
 
 /* For RequestIRQ and ReleaseIRQ */
 typedef struct irq_req_t {
-    u_int      Attributes;
-    u_int      AssignedIRQ;
-    u_int      IRQInfo1, IRQInfo2; /* IRQInfo2 is ignored */
-    void       *Handler;
-    void       *Instance;
+       u_int           Attributes;
+       u_int           AssignedIRQ;
+       irq_handler_t   Handler;
 } irq_req_t;
 
 /* Attributes for RequestIRQ and ReleaseIRQ */
@@ -125,7 +127,7 @@ typedef struct irq_req_t {
 #define IRQ_TYPE_DYNAMIC_SHARING       0x02
 #define IRQ_FORCED_PULSE               0x04
 #define IRQ_FIRST_SHARED               0x08
-#define IRQ_HANDLE_PRESENT             0x10
+//#define IRQ_HANDLE_PRESENT           0x10
 #define IRQ_PULSE_ALLOCATED            0x100
 
 /* Bits in IRQInfo1 field */
index 315965a37930099f6ffed2a672b303ba694b9bc6..f5e3b8386c8ffc90eef4f6a98daa9f77a68e4f87 100644 (file)
@@ -26,8 +26,7 @@ typedef u_int event_t;
 typedef u_char cisdata_t;
 typedef u_short        page_t;
 
-struct window_t;
-typedef struct window_t *window_handle_t;
+typedef unsigned long window_handle_t;
 
 struct region_t;
 typedef struct region_t *memory_handle_t;
index a2be80b9a095fcd1bb955af8d2eacd75eafdddec..d403c12f797820928bb040ff166e9469c532ba81 100644 (file)
@@ -34,6 +34,7 @@
 struct pcmcia_socket;
 struct pcmcia_device;
 struct config_t;
+struct net_device;
 
 /* dynamic device IDs for PCMCIA device drivers. See
  * Documentation/pcmcia/driver.txt for details.
@@ -137,65 +138,39 @@ struct pcmcia_device {
 #define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev)
 #define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv)
 
-/* deprecated -- don't use! */
-#define handle_to_dev(handle) (handle->dev)
 
-
-/* (deprecated) error reporting by PCMCIA devices. Use dev_printk()
- * or dev_dbg() directly in the driver, without referring to pcmcia_error_func()
- * and/or pcmcia_error_ret() for those functions will go away soon.
- */
-enum service {
-    AccessConfigurationRegister, AddSocketServices,
-    AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory,
-    DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo,
-    GetClientInfo, GetConfigurationInfo, GetEventMask,
-    GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple,
-    GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple,
-    GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage,
-    MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow,
-    OpenMemory, ParseTuple, ReadMemory, RegisterClient,
-    RegisterEraseQueue, RegisterMTD, RegisterTimer,
-    ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ,
-    ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices,
-    RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ,
-    RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry,
-    SetEventMask, SetRegion, ValidateCIS, VendorSpecific,
-    WriteMemory, BindDevice, BindMTD, ReportError,
-    SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS,
-    GetFirstWindow, GetNextWindow, GetMemPage
-};
-const char *pcmcia_error_func(int func);
-const char *pcmcia_error_ret(int ret);
-
-#define cs_error(p_dev, func, ret)                     \
-       {                                               \
-               dev_printk(KERN_NOTICE, &p_dev->dev,    \
-                          "%s : %s\n",                 \
-                          pcmcia_error_func(func),     \
-                          pcmcia_error_ret(ret));      \
-       }
-
-/* CIS access.
- * Use the pcmcia_* versions in PCMCIA drivers
+/*
+ * CIS access.
+ *
+ * Please use the following functions to access CIS tuples:
+ * - pcmcia_get_tuple()
+ * - pcmcia_loop_tuple()
+ * - pcmcia_get_mac_from_cis()
+ *
+ * To parse a tuple_t, pcmcia_parse_tuple() exists. Its interface
+ * might change in future.
  */
-int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse);
 
-int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function,
-                          tuple_t *tuple);
-#define pcmcia_get_first_tuple(p_dev, tuple) \
-               pccard_get_first_tuple(p_dev->socket, p_dev->func, tuple)
+/* get the very first CIS entry of type @code. Note that buf is pointer
+ * to u8 *buf; and that you need to kfree(buf) afterwards. */
+size_t pcmcia_get_tuple(struct pcmcia_device *p_dev, cisdata_t code,
+                       u8 **buf);
 
-int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function,
-                         tuple_t *tuple);
-#define pcmcia_get_next_tuple(p_dev, tuple) \
-               pccard_get_next_tuple(p_dev->socket, p_dev->func, tuple)
+/* loop over CIS entries */
+int pcmcia_loop_tuple(struct pcmcia_device *p_dev, cisdata_t code,
+                     int (*loop_tuple) (struct pcmcia_device *p_dev,
+                                        tuple_t *tuple,
+                                        void *priv_data),
+                     void *priv_data);
 
-int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple);
-#define pcmcia_get_tuple_data(p_dev, tuple) \
-               pccard_get_tuple_data(p_dev->socket, tuple)
+/* get the MAC address from CISTPL_FUNCE */
+int pcmcia_get_mac_from_cis(struct pcmcia_device *p_dev,
+                           struct net_device *dev);
 
 
+/* parse a tuple_t */
+int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse);
+
 /* loop CIS entries for valid configuration */
 int pcmcia_loop_config(struct pcmcia_device *p_dev,
                       int      (*conf_check)   (struct pcmcia_device *p_dev,
@@ -221,12 +196,11 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req);
 int pcmcia_request_configuration(struct pcmcia_device *p_dev,
                                 config_req_t *req);
 
-int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req,
+int pcmcia_request_window(struct pcmcia_device *p_dev, win_req_t *req,
                          window_handle_t *wh);
-int pcmcia_release_window(window_handle_t win);
-
-int pcmcia_get_mem_page(window_handle_t win, memreq_t *req);
-int pcmcia_map_mem_page(window_handle_t win, memreq_t *req);
+int pcmcia_release_window(struct pcmcia_device *p_dev, window_handle_t win);
+int pcmcia_map_mem_page(struct pcmcia_device *p_dev, window_handle_t win,
+                       memreq_t *req);
 
 int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod);
 void pcmcia_disable_device(struct pcmcia_device *p_dev);
index e0f6feb8588c0e062161431b31681542bb58450b..7c23be706f128bbc02365e868687aa3dbcc73047 100644 (file)
@@ -107,15 +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 @@ 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;
@@ -172,7 +163,7 @@ struct pcmcia_socket {
        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;
 
 
index 64b859925c0b16bd5ac458f25419fbcd8b4c3308..7717e01fc07127f51e99c3a669a18be75ab6a0eb 100644 (file)
@@ -131,7 +131,7 @@ static int snd_pdacf_probe(struct pcmcia_device *link)
                return err;
        }
 
-       snd_card_set_dev(card, &handle_to_dev(link));
+       snd_card_set_dev(card, &link->dev);
 
        pdacf->index = i;
        card_list[i] = card;
@@ -142,12 +142,10 @@ static int snd_pdacf_probe(struct pcmcia_device *link)
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
        link->io.NumPorts1 = 16;
 
-       link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT | IRQ_FORCED_PULSE;
+       link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_FORCED_PULSE;
        // link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
 
-       link->irq.IRQInfo1 = 0 /* | IRQ_LEVEL_ID */;
        link->irq.Handler = pdacf_interrupt;
-       link->irq.Instance = pdacf;
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
        link->conf.ConfigIndex = 1;
index 1492744ad67feb156ea03bf41182a21c25c98ca6..7be3b335704597d0a7808e8cc4eae1356ded7f73 100644 (file)
@@ -161,11 +161,9 @@ static int snd_vxpocket_new(struct snd_card *card, int ibl,
        link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
        link->io.NumPorts1 = 16;
 
-       link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
+       link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
 
-       link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->irq.Handler = &snd_vx_irq_handler;
-       link->irq.Instance = chip;
 
        link->conf.Attributes = CONF_ENABLE_IRQ;
        link->conf.IntType = INT_MEMORY_AND_IO;
@@ -244,7 +242,7 @@ static int vxpocket_config(struct pcmcia_device *link)
        if (ret)
                goto failed;
 
-       chip->dev = &handle_to_dev(link);
+       chip->dev = &link->dev;
        snd_card_set_dev(chip->card, chip->dev);
 
        if (snd_vxpocket_assign_resources(chip, link->io.BasePort1, link->irq.AssignedIRQ) < 0)