aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2008-05-28 16:07:24 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2008-05-28 16:07:24 -0700
commit37f501468f6d38e28f8707e344666f1476238b83 (patch)
treebe7a4bd494dbf1dfea692525c9ef591b5f791878 /usb
parentb42b48cf3939e0dd81ab8932b7e6359028eab329 (diff)
downloadpatches-37f501468f6d38e28f8707e344666f1476238b83.tar.gz
bus id fun
Diffstat (limited to 'usb')
-rw-r--r--usb/uwb-add-the-uwb-include-files.patch290
-rw-r--r--usb/uwb-add-umc-bus.patch9
-rw-r--r--usb/uwb-add-whci-enumerator.patch2
-rw-r--r--usb/uwb-stack-core.patch14
-rw-r--r--usb/uwb-stack-debug.patch2
-rw-r--r--usb/uwb-stack-reservation-manager.patch474
-rw-r--r--usb/wusb-whci-hcd-driver.patch2
7 files changed, 396 insertions, 397 deletions
diff --git a/usb/uwb-add-the-uwb-include-files.patch b/usb/uwb-add-the-uwb-include-files.patch
index a79e7e4e13bd0a..9d0dc54f9da1fd 100644
--- a/usb/uwb-add-the-uwb-include-files.patch
+++ b/usb/uwb-add-the-uwb-include-files.patch
@@ -21,6 +21,151 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
5 files changed, 2251 insertions(+)
--- /dev/null
++++ b/include/linux/uwb/debug-cmd.h
+@@ -0,0 +1,57 @@
++/*
++ * Ultra Wide Band
++ * Debug interface commands
++ *
++ * Copyright (C) 2008 Cambridge Silicon Radio Ltd.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License version
++ * 2 as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ */
++#ifndef __LINUX__UWB__DEBUG_CMD_H__
++#define __LINUX__UWB__DEBUG_CMD_H__
++
++#include <linux/types.h>
++
++/*
++ * Debug interface commands
++ *
++ * UWB_DBG_CMD_RSV_ESTABLISH: Establish a new unicast reservation.
++ *
++ * UWB_DBG_CMD_RSV_TERMINATE: Terminate the Nth reservation.
++ */
++
++enum uwb_dbg_cmd_type {
++ UWB_DBG_CMD_RSV_ESTABLISH = 1,
++ UWB_DBG_CMD_RSV_TERMINATE = 2,
++};
++
++struct uwb_dbg_cmd_rsv_establish {
++ __u8 target[6];
++ __u8 type;
++ __u16 max_mas;
++ __u16 min_mas;
++ __u8 sparsity;
++};
++
++struct uwb_dbg_cmd_rsv_terminate {
++ int index;
++};
++
++struct uwb_dbg_cmd {
++ __u32 type;
++ union {
++ struct uwb_dbg_cmd_rsv_establish rsv_establish;
++ struct uwb_dbg_cmd_rsv_terminate rsv_terminate;
++ };
++};
++
++#endif /* #ifndef __LINUX__UWB__DEBUG_CMD_H__ */
+--- /dev/null
++++ b/include/linux/uwb/debug.h
+@@ -0,0 +1,82 @@
++/*
++ * Ultra Wide Band
++ * Debug Support
++ *
++ * Copyright (C) 2005-2006 Intel Corporation
++ * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License version
++ * 2 as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ *
++ * FIXME: doc
++ * Invoke like:
++ *
++ * #define D_LOCAL 4
++ * #include <linux/uwb/debug.h>
++ *
++ * At the end of your include files.
++ */
++#include <linux/types.h>
++
++struct device;
++extern void dump_bytes(struct device *dev, const void *_buf, size_t rsize);
++
++/* Master debug switch; !0 enables, 0 disables */
++#define D_MASTER !0
++
++/* Local (per-file) debug switch; #define before #including */
++#ifndef D_LOCAL
++#define D_LOCAL 0
++#endif
++
++#undef __d_printf
++#undef d_fnstart
++#undef d_fnend
++#undef d_printf
++#undef d_dump
++
++#define __d_printf(l, _tag, _dev, f, a...) \
++do { \
++ struct device *__dev = (_dev); \
++ if (D_MASTER && D_LOCAL >= (l)) { \
++ char __head[64] = ""; \
++ if (_dev != NULL) { \
++ if ((unsigned long)__dev < 4096) \
++ printk(KERN_ERR "E: Corrupt dev %p\n", \
++ __dev); \
++ else \
++ snprintf(__head, sizeof(__head), \
++ "%s %s: ", \
++ dev_driver_string(__dev), \
++ dev_name(__dev)); \
++ } \
++ printk(KERN_ERR "%s%s" _tag ": " f, __head, \
++ __func__, ## a); \
++ } \
++} while (0 && _dev)
++
++#define d_fnstart(l, _dev, f, a...) \
++ __d_printf(l, " FNSTART", _dev, f, ## a)
++#define d_fnend(l, _dev, f, a...) \
++ __d_printf(l, " FNEND", _dev, f, ## a)
++#define d_printf(l, _dev, f, a...) \
++ __d_printf(l, "", _dev, f, ## a)
++#define d_dump(l, _dev, ptr, size) \
++do { \
++ struct device *__dev = _dev; \
++ if (D_MASTER && D_LOCAL >= (l)) \
++ dump_bytes(__dev, ptr, size); \
++} while (0 && _dev)
++#define d_test(l) (D_MASTER && D_LOCAL >= (l))
+--- /dev/null
+++ b/include/linux/uwb.h
@@ -0,0 +1,759 @@
+/*
@@ -783,151 +928,6 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+#endif /* #ifndef __LINUX__UWB_H__ */
--- /dev/null
-+++ b/include/linux/uwb/debug-cmd.h
-@@ -0,0 +1,57 @@
-+/*
-+ * Ultra Wide Band
-+ * Debug interface commands
-+ *
-+ * Copyright (C) 2008 Cambridge Silicon Radio Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License version
-+ * 2 as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+#ifndef __LINUX__UWB__DEBUG_CMD_H__
-+#define __LINUX__UWB__DEBUG_CMD_H__
-+
-+#include <linux/types.h>
-+
-+/*
-+ * Debug interface commands
-+ *
-+ * UWB_DBG_CMD_RSV_ESTABLISH: Establish a new unicast reservation.
-+ *
-+ * UWB_DBG_CMD_RSV_TERMINATE: Terminate the Nth reservation.
-+ */
-+
-+enum uwb_dbg_cmd_type {
-+ UWB_DBG_CMD_RSV_ESTABLISH = 1,
-+ UWB_DBG_CMD_RSV_TERMINATE = 2,
-+};
-+
-+struct uwb_dbg_cmd_rsv_establish {
-+ __u8 target[6];
-+ __u8 type;
-+ __u16 max_mas;
-+ __u16 min_mas;
-+ __u8 sparsity;
-+};
-+
-+struct uwb_dbg_cmd_rsv_terminate {
-+ int index;
-+};
-+
-+struct uwb_dbg_cmd {
-+ __u32 type;
-+ union {
-+ struct uwb_dbg_cmd_rsv_establish rsv_establish;
-+ struct uwb_dbg_cmd_rsv_terminate rsv_terminate;
-+ };
-+};
-+
-+#endif /* #ifndef __LINUX__UWB__DEBUG_CMD_H__ */
---- /dev/null
-+++ b/include/linux/uwb/debug.h
-@@ -0,0 +1,82 @@
-+/*
-+ * Ultra Wide Band
-+ * Debug Support
-+ *
-+ * Copyright (C) 2005-2006 Intel Corporation
-+ * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License version
-+ * 2 as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ *
-+ * FIXME: doc
-+ * Invoke like:
-+ *
-+ * #define D_LOCAL 4
-+ * #include <linux/uwb/debug.h>
-+ *
-+ * At the end of your include files.
-+ */
-+#include <linux/types.h>
-+
-+struct device;
-+extern void dump_bytes(struct device *dev, const void *_buf, size_t rsize);
-+
-+/* Master debug switch; !0 enables, 0 disables */
-+#define D_MASTER !0
-+
-+/* Local (per-file) debug switch; #define before #including */
-+#ifndef D_LOCAL
-+#define D_LOCAL 0
-+#endif
-+
-+#undef __d_printf
-+#undef d_fnstart
-+#undef d_fnend
-+#undef d_printf
-+#undef d_dump
-+
-+#define __d_printf(l, _tag, _dev, f, a...) \
-+do { \
-+ struct device *__dev = (_dev); \
-+ if (D_MASTER && D_LOCAL >= (l)) { \
-+ char __head[64] = ""; \
-+ if (_dev != NULL) { \
-+ if ((unsigned long)__dev < 4096) \
-+ printk(KERN_ERR "E: Corrupt dev %p\n", \
-+ __dev); \
-+ else \
-+ snprintf(__head, sizeof(__head), \
-+ "%s %s: ", \
-+ dev_driver_string(__dev), \
-+ __dev->bus_id); \
-+ } \
-+ printk(KERN_ERR "%s%s" _tag ": " f, __head, \
-+ __func__, ## a); \
-+ } \
-+} while (0 && _dev)
-+
-+#define d_fnstart(l, _dev, f, a...) \
-+ __d_printf(l, " FNSTART", _dev, f, ## a)
-+#define d_fnend(l, _dev, f, a...) \
-+ __d_printf(l, " FNEND", _dev, f, ## a)
-+#define d_printf(l, _dev, f, a...) \
-+ __d_printf(l, "", _dev, f, ## a)
-+#define d_dump(l, _dev, ptr, size) \
-+do { \
-+ struct device *__dev = _dev; \
-+ if (D_MASTER && D_LOCAL >= (l)) \
-+ dump_bytes(__dev, ptr, size); \
-+} while (0 && _dev)
-+#define d_test(l) (D_MASTER && D_LOCAL >= (l))
---- /dev/null
+++ b/include/linux/uwb/spec.h
@@ -0,0 +1,625 @@
+/*
diff --git a/usb/uwb-add-umc-bus.patch b/usb/uwb-add-umc-bus.patch
index b86155babd3a8f..1ab67a5c2b5f0b 100644
--- a/usb/uwb-add-umc-bus.patch
+++ b/usb/uwb-add-umc-bus.patch
@@ -18,10 +18,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/uwb/Makefile | 6 +
drivers/uwb/umc-bus.c | 185 +++++++++++++++++++++++++++++++++++++++++++++
- drivers/uwb/umc-dev.c | 104 +++++++++++++++++++++++++
+ drivers/uwb/umc-dev.c | 103 +++++++++++++++++++++++++
drivers/uwb/umc-drv.c | 31 +++++++
include/linux/uwb/umc.h | 194 ++++++++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 520 insertions(+)
+ 5 files changed, 519 insertions(+)
--- a/drivers/uwb/Makefile
+++ b/drivers/uwb/Makefile
@@ -230,7 +230,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+MODULE_LICENSE("GPL");
--- /dev/null
+++ b/drivers/uwb/umc-dev.c
-@@ -0,0 +1,104 @@
+@@ -0,0 +1,103 @@
+/*
+ * UWB Multi-interface Controller device management.
+ *
@@ -264,8 +264,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+ umc = kzalloc(sizeof(struct umc_dev), GFP_KERNEL);
+ if (umc) {
-+ snprintf(umc->dev.bus_id, sizeof(umc->dev.bus_id), "%s-%d",
-+ parent->bus_id, n);
++ dev_set_name(&umc->dev, "%s-%d", dev_name(parent), n);
+ umc->dev.parent = parent;
+ umc->dev.bus = &umc_bus_type;
+ umc->dev.release = umc_device_release;
diff --git a/usb/uwb-add-whci-enumerator.patch b/usb/uwb-add-whci-enumerator.patch
index ae5da5d8b6d142..aa7e872310188b 100644
--- a/usb/uwb-add-whci-enumerator.patch
+++ b/usb/uwb-add-whci-enumerator.patch
@@ -148,7 +148,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ + UWBCAPDATA_TO_OFFSET(capdata);
+ umc->resource.end = umc->resource.start
+ + (n == 0? 0x20 : UWBCAPDATA_TO_SIZE(capdata)) - 1;
-+ umc->resource.name = umc->dev.bus_id;
++ umc->resource.name = dev_name(&umc->dev);
+ umc->resource.flags = card->pci->resource[bar].flags;
+ umc->resource.parent = &card->pci->resource[bar];
+ umc->irq = card->pci->irq;
diff --git a/usb/uwb-stack-core.patch b/usb/uwb-stack-core.patch
index 989d80f0a545ab..bb12fb9ac15945 100644
--- a/usb/uwb-stack-core.patch
+++ b/usb/uwb-stack-core.patch
@@ -525,13 +525,13 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ mutex_lock(&uwb_dev->mutex);
+ dev = &uwb_dev->dev;
+ uwb_dev->rc = parent_rc;
-+ if (dev->bus_id[0] == 0) /* radios print their own! */
-+ uwb_mac_addr_print(dev->bus_id, sizeof(dev->bus_id),
++ if (strlen(dev_name(dev)) == 0) /* radios print their own! */
++ uwb_mac_addr_print((char *)dev_name(dev), strlen(dev_name(dev)),
+ &uwb_dev->mac_addr);
+ result = __uwb_dev_sys_add(uwb_dev, parent_dev);
+ if (result < 0)
+ printk(KERN_ERR "UWB: unable to register dev %s with sysfs: %d\n",
-+ dev->bus_id, result);
++ dev_name(dev), result);
+ mutex_unlock(&uwb_dev->mutex);
+ return result;
+}
@@ -588,7 +588,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ dev_info(dev, "uwb device (mac %s dev %s) disconnected from %s %s\n",
+ macbuf, devbuf,
+ rc? rc->uwb_dev.dev.parent->bus->name : "n/a",
-+ rc? rc->uwb_dev.dev.parent->bus_id : "");
++ rc? dev_name(rc->uwb_dev.dev.parent) : "");
+ uwb_dev_rm(uwb_dev);
+ uwb_dev_put(uwb_dev); /* for the creation in _onair() */
+ d_fnend(3, NULL, "(dev %p [uwb_dev %p], uwb_rc %p) = 0\n", dev, uwb_dev, rc);
@@ -663,7 +663,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ uwb_bce_get(bce); /* released in uwb_dev_sys_release() */
+ dev_info(dev, "uwb device (mac %s dev %s) connected to %s %s\n",
+ macbuf, devbuf, rc->uwb_dev.dev.parent->bus->name,
-+ rc->uwb_dev.dev.parent->bus_id);
++ dev_name(rc->uwb_dev.dev.parent));
+ uwb_notify(rc, uwb_dev, UWB_NOTIF_ONAIR);
+ return;
+
@@ -936,7 +936,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ mutex_unlock(&uwb_rcs.mutex);
+
+ dev = &rc->uwb_dev.dev;
-+ snprintf(dev->bus_id, sizeof(dev->bus_id), "uwb%d", (int)rc_count);
++ dev_set_name(dev, "uwb%d", (int)rc_count);
+
+ rc->priv = priv;
+ rc->cmd = cmd;
@@ -964,7 +964,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ uwb_dev_addr_print(devbuf, sizeof(devbuf), &rc->uwb_dev.dev_addr);
+ dev_info(dev,
+ "new uwb radio controller (mac %s dev %s) on %s %s\n",
-+ macbuf, devbuf, parent_dev->bus->name, parent_dev->bus_id);
++ macbuf, devbuf, parent_dev->bus->name, dev_name(parent_dev));
+ rc->ready = 1;
+ return 0;
+
diff --git a/usb/uwb-stack-debug.patch b/usb/uwb-stack-debug.patch
index eb79efc446077c..7f0c7e17853740 100644
--- a/usb/uwb-stack-debug.patch
+++ b/usb/uwb-stack-debug.patch
@@ -330,7 +330,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ rc->dbg->pal.new_rsv = uwb_dbg_new_rsv;
+ uwb_pal_register(rc, &rc->dbg->pal);
+ if (root_dir) {
-+ rc->dbg->root_d = debugfs_create_dir(rc->uwb_dev.dev.bus_id,
++ rc->dbg->root_d = debugfs_create_dir(dev_name(&rc->uwb_dev.dev),
+ root_dir);
+ rc->dbg->command_f = debugfs_create_file("command", 0200,
+ rc->dbg->root_d, rc,
diff --git a/usb/uwb-stack-reservation-manager.patch b/usb/uwb-stack-reservation-manager.patch
index 0768b1d66c160e..78b78ddfbd5258 100644
--- a/usb/uwb-stack-reservation-manager.patch
+++ b/usb/uwb-stack-reservation-manager.patch
@@ -313,242 +313,6 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ return 0;
+}
--- /dev/null
-+++ b/drivers/uwb/drp-ie.c
-@@ -0,0 +1,233 @@
-+/*
-+ * UWB DRP IE management.
-+ *
-+ * Copyright (C) 2005-2006 Intel Corporation
-+ * Copyright (C) 2008 Cambridge Silicon Radio Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License version
-+ * 2 as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/random.h>
-+#include <linux/uwb.h>
-+
-+#include "uwb-internal.h"
-+
-+/*
-+ * Allocate a DRP IE.
-+ *
-+ * To save having to free/allocate a DRP IE when its MAS changes,
-+ * enough memory is allocated for the maxiumum number of DRP
-+ * allocation fields. This gives an overhead per reservation of up to
-+ * (UWB_NUM_ZONES - 1) * 4 = 60 octets.
-+ */
-+static struct uwb_ie_drp *uwb_drp_ie_alloc(void)
-+{
-+ struct uwb_ie_drp *drp_ie;
-+ unsigned tiebreaker;
-+
-+ drp_ie = kzalloc(sizeof(struct uwb_ie_drp) +
-+ UWB_NUM_ZONES * sizeof(struct uwb_drp_alloc),
-+ GFP_KERNEL);
-+ if (drp_ie) {
-+ drp_ie->hdr.element_id = UWB_IE_DRP;
-+
-+ get_random_bytes(&tiebreaker, sizeof(unsigned));
-+ drp_ie->tiebreaker = tiebreaker & 1;
-+ }
-+ return drp_ie;
-+}
-+
-+
-+/*
-+ * Fill a DRP IE's allocation fields from a MAS bitmap.
-+ */
-+static void uwb_drp_ie_from_bm(struct uwb_ie_drp *drp_ie,
-+ struct uwb_mas_bm *mas)
-+{
-+ int z, i, num_fields = 0, next = 0;
-+ struct uwb_drp_alloc *zones;
-+ __le16 current_bmp;
-+ DECLARE_BITMAP(tmp_bmp, UWB_NUM_MAS);
-+ DECLARE_BITMAP(tmp_mas_bm, UWB_MAS_PER_ZONE);
-+
-+ zones = drp_ie->allocs;
-+
-+ bitmap_copy(tmp_bmp, mas->bm, UWB_NUM_MAS);
-+
-+ /* Determine unique MAS bitmaps in zones from bitmap. */
-+ for (z = 0; z < UWB_NUM_ZONES; z++) {
-+ bitmap_copy(tmp_mas_bm, tmp_bmp, UWB_MAS_PER_ZONE);
-+ if (bitmap_weight(tmp_mas_bm, UWB_MAS_PER_ZONE) > 0) {
-+ bool found = false;
-+ current_bmp = (__le16) *tmp_mas_bm;
-+ for (i = 0; i < next; i++) {
-+ if (current_bmp == zones[i].mas_bm) {
-+ zones[i].zone_bm |= 1 << z;
-+ found = true;
-+ break;
-+ }
-+ }
-+ if (!found) {
-+ num_fields++;
-+ zones[next].zone_bm = 1 << z;
-+ zones[next].mas_bm = current_bmp;
-+ next++;
-+ }
-+ }
-+ bitmap_shift_right(tmp_bmp, tmp_bmp, UWB_MAS_PER_ZONE, UWB_NUM_MAS);
-+ }
-+
-+ /* Store in format ready for transmission (le16). */
-+ for (i = 0; i < num_fields; i++) {
-+ drp_ie->allocs[i].zone_bm = cpu_to_le16(zones[i].zone_bm);
-+ drp_ie->allocs[i].mas_bm = cpu_to_le16(zones[i].mas_bm);
-+ }
-+
-+ drp_ie->hdr.length = sizeof(struct uwb_ie_drp) - sizeof(struct uwb_ie_hdr)
-+ + num_fields * sizeof(struct uwb_drp_alloc);
-+}
-+
-+/**
-+ * uwb_drp_ie_update - update a reservation's DRP IE
-+ * @rsv: the reservation
-+ */
-+int uwb_drp_ie_update(struct uwb_rsv *rsv)
-+{
-+ struct device *dev = &rsv->rc->uwb_dev.dev;
-+ struct uwb_ie_drp *drp_ie;
-+ int reason_code, status;
-+
-+ switch (rsv->state) {
-+ case UWB_RSV_STATE_NONE:
-+ kfree(rsv->drp_ie);
-+ rsv->drp_ie = NULL;
-+ return 0;
-+ case UWB_RSV_STATE_O_INITIATED:
-+ reason_code = UWB_DRP_REASON_ACCEPTED;
-+ status = 0;
-+ break;
-+ case UWB_RSV_STATE_O_PENDING:
-+ reason_code = UWB_DRP_REASON_ACCEPTED;
-+ status = 0;
-+ break;
-+ case UWB_RSV_STATE_O_MODIFIED:
-+ reason_code = UWB_DRP_REASON_MODIFIED;
-+ status = 1;
-+ break;
-+ case UWB_RSV_STATE_O_ESTABLISHED:
-+ reason_code = UWB_DRP_REASON_ACCEPTED;
-+ status = 1;
-+ break;
-+ case UWB_RSV_STATE_T_ACCEPTED:
-+ reason_code = UWB_DRP_REASON_ACCEPTED;
-+ status = 1;
-+ break;
-+ case UWB_RSV_STATE_T_DENIED:
-+ reason_code = UWB_DRP_REASON_DENIED;
-+ status = 0;
-+ break;
-+ default:
-+ dev_dbg(dev, "rsv with unhandled state (%d)\n", rsv->state);
-+ return -EINVAL;
-+ }
-+
-+ if (rsv->drp_ie == NULL) {
-+ rsv->drp_ie = uwb_drp_ie_alloc();
-+ if (rsv->drp_ie == NULL)
-+ return -ENOMEM;
-+ }
-+ drp_ie = rsv->drp_ie;
-+
-+ drp_ie->owner = uwb_rsv_is_owner(rsv);
-+ drp_ie->status = status;
-+ drp_ie->reason_code = reason_code;
-+ drp_ie->stream_index = rsv->stream;
-+ drp_ie->type = rsv->type;
-+ drp_ie->DRP_Control = cpu_to_le16(drp_ie->DRP_Control);
-+
-+ if (uwb_rsv_is_owner(rsv)) {
-+ switch (rsv->target.type) {
-+ case UWB_RSV_TARGET_DEV:
-+ drp_ie->dev_addr = rsv->target.dev->dev_addr;
-+ break;
-+ case UWB_RSV_TARGET_DEVADDR:
-+ drp_ie->dev_addr = rsv->target.devaddr;
-+ break;
-+ }
-+ } else
-+ drp_ie->dev_addr = rsv->owner->dev_addr;
-+
-+ uwb_drp_ie_from_bm(drp_ie, &rsv->mas);
-+
-+ rsv->ie_valid = true;
-+ return 0;
-+}
-+
-+/*
-+ * Set MAS bits from given MAS bitmap in a single zone of large bitmap.
-+ *
-+ * We are given a zone id and the MAS bitmap of bits that need to be set in
-+ * this zone. Note that this zone may already have bits set and this only
-+ * adds settings - we cannot simply assign the MAS bitmap contents to the
-+ * zone contents. We iterate over the the bits (MAS) in the zone and set the
-+ * bits that are set in the given MAS bitmap.
-+ */
-+static
-+void uwb_drp_ie_single_zone_to_bm(struct uwb_mas_bm *bm, u8 zone, u16 mas_bm)
-+{
-+ int mas;
-+ u16 mas_mask;
-+
-+ for (mas = 0; mas < UWB_MAS_PER_ZONE; mas++) {
-+ mas_mask = 1 << mas;
-+ if (mas_bm & mas_mask)
-+ set_bit(zone * UWB_NUM_ZONES + mas, bm->bm);
-+ }
-+}
-+
-+/**
-+ * uwb_drp_ie_zones_to_bm - convert DRP allocation fields to a bitmap
-+ * @mas: MAS bitmap that will be populated to correspond to the
-+ * allocation fields in the DRP IE
-+ * @drp_ie: the DRP IE that contains the allocation fields.
-+ *
-+ * The input format is an array of MAS allocation fields (16 bit Zone
-+ * bitmap, 16 bit MAS bitmap) as described in [ECMA-368] section
-+ * 16.8.6. The output is a full 256 bit MAS bitmap.
-+ *
-+ * We go over all the allocation fields, for each allocation field we
-+ * know which zones are impacted. We iterate over all the zones
-+ * impacted and call a function that will set the correct MAS bits in
-+ * each zone.
-+ */
-+void uwb_drp_ie_to_bm(struct uwb_mas_bm *bm, const struct uwb_ie_drp *drp_ie)
-+{
-+ int numallocs = (drp_ie->hdr.length - 4) / 4;
-+ const struct uwb_drp_alloc *alloc;
-+ int cnt;
-+ u16 zone_bm, mas_bm;
-+ u8 zone;
-+ u16 zone_mask;
-+
-+ for (cnt = 0; cnt < numallocs; cnt++) {
-+ alloc = &drp_ie->allocs[cnt];
-+ zone_bm = le16_to_cpu(alloc->zone_bm);
-+ mas_bm = le16_to_cpu(alloc->mas_bm);
-+ for (zone = 0; zone < UWB_NUM_ZONES; zone++) {
-+ zone_mask = 1 << zone;
-+ if (zone_bm & zone_mask)
-+ uwb_drp_ie_single_zone_to_bm(bm, zone, mas_bm);
-+ }
-+ }
-+}
---- /dev/null
+++ b/drivers/uwb/drp.c
@@ -0,0 +1,451 @@
+/*
@@ -1003,6 +767,242 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ return 0;
+}
--- /dev/null
++++ b/drivers/uwb/drp-ie.c
+@@ -0,0 +1,233 @@
++/*
++ * UWB DRP IE management.
++ *
++ * Copyright (C) 2005-2006 Intel Corporation
++ * Copyright (C) 2008 Cambridge Silicon Radio Ltd.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License version
++ * 2 as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ */
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/random.h>
++#include <linux/uwb.h>
++
++#include "uwb-internal.h"
++
++/*
++ * Allocate a DRP IE.
++ *
++ * To save having to free/allocate a DRP IE when its MAS changes,
++ * enough memory is allocated for the maxiumum number of DRP
++ * allocation fields. This gives an overhead per reservation of up to
++ * (UWB_NUM_ZONES - 1) * 4 = 60 octets.
++ */
++static struct uwb_ie_drp *uwb_drp_ie_alloc(void)
++{
++ struct uwb_ie_drp *drp_ie;
++ unsigned tiebreaker;
++
++ drp_ie = kzalloc(sizeof(struct uwb_ie_drp) +
++ UWB_NUM_ZONES * sizeof(struct uwb_drp_alloc),
++ GFP_KERNEL);
++ if (drp_ie) {
++ drp_ie->hdr.element_id = UWB_IE_DRP;
++
++ get_random_bytes(&tiebreaker, sizeof(unsigned));
++ drp_ie->tiebreaker = tiebreaker & 1;
++ }
++ return drp_ie;
++}
++
++
++/*
++ * Fill a DRP IE's allocation fields from a MAS bitmap.
++ */
++static void uwb_drp_ie_from_bm(struct uwb_ie_drp *drp_ie,
++ struct uwb_mas_bm *mas)
++{
++ int z, i, num_fields = 0, next = 0;
++ struct uwb_drp_alloc *zones;
++ __le16 current_bmp;
++ DECLARE_BITMAP(tmp_bmp, UWB_NUM_MAS);
++ DECLARE_BITMAP(tmp_mas_bm, UWB_MAS_PER_ZONE);
++
++ zones = drp_ie->allocs;
++
++ bitmap_copy(tmp_bmp, mas->bm, UWB_NUM_MAS);
++
++ /* Determine unique MAS bitmaps in zones from bitmap. */
++ for (z = 0; z < UWB_NUM_ZONES; z++) {
++ bitmap_copy(tmp_mas_bm, tmp_bmp, UWB_MAS_PER_ZONE);
++ if (bitmap_weight(tmp_mas_bm, UWB_MAS_PER_ZONE) > 0) {
++ bool found = false;
++ current_bmp = (__le16) *tmp_mas_bm;
++ for (i = 0; i < next; i++) {
++ if (current_bmp == zones[i].mas_bm) {
++ zones[i].zone_bm |= 1 << z;
++ found = true;
++ break;
++ }
++ }
++ if (!found) {
++ num_fields++;
++ zones[next].zone_bm = 1 << z;
++ zones[next].mas_bm = current_bmp;
++ next++;
++ }
++ }
++ bitmap_shift_right(tmp_bmp, tmp_bmp, UWB_MAS_PER_ZONE, UWB_NUM_MAS);
++ }
++
++ /* Store in format ready for transmission (le16). */
++ for (i = 0; i < num_fields; i++) {
++ drp_ie->allocs[i].zone_bm = cpu_to_le16(zones[i].zone_bm);
++ drp_ie->allocs[i].mas_bm = cpu_to_le16(zones[i].mas_bm);
++ }
++
++ drp_ie->hdr.length = sizeof(struct uwb_ie_drp) - sizeof(struct uwb_ie_hdr)
++ + num_fields * sizeof(struct uwb_drp_alloc);
++}
++
++/**
++ * uwb_drp_ie_update - update a reservation's DRP IE
++ * @rsv: the reservation
++ */
++int uwb_drp_ie_update(struct uwb_rsv *rsv)
++{
++ struct device *dev = &rsv->rc->uwb_dev.dev;
++ struct uwb_ie_drp *drp_ie;
++ int reason_code, status;
++
++ switch (rsv->state) {
++ case UWB_RSV_STATE_NONE:
++ kfree(rsv->drp_ie);
++ rsv->drp_ie = NULL;
++ return 0;
++ case UWB_RSV_STATE_O_INITIATED:
++ reason_code = UWB_DRP_REASON_ACCEPTED;
++ status = 0;
++ break;
++ case UWB_RSV_STATE_O_PENDING:
++ reason_code = UWB_DRP_REASON_ACCEPTED;
++ status = 0;
++ break;
++ case UWB_RSV_STATE_O_MODIFIED:
++ reason_code = UWB_DRP_REASON_MODIFIED;
++ status = 1;
++ break;
++ case UWB_RSV_STATE_O_ESTABLISHED:
++ reason_code = UWB_DRP_REASON_ACCEPTED;
++ status = 1;
++ break;
++ case UWB_RSV_STATE_T_ACCEPTED:
++ reason_code = UWB_DRP_REASON_ACCEPTED;
++ status = 1;
++ break;
++ case UWB_RSV_STATE_T_DENIED:
++ reason_code = UWB_DRP_REASON_DENIED;
++ status = 0;
++ break;
++ default:
++ dev_dbg(dev, "rsv with unhandled state (%d)\n", rsv->state);
++ return -EINVAL;
++ }
++
++ if (rsv->drp_ie == NULL) {
++ rsv->drp_ie = uwb_drp_ie_alloc();
++ if (rsv->drp_ie == NULL)
++ return -ENOMEM;
++ }
++ drp_ie = rsv->drp_ie;
++
++ drp_ie->owner = uwb_rsv_is_owner(rsv);
++ drp_ie->status = status;
++ drp_ie->reason_code = reason_code;
++ drp_ie->stream_index = rsv->stream;
++ drp_ie->type = rsv->type;
++ drp_ie->DRP_Control = cpu_to_le16(drp_ie->DRP_Control);
++
++ if (uwb_rsv_is_owner(rsv)) {
++ switch (rsv->target.type) {
++ case UWB_RSV_TARGET_DEV:
++ drp_ie->dev_addr = rsv->target.dev->dev_addr;
++ break;
++ case UWB_RSV_TARGET_DEVADDR:
++ drp_ie->dev_addr = rsv->target.devaddr;
++ break;
++ }
++ } else
++ drp_ie->dev_addr = rsv->owner->dev_addr;
++
++ uwb_drp_ie_from_bm(drp_ie, &rsv->mas);
++
++ rsv->ie_valid = true;
++ return 0;
++}
++
++/*
++ * Set MAS bits from given MAS bitmap in a single zone of large bitmap.
++ *
++ * We are given a zone id and the MAS bitmap of bits that need to be set in
++ * this zone. Note that this zone may already have bits set and this only
++ * adds settings - we cannot simply assign the MAS bitmap contents to the
++ * zone contents. We iterate over the the bits (MAS) in the zone and set the
++ * bits that are set in the given MAS bitmap.
++ */
++static
++void uwb_drp_ie_single_zone_to_bm(struct uwb_mas_bm *bm, u8 zone, u16 mas_bm)
++{
++ int mas;
++ u16 mas_mask;
++
++ for (mas = 0; mas < UWB_MAS_PER_ZONE; mas++) {
++ mas_mask = 1 << mas;
++ if (mas_bm & mas_mask)
++ set_bit(zone * UWB_NUM_ZONES + mas, bm->bm);
++ }
++}
++
++/**
++ * uwb_drp_ie_zones_to_bm - convert DRP allocation fields to a bitmap
++ * @mas: MAS bitmap that will be populated to correspond to the
++ * allocation fields in the DRP IE
++ * @drp_ie: the DRP IE that contains the allocation fields.
++ *
++ * The input format is an array of MAS allocation fields (16 bit Zone
++ * bitmap, 16 bit MAS bitmap) as described in [ECMA-368] section
++ * 16.8.6. The output is a full 256 bit MAS bitmap.
++ *
++ * We go over all the allocation fields, for each allocation field we
++ * know which zones are impacted. We iterate over all the zones
++ * impacted and call a function that will set the correct MAS bits in
++ * each zone.
++ */
++void uwb_drp_ie_to_bm(struct uwb_mas_bm *bm, const struct uwb_ie_drp *drp_ie)
++{
++ int numallocs = (drp_ie->hdr.length - 4) / 4;
++ const struct uwb_drp_alloc *alloc;
++ int cnt;
++ u16 zone_bm, mas_bm;
++ u8 zone;
++ u16 zone_mask;
++
++ for (cnt = 0; cnt < numallocs; cnt++) {
++ alloc = &drp_ie->allocs[cnt];
++ zone_bm = le16_to_cpu(alloc->zone_bm);
++ mas_bm = le16_to_cpu(alloc->mas_bm);
++ for (zone = 0; zone < UWB_NUM_ZONES; zone++) {
++ zone_mask = 1 << zone;
++ if (zone_bm & zone_mask)
++ uwb_drp_ie_single_zone_to_bm(bm, zone, mas_bm);
++ }
++ }
++}
+--- /dev/null
+++ b/drivers/uwb/rsv.c
@@ -0,0 +1,677 @@
+/*
@@ -1661,7 +1661,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+{
+ char name[16];
+
-+ snprintf(name, sizeof(name), "%s_rsvd", rc->uwb_dev.dev.bus_id);
++ snprintf(name, sizeof(name), "%s_rsvd", dev_name(&rc->uwb_dev.dev));
+ rc->rsv_workq = create_singlethread_workqueue(name);
+ if (rc->rsv_workq == NULL)
+ return -ENOMEM;
diff --git a/usb/wusb-whci-hcd-driver.patch b/usb/wusb-whci-hcd-driver.patch
index 8e5fcf589ed537..a2923bfc78e246 100644
--- a/usb/wusb-whci-hcd-driver.patch
+++ b/usb/wusb-whci-hcd-driver.patch
@@ -929,7 +929,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ init_waitqueue_head(&whc->cmd_wq);
+ init_waitqueue_head(&whc->async_list_wq);
+ init_waitqueue_head(&whc->periodic_list_wq);
-+ whc->workqueue = create_singlethread_workqueue(whc->umc->dev.bus_id);
++ whc->workqueue = create_singlethread_workqueue(dev_name(&whc->umc->dev));
+ if (whc->workqueue == NULL) {
+ ret = -ENOMEM;
+ goto error;