]> git.hungrycats.org Git - linux/commitdiff
[PCMCIA] Add, fix, update PCMCIA debugging.
authorRussell King <rmk@flint.arm.linux.org.uk>
Sun, 14 Mar 2004 20:12:21 +0000 (20:12 +0000)
committerRussell King <rmk@flint.arm.linux.org.uk>
Sun, 14 Mar 2004 20:12:21 +0000 (20:12 +0000)
The PCMCIA core debugging assumes that "pc_debug" is a global.  If
pc_debug were to be a global, it would pollute the kernel's global
name space, potentially clashing with PCMCIA drivers and even ds.c.

We also get rid of PCMCIA using the "DEBUG" macro, which is the
standard macro to enable debugging in the kernel.  Instead, we
introduce cs_dbg() for core PCMCIA debugging, ds_dbg() for driver
services debugging, and similar macros in the socket drivers.

14 files changed:
drivers/pcmcia/Kconfig
drivers/pcmcia/Makefile
drivers/pcmcia/au1000_generic.c
drivers/pcmcia/au1000_pb1x00.c
drivers/pcmcia/bulkmem.c
drivers/pcmcia/cardbus.c
drivers/pcmcia/cistpl.c
drivers/pcmcia/cs.c
drivers/pcmcia/cs_internal.h
drivers/pcmcia/ds.c
drivers/pcmcia/i82365.c
drivers/pcmcia/sa11xx_core.c
drivers/pcmcia/tcic.c
drivers/pcmcia/yenta_socket.c

index b43e9956439c12aebd3b4759eed684465efba309..71b6ac4d78cacc7abd01c53e065160d3c154cc0e 100644 (file)
@@ -26,6 +26,25 @@ config PCMCIA
          To compile this driver as modules, choose M here: the
          modules will be called pcmcia_core and ds.
 
+config PCMCIA_DEBUG
+       bool "Enable PCMCIA debugging"
+       depends on PCMCIA != n
+       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
+           ds.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 YENTA
        tristate "CardBus yenta-compatible bridge support"
        depends on PCMCIA && PCI
index 81c7a2229f3f8287955272515534b849f3d44014..82aeec31c5a73b62d3b78a47e557a7a7ffa4df3a 100644 (file)
@@ -2,6 +2,10 @@
 # Makefile for the kernel pcmcia subsystem (c/o David Hinds)
 #
 
+ifeq ($(CONFIG_PCMCIA_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif
+
 obj-$(CONFIG_PCMCIA)                           += pcmcia_core.o ds.o
 obj-$(CONFIG_YENTA)                            += yenta_socket.o
 
index ee29c209655a88b2ad4a1c60f0cc34b36fd05112..bd79f3bd1378629d3347389146bde41cb505cc1a 100644 (file)
@@ -26,6 +26,7 @@
  * 
  */
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/config.h>
 #include <linux/delay.h>
 #include <asm/au1000.h>
 #include <asm/au1000_pcmcia.h>
 
-#ifdef PCMCIA_DEBUG
+#ifdef DEBUG
 static int pc_debug;
+
+module_param(pc_debug, int, 0644);
+
+#define debug(lvl,fmt) do {                    \
+       if (pc_debug > (lvl))                   \
+               printk(KERN_DEBUG fmt);         \
+} while (0)
+#else
+#define debug(lvl,fmt) do { } while (0)
 #endif
 
 MODULE_LICENSE("GPL");
@@ -209,7 +219,7 @@ static int __init au1000_pcmcia_driver_init(void)
         */
        au1000_pcmcia_poll_event(0);
 
-       DEBUG(1, "au1000: initialization complete\n");
+       debug(1, "au1000: initialization complete\n");
        return 0;
 
 }  /* au1000_pcmcia_driver_init() */
@@ -228,7 +238,7 @@ static void __exit au1000_pcmcia_driver_shutdown(void)
                if (pcmcia_socket[i].virt_io) 
                        iounmap((void *)pcmcia_socket[i].virt_io);
        }
-       DEBUG(1, "au1000: shutdown complete\n");
+       debug(1, "au1000: shutdown complete\n");
 }
 
 module_exit(au1000_pcmcia_driver_shutdown);
@@ -249,14 +259,14 @@ au1000_pcmcia_events(struct pcmcia_state *state,
        unsigned int events=0;
 
        if(state->detect!=prev_state->detect){
-               DEBUG(2, "%s(): card detect value %u\n", 
+               debug(2, "%s(): card detect value %u\n", 
                                __FUNCTION__, state->detect);
                events |= mask&SS_DETECT;
        }
 
 
        if(state->ready!=prev_state->ready){
-               DEBUG(2, "%s(): card ready value %u\n", 
+               debug(2, "%s(): card ready value %u\n", 
                                __FUNCTION__, state->ready);
                events |= mask&((flags&SS_IOCARD)?0:SS_READY);
        }
@@ -429,7 +439,7 @@ au1000_pcmcia_get_status(unsigned int sock, unsigned int *status)
 
        *status|=state.vs_Xv?SS_XVCARD:0;
 
-       DEBUG(2, "\tstatus: %s%s%s%s%s%s%s%s\n",
+       debug(2, "\tstatus: %s%s%s%s%s%s%s%s\n",
        (*status&SS_DETECT)?"DETECT ":"",
        (*status&SS_READY)?"READY ":"", 
        (*status&SS_BATDEAD)?"BATDEAD ":"",
@@ -457,7 +467,7 @@ au1000_pcmcia_set_socket(unsigned int sock, socket_state_t *state)
 {
        struct pcmcia_configure configure;
 
-       DEBUG(2, "\tmask:  %s%s%s%s%s%s\n\tflags: %s%s%s%s%s%s\n"
+       debug(2, "\tmask:  %s%s%s%s%s%s\n\tflags: %s%s%s%s%s%s\n"
        "\tVcc %d  Vpp %d  irq %d\n",
        (state->csc_mask==0)?"<NONE>":"",
        (state->csc_mask&SS_DETECT)?"DETECT ":"",
@@ -494,7 +504,7 @@ au1000_pcmcia_set_socket(unsigned int sock, socket_state_t *state)
 static int 
 au1000_pcmcia_get_io_map(unsigned int sock, struct pccard_io_map *map)
 {
-       DEBUG(1, "au1000_pcmcia_get_io_map: sock %d\n", sock);
+       debug(1, "au1000_pcmcia_get_io_map: sock %d\n", sock);
        if(map->map>=MAX_IO_WIN){
                printk(KERN_ERR "%s(): map (%d) out of range\n", 
                                __FUNCTION__, map->map);
@@ -531,7 +541,7 @@ au1000_pcmcia_set_io_map(unsigned int sock, struct pccard_io_map *map)
        map->start=pcmcia_socket[sock].virt_io;
        map->stop=map->start+(map->stop-start);
        pcmcia_socket[sock].io_map[map->map]=*map;
-       DEBUG(3, "set_io_map %d start %x stop %x\n", 
+       debug(3, "set_io_map %d start %x stop %x\n", 
                        map->map, map->start, map->stop);
        return 0;
 
@@ -595,7 +605,7 @@ au1000_pcmcia_set_mem_map(unsigned int sock, struct pccard_mem_map *map)
        map->sys_stop=map->sys_start+(map->sys_stop-start);
        pcmcia_socket[sock].mem_map[map->map]=*map;
        spin_unlock_irqrestore(&pcmcia_lock, flags);
-       DEBUG(3, "set_mem_map %d start %x stop %x card_start %x\n", 
+       debug(3, "set_mem_map %d start %x stop %x card_start %x\n", 
                        map->map, map->sys_start, map->sys_stop, 
                        map->card_start);
        return 0;
index 482bf21709e79787150d4810d9777aa85afcc690..40d5037278c642cfff14ba7f75dd8f4323e5970e 100644 (file)
@@ -48,6 +48,8 @@
 #include <asm/au1000.h>
 #include <asm/au1000_pcmcia.h>
 
+#define debug(fmt, arg...) do { } while (0)
+
 #ifdef CONFIG_MIPS_PB1000
 #include <asm/pb1000.h>
 #define PCMCIA_IRQ AU1000_GPIO_15
@@ -213,7 +215,7 @@ pb1x00_pcmcia_configure_socket(const struct pcmcia_configure *configure)
        }
 
        pcr &= ~PCR_SLOT_0_RST;
-       DEBUG(KERN_INFO "Vcc %dV Vpp %dV, pcr %x\n", 
+       debug("Vcc %dV Vpp %dV, pcr %x\n", 
                        configure->vcc, configure->vpp, pcr);
        switch(configure->vcc){
                case 0:  /* Vcc 0 */
@@ -324,7 +326,7 @@ pb1x00_pcmcia_configure_socket(const struct pcmcia_configure *configure)
 
        pcr = au_readw(PB1100_MEM_PCMCIA) & ~0xf;
 
-       DEBUG(KERN_INFO "Vcc %dV Vpp %dV, pcr %x, reset %d\n", 
+       debug("Vcc %dV Vpp %dV, pcr %x, reset %d\n", 
                        configure->vcc, configure->vpp, pcr, configure->reset);
 
 
index ec714ce90be8aa385ae0c7a589848c4e418e04bc..3298828e28905bed2e16861b3cdd81173ab2856a 100644 (file)
@@ -48,6 +48,8 @@
 #include <pcmcia/cistpl.h>
 #include "cs_internal.h"
 
+static void retry_erase_list(erase_busy_t *list, u_int cause);
+
 /*======================================================================
 
     This function handles submitting an MTD request, and retrying
@@ -108,18 +110,18 @@ static int do_mtd_request(memory_handle_t handle, mtd_request_t *req,
 
 ======================================================================*/
 
-static void insert_queue(erase_busy_t *head, erase_busy_t *entry)
+static void insert_queue(struct pcmcia_socket *s, erase_busy_t *head, erase_busy_t *entry)
 {
-    DEBUG(2, "cs: adding 0x%p to queue 0x%p\n", entry, head);
+    cs_dbg(s, 2, "adding 0x%p to queue 0x%p\n", entry, head);
     entry->next = head;
     entry->prev = head->prev;
     head->prev->next = entry;
     head->prev = entry;
 }
 
-static void remove_queue(erase_busy_t *entry)
+static void remove_queue(struct pcmcia_socket *s, erase_busy_t *entry)
 {
-    DEBUG(2, "cs: unqueueing 0x%p\n", entry);
+    cs_dbg(s, 2, "unqueueing 0x%p\n", entry);
     entry->next->prev = entry->prev;
     entry->prev->next = entry->next;
 }
@@ -132,34 +134,35 @@ static void retry_erase(erase_busy_t *busy, u_int cause)
     struct pcmcia_socket *s;
     int ret;
 
-    DEBUG(2, "cs: trying erase request 0x%p...\n", busy);
+    mtd = erase->Handle->mtd;
+    s = SOCKET(mtd);
+
+    cs_dbg(s, 2, "trying erase request 0x%p...\n", busy);
     if (busy->next)
-       remove_queue(busy);
+       remove_queue(s, busy);
     req.Function = MTD_REQ_ERASE | cause;
     req.TransferLength = erase->Size;
     req.DestCardOffset = erase->Offset + erase->Handle->info.CardOffset;
     req.MediaID = erase->Handle->MediaID;
-    mtd = erase->Handle->mtd;
-    s = SOCKET(mtd);
     mtd->event_callback_args.mtdrequest = &req;
     ret = EVENT(mtd, CS_EVENT_MTD_REQUEST, CS_EVENT_PRI_LOW);
     if (ret == CS_BUSY) {
-       DEBUG(2, "  Status = %d, requeueing.\n", req.Status);
+       cs_dbg(s, 2, "  Status = %d, requeueing.\n", req.Status);
        switch (req.Status) {
        case MTD_WAITREQ:
        case MTD_WAITPOWER:
-           insert_queue(&mtd->erase_busy, busy);
+           insert_queue(s, &mtd->erase_busy, busy);
            break;
        case MTD_WAITTIMER:
        case MTD_WAITRDY:
            if (req.Status == MTD_WAITRDY)
-               insert_queue(&s->erase_busy, busy);
+               insert_queue(s, &s->erase_busy, busy);
            mod_timer(&busy->timeout, jiffies + req.Timeout*HZ/1000);
            break;
        }
     } else {
        /* update erase queue status */
-       DEBUG(2, "  Ret = %d\n", ret);
+       cs_dbg(s, 2, "  Ret = %d\n", ret);
        switch (ret) {
        case CS_SUCCESS:
            erase->State = ERASE_PASSED; break;
@@ -183,11 +186,11 @@ static void retry_erase(erase_busy_t *busy, u_int cause)
     }
 } /* retry_erase */
 
-void retry_erase_list(erase_busy_t *list, u_int cause)
+static void retry_erase_list(erase_busy_t *list, u_int cause)
 {
     erase_busy_t tmp = *list;
 
-    DEBUG(2, "cs: rescanning erase queue list 0x%p\n", list);
+    cs_dbg(SOCKET(list->client), 2, "rescanning erase queue list 0x%p\n", list);
     if (list->next == list)
        return;
     /* First, truncate the original list */
@@ -204,8 +207,9 @@ void retry_erase_list(erase_busy_t *list, u_int cause)
 
 static void handle_erase_timeout(u_long arg)
 {
-    DEBUG(0, "cs: erase timeout for entry 0x%lx\n", arg);
-    retry_erase((erase_busy_t *)arg, MTD_REQ_TIMEOUT);
+    erase_busy_t *busy = (erase_busy_t *)arg;
+    cs_dbg(SOCKET(busy->client), 0, "erase timeout for entry 0x%lx\n", arg);
+    retry_erase(busy, MTD_REQ_TIMEOUT);
 }
 
 static void setup_erase_request(client_handle_t handle, eraseq_entry_t *erase)
@@ -333,8 +337,8 @@ static void setup_regions(client_handle_t handle, int attr,
     cistpl_device_geo_t geo;
     memory_handle_t r;
 
-    DEBUG(1, "cs: setup_regions(0x%p, %d, 0x%p)\n",
-         handle, attr, list);
+    cs_dbg(SOCKET(handle), 1, "setup_regions(0x%p, %d, 0x%p)\n",
+          handle, attr, list);
 
     code = (attr) ? CISTPL_DEVICE_A : CISTPL_DEVICE;
     if (read_tuple(handle, code, &device) != CS_SUCCESS)
@@ -342,17 +346,13 @@ static void setup_regions(client_handle_t handle, int attr,
     code = (attr) ? CISTPL_JEDEC_A : CISTPL_JEDEC_C;
     has_jedec = (read_tuple(handle, code, &jedec) == CS_SUCCESS);
     if (has_jedec && (device.ndev != jedec.nid)) {
-#ifdef PCMCIA_DEBUG
-       printk(KERN_DEBUG "cs: Device info does not match JEDEC info.\n");
-#endif
+       cs_dbg(SOCKET(handle), 0, "Device info does not match JEDEC info.\n");
        has_jedec = 0;
     }
     code = (attr) ? CISTPL_DEVICE_GEO_A : CISTPL_DEVICE_GEO;
     has_geo = (read_tuple(handle, code, &geo) == CS_SUCCESS);
     if (has_geo && (device.ndev != geo.ngeo)) {
-#ifdef PCMCIA_DEBUG
-       printk(KERN_DEBUG "cs: Device info does not match geometry tuple.\n");
-#endif
+       cs_dbg(SOCKET(handle), 0, "Device info does not match geometry tuple.\n");
        has_geo = 0;
     }
     
@@ -458,7 +458,7 @@ int pcmcia_register_mtd(client_handle_t handle, mtd_reg_t *reg)
        list = s->a_region;
     else
        list = s->c_region;
-    DEBUG(1, "cs: register_mtd(0x%p, '%s', 0x%x)\n",
+    cs_dbg(s, 1, "register_mtd(0x%p, '%s', 0x%x)\n",
          handle, handle->dev_info, reg->Offset);
     while (list) {
        if (list->info.CardOffset == reg->Offset) break;
@@ -548,8 +548,8 @@ int pcmcia_open_memory(client_handle_t *handle, open_mem_t *open, memory_handle_
     }
     if (region && region->mtd) {
        *mh = region;
-       DEBUG(1, "cs: open_memory(0x%p, 0x%x) = 0x%p\n",
-             handle, open->Offset, region);
+       cs_dbg(s, 1, "open_memory(0x%p, 0x%x) = 0x%p\n",
+              handle, open->Offset, region);
        return CS_SUCCESS;
     } else
        return CS_BAD_OFFSET;
@@ -565,7 +565,7 @@ int pcmcia_open_memory(client_handle_t *handle, open_mem_t *open, memory_handle_
 
 int pcmcia_close_memory(memory_handle_t handle)
 {
-    DEBUG(1, "cs: close_memory(0x%p)\n", handle);
+    cs_dbg(SOCKET(handle->mtd), 1, "cs: close_memory(0x%p)\n", handle);
     if (CHECK_REGION(handle))
        return CS_BAD_HANDLE;
     return CS_SUCCESS;
index 8c5771036aeb709f7cbec85e5089eda7ec57ea8c..96700495c27f65e1d1cdc78dcaba8f1beb25548f 100644 (file)
 #include <pcmcia/cistpl.h>
 #include "cs_internal.h"
 
-#ifdef PCMCIA_DEBUG
-static int pc_debug = PCMCIA_DEBUG;
-#endif
-
 /*====================================================================*/
 
 #define FIND_FIRST_BIT(n)      ((n) - ((n) & ((n)-1)))
@@ -119,7 +115,7 @@ static u_int xlate_rom_addr(u_char * b, u_int addr)
 static void cb_release_cis_mem(struct pcmcia_socket * s)
 {
        if (s->cb_cis_virt) {
-               DEBUG(1, "cs: cb_release_cis_mem()\n");
+               cs_dbg(s, 1, "cb_release_cis_mem()\n");
                iounmap(s->cb_cis_virt);
                s->cb_cis_virt = NULL;
                s->cb_cis_res = 0;
@@ -160,7 +156,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;
 
-       DEBUG(3, "cs: read_cb_mem(%d, %#x, %u)\n", space, addr, len);
+       cs_dbg(s, 3, "read_cb_mem(%d, %#x, %u)\n", space, addr, len);
 
        dev = pci_find_slot(s->cb_dev->subordinate->number, 0);
        if (!dev)
index 49e9498c5c3b8271c08ae3fc2e38ec4d0508852d..693a10f91cec1868e01e7ee0c6b0ea8b4bcc5c82 100644 (file)
@@ -143,7 +143,7 @@ int read_cis_mem(struct pcmcia_socket *s, int attr, u_int addr,
 {
     u_char *sys, *end, *buf = ptr;
     
-    DEBUG(3, "cs: read_cis_mem(%d, %#x, %u)\n", attr, addr, len);
+    cs_dbg(s, 3, "read_cis_mem(%d, %#x, %u)\n", attr, addr, len);
 
     if (attr & IS_INDIRECT) {
        /* Indirect accesses use a bunch of special registers at fixed
@@ -195,7 +195,7 @@ int read_cis_mem(struct pcmcia_socket *s, int attr, u_int addr,
            addr = 0;
        }
     }
-    DEBUG(3, "cs:  %#2.2x %#2.2x %#2.2x %#2.2x ...\n",
+    cs_dbg(s, 3, "  %#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;
@@ -206,7 +206,7 @@ void write_cis_mem(struct pcmcia_socket *s, int attr, u_int addr,
 {
     u_char *sys, *end, *buf = ptr;
     
-    DEBUG(3, "cs: write_cis_mem(%d, %#x, %u)\n", attr, addr, len);
+    cs_dbg(s, 3, "write_cis_mem(%d, %#x, %u)\n", attr, addr, len);
 
     if (attr & IS_INDIRECT) {
        /* Indirect accesses use a bunch of special registers at fixed
@@ -578,8 +578,7 @@ int pcmcia_get_next_tuple(client_handle_t handle, tuple_t *tuple)
        ofs += link[1] + 2;
     }
     if (i == MAX_TUPLES) {
-       DEBUG(1, "cs: overrun in pcmcia_get_next_tuple for socket %d\n",
-             handle->Socket);
+       cs_dbg(s, 1, "cs: overrun in pcmcia_get_next_tuple\n");
        return CS_NO_MORE_ITEMS;
     }
     
index ef593c67110c959ec2ec9a93e44abc5eeed19015..67d71ccc8a41dc57ef6c7b87257c3636a8a51729 100644 (file)
@@ -32,6 +32,7 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/config.h>
@@ -110,12 +111,17 @@ INT_MODULE_PARM(cis_speed,        300);           /* ns */
 /* Access speed for IO windows */
 INT_MODULE_PARM(io_speed,      0);             /* ns */
 
-#ifdef PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-static const char *version =
-"cs.c 1.279 2001/10/13 00:08:28 (David Hinds)";
+#ifdef 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 = {
@@ -306,7 +312,7 @@ int pcmcia_register_socket(struct pcmcia_socket *socket)
        if (!socket || !socket->ops || !socket->dev.dev)
                return -EINVAL;
 
-       DEBUG(0, "cs: pcmcia_register_socket(0x%p)\n", socket->ops);
+       cs_dbg(socket, 0, "pcmcia_register_socket(0x%p)\n", socket->ops);
 
        /* try to obtain a socket number [yes, it gets ugly if we
         * register more than 2^sizeof(unsigned int) pcmcia 
@@ -377,7 +383,7 @@ void pcmcia_unregister_socket(struct pcmcia_socket *socket)
        if (!socket)
                return;
 
-       DEBUG(0, "cs: pcmcia_unregister_socket(0x%p)\n", socket->ops);
+       cs_dbg(socket, 0, "pcmcia_unregister_socket(0x%p)\n", socket->ops);
 
        if (socket->thread) {
                init_completion(&socket->thread_done);
@@ -443,7 +449,7 @@ static void shutdown_socket(struct pcmcia_socket *s)
 {
     client_t **c;
     
-    DEBUG(1, "cs: shutdown_socket(%p)\n", s);
+    cs_dbg(s, 1, "shutdown_socket\n");
 
     /* Blank out the socket state */
     s->state &= SOCKET_PRESENT|SOCKET_INUSE;
@@ -499,8 +505,8 @@ static int send_event(struct pcmcia_socket *s, event_t event, int priority)
 {
     client_t *client = s->clients;
     int ret;
-    DEBUG(1, "cs: send_event(sock %d, event %d, pri %d)\n",
-         s->sock, event, priority);
+    cs_dbg(s, 1, "send_event(event %d, pri %d)\n",
+          event, priority);
     ret = 0;
     if (s->state & SOCKET_CARDBUS)
            return 0;
@@ -516,26 +522,14 @@ static int send_event(struct pcmcia_socket *s, event_t event, int priority)
     return ret;
 } /* send_event */
 
-static void pcmcia_error(struct pcmcia_socket *skt, const char *fmt, ...)
-{
-       static char buf[128];
-       va_list ap;
-       int len;
-
-       va_start(ap, fmt);
-       len = vsnprintf(buf, sizeof(buf), fmt, ap);
-       va_end(ap);
-       buf[len] = '\0';
-
-       printk(KERN_ERR "PCMCIA: socket %p: %s", skt, buf);
-}
-
 #define cs_to_timeout(cs) (((cs) * HZ + 99) / 100)
 
 static void socket_remove_drivers(struct pcmcia_socket *skt)
 {
        client_t *client;
 
+       cs_dbg(skt, 4, "remove_drivers\n");
+
        send_event(skt, CS_EVENT_CARD_REMOVAL, CS_EVENT_PRI_HIGH);
 
        for (client = skt->clients; client; client = client->next)
@@ -545,6 +539,8 @@ static void socket_remove_drivers(struct pcmcia_socket *skt)
 
 static void socket_shutdown(struct pcmcia_socket *skt)
 {
+       cs_dbg(skt, 4, "shutdown\n");
+
        socket_remove_drivers(skt);
        set_current_state(TASK_UNINTERRUPTIBLE);
        schedule_timeout(cs_to_timeout(shutdown_delay));
@@ -556,6 +552,8 @@ static int socket_reset(struct pcmcia_socket *skt)
 {
        int status, i;
 
+       cs_dbg(skt, 4, "reset\n");
+
        skt->socket.flags |= SS_OUTPUT_ENA | SS_RESET;
        skt->ops->set_socket(skt, &skt->socket);
        udelay((long)reset_time);
@@ -578,7 +576,7 @@ static int socket_reset(struct pcmcia_socket *skt)
                schedule_timeout(cs_to_timeout(unreset_check));
        }
 
-       pcmcia_error(skt, "time out after reset.\n");
+       cs_err(skt, "time out after reset.\n");
        return CS_GENERAL_FAILURE;
 }
 
@@ -586,6 +584,8 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
 {
        int status, i;
 
+       cs_dbg(skt, 4, "setup\n");
+
        skt->ops->get_status(skt, &status);
        if (!(status & SS_DETECT))
                return CS_NO_CARD;
@@ -606,14 +606,14 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
        }
 
        if (status & SS_PENDING) {
-               pcmcia_error(skt, "voltage interrogation timed out.\n");
+               cs_err(skt, "voltage interrogation timed out.\n");
                return CS_GENERAL_FAILURE;
        }
 
        if (status & SS_CARDBUS) {
                skt->state |= SOCKET_CARDBUS;
 #ifndef CONFIG_CARDBUS
-               pcmcia_error(skt, "cardbus cards are not supported.\n");
+               cs_err(skt, "cardbus cards are not supported.\n");
                return CS_BAD_TYPE;
 #endif
        }
@@ -626,7 +626,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 {
-               pcmcia_error(skt, "unsupported voltage key.\n");
+               cs_err(skt, "unsupported voltage key.\n");
                return CS_BAD_TYPE;
        }
        skt->socket.flags = 0;
@@ -640,7 +640,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
 
        skt->ops->get_status(skt, &status);
        if (!(status & SS_POWERON)) {
-               pcmcia_error(skt, "unable to apply power.\n");
+               cs_err(skt, "unable to apply power.\n");
                return CS_BAD_TYPE;
        }
 
@@ -655,6 +655,8 @@ static int socket_insert(struct pcmcia_socket *skt)
 {
        int ret;
 
+       cs_dbg(skt, 4, "insert\n");
+
        if (!cs_socket_get(skt))
                return CS_NO_CARD;
 
@@ -667,6 +669,8 @@ static int socket_insert(struct pcmcia_socket *skt)
                        skt->state |= SOCKET_CARDBUS_CONFIG;
                }
 #endif
+               cs_dbg(skt, 4, "insert done\n");
+
                send_event(skt, CS_EVENT_CARD_INSERTION, CS_EVENT_PRI_LOW);
        } else {
                socket_shutdown(skt);
@@ -832,6 +836,7 @@ static int pccardd(void *__skt)
  */
 void pcmcia_parse_events(struct pcmcia_socket *s, u_int events)
 {
+       cs_dbg(s, 4, "parse_events: events %08x\n", events);
        if (s->thread) {
                spin_lock(&s->thread_lock);
                s->thread_events |= events;
@@ -857,15 +862,15 @@ static int alloc_io_space(struct pcmcia_socket *s, u_int attr, ioaddr_t *base,
     align = (*base) ? (lines ? 1<<lines : 0) : 1;
     if (align && (align < num)) {
        if (*base) {
-           DEBUG(0, "odd IO request: num %04x align %04x\n",
-                 num, align);
+           cs_dbg(s, 0, "odd IO request: num %04x align %04x\n",
+                  num, align);
            align = 0;
        } else
            while (align && (align < num)) align <<= 1;
     }
     if (*base & ~(align-1)) {
-       DEBUG(0, "odd IO request: base %04x align %04x\n",
-             *base, align);
+       cs_dbg(s, 0, "odd IO request: base %04x align %04x\n",
+              *base, align);
        align = 0;
     }
     if ((s->features & SS_CAP_STATIC_MAP) && s->io_offset) {
@@ -1010,8 +1015,8 @@ int pcmcia_bind_device(bind_req_t *req)
     init_waitqueue_head(&client->mtd_req);
     client->next = s->clients;
     s->clients = client;
-    DEBUG(1, "cs: bind_device(): client 0x%p, sock %p, dev %s\n",
-         client, client->Socket, client->dev_info);
+    cs_dbg(s, 1, "bind_device(): client 0x%p, dev %s\n",
+          client, client->dev_info);
     return CS_SUCCESS;
 } /* bind_device */
 
@@ -1046,8 +1051,8 @@ int pcmcia_bind_mtd(mtd_bind_t *req)
        return CS_BAD_OFFSET;
     strlcpy(region->dev_info, (char *)req->dev_info, DEV_NAME_LEN);
     
-    DEBUG(1, "cs: bind_mtd(): attr 0x%x, offset 0x%x, dev %s\n",
-         req->Attributes, req->CardOffset, (char *)req->dev_info);
+    cs_dbg(s, 1, "bind_mtd(): attr 0x%x, offset 0x%x, dev %s\n",
+          req->Attributes, req->CardOffset, (char *)req->dev_info);
     return CS_SUCCESS;
 } /* bind_mtd */
 
@@ -1061,9 +1066,12 @@ int pcmcia_deregister_client(client_handle_t handle)
     u_long flags;
     int i;
     
-    DEBUG(1, "cs: deregister_client(%p)\n", handle);
     if (CHECK_HANDLE(handle))
        return CS_BAD_HANDLE;
+
+    s = SOCKET(handle);
+    cs_dbg(s, 1, "deregister_client(%p)\n", handle);
+
     if (handle->state &
        (CLIENT_IRQ_REQ|CLIENT_IO_REQ|CLIENT_CONFIG_LOCKED))
        return CS_IN_USE;
@@ -1072,7 +1080,6 @@ int pcmcia_deregister_client(client_handle_t handle)
            return CS_IN_USE;
 
     /* Disconnect all MTD links */
-    s = SOCKET(handle);
     if (handle->mtd_count) {
        for (region = s->a_region; region; region = region->info.next)
            if (region->mtd == handle) region->mtd = NULL;
@@ -1543,8 +1550,8 @@ int pcmcia_register_client(client_handle_t *handle, client_reg_t *req)
        memset(s->config, 0, sizeof(config_t) * s->functions);
     }
     
-    DEBUG(1, "cs: register_client(): client 0x%p, sock %p, dev %s\n",
-         client, client->Socket, client->dev_info);
+    cs_dbg(s, 1, "register_client(): client 0x%p, dev %s\n",
+          client, client->dev_info);
     if (client->EventMask & CS_EVENT_REGISTRATION_COMPLETE)
        EVENT(client, CS_EVENT_REGISTRATION_COMPLETE, CS_EVENT_PRI_LOW);
 
@@ -2077,8 +2084,8 @@ int pcmcia_reset_card(client_handle_t handle, client_req_t *req)
     
        if (CHECK_HANDLE(handle))
                return CS_BAD_HANDLE;
-       DEBUG(1, "cs: resetting socket %p\n", handle->Socket);
        skt = SOCKET(handle);
+       cs_dbg(skt, 1, "resetting socket\n");
 
        down(&skt->skt_sem);
        do {
@@ -2126,8 +2133,8 @@ int pcmcia_suspend_card(client_handle_t handle, client_req_t *req)
     
        if (CHECK_HANDLE(handle))
                return CS_BAD_HANDLE;
-       DEBUG(1, "cs: suspending socket %p\n", handle->Socket);
        skt = SOCKET(handle);
+       cs_dbg(skt, 1, "suspending socket\n");
 
        down(&skt->skt_sem);
        do {
@@ -2153,8 +2160,8 @@ int pcmcia_resume_card(client_handle_t handle, client_req_t *req)
     
        if (CHECK_HANDLE(handle))
                return CS_BAD_HANDLE;
-       DEBUG(1, "cs: waking up socket %p\n", handle->Socket);
        skt = SOCKET(handle);
+       cs_dbg(skt, 1, "waking up socket\n");
 
        down(&skt->skt_sem);
        do {
@@ -2186,8 +2193,8 @@ int pcmcia_eject_card(client_handle_t handle, client_req_t *req)
     
        if (CHECK_HANDLE(handle))
                return CS_BAD_HANDLE;
-       DEBUG(1, "cs: user eject request on socket %p\n", handle->Socket);
        skt = SOCKET(handle);
+       cs_dbg(skt, 1, "user eject request\n");
 
        down(&skt->skt_sem);
        do {
@@ -2215,8 +2222,8 @@ int pcmcia_insert_card(client_handle_t handle, client_req_t *req)
 
        if (CHECK_HANDLE(handle))
                return CS_BAD_HANDLE;
-       DEBUG(1, "cs: user insert request on socket %p\n", handle->Socket);
        skt = SOCKET(handle);
+       cs_dbg(skt, 1, "user insert request\n");
 
        down(&skt->skt_sem);
        do {
@@ -2360,7 +2367,6 @@ static int __init init_pcmcia_cs(void)
 {
     printk(KERN_INFO "%s\n", release);
     printk(KERN_INFO "  %s\n", options);
-    DEBUG(0, "%s\n", version);
     class_register(&pcmcia_socket_class);
 
     return 0;
index 43ea3d6b0b8f7bd5337a14f1edd29b9a0833df8e..655b1704b3f264a74b1f02a79b8604a18c8a54a6 100644 (file)
@@ -167,7 +167,6 @@ int replace_cis(client_handle_t handle, cisdump_t *cis);
 int read_tuple(client_handle_t handle, cisdata_t code, void *parse);
 
 /* In bulkmem.c */
-void retry_erase_list(struct erase_busy_t *list, u_int cause);
 int get_first_region(client_handle_t handle, region_info_t *rgn);
 int get_next_region(client_handle_t handle, region_info_t *rgn);
 int register_mtd(client_handle_t handle, mtd_reg_t *reg);
@@ -194,11 +193,22 @@ void release_resource_db(void);
 extern struct rw_semaphore pcmcia_socket_list_rwsem;
 extern struct list_head pcmcia_socket_list;
 
-#ifdef PCMCIA_DEBUG
-extern int pc_debug;
-#define DEBUG(n, args...) do { if (pc_debug>(n)) printk(KERN_DEBUG args); } while (0)
+#define cs_socket_name(skt)    ((skt)->dev.class_id)
+
+#ifdef DEBUG
+extern int cs_debug_level(int);
+
+#define cs_dbg(skt, lvl, fmt, arg...) do {             \
+       if (cs_debug_level(lvl))                        \
+               printk(KERN_DEBUG "cs: %s: " fmt,       \
+                      cs_socket_name(skt) , ## arg);   \
+} while (0)
+
 #else
-#define DEBUG(n, args...) do { } while (0)
+#define cs_dbg(skt, lvl, fmt, arg...) do { } while (0)
 #endif
 
+#define cs_err(skt, fmt, arg...) \
+       printk(KERN_ERR "cs: %s: " fmt, (skt)->dev.class_id , ## arg)
+
 #endif /* _LINUX_CS_INTERNAL_H */
index 8e4f6f930d0b803a0ba8d2c628c5c6f2fb3b0887..45ab229137342876f8cdde42af1df45b3db21cb0 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <linux/config.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/major.h>
@@ -69,13 +70,17 @@ MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
 MODULE_DESCRIPTION("PCMCIA Driver Services");
 MODULE_LICENSE("Dual MPL/GPL");
 
-#define INT_MODULE_PARM(n, v) static int n = v; MODULE_PARM(n, "i")
+#ifdef DEBUG
+static int pc_debug;
 
-#ifdef PCMCIA_DEBUG
-INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+module_param(pc_debug, int, 0644);
+
+#define ds_dbg(lvl, fmt, arg...) do {                          \
+       if (pc_debug > (lvl))                                   \
+               printk(KERN_DEBUG "ds: " fmt , ## arg);         \
+} while (0)
 #else
-#define DEBUG(n, args...)
+#define ds_dbg(lvl, fmt, arg...) do { } while (0)
 #endif
 
 /*====================================================================*/
@@ -277,7 +282,7 @@ static int ds_event(event_t event, int priority,
 {
     struct pcmcia_bus_socket *s;
 
-    DEBUG(1, "ds: ds_event(0x%06x, %d, 0x%p)\n",
+    ds_dbg(1, "ds_event(0x%06x, %d, 0x%p)\n",
          event, priority, args->client_handle);
     s = args->client_data;
     
@@ -353,7 +358,7 @@ static int bind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info)
     if (!s)
            return -EINVAL;
 
-    DEBUG(2, "bind_request(%d, '%s')\n", s->parent->sock,
+    ds_dbg(2, "bind_request(%d, '%s')\n", s->parent->sock,
          (char *)bind_info->dev_info);
     driver = get_pcmcia_driver(&bind_info->dev_info);
     if (!driver)
@@ -484,7 +489,7 @@ static int unbind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info)
 {
     socket_bind_t **b, *c;
 
-    DEBUG(2, "unbind_request(%d, '%s')\n", s->parent->sock,
+    ds_dbg(2, "unbind_request(%d, '%s')\n", s->parent->sock,
          (char *)bind_info->dev_info);
     for (b = &s->bind; *b; b = &(*b)->next)
        if ((strcmp((char *)(*b)->driver->drv.name,
@@ -518,7 +523,7 @@ static int ds_open(struct inode *inode, struct file *file)
     struct pcmcia_bus_socket *s;
     user_info_t *user;
 
-    DEBUG(0, "ds_open(socket %d)\n", i);
+    ds_dbg(0, "ds_open(socket %d)\n", i);
 
     s = pcmcia_get_bus_socket(i);
     if (!s)
@@ -552,7 +557,7 @@ static int ds_release(struct inode *inode, struct file *file)
     struct pcmcia_bus_socket *s;
     user_info_t *user, **link;
 
-    DEBUG(0, "ds_release(socket %d)\n", iminor(inode));
+    ds_dbg(0, "ds_release(socket %d)\n", iminor(inode));
 
     user = file->private_data;
     if (CHECK_USER(user))
@@ -588,7 +593,7 @@ static ssize_t ds_read(struct file *file, char *buf,
     user_info_t *user;
     int ret;
 
-    DEBUG(2, "ds_read(socket %d)\n", iminor(inode));
+    ds_dbg(2, "ds_read(socket %d)\n", iminor(file->f_dentry->d_inode));
     
     if (count < 4)
        return -EINVAL;
@@ -616,7 +621,7 @@ static ssize_t ds_write(struct file *file, const char *buf,
     struct pcmcia_bus_socket *s;
     user_info_t *user;
 
-    DEBUG(2, "ds_write(socket %d)\n", iminor(inode));
+    ds_dbg(2, "ds_write(socket %d)\n", iminor(file->f_dentry->d_inode));
     
     if (count != 4)
        return -EINVAL;
@@ -650,7 +655,7 @@ static u_int ds_poll(struct file *file, poll_table *wait)
     struct pcmcia_bus_socket *s;
     user_info_t *user;
 
-    DEBUG(2, "ds_poll(socket %d)\n", iminor(inode));
+    ds_dbg(2, "ds_poll(socket %d)\n", iminor(file->f_dentry->d_inode));
     
     user = file->private_data;
     if (CHECK_USER(user))
@@ -677,7 +682,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
     ds_ioctl_arg_t buf;
     user_info_t *user;
 
-    DEBUG(2, "ds_ioctl(socket %d, %#x, %#lx)\n", iminor(inode), cmd, arg);
+    ds_dbg(2, "ds_ioctl(socket %d, %#x, %#lx)\n", iminor(inode), cmd, arg);
     
     user = file->private_data;
     if (CHECK_USER(user))
@@ -697,14 +702,14 @@ static int ds_ioctl(struct inode * inode, struct file * file,
     if (cmd & IOC_IN) {
        err = verify_area(VERIFY_READ, (char *)arg, size);
        if (err) {
-           DEBUG(3, "ds_ioctl(): verify_read = %d\n", err);
+           ds_dbg(3, "ds_ioctl(): verify_read = %d\n", err);
            return err;
        }
     }
     if (cmd & IOC_OUT) {
        err = verify_area(VERIFY_WRITE, (char *)arg, size);
        if (err) {
-           DEBUG(3, "ds_ioctl(): verify_write = %d\n", err);
+           ds_dbg(3, "ds_ioctl(): verify_write = %d\n", err);
            return err;
        }
     }
@@ -806,7 +811,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
     }
     
     if ((err == 0) && (ret != CS_SUCCESS)) {
-       DEBUG(2, "ds_ioctl: ret = %d\n", ret);
+       ds_dbg(2, "ds_ioctl: ret = %d\n", ret);
        switch (ret) {
        case CS_BAD_SOCKET: case CS_NO_CARD:
            err = -ENODEV; break;
index c1ebe8e8d2d101b774bf38960e7cd19d04005c17..5afbc805113d18860795b6158df435db8d265443 100644 (file)
@@ -32,6 +32,7 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/config.h>
 #include <linux/types.h>
 #include "ricoh.h"
 #include "o2micro.h"
 
-#ifdef PCMCIA_DEBUG
-static int pc_debug = PCMCIA_DEBUG;
-MODULE_PARM(pc_debug, "i");
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+#ifdef 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(n, args...) do { } while (0)
+#define debug(lvl, fmt, arg...) do { } while (0)
 #endif
 
 static irqreturn_t i365_count_irq(int, void *, struct pt_regs *);
@@ -496,13 +503,13 @@ static irqreturn_t i365_count_irq(int irq, void *dev, struct pt_regs *regs)
 {
     i365_get(irq_sock, I365_CSC);
     irq_hits++;
-    DEBUG(2, "-> hit on irq %d\n", irq);
+    debug(2, "-> 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);
+    debug(2, "  testing ISA irq %d\n", irq);
     if (request_irq(irq, i365_count_irq, 0, "scan", i365_count_irq) != 0)
        return 1;
     irq_hits = 0; irq_sock = sock;
@@ -510,7 +517,7 @@ static u_int __init test_irq(u_short sock, int irq)
     schedule_timeout(HZ/100);
     if (irq_hits) {
        free_irq(irq, i365_count_irq);
-       DEBUG(2, "    spurious hit!\n");
+       debug(2, "    spurious hit!\n");
        return 1;
     }
 
@@ -523,7 +530,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);
+    debug(2, "    hits = %d\n", irq_hits);
     
     return (irq_hits != 1);
 }
@@ -850,7 +857,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev,
     u_long flags = 0;
     int handled = 0;
 
-    DEBUG(4, "i82365: pcic_interrupt(%d)\n", irq);
+    debug(4, "pcic_interrupt(%d)\n", irq);
 
     for (j = 0; j < 20; j++) {
        active = 0;
@@ -874,7 +881,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev,
                events |= (csc & I365_CSC_READY) ? SS_READY : 0;
            }
            ISA_UNLOCK(i, flags);
-           DEBUG(2, "i82365: socket %d event 0x%02x\n", i, events);
+           debug(2, "socket %d event 0x%02x\n", i, events);
 
            if (events)
                pcmcia_parse_events(&socket[i].socket, events);
@@ -886,7 +893,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, "i82365: interrupt done\n");
+    debug(4, "interrupt done\n");
     return IRQ_RETVAL(handled);
 } /* pcic_interrupt */
 
@@ -928,7 +935,7 @@ static int i365_get_status(u_short sock, u_int *value)
        }
     }
     
-    DEBUG(1, "i82365: GetStatus(%d) = %#4.4x\n", sock, *value);
+    debug(1, "GetStatus(%d) = %#4.4x\n", sock, *value);
     return 0;
 } /* i365_get_status */
 
@@ -998,7 +1005,7 @@ static int i365_get_socket(u_short sock, socket_state_t *state)
        state->csc_mask |= (reg & I365_CSC_READY) ? SS_READY : 0;
     }
     
-    DEBUG(1, "i82365: GetSocket(%d) = flags %#3.3x, Vcc %d, Vpp %d, "
+    debug(1, "GetSocket(%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);
     return 0;
@@ -1011,7 +1018,7 @@ static int i365_set_socket(u_short sock, socket_state_t *state)
     struct i82365_socket *t = &socket[sock];
     u_char reg;
     
-    DEBUG(1, "i82365: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
+    debug(1, "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);
     
@@ -1120,7 +1127,7 @@ static int i365_set_io_map(u_short sock, struct pccard_io_map *io)
 {
     u_char map, ioctl;
     
-    DEBUG(1, "i82365: SetIOMap(%d, %d, %#2.2x, %d ns, "
+    debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, "
          "%#4.4x-%#4.4x)\n", sock, io->map, io->flags,
          io->speed, io->start, io->stop);
     map = io->map;
@@ -1150,7 +1157,7 @@ static int i365_set_mem_map(u_short sock, struct pccard_mem_map *mem)
     u_short base, i;
     u_char map;
     
-    DEBUG(1, "i82365: SetMemMap(%d, %d, %#2.2x, %d ns, %#5.5lx-%#5.5"
+    debug(1, "SetMemMap(%d, %d, %#2.2x, %d ns, %#5.5lx-%#5.5"
          "lx, %#5.5x)\n", sock, mem->map, mem->flags, mem->speed,
          mem->sys_start, mem->sys_stop, mem->card_start);
 
index 29454cf3dfa68c97282eecc0df13e0b1d350e1e1..d7249c033ec8329861ec7c7d9356de0310bc51a3 100644 (file)
@@ -35,6 +35,7 @@
  */
 
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/config.h>
 #include <linux/cpufreq.h>
 #include "sa11xx_core.h"
 #include "sa1100.h"
 
-#ifdef PCMCIA_DEBUG
+#ifdef DEBUG
 static int pc_debug;
+
+module_param(pc_debug, int, 0644);
+
+#define debug(skt, lvl, fmt, arg...) do {                      \
+       if (pc_debug > (lvl))                                   \
+               printk(KERN_DEBUG "skt%u: %s: " fmt,            \
+                      (skt)->nr, __func__ , ## arg);           \
+} while (0)
+
+#else
+#define debug(skt, lvl, fmt, arg...) do { } while (0)
 #endif
 
 #define to_sa1100_socket(x)    container_of(x, struct sa1100_pcmcia_socket, socket)
@@ -133,8 +145,8 @@ sa1100_pcmcia_set_mecr(struct sa1100_pcmcia_socket *skt, unsigned int cpu_clock)
 
        local_irq_restore(flags);
 
-       DEBUG(4, "%s(): sock %u FAST %X  BSM %X  BSA %X  BSIO %X\n",
-             __FUNCTION__, skt->nr, MECR_FAST_GET(mecr, skt->nr),
+       debug(skt, 2, "FAST %X  BSM %X  BSA %X  BSIO %X\n",
+             MECR_FAST_GET(mecr, skt->nr),
              MECR_BSM_GET(mecr, skt->nr), MECR_BSA_GET(mecr, skt->nr),
              MECR_BSIO_GET(mecr, skt->nr));
 
@@ -221,7 +233,7 @@ static int sa1100_pcmcia_sock_init(struct pcmcia_socket *sock)
 {
        struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
 
-       DEBUG(2, "%s(): initializing socket %u\n", __FUNCTION__, skt->nr);
+       debug(skt, 2, "initializing socket\n");
 
        skt->ops->socket_init(skt);
        return 0;
@@ -242,7 +254,7 @@ static int sa1100_pcmcia_suspend(struct pcmcia_socket *sock)
        struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
        int ret;
 
-       DEBUG(2, "%s(): suspending socket %u\n", __FUNCTION__, skt->nr);
+       debug(skt, 2, "suspending socket\n");
 
        ret = sa1100_pcmcia_config_skt(skt, &dead_socket);
        if (ret == 0)
@@ -260,7 +272,7 @@ static void sa1100_check_status(struct sa1100_pcmcia_socket *skt)
 {
        unsigned int events;
 
-       DEBUG(4, "%s(): entering PCMCIA monitoring thread\n", __FUNCTION__);
+       debug(skt, 4, "entering PCMCIA monitoring thread\n");
 
        do {
                unsigned int status;
@@ -273,7 +285,7 @@ static void sa1100_check_status(struct sa1100_pcmcia_socket *skt)
                skt->status = status;
                spin_unlock_irqrestore(&status_lock, flags);
 
-               DEBUG(2, "events: %s%s%s%s%s%s\n",
+               debug(skt, 4, "events: %s%s%s%s%s%s\n",
                        events == 0         ? "<NONE>"   : "",
                        events & SS_DETECT  ? "DETECT "  : "",
                        events & SS_READY   ? "READY "   : "",
@@ -293,7 +305,7 @@ static void sa1100_check_status(struct sa1100_pcmcia_socket *skt)
 static void sa1100_pcmcia_poll_event(unsigned long dummy)
 {
        struct sa1100_pcmcia_socket *skt = (struct sa1100_pcmcia_socket *)dummy;
-       DEBUG(4, "%s(): polling for events\n", __FUNCTION__);
+       debug(skt, 4, "polling for events\n");
 
        mod_timer(&skt->poll_timer, jiffies + SA1100_PCMCIA_POLL_PERIOD);
 
@@ -314,7 +326,7 @@ static irqreturn_t sa1100_pcmcia_interrupt(int irq, void *dev, struct pt_regs *r
 {
        struct sa1100_pcmcia_socket *skt = dev;
 
-       DEBUG(3, "%s(): servicing IRQ %d\n", __FUNCTION__, irq);
+       debug(skt, 3, "servicing IRQ %d\n", irq);
 
        sa1100_check_status(skt);
 
@@ -363,7 +375,7 @@ sa1100_pcmcia_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
 {
   struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
 
-  DEBUG(2, "%s() for sock %u\n", __FUNCTION__, skt->nr);
+  debug(skt, 2, "\n");
 
   *state = skt->cs_state;
 
@@ -385,22 +397,19 @@ sa1100_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
 {
   struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
 
-  DEBUG(2, "%s() for sock %u\n", __FUNCTION__, skt->nr);
-
-  DEBUG(3, "\tmask:  %s%s%s%s%s%s\n\tflags: %s%s%s%s%s%s\n",
-       (state->csc_mask==0)?"<NONE>":"",
+  debug(skt, 2, "mask: %s%s%s%s%s%sflags: %s%s%s%s%s%sVcc %d Vpp %d irq %d\n",
+       (state->csc_mask==0)?"<NONE> ":"",
        (state->csc_mask&SS_DETECT)?"DETECT ":"",
        (state->csc_mask&SS_READY)?"READY ":"",
        (state->csc_mask&SS_BATDEAD)?"BATDEAD ":"",
        (state->csc_mask&SS_BATWARN)?"BATWARN ":"",
        (state->csc_mask&SS_STSCHG)?"STSCHG ":"",
-       (state->flags==0)?"<NONE>":"",
+       (state->flags==0)?"<NONE> ":"",
        (state->flags&SS_PWR_AUTO)?"PWR_AUTO ":"",
        (state->flags&SS_IOCARD)?"IOCARD ":"",
        (state->flags&SS_RESET)?"RESET ":"",
        (state->flags&SS_SPKR_ENA)?"SPKR_ENA ":"",
-       (state->flags&SS_OUTPUT_ENA)?"OUTPUT_ENA ":"");
-  DEBUG(3, "\tVcc %d  Vpp %d  irq %d\n",
+       (state->flags&SS_OUTPUT_ENA)?"OUTPUT_ENA ":"",
        state->Vcc, state->Vpp, state->io_irq);
 
   return sa1100_pcmcia_config_skt(skt, state);
@@ -422,11 +431,9 @@ sa1100_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *map)
        struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
        unsigned short speed = map->speed;
 
-       DEBUG(2, "%s() for sock %u\n", __FUNCTION__, skt->nr);
-
-       DEBUG(3, "\tmap %u  speed %u\n\tstart 0x%08x  stop 0x%08x\n",
+       debug(skt, 2, "map %u  speed %u start 0x%08x stop 0x%08x\n",
                map->map, map->speed, map->start, map->stop);
-       DEBUG(3, "\tflags: %s%s%s%s%s%s%s%s\n",
+       debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
                (map->flags==0)?"<NONE>":"",
                (map->flags&MAP_ACTIVE)?"ACTIVE ":"",
                (map->flags&MAP_16BIT)?"16BIT ":"",
@@ -479,11 +486,9 @@ sa1100_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map
        struct resource *res;
        unsigned short speed = map->speed;
 
-       DEBUG(2, "%s() for sock %u\n", __FUNCTION__, skt->nr);
-
-       DEBUG(3, "\tmap %u speed %u card_start %08x\n",
+       debug(skt, 2, "map %u speed %u card_start %08x\n",
                map->map, map->speed, map->card_start);
-       DEBUG(3, "\tflags: %s%s%s%s%s%s%s%s\n",
+       debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
                (map->flags==0)?"<NONE>":"",
                (map->flags&MAP_ACTIVE)?"ACTIVE ":"",
                (map->flags&MAP_16BIT)?"16BIT ":"",
@@ -920,23 +925,13 @@ sa1100_pcmcia_notifier(struct notifier_block *nb, unsigned long val,
 
        switch (val) {
        case CPUFREQ_PRECHANGE:
-               if (freqs->new > freqs->old) {
-                       DEBUG(2, "%s(): new frequency %u.%uMHz > %u.%uMHz, "
-                               "pre-updating\n", __FUNCTION__,
-                           freqs->new / 1000, (freqs->new / 100) % 10,
-                           freqs->old / 1000, (freqs->old / 100) % 10);
+               if (freqs->new > freqs->old)
                        sa1100_pcmcia_update_mecr(freqs->new);
-               }
                break;
 
        case CPUFREQ_POSTCHANGE:
-               if (freqs->new < freqs->old) {
-                       DEBUG(2, "%s(): new frequency %u.%uMHz < %u.%uMHz, "
-                               "post-updating\n", __FUNCTION__,
-                           freqs->new / 1000, (freqs->new / 100) % 10,
-                           freqs->old / 1000, (freqs->old / 100) % 10);
+               if (freqs->new < freqs->old)
                        sa1100_pcmcia_update_mecr(freqs->new);
-               }
                break;
        }
 
index 6faccf18ca495d5f93a506f7640c87f70a472e81..82ba1aff22904fc5a722078c20e4f2f5f0499e95 100644 (file)
@@ -32,6 +32,7 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/types.h>
 #include <linux/fcntl.h>
 #include <pcmcia/ss.h>
 #include "tcic.h"
 
-#ifdef PCMCIA_DEBUG
-static int pc_debug = PCMCIA_DEBUG;
+#ifdef DEBUG
+static int pc_debug;
+
+module_param(pc_debug, int, 0644);
 MODULE_PARM(pc_debug, "i");
 static const char *version =
 "tcic.c 1.111 2000/02/15 04:13:12 (David Hinds)";
-#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+
+#define debug(lvl, fmt, arg...) do {                           \
+       if (pc_debug > (lvl))                                   \
+               printk(KERN_DEBUG "tcic: " fmt , ## arg);       \
+} while (0)
 #else
-#define DEBUG(n, args...)
+#define debug(lvl, fmt, arg...) do { } while (0)
 #endif
 
 MODULE_AUTHOR("David Hinds <dahinds@users.sourceforge.net>");
@@ -133,7 +140,7 @@ static struct tcic_socket socket_table[2];
    to map to irq 11, but is coded as 0 or 1 in the irq registers. */
 #define TCIC_IRQ(x) ((x) ? (((x) == 11) ? 1 : (x)) : 15)
 
-#ifdef PCMCIA_DEBUG_X
+#ifdef DEBUG_X
 static u_char tcic_getb(u_char reg)
 {
     u_char val = inb(tcic_base+reg);
@@ -168,7 +175,7 @@ static void tcic_setw(u_char reg, u_short data)
 
 static void tcic_setl(u_char reg, u_int data)
 {
-#ifdef PCMCIA_DEBUG_X
+#ifdef DEBUG_X
     printk(KERN_DEBUG "tcic_setl(%#x, %#lx)\n", tcic_base+reg, data);
 #endif
     outw(data & 0xffff, tcic_base+reg);
@@ -573,7 +580,7 @@ static irqreturn_t tcic_interrupt(int irq, void *dev, struct pt_regs *regs)
     } else
        active = 1;
 
-    DEBUG(2, "tcic: tcic_interrupt()\n");
+    debug(2, "tcic_interrupt()\n");
     
     for (i = 0; i < sockets; i++) {
        psock = socket_table[i].psock;
@@ -610,13 +617,13 @@ static irqreturn_t tcic_interrupt(int irq, void *dev, struct pt_regs *regs)
     }
     active = 0;
     
-    DEBUG(2, "tcic: interrupt done\n");
+    debug(2, "interrupt done\n");
     return IRQ_HANDLED;
 } /* tcic_interrupt */
 
 static void tcic_timer(u_long data)
 {
-    DEBUG(2, "tcic: tcic_timer()\n");
+    debug(2, "tcic_timer()\n");
     tcic_timer_pending = 0;
     tcic_interrupt(0, NULL, NULL);
 } /* tcic_timer */
@@ -643,7 +650,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, "tcic: GetStatus(%d) = %#2.2x\n", psock, *value);
+    debug(1, "GetStatus(%d) = %#2.2x\n", psock, *value);
     return 0;
 } /* tcic_get_status */
   
@@ -694,7 +701,7 @@ static int tcic_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
        state->csc_mask |= (scf2 & TCIC_SCF2_MRDY) ? 0 : SS_READY;
     }
 
-    DEBUG(1, "tcic: GetSocket(%d) = flags %#3.3x, Vcc %d, Vpp %d, "
+    debug(1, "GetSocket(%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);
     return 0;
@@ -708,7 +715,7 @@ static int tcic_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
     u_char reg;
     u_short scf1, scf2;
 
-    DEBUG(1, "tcic: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
+    debug(1, "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);
@@ -783,7 +790,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, "tcic: SetIOMap(%d, %d, %#2.2x, %d ns, "
+    debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, "
          "%#4.4x-%#4.4x)\n", psock, io->map, io->flags,
          io->speed, io->start, io->stop);
     if ((io->map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) ||
@@ -820,7 +827,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, "tcic: SetMemMap(%d, %d, %#2.2x, %d ns, "
+    debug(1, "SetMemMap(%d, %d, %#2.2x, %d ns, "
          "%#5.5lx-%#5.5lx, %#5.5x)\n", psock, mem->map, mem->flags,
          mem->speed, mem->sys_start, mem->sys_stop, mem->card_start);
     if ((mem->map > 3) || (mem->card_start > 0x3ffffff) ||
index ccdf0eb71b748e5d34effb33d2aa1c3842b73e51..a029da0241aebf0e1849ff682936fc03e40404ad 100644 (file)
@@ -30,9 +30,9 @@
 
 
 #if 0
-#define DEBUG(x,args...)       printk(KERN_DEBUG "%s: " x, __FUNCTION__, ##args)
+#define debug(x,args...) printk(KERN_DEBUG "%s: " x, __func__ , ##args)
 #else
-#define DEBUG(x,args...)
+#define debug(x,args...)
 #endif
 
 /* Don't ask.. */
 static inline u32 cb_readl(struct yenta_socket *socket, unsigned reg)
 {
        u32 val = readl(socket->base + reg);
-       DEBUG("%p %04x %08x\n", socket, reg, val);
+       debug("%p %04x %08x\n", socket, reg, val);
        return val;
 }
 
 static inline void cb_writel(struct yenta_socket *socket, unsigned reg, u32 val)
 {
-       DEBUG("%p %04x %08x\n", socket, reg, val);
+       debug("%p %04x %08x\n", socket, reg, val);
        writel(val, socket->base + reg);
 }
 
@@ -61,7 +61,7 @@ static inline u8 config_readb(struct yenta_socket *socket, unsigned offset)
 {
        u8 val;
        pci_read_config_byte(socket->dev, offset, &val);
-       DEBUG("%p %04x %02x\n", socket, offset, val);
+       debug("%p %04x %02x\n", socket, offset, val);
        return val;
 }
 
@@ -69,7 +69,7 @@ static inline u16 config_readw(struct yenta_socket *socket, unsigned offset)
 {
        u16 val;
        pci_read_config_word(socket->dev, offset, &val);
-       DEBUG("%p %04x %04x\n", socket, offset, val);
+       debug("%p %04x %04x\n", socket, offset, val);
        return val;
 }
 
@@ -77,32 +77,32 @@ static inline u32 config_readl(struct yenta_socket *socket, unsigned offset)
 {
        u32 val;
        pci_read_config_dword(socket->dev, offset, &val);
-       DEBUG("%p %04x %08x\n", socket, offset, val);
+       debug("%p %04x %08x\n", socket, offset, val);
        return val;
 }
 
 static inline void config_writeb(struct yenta_socket *socket, unsigned offset, u8 val)
 {
-       DEBUG("%p %04x %02x\n", socket, offset, val);
+       debug("%p %04x %02x\n", socket, offset, val);
        pci_write_config_byte(socket->dev, offset, val);
 }
 
 static inline void config_writew(struct yenta_socket *socket, unsigned offset, u16 val)
 {
-       DEBUG("%p %04x %04x\n", socket, offset, val);
+       debug("%p %04x %04x\n", socket, offset, val);
        pci_write_config_word(socket->dev, offset, val);
 }
 
 static inline void config_writel(struct yenta_socket *socket, unsigned offset, u32 val)
 {
-       DEBUG("%p %04x %08x\n", socket, offset, val);
+       debug("%p %04x %08x\n", socket, offset, val);
        pci_write_config_dword(socket->dev, offset, val);
 }
 
 static inline u8 exca_readb(struct yenta_socket *socket, unsigned reg)
 {
        u8 val = readb(socket->base + 0x800 + reg);
-       DEBUG("%p %04x %02x\n", socket, reg, val);
+       debug("%p %04x %02x\n", socket, reg, val);
        return val;
 }
 
@@ -111,19 +111,19 @@ static inline u8 exca_readw(struct yenta_socket *socket, unsigned reg)
        u16 val;
        val = readb(socket->base + 0x800 + reg);
        val |= readb(socket->base + 0x800 + reg + 1) << 8;
-       DEBUG("%p %04x %04x\n", socket, reg, val);
+       debug("%p %04x %04x\n", socket, reg, val);
        return val;
 }
 
 static inline void exca_writeb(struct yenta_socket *socket, unsigned reg, u8 val)
 {
-       DEBUG("%p %04x %02x\n", socket, reg, val);
+       debug("%p %04x %02x\n", socket, reg, val);
        writeb(val, socket->base + 0x800 + reg);
 }
 
 static void exca_writew(struct yenta_socket *socket, unsigned reg, u16 val)
 {
-       DEBUG("%p %04x %04x\n", socket, reg, val);
+       debug("%p %04x %04x\n", socket, reg, val);
        writeb(val, socket->base + 0x800 + reg);
        writeb(val >> 8, socket->base + 0x800 + reg + 1);
 }