- Makefile fix: default make target builds the kernel image. - Add export statement for cpcmd. - Add tgkill system call. - Reserve system call number for vserver. diffstat: arch/s390/Makefile | 16 +++++++--------- arch/s390/boot/Makefile | 2 +- arch/s390/kernel/s390_ksyms.c | 3 +++ arch/s390/kernel/syscalls.S | 5 +++-- arch/s390/kernel/time.c | 2 +- include/asm-s390/unistd.h | 9 +++++---- 6 files changed, 20 insertions(+), 17 deletions(-) diff -urN linux-2.6/arch/s390/Makefile linux-2.6-s390/arch/s390/Makefile --- linux-2.6/arch/s390/Makefile Sun Sep 28 02:50:10 2003 +++ linux-2.6-s390/arch/s390/Makefile Mon Oct 6 10:59:17 2003 @@ -48,20 +48,18 @@ drivers-y += drivers/s390/ drivers-$(CONFIG_MATHEMU) += arch/$(ARCH)/math-emu/ +boot := arch/$(ARCH)/boot -makeboot =$(Q)$(MAKE) -f scripts/Makefile.build obj=arch/$(ARCH)/boot $(1) - -all: image listing - -listing image: vmlinux - $(call makeboot,arch/$(ARCH)/boot/$@) +all: image install: vmlinux - $(call makeboot, $@) + $(Q)$(MAKE) $(build)=$(boot) $@ -archclean: - $(Q)$(MAKE) -f scripts/Makefile.clean obj=arch/$(ARCH)/boot +image: vmlinux + $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ +archclean: + $(Q)$(MAKE) $(clean)=$(boot) prepare: include/asm-$(ARCH)/offsets.h diff -urN linux-2.6/arch/s390/boot/Makefile linux-2.6-s390/arch/s390/boot/Makefile --- linux-2.6/arch/s390/boot/Makefile Sun Sep 28 02:51:21 2003 +++ linux-2.6-s390/arch/s390/boot/Makefile Mon Oct 6 10:59:17 2003 @@ -6,7 +6,7 @@ tr -c '[0-9A-Za-z]' '_'`__`date | \ tr -c '[0-9A-Za-z]' '_'`_t -EXTRA_CFLAGS := -DCOMPILE_VERSION=$(COMPILE_VERSION) -gstabs -I . +EXTRA_CFLAGS := -DCOMPILE_VERSION=$(COMPILE_VERSION) -gstabs -I. targets := image diff -urN linux-2.6/arch/s390/kernel/s390_ksyms.c linux-2.6-s390/arch/s390/kernel/s390_ksyms.c --- linux-2.6/arch/s390/kernel/s390_ksyms.c Sun Sep 28 02:50:30 2003 +++ linux-2.6-s390/arch/s390/kernel/s390_ksyms.c Mon Oct 6 10:59:17 2003 @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -72,3 +73,5 @@ EXPORT_SYMBOL(console_device); EXPORT_SYMBOL_NOVERS(do_call_softirq); EXPORT_SYMBOL(sys_wait4); +EXPORT_SYMBOL(cpcmd); + diff -urN linux-2.6/arch/s390/kernel/syscalls.S linux-2.6-s390/arch/s390/kernel/syscalls.S --- linux-2.6/arch/s390/kernel/syscalls.S Sun Sep 28 02:50:09 2003 +++ linux-2.6-s390/arch/s390/kernel/syscalls.S Mon Oct 6 10:59:17 2003 @@ -249,7 +249,7 @@ SYSCALL(sys_futex,sys_futex,compat_sys_futex_wrapper) SYSCALL(sys_sched_setaffinity,sys_sched_setaffinity,sys32_sched_setaffinity_wrapper) SYSCALL(sys_sched_getaffinity,sys_sched_getaffinity,sys32_sched_getaffinity_wrapper) /* 240 */ -NI_SYSCALL +SYSCALL(sys_tgkill,sys_tgkill,sys_tgkill) NI_SYSCALL /* reserved for TUX */ SYSCALL(sys_io_setup,sys_io_setup,sys_ni_syscall) SYSCALL(sys_io_destroy,sys_io_destroy,sys_ni_syscall) @@ -268,6 +268,7 @@ SYSCALL(sys_timer_getoverrun,sys_timer_getoverrun,sys_ni_syscall) SYSCALL(sys_timer_delete,sys_timer_delete,sys_ni_syscall) SYSCALL(sys_clock_settime,sys_clock_settime,sys_ni_syscall) -SYSCALL(sys_clock_gettime,sys_clock_gettime,sys_ni_syscall) +SYSCALL(sys_clock_gettime,sys_clock_gettime,sys_ni_syscall) /* 260 */ SYSCALL(sys_clock_getres,sys_clock_getres,sys_ni_syscall) SYSCALL(sys_clock_nanosleep,sys_clock_nanosleep,sys_ni_syscall) +NI_SYSCALL /* reserved for vserver */ diff -urN linux-2.6/arch/s390/kernel/time.c linux-2.6-s390/arch/s390/kernel/time.c --- linux-2.6/arch/s390/kernel/time.c Sun Sep 28 02:50:05 2003 +++ linux-2.6-s390/arch/s390/kernel/time.c Mon Oct 6 10:59:17 2003 @@ -266,7 +266,7 @@ jiffies_timer_cc = init_timer_cc - jiffies_64 * CLK_TICKS_PER_JIFFY; /* set xtime */ - xtime_cc = init_timer_cc; + xtime_cc = init_timer_cc + CLK_TICKS_PER_JIFFY; set_time_cc = init_timer_cc - 0x8126d60e46000000LL + (0x3c26700LL*1000000*4096); tod_to_timeval(set_time_cc, &xtime); diff -urN linux-2.6/include/asm-s390/unistd.h linux-2.6-s390/include/asm-s390/unistd.h --- linux-2.6/include/asm-s390/unistd.h Sun Sep 28 02:51:28 2003 +++ linux-2.6-s390/include/asm-s390/unistd.h Mon Oct 6 10:59:17 2003 @@ -232,9 +232,7 @@ #define __NR_futex 238 #define __NR_sched_setaffinity 239 #define __NR_sched_getaffinity 240 -/* - * Number 241 is currently unused - */ +#define __NR_tgkill 241 /* * Number 242 is reserved for tux */ @@ -258,8 +256,11 @@ #define __NR_clock_gettime (__NR_timer_create+6) #define __NR_clock_getres (__NR_timer_create+7) #define __NR_clock_nanosleep (__NR_timer_create+8) +/* + * Number 263 is reserved for vserver + */ -#define NR_syscalls 263 +#define NR_syscalls 264 /* * There are some system calls that are not present on 64 bit, some - Remove atomic_read hack to test for presence of ccw device directory. - Add dummy release function to channel path object and cu3088 group devices. - Don't rely on the chaining bit of the channel report word. - Don't call schedule while holding a lock in read_dev_chars/read_conf_data. diffstat: drivers/s390/cio/ccwgroup.c | 9 +++------ drivers/s390/cio/chsc.c | 14 +++++++++++--- drivers/s390/cio/device_ops.c | 25 +++++++++++++------------ drivers/s390/cio/qdio.c | 8 +++----- drivers/s390/net/cu3088.c | 8 +++++++- drivers/s390/s390mach.c | 4 ++-- 6 files changed, 39 insertions(+), 29 deletions(-) diff -urN linux-2.6/drivers/s390/cio/ccwgroup.c linux-2.6-s390/drivers/s390/cio/ccwgroup.c --- linux-2.6/drivers/s390/cio/ccwgroup.c Sun Sep 28 02:50:26 2003 +++ linux-2.6-s390/drivers/s390/cio/ccwgroup.c Mon Oct 6 10:59:18 2003 @@ -1,7 +1,7 @@ /* * drivers/s390/cio/ccwgroup.c * bus driver for ccwgroup - * $Revision$ + * $Revision$ * * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, * IBM Corporation @@ -67,10 +67,7 @@ for (i = 0; i < gdev->count; i++) { sprintf(str, "cdev%d", i); sysfs_remove_link(&gdev->dev.kobj, str); - /* Hack: Make sure we act on still valid subdirs. */ - if (atomic_read(&gdev->cdev[i]->dev.kobj.dentry->d_count)) - sysfs_remove_link(&gdev->cdev[i]->dev.kobj, - "group_device"); + sysfs_remove_link(&gdev->cdev[i]->dev.kobj, "group_device"); } } @@ -187,7 +184,7 @@ .dev = { .bus = &ccwgroup_bus_type, .parent = root, - .release = &ccwgroup_release, + .release = ccwgroup_release, }, }; diff -urN linux-2.6/drivers/s390/cio/chsc.c linux-2.6-s390/drivers/s390/cio/chsc.c --- linux-2.6/drivers/s390/cio/chsc.c Sun Sep 28 02:50:26 2003 +++ linux-2.6-s390/drivers/s390/cio/chsc.c Mon Oct 6 10:59:18 2003 @@ -1,7 +1,7 @@ /* * drivers/s390/cio/chsc.c * S/390 common I/O routines -- channel subsystem call - * $Revision$ + * $Revision$ * * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, * IBM Corporation @@ -843,6 +843,12 @@ static DEVICE_ATTR(status, 0644, chp_status_show, chp_status_write); + +static void +chp_release(struct device *dev) +{ +} + /* * Entries for chpids on the system bus. * This replaces /proc/chpids. @@ -863,8 +869,10 @@ /* fill in status, etc. */ chp->id = chpid; chp->state = status; - chp->dev.parent = &css_bus_device; - + chp->dev = (struct device) { + .parent = &css_bus_device, + .release = chp_release, + }; snprintf(chp->dev.bus_id, BUS_ID_SIZE, "chp0.%x", chpid); /* make it known to the system */ diff -urN linux-2.6/drivers/s390/cio/device_ops.c linux-2.6-s390/drivers/s390/cio/device_ops.c --- linux-2.6/drivers/s390/cio/device_ops.c Sun Sep 28 02:50:38 2003 +++ linux-2.6-s390/drivers/s390/cio/device_ops.c Mon Oct 6 10:59:18 2003 @@ -244,8 +244,7 @@ } static inline int -__ccw_device_retry_loop(struct ccw_device *cdev, struct ccw1 *ccw, long magic, - unsigned long flags) +__ccw_device_retry_loop(struct ccw_device *cdev, struct ccw1 *ccw, long magic) { int ret; struct subchannel *sch; @@ -255,7 +254,9 @@ ret = cio_start (sch, ccw, magic, 0); if ((ret == -EBUSY) || (ret == -EACCES)) { /* Try again later. */ + spin_unlock_irq(&sch->lock); schedule_timeout(1); + spin_lock_irq(&sch->lock); continue; } if (ret != 0) @@ -263,12 +264,12 @@ break; /* Wait for end of request. */ cdev->private->intparm = magic; - spin_unlock_irqrestore(&sch->lock, flags); + spin_unlock_irq(&sch->lock); wait_event(cdev->private->wait_q, (cdev->private->intparm == -EIO) || (cdev->private->intparm == -EAGAIN) || (cdev->private->intparm == 0)); - spin_lock_irqsave(&sch->lock, flags); + spin_lock_irq(&sch->lock); /* Check at least for channel end / device end */ if (cdev->private->intparm == -EIO) { /* Non-retryable error. */ @@ -279,7 +280,9 @@ /* Success. */ break; /* Try again later. */ + spin_unlock_irq(&sch->lock); schedule_timeout(1); + spin_lock_irq(&sch->lock); } while (1); return ret; @@ -300,7 +303,6 @@ { void (*handler)(struct ccw_device *, unsigned long, struct irb *); char dbf_txt[15]; - unsigned long flags; struct subchannel *sch; int ret; struct ccw1 *rdc_ccw; @@ -327,7 +329,7 @@ return ret; } - spin_lock_irqsave(&sch->lock, flags); + spin_lock_irq(&sch->lock); /* Save interrupt handler. */ handler = cdev->handler; /* Temporarily install own handler. */ @@ -338,11 +340,11 @@ ret = -EBUSY; else /* 0x00D9C4C3 == ebcdic "RDC" */ - ret = __ccw_device_retry_loop(cdev, rdc_ccw, 0x00D9C4C3, flags); + ret = __ccw_device_retry_loop(cdev, rdc_ccw, 0x00D9C4C3); /* Restore interrupt handler. */ cdev->handler = handler; - spin_unlock_irqrestore(&sch->lock, flags); + spin_unlock_irq(&sch->lock); clear_normalized_cda (rdc_ccw); kfree(rdc_ccw); @@ -360,7 +362,6 @@ char dbf_txt[15]; struct subchannel *sch; struct ciw *ciw; - unsigned long flags; char *rcd_buf; int ret; struct ccw1 *rcd_ccw; @@ -396,7 +397,7 @@ rcd_ccw->count = ciw->count; rcd_ccw->flags = CCW_FLAG_SLI; - spin_lock_irqsave(&sch->lock, flags); + spin_lock_irq(&sch->lock); /* Save interrupt handler. */ handler = cdev->handler; /* Temporarily install own handler. */ @@ -407,11 +408,11 @@ ret = -EBUSY; else /* 0x00D9C3C4 == ebcdic "RCD" */ - ret = __ccw_device_retry_loop(cdev, rcd_ccw, 0x00D9C3C4, flags); + ret = __ccw_device_retry_loop(cdev, rcd_ccw, 0x00D9C3C4); /* Restore interrupt handler. */ cdev->handler = handler; - spin_unlock_irqrestore(&sch->lock, flags); + spin_unlock_irq(&sch->lock); /* * on success we update the user input parms diff -urN linux-2.6/drivers/s390/cio/qdio.c linux-2.6-s390/drivers/s390/cio/qdio.c --- linux-2.6/drivers/s390/cio/qdio.c Sun Sep 28 02:50:30 2003 +++ linux-2.6-s390/drivers/s390/cio/qdio.c Mon Oct 6 10:59:18 2003 @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -55,7 +56,7 @@ #include "ioasm.h" #include "chsc.h" -#define VERSION_QDIO_C "$Revision$" +#define VERSION_QDIO_C "$Revision$" /****************** MODULE PARAMETER VARIABLES ********************/ MODULE_AUTHOR("Utz Bacher "); @@ -112,10 +113,7 @@ static inline volatile __u64 qdio_get_micros(void) { - __u64 time; - - asm volatile ("STCK %0" : "=m" (time)); - return time>>12; /* time>>12 is microseconds*/ + return (get_clock() >> 12); /* time>>12 is microseconds */ } /* diff -urN linux-2.6/drivers/s390/net/cu3088.c linux-2.6-s390/drivers/s390/net/cu3088.c --- linux-2.6/drivers/s390/net/cu3088.c Sun Sep 28 02:50:15 2003 +++ linux-2.6-s390/drivers/s390/net/cu3088.c Mon Oct 6 10:59:18 2003 @@ -1,5 +1,5 @@ /* - * $Id$ + * $Id$ * * CTC / LCS ccw_device driver * @@ -55,8 +55,14 @@ static struct ccw_driver cu3088_driver; +static void +cu3088_root_dev_release (struct device *dev) +{ +} + struct device cu3088_root_dev = { .bus_id = "cu3088", + .release = cu3088_root_dev_release, }; static ssize_t diff -urN linux-2.6/drivers/s390/s390mach.c linux-2.6-s390/drivers/s390/s390mach.c --- linux-2.6/drivers/s390/s390mach.c Sun Sep 28 02:51:15 2003 +++ linux-2.6-s390/drivers/s390/s390mach.c Mon Oct 6 10:59:18 2003 @@ -44,7 +44,7 @@ struct crw crw; int ccode; - do { + while (1) { ccode = stcrw(&crw); if (ccode != 0) break; @@ -85,7 +85,7 @@ pr_debug("unknown source\n"); break; } - } while (crw.chn); + } } /* - Remove dynamic allocation of major numbers. Just use static major 94. - Use bus_id instead of device number where possible. - Don't check open_count in dasd_generic_set_offline. diffstat: drivers/s390/block/dasd.c | 52 +----- drivers/s390/block/dasd_devmap.c | 304 +++++++++++++++++++-------------------- drivers/s390/block/dasd_genhd.c | 121 +-------------- drivers/s390/block/dasd_int.h | 8 - drivers/s390/block/dasd_proc.c | 4 5 files changed, 181 insertions(+), 308 deletions(-) diff -urN linux-2.6/drivers/s390/block/dasd.c linux-2.6-s390/drivers/s390/block/dasd.c --- linux-2.6/drivers/s390/block/dasd.c Sun Sep 28 02:50:19 2003 +++ linux-2.6-s390/drivers/s390/block/dasd.c Mon Oct 6 10:59:19 2003 @@ -7,7 +7,7 @@ * Bugreports.to..: * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 * - * $Revision$ + * $Revision$ */ #include @@ -1142,8 +1142,8 @@ req = elv_next_request(queue); if (device->ro_flag && rq_data_dir(req) == WRITE) { DBF_EVENT(DBF_ERR, - "(%04x) Rejecting write request %p", - _ccw_device_get_device_number(device->cdev), + "(%s) Rejecting write request %p", + device->cdev->dev.bus_id, req); blkdev_dequeue_request(req); dasd_end_request(req, 0); @@ -1154,8 +1154,8 @@ if (PTR_ERR(cqr) == -ENOMEM) break; /* terminate request queue loop */ DBF_EVENT(DBF_ERR, - "(%04x) CCW creation failed on request %p", - _ccw_device_get_device_number(device->cdev), + "(%s) CCW creation failed on request %p", + device->cdev->dev.bus_id, req); blkdev_dequeue_request(req); dasd_end_request(req, 0); @@ -1728,12 +1728,10 @@ dasd_generic_probe (struct ccw_device *cdev, struct dasd_discipline *discipline) { - int devno; int ret = 0; - devno = _ccw_device_get_device_number(cdev); - if (dasd_autodetect - && (ret = dasd_add_range(devno, devno, DASD_FEATURE_DEFAULT))) { + if (dasd_autodetect && + (ret = dasd_add_busid(cdev->dev.bus_id, DASD_FEATURE_DEFAULT))) { printk (KERN_WARNING "dasd_generic_probe: cannot autodetect %s\n", cdev->dev.bus_id); @@ -1830,12 +1828,6 @@ struct dasd_device *device; device = cdev->dev.driver_data; - if (atomic_read(&device->open_count) > 0) { - printk (KERN_WARNING "Can't offline dasd device with open" - " count = %i.\n", - atomic_read(&device->open_count)); - return -EBUSY; - } dasd_set_target_state(device, DASD_STATE_NEW); dasd_delete_device(device); @@ -1854,7 +1846,6 @@ struct device_driver *drv; struct device *d, *dev; struct ccw_device *cdev; - int devno; drv = get_driver(&dasd_discipline_driver->driver); down_read(&drv->bus->subsys.rwsem); @@ -1864,8 +1855,7 @@ if (!dev) continue; cdev = to_ccwdev(dev); - devno = _ccw_device_get_device_number(cdev); - if (dasd_autodetect || dasd_devno_in_range(devno) == 0) + if (dasd_autodetect || dasd_busid_known(cdev->dev.bus_id) == 0) ccw_device_set_online(cdev); put_device(dev); } @@ -1934,31 +1924,6 @@ static DEVICE_ATTR(use_diag, 0644, dasd_use_diag_show, dasd_use_diag_store); -#if 0 -/* this file shows the same information as /proc/dasd/devices using - * an inaccaptable interface */ -/* TODO: Split this up into smaller files! */ -static ssize_t -dasd_devices_show(struct device *dev, char *buf) -{ - - struct dasd_device *device; - dasd_devmap_t *devmap; - - devmap = NULL; - device = dev->driver_data; - if (device) - devmap = dasd_devmap_from_devno(device->devno); - - if (!devmap) - return sprintf(buf, "unused\n"); - - return min ((size_t) dasd_devices_print(devmap, buf), PAGE_SIZE); -} - -static DEVICE_ATTR(dasd, 0444, dasd_devices_show, 0); -#endif - static ssize_t dasd_discipline_show(struct device *dev, char *buf) { @@ -1973,7 +1938,6 @@ static DEVICE_ATTR(discipline, 0444, dasd_discipline_show, NULL); static struct attribute * dasd_attrs[] = { - //&dev_attr_dasd.attr, &dev_attr_readonly.attr, &dev_attr_discipline.attr, &dev_attr_use_diag.attr, diff -urN linux-2.6/drivers/s390/block/dasd_devmap.c linux-2.6-s390/drivers/s390/block/dasd_devmap.c --- linux-2.6/drivers/s390/block/dasd_devmap.c Sun Sep 28 02:50:20 2003 +++ linux-2.6-s390/drivers/s390/block/dasd_devmap.c Mon Oct 6 10:59:19 2003 @@ -11,7 +11,7 @@ * functions may not be called from interrupt context. In particular * dasd_get_device is a no-no from interrupt context. * - * $Revision$ + * $Revision$ */ #include @@ -37,10 +37,9 @@ * to the device index. */ struct dasd_devmap { - struct list_head devindex_list; - struct list_head devno_list; + struct list_head list; + char bus_id[BUS_ID_SIZE]; unsigned int devindex; - unsigned short devno; unsigned short features; struct dasd_device *device; }; @@ -48,12 +47,15 @@ /* * Parameter parsing functions for dasd= parameter. The syntax is: * : (0x)?[0-9a-fA-F]+ + * : [0-0a-f]\.[0-9a-f]\.(0x)?[0-9a-fA-F]+ * : ro * : \((:)*\) - * : (-)?? + * : (-)?? + * : (-)?? + * : | * : dasd_diag_mod|dasd_eckd_mod|dasd_fba_mod * - * : autodetect|probeonly|(,)* + * : autodetect|probeonly|(,)* */ int dasd_probeonly = 0; /* is true, when probeonly mode is active */ @@ -74,10 +76,20 @@ /* * Hash lists for devmap structures. */ -static struct list_head dasd_devindex_hashlists[256]; -static struct list_head dasd_devno_hashlists[256]; +static struct list_head dasd_hashlists[256]; int dasd_max_devindex; +static inline int +dasd_hash_busid(char *bus_id) +{ + int hash, i; + + hash = 0; + for (i = 0; (i < BUS_ID_SIZE) && *bus_id; i++, bus_id++) + hash += *bus_id; + return hash & 0xff; +} + #ifndef MODULE /* * The parameter parsing functions for builtin-drivers are called @@ -98,27 +110,47 @@ #endif /* #ifndef MODULE */ /* - * Read a device number from a string. The number is always in hex, - * a leading 0x is accepted. + * Read a device busid/devno from a string. */ static inline int -dasd_devno(char *str, char **endp) +dasd_busid(char **str, int *id0, int *id1, int *devno) { - int val; + int val, old_style; - /* remove leading '0x' */ - if (*str == '0') { - str++; - if (*str == 'x') - str++; + /* check for leading '0x' */ + old_style = 0; + if ((*str)[0] == '0' && (*str)[1] == 'x') { + *str += 2; + old_style = 1; } - /* We require at least one hex digit */ - if (!isxdigit(*str)) + if (!isxdigit((*str)[0])) /* We require at least one hex digit */ + return -EINVAL; + val = simple_strtoul(*str, str, 16); + if (old_style || (*str)[0] != '.') { + *id0 = *id1 = 0; + if (val < 0 || val > 0xffff) + return -EINVAL; + *devno = val; + return 0; + } + /* New style x.y.z busid */ + if (val < 0 || val > 0xff) + return -EINVAL; + *id0 = val; + (*str)++; + if (!isxdigit((*str)[0])) /* We require at least one hex digit */ return -EINVAL; - val = simple_strtoul(str, endp, 16); - if ((val > 0xFFFF) || (val < 0)) + val = simple_strtoul(*str, str, 16); + if (val < 0 || val > 0xff || (*str)++[0] != '.') return -EINVAL; - return val; + *id1 = val; + if (!isxdigit((*str)[0])) /* We require at least one hex digit */ + return -EINVAL; + val = simple_strtoul(*str, str, 16); + if (val < 0 || val > 0xffff) + return -EINVAL; + *devno = val; + return 0; } /* @@ -171,18 +203,37 @@ static inline int dasd_ranges_list(char *str) { - int from, to, features, rc; + int from, from_id0, from_id1; + int to, to_id0, to_id1; + int features, rc; + char bus_id[BUS_ID_SIZE+1], *orig_str; + orig_str = str; while (1) { - to = from = dasd_devno(str, &str); - if (*str == '-') { - str++; - to = dasd_devno(str, &str); + rc = dasd_busid(&str, &from_id0, &from_id1, &from); + if (rc == 0) { + to = from; + to_id0 = from_id0; + to_id1 = from_id1; + if (*str == '-') { + str++; + rc = dasd_busid(&str, &to_id0, &to_id1, &to); + } + } + if (rc == 0 && + (from_id0 != to_id0 || from_id1 != to_id1 || from > to)) + rc = -EINVAL; + if (rc) { + MESSAGE(KERN_ERR, "Invalid device range %s", orig_str); + return rc; } features = dasd_feature_list(str, &str); - /* Negative numbers in from/to/features indicate errors */ - if (from >= 0 && to >= 0 && features >= 0) { - rc = dasd_add_range(from, to, features); + if (features < 0) + return -EINVAL; + while (from <= to) { + sprintf(bus_id, "%01x.%01x.%04x", + from_id0, from_id1, from++); + rc = dasd_add_busid(bus_id, features); if (rc) return rc; } @@ -243,77 +294,74 @@ } /* - * Add a range of devices and creates the corresponding devreg_t - * structures. The order of the ranges added through this function - * will define the kdevs for the individual devices. + * Add a devmap for the device specified by busid. It is possible that + * the devmap already exists (dasd= parameter). The order of the devices + * added through this function will define the kdevs for the individual + * devices. */ int -dasd_add_range(int from, int to, int features) +dasd_add_busid(char *bus_id, int features) { - int devindex; - int devno; + struct dasd_devmap *devmap, *new, *tmp; + int hash; - if (from > to) { - MESSAGE(KERN_ERR, - "Invalid device range %04x-%04x", from, to); - return -EINVAL; - } + new = (struct dasd_devmap *) + kmalloc(sizeof(struct dasd_devmap), GFP_KERNEL); + if (!new) + return -ENOMEM; spin_lock(&dasd_devmap_lock); - for (devno = from; devno <= to; devno++) { - struct dasd_devmap *devmap, *tmp; - - devmap = NULL; - /* Find previous devmap for device number i */ - list_for_each_entry(tmp, &dasd_devno_hashlists[devno & 255], - devno_list) { - if (tmp->devno == devno) { - devmap = tmp; - break; - } - } - if (devmap == NULL) { - /* This devno is new. */ - devmap = (struct dasd_devmap *) - kmalloc(sizeof(struct dasd_devmap),GFP_KERNEL); - if (devmap == NULL) - return -ENOMEM; - devindex = dasd_max_devindex++; - devmap->devindex = devindex; - devmap->devno = devno; - devmap->features = features; - devmap->device = NULL; - list_add(&devmap->devindex_list, - &dasd_devindex_hashlists[devindex & 255]); - list_add(&devmap->devno_list, - &dasd_devno_hashlists[devno & 255]); + devmap = 0; + hash = dasd_hash_busid(bus_id); + list_for_each_entry(tmp, &dasd_hashlists[hash], list) + if (strncmp(tmp->bus_id, bus_id, BUS_ID_SIZE) == 0) { + devmap = tmp; + break; } + if (!devmap) { + /* This bus_id is new. */ + new->devindex = dasd_max_devindex++; + strncpy(new->bus_id, bus_id, BUS_ID_SIZE); + new->features = features; + new->device = 0; + list_add(&new->list, &dasd_hashlists[hash]); + devmap = new; + new = 0; } spin_unlock(&dasd_devmap_lock); + if (new) + kfree(new); return 0; } /* - * Check if devno has been added to the list of dasd ranges. + * Find devmap for device with given bus_id. */ -int -dasd_devno_in_range(int devno) +static struct dasd_devmap * +dasd_find_busid(char *bus_id) { - struct dasd_devmap *devmap; - int ret; - - ret = -ENOENT; + struct dasd_devmap *devmap, *tmp; + int hash; + spin_lock(&dasd_devmap_lock); - /* Find devmap for device with device number devno */ - list_for_each_entry(devmap, &dasd_devno_hashlists[devno&255], - devno_list) { - if (devmap->devno == devno) { - /* Found the device. */ - ret = 0; + devmap = 0; + hash = dasd_hash_busid(bus_id); + list_for_each_entry(tmp, &dasd_hashlists[hash], list) { + if (strncmp(tmp->bus_id, bus_id, BUS_ID_SIZE) == 0) { + devmap = tmp; break; } } spin_unlock(&dasd_devmap_lock); - return ret; + return devmap; +} + +/* + * Check if busid has been added to the list of dasd ranges. + */ +int +dasd_busid_known(char *bus_id) +{ + return dasd_find_busid(bus_id) ? 0 : -ENOENT; } /* @@ -323,18 +371,15 @@ static void dasd_forget_ranges(void) { + struct dasd_devmap *devmap, *n; int i; spin_lock(&dasd_devmap_lock); for (i = 0; i < 256; i++) { - struct list_head *l, *next; - struct dasd_devmap *devmap; - list_for_each_safe(l, next, &dasd_devno_hashlists[i]) { - devmap = list_entry(l, struct dasd_devmap, devno_list); + list_for_each_entry_safe(devmap, n, &dasd_hashlists[i], list) { if (devmap->device != NULL) BUG(); - list_del(&devmap->devindex_list); - list_del(&devmap->devno_list); + list_del(&devmap->list); kfree(devmap); } } @@ -342,64 +387,28 @@ } /* - * Find the devmap structure from a devno. Can be removed as soon - * as big minors are available. + * Find the device struct by its device index. */ -static struct dasd_devmap * -dasd_devmap_from_devno(int devno) -{ - struct dasd_devmap *devmap, *tmp; - - devmap = NULL; - spin_lock(&dasd_devmap_lock); - /* Find devmap for device with device number devno */ - list_for_each_entry(tmp, &dasd_devno_hashlists[devno&255], devno_list) { - if (tmp->devno == devno) { - /* Found the device, return devmap */ - devmap = tmp; - break; - } - } - spin_unlock(&dasd_devmap_lock); - return devmap; -} - -/* - * Find the devmap for a device by its device index. Can be removed - * as soon as big minors are available. - */ -static struct dasd_devmap * -dasd_devmap_from_devindex(int devindex) -{ - struct dasd_devmap *devmap, *tmp; - - devmap = NULL; - spin_lock(&dasd_devmap_lock); - /* Find devmap for device with device index devindex */ - list_for_each_entry(tmp, &dasd_devindex_hashlists[devindex & 255], - devindex_list) { - if (tmp->devindex == devindex) { - /* Found the device, return devno */ - devmap = tmp; - break; - } - } - spin_unlock(&dasd_devmap_lock); - return devmap; -} - struct dasd_device * dasd_device_from_devindex(int devindex) { - struct dasd_devmap *devmap; + struct dasd_devmap *devmap, *tmp; struct dasd_device *device; + int i; - devmap = dasd_devmap_from_devindex(devindex); spin_lock(&dasd_devmap_lock); - device = devmap->device; - if (device) + devmap = 0; + for (i = 0; (i < 256) && !devmap; i++) + list_for_each_entry(tmp, &dasd_hashlists[i], list) + if (tmp->devindex == devindex) { + /* Found the devmap for the device. */ + devmap = tmp; + break; + } + if (devmap && devmap->device) { + device = devmap->device; dasd_get_device(device); - else + } else device = ERR_PTR(-ENODEV); spin_unlock(&dasd_devmap_lock); return device; @@ -413,16 +422,15 @@ { struct dasd_devmap *devmap; struct dasd_device *device; - int devno; int rc; - devno = _ccw_device_get_device_number(cdev); - rc = dasd_add_range(devno, devno, DASD_FEATURE_DEFAULT); + rc = dasd_add_busid(cdev->dev.bus_id, DASD_FEATURE_DEFAULT); if (rc) return ERR_PTR(rc); - if (!(devmap = dasd_devmap_from_devno (devno))) - return ERR_PTR(-ENODEV); + devmap = dasd_find_busid(cdev->dev.bus_id); + if (IS_ERR(devmap)) + return (void *) devmap; device = dasd_alloc_device(); if (IS_ERR(device)) @@ -467,11 +475,9 @@ { struct ccw_device *cdev; struct dasd_devmap *devmap; - int devno; /* First remove device pointer from devmap. */ - devno = _ccw_device_get_device_number(device->cdev); - devmap = dasd_devmap_from_devno (devno); + devmap = dasd_find_busid(device->cdev->dev.bus_id); spin_lock(&dasd_devmap_lock); devmap->device = NULL; spin_unlock(&dasd_devmap_lock); @@ -509,10 +515,8 @@ /* Initialize devmap structures. */ dasd_max_devindex = 0; - for (i = 0; i < 256; i++) { - INIT_LIST_HEAD(&dasd_devindex_hashlists[i]); - INIT_LIST_HEAD(&dasd_devno_hashlists[i]); - } + for (i = 0; i < 256; i++) + INIT_LIST_HEAD(&dasd_hashlists[i]); return 0; } diff -urN linux-2.6/drivers/s390/block/dasd_genhd.c linux-2.6-s390/drivers/s390/block/dasd_genhd.c --- linux-2.6/drivers/s390/block/dasd_genhd.c Sun Sep 28 02:50:39 2003 +++ linux-2.6-s390/drivers/s390/block/dasd_genhd.c Mon Oct 6 10:59:19 2003 @@ -7,9 +7,9 @@ * Bugreports.to..: * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 * - * Dealing with devices registered to multiple major numbers. + * gendisk related functions for the dasd driver. * - * $Revision$ + * $Revision$ */ #include @@ -24,116 +24,26 @@ #include "dasd_int.h" -static spinlock_t dasd_major_lock = SPIN_LOCK_UNLOCKED; -static struct list_head dasd_major_info = LIST_HEAD_INIT(dasd_major_info); - -struct major_info { - struct list_head list; - int major; -}; - -/* - * Register major number for the dasd driver. Call with DASD_MAJOR to - * setup the static dasd device major 94 or with 0 to allocated a major - * dynamically. - */ -static int -dasd_register_major(int major) -{ - struct major_info *mi; - int new_major; - - /* Allocate major info structure. */ - mi = kmalloc(sizeof(struct major_info), GFP_KERNEL); - - /* Check if one of the allocations failed. */ - if (mi == NULL) { - MESSAGE(KERN_WARNING, "%s", - "Cannot get memory to allocate another " - "major number"); - return -ENOMEM; - } - - /* Register block device. */ - new_major = register_blkdev(major, "dasd"); - if (new_major < 0) { - kfree(mi); - return new_major; - } - if (major != 0) - new_major = major; - - /* Initialize major info structure. */ - mi->major = new_major; - - /* Insert the new major info structure into dasd_major_info list. */ - spin_lock(&dasd_major_lock); - list_add_tail(&mi->list, &dasd_major_info); - spin_unlock(&dasd_major_lock); - - return 0; -} - -static void -dasd_unregister_major(struct major_info * mi) -{ - int rc; - - if (mi == NULL) - return; - - /* Delete the major info from dasd_major_info. */ - spin_lock(&dasd_major_lock); - list_del(&mi->list); - spin_unlock(&dasd_major_lock); - - rc = unregister_blkdev(mi->major, "dasd"); - if (rc < 0) - MESSAGE(KERN_WARNING, - "Cannot unregister from major no %d, rc = %d", - mi->major, rc); - - /* Free memory. */ - kfree(mi); -} - /* * Allocate and register gendisk structure for device. */ int dasd_gendisk_alloc(struct dasd_device *device) { - struct major_info *mi; struct gendisk *gdp; - int index, len, rc; + int len; + + /* Make sure the minor for this device exists. */ + if (device->devindex >= DASD_PER_MAJOR) + return -EBUSY; - /* Make sure the major for this device exists. */ - mi = NULL; - while (1) { - spin_lock(&dasd_major_lock); - index = device->devindex; - list_for_each_entry(mi, &dasd_major_info, list) { - if (index < DASD_PER_MAJOR) - break; - index -= DASD_PER_MAJOR; - } - spin_unlock(&dasd_major_lock); - if (index < DASD_PER_MAJOR) - break; - rc = dasd_register_major(0); - if (rc) { - DBF_EXC(DBF_ALERT, "%s", "out of major numbers!"); - return rc; - } - } - gdp = alloc_disk(1 << DASD_PARTN_BITS); if (!gdp) return -ENOMEM; /* Initialize gendisk structure. */ - gdp->major = mi->major; - gdp->first_minor = index << DASD_PARTN_BITS; + gdp->major = DASD_MAJOR; + gdp->first_minor = device->devindex << DASD_PARTN_BITS; gdp->fops = &dasd_device_operations; gdp->driverfs_dev = &device->cdev->dev; @@ -153,8 +63,7 @@ } len += sprintf(gdp->disk_name + len, "%c", 'a'+(device->devindex%26)); - sprintf(gdp->devfs_name, "dasd/%04x", - _ccw_device_get_device_number(device->cdev)); + sprintf(gdp->devfs_name, "dasd/%s", device->cdev->dev.bus_id); if (device->ro_flag) set_disk_ro(gdp, 1); @@ -173,6 +82,7 @@ dasd_gendisk_free(struct dasd_device *device) { del_gendisk(device->gdp); + device->gdp->queue = 0; put_disk(device->gdp); device->gdp = 0; } @@ -221,7 +131,7 @@ int rc; /* Register to static dasd major 94 */ - rc = dasd_register_major(DASD_MAJOR); + rc = register_blkdev(DASD_MAJOR, "dasd"); if (rc != 0) { MESSAGE(KERN_WARNING, "Couldn't register successfully to " @@ -234,10 +144,5 @@ void dasd_gendisk_exit(void) { - struct list_head *l, *n; - - spin_lock(&dasd_major_lock); - list_for_each_safe(l, n, &dasd_major_info) - dasd_unregister_major(list_entry(l, struct major_info, list)); - spin_unlock(&dasd_major_lock); + unregister_blkdev(DASD_MAJOR, "dasd"); } diff -urN linux-2.6/drivers/s390/block/dasd_int.h linux-2.6-s390/drivers/s390/block/dasd_int.h --- linux-2.6/drivers/s390/block/dasd_int.h Sun Sep 28 02:50:38 2003 +++ linux-2.6-s390/drivers/s390/block/dasd_int.h Mon Oct 6 10:59:19 2003 @@ -6,7 +6,7 @@ * Bugreports.to..: * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 * - * $Revision$ + * $Revision$ */ #ifndef DASD_INT_H @@ -15,7 +15,7 @@ #ifdef __KERNEL__ /* we keep old device allocation scheme; IOW, minors are still in 0..255 */ -#define DASD_PER_MAJOR ( 1U<<(8-DASD_PARTN_BITS)) +#define DASD_PER_MAJOR (1U << (MINORBITS - DASD_PARTN_BITS)) #define DASD_PARTN_MASK ((1 << DASD_PARTN_BITS) - 1) /* @@ -477,8 +477,8 @@ struct dasd_device *dasd_device_from_devindex(int); int dasd_parse(void); -int dasd_add_range(int, int, int); -int dasd_devno_in_range(int); +int dasd_add_busid(char *, int); +int dasd_busid_known(char *); /* externals in dasd_gendisk.c */ int dasd_gendisk_init(void); diff -urN linux-2.6/drivers/s390/block/dasd_proc.c linux-2.6-s390/drivers/s390/block/dasd_proc.c --- linux-2.6/drivers/s390/block/dasd_proc.c Sun Sep 28 02:50:10 2003 +++ linux-2.6-s390/drivers/s390/block/dasd_proc.c Mon Oct 6 10:59:19 2003 @@ -9,7 +9,7 @@ * * /proc interface for the dasd driver. * - * $Revision$ + * $Revision$ */ #include @@ -59,7 +59,7 @@ if (IS_ERR(device)) return 0; /* Print device number. */ - seq_printf(m, "%04x", _ccw_device_get_device_number(device->cdev)); + seq_printf(m, "%s", device->cdev->dev.bus_id); /* Print discipline string. */ if (device != NULL && device->discipline != NULL) seq_printf(m, "(%s)", device->discipline->name); diffstat: drivers/s390/net/ctctty.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) diff -urN linux-2.6/drivers/s390/net/ctctty.c linux-2.6-s390/drivers/s390/net/ctctty.c --- linux-2.6/drivers/s390/net/ctctty.c Sun Sep 28 02:50:28 2003 +++ linux-2.6-s390/drivers/s390/net/ctctty.c Mon Oct 6 10:59:26 2003 @@ -1,5 +1,5 @@ /* - * $Id$ + * $Id$ * * CTC / ESCON network driver, tty interface. * @@ -758,7 +758,7 @@ printk(KERN_DEBUG "%s%d ioctl TIOCGSOFTCAR\n", CTC_TTY_NAME, info->line); #endif - error = verify_area(VERIFY_WRITE, (void *) arg, sizeof(long)); + error = put_user(C_CLOCAL(tty) ? 1 : 0, (ulong *) arg); if (error) return error; put_user(C_CLOCAL(tty) ? 1 : 0, (ulong *) arg); @@ -768,10 +768,9 @@ printk(KERN_DEBUG "%s%d ioctl TIOCSSOFTCAR\n", CTC_TTY_NAME, info->line); #endif - error = verify_area(VERIFY_READ, (void *) arg, sizeof(long)); + error = get_user(arg, (ulong *) arg); if (error) return error; - get_user(arg, (ulong *) arg); tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL) | (arg ? CLOCAL : 0)); - Add dummy release function to iucv bus. diffstat: drivers/s390/net/iucv.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff -urN linux-2.6/drivers/s390/net/iucv.c linux-2.6-s390/drivers/s390/net/iucv.c --- linux-2.6/drivers/s390/net/iucv.c Sun Sep 28 02:50:09 2003 +++ linux-2.6-s390/drivers/s390/net/iucv.c Mon Oct 6 10:59:27 2003 @@ -1,5 +1,5 @@ /* - * $Id$ + * $Id$ * * IUCV network driver * @@ -29,7 +29,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * RELEASE-TAG: IUCV lowlevel driver $Revision$ + * RELEASE-TAG: IUCV lowlevel driver $Revision$ * */ @@ -79,6 +79,11 @@ return 0; } +static void +iucv_root_release (struct device *dev) +{ +} + struct bus_type iucv_bus = { .name = "iucv", .match = iucv_bus_match, @@ -86,6 +91,7 @@ struct device iucv_root = { .bus_id = "iucv", + .release = iucv_root_release, }; /* General IUCV interrupt structure */ @@ -349,7 +355,7 @@ static void iucv_banner(void) { - char vbuf[] = "$Revision$"; + char vbuf[] = "$Revision$"; char *version = vbuf; if ((version = strchr(version, ':'))) { - Remove read, write and data device pointers from card structure. Use ccw group array to get the device pointers. diffstat: drivers/s390/net/qeth.c | 870 +++++++++++++++++++----------------------------- drivers/s390/net/qeth.h | 34 + 2 files changed, 375 insertions(+), 529 deletions(-) diff -urN linux-2.6/drivers/s390/net/qeth.c linux-2.6-s390/drivers/s390/net/qeth.c --- linux-2.6/drivers/s390/net/qeth.c Sun Sep 28 02:51:22 2003 +++ linux-2.6-s390/drivers/s390/net/qeth.c Mon Oct 6 10:59:26 2003 @@ -1,6 +1,6 @@ /* * - * linux/drivers/s390/net/qeth.c ($Revision$) + * linux/drivers/s390/net/qeth.c ($Revision$) * * Linux on zSeries OSA Express and HiperSockets support * @@ -116,6 +116,7 @@ #include #include #include +#include #include #include #include @@ -164,7 +165,7 @@ "reserved for low memory situations"); /****************** MODULE STUFF **********************************/ -#define VERSION_QETH_C "$Revision$" +#define VERSION_QETH_C "$Revision$" static const char *version = "qeth S/390 OSA-Express driver (" VERSION_QETH_C "/" VERSION_QETH_H "/" VERSION_QETH_MPC_H QETH_VERSION_IPV6 QETH_VERSION_VLAN ")"; @@ -245,21 +246,15 @@ static inline unsigned int qeth_get_millis(void) { - __u64 time; - - asm volatile ("STCK %0":"=m" (time)); - return (int) (time >> 22); /* time>>12 is microseconds, we divide it - by 1024 */ + return (int) (get_clock() >> 22); /* time>>12 is microseconds, we + divide it by 1024 */ } #ifdef QETH_PERFORMANCE_STATS static inline unsigned int qeth_get_micros(void) { - __u64 time; - - asm volatile ("STCK %0":"=m" (time)); - return (int) (time >> 12); + return (int) (get_clock() >> 12); } #endif /* QETH_PERFORMANCE_STATS */ @@ -591,10 +586,8 @@ struct qeth_card *card; card = (struct qeth_card *) dev->priv; - QETH_DBF_TEXT2(0, trace, "open"); - QETH_DBF_TEXT2(0, setup, "open"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT2(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "open", card); + QETH_DBF_CARD2(0, setup, "open", card); qeth_save_dev_flag_state(card); @@ -607,9 +600,10 @@ static int qeth_set_config(struct net_device *dev, struct ifmap *map) { - QETH_DBF_TEXT3(0, trace, "nscf"); - QETH_DBF_TEXT3(0, trace, - ((struct qeth_card *)dev->priv)->rdev->dev.bus_id); + struct qeth_card *card; + + card = (struct qeth_card *)dev->priv; + QETH_DBF_CARD3(0, trace, "nscf", card); return -EOPNOTSUPP; } @@ -697,8 +691,7 @@ static void qeth_wakeup(struct qeth_card *card) { - QETH_DBF_TEXT5(0, trace, "wkup"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "wkup", card); atomic_set(&card->data_has_arrived, 1); wake_up(&card->wait_q); @@ -731,32 +724,27 @@ if (dstat & DEV_STAT_UNIT_CHECK) { if (sense[SENSE_RESETTING_EVENT_BYTE] & SENSE_RESETTING_EVENT_FLAG) { - QETH_DBF_TEXT1(0, trace, "REVN"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "REVN", card); problem = PROBLEM_RESETTING_EVENT_INDICATOR; goto out; } if (sense[SENSE_COMMAND_REJECT_BYTE] & SENSE_COMMAND_REJECT_FLAG) { - QETH_DBF_TEXT1(0, trace, "CREJ"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "CREJ", card); problem = PROBLEM_COMMAND_REJECT; goto out; } if ((sense[2] == 0xaf) && (sense[3] == 0xfe)) { - QETH_DBF_TEXT1(0, trace, "AFFE"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "AFFE", card); problem = PROBLEM_AFFE; goto out; } if ((!sense[0]) && (!sense[1]) && (!sense[2]) && (!sense[3])) { - QETH_DBF_TEXT1(0, trace, "ZSNS"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "ZSNS", card); problem = PROBLEM_ZERO_SENSE_DATA; goto out; } - QETH_DBF_TEXT1(0, trace, "GCHK"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "GCHK", card); problem = PROBLEM_GENERAL_CHECK; goto out; } @@ -764,7 +752,7 @@ SCHN_STAT_CHN_DATA_CHK | SCHN_STAT_CHAIN_CHECK | SCHN_STAT_PROT_CHECK | SCHN_STAT_PROG_CHECK)) { QETH_DBF_TEXT1(0, trace, "GCHK"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, cdev->dev.bus_id); QETH_DBF_HEX1(0, misc, irb, __max(QETH_DBF_MISC_LEN, 64)); PRINT_WARN("check on device %s, dstat=x%x, cstat=x%x, " "rqparam=x%x\n", @@ -777,11 +765,10 @@ if (qeth_check_idx_response(buffer)) { PRINT_WARN("received an IDX TERMINATE on device %s " "with cause code 0x%02x%s\n", - card->rdev->dev.bus_id, buffer[4], + CARD_BUS_ID(card), buffer[4], (buffer[4] == 0x22) ? " -- try another portname" : ""); - QETH_DBF_TEXT1(0, trace, "RTRM"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "RTRM", card); problem = PROBLEM_RECEIVED_IDX_TERMINATE; goto out; } @@ -796,8 +783,7 @@ "pulled the cable or disabled the port." "Discarding outgoing packets.\n", card->dev_name, card->chpid); - QETH_DBF_TEXT1(0, trace, "CBOT"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "CBOT", card); qeth_set_dev_flag_norunning(card); problem = 0; goto out; @@ -809,27 +795,21 @@ } goto out; } - if (*(PDU_ENCAPSULATION(buffer)) == IPA_CMD_REGISTER_LOCAL_ADDR) { - QETH_DBF_TEXT3(0, trace, "irla"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); - } - if (*(PDU_ENCAPSULATION(buffer)) == - IPA_CMD_UNREGISTER_LOCAL_ADDR) { - QETH_DBF_TEXT3(0, trace, "irla"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); - } + if (*(PDU_ENCAPSULATION(buffer)) == IPA_CMD_REGISTER_LOCAL_ADDR) + QETH_DBF_CARD3(0, trace, "irla", card); + if (*(PDU_ENCAPSULATION(buffer)) == + IPA_CMD_UNREGISTER_LOCAL_ADDR) + QETH_DBF_CARD3(0, trace, "irla", card); PRINT_WARN("probably a problem on %s: received data is IPA, " "but not a reply: command=0x%x\n", card->dev_name, *(PDU_ENCAPSULATION(buffer) + 1)); - QETH_DBF_TEXT1(0, trace, "INRP"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "INRP", card); goto out; } /* no probs */ out: if (problem) { - QETH_DBF_TEXT3(0, trace, "gcpr"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "gcpr", card); sprintf(dbf_text, "%2x%2x%4x", dstat, cstat, problem); QETH_DBF_TEXT3(0, trace, dbf_text); sprintf(dbf_text, "%8x", rqparam); @@ -849,8 +829,7 @@ int result, result2; char dbf_text[15]; - QETH_DBF_TEXT5(0, trace, "isnr"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "isnr", card); /* set up next read ccw */ memcpy(&card->dma_stuff->read_ccw, READ_CCW, sizeof (struct ccw1)); @@ -859,21 +838,20 @@ card->dma_stuff->read_ccw.cda = QETH_GET_ADDR(card->dma_stuff->recbuf); /* - * we don't spin_lock_irqsave(get_ccwdev_lock(card->rdev),flags), as + * we don't spin_lock_irqsave(get_ccwdev_lock(CARD_RDEV(card)),flags), as * we are only called in the interrupt handler */ - result = ccw_device_start(card->rdev, &card->dma_stuff->read_ccw, + result = ccw_device_start(CARD_RDEV(card), &card->dma_stuff->read_ccw, MPC_SETUP_STATE, 0, 0); if (result) { qeth_delay_millis(QETH_WAIT_BEFORE_2ND_DOIO); result2 = - ccw_device_start(card->rdev, &card->dma_stuff->read_ccw, + ccw_device_start(CARD_RDEV(card), &card->dma_stuff->read_ccw, MPC_SETUP_STATE, 0, 0); PRINT_WARN("read handler on device %s, read: ccw_device_start " "returned %i, next try returns %i\n", - card->rdev->dev.bus_id, result, result2); - QETH_DBF_TEXT1(0, trace, "IsNR"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + CARD_BUS_ID(card), result, result2); + QETH_DBF_CARD1(0, trace, "IsNR", card); sprintf(dbf_text, "%04x%04x", (__s16) result, (__s16) result2); QETH_DBF_TEXT1(0, trace, dbf_text); } @@ -977,8 +955,7 @@ int elements, el_m_1; char dbf_text[15]; - QETH_DBF_TEXT6(0, trace, "clib"); - QETH_DBF_TEXT6(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD6(0, trace, "clib", card); sprintf(dbf_text, "bufno%3x", bufno); QETH_DBF_TEXT6(0, trace, dbf_text); @@ -1010,8 +987,7 @@ char dbf_text[15]; int no; - QETH_DBF_TEXT5(0, trace, "qibf"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "qibf", card); sprintf(dbf_text, "%4x%4x", under_int, bufno); QETH_DBF_TEXT5(0, trace, dbf_text); atomic_inc(&card->requeue_counter); @@ -1019,8 +995,7 @@ return; if (!spin_trylock(&card->requeue_input_lock)) { - QETH_DBF_TEXT5(0, trace, "qibl"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "qibl", card); return; } requeue_counter = atomic_read(&card->requeue_counter); @@ -1046,8 +1021,7 @@ "be lost! Try increasing the bufcnt " "parameter\n", card->dev_name); - QETH_DBF_TEXT2(1, trace, "QINB"); - QETH_DBF_TEXT2(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(1, trace, "QINB", card); goto out; } card->inbound_buffer_entry_no[pos] = @@ -1065,8 +1039,7 @@ /* stop points to the position after the last element */ stop = pos; - QETH_DBF_TEXT3(0, trace, "qibi"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "qibi", card); sprintf(dbf_text, "%4x", requeue_counter); QETH_DBF_TEXT3(0, trace, dbf_text); sprintf(dbf_text, "%4x%4x", start, stop); @@ -1093,15 +1066,14 @@ for (i = start; i < start + cnt1; i++) { qeth_clear_input_buffer(card, i); } - result = do_QDIO(card->ddev, + result = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT | under_int, 0, start, cnt1, NULL); if (result) { PRINT_WARN("qeth_queue_input_buffer's " "do_QDIO returnd %i (device %s)\n", - result, card->ddev->dev.bus_id); - QETH_DBF_TEXT1(0, trace, "QIDQ"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + result, CARD_DDEV_ID(card)); + QETH_DBF_CARD1(0, trace, "QIDQ", card); sprintf(dbf_text, "%4x%4x", result, requeue_counter); QETH_DBF_TEXT1(0, trace, dbf_text); sprintf(dbf_text, "%4x%4x", start, cnt1); @@ -1112,15 +1084,14 @@ for (i = 0; i < cnt2; i++) { qeth_clear_input_buffer(card, i); } - result = do_QDIO(card->ddev, + result = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT | under_int, 0, 0, cnt2, NULL); if (result) { PRINT_WARN("qeth_queue_input_buffer's " "do_QDIO returnd %i (device %s)\n", - result, card->ddev->dev.bus_id); - QETH_DBF_TEXT1(0, trace, "QIDQ"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + result, CARD_DDEV_ID(card)); + QETH_DBF_CARD1(0, trace, "QIDQ", card); sprintf(dbf_text, "%4x%4x", result, requeue_counter); QETH_DBF_TEXT1(0, trace, dbf_text); sprintf(dbf_text, "%4x%4x", 0, cnt2); @@ -1170,9 +1141,8 @@ if (element >= max_elements) { PRINT_WARN("device %s: error in interpreting buffer (data " "too long), %i elements.\n", - card->rdev->dev.bus_id, element); - QETH_DBF_TEXT0(0, trace, "IEDL"); - QETH_DBF_TEXT0(0, trace, card->rdev->dev.bus_id); + CARD_BUS_ID(card), element); + QETH_DBF_CARD0(0, trace, "IEDL", card); sprintf(dbf_text, "%4x%4x", *element_ptr, *pos_in_el_ptr); QETH_DBF_TEXT0(1, trace, dbf_text); QETH_DBF_HEX0(0, misc, buffer, QETH_DBF_MISC_LEN); @@ -1186,9 +1156,8 @@ curr_len = SBALE_LEN(element); if (curr_len > PAGE_SIZE) { PRINT_WARN("device %s: bad element length in element %i: " - "0x%x\n", card->rdev->dev.bus_id, element, curr_len); - QETH_DBF_TEXT0(0, trace, "BELN"); - QETH_DBF_TEXT0(0, trace, card->rdev->dev.bus_id); + "0x%x\n", CARD_BUS_ID(card), element, curr_len); + QETH_DBF_CARD0(0, trace, "BELN", card); sprintf(dbf_text, "%4x", curr_len); QETH_DBF_TEXT0(0, trace, dbf_text); sprintf(dbf_text, "%4x%4x", *element_ptr, *pos_in_el_ptr); @@ -1201,8 +1170,7 @@ /* header fits in current element? */ if (curr_len < pos_in_el + QETH_HEADER_SIZE) { if (!pos_in_el) { - QETH_DBF_TEXT6(0, trace, "gnmh"); - QETH_DBF_TEXT6(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD6(0, trace, "gnmh", card); return NULL; /* no more data in buffer */ } /* set hdr to next element */ @@ -1211,8 +1179,7 @@ curr_len = SBALE_LEN(element); /* does it fit in there? */ if (curr_len < QETH_HEADER_SIZE) { - QETH_DBF_TEXT6(0, trace, "gdnf"); - QETH_DBF_TEXT6(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD6(0, trace, "gdnf", card); return NULL; } } @@ -1221,8 +1188,7 @@ length = *(__u16 *) ((char *) (*hdr_ptr) + QETH_HEADER_LEN_POS); - QETH_DBF_TEXT6(0, trace, "gdHd"); - QETH_DBF_TEXT6(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD6(0, trace, "gdHd", card); QETH_DBF_HEX6(0, trace, hdr_ptr, sizeof (void *)); pos_in_el += QETH_HEADER_SIZE; @@ -1234,9 +1200,8 @@ if (!curr_len) { PRINT_WARN("device %s: inb. buffer with more headers " "than data areas (%i elements).\n", - card->rdev->dev.bus_id, element); - QETH_DBF_TEXT0(0, trace, "IEMH"); - QETH_DBF_TEXT0(0, trace, card->rdev->dev.bus_id); + CARD_BUS_ID(card), element); + QETH_DBF_CARD0(0, trace, "IEMH", card); sprintf(dbf_text, "%2x%2x%4x", element, *element_ptr, *pos_in_el_ptr); QETH_DBF_TEXT0(1, trace, dbf_text); @@ -1254,10 +1219,6 @@ if (!skb) goto nomem; skb_pull(skb, QETH_FAKE_LL_LEN); - if (!skb) { - dev_kfree_skb_irq(skb); - goto nomem; - } } else { skb = qeth_get_skb(length); if (!skb) @@ -1274,9 +1235,8 @@ PRINT_WARN("device %s: unexpected end of buffer, " "length of element %i is 0. Discarding " "packet.\n", - card->rdev->dev.bus_id, element); - QETH_DBF_TEXT0(0, trace, "IEUE"); - QETH_DBF_TEXT0(0, trace, card->rdev->dev.bus_id); + CARD_BUS_ID(card), element); + QETH_DBF_CARD0(0, trace, "IEUE", card); sprintf(dbf_text, "%2x%2x%4x", element, *element_ptr, *pos_in_el_ptr); QETH_DBF_TEXT0(0, trace, dbf_text); @@ -1321,8 +1281,7 @@ if (net_ratelimit()) { PRINT_WARN("no memory for packet from %s\n", card->dev_name); } - QETH_DBF_TEXT0(0, trace, "NOMM"); - QETH_DBF_TEXT0(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD0(0, trace, "NOMM", card); return NULL; } @@ -1426,8 +1385,7 @@ break; case QETH_CAST_ANYCAST: case QETH_CAST_NOCAST: - QETH_DBF_TEXT2(0, trace, "ribf"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "ribf", card); sprintf(dbf_text, "castan%2x", cast_type); QETH_DBF_TEXT2(1, trace, dbf_text); skb->pkt_type = PACKET_HOST; @@ -1437,8 +1395,7 @@ "of 0x%x. Using unicasting instead.\n", cast_type); skb->pkt_type = PACKET_HOST; - QETH_DBF_TEXT2(0, trace, "ribf"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "ribf", card); sprintf(dbf_text, "castun%2x", cast_type); QETH_DBF_TEXT2(1, trace, dbf_text); } @@ -1518,10 +1475,10 @@ if (buffer->element[15].flags & 0xff) { PRINT_WARN("on device %s: incoming SBALF 15 on buffer " "0x%x are 0x%x\n", - card->rdev->dev.bus_id, buffer_no, + CARD_BUS_ID(card), buffer_no, buffer->element[15].flags & 0xff); sprintf(dbf_text, "SF%s%2x%2x", - card->rdev->dev.bus_id, buffer_no, + CARD_BUS_ID(card), buffer_no, buffer->element[15].flags & 0xff); QETH_DBF_HEX1(1, trace, dbf_text, QETH_DBF_TRACE_LEN); } @@ -1536,7 +1493,7 @@ card->perf_stats.bufs_rec++; #endif /* QETH_PERFORMANCE_STATS */ - sprintf(dbf_text, "ribX%s", card->rdev->dev.bus_id); + sprintf(dbf_text, "ribX%s", CARD_BUS_ID(card)); dbf_text[3] = buffer_no; QETH_DBF_HEX6(0, trace, dbf_text, QETH_DBF_TRACE_LEN); @@ -1563,8 +1520,7 @@ card->perf_stats.inbound_cnt++; #endif /* QETH_PERFORMANCE_STATS */ - QETH_DBF_TEXT6(0, trace, "rxpk"); - QETH_DBF_TEXT6(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD6(0, trace, "rxpk", card); netif_rx(skb); dev->last_rx = jiffies; @@ -1573,8 +1529,7 @@ } else { PRINT_WARN("%s: dropped packet, no buffers " "available.\n", card->dev_name); - QETH_DBF_TEXT2(1, trace, "DROP"); - QETH_DBF_TEXT2(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(1, trace, "DROP", card); card->stats->rx_dropped++; } } @@ -1792,8 +1747,7 @@ atomic_inc(&card->outbound_used_buffers[queue]); - QETH_DBF_TEXT5(0, trace, "flsp"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "flsp", card); sprintf(dbf_text, "%4x%2x%2x", position_for_do_qdio, under_int, queue); QETH_DBF_TEXT5(0, trace, dbf_text); QETH_DBF_HEX5(0, misc, buffer, QETH_DBF_MISC_LEN); @@ -1849,14 +1803,13 @@ * this has to be at the end, otherwise a buffer could be flushed * twice (see comment in qeth_do_send_packet) */ - result = do_QDIO(card->ddev, QDIO_FLAG_SYNC_OUTPUT | under_int, queue, + result = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_OUTPUT | under_int, queue, position_for_do_qdio, 1, NULL); if (result) { PRINT_WARN("Outbound do_QDIO returned %i " - "(device %s)\n", result, card->ddev->dev.bus_id); - QETH_DBF_TEXT5(0, trace, "FLSP"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + "(device %s)\n", result, CARD_DDEV_ID(card)); + QETH_DBF_CARD5(0, trace, "FLSP", card); sprintf(dbf_text, "odoQ%4x", result); QETH_DBF_TEXT5(0, trace, dbf_text); sprintf(dbf_text, "%4x%2x%2x", position_for_do_qdio, @@ -1923,8 +1876,7 @@ switch (card->outbound_buffer_send_state[queue][bufno]) { case SEND_STATE_DONT_PACK: /* fallthrough */ case SEND_STATE_PACK: - QETH_DBF_TEXT5(0, trace, "frbf"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "frbf", card); sprintf(dbf_text, "%2x%2x%4x", queue, bufno, card->outbound_buffer_send_state[queue][bufno]); QETH_DBF_TEXT5(0, trace, dbf_text); @@ -1935,7 +1887,7 @@ qeth_determine_send_error(siga_error, qdio_error, sbalf15); if (error == ERROR_KICK_THAT_PUPPY) { sprintf(dbf_text, "KP%s%2x", - card->rdev->dev.bus_id, queue); + CARD_BUS_ID(card), queue); QETH_DBF_TEXT2(0, trace, dbf_text); QETH_DBF_TEXT2(0, qerr, dbf_text); QETH_DBF_TEXT2(1, setup, dbf_text); @@ -1946,7 +1898,7 @@ PRINT_ERR("Outbound queue x%x on device %s (%s); " "errs: siga: x%x, qdio: x%x, flags15: " "x%x. The device will be taken down.\n", - queue, card->rdev->dev.bus_id, card->dev_name, + queue, CARD_BUS_ID(card), card->dev_name, siga_error, qdio_error, sbalf15); netif_stop_queue(card->dev); qeth_set_dev_flag_norunning(card); @@ -1957,7 +1909,7 @@ retries = card->send_retries[queue][bufno]; sprintf(dbf_text, "Rt%s%2x", - card->rdev->dev.bus_id, queue); + CARD_BUS_ID(card), queue); QETH_DBF_TEXT4(0, trace, dbf_text); sprintf(dbf_text, "b%2x:%2x%2x", bufno, sbalf15, retries); @@ -1971,8 +1923,7 @@ } else if (error == ERROR_LINK_FAILURE) { /* we don't want to log failures resulting from * too many retries */ - QETH_DBF_TEXT3(1, trace, "Fail"); - QETH_DBF_TEXT3(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(1, trace, "Fail", card); QETH_DBF_HEX3(0, misc, buffer, QETH_DBF_MISC_LEN); QETH_DBF_HEX3(0, misc, buffer + QETH_DBF_MISC_LEN, QETH_DBF_MISC_LEN); @@ -2009,10 +1960,8 @@ "(line %i). q=%i, bufno=x%x, state=%i\n", card->dev_name, __LINE__, queue, bufno, card->outbound_buffer_send_state[queue][bufno]); - QETH_DBF_TEXT0(1, trace, "UPSf"); - QETH_DBF_TEXT0(1, qerr, "UPSf"); - QETH_DBF_TEXT0(1, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT0(1, qerr, card->rdev->dev.bus_id); + QETH_DBF_CARD0(1, trace, "UPSf", card); + QETH_DBF_CARD0(1, qerr, "UPSf", card); sprintf(dbf_text, "%2x%2x%4x", queue, bufno, card->outbound_buffer_send_state[queue][bufno]); QETH_DBF_TEXT0(1, trace, dbf_text); @@ -2038,8 +1987,7 @@ qeth_flush_buffer(struct qeth_card *card, int queue, int under_int) { char dbf_text[15]; - QETH_DBF_TEXT5(0, trace, "flsb"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "flsb", card); sprintf(dbf_text, "%2x%2x%2x", queue, under_int, card->outbound_buffer_send_state[queue] [card->outbound_first_free_buffer[queue]]); @@ -2127,8 +2075,7 @@ PRINT_STUPID("%s: not enough headroom in skb (missing: %i)\n", card->dev_name, QETH_HEADER_SIZE - skb_headroom(skb)); - QETH_DBF_TEXT3(0, trace, "NHRf"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "NHRf", card); sprintf(dbf_text, "%2x%2x%2x%2x", skb_headroom(skb), version, multicast, queue); QETH_DBF_TEXT3(0, trace, dbf_text); @@ -2138,8 +2085,7 @@ if (!nskb) { PRINT_WARN("%s: could not realloc headroom\n", card->dev_name); - QETH_DBF_TEXT2(0, trace, "CNRf"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "CNRf", card); dev_kfree_skb_irq(skb); return; } @@ -2162,8 +2108,7 @@ card->dev_name, QETH_HEADER_SIZE + QETH_IP_HEADER_SIZE); PRINT_ERR("head=%p, data=%p\n", skb->head, skb->data); - QETH_DBF_TEXT1(0, trace, "PMAf"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "PMAf", card); sprintf(dbf_text, "%2x%2x%2x%2x", skb_headroom(skb), version, multicast, queue); QETH_DBF_TEXT1(0, trace, dbf_text); @@ -2220,8 +2165,7 @@ PRINT_STUPID("%s: not enough headroom in skb (missing: %i)\n", card->dev_name, QETH_HEADER_SIZE - skb_headroom(skb)); - QETH_DBF_TEXT3(0, trace, "NHRp"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "NHRp", card); sprintf(dbf_text, "%2x%2x%2x%2x", skb_headroom(skb), version, multicast, queue); QETH_DBF_TEXT3(0, trace, dbf_text); @@ -2231,8 +2175,7 @@ if (!nskb) { PRINT_WARN("%s: could not realloc headroom\n", card->dev_name); - QETH_DBF_TEXT2(0, trace, "CNRp"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "CNRp", card); dev_kfree_skb_irq(skb); return; } @@ -2257,8 +2200,7 @@ "are not in the same page. Discarding packet!\n", card->dev_name, QETH_HEADER_SIZE + QETH_IP_HEADER_SIZE); - QETH_DBF_TEXT1(0, trace, "PMAp"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "PMAp", card); sprintf(dbf_text, "%2x%2x%2x%2x", skb_headroom(skb), version, multicast, queue); QETH_DBF_TEXT1(0, trace, dbf_text); @@ -2354,8 +2296,7 @@ { char dbf_text[15]; - QETH_DBF_TEXT6(0, trace, "dsp:"); - QETH_DBF_TEXT6(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD6(0, trace, "dsp:", card); sprintf(dbf_text, "%c %c%4x", (version == 4) ? '4' : ((version == 6) ? '6' : '0'), (multicast) ? 'm' : '_', queue); @@ -2384,8 +2325,7 @@ if (atomic_read(&card->outbound_used_buffers[queue]) >= HIGH_WATERMARK_PACK) { card->send_state[queue] = SEND_STATE_PACK; - QETH_DBF_TEXT3(0, trace, "stchup"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "stchup", card); #ifdef QETH_PERFORMANCE_STATS card->perf_stats.sc_dp_p++; #endif /* QETH_PERFORMANCE_STATS */ @@ -2407,8 +2347,7 @@ if (atomic_read(&card->outbound_used_buffers[queue]) >= QDIO_MAX_BUFFERS_PER_Q - 1) { - QETH_DBF_TEXT2(1, trace, "cdbs"); - QETH_DBF_TEXT2(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(1, trace, "cdbs", card); netif_stop_queue(dev); return -EBUSY; } @@ -2420,13 +2359,11 @@ */ if (atomic_compare_and_swap(QETH_LOCK_UNLOCKED, QETH_LOCK_NORMAL, &card->outbound_ringbuffer_lock[queue])) { - QETH_DBF_TEXT2(0, trace, "SPIN"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "SPIN", card); while (atomic_compare_and_swap (QETH_LOCK_UNLOCKED, QETH_LOCK_NORMAL, &card->outbound_ringbuffer_lock[queue])) ; - QETH_DBF_TEXT2(0, trace, "spin"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "spin", card); } #ifdef QETH_PERFORMANCE_STATS card->perf_stats.skbs_sent++; @@ -2445,8 +2382,7 @@ break; default: result = -EBUSY; - QETH_DBF_TEXT0(1, trace, "UPSs"); - QETH_DBF_TEXT0(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD0(1, trace, "UPSs", card); PRINT_ALL("oops... shouldn't happen (line %i:%i).\n", __LINE__, card->send_state[queue]); } @@ -2499,8 +2435,7 @@ if (!atomic_read(&card->is_startlaned)) { card->stats->tx_carrier_errors++; - QETH_DBF_TEXT2(0, trace, "XMNS"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "XMNS", card); dst_link_failure(skb); dev_kfree_skb_irq(skb); return 0; @@ -2521,8 +2456,7 @@ card = (struct qeth_card *) (dev->priv); - QETH_DBF_TEXT3(0, trace, "gtst"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "gtst", card); return card->stats; } @@ -2535,8 +2469,7 @@ card = (struct qeth_card *) (dev->priv); - QETH_DBF_TEXT2(0, trace, "mtu"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "mtu", card); sprintf(dbf_text, "%8x", new_mtu); QETH_DBF_TEXT2(0, trace, dbf_text); @@ -2555,8 +2488,7 @@ qeth_start_softsetup_thread(struct qeth_card *card) { if (!atomic_read(&card->shutdown_phase)) { - QETH_DBF_TEXT2(0, trace, "stss"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "stss", card); up(&card->softsetup_thread_sem); } } @@ -2566,8 +2498,7 @@ { char dbf_text[15]; - QETH_DBF_TEXT5(0, trace, "slpn"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "slpn", card); sprintf(dbf_text, "%08x", timeout); QETH_DBF_TEXT5(0, trace, dbf_text); @@ -2585,8 +2516,7 @@ qeth_wakeup_ioctl(struct qeth_card *card) { - QETH_DBF_TEXT5(0, trace, "wkup"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "wkup", card); atomic_set(&card->ioctl_data_has_arrived, 1); wake_up(&card->ioctl_wait_q); @@ -2597,8 +2527,7 @@ { char dbf_text[15]; - QETH_DBF_TEXT5(0, trace, "ioctlslpn"); - QETH_DBF_TEXT5(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD5(0, trace, "ioctlslpn", card); sprintf(dbf_text, "%08x", timeout); QETH_DBF_TEXT5(0, trace, dbf_text); @@ -2656,8 +2585,7 @@ /* we lock very early to synchronize access to seqnos */ if (atomic_swap(&card->write_busy, 1)) { qeth_wait_nonbusy(QETH_IDLE_WAIT_TIME); - QETH_DBF_TEXT2(0, trace, "LSCD"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "LSCD", card); goto again; } memcpy(card->dma_stuff->sendbuf, card->send_buf, QETH_BUFSIZE); @@ -2680,19 +2608,18 @@ card->dma_stuff->write_ccw.cda = QETH_GET_ADDR(card->dma_stuff->sendbuf); - QETH_DBF_TEXT2(0, trace, "scdw"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "scdw", card); sprintf(dbf_text, "%8x", len); QETH_DBF_TEXT4(0, trace, dbf_text); QETH_DBF_HEX4(0, trace, &intparam, QETH_DBF_TRACE_LEN); QETH_DBF_HEX2(0, control, buffer, QETH_DBF_CONTROL_LEN); - spin_lock_irqsave(get_ccwdev_lock(card->wdev), flags); - result = ccw_device_start(card->wdev, &card->dma_stuff->write_ccw, + spin_lock_irqsave(get_ccwdev_lock(CARD_WDEV(card)), flags); + result = ccw_device_start(CARD_WDEV(card), &card->dma_stuff->write_ccw, intparam, 0, 0); if (result) { qeth_delay_millis(QETH_WAIT_BEFORE_2ND_DOIO); - result2 = ccw_device_start(card->wdev, + result2 = ccw_device_start(CARD_WDEV(card), &card->dma_stuff->write_ccw, intparam, 0, 0); if (result2 != -ENODEV) @@ -2701,7 +2628,7 @@ result, result2); result = result2; } - spin_unlock_irqrestore(get_ccwdev_lock(card->wdev), flags); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_WDEV(card)), flags); if (result) { QETH_DBF_TEXT2(0, trace, "scd:doio"); @@ -2718,8 +2645,7 @@ return NULL; } rec_buf = card->ipa_buf; - QETH_DBF_TEXT2(0, trace, "scro"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "scro", card); } else { if (qeth_sleepon(card, (setip) ? QETH_IPA_TIMEOUT : QETH_MPC_TIMEOUT)) { @@ -2729,8 +2655,7 @@ return NULL; } rec_buf = card->ipa_buf; - QETH_DBF_TEXT2(0, trace, "scri"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "scri", card); } QETH_DBF_HEX2(0, control, rec_buf, QETH_DBF_CONTROL_LEN); @@ -2832,16 +2757,14 @@ int result; char dbf_text[15]; - QETH_DBF_TEXT4(0, trace, "stln"); - QETH_DBF_TEXT4(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD4(0, trace, "stln", card); result = qeth_send_startstoplan(card, IPA_CMD_STARTLAN, ip_vers); if (!result) atomic_set(&card->is_startlaned, 1); if (result) { - QETH_DBF_TEXT2(0, trace, "STRTLNFL"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "STRTLNFL", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT2(0, trace, dbf_text); } @@ -2858,14 +2781,12 @@ atomic_set(&card->is_startlaned, 0); - QETH_DBF_TEXT4(0, trace, "spln"); - QETH_DBF_TEXT4(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD4(0, trace, "spln", card); result = qeth_send_startstoplan(card, IPA_CMD_STOPLAN, 4); if (result) { - QETH_DBF_TEXT2(0, trace, "STPLNFLD"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "STPLNFLD", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT2(0, trace, dbf_text); } @@ -3443,8 +3364,7 @@ retries = (use_retries) ? QETH_SETIP_RETRIES : 1; if (qeth_is_ipa_covered_by_ipato_entries(ip_vers, ip, card)) { - QETH_DBF_TEXT2(0, trace, "ipto"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "ipto", card); if (ip_vers == 4) { *((__u32 *) (&dbf_text[0])) = *((__u32 *) ip); *((__u32 *) (&dbf_text[4])) = *((__u32 *) netmask); @@ -3467,15 +3387,13 @@ PRINT_SETIP_ERROR(' '); if (result) { - QETH_DBF_TEXT2(0, trace, "SETIPFLD"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "SETIPFLD", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT2(0, trace, dbf_text); } if (((result == -1) || (result == 0xe080)) && (retries--)) { - QETH_DBF_TEXT2(0, trace, "sipr"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "sipr", card); if (ip_vers == 4) { *((__u32 *) (&dbf_text[0])) = *((__u32 *) ip); *((__u32 *) (&dbf_text[4])) = *((__u32 *) netmask); @@ -3513,8 +3431,7 @@ retries = (use_retries) ? QETH_SETIP_RETRIES : 1; if (qeth_is_ipa_covered_by_ipato_entries(ip_vers, ip, card)) { - QETH_DBF_TEXT2(0, trace, "imto"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "imto", card); if (ip_vers == 4) { *((__u32 *) (&dbf_text[0])) = *((__u32 *) ip); QETH_DBF_HEX2(0, trace, dbf_text, QETH_DBF_TRACE_LEN); @@ -3530,15 +3447,13 @@ PRINT_SETIP_ERROR('m'); if (result) { - QETH_DBF_TEXT2(0, trace, "SETIMFLD"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "SETIMFLD", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT2(0, trace, dbf_text); } if ((result == -1) && (retries--)) { - QETH_DBF_TEXT2(0, trace, "simr"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "simr", card); if (ip_vers == 4) { sprintf(dbf_text, "%08x", *((__u32 *) ip)); QETH_DBF_TEXT2(0, trace, dbf_text); @@ -3726,8 +3641,7 @@ PRINT_SETIP_ERROR('s'); if (result) { - QETH_DBF_TEXT2(0, trace, "SETSVFLD"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "SETSVFLD", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT2(0, trace, dbf_text); if (priv_add_list->version == 4) { @@ -3761,8 +3675,7 @@ priv_del_list->version, priv_del_list->flag); if (result) { - QETH_DBF_TEXT2(0, trace, "DELSVFLD"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "DELSVFLD", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT2(0, trace, dbf_text); if (priv_del_list->version == 4) { @@ -3943,7 +3856,7 @@ addr6->addr.s6_addr16[6], addr6->addr.s6_addr16[7], addr6->prefix_len, - card->rdev->dev.bus_id, result); + CARD_BUS_ID(card), result); sprintf(dbf_text, "std6%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); } @@ -3987,7 +3900,7 @@ addr6->addr.s6_addr16[6], addr6->addr.s6_addr16[7], addr6->prefix_len, - card->rdev->dev.bus_id, result); + CARD_BUS_ID(card), result); sprintf(dbf_text, "sts6%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); addr6 = addr6->if_next; @@ -4002,8 +3915,7 @@ int result; char dbf_text[15]; - QETH_DBF_TEXT3(0, trace, "stip"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "stip", card); addr = card->ip_current_state.ip_ifa; while (addr) { @@ -4023,7 +3935,7 @@ "(result: 0x%x), " "trying to continue\n", addr->ifa_address, addr->ifa_mask, - card->rdev->dev.bus_id, result); + CARD_BUS_ID(card), result); sprintf(dbf_text, "stdl%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); } @@ -4051,7 +3963,7 @@ PRINT_ERR("was not able to set ip " "%08x/%08x on device %s, trying to continue\n", addr->ifa_address, addr->ifa_mask, - card->rdev->dev.bus_id); + CARD_BUS_ID(card)); sprintf(dbf_text, "stst%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); addr = addr->ifa_next; @@ -4161,7 +4073,7 @@ addr->mac[0], addr->mac[1], addr->mac[2], addr->mac[3], addr->mac[4], addr->mac[5], - card->rdev->dev.bus_id, result); + CARD_BUS_ID(card), result); sprintf(dbf_text, "smd6%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); } @@ -4203,7 +4115,7 @@ addr->mac[0], addr->mac[1], addr->mac[2], addr->mac[3], addr->mac[4], addr->mac[5], - card->rdev->dev.bus_id, result); + CARD_BUS_ID(card), result); sprintf(dbf_text, "sms6%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); qeth_remove_mc_ifa_from_list @@ -4221,8 +4133,7 @@ int result; char dbf_text[15]; - QETH_DBF_TEXT3(0, trace, "stim"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "stim", card); if (!qeth_is_supported(IPA_MULTICASTING)) return 0; @@ -4252,7 +4163,7 @@ addr->mac[0], addr->mac[1], addr->mac[2], addr->mac[3], addr->mac[4], addr->mac[5], - card->rdev->dev.bus_id, result); + CARD_BUS_ID(card), result); sprintf(dbf_text, "smdl%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); } @@ -4285,7 +4196,7 @@ addr->mac[0], addr->mac[1], addr->mac[2], addr->mac[3], addr->mac[4], addr->mac[5], - card->rdev->dev.bus_id, result); + CARD_BUS_ID(card), result); sprintf(dbf_text, "smst%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); qeth_remove_mc_ifa_from_list @@ -4334,8 +4245,7 @@ PRINT_STUPID("CALL: qeth_do_ioctl called with cmd %i (=0x%x).\n", cmd, cmd); - QETH_DBF_TEXT2(0, trace, "ioct"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "ioct", card); sprintf(dbf_text, "cmd=%4x", cmd); QETH_DBF_TEXT2(0, trace, dbf_text); QETH_DBF_HEX2(0, trace, &rq, sizeof (void *)); @@ -4562,8 +4472,7 @@ in6_vdev = in6_dev_get(card_group->vlan_devices[i]); if (!in6_vdev) { - QETH_DBF_TEXT2(0, trace, "id26"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "id26", card); continue; } @@ -4625,8 +4534,7 @@ in6_dev = in6_dev_get(card->dev); if (!in6_dev) { - QETH_DBF_TEXT2(0, trace, "id16"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "id16", card); return ERR_PTR(-ENODEV); } read_lock(&in6_dev->lock); @@ -4702,8 +4610,7 @@ int remove; struct inet6_dev *in6_dev; - QETH_DBF_TEXT3(0, trace, "tip6"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "tip6", card); /* unicast */ /* clear ip_current_state */ qeth_clear_ifa6_list(&card->ip_current_state.ip6_ifa); @@ -5003,8 +4910,7 @@ int remove; struct in_device *in4_dev; - QETH_DBF_TEXT3(0, trace, "tips"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "tips", card); /* unicast */ /* clear ip_current_state */ qeth_clear_ifa4_list(&card->ip_current_state.ip_ifa); @@ -5083,16 +4989,14 @@ "autoconfig on other lpars may lead to duplicate " "ip addresses. please use manually " "configured ones.\n", - card->rdev->dev.bus_id, result); - QETH_DBF_TEXT2(0, trace, "unid fld"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + CARD_BUS_ID(card), result); + QETH_DBF_CARD2(0, trace, "unid fld", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT2(0, trace, dbf_text); } else { card->unique_id = *((__u16 *) & cmd.data.create_destroy_addr.unique_id[6]); - QETH_DBF_TEXT2(0, setup, "uniqueid"); - QETH_DBF_TEXT2(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, setup, "uniqueid", card); sprintf(dbf_text, "%4x", card->unique_id); QETH_DBF_TEXT2(0, setup, dbf_text); } @@ -5123,8 +5027,7 @@ result = qeth_send_ipa_cmd(card, &cmd, 1, IPA_CMD_STATE); if (result) { - QETH_DBF_TEXT2(0, trace, "unibkfld"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "unibkfld", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT2(0, trace, dbf_text); } @@ -5144,8 +5047,7 @@ (card->link_type != QETH_MPC_LINK_TYPE_LANE_TR)) return; - QETH_DBF_TEXT3(0, trace, "hstr"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "hstr", card); if (qeth_is_adp_supported(IPA_SETADP_SET_BROADCAST_MODE)) { result = qeth_send_setadapterparms_mode @@ -5154,18 +5056,16 @@ if (result) { PRINT_WARN("couldn't set broadcast mode on " "device %s: x%x\n", - card->rdev->dev.bus_id, result); - QETH_DBF_TEXT1(0, trace, "STBRDCST"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + CARD_BUS_ID(card), result); + QETH_DBF_CARD1(0, trace, "STBRDCST", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT1(1, trace, dbf_text); } } else if (card->options.broadcast_mode) { PRINT_WARN("set adapter parameters not available " "to set broadcast mode, using ALLRINGS " - "on device %s:\n", card->rdev->dev.bus_id); - QETH_DBF_TEXT1(0, trace, "NOBC"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + "on device %s:\n", CARD_BUS_ID(card)); + QETH_DBF_CARD1(0, trace, "NOBC", card); } if (qeth_is_adp_supported(IPA_SETADP_SET_BROADCAST_MODE)) { @@ -5174,19 +5074,17 @@ card->options.macaddr_mode); if (result) { PRINT_WARN("couldn't set macaddr mode on " - "device %s: x%x\n", card->rdev->dev.bus_id, + "device %s: x%x\n", CARD_BUS_ID(card), result); - QETH_DBF_TEXT1(0, trace, "STMACMOD"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "STMACMOD", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT1(1, trace, dbf_text); } } else if (card->options.macaddr_mode) { PRINT_WARN("set adapter parameters not available " "to set macaddr mode, using NONCANONICAL " - "on device %s:\n", card->rdev->dev.bus_id); - QETH_DBF_TEXT1(0, trace, "NOMA"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + "on device %s:\n", CARD_BUS_ID(card)); + QETH_DBF_CARD1(0, trace, "NOMA", card); } } @@ -5200,16 +5098,14 @@ return; } - QETH_DBF_TEXT4(0, trace, "stap"); - QETH_DBF_TEXT4(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD4(0, trace, "stap", card); result = qeth_send_setadapterparms_query(card); if (result) { PRINT_WARN("couldn't set adapter parameters on device %s: " - "x%x\n", card->rdev->dev.bus_id, result); - QETH_DBF_TEXT1(0, trace, "SETADPFL"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + "x%x\n", CARD_BUS_ID(card), result); + QETH_DBF_CARD1(0, trace, "SETADPFL", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT1(1, trace, dbf_text); return; @@ -5219,10 +5115,8 @@ QETH_DBF_TEXT2(0, trace, dbf_text); if (qeth_is_adp_supported(IPA_SETADP_ALTER_MAC_ADDRESS)) { - QETH_DBF_TEXT3(0, trace, "rdmc"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT2(0, setup, "rdmc"); - QETH_DBF_TEXT2(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "rdmc", card); + QETH_DBF_CARD2(0, setup, "rdmc", card); result = qeth_send_setadapterparms_change_addr(card, IPA_SETADP_ALTER_MAC_ADDRESS, @@ -5233,9 +5127,8 @@ if (result) { PRINT_WARN("couldn't get MAC address on " "device %s: x%x\n", - card->rdev->dev.bus_id, result); - QETH_DBF_TEXT1(0, trace, "NOMACADD"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + CARD_BUS_ID(card), result); + QETH_DBF_CARD1(0, trace, "NOMACADD", card); sprintf(dbf_text, "%4x", result); QETH_DBF_TEXT1(1, trace, dbf_text); } else { @@ -5701,8 +5594,7 @@ qeth_save_dev_flag_state(card); - QETH_DBF_TEXT1(0, trace, wait_for_lock?"sscw":"sscn"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, wait_for_lock?"sscw":"sscn", card); result = __qeth_softsetup_start_assists(card); if (result) @@ -5753,19 +5645,17 @@ struct qeth_card *card = (struct qeth_card *) param; /* set a nice name ... */ - sprintf(name, "qethsoftd%s", card->rdev->dev.bus_id); + sprintf(name, "qethsoftd%s", CARD_BUS_ID(card)); daemonize(name); - QETH_DBF_TEXT2(0, trace, "ssth"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "ssth", card); atomic_set(&card->softsetup_thread_is_running, 1); for (;;) { if (atomic_read(&card->shutdown_phase)) goto out; down_interruptible(&card->softsetup_thread_sem); - QETH_DBF_TEXT2(0, trace, "ssst"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "ssst", card); if (atomic_read(&card->shutdown_phase)) goto out; while (qeth_softsetup_card(card, QETH_DONT_WAIT_FOR_LOCK) @@ -5774,15 +5664,13 @@ goto out; qeth_wait_nonbusy(QETH_IDLE_WAIT_TIME); } - QETH_DBF_TEXT2(0, trace, "sssd"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "sssd", card); netif_wake_queue(card->dev); } out: atomic_set(&card->softsetup_thread_is_running, 0); - QETH_DBF_TEXT2(0, trace, "lsst"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "lsst", card); return 0; } @@ -5792,8 +5680,7 @@ { struct qeth_card *card = (struct qeth_card *) data; - QETH_DBF_TEXT4(0, trace, "ssts"); - QETH_DBF_TEXT4(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD4(0, trace, "ssts", card); sema_init(&card->softsetup_thread_sem, 0); kernel_thread(qeth_softsetup_thread, card, SIGCHLD); } @@ -5810,8 +5697,7 @@ atomic_dec(&card->reinit_counter); return; } - QETH_DBF_TEXT2(0, trace, "stri"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "stri", card); PRINT_STUPID("starting reinit-thread\n"); kernel_thread(qeth_reinit_thread, card, SIGCHLD); } @@ -5826,8 +5712,7 @@ card = (struct qeth_card *) data; - QETH_DBF_TEXT2(0, trace, "recv"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "recv", card); if (atomic_compare_and_swap(0, 1, &card->in_recovery)) return; @@ -5840,7 +5725,7 @@ if (i != PROBLEM_TX_TIMEOUT) PRINT_WARN("recovery was scheduled on device %s (%s) with " "problem 0x%x\n", - card->rdev->dev.bus_id, card->dev_name, i); + CARD_BUS_ID(card), card->dev_name, i); switch (i) { case PROBLEM_RECEIVED_IDX_TERMINATE: if (atomic_read(&card->in_recovery)) @@ -5931,8 +5816,7 @@ QETH_DBF_TEXT1(0, trace, dbf_text); sprintf(dbf_text, "%4x%4x", queue, status); QETH_DBF_TEXT1(0, trace, dbf_text); - QETH_DBF_TEXT1(1, trace, "qscd"); - QETH_DBF_TEXT1(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(1, trace, "qscd", card); qeth_schedule_recovery(card); return; } @@ -5948,10 +5832,8 @@ 'y' : 'n', siga_error, (status & QDIO_STATUS_MORE_THAN_ONE_SIGA_ERROR) ? 'y' : 'n', sbalf15, first_element); - QETH_DBF_TEXT1(0, trace, "IQTI"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT1(0, qerr, "IQTI"); - QETH_DBF_TEXT1(0, qerr, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "IQTI", card); + QETH_DBF_CARD1(0, qerr, "IQTI", card); sprintf(dbf_text, "%4x%4x", first_element, count); QETH_DBF_TEXT1(0, trace, dbf_text); QETH_DBF_TEXT1(0, qerr, dbf_text); @@ -5989,8 +5871,7 @@ /* first_element is the last buffer that we got back from hydra */ if (!switch_state && !last_pci_hit) return;; - QETH_DBF_TEXT3(0, trace, "stchcw"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "stchcw", card); if (atomic_swap(&card->outbound_ringbuffer_lock[queue], QETH_LOCK_FLUSH) == QETH_LOCK_UNLOCKED) { /* @@ -6052,8 +5933,7 @@ QETH_DBF_TEXT1(0, trace, dbf_text); sprintf(dbf_text, "%4x%4x", queue, status); QETH_DBF_TEXT1(0, trace, dbf_text); - QETH_DBF_TEXT1(1, trace, "qscd"); - QETH_DBF_TEXT1(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(1, trace, "qscd", card); qeth_schedule_recovery(card); goto out; } @@ -6069,10 +5949,8 @@ siga_error, status & QDIO_STATUS_MORE_THAN_ONE_SIGA_ERROR ? 'y' : 'n', sbalf15, first_element); - QETH_DBF_TEXT1(0, trace, "IQTO"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT1(0, qerr, "IQTO"); - QETH_DBF_TEXT1(0, qerr, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "IQTO", card); + QETH_DBF_CARD1(0, qerr, "IQTO", card); sprintf(dbf_text, "%4x%4x", first_element, count); QETH_DBF_TEXT1(0, trace, dbf_text); QETH_DBF_TEXT1(0, qerr, dbf_text); @@ -6246,8 +6124,7 @@ recover: if (qeth_is_to_recover(card, problem)) { - QETH_DBF_TEXT2(1, trace, "rscd"); - QETH_DBF_TEXT2(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(1, trace, "rscd", card); qeth_schedule_recovery(card); goto wakeup_out; } @@ -6365,8 +6242,7 @@ recover: if (qeth_is_to_recover(card, problem)) { - QETH_DBF_TEXT2(1, trace, "wscd"); - QETH_DBF_TEXT2(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(1, trace, "wscd", card); qeth_schedule_recovery(card); goto out; } @@ -6466,8 +6342,7 @@ { int result; - QETH_DBF_TEXT3(0, trace, "rgnd"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "rgnd", card); result = register_netdev(card->dev); @@ -6477,8 +6352,7 @@ static void qeth_unregister_netdev(struct qeth_card *card) { - QETH_DBF_TEXT3(0, trace, "nrgn"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "nrgn", card); unregister_netdev(card->dev); } @@ -6489,15 +6363,13 @@ struct qeth_card *card; card = (struct qeth_card *) dev->priv; - QETH_DBF_TEXT2(0, trace, "stop"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT2(0, setup, "stop"); - QETH_DBF_TEXT2(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "stop", card); + QETH_DBF_CARD2(0, setup, "stop", card); qeth_save_dev_flag_state(card); netif_stop_queue(dev); - atomic_set(&((struct qeth_card *) dev->priv)->is_open, 0); + atomic_set(&card->is_open, 0); return 0; } @@ -6505,8 +6377,7 @@ static void qeth_softshutdown(struct qeth_card *card) { - QETH_DBF_TEXT3(0, trace, "ssht"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "ssht", card); qeth_send_stoplan(card); } @@ -6521,26 +6392,26 @@ atomic_set(&card->clear_succeeded1, 0); atomic_set(&card->clear_succeeded2, 0); - spin_lock_irqsave(get_ccwdev_lock(card->rdev), flags0); + spin_lock_irqsave(get_ccwdev_lock(CARD_RDEV(card)), flags0); if (halt) - ret0 = ccw_device_halt(card->rdev, CLEAR_STATE); + ret0 = ccw_device_halt(CARD_RDEV(card), CLEAR_STATE); else - ret0 = ccw_device_clear(card->rdev, CLEAR_STATE); - spin_unlock_irqrestore(get_ccwdev_lock(card->rdev), flags0); + ret0 = ccw_device_clear(CARD_RDEV(card), CLEAR_STATE); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_RDEV(card)), flags0); - spin_lock_irqsave(get_ccwdev_lock(card->wdev), flags1); + spin_lock_irqsave(get_ccwdev_lock(CARD_WDEV(card)), flags1); if (halt) - ret1 = ccw_device_halt(card->wdev, CLEAR_STATE); + ret1 = ccw_device_halt(CARD_WDEV(card), CLEAR_STATE); else - ret1 = ccw_device_clear(card->wdev, CLEAR_STATE); - spin_unlock_irqrestore(get_ccwdev_lock(card->wdev), flags1); + ret1 = ccw_device_clear(CARD_WDEV(card), CLEAR_STATE); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_WDEV(card)), flags1); - spin_lock_irqsave(get_ccwdev_lock(card->ddev), flags2); + spin_lock_irqsave(get_ccwdev_lock(CARD_DDEV(card)), flags2); if (halt) - ret2 = ccw_device_halt(card->ddev, CLEAR_STATE); + ret2 = ccw_device_halt(CARD_DDEV(card), CLEAR_STATE); else - ret2 = ccw_device_clear(card->ddev, CLEAR_STATE); - spin_unlock_irqrestore(get_ccwdev_lock(card->ddev), flags2); + ret2 = ccw_device_clear(CARD_DDEV(card), CLEAR_STATE); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_DDEV(card)), flags2); /* The device owns us an interrupt. */ if ((ret0 == 0) && (atomic_read(&card->clear_succeeded0) == 0)) @@ -6557,14 +6428,12 @@ static void qeth_clear_card(struct qeth_card *card, int qdio_clean, int use_halt) { - QETH_DBF_TEXT3(0, trace, qdio_clean?"clrq":"clr"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT1(0, setup, qdio_clean?"clrq":"clr"); - QETH_DBF_TEXT1(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, qdio_clean?"clrq":"clr", card); + QETH_DBF_CARD1(0, setup, qdio_clean?"clrq":"clr", card); atomic_set(&card->write_busy, 0); if (qdio_clean) - qdio_cleanup(card->ddev, + qdio_cleanup(CARD_DDEV(card), (card->type == QETH_CARD_TYPE_IQD) ? QDIO_FLAG_CLEANUP_USING_HALT : QDIO_FLAG_CLEANUP_USING_CLEAR); @@ -6584,10 +6453,8 @@ if (!card) return; - QETH_DBF_TEXT3(0, trace, "freest"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT1(0, setup, "freest"); - QETH_DBF_TEXT1(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "freest", card); + QETH_DBF_CARD1(0, setup, "freest", card); write_lock(&card->vipa_list_lock); e = card->vipa_list; @@ -6626,10 +6493,8 @@ if (!card) return; - QETH_DBF_TEXT3(0, trace, "free"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT1(0, setup, "free"); - QETH_DBF_TEXT1(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "free", card); + QETH_DBF_CARD1(0, setup, "free", card); vfree(card); /* we checked against NULL already */ } @@ -6649,8 +6514,7 @@ return; } - QETH_DBF_TEXT3(0, trace, "rmcl"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "rmcl", card); /* check first, if card is in list */ if (!firstcard) { @@ -6661,9 +6525,9 @@ return; } - spin_lock_irqsave(get_ccwdev_lock(card->rdev), flags0); - spin_lock_irqsave(get_ccwdev_lock(card->wdev), flags1); - spin_lock_irqsave(get_ccwdev_lock(card->ddev), flags2); + spin_lock_irqsave(get_ccwdev_lock(CARD_RDEV(card)), flags0); + spin_lock_irqsave(get_ccwdev_lock(CARD_WDEV(card)), flags1); + spin_lock_irqsave(get_ccwdev_lock(CARD_DDEV(card)), flags2); if (firstcard == card) firstcard = card->next; @@ -6679,9 +6543,9 @@ } } - spin_unlock_irqrestore(get_ccwdev_lock(card->ddev), flags2); - spin_unlock_irqrestore(get_ccwdev_lock(card->wdev), flags1); - spin_unlock_irqrestore(get_ccwdev_lock(card->rdev), flags0); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_DDEV(card)), flags2); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_WDEV(card)), flags1); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_RDEV(card)), flags0); write_unlock(&list_lock); @@ -6718,10 +6582,8 @@ if (!card) return; - QETH_DBF_TEXT2(0, trace, "rmcd"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - QETH_DBF_TEXT1(0, setup, "rmcd"); - QETH_DBF_TEXT1(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "rmcd", card); + QETH_DBF_CARD1(0, setup, "rmcd", card); if (method == QETH_REMOVE_CARD_PROPER) { atomic_set(&card->shutdown_phase, QETH_REMOVE_CARD_PROPER); @@ -6762,7 +6624,7 @@ /* Remove sysfs symlinks. */ sysfs_remove_link(&card->gdev->dev.kobj, card->dev_name); sysfs_remove_link(&card->dev->class_dev.kobj, - card->gdev->dev.bus_id); + CARD_BUS_ID(card)); QETH_DBF_TEXT2(0, trace, "unregdev"); qeth_unregister_netdev(card); qeth_wait_nonbusy(QETH_REMOVE_WAIT_TIME); @@ -6790,8 +6652,7 @@ struct qeth_card *card; card = (struct qeth_card *) (dev->priv); - QETH_DBF_TEXT2(0, trace, "dstr"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "dstr", card); } static void @@ -6799,8 +6660,7 @@ { struct qeth_card *card = dev->priv; - QETH_DBF_TEXT2(0, trace, "smcl"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "smcl", card); qeth_start_softsetup_thread(card); } @@ -6811,8 +6671,7 @@ struct qeth_card *card; card = (struct qeth_card *) dev->priv; - QETH_DBF_TEXT2(0, trace, "stmc"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "stmc", card); return -EOPNOTSUPP; } @@ -6823,8 +6682,7 @@ struct qeth_card *card; card = (struct qeth_card *) dev->priv; - QETH_DBF_TEXT2(0, trace, "ngst"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "ngst", card); return 0; } @@ -6883,23 +6741,23 @@ memcpy(QETH_IDX_ACT_FUNC_LEVEL(card->dma_stuff->sendbuf), &card->func_level, 2); - temp = __raw_devno_from_bus_id(card->ddev->dev.bus_id); + temp = __raw_devno_from_bus_id(CARD_DDEV_ID(card)); memcpy(QETH_IDX_ACT_QDIO_DEV_CUA(card->dma_stuff->sendbuf), &temp, 2); temp = (card->cula << 8) + card->unit_addr2; memcpy(QETH_IDX_ACT_QDIO_DEV_REALADDR(card->dma_stuff->sendbuf), &temp, 2); QETH_DBF_TEXT2(0, trace, "iarw"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_TEXT2(0, trace, CARD_RDEV_ID(card)); QETH_DBF_HEX2(0, control, card->dma_stuff->sendbuf, QETH_DBF_CONTROL_LEN); - spin_lock_irqsave(get_ccwdev_lock(card->rdev), flags); - result = ccw_device_start(card->rdev, &card->dma_stuff->write_ccw, + spin_lock_irqsave(get_ccwdev_lock(CARD_RDEV(card)), flags); + result = ccw_device_start(CARD_RDEV(card), &card->dma_stuff->write_ccw, IDX_ACTIVATE_WRITE_STATE, 0, 0); if (result) { qeth_delay_millis(QETH_WAIT_BEFORE_2ND_DOIO); - result2 = ccw_device_start(card->rdev, + result2 = ccw_device_start(CARD_RDEV(card), &card->dma_stuff->write_ccw, IDX_ACTIVATE_WRITE_STATE, 0, 0); sprintf(dbf_text, "IRW1%4x", result); @@ -6909,7 +6767,7 @@ PRINT_WARN("qeth_idx_activate_read (write): do_IO returned " "%i, next try returns %i\n", result, result2); } - spin_unlock_irqrestore(get_ccwdev_lock(card->rdev), flags); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_RDEV(card)), flags); if (atomic_read(&card->break_out)) { QETH_DBF_TEXT3(0, trace, "IARWBRKO"); @@ -6918,9 +6776,9 @@ if (qeth_sleepon(card, QETH_MPC_TIMEOUT)) { QETH_DBF_TEXT1(0, trace, "IRWT"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, CARD_RDEV_ID(card)); PRINT_ERR("IDX_ACTIVATE(wr) on read channel device %s: " - "timeout\n", card->rdev->dev.bus_id); + "timeout\n", CARD_RDEV_ID(card)); return -EIO; } @@ -6929,13 +6787,13 @@ card->dma_stuff->read_ccw.count = QETH_BUFSIZE; card->dma_stuff->read_ccw.cda = QETH_GET_ADDR(card->dma_stuff->recbuf); - spin_lock_irqsave(get_ccwdev_lock(card->rdev), flags); + spin_lock_irqsave(get_ccwdev_lock(CARD_RDEV(card)), flags); result2 = 0; - result = ccw_device_start(card->rdev, &card->dma_stuff->read_ccw, + result = ccw_device_start(CARD_RDEV(card), &card->dma_stuff->read_ccw, IDX_ACTIVATE_READ_STATE, 0, 0); if (result) { qeth_delay_millis(QETH_WAIT_BEFORE_2ND_DOIO); - result2 = ccw_device_start(card->rdev, + result2 = ccw_device_start(CARD_RDEV(card), &card->dma_stuff->read_ccw, IDX_ACTIVATE_READ_STATE, 0, 0); sprintf(dbf_text, "IRR1%4x", result); @@ -6946,7 +6804,7 @@ "returned %i, next try returns %i\n", result, result2); } - spin_unlock_irqrestore(get_ccwdev_lock(card->rdev), flags); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_RDEV(card)), flags); if (result2) { result = result2; @@ -6956,21 +6814,21 @@ if (qeth_sleepon(card, QETH_MPC_TIMEOUT)) { QETH_DBF_TEXT1(0, trace, "IRRT"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, CARD_RDEV_ID(card)); PRINT_ERR("IDX_ACTIVATE(rd) on read channel device %s: " - "timeout\n", card->rdev->dev.bus_id); + "timeout\n", CARD_RDEV_ID(card)); return -EIO; } QETH_DBF_TEXT2(0, trace, "iarr"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_TEXT2(0, trace, CARD_RDEV_ID(card)); QETH_DBF_HEX2(0, control, card->dma_stuff->recbuf, QETH_DBF_CONTROL_LEN); if (!(QETH_IS_IDX_ACT_POS_REPLY(card->dma_stuff->recbuf))) { QETH_DBF_TEXT1(0, trace, "IRNR"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, CARD_RDEV_ID(card)); PRINT_ERR("IDX_ACTIVATE on read channel device %s: negative " - "reply\n", card->rdev->dev.bus_id); + "reply\n", CARD_RDEV_ID(card)); return -EIO; } @@ -6987,12 +6845,12 @@ memcpy(&temp, QETH_IDX_ACT_FUNC_LEVEL(card->dma_stuff->recbuf), 2); if (temp != qeth_peer_func_level(card->func_level)) { QETH_DBF_TEXT1(0, trace, "IRFL"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, CARD_RDEV_ID(card)); sprintf(dbf_text, "%4x%4x", card->func_level, temp); QETH_DBF_TEXT1(0, trace, dbf_text); PRINT_WARN("IDX_ACTIVATE on read channel device %s: function " "level mismatch (sent: 0x%x, received: 0x%x)\n", - card->rdev->dev.bus_id, card->func_level, temp); + CARD_RDEV_ID(card), card->func_level, temp); result = -EIO; } @@ -7031,23 +6889,23 @@ memcpy(QETH_IDX_ACT_FUNC_LEVEL(card->dma_stuff->sendbuf), &card->func_level, 2); - temp = __raw_devno_from_bus_id(card->ddev->dev.bus_id); + temp = __raw_devno_from_bus_id(CARD_DDEV_ID(card)); memcpy(QETH_IDX_ACT_QDIO_DEV_CUA(card->dma_stuff->sendbuf), &temp, 2); temp = (card->cula << 8) + card->unit_addr2; memcpy(QETH_IDX_ACT_QDIO_DEV_REALADDR(card->dma_stuff->sendbuf), &temp, 2); QETH_DBF_TEXT2(0, trace, "iaww"); - QETH_DBF_TEXT2(0, trace, card->wdev->dev.bus_id); + QETH_DBF_TEXT2(0, trace, CARD_WDEV_ID(card)); QETH_DBF_HEX2(0, control, card->dma_stuff->sendbuf, QETH_DBF_CONTROL_LEN); - spin_lock_irqsave(get_ccwdev_lock(card->wdev), flags); - result = ccw_device_start(card->wdev, &card->dma_stuff->write_ccw, + spin_lock_irqsave(get_ccwdev_lock(CARD_WDEV(card)), flags); + result = ccw_device_start(CARD_WDEV(card), &card->dma_stuff->write_ccw, IDX_ACTIVATE_WRITE_STATE, 0, 0); if (result) { qeth_delay_millis(QETH_WAIT_BEFORE_2ND_DOIO); - result2 = ccw_device_start(card->wdev, + result2 = ccw_device_start(CARD_WDEV(card), &card->dma_stuff->write_ccw, IDX_ACTIVATE_WRITE_STATE, 0, 0); sprintf(dbf_text, "IWW1%4x", result); @@ -7058,7 +6916,7 @@ "returned %i, next try returns %i\n", result, result2); } - spin_unlock_irqrestore(get_ccwdev_lock(card->wdev), flags); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_WDEV(card)), flags); if (atomic_read(&card->break_out)) { QETH_DBF_TEXT3(0, trace, "IAWWBRKO"); @@ -7067,9 +6925,9 @@ if (qeth_sleepon(card, QETH_MPC_TIMEOUT)) { QETH_DBF_TEXT1(0, trace, "IWWT"); - QETH_DBF_TEXT1(0, trace, card->wdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, CARD_WDEV_ID(card)); PRINT_ERR("IDX_ACTIVATE(wr) on write channel device %s: " - "timeout\n", card->wdev->dev.bus_id); + "timeout\n", CARD_WDEV_ID(card)); return -EIO; } @@ -7081,13 +6939,13 @@ read channel program */ card->dma_stuff->read_ccw.cda = QETH_GET_ADDR(card->dma_stuff->recbuf); - spin_lock_irqsave(get_ccwdev_lock(card->wdev), flags); + spin_lock_irqsave(get_ccwdev_lock(CARD_WDEV(card)), flags); result2 = 0; - result = ccw_device_start(card->wdev, &card->dma_stuff->read_ccw, + result = ccw_device_start(CARD_WDEV(card), &card->dma_stuff->read_ccw, IDX_ACTIVATE_READ_STATE, 0, 0); if (result) { qeth_delay_millis(QETH_WAIT_BEFORE_2ND_DOIO); - result2 = ccw_device_start(card->wdev, + result2 = ccw_device_start(CARD_WDEV(card), &card->dma_stuff->read_ccw, IDX_ACTIVATE_READ_STATE, 0, 0); sprintf(dbf_text, "IWR1%4x", result); @@ -7098,7 +6956,7 @@ "%i, next try returns %i\n", result, result2); } - spin_unlock_irqrestore(get_ccwdev_lock(card->wdev), flags); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_WDEV(card)), flags); if (result2) { result = result2; @@ -7108,33 +6966,33 @@ if (qeth_sleepon(card, QETH_MPC_TIMEOUT)) { QETH_DBF_TEXT1(0, trace, "IWRT"); - QETH_DBF_TEXT1(0, trace, card->wdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, CARD_WDEV_ID(card)); PRINT_ERR("IDX_ACTIVATE(rd) on write channel device %s: " - "timeout\n", card->wdev->dev.bus_id); + "timeout\n", CARD_WDEV_ID(card)); return -EIO; } QETH_DBF_TEXT2(0, trace, "iawr"); - QETH_DBF_TEXT2(0, trace, card->wdev->dev.bus_id); + QETH_DBF_TEXT2(0, trace, CARD_WDEV_ID(card)); QETH_DBF_HEX2(0, control, card->dma_stuff->recbuf, QETH_DBF_CONTROL_LEN); if (!(QETH_IS_IDX_ACT_POS_REPLY(card->dma_stuff->recbuf))) { QETH_DBF_TEXT1(0, trace, "IWNR"); - QETH_DBF_TEXT1(0, trace, card->wdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, CARD_WDEV_ID(card)); PRINT_ERR("IDX_ACTIVATE on write channel device %s: negative " - "reply\n", card->wdev->dev.bus_id); + "reply\n", CARD_WDEV_ID(card)); return -EIO; } memcpy(&temp, QETH_IDX_ACT_FUNC_LEVEL(card->dma_stuff->recbuf), 2); if ((temp & ~0x0100) != qeth_peer_func_level(card->func_level)) { QETH_DBF_TEXT1(0, trace, "IWFM"); - QETH_DBF_TEXT1(0, trace, card->wdev->dev.bus_id); + QETH_DBF_TEXT1(0, trace, CARD_WDEV_ID(card)); sprintf(dbf_text, "%4x%4x", card->func_level, temp); QETH_DBF_TEXT1(0, trace, dbf_text); PRINT_WARN("IDX_ACTIVATE on write channel device %s: function " "level mismatch (sent: 0x%x, received: 0x%x)\n", - card->wdev->dev.bus_id, card->func_level, temp); + CARD_WDEV_ID(card), card->func_level, temp); result = -EIO; } @@ -7249,8 +7107,7 @@ memcpy(&framesize, QETH_ULP_ENABLE_RESP_MAX_MTU(buffer), 2); mtu = qeth_get_mtu_outof_framesize(framesize); - QETH_DBF_TEXT2(0, trace, "ule"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "ule", card); sprintf(dbf_text, "mtu=%4x", mtu); QETH_DBF_TEXT2(0, trace, dbf_text); @@ -7300,7 +7157,7 @@ memcpy(QETH_ULP_SETUP_FILTER_TOKEN(card->send_buf), &card->token.ulp_filter_r, QETH_MPC_TOKEN_LENGTH); - temp = __raw_devno_from_bus_id(card->ddev->dev.bus_id); + temp = __raw_devno_from_bus_id(CARD_DDEV_ID(card)); memcpy(QETH_ULP_SETUP_CUA(card->send_buf), &temp, 2); temp = (card->cula << 8) + card->unit_addr2; memcpy(QETH_ULP_SETUP_REAL_DEVADDR(card->send_buf), &temp, 2); @@ -7375,7 +7232,7 @@ ptr++; } - init_data.cdev = card->ddev; + init_data.cdev = CARD_DDEV(card); init_data.q_format = qeth_get_q_format(card->type); init_data.qib_param_field_format = 0; init_data.qib_param_field = adapter_area; @@ -7413,7 +7270,7 @@ int result; char dbf_text[15]; - result = qdio_activate(card->ddev, 0); + result = qdio_activate(CARD_DDEV(card), 0); sprintf(dbf_text, "qda=%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); @@ -7680,8 +7537,7 @@ struct qeth_card *card; card = (struct qeth_card *) dev->priv; - QETH_DBF_TEXT2(1, trace, "XMTO"); - QETH_DBF_TEXT2(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(1, trace, "XMTO", card); card->stats->tx_errors++; atomic_set(&card->problem, PROBLEM_TX_TIMEOUT); qeth_schedule_recovery(card); @@ -7737,8 +7593,7 @@ card = (struct qeth_card *) dev->priv; - QETH_DBF_TEXT3(0, trace, "inid"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "inid", card); dev->tx_timeout = &qeth_tx_timeout; dev->watchdog_timeo = QETH_TX_TIMEOUT; @@ -7798,15 +7653,14 @@ char dbf_text[15]; int length; - QETH_DBF_TEXT3(0, trace, "gtua"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "gtua", card); - result = read_conf_data(card->ddev, (void **) &prcd, &length); + result = read_conf_data(CARD_DDEV(card), (void **) &prcd, &length); if (result) { sprintf(dbf_text, "rcd%4x", result); QETH_DBF_TEXT3(0, trace, dbf_text); PRINT_ERR("read_conf_data for device %s returned %i\n", - card->ddev->dev.bus_id, result); + CARD_DDEV_ID(card), result); return result; } @@ -7866,9 +7720,9 @@ } \ } while (0) - DO_SEND_NOP(card->rdev); - DO_SEND_NOP(card->wdev); - DO_SEND_NOP(card->ddev); + DO_SEND_NOP(CARD_RDEV(card)); + DO_SEND_NOP(CARD_WDEV(card)); + DO_SEND_NOP(CARD_DDEV(card)); exit: return result; @@ -7884,8 +7738,7 @@ return; } - QETH_DBF_TEXT3(0, trace, "clcs"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "clcs", card); atomic_set(&card->is_startlaned, 0); @@ -7955,7 +7808,7 @@ if (i < card->options.inbound_buffer_count) qeth_queue_input_buffer(card,i,0); } - qdio_synchronize(card->ddev, QDIO_FLAG_SYNC_INPUT, 0); + qdio_synchronize(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0); } /* initializes all the structures for a card */ @@ -7974,8 +7827,7 @@ atomic_set(&card->shutdown_phase, 0); if (atomic_read(&card->is_hardsetup)) { - QETH_DBF_TEXT2(1, trace, "hscd"); - QETH_DBF_TEXT2(1, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(1, trace, "hscd", card); PRINT_ALL("card is already hardsetup.\n"); return 0; } @@ -7990,8 +7842,7 @@ if (in_recovery) { PRINT_STUPID("qeth: recovery: quiescing %s...\n", card->dev_name); - QETH_DBF_TEXT2(0, trace, "Rqsc"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "Rqsc", card); qeth_wait_nonbusy(QETH_QUIESCE_WAIT_BEFORE_CLEAR); } clear_laps = QETH_HARDSETUP_CLEAR_LAPS; @@ -8011,8 +7862,7 @@ if (in_recovery) { PRINT_STUPID("qeth: recovery: still quiescing %s...\n", card->dev_name); - QETH_DBF_TEXT2(0, trace, "RQsc"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "RQsc", card); qeth_wait_nonbusy(QETH_QUIESCE_WAIT_AFTER_CLEAR); } else { atomic_set(&card->shutdown_phase, 0); @@ -8100,9 +7950,9 @@ QETH_DBF_TEXT2(0, trace, "hsissurd"); /* from here, there will always be an outstanding read */ - spin_lock_irqsave(get_ccwdev_lock(card->rdev), flags); + spin_lock_irqsave(get_ccwdev_lock(CARD_RDEV(card)), flags); qeth_issue_next_read(card); - spin_unlock_irqrestore(get_ccwdev_lock(card->rdev), flags); + spin_unlock_irqrestore(get_ccwdev_lock(CARD_RDEV(card)), flags); PRINT_TOKENS; QETH_DBF_TEXT2(0, trace, "hscmenab"); @@ -8141,12 +7991,11 @@ CHECK_ERRORS; } while ((laps--) && (breakout == QETH_BREAKOUT_AGAIN)); if (breakout == QETH_BREAKOUT_AGAIN) { - QETH_DBF_TEXT2(0, trace, "hsnr"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "hsnr", card); PRINT_ERR("qeth: recovery not successful on device " "%s/%s/%s; giving up.\n", - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, card->ddev->dev.bus_id); + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), CARD_DDEV_ID(card)); result = -EIO; goto exit; } @@ -8212,9 +8061,9 @@ QETH_DBF_TEXT1(0, trace, "RECOVSUC"); PRINT_INFO("qeth: recovered device %s/%s/%s (%s) " "successfully.\n", - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, - card->ddev->dev.bus_id, card->dev_name); + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), + CARD_DDEV_ID(card), card->dev_name); } else { QETH_DBF_TEXT2(0, trace, "hrdsetok"); @@ -8254,9 +8103,9 @@ dbf_text[8] = 0; printk("qeth: Device %s/%s/%s is a%s card%s%s%s\n" "with link type %s (portname: %s)\n", - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, - card->ddev->dev.bus_id, + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), + CARD_DDEV_ID(card), qeth_get_cardname(card->type, card->is_guest_lan), (card->level[0]) ? " (level: " : "", @@ -8270,9 +8119,9 @@ printk("qeth: Device %s/%s/%s is a%s " "card%s%s%s\nwith link type %s " "(no portname needed by interface).\n", - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, - card->ddev->dev.bus_id, + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), + CARD_DDEV_ID(card), qeth_get_cardname(card->type, card->is_guest_lan), (card->level[0]) ? " (level: " : "", @@ -8283,9 +8132,9 @@ else printk("qeth: Device %s/%s/%s is a%s " "card%s%s%s\nwith link type %s.\n", - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, - card->ddev->dev.bus_id, + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), + CARD_DDEV_ID(card), qeth_get_cardname(card->type, card->is_guest_lan), (card->level[0]) ? " (level: " : "", @@ -8311,11 +8160,10 @@ int result; char name[15]; - QETH_DBF_TEXT1(0, trace, "RINI"); - QETH_DBF_TEXT1(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, trace, "RINI", card); /* set a nice name ... */ - sprintf(name, "qethrinid%s", card->rdev->dev.bus_id); + sprintf(name, "qethrinid%s", CARD_BUS_ID(card)); daemonize(name); if (atomic_read(&card->shutdown_phase)) @@ -8391,9 +8239,9 @@ "(%s/%s/%s), GIVING UP, " "OUTGOING PACKETS WILL BE DISCARDED!\n", card->dev_name, - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, - card->ddev->dev.bus_id); + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), + CARD_DDEV_ID(card)); /* early leave hard_start_xmit! */ atomic_set(&card->is_startlaned, 0); qeth_wakeup_procfile(); @@ -8562,8 +8410,7 @@ { int i, j; - QETH_DBF_TEXT3(0, trace, "irb1"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "irb1", card); for (i = 0; i < card->no_queues; i++) { card->outbound_ringbuffer[i] = @@ -8590,8 +8437,7 @@ { int i, j; - QETH_DBF_TEXT3(0, trace, "irb2"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "irb2", card); for (i = 0; i < card->options.inbound_buffer_count; i++) { for (j = 0; j < BUFFER_MAX_ELEMENTS; j++) { @@ -8630,8 +8476,7 @@ static void qeth_insert_card_into_list(struct qeth_card *card) { - QETH_DBF_TEXT3(0, trace, "icil"); - QETH_DBF_TEXT3(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD3(0, trace, "icil", card); write_lock(&list_lock); card->next = firstcard; @@ -8646,8 +8491,8 @@ char dbf_text[15]; while (known_devices[i][4]) { - if ((card->rdev->id.dev_type == known_devices[i][2]) && - (card->rdev->id.dev_model == known_devices[i][3])) { + if ((CARD_RDEV(card)->id.dev_type == known_devices[i][2]) && + (CARD_RDEV(card)->id.dev_model == known_devices[i][3])) { card->type = known_devices[i][4]; if (card->options.ena_ipat == ENABLE_TAKEOVER) card->func_level = known_devices[i][6]; @@ -8655,7 +8500,7 @@ card->func_level = known_devices[i][7]; card->no_queues = known_devices[i][8]; card->is_multicast_different = known_devices[i][9]; - QETH_DBF_TEXT2(0, setup, card->rdev->dev.bus_id); + QETH_DBF_TEXT2(0, setup, CARD_BUS_ID(card)); sprintf(dbf_text, "ctyp%4x", card->type); QETH_DBF_TEXT2(0, setup, dbf_text); return 0; @@ -8663,10 +8508,10 @@ i++; } card->type = QETH_CARD_TYPE_UNKNOWN; - QETH_DBF_TEXT2(0, setup, card->rdev->dev.bus_id); + QETH_DBF_TEXT2(0, setup, CARD_BUS_ID(card)); sprintf(dbf_text, "ctypUNKN"); QETH_DBF_TEXT2(0, setup, dbf_text); - PRINT_ERR("unknown card type on device %s\n", card->rdev->dev.bus_id); + PRINT_ERR("unknown card type on device %s\n", CARD_BUS_ID(card)); return -ENOENT; } @@ -8815,10 +8660,8 @@ { struct qeth_card *card; struct net_device *dev = (struct net_device *) ptr; - char dbf_text[15]; - sprintf(dbf_text, "devevent"); - QETH_DBF_TEXT3(0, trace, dbf_text); + QETH_DBF_TEXT3(0, trace, "devevent"); QETH_DBF_HEX3(0, trace, &event, sizeof (unsigned long)); QETH_DBF_HEX3(0, trace, &dev, sizeof (void *)); @@ -8843,8 +8686,7 @@ struct net_device *dev = ifa->ifa_dev->dev; char dbf_text[15]; - sprintf(dbf_text, "ipevent"); - QETH_DBF_TEXT3(0, trace, dbf_text); + QETH_DBF_TEXT3(0, trace, "ipevent"); QETH_DBF_HEX3(0, trace, &event, sizeof (unsigned long)); QETH_DBF_HEX3(0, trace, &dev, sizeof (void *)); sprintf(dbf_text, "%08x", ifa->ifa_address); @@ -8869,10 +8711,8 @@ struct qeth_card *card; struct inet6_ifaddr *ifa = (struct inet6_ifaddr *) ptr; struct net_device *dev = ifa->idev->dev; - char dbf_text[15]; - sprintf(dbf_text, "ip6event"); - QETH_DBF_TEXT3(0, trace, dbf_text); + QETH_DBF_TEXT3(0, trace, "ip6event"); QETH_DBF_HEX3(0, trace, &event, sizeof (unsigned long)); QETH_DBF_HEX3(0, trace, &dev, sizeof (void *)); QETH_DBF_HEX3(0, trace, ifa->addr.s6_addr, QETH_DBF_TRACE_LEN); @@ -8900,14 +8740,14 @@ card = firstcard; clear_another_one: if (card->type == QETH_CARD_TYPE_IQD) { - ccw_device_halt(card->ddev, 0); - ccw_device_clear(card->rdev, 0); - ccw_device_clear(card->wdev, 0); - ccw_device_clear(card->ddev, 0); + ccw_device_halt(CARD_DDEV(card), 0); + ccw_device_clear(CARD_RDEV(card), 0); + ccw_device_clear(CARD_WDEV(card), 0); + ccw_device_clear(CARD_DDEV(card), 0); } else { - ccw_device_clear(card->ddev, 0); - ccw_device_clear(card->rdev, 0); - ccw_device_clear(card->wdev, 0); + ccw_device_clear(CARD_DDEV(card), 0); + ccw_device_clear(CARD_RDEV(card), 0); + ccw_device_clear(CARD_WDEV(card), 0); } if (card->next) { card = card->next; @@ -9121,9 +8961,9 @@ length += sprintf(buffer + length, "%s/%s/%s x%02X %10s %14s %2i" " +++ CABLE PULLED +++\n", - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, - card->ddev->dev.bus_id, + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), + CARD_DDEV_ID(card), card->chpid, card->dev_name, qeth_get_cardname_short @@ -9134,9 +8974,9 @@ length += sprintf(buffer + length, "%s/%s/%s x%02X %10s %14s %2i" " %2s %10s %3s %3s %3i\n", - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, - card->ddev->dev.bus_id, + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), + CARD_DDEV_ID(card), card->chpid, card->dev_name, qeth_get_cardname_short (card->type, card->link_type, @@ -9175,9 +9015,9 @@ while (card) { _OUTP_IT("For card with devnos %s/%s/%s (%s):\n", - card->rdev->dev.bus_id, - card->wdev->dev.bus_id, - card->ddev->dev.bus_id, card->dev_name); + CARD_RDEV_ID(card), + CARD_WDEV_ID(card), + CARD_DDEV_ID(card), card->dev_name); _OUTP_IT(" Skb's/buffers received : %i/%i\n", card->perf_stats.skbs_rec, card->perf_stats.bufs_rec); _OUTP_IT(" Skb's/buffers sent : %i/%i\n", @@ -9686,6 +9526,7 @@ }; static struct file_operations qeth_procfile_fops = { + .owner = THIS_MODULE, .ioctl = qeth_procfile_ioctl, .read = qeth_procfile_read, .open = qeth_procfile_open, @@ -9695,6 +9536,7 @@ static struct proc_dir_entry *qeth_proc_file; static struct file_operations qeth_ipato_procfile_fops = { + .owner = THIS_MODULE, .read = qeth_procfile_read, /* same as above! */ .write = qeth_ipato_procfile_write, .open = qeth_ipato_procfile_open, @@ -9937,8 +9779,14 @@ .remove = ccwgroup_remove_ccwdev, }; +static void +qeth_root_dev_release (struct device *dev) +{ +} + static struct device qeth_root_dev = { .bus_id = "qeth", + .release = qeth_root_dev_release, }; static struct ccwgroup_driver qeth_ccwgroup_driver; @@ -10099,37 +9947,27 @@ tmp = strsep((char **) &buf, "\n"); cnt = strlen(tmp); if (!strncmp(tmp, "primary_router", cnt)) { - QETH_DBF_TEXT2(0, trace, "pri4"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "pri4", card); card->options.routing_type4 = PRIMARY_ROUTER | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "secondary_router", cnt)) { - QETH_DBF_TEXT2(0, trace, "sec4"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "sec4", card); card->options.routing_type4 = SECONDARY_ROUTER | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "multicast_router", cnt)) { - QETH_DBF_TEXT2(0, trace, "mcr4"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - + QETH_DBF_CARD2(0, trace, "mcr4", card); card->options.routing_type4 = MULTICAST_ROUTER | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "primary_connector", cnt)) { - QETH_DBF_TEXT2(0, trace, "prc4"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - + QETH_DBF_CARD2(0, trace, "prc4", card); card->options.routing_type4 = PRIMARY_CONNECTOR | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "secondary_connector", cnt)) { - QETH_DBF_TEXT2(0, trace, "scc4"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - + QETH_DBF_CARD2(0, trace, "scc4", card); card->options.routing_type4 = SECONDARY_CONNECTOR | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "no_router", cnt)) { - QETH_DBF_TEXT2(0, trace, "nor4"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - + QETH_DBF_CARD2(0, trace, "nor4", card); card->options.routing_type4 = NO_ROUTER | RESET_ROUTING_FLAG; } else { PRINT_WARN("unknown command input in route4 attribute\n"); @@ -10192,37 +10030,28 @@ tmp = strsep((char **) &buf, "\n"); cnt = strlen(tmp); if (!strncmp(tmp, "primary_router", cnt)) { - QETH_DBF_TEXT2(0, trace, "pri6"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "pri6", card); card->options.routing_type6 = PRIMARY_ROUTER | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "secondary_router", cnt)) { QETH_DBF_TEXT2(0, trace, "sec6"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "sec6", card); card->options.routing_type6 = SECONDARY_ROUTER | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "multicast_router", cnt)) { - QETH_DBF_TEXT2(0, trace, "mcr6"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - + QETH_DBF_CARD2(0, trace, "mcr6", card); card->options.routing_type6 = MULTICAST_ROUTER | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "primary_connector", cnt)) { - QETH_DBF_TEXT2(0, trace, "prc6"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - + QETH_DBF_CARD2(0, trace, "prc6", card); card->options.routing_type6 = PRIMARY_CONNECTOR | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "secondary_connector", cnt)) { - QETH_DBF_TEXT2(0, trace, "scc6"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - + QETH_DBF_CARD2(0, trace, "scc6", card); card->options.routing_type6 = SECONDARY_CONNECTOR | RESET_ROUTING_FLAG; } else if (!strncmp(tmp, "no_router", cnt)) { - QETH_DBF_TEXT2(0, trace, "nor6"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); - + QETH_DBF_CARD2(0, trace, "nor6", card); card->options.routing_type6 = NO_ROUTER | RESET_ROUTING_FLAG; } else { PRINT_WARN("unknown command input in route6 attribute\n"); @@ -10663,8 +10492,7 @@ i = simple_strtoul(buf, &tmp, 16); if (i == 1) { - QETH_DBF_TEXT2(0, trace, "UTRC"); - QETH_DBF_TEXT2(0, trace, card->rdev->dev.bus_id); + QETH_DBF_CARD2(0, trace, "UTRC", card); atomic_set(&card->problem, PROBLEM_USER_TRIGGERED_RECOVERY); qeth_schedule_recovery(card); return count; @@ -10746,15 +10574,12 @@ gdev->dev.driver_data = card; card->gdev = gdev; - card->rdev = gdev->cdev[0]; gdev->cdev[0]->handler = qeth_interrupt_handler_read; gdev->cdev[0]->dev.driver_data = card; - card->wdev = gdev->cdev[1]; gdev->cdev[1]->handler = qeth_interrupt_handler_write; gdev->cdev[1]->dev.driver_data = card; - card->ddev = gdev->cdev[2]; gdev->cdev[2]->handler = qeth_interrupt_handler_qdio; gdev->cdev[2]->dev.driver_data = card; @@ -10779,16 +10604,11 @@ { int result; - PRINT_STUPID("%s: got devices %s, %s, %s\n", - __func__, - rdev->dev.bus_id, wdev->dev.bus_id, ddev->dev.bus_id); - - ccw_device_set_online(card->rdev); - ccw_device_set_online(card->wdev); - ccw_device_set_online(card->ddev); + ccw_device_set_online(CARD_RDEV(card)); + ccw_device_set_online(CARD_WDEV(card)); + ccw_device_set_online(CARD_DDEV(card)); - QETH_DBF_TEXT1(0, setup, "activ"); - QETH_DBF_TEXT1(0, setup, card->rdev->dev.bus_id); + QETH_DBF_CARD1(0, setup, "activ", card); QETH_DBF_HEX1(0, setup, &card, sizeof (void *)); QETH_DBF_HEX1(0, setup, &card->dev, sizeof (void *)); QETH_DBF_HEX1(0, setup, &card->stats, sizeof (void *)); @@ -10833,7 +10653,7 @@ goto out_remove; } if (sysfs_create_link(&card->dev->class_dev.kobj, &card->gdev->dev.kobj, - card->gdev->dev.bus_id)) { + CARD_BUS_ID(card))) { sysfs_remove_link(&card->gdev->dev.kobj, card->dev_name); qeth_unregister_netdev(card); goto out_remove; @@ -10847,9 +10667,9 @@ out: QETH_DBF_TEXT4(0, trace, "freecard"); - ccw_device_set_offline(card->ddev); - ccw_device_set_offline(card->wdev); - ccw_device_set_offline(card->rdev); + ccw_device_set_offline(CARD_DDEV(card)); + ccw_device_set_offline(CARD_WDEV(card)); + ccw_device_set_offline(CARD_RDEV(card)); return -ENODEV; } @@ -10894,9 +10714,9 @@ QETH_DBF_TEXT4(0, trace, "freecard"); - ccw_device_set_offline(card->ddev); - ccw_device_set_offline(card->wdev); - ccw_device_set_offline(card->rdev); + ccw_device_set_offline(CARD_DDEV(card)); + ccw_device_set_offline(CARD_WDEV(card)); + ccw_device_set_offline(CARD_RDEV(card)); qeth_free_card_stuff(card); diff -urN linux-2.6/drivers/s390/net/qeth.h linux-2.6-s390/drivers/s390/net/qeth.h --- linux-2.6/drivers/s390/net/qeth.h Sun Sep 28 02:50:05 2003 +++ linux-2.6-s390/drivers/s390/net/qeth.h Mon Oct 6 10:59:26 2003 @@ -14,7 +14,7 @@ #define QETH_NAME " qeth" -#define VERSION_QETH_H "$Revision$" +#define VERSION_QETH_H "$Revision$" /******************** CONFIG STUFF ***********************/ //#define QETH_DBF_LIKE_HELL @@ -106,6 +106,12 @@ debug_text_event(qeth_dbf_##name,level,text); \ } while (0) +#define QETH_DBF_CARD(ex,name,level,text,card) \ + do { \ + QETH_DBF_TEXT(ex,name,level,text); \ + QETH_DBF_TEXT(ex,name,level,card->gdev->dev.bus_id); \ + } while (0) + #define QETH_DBF_HEX0(ex,name,addr,len) QETH_DBF_HEX(ex,name,0,addr,len) #define QETH_DBF_HEX1(ex,name,addr,len) QETH_DBF_HEX(ex,name,1,addr,len) #define QETH_DBF_HEX2(ex,name,addr,len) QETH_DBF_HEX(ex,name,2,addr,len) @@ -136,6 +142,21 @@ #define QETH_DBF_TEXT6(ex,name,text) do {} while (0) #endif /* QETH_DBF_LIKE_HELL */ +#define QETH_DBF_CARD0(ex,name,text,card) QETH_DBF_CARD(ex,name,0,text,card) +#define QETH_DBF_CARD1(ex,name,text,card) QETH_DBF_CARD(ex,name,1,text,card) +#define QETH_DBF_CARD2(ex,name,text,card) QETH_DBF_CARD(ex,name,2,text,card) +#ifdef QETH_DBF_LIKE_HELL +#define QETH_DBF_CARD3(ex,name,text,card) QETH_DBF_CARD(ex,name,3,text,card) +#define QETH_DBF_CARD4(ex,name,text,card) QETH_DBF_CARD(ex,name,4,text,card) +#define QETH_DBF_CARD5(ex,name,text,card) QETH_DBF_CARD(ex,name,5,text,card) +#define QETH_DBF_CARD6(ex,name,text,card) QETH_DBF_CARD(ex,name,6,text,card) +#else /* QETH_DBF_LIKE_HELL */ +#define QETH_DBF_CARD3(ex,name,text,card) do {} while (0) +#define QETH_DBF_CARD4(ex,name,text,card) do {} while (0) +#define QETH_DBF_CARD5(ex,name,text,card) do {} while (0) +#define QETH_DBF_CARD6(ex,name,text,card) do {} while (0) +#endif /* QETH_DBF_LIKE_HELL */ + #define QETH_DBF_SETUP_NAME "qeth_setup" #define QETH_DBF_SETUP_LEN 8 #define QETH_DBF_SETUP_INDEX 3 @@ -662,6 +683,14 @@ #define PROBLEM_MACHINE_CHECK 11 #define PROBLEM_TX_TIMEOUT 12 +#define CARD_RDEV(card) card->gdev->cdev[0] +#define CARD_WDEV(card) card->gdev->cdev[1] +#define CARD_DDEV(card) card->gdev->cdev[2] +#define CARD_BUS_ID(card) card->gdev->dev.bus_id +#define CARD_RDEV_ID(card) card->gdev->cdev[0]->dev.bus_id +#define CARD_WDEV_ID(card) card->gdev->cdev[1]->dev.bus_id +#define CARD_DDEV_ID(card) card->gdev->cdev[2]->dev.bus_id + #define SENSE_COMMAND_REJECT_BYTE 0 #define SENSE_COMMAND_REJECT_FLAG 0x80 #define SENSE_RESETTING_EVENT_BYTE 1 @@ -926,9 +955,6 @@ /* device and I/O data */ struct ccwgroup_device *gdev; - struct ccw_device *rdev; - struct ccw_device *wdev; - struct ccw_device *ddev; unsigned short unit_addr2; unsigned short cula; unsigned short chpid;