diff --git a/src/usb-hid.c b/src/usb-hid.c
index 168b7fa..21363c3 100644
--- a/src/usb-hid.c
+++ b/src/usb-hid.c
@@ -49,7 +49,8 @@
 #define KEYREPEATMS 33
 
 static int
-usb_kbd_init(struct usb_pipe *pipe, struct usb_endpoint_descriptor *epdesc)
+usb_kbd_init(struct usbdevice_s *usbdev
+             , struct usb_endpoint_descriptor *epdesc)
 {
     if (! CONFIG_USB_KEYBOARD)
         return -1;
@@ -61,15 +62,15 @@
         return -1;
 
     // Enable "boot" protocol.
-    int ret = set_protocol(pipe, 0);
+    int ret = set_protocol(usbdev->defpipe, 0);
     if (ret)
         return -1;
     // Periodically send reports to enable key repeat.
-    ret = set_idle(pipe, KEYREPEATMS);
+    ret = set_idle(usbdev->defpipe, KEYREPEATMS);
     if (ret)
         return -1;
 
-    keyboard_pipe = alloc_intr_pipe(pipe, epdesc);
+    keyboard_pipe = alloc_intr_pipe(usbdev, epdesc);
     if (!keyboard_pipe)
         return -1;
 
@@ -78,7 +79,8 @@
 }
 
 static int
-usb_mouse_init(struct usb_pipe *pipe, struct usb_endpoint_descriptor *epdesc)
+usb_mouse_init(struct usbdevice_s *usbdev
+               , struct usb_endpoint_descriptor *epdesc)
 {
     if (! CONFIG_USB_MOUSE)
         return -1;
@@ -90,11 +92,11 @@
         return -1;
 
     // Enable "boot" protocol.
-    int ret = set_protocol(pipe, 0);
+    int ret = set_protocol(usbdev->defpipe, 0);
     if (ret)
         return -1;
 
-    mouse_pipe = alloc_intr_pipe(pipe, epdesc);
+    mouse_pipe = alloc_intr_pipe(usbdev, epdesc);
     if (!mouse_pipe)
         return -1;
 
@@ -104,29 +106,29 @@
 
 // Initialize a found USB HID device (if applicable).
 int
-usb_hid_init(struct usb_pipe *pipe
-             , struct usb_interface_descriptor *iface, int imax)
+usb_hid_init(struct usbdevice_s *usbdev)
 {
     if (! CONFIG_USB_KEYBOARD || ! CONFIG_USB_MOUSE)
         return -1;
-    dprintf(2, "usb_hid_init %p\n", pipe);
+    dprintf(2, "usb_hid_init %p\n", usbdev->defpipe);
 
+    struct usb_interface_descriptor *iface = usbdev->iface;
     if (iface->bInterfaceSubClass != USB_INTERFACE_SUBCLASS_BOOT)
         // Doesn't support boot protocol.
         return -1;
 
     // Find intr in endpoint.
     struct usb_endpoint_descriptor *epdesc = findEndPointDesc(
-        iface, imax, USB_ENDPOINT_XFER_INT, USB_DIR_IN);
+        usbdev, USB_ENDPOINT_XFER_INT, USB_DIR_IN);
     if (!epdesc) {
         dprintf(1, "No usb hid intr in?\n");
         return -1;
     }
 
     if (iface->bInterfaceProtocol == USB_INTERFACE_PROTOCOL_KEYBOARD)
-        return usb_kbd_init(pipe, epdesc);
+        return usb_kbd_init(usbdev, epdesc);
     if (iface->bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
-        return usb_mouse_init(pipe, epdesc);
+        return usb_mouse_init(usbdev, epdesc);
     return -1;
 }
 
diff --git a/src/usb-hid.h b/src/usb-hid.h
index 7fbcf4b..bd6445c 100644
--- a/src/usb-hid.h
+++ b/src/usb-hid.h
@@ -2,10 +2,8 @@
 #define __USB_HID_H
 
 // usb-hid.c
-struct usb_interface_descriptor;
-struct usb_pipe;
-int usb_hid_init(struct usb_pipe *pipe
-                 , struct usb_interface_descriptor *iface, int imax);
+struct usbdevice_s;
+int usb_hid_init(struct usbdevice_s *usbdev);
 inline int usb_kbd_active(void);
 inline int usb_kbd_command(int command, u8 *param);
 inline int usb_mouse_active(void);
diff --git a/src/usb-hub.c b/src/usb-hub.c
index b2d9ff2..caa6a3b 100644
--- a/src/usb-hub.c
+++ b/src/usb-hub.c
@@ -158,21 +158,21 @@
 
 // Configure a usb hub and then find devices connected to it.
 int
-usb_hub_init(struct usb_pipe *pipe)
+usb_hub_init(struct usbdevice_s *usbdev)
 {
     ASSERT32FLAT();
     if (!CONFIG_USB_HUB)
         return -1;
 
     struct usb_hub_descriptor desc;
-    int ret = get_hub_desc(pipe, &desc);
+    int ret = get_hub_desc(usbdev->defpipe, &desc);
     if (ret)
         return ret;
 
     struct usbhub_s hub;
     memset(&hub, 0, sizeof(hub));
-    hub.pipe = pipe;
-    hub.cntl = pipe->cntl;
+    hub.pipe = usbdev->defpipe;
+    hub.cntl = usbdev->defpipe->cntl;
     hub.powerwait = desc.bPwrOn2PwrGood * 2;
     hub.portcount = desc.bNbrPorts;
     hub.op = &HubOp;
diff --git a/src/usb-hub.h b/src/usb-hub.h
index 7672028..a75cbda 100644
--- a/src/usb-hub.h
+++ b/src/usb-hub.h
@@ -2,8 +2,8 @@
 #define __USB_HUB_H
 
 // usb-hub.c
-struct usb_pipe;
-int usb_hub_init(struct usb_pipe *pipe);
+struct usbdevice_s;
+int usb_hub_init(struct usbdevice_s *usbdev);
 
 
 /****************************************************************
diff --git a/src/usb-msc.c b/src/usb-msc.c
index e143401..dad90d6 100644
--- a/src/usb-msc.c
+++ b/src/usb-msc.c
@@ -124,13 +124,13 @@
 
 // Configure a usb msc device.
 int
-usb_msc_init(struct usb_pipe *pipe
-             , struct usb_interface_descriptor *iface, int imax)
+usb_msc_init(struct usbdevice_s *usbdev)
 {
     if (!CONFIG_USB_MSC)
         return -1;
 
     // Verify right kind of device
+    struct usb_interface_descriptor *iface = usbdev->iface;
     if ((iface->bInterfaceSubClass != US_SC_SCSI &&
 	 iface->bInterfaceSubClass != US_SC_ATAPI_8070 &&
 	 iface->bInterfaceSubClass != US_SC_ATAPI_8020)
@@ -151,17 +151,18 @@
 
     // Find bulk in and bulk out endpoints.
     struct usb_endpoint_descriptor *indesc = findEndPointDesc(
-        iface, imax, USB_ENDPOINT_XFER_BULK, USB_DIR_IN);
+        usbdev, USB_ENDPOINT_XFER_BULK, USB_DIR_IN);
     struct usb_endpoint_descriptor *outdesc = findEndPointDesc(
-        iface, imax, USB_ENDPOINT_XFER_BULK, USB_DIR_OUT);
+        usbdev, USB_ENDPOINT_XFER_BULK, USB_DIR_OUT);
     if (!indesc || !outdesc)
         goto fail;
-    udrive_g->bulkin = alloc_bulk_pipe(pipe, indesc);
-    udrive_g->bulkout = alloc_bulk_pipe(pipe, outdesc);
+    udrive_g->bulkin = alloc_bulk_pipe(usbdev, indesc);
+    udrive_g->bulkout = alloc_bulk_pipe(usbdev, outdesc);
     if (!udrive_g->bulkin || !udrive_g->bulkout)
         goto fail;
 
-    int prio = bootprio_find_usb(pipe->cntl->pci, pipe->path);
+    int prio = bootprio_find_usb(usbdev->defpipe->cntl->pci
+                                 , usbdev->defpipe->path);
     int ret = scsi_init_drive(&udrive_g->drive, "USB MSC", prio);
     if (ret)
         goto fail;
diff --git a/src/usb-msc.h b/src/usb-msc.h
index 12d749c..31c81b9 100644
--- a/src/usb-msc.h
+++ b/src/usb-msc.h
@@ -4,10 +4,8 @@
 // usb-msc.c
 struct disk_op_s;
 int usb_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize);
-struct usb_interface_descriptor;
-struct usb_pipe;
-int usb_msc_init(struct usb_pipe *pipe
-                 , struct usb_interface_descriptor *iface, int imax);
+struct usbdevice_s;
+int usb_msc_init(struct usbdevice_s *usbdev);
 
 
 /****************************************************************
diff --git a/src/usb.c b/src/usb.c
index 81aa429..1657bf5 100644
--- a/src/usb.c
+++ b/src/usb.c
@@ -86,19 +86,20 @@
 
 // Fill "pipe" endpoint info from an endpoint descriptor.
 static void
-desc2pipe(struct usb_pipe *newpipe, struct usb_pipe *origpipe
+desc2pipe(struct usb_pipe *newpipe, struct usbdevice_s *usbdev
           , struct usb_endpoint_descriptor *epdesc)
 {
-    memcpy(newpipe, origpipe, sizeof(*newpipe));
+    memcpy(newpipe, usbdev->defpipe, sizeof(*newpipe));
     newpipe->ep = epdesc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
     newpipe->maxpacket = epdesc->wMaxPacketSize;
 }
 
 struct usb_pipe *
-alloc_bulk_pipe(struct usb_pipe *pipe, struct usb_endpoint_descriptor *epdesc)
+alloc_bulk_pipe(struct usbdevice_s *usbdev
+                , struct usb_endpoint_descriptor *epdesc)
 {
     struct usb_pipe dummy;
-    desc2pipe(&dummy, pipe, epdesc);
+    desc2pipe(&dummy, usbdev, epdesc);
     dummy.eptype = USB_ENDPOINT_XFER_BULK;
     return alloc_async_pipe(&dummy);
 }
@@ -118,18 +119,19 @@
 }
 
 struct usb_pipe *
-alloc_intr_pipe(struct usb_pipe *pipe, struct usb_endpoint_descriptor *epdesc)
+alloc_intr_pipe(struct usbdevice_s *usbdev
+                , struct usb_endpoint_descriptor *epdesc)
 {
     struct usb_pipe dummy;
-    desc2pipe(&dummy, pipe, epdesc);
+    desc2pipe(&dummy, usbdev, epdesc);
     // Find the exponential period of the requested time.
     int period = epdesc->bInterval;
     int frameexp;
-    if (pipe->speed != USB_HIGHSPEED)
+    if (usbdev->speed != USB_HIGHSPEED)
         frameexp = (period <= 0) ? 0 : __fls(period);
     else
         frameexp = (period <= 4) ? 0 : period - 4;
-    switch (pipe->type) {
+    switch (dummy.type) {
     default:
     case USB_TYPE_UHCI:
         return uhci_alloc_intr_pipe(&dummy, frameexp);
@@ -161,12 +163,11 @@
 
 // Find the first endpoing of a given type in an interface description.
 struct usb_endpoint_descriptor *
-findEndPointDesc(struct usb_interface_descriptor *iface, int imax
-                 , int type, int dir)
+findEndPointDesc(struct usbdevice_s *usbdev, int type, int dir)
 {
-    struct usb_endpoint_descriptor *epdesc = (void*)&iface[1];
+    struct usb_endpoint_descriptor *epdesc = (void*)&usbdev->iface[1];
     for (;;) {
-        if ((void*)epdesc >= (void*)iface + imax
+        if ((void*)epdesc >= (void*)usbdev->iface + usbdev->imax
             || epdesc->bDescriptorType == USB_DT_INTERFACE) {
             return NULL;
         }
@@ -345,13 +346,15 @@
         goto fail;
 
     // Configure driver.
-    int imax = (void*)config + config->wTotalLength - (void*)iface;
+    usbdev->config = config;
+    usbdev->iface = iface;
+    usbdev->imax = (void*)config + config->wTotalLength - (void*)iface;
     if (iface->bInterfaceClass == USB_CLASS_HUB)
-        ret = usb_hub_init(pipe);
+        ret = usb_hub_init(usbdev);
     else if (iface->bInterfaceClass == USB_CLASS_MASS_STORAGE)
-        ret = usb_msc_init(pipe, iface, imax);
+        ret = usb_msc_init(usbdev);
     else
-        ret = usb_hid_init(pipe, iface, imax);
+        ret = usb_hid_init(usbdev);
     if (ret)
         goto fail;
 
diff --git a/src/usb.h b/src/usb.h
index ab7f559..83ccb58 100644
--- a/src/usb.h
+++ b/src/usb.h
@@ -26,6 +26,9 @@
     struct usbhub_s *hub;
     struct usb_pipe *defpipe;
     u32 port;
+    struct usb_config_descriptor *config;
+    struct usb_interface_descriptor *iface;
+    int imax;
     u8 speed;
 };
 
@@ -215,14 +218,12 @@
                          , void *data);
 int usb_send_bulk(struct usb_pipe *pipe, int dir, void *data, int datasize);
 void free_pipe(struct usb_pipe *pipe);
-struct usb_pipe *alloc_bulk_pipe(struct usb_pipe *pipe
+struct usb_pipe *alloc_bulk_pipe(struct usbdevice_s *usbdev
                                  , struct usb_endpoint_descriptor *epdesc);
-struct usb_pipe *alloc_intr_pipe(struct usb_pipe *pipe
+struct usb_pipe *alloc_intr_pipe(struct usbdevice_s *usbdev
                                  , struct usb_endpoint_descriptor *epdesc);
 int usb_poll_intr(struct usb_pipe *pipe, void *data);
-struct usb_endpoint_descriptor *findEndPointDesc(
-    struct usb_interface_descriptor *iface, int imax, int type, int dir);
-u32 mkendpFromDesc(struct usb_pipe *pipe
-                   , struct usb_endpoint_descriptor *epdesc);
+struct usb_endpoint_descriptor *findEndPointDesc(struct usbdevice_s *usbdev
+                                                 , int type, int dir);
 
 #endif // usb.h
