#define QETH_DBF_TEXT_(name, level, text...) \
        qeth_dbf_longtext(qeth_dbf[QETH_DBF_##name].id, level, text)
 
+#define QETH_CARD_TEXT(card, level, text) \
+       debug_text_event(card->debug, level, text)
+
+#define QETH_CARD_HEX(card, level, addr, len) \
+       debug_event(card->debug, level, (void *)(addr), len)
+
+#define QETH_CARD_MESSAGE(card, text...) \
+       debug_sprintf_event(card->debug, level, text)
+
+#define QETH_CARD_TEXT_(card, level, text...) \
+       qeth_dbf_longtext(card->debug, level, text)
+
 #define SENSE_COMMAND_REJECT_BYTE 0
 #define SENSE_COMMAND_REJECT_FLAG 0x80
 #define SENSE_RESETTING_EVENT_BYTE 1
        atomic_t force_alloc_skb;
        struct service_level qeth_service_level;
        struct qdio_ssqd_desc ssqd;
+       debug_info_t *debug;
        struct mutex conf_mutex;
 };
 
 
        struct device *dev;
        int rc;
        unsigned long flags;
+       char dbf_name[20];
 
        QETH_DBF_TEXT(SETUP, 2, "probedev");
 
                rc = -ENOMEM;
                goto err_dev;
        }
+
+       snprintf(dbf_name, sizeof(dbf_name), "qeth_card_%s",
+               dev_name(&gdev->dev));
+       card->debug = debug_register(dbf_name, 2, 1, 8);
+       if (!card->debug) {
+               QETH_DBF_TEXT_(SETUP, 2, "%s", "qcdbf");
+               rc = -ENOMEM;
+               goto err_card;
+       }
+       debug_register_view(card->debug, &debug_hex_ascii_view);
+
        card->read.ccwdev  = gdev->cdev[0];
        card->write.ccwdev = gdev->cdev[1];
        card->data.ccwdev  = gdev->cdev[2];
        rc = qeth_determine_card_type(card);
        if (rc) {
                QETH_DBF_TEXT_(SETUP, 2, "3err%d", rc);
-               goto err_card;
+               goto err_dbf;
        }
        rc = qeth_setup_card(card);
        if (rc) {
                QETH_DBF_TEXT_(SETUP, 2, "2err%d", rc);
-               goto err_card;
+               goto err_dbf;
        }
 
        if (card->info.type == QETH_CARD_TYPE_OSN)
        else
                rc = qeth_core_create_device_attributes(dev);
        if (rc)
-               goto err_card;
+               goto err_dbf;
        switch (card->info.type) {
        case QETH_CARD_TYPE_OSN:
        case QETH_CARD_TYPE_OSM:
                qeth_core_remove_osn_attributes(dev);
        else
                qeth_core_remove_device_attributes(dev);
+err_dbf:
+       debug_unregister(card->debug);
 err_card:
        qeth_core_free_card(card);
 err_dev:
        } else {
                qeth_core_remove_device_attributes(&gdev->dev);
        }
+       debug_unregister(card->debug);
        write_lock_irqsave(&qeth_core_card_list.rwlock, flags);
        list_del(&card->list);
        write_unlock_irqrestore(&qeth_core_card_list.rwlock, flags);