[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH v2 19/24] usb: Entferne týndur-eigene Treiber



- Diese Treiber sollen durch den CDI-Treiber ersetzt werden. Dieser
  besitzt noch zwar weder UHCI- noch MSD-CBI-Unterstützung (bspw.
  Diskettenlaufwerke), ist aber tatsächlich besser getestet und EHCI und
  Bulk-only-MSD reichen für normale USB-Sticks aus bzw. sind sogar
  besser geeignet.

Signed-off-by: Max Reitz <max@xxxxxxxxxx>
---
 src/modules/usb/include/usb-ddrv.h    |  59 -----
 src/modules/usb/include/usb-hc.h      | 141 -----------
 src/modules/usb/include/usb-hub.h     |  49 ----
 src/modules/usb/include/usb-server.h  | 153 ------------
 src/modules/usb/include/usb-structs.h | 176 --------------
 src/modules/usb/include/usb-trans.h   |  66 -----
 src/modules/usb/msd/Makefile.all      |   8 -
 src/modules/usb/msd/init.c            | 206 ----------------
 src/modules/usb/msd/lostio.c          | 218 -----------------
 src/modules/usb/msd/main.c            |  65 -----
 src/modules/usb/msd/msd-bo.c          | 104 --------
 src/modules/usb/msd/msd-bo.h          |  99 --------
 src/modules/usb/msd/msd-cbi.c         |  86 -------
 src/modules/usb/msd/msd-cbi.h         |  71 ------
 src/modules/usb/msd/msd.h             | 154 ------------
 src/modules/usb/msd/rpc.c             |  89 -------
 src/modules/usb/msd/scsi.c            | 240 ------------------
 src/modules/usb/msd/scsi.h            | 219 -----------------
 src/modules/usb/msd/usb-lib.c         | 207 ----------------
 src/modules/usb/msd/usb-lib.h         | 124 ----------
 src/modules/usb/uhci/Makefile.all     |   8 -
 src/modules/usb/uhci/ctrl.c           |  96 --------
 src/modules/usb/uhci/init.c           | 265 --------------------
 src/modules/usb/uhci/main.c           |  73 ------
 src/modules/usb/uhci/rpc.c            | 297 -----------------------
 src/modules/usb/uhci/trans.c          | 316 ------------------------
 src/modules/usb/uhci/uhci.h           | 269 --------------------
 src/modules/usb/usb1/Makefile.all     |   8 -
 src/modules/usb/usb1/detect.c         | 444 ----------------------------------
 src/modules/usb/usb1/hub.c            | 180 --------------
 src/modules/usb/usb1/main.c           |  59 -----
 src/modules/usb/usb1/rpc.c            | 350 ---------------------------
 src/modules/usb/usb1/transfer.c       | 123 ----------
 src/modules/usb/usb1/usb.h            | 209 ----------------
 34 files changed, 5231 deletions(-)
 delete mode 100644 src/modules/usb/include/usb-ddrv.h
 delete mode 100644 src/modules/usb/include/usb-hc.h
 delete mode 100644 src/modules/usb/include/usb-hub.h
 delete mode 100644 src/modules/usb/include/usb-server.h
 delete mode 100644 src/modules/usb/include/usb-structs.h
 delete mode 100644 src/modules/usb/include/usb-trans.h
 delete mode 100644 src/modules/usb/msd/Makefile.all
 delete mode 100644 src/modules/usb/msd/init.c
 delete mode 100644 src/modules/usb/msd/lostio.c
 delete mode 100644 src/modules/usb/msd/main.c
 delete mode 100644 src/modules/usb/msd/msd-bo.c
 delete mode 100644 src/modules/usb/msd/msd-bo.h
 delete mode 100644 src/modules/usb/msd/msd-cbi.c
 delete mode 100644 src/modules/usb/msd/msd-cbi.h
 delete mode 100644 src/modules/usb/msd/msd.h
 delete mode 100644 src/modules/usb/msd/rpc.c
 delete mode 100644 src/modules/usb/msd/scsi.c
 delete mode 100644 src/modules/usb/msd/scsi.h
 delete mode 100644 src/modules/usb/msd/usb-lib.c
 delete mode 100644 src/modules/usb/msd/usb-lib.h
 delete mode 100644 src/modules/usb/uhci/Makefile.all
 delete mode 100644 src/modules/usb/uhci/ctrl.c
 delete mode 100644 src/modules/usb/uhci/init.c
 delete mode 100644 src/modules/usb/uhci/main.c
 delete mode 100644 src/modules/usb/uhci/rpc.c
 delete mode 100644 src/modules/usb/uhci/trans.c
 delete mode 100644 src/modules/usb/uhci/uhci.h
 delete mode 100644 src/modules/usb/usb1/Makefile.all
 delete mode 100644 src/modules/usb/usb1/detect.c
 delete mode 100644 src/modules/usb/usb1/hub.c
 delete mode 100644 src/modules/usb/usb1/main.c
 delete mode 100644 src/modules/usb/usb1/rpc.c
 delete mode 100644 src/modules/usb/usb1/transfer.c
 delete mode 100644 src/modules/usb/usb1/usb.h

diff --git a/src/modules/usb/include/usb-ddrv.h b/src/modules/usb/include/usb-ddrv.h
deleted file mode 100644
index d213cd7..0000000
--- a/src/modules/usb/include/usb-ddrv.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef USB_DDRV_H
-#define USB_DDRV_H
-
-#include <stdbool.h>
-
-
-#define RPC_USB_DDRV_PLUG_FNN "USB_DDRV_PLUG"
-
-// Ein Wert ist -1, wenn der Treiber alle Geräte annimmt.
-struct usb_handle_devs {
-    int vendor_id, device_id;
-    int class, subclass, protocol;
-};
-
-// Wird vom USB-Bustreiber an einen Gerätetreiber weitergegeben, wenn ein Gerät
-// gefunden wurde
-struct usb_prov_dev {
-    // Handelt es sich beim Gerät um ein Interface und nicht um ein physisches
-    // Gerät, so ist dies true
-    bool is_interface;
-    // Geräte-ID (vom USB-Bustreiber zu verwenden)
-    void* dev_id;
-    // Interface-ID
-    int interface_id;
-    // Typ des Geräts
-    struct usb_handle_devs type;
-};
-
-#endif
diff --git a/src/modules/usb/include/usb-hc.h b/src/modules/usb/include/usb-hc.h
deleted file mode 100644
index a70598a..0000000
--- a/src/modules/usb/include/usb-hc.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef USB_HC_H
-#define USB_HC_H
-
-#include <stdbool.h>
-#include <sys/types.h>
-
-#include "usb-structs.h"
-#include "usb-trans.h"
-
-// Beschreibt einen USB-Hostcontroller
-struct usb_hc {
-    // Anzahl der Rootports
-    int root_ports;
-    // Für den HCD frei verfügbar
-    void* hcd_avail;
-    // PID des HCD
-    pid_t pid;
-    // USB-Adressenzähler
-    int addr_counter;
-};
-
-// RPC-Funktion für USB-Bustreiber (vorrangig Roothubfunktionen)
-#define RPC_USB_HC_CONTROL_FNN "HC_CONTROL"
-// RPC-Funktion für USB-Bustreiber (vorrangig Transferfunktionen)
-#define RPC_USB_HC_TRANSFER_FNN "HC_TRANSFER"
-
-// PIDs für IN, OUT und SETUP
-#define USB_OUT   0xE1
-#define USB_IN    0x69
-#define USB_SETUP 0x2D
-
-// Roothubfunktionen
-enum usb_hc_ctrl_rt {
-    // Portstatus überprüfen
-    HC_CTRL_SCAN_PORT = 0,
-    // Port deaktivieren
-    HC_CTRL_DSBL_PORT,
-    // Resetsignal treiben
-    HC_CTRL_RESET,
-    // Pipe erstellen
-    HC_CTRL_ADD_PIPE
-};
-
-
-// Allgemeiner HC_CONTROL-Request
-struct usb_hc_ctrl_req {
-    // Funktion
-    enum usb_hc_ctrl_rt type;
-    // Hostcontroller
-    struct usb_hc hc;
-};
-
-// Rootport überprüfen
-struct usb_hc_ctrl_scan {
-    struct usb_hc_ctrl_req req;
-    // Portindex
-    int port;
-};
-
-// Rootport deaktivieren
-struct usb_hc_ctrl_dsbl {
-    struct usb_hc_ctrl_req req;
-    // Portindex
-    int port;
-};
-
-// Resetsignal an einem Rootport treiben
-struct usb_hc_ctrl_rst {
-    struct usb_hc_ctrl_req req;
-    // Portindex
-    int port;
-};
-
-// Pipe hinzufügen
-struct usb_hc_ctrl_appe {
-    struct usb_hc_ctrl_req req;
-    // Informationen zur neuen Pipe
-    struct usb_trans_pipe pipe;
-};
-
-// Allgemeine Transferanfrage
-struct usb_hc_trs {
-    // Funktion
-    enum usb_trans_type type;
-    // Hostcontroller
-    struct usb_hc hc;
-    // Pipe, durch die der Transfer laufen soll
-    struct usb_trans_pipe pipe;
-};
-
-// Controltransfer
-struct usb_hc_trs_ctrl {
-    struct usb_hc_trs trs;
-    // SETUP-Paket
-    struct usb_setup_packet setup;
-    // SHM-Bereich für die Datenphase
-    uint32_t shm;
-};
-
-// Bulktransfer
-struct usb_hc_trs_bulk {
-    struct usb_hc_trs trs;
-    // true zum Empfangen
-    bool receive;
-    // Anzahl der zu übertragenden Bytes
-    size_t length;
-    // SHM-Bereich für die übertragenen Daten
-    uint32_t shm;
-};
-
-#endif
diff --git a/src/modules/usb/include/usb-hub.h b/src/modules/usb/include/usb-hub.h
deleted file mode 100644
index 478c2bc..0000000
--- a/src/modules/usb/include/usb-hub.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef USB_HUB_H
-#define USB_HUB_H
-
-// In den unteren acht Bits wird die Geschwindigkeit gespeichert (viel Platz
-// für zukünftige Neuerungen...)
-#define USB_HUB_SPEED      0xFF
-// Low Speed
-#define USB_HUB_LOW_SPEED  (1 << 0)
-// Full Speed
-#define USB_HUB_FULL_SPEED (1 << 1)
-// High Speed
-#define USB_HUB_HIGH_SPEED (1 << 2)
-
-// Gerät angeschlossen
-#define USB_HUB_DEVICE     (1 << 8)
-// Status hat sich seit der letzten Anfrage verändert
-#define USB_HUB_CHANGE     (1 << 9)
-
-#endif
diff --git a/src/modules/usb/include/usb-server.h b/src/modules/usb/include/usb-server.h
deleted file mode 100644
index 6a98707..0000000
--- a/src/modules/usb/include/usb-server.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef USB_SERVER_H
-#define USB_SERVER_H
-
-#include <stdbool.h>
-#include <stdint.h>
-
-#include "usb-ddrv.h"
-#include "usb-server.h"
-#include "usb-structs.h"
-#include "usb-trans.h"
-
-// Funktion zum Registrieren von Hostcontrollern
-#define RPC_USB_SV_REGHC_FNN "HCD_REG"
-// Funktion zum Registrieren von Gerätetreibern
-#define RPC_USB_SV_REGDD_FNN "DDRV_REG"
-// Funktion zur Steuerung von Geräten (Daten austauschen, etc.)
-#define RPC_USB_SV_DEVCT_FNN "DEV_CTL"
-
-// Beschreibt eine USB-Pipe
-struct usb_pipe {
-    // Da die von normalen Treibern sowieso nicht dereferenziert werden dürfen,
-    // können diese Strukturen auch undefiniert bleiben.
-    // USB-Gerät (nur für den Bustreiber)
-    struct usb_device* dev;
-    // Endpunktdeskriptor (nur für den Bustreiber)
-    struct usb_endpoint_descriptor* ep;
-
-    // Pipe, zur Kommunikation mit dem Hostcontroller
-    struct usb_trans_pipe trs;
-};
-
-// Funktionen für DEV_CTRL (mit Rückgabetypen)
-enum usb_devctrl_reqtype {
-    // Gibt Anzahl der Endpunkte zurück
-    USB_DC_NUM_ENDPOINTS = 0, // int
-    // Gibt die Interface-ID zurück
-    USB_DC_GET_IFC_ID, // int
-    // Gibt den Endpunktdeskriptor zurück
-    USB_DC_GET_ENDPOINT, // response
-    // Gibt eine Pipe zurück (und erstellt sie)
-    USB_DC_GET_PIPE, // response
-    // Entstallt eine Pipe/den Endpunkt
-    USB_DC_CLEAR_HALT, // int
-    // Führt einen Controltransfer durch
-    USB_DC_TRSF_CONTROL, // int
-    // Führt einen Bulktransfer durch
-    USB_DC_TRSF_BULK // int
-};
-
-// Allgemeine Anfrage für DEV_CTRL
-struct usb_devctrl_req {
-    // Typ der Anrage
-    enum usb_devctrl_reqtype type;
-};
-
-// Gibt die Anzahl der Endpunkte zurück
-struct usb_devctrl_gne {
-    struct usb_devctrl_req req;
-    // Abzufragendes USB-Gerät
-    struct usb_prov_dev dev;
-};
-
-// Gibt die Interface-ID zurück
-struct usb_devctrl_gii {
-    struct usb_devctrl_req req;
-    // Abzufrasgendes USB-Gerät
-    struct usb_prov_dev dev;
-};
-
-// Gibt den Endpunktdeskriptor zurück
-struct usb_devctrl_gep {
-    struct usb_devctrl_req req;
-    // USB-Gerät
-    struct usb_prov_dev dev;
-    // Nummer des Endpunkts (nicht die ID)
-    int ep_number;
-};
-
-// Erstellt eine USB-Pipe und gibt sie zurück
-struct usb_devctrl_gpp {
-    struct usb_devctrl_req req;
-    // USB-Gerät
-    struct usb_prov_dev dev;
-    // Nummer des Zielendpunkts
-    int ep_number;
-};
-
-// Entstallt eine Pipe resp. den Endpunkt
-struct usb_devctrl_clh {
-    struct usb_devctrl_req req;
-    // USB-Pipe
-    struct usb_pipe pipe;
-};
-
-// Führt einen Controltransfer durch
-struct usb_devctrl_tct {
-    struct usb_devctrl_req req;
-    // Ist EP0 das Ziel, so muss dev_id auf den Wert aus usb_prov_dev gesetzt
-    // werden, sonst pipe auf die entsprechende USB-Pipe.
-    union {
-        struct usb_pipe pipe;
-        void* dev_id;
-    } dst;
-    // true, wenn durch die Default Control Pipe übertragen werden soll
-    bool ep0;
-    // SETUP-Paket
-    struct usb_setup_packet setup;
-    // SHM-Bereich für die Datenphase
-    uint32_t shm;
-};
-
-// Führt einen Bulktransfer durch
-struct usb_devctrl_tbk {
-    struct usb_devctrl_req req;
-    // USB-Pipe
-    struct usb_pipe pipe;
-    // Anzahl der zu übertragenden Bytes
-    size_t length;
-    // SHM-Bereich für die Daten
-    uint32_t shm;
-};
-
-#endif
diff --git a/src/modules/usb/include/usb-structs.h b/src/modules/usb/include/usb-structs.h
deleted file mode 100644
index f0b5927..0000000
--- a/src/modules/usb/include/usb-structs.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef USB_STRUCTS_H
-#define USB_STRUCTS_H
-
-#include <stdint.h>
-
-#define USB_LOW_SPEED  USB_HUB_LOW_SPEED
-#define USB_FULL_SPEED USB_HUB_FULL_SPEED
-#define USB_HIGH_SPEED USB_HUB_HIGH_SPEED
-
-enum usb_state {
-    USB_ATTACHED = 0,
-    USB_POWERED,
-    USB_DEFAULT,
-    USB_ADDRESS,
-    USB_CONFIGURED,
-    USB_SUSPENDED
-};
-
-struct usb_setup_packet {
-    uint8_t type;
-    uint8_t request;
-    uint16_t value;
-    uint16_t index;
-    uint16_t length;
-} __attribute__((packed));
-
-struct usb_descriptor {
-    uint8_t length;
-    uint8_t desc_type;
-} __attribute__((packed));
-
-
-#define USB_SETUP_OUT     (0 << 7)
-#define USB_SETUP_IN      (1 << 7)
-#define USB_SETUP_REQ_STD (0 << 5)
-#define USB_SETUP_REQ_CLS (1 << 5)
-#define USB_SETUP_REQ_VDR (2 << 5)
-#define USB_SETUP_REC_DEV 0
-#define USB_SETUP_REC_IF  1
-#define USB_SETUP_REC_EP  2
-#define USB_SETUP_REC_OTH 3
-
-enum usb_setup_requst {
-    USB_GET_STATUS = 0,
-    USB_CLEAR_FEATURE = 1,
-    USB_SET_FEATURE = 3,
-    USB_SET_ADDRESS = 5,
-    USB_GET_DESCRIPTOR = 6,
-    USB_SET_DESCRIPTOR = 7,
-    USB_GET_CONFIGURATION = 8,
-    USB_SET_CONFIGURATION = 9,
-    USB_GET_INTERFACE = 10,
-    USB_SET_INTERFACE = 11,
-    USB_SYNC_FRAME = 12
-};
-
-enum usb_features {
-    USB_ENDPOINT_HALT = 0,
-    USB_DEVICE_REMOTE_WAKEUP = 1,
-    USB_TEST_MODE = 2
-};
-
-enum usb_setup_descriptor {
-    USB_DESC_DEVICE = 1 << 8,
-    USB_DESC_CONFIGURATION = 2 << 8,
-    USB_DESC_STRING = 3 << 8,
-    USB_DESC_INTERFACE = 4 << 8,
-    USB_DESC_ENDPOINT = 5 << 8,
-    USB_DESC_DEVICE_QUALIFIER = 6 << 8,
-    USB_DESC_OTHER_SPEED_CONFIGURATION = 7 << 8,
-    USB_DESC_INTERFACE_POWER = 8 << 8,
-
-    USB_DESC_HUB = 41 << 8
-};
-
-struct usb_device_descriptor {
-    struct usb_descriptor desc;
-    uint16_t bcd_usb;
-    uint8_t class, subclass, protocol;
-    uint8_t mps0;
-    uint16_t vendor_id, device_id;
-    uint16_t bcd_device;
-    uint8_t i_manufacturer, i_product, i_serial;
-    uint8_t num_configurations;
-} __attribute__((packed));
-
-struct usb_config_descriptor
-{
-    struct usb_descriptor desc;
-    uint16_t total_length;
-    uint8_t num_interfaces;
-    uint8_t configuration_value;
-    uint8_t i_configuration;
-    unsigned rsvd0         : 5;
-    unsigned remote_wakeup : 1;
-    unsigned self_powered  : 1;
-    unsigned rsvd1         : 1;
-    uint8_t max_power;
-} __attribute__((packed));
-
-struct usb_interface_descriptor
-{
-    struct usb_descriptor desc;
-    uint8_t interface_number;
-    uint8_t alternate_setting;
-    uint8_t num_endpoints;
-    uint8_t class, subclass, protocol;
-    uint8_t i_interface;
-} __attribute__((packed));
-
-#define USB_EP_CONTROL     0
-#define USB_EP_ISOCHRONOUS 1
-#define USB_EP_BULK        2
-#define USB_EP_INTERRUPT   3
-
-struct usb_endpoint_descriptor {
-    struct usb_descriptor desc;
-    unsigned number    : 4;
-    unsigned rsvd1     : 3;
-    unsigned direction : 1;
-    unsigned type  : 2;
-    unsigned sync  : 2;
-    unsigned usage : 2;
-    unsigned rsvd2 : 2;
-    unsigned mps       : 11;
-    unsigned trans_opp : 2;
-    unsigned rsvd3     : 3;
-    uint8_t interval;
-} __attribute__((packed));
-
-struct usb_hub_descriptor {
-    struct usb_descriptor desc;
-    uint8_t nbr_ports;
-    unsigned power_mode : 2;
-    unsigned compound   : 1;
-    unsigned oc_protect : 2;
-    unsigned tt         : 2;
-    unsigned pindicator : 1;
-    uint8_t rsvd;
-    uint8_t pwr_on_2_pwr_good;
-    uint8_t hub_contr_current;
-    // Die folgenden Felder haben eine variable Größe
-} __attribute__((packed));
-
-#endif
-
diff --git a/src/modules/usb/include/usb-trans.h b/src/modules/usb/include/usb-trans.h
deleted file mode 100644
index c5d3a1f..0000000
--- a/src/modules/usb/include/usb-trans.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef USB_TRANS_H
-#define USB_TRANS_H
-
-#include <stdbool.h>
-
-#include "usb-hub.h"
-
-// Übertragunsart
-enum usb_trans_type {
-    USB_TRST_CONTROL     = 0,
-    USB_TRST_ISOCHRONOUS = 1,
-    USB_TRST_BULK        = 2,
-    USB_TRST_INTERRUPT   = 3
-};
-
-// USB-Pipe für die Kommunikation mit dem Hostcontroller
-struct usb_trans_pipe {
-    // USB-Adresse (0 bis 127)
-    int usb_addr;
-    // Endpunkt-ID
-    int ep_id;
-    // MPS des Endpunkts
-    int mps;
-
-    // Typ der Pipe
-    enum usb_trans_type type;
-    // Geschwindigkeit des Geräts
-    int speed;
-
-    // Toggle-Bit
-    int toggle;
-    // true, wenn der Endpunkt gestallt ist
-    bool stalled;
-};
-
-#endif
diff --git a/src/modules/usb/msd/Makefile.all b/src/modules/usb/msd/Makefile.all
deleted file mode 100644
index 0e16a2a..0000000
--- a/src/modules/usb/msd/Makefile.all
+++ /dev/null
@@ -1,8 +0,0 @@
-shopt -s extglob
-source $LOST_BUILDMK_ROOT/config.sh
-
-CC="$CC -I../include"
-
-echo "LD   $1/modules/usb-msd"
-$LOST_TOOLS_LD $LDSCRIPT -ousb-msd.mod  *.o --start-group $2 --end-group
-$LOST_TOOLS_STRIP -s usb-msd.mod -o $1/modules/usb-msd
diff --git a/src/modules/usb/msd/init.c b/src/modules/usb/msd/init.c
deleted file mode 100644
index 7670194..0000000
--- a/src/modules/usb/msd/init.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "msd.h"
-#include "msd-bo.h"
-#include "msd-cbi.h"
-#include "usb-lib.h"
-#include "usb-structs.h"
-#include "usb-trans.h"
-
-void got_bo_msd(struct usb_prov_dev* dev);
-void got_cbi_msd(struct usb_prov_dev* dev);
-
-int is_valid_msd(struct usb_prov_dev* dev)
-{
-    if (dev->type.protocol == 0x50) { // Bulk-only
-        return 1;
-    } else if ((dev->type.subclass == 0x04) && !dev->type.protocol) { // UFI/CBI
-        return 1;
-    }
-
-    return 0;
-}
-
-void got_msd(struct usb_prov_dev* dev)
-{
-    if (dev->type.protocol == 0x50) { // Bulk-only
-        got_bo_msd(dev);
-    } else if ((dev->type.subclass == 0x04) && !dev->type.protocol) { // UFI/CBI
-        got_cbi_msd(dev);
-    } else {
-        abort();
-    }
-}
-
-void got_bo_msd(struct usb_prov_dev* dev)
-{
-    int endpoints = usb_get_number_of_endpoints(dev);
-    int ifc_id = usb_get_interface_id(dev);
-    struct usb_endpoint_descriptor* epd = calloc(1, sizeof(*epd));
-    struct usb_endpoint_descriptor* bulk_in = malloc(sizeof(*bulk_in));
-    struct usb_endpoint_descriptor* bulk_out = malloc(sizeof(*bulk_out));
-    int bin = -1, bon = -1;
-
-    int i;
-    for (i = 0; i < endpoints; i++) {
-        usb_get_endpoint_info(dev, i, epd);
-
-        if (epd->type == USB_EP_BULK) {
-            if (epd->direction) {
-                memcpy(bulk_in, epd, sizeof(*epd));
-                bin = i;
-            } else {
-                memcpy(bulk_out, epd, sizeof(*epd));
-                bon = i;
-            }
-        }
-    }
-
-    free(epd);
-
-    if ((bin == -1) || (bon == -1)) {
-        free(bulk_in);
-        free(bulk_out);
-        return;
-    }
-
-    struct usb_pipe* bip = calloc(1, sizeof(*bip));
-    struct usb_pipe* bop = calloc(1, sizeof(*bop));
-
-    usb_create_pipe(dev, bin, bip);
-    usb_create_pipe(dev, bon, bop);
-
-    int max_lun = 0;
-    usb_control_transfer(dev, NULL, &(struct usb_setup_packet){
-            .type = USB_SETUP_IN | USB_SETUP_REQ_CLS | USB_SETUP_REC_IF,
-            .request = 0xFE, // GET MAX LUN
-            .index = ifc_id,
-            .length = 1,
-        }, &max_lun);
-
-    for (i = 0; i <= max_lun; i++) {
-        struct msc_bo_dev* new = calloc(1, sizeof(*new));
-
-        new->gen.lun = i;
-        new->gen.issue_scsi_cmd = &msd_bo_issue_scsi_cmd;
-        new->gen.send = &msd_bo_send;
-        new->gen.recv = &msd_bo_recv;
-
-        new->bulk_in = bulk_in;
-        new->bulk_out = bulk_out;
-
-        new->bip = bip;
-        new->bop = bop;
-
-        provide_msd(&new->gen);
-    }
-}
-
-void got_cbi_msd(struct usb_prov_dev* dev)
-{
-    int endpoints = usb_get_number_of_endpoints(dev);
-    int ifc_id = usb_get_interface_id(dev);
-    struct usb_endpoint_descriptor* epd = calloc(1, sizeof(*epd));
-    struct usb_endpoint_descriptor* bulk_in = malloc(sizeof(*bulk_in));
-    struct usb_endpoint_descriptor* bulk_out = malloc(sizeof(*bulk_out));
-    struct usb_endpoint_descriptor* interrupt = malloc(sizeof(*interrupt));
-    int bin = -1, bon = -1, ien = -1;
-
-    int i;
-    for (i = 0; i < endpoints; i++) {
-        usb_get_endpoint_info(dev, i, epd);
-
-        if (epd->type == USB_EP_BULK) {
-            if (epd->direction) {
-                memcpy(bulk_in, epd, sizeof(*epd));
-                bin = i;
-            } else {
-                memcpy(bulk_out, epd, sizeof(*epd));
-                bon = i;
-            }
-        } else if (epd->type == USB_EP_INTERRUPT) {
-            memcpy(interrupt, epd, sizeof(*epd));
-            ien = i;
-        }
-    }
-
-    free(epd);
-
-    if (dev->type.protocol || (ien == -1)) {
-        free(interrupt);
-        ien = -1;
-    }
-
-    if ((bin == -1) || (bon == -1)) {
-        free(bulk_in);
-        free(bulk_out);
-        return;
-    }
-
-    struct usb_pipe* bip = calloc(1, sizeof(*bip));
-    struct usb_pipe* bop = calloc(1, sizeof(*bop));
-    struct usb_pipe* ip;
-
-    usb_create_pipe(dev, bin, bip);
-    usb_create_pipe(dev, bon, bop);
-
-    if (ien != -1) {
-        ip = calloc(1, sizeof(*ip));
-        usb_create_pipe(dev, ien, ip);
-    }
-
-    struct msc_cbi_dev* new = calloc(1, sizeof(*new));
-
-    new->gen.lun = 0;
-    new->gen.issue_scsi_cmd = &msd_cbi_issue_scsi_cmd;
-    new->gen.send = &msd_cbi_send;
-    new->gen.recv = &msd_cbi_recv;
-
-    new->dev = dev;
-    new->ifc_id = ifc_id;
-
-    new->bulk_in = bulk_in;
-    new->bulk_out = bulk_out;
-
-    new->bip = bip;
-    new->bop = bop;
-
-    if (ien != -1) {
-        new->interrupt = interrupt;
-        new->ip = ip;
-    }
-
-    provide_msd(&new->gen);
-}
diff --git a/src/modules/usb/msd/lostio.c b/src/modules/usb/msd/lostio.c
deleted file mode 100644
index 6a2b503..0000000
--- a/src/modules/usb/msd/lostio.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <init.h>
-#include <lostio.h>
-
-#include "msd.h"
-
-static size_t msd_read(lostio_filehandle_t* liofh, void* dest,
-    size_t blocksize, size_t blockcount);
-static size_t msd_write(lostio_filehandle_t* liofh, size_t blocksize,
-    size_t blockcount, void* data);
-static int msd_seek(lostio_filehandle_t* liofh, uint64_t offset, int origin);
-
-struct partition {
-    struct msc_gen_dev* dev;
-    uint64_t block_offset;
-    uint64_t blocks;
-};
-
-struct parttbl_entry {
-    uint8_t active;
-    uint8_t chs_start[3];
-    uint8_t type;
-    uint8_t chs_end[3];
-    uint32_t start;
-    uint32_t size;
-} __attribute__((packed));
-
-void init_lostio_interface(void)
-{
-    lostio_init();
-    lostio_type_ramfile_use();
-    lostio_type_directory_use();
-
-    typehandle_t* msds = calloc(1, sizeof(*msds));
-
-    msds->id = 42;
-    msds->read = &msd_read;
-    msds->write = &msd_write;
-    msds->seek = &msd_seek;
-
-    lostio_register_typehandle(msds);
-}
-
-static void detect_partitions(int msd_number, struct msc_gen_dev* dev)
-{
-    uint8_t* bootsec = malloc(512);
-
-    msd_scsi_read(dev, 0, bootsec, 1);
-
-    if (*(uint16_t*)&bootsec[510] != 0xAA55) {
-        free(bootsec);
-        return;
-    }
-
-    struct parttbl_entry* ptbl = (struct parttbl_entry*)&bootsec[446];
-
-    int p;
-    for (p = 0; p < 4; p++) {
-        if (ptbl[p].size) {
-            if ((ptbl[p].type == 0x0F) || (ptbl[p].type == 0x85)) {
-                continue;
-            }
-
-            struct partition* part = calloc(1, sizeof(*part));
-            part->dev = dev;
-            part->block_offset = ptbl[p].start;
-            part->blocks = ptbl[p].size;
-
-            char name[13];
-            sprintf(name, "/msd%i_p%i", msd_number, p);
-
-            vfstree_create_node(name, 42, ptbl[p].size * dev->block_size, part,
-                0);
-        }
-    }
-
-    free(bootsec);
-}
-
-void provide_msd(struct msc_gen_dev* dev)
-{
-    static int msds = 0;
-
-    uint64_t bc, bs;
-    if (!msd_scsi_init(dev, &bc, &bs)) {
-        return;
-    }
-
-    printf("[usb-msd] New SCSI block device, %lli %lli-byte blocks: ", bc, bs);
-    uint64_t fs = bc * bs;
-    if (fs >= 10 << 30) {
-        printf("%lli GB\n", fs >> 30);
-    } else if (fs >= 10 << 20) {
-        printf("%lli MB\n", fs >> 20);
-    } else if (fs >= 10 << 10) {
-        printf("%lli kB\n", fs >> 10);
-    } else {
-        printf("%lli B\n", fs);
-    }
-
-    dev->block_size = bs;
-    dev->blocks = bc;
-
-    char name[10];
-    int num = msds++;
-    sprintf(name, "/msd%i", num);
-
-    struct partition* part = calloc(1, sizeof(*part));
-    part->dev = dev;
-    part->blocks = bc;
-
-    vfstree_create_node(name, 42, fs, part, 0);
-
-    // Bei 2880 Sektoren ist es vermutlich eine Diskette (ja, es gibt noch
-    // andere Diskettenarten als 3,5" HD, aber die sind halt selten), und die
-    // hat keine Partitionen (verhindert das Erkennen scheinbarer Partitionen)
-    if (bc != 2880) {
-        detect_partitions(num, dev);
-    }
-
-    // TODO: Das vielleicht erst irgendwie registrieren, wenn alle Geräte
-    // angekommen sind
-    init_service_register("usb-msd");
-
-    uint16_t* mem = calloc(1, 512);
-    msd_scsi_read(dev, 0, mem, 1);
-}
-
-static size_t msd_read(lostio_filehandle_t* liofh, void* dest,
-    size_t blocksize, size_t blockcount)
-{
-    struct partition* part = liofh->node->data;
-    struct msc_gen_dev* dev = part->dev;
-
-    uint64_t begin = liofh->pos / dev->block_size + part->block_offset;
-
-    // Diese Debuginformationen mögen nervig erscheinen, sind aber sehr
-    // wichtig, da man oft nur so erkennen kann, dass überhaupt etwas
-    // geschieht
-    printf("[usb-msd] read from %lli (%i blocks)\n", begin,
-        (blockcount * blocksize + dev->block_size - 1) / dev->block_size);
-    size_t ret = msd_scsi_read(dev, begin, dest,
-        (blockcount * blocksize + dev->block_size - 1) / dev->block_size);
-    msd_seek(liofh, ret, SEEK_CUR);
-
-    return ret;
-}
-
-static size_t msd_write(lostio_filehandle_t* liofh, size_t blocksize,
-    size_t blockcount, void* data)
-{
-    return 0;
-}
-
-static int msd_seek(lostio_filehandle_t* liofh, uint64_t offset, int origin)
-{
-    struct partition* part = liofh->node->data;
-    struct msc_gen_dev* dev = part->dev;
-    uint64_t new_pos = liofh->pos;
-    uint64_t size = part->blocks * dev->block_size;
-
-    switch (origin)  {
-        case SEEK_SET:
-            new_pos = offset;
-            break;
-        case SEEK_CUR:
-            new_pos += offset;
-            break;
-        case SEEK_END:
-            new_pos = size;
-            break;
-    }
-
-    if (new_pos > size) {
-        return -1;
-    } else if (new_pos == size) {
-        liofh->flags |= LOSTIO_FLAG_EOF;
-    } else {
-        liofh->flags &= ~LOSTIO_FLAG_EOF;
-    }
-
-    liofh->pos = new_pos;
-    return 0;
-}
diff --git a/src/modules/usb/msd/main.c b/src/modules/usb/msd/main.c
deleted file mode 100644
index cebca5c..0000000
--- a/src/modules/usb/msd/main.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#include <init.h>
-#include <rpc.h>
-#include <sleep.h>
-#include <syscall.h>
-
-#include "msd.h"
-
-extern pid_t usb_pid;
-
-int main(void)
-{
-    init_messaging();
-    init_lostio_interface();
-
-    // Warten, damit, falls alle Treiber relativ gleichzeitig gestartet werden
-    // (Boot), dieser Prozess nach usb1 (und möglichst vor uhci) weiterläuft
-    msleep(1000);
-
-    usb_pid = init_service_get("usb1");
-    if (!usb_pid)
-    {
-        fprintf(stderr, "You need to start the usb1 driver first.\n");
-        return 1;
-    }
-
-    init_rpc_interface();
-    register_msddrv();
-
-    for (;;) {
-        wait_for_rpc();
-    }
-}
diff --git a/src/modules/usb/msd/msd-bo.c b/src/modules/usb/msd/msd-bo.c
deleted file mode 100644
index 0007b80..0000000
--- a/src/modules/usb/msd/msd-bo.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <errno.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "msd.h"
-#include "msd-bo.h"
-#include "usb-lib.h"
-
-int check_csw(struct msc_bo_dev* dev)
-{
-    struct msd_bo_csw csw;
-
-    int ret = usb_bulk_transfer(dev->bip, &csw, sizeof(csw), true);
-    if (ret) {
-        return ret;
-    }
-
-    // Man könnte wohl noch ein bisschen was überprüfen...
-    // Some checks might be nice...
-    return 0;
-}
-
-int msd_bo_issue_scsi_cmd(struct msc_gen_dev* dev, const void* cmd_buffer,
-    size_t cmd_length, bool receive, size_t req_length)
-{
-    struct msc_bo_dev* bo = (struct msc_bo_dev*)dev;
-
-    if (cmd_length > 16) {
-        cmd_length = 16;
-    }
-
-    struct msd_bo_cbw cbw = {
-        .signature = CBW_SIGNATURE,
-        .data_transfer_length = req_length,
-        .flags = receive ? CBW_IN : CBW_OUT,
-        .lun = dev->lun,
-        .cb_length = cmd_length
-    };
-
-    memcpy(cbw.cb, cmd_buffer, cmd_length);
-
-    int ret = usb_bulk_transfer(bo->bop, &cbw, sizeof(cbw), false);
-    if (ret || req_length) {
-        return ret;
-    }
-
-    return check_csw(bo);
-}
-
-int msd_bo_send(struct msc_gen_dev* dev, const void* buffer, size_t size)
-{
-    struct msc_bo_dev* bo = (struct msc_bo_dev*)dev;
-
-    int ret = usb_bulk_transfer(bo->bop, (void*)buffer, size, false);
-    if (ret) {
-        return ret;
-    }
-
-    return check_csw(bo);
-}
-
-int msd_bo_recv(struct msc_gen_dev* dev, void* buffer, size_t size)
-{
-    struct msc_bo_dev* bo = (struct msc_bo_dev*)dev;
-
-    int ret = usb_bulk_transfer(bo->bip, buffer, size, true);
-    if (ret) {
-        return ret;
-    }
-
-    return check_csw(bo);
-}
diff --git a/src/modules/usb/msd/msd-bo.h b/src/modules/usb/msd/msd-bo.h
deleted file mode 100644
index 49451cb..0000000
--- a/src/modules/usb/msd/msd-bo.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef MSD_BO_H
-#define MSD_BO_H
-
-#include <stdbool.h>
-#include <stddef.h>
-
-#include "msd.h"
-#include "usb-ddrv.h"
-
-#define CBW_IN  0x80
-#define CBW_OUT 0x00
-
-#define CBW_SIGNATURE 0x43425355 //'USBC' => USB command
-#define CSW_SIGNATURE 0x53425355 //'USBS' => USB status
-
-
-// Beschreibt ein MSC-Bulk-Only-Gerät
-struct msc_bo_dev {
-    // Das MSD an sich
-    struct msc_gen_dev gen;
-
-    // Bulk-Endpunkte
-    struct usb_endpoint_descriptor* bulk_in;
-    struct usb_endpoint_descriptor* bulk_out;
-
-    // Pipes zu diesen Endpunkten
-    struct usb_pipe* bip;
-    struct usb_pipe* bop;
-};
-
-// Command Block Wrapper für BO-MSDs
-struct msd_bo_cbw {
-    // CBW_SIGNATURE
-    uint32_t signature;
-    // Ein Wert, der im CSW wiederholt wird
-    uint32_t tag;
-    // Länge des Datentransfers
-    uint32_t data_transfer_length;
-    // Flags (vorrangig Richtung des Transfers)
-    uint8_t flags;
-    // LUN
-    uint8_t lun;
-    // Länge des Befehls
-    uint8_t cb_length;
-    // SCSI-Befehl
-    uint8_t cb[16];
-} __attribute__((packed));
-
-// Command Status Wrapper für BO-MSDs
-struct msd_bo_csw {
-    // CSW_SIGNATURE
-    uint32_t signature;
-    // Tagwert aus dem CBW
-    uint32_t tag;
-    // Größe der Daten, die erwartet, aber nicht übertragen wurden
-    uint32_t data_residue;
-    // Status
-    uint8_t status;
-} __attribute__((packed));
-
-// Sendet einen SCSI-Befehl
-int msd_bo_issue_scsi_cmd(struct msc_gen_dev* dev, const void* buffer,
-    size_t cmd_length, bool receive, size_t req_length);
-// Sendet Daten an das Gerät
-int msd_bo_send(struct msc_gen_dev* dev, const void* buffer, size_t size);
-// Empfängt Daten vom Gerät
-int msd_bo_recv(struct msc_gen_dev* dev, void* buffer, size_t size);
-
-#endif
diff --git a/src/modules/usb/msd/msd-cbi.c b/src/modules/usb/msd/msd-cbi.c
deleted file mode 100644
index 66590fd..0000000
--- a/src/modules/usb/msd/msd-cbi.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <errno.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "msd.h"
-#include "msd-cbi.h"
-#include "usb-lib.h"
-
-int msd_cbi_issue_scsi_cmd(struct msc_gen_dev* dev, const void* cmd_buffer,
-    size_t cmd_length, bool receive, size_t req_length)
-{
-    struct msc_cbi_dev* cbi = (struct msc_cbi_dev*)dev;
-    int8_t cmd[12] = { 0 };
-    struct usb_setup_packet setup = {
-        .type = USB_SETUP_OUT | USB_SETUP_REQ_CLS | USB_SETUP_REC_IF,
-        .request = 0,
-        .value = 0,
-        .index = cbi->ifc_id,
-        .length = sizeof(cmd)
-    };
-
-    if (cmd_length > 12) {
-        cmd_length = 12;
-    }
-
-    memcpy(cmd, cmd_buffer, cmd_length);
-
-    int ret = usb_control_transfer(cbi->dev, NULL, &setup, cmd);
-
-    /*
-    if (ret == -EHOSTDOWN) {
-        // kA, ob das etwas bringt
-        if (receive == true) {
-            usb_clear_halt(cbi->bip);
-        } else {
-            usb_clear_halt(cbi->bop);
-        }
-    }
-    */
-
-    return ret;
-}
-
-int msd_cbi_send(struct msc_gen_dev* dev, const void* buffer, size_t size)
-{
-    struct msc_cbi_dev* cbi = (struct msc_cbi_dev*)dev;
-    return usb_bulk_transfer(cbi->bop, (void*)buffer, size, false);
-}
-
-int msd_cbi_recv(struct msc_gen_dev* dev, void* buffer, size_t size)
-{
-    struct msc_cbi_dev* cbi = (struct msc_cbi_dev*)dev;
-    return usb_bulk_transfer(cbi->bip, buffer, size, true);
-}
diff --git a/src/modules/usb/msd/msd-cbi.h b/src/modules/usb/msd/msd-cbi.h
deleted file mode 100644
index 66ff221..0000000
--- a/src/modules/usb/msd/msd-cbi.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef MSD_CBI_H
-#define MSD_CBI_H
-
-#include <stdbool.h>
-#include <stddef.h>
-
-#include "msd.h"
-#include "usb-ddrv.h"
-
-// Beschreibt ein MSC-CBI-Gerät
-struct msc_cbi_dev {
-    // Das MSD an sich
-    struct msc_gen_dev gen;
-
-    // Das zugrunde liegende USB-Gerät
-    struct usb_prov_dev* dev;
-    // Die Interface-ID (MSDs sind immer Interfaces)
-    int ifc_id;
-
-    // Alle wichtigen Endpunkte (EP0 ist in dev enthalten), interrupt darf NULL
-    // sein
-    struct usb_endpoint_descriptor* bulk_in;
-    struct usb_endpoint_descriptor* bulk_out;
-    struct usb_endpoint_descriptor* interrupt;
-
-    // Die Pipes zu diesen Endpunkten, ip darf NULL sein
-    struct usb_pipe* bip;
-    struct usb_pipe* bop;
-    struct usb_pipe* ip;
-};
-
-
-// Sendet einen SCSI-Befehl
-int msd_cbi_issue_scsi_cmd(struct msc_gen_dev* dev, const void* buffer,
-    size_t cmd_length, bool receive, size_t req_length);
-// Sendet Daten zum Gerät
-int msd_cbi_send(struct msc_gen_dev* dev, const void* buffer, size_t size);
-// Empfängt Daten vom Gerät
-int msd_cbi_recv(struct msc_gen_dev* dev, void* buffer, size_t size);
-
-#endif
diff --git a/src/modules/usb/msd/msd.h b/src/modules/usb/msd/msd.h
deleted file mode 100644
index 3545df0..0000000
--- a/src/modules/usb/msd/msd.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef MSD_H
-#define MSD_H
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "usb-ddrv.h"
-
-// Beschreibt eine LUN eines MSC-Geräts (MSD) im Allgemeinen
-struct msc_gen_dev {
-    // LUN
-    int lun;
-
-    // Größe eines Blocks
-    uint64_t block_size;
-    // Anzahl Blöcke
-    uint64_t blocks;
-
-    /**
-     * Führt einen SCSI-Befehl aus.
-     *
-     * @param dev Zielgerät
-     * @param cmd_buffer Speicherbereich, der den Befehl enthält
-     * @param cmd_length Länge dieses Befehls in Byte
-     * @param receive true, wenn empfangen werden soll
-     * @param req_length Länge der zu übertragenden Daten
-     *
-     * @return 0 bei Erfolg, sonst -errno
-     */
-    int (*issue_scsi_cmd)(struct msc_gen_dev* dev, const void* cmd_buffer,
-        size_t cmd_length, bool receive, size_t req_length);
-
-    /**
-     * Sendet Daten zu einem Gerät.
-     *
-     * @param dev Zielgerät
-     * @param buffer Speicherbereich, der die Daten enthält
-     * @param size Anzahl der zu sendenden Bytes
-     *
-     * @return 0 bei Erfolg, sonst -errno
-     */
-    int (*send)(struct msc_gen_dev* dev, const void* buffer, size_t size);
-
-    /**
-     * Empfängt Daten von einem Gerät.
-     *
-     * @param dev Quellgerät
-     * @param buffer Speicherbereich, in den die Daten gelesen werden sollen
-     * @param size Anzahl der zu empfangenden Bytes
-     *
-     * @return 0 bei Erfolg, sonst -errno
-     */
-    int (*recv)(struct msc_gen_dev* dev, void* buffer, size_t size);
-};
-
-/**
- * Wird von einem RPC-Handler aufgerufen, um zu prüfen, ob das neue Gerät ein
- * MSD ist, mit dem der Treiber etwas anfangen kann.
- *
- * @param dev Neues Gerät
- *
- * @return 1 wenn das Gerät benutzt werden kann, sonst 0
- */
-int is_valid_msd(struct usb_prov_dev* dev);
-
-/**
- * Wird von einem RPC-Handler aufgerufen, sobald ein neues MSD gefunden wurde.
- *
- * @param dev Neues Gerät
- */
-void got_msd(struct usb_prov_dev* dev);
-
-/**
- * Initialisiert das LostIO-Interface.
- */
-void init_lostio_interface(void);
-
-/**
- * Initialisiert das RPC-Interface.
- */
-void init_rpc_interface(void);
-
-/**
- * Initialisiert ein MSD auf SCSI-Ebene.
- *
- * @param dev Das MSD
- * @param blocks Pointer zu einer Variable, in die die Anzahl der vorhandenen
- *               Blöcke geschrieben wird
- * @param bsize Pointer zu einer Variable, in die die Größe eines Blocks
- *              geschrieben wird
- *
- * @return 1 bei Erfolg, sonst 0
- */
-int msd_scsi_init(struct msc_gen_dev* dev, uint64_t* blocks,
-    uint64_t* bsize);
-
-/**
- * Liest von einem MSD per SCSI.
- *
- * @param dev Das MSD
- * @param start_lba LBA des ersten zu lesenden Blocks
- * @param dest Zielspeicherbereich
- * @param blocks Anzahl der zu lesenden Blöcke
- *
- * @return Anzahl der gelesenen Bytes
- */
-size_t msd_scsi_read(struct msc_gen_dev* dev, uint64_t start_lba, void* dest,
-    uint64_t blocks);
-
-/**
- * Wird von einer MSD-spezifischen Initialisierungsroutine aufgerufen, um ein
- * für die SCSI-Initialisierung vorbereitetes MSD bereitzustellen.
- *
- * @param dev Das neue Gerät
- */
-void provide_msd(struct msc_gen_dev* dev);
-
-/**
- * Registriert diesen Treiber beim USB-Bustreiber.
- */
-void register_msddrv(void);
-
-#endif
diff --git a/src/modules/usb/msd/rpc.c b/src/modules/usb/msd/rpc.c
deleted file mode 100644
index d54fa01..0000000
--- a/src/modules/usb/msd/rpc.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <errno.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include <ports.h>
-#include <rpc.h>
-#include <syscall.h>
-
-#include "msd.h"
-#include "usb-ddrv.h"
-#include "usb-server.h"
-
-extern pid_t usb_pid;
-
-void msd_got_device_handler(pid_t src, uint32_t corr_id, size_t length,
-    void* data)
-{
-    struct usb_prov_dev* pd;
-    int ret;
-
-    if (length < sizeof(*pd)) {
-        rpc_send_int_response(src, corr_id, 0);
-        return;
-    }
-
-    pd = malloc(sizeof(*pd));
-    memcpy(pd, data, sizeof(*pd));
-
-    ret = is_valid_msd(pd);
-    rpc_send_int_response(src, corr_id, ret);
-    if (ret) {
-        got_msd(pd);
-    }
-
-}
-
-void init_rpc_interface(void)
-{
-    register_message_handler(RPC_USB_DDRV_PLUG_FNN, &msd_got_device_handler);
-}
-
-void register_msddrv(void)
-{
-    struct usb_handle_devs hd = {
-        .vendor_id = -1,
-        .device_id = -1,
-        .class = 8, // MSC
-        .subclass = -1,
-        .protocol = -1
-    };
-
-    if (!rpc_get_int(usb_pid, RPC_USB_SV_REGDD_FNN, sizeof(hd), (char*)&hd)) {
-        fprintf(stderr, "Could not register USB MSD driver.\n");
-    }
-}
diff --git a/src/modules/usb/msd/scsi.c b/src/modules/usb/msd/scsi.c
deleted file mode 100644
index 5a4e007..0000000
--- a/src/modules/usb/msd/scsi.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stddef.h>
-#include <stdio.h>
-
-#include "msd.h"
-#include "scsi.h"
-
-const char *dev_type[] =
-{
-    "magnetic disk",
-    "magnetic tape",
-    "printer",
-    "processor",
-    "write-once device",
-    "CD-ROM",
-    "scanner",
-    "optical medium",
-    "medium changer",
-    "communications device",
-    "?",
-    "?",
-    "RAID",
-    "enclosure services device",
-    "magnetic disk (simplified)",
-    "card reader/writer (optical)",
-    "?",
-    "object-based storage",
-    "automation/drive interface",
-    "?",
-    "?",
-    "?",
-    "?",
-    "?",
-    "?",
-    "?",
-    "?",
-    "?",
-    "?",
-    "?",
-    "well known LUN",
-    "?"
-};
-
-static int do_pkt(struct msc_gen_dev* dev, int receive, void* buffer1,
-    size_t length1, void* buffer2, size_t length2)
-{
-    while (dev->issue_scsi_cmd(dev, buffer1, length1, !!(receive == 1),
-        length2))
-    {
-        struct scsi_sense sense;
-        struct scsi_cmd_request_sense req_sense = {
-            .cmd = {
-                .operation = SCSI_REQUEST_SENSE
-            },
-            .alloc_len = sizeof(sense),
-            .lun = dev->lun
-        };
-
-        if (dev->issue_scsi_cmd(dev, &req_sense, sizeof(req_sense), true,
-            sizeof(sense)))
-        {
-            fprintf(stderr, "[usb-msd] Could not request sense\n");
-            return -1;
-        }
-
-        if (dev->recv(dev, &sense, sizeof(sense))) {
-            fprintf(stderr, "[usb-msd] Could not sense\n");
-            return -1;
-        }
-    }
-
-    if (receive == 1) {
-        return dev->recv(dev, buffer2, length2);
-    } else if (!receive) {
-        return dev->send(dev, buffer2, length2);
-    }
-
-    return 0;
-}
-
-int msd_scsi_init(struct msc_gen_dev* dev, uint64_t* blocks, uint64_t* bsize)
-{
-    struct scsi_inq_answer inq_ans;
-    struct scsi_cmd_inquiry inq = {
-        .cmd = {
-            .operation = SCSI_INQUIRY
-        },
-        .alloc_len = htobe16(sizeof(inq_ans)),
-        .lun = dev->lun
-    };
-
-    if (do_pkt(dev, 1, &inq, sizeof(inq), &inq_ans, sizeof(inq_ans))) {
-        return 0;
-    }
-
-    printf("[usb-msd] LUN %i: %s, ", dev->lun, dev_type[inq_ans.dev_type]);
-
-    int last;
-    for (last = (int)sizeof(inq_ans.vendor) - 1; last >= 0; last--) {
-        if (inq_ans.vendor[last] != ' ') {
-            break;
-        }
-    }
-
-    last++;
-
-    int i;
-
-    if (last) {
-        for (i = 0; i < last; i++) {
-            printf("%c", inq_ans.vendor[i]);
-        }
-        printf(" ");
-    }
-
-
-    for (last = (int)sizeof(inq_ans.product) - 1; last >= 0; last--) {
-        if (inq_ans.product[last] != ' ') {
-            break;
-        }
-    }
-
-    last++;
-
-    for (i = 0; i < last; i++) {
-        printf("%c", inq_ans.product[i]);
-    }
-    printf("\n");
-
-    // Erklär mir mal einer, wieso man das braucht
-    // I'd appreciate any explanation why this is required
-    int8_t zero[6] = { 0 };
-    if (do_pkt(dev, -1, &zero, sizeof(zero), NULL, 0)) {
-        return 0;
-    }
-
-    uint32_t cap_ans[2];
-    struct scsi_cmd_read_capacity cap = {
-        .cmd = {
-            .operation = SCSI_READ_CAPACITY
-        }
-    };
-
-    if (do_pkt(dev, 1, &cap, sizeof(cap), &cap_ans, sizeof(cap_ans))) {
-        return 0;
-    }
-
-    *blocks = (uint64_t)betoh32(cap_ans[0]) + 1LL;
-    *bsize = betoh32(cap_ans[1]);
-
-    return 1;
-}
-
-#define SCSI_READ 10
-
-size_t msd_scsi_read(struct msc_gen_dev* dev, uint64_t start_lba, void* dest,
-    uint64_t blocks)
-{
-    #if SCSI_READ == 10
-    struct scsi_cmd_read10 r10 = {
-        .cmd = {
-            .operation = SCSI_READ10
-        },
-        .lun = dev->lun,
-        .lba = htobe32(start_lba),
-        .length = htobe16(blocks)
-    };
-    #elif SCSI_READ == 6
-    struct scsi_cmd_read6 r6 = {
-        .cmd = {
-            .operation = SCSI_READ6
-        },
-        .lun = dev->lun,
-        .lba_lo = htobe16(start_lba),
-        .lba_hi = start_lba >> 16,
-        .length = blocks
-    };
-    #else
-    struct scsi_cmd_read12 r12 = {
-        .cmd = {
-            .operation = SCSI_READ12
-        },
-        .lun = dev->lun,
-        .lba = htobe32(start_lba),
-        .length = htobe32(blocks)
-    };
-    #endif
-
-    #if SCSI_READ == 10
-    if ((start_lba >> 32) || (blocks >> 16)) {
-    #elif SCSI_READ == 6
-    if ((start_lba >> 21) || (blocks >> 8)) {
-    #else
-    if ((start_lba >> 32) || (blocks >> 32)) {
-    #endif
-        return 0;
-    }
-
-    #if SCSI_READ == 10
-    int ret = do_pkt(dev, 1, &r10, sizeof(r10), dest, blocks * dev->block_size);
-    #elif SCSI_READ == 6
-    int ret = do_pkt(dev, 1, &r6, sizeof(r6), dest, blocks * dev->block_size);
-    #else
-    int ret = do_pkt(dev, 1, &r12, sizeof(r12), dest, blocks * dev->block_size);
-    #endif
-
-    if (ret < 0) {
-        return 0;
-    }
-    return blocks * dev->block_size;
-}
diff --git a/src/modules/usb/msd/scsi.h b/src/modules/usb/msd/scsi.h
deleted file mode 100644
index 98b88f9..0000000
--- a/src/modules/usb/msd/scsi.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef SCSI_H
-#define SCSI_H
-
-#include <stdint.h>
-#include <arpa/inet.h>
-
-// Funktionen zum Konvertieren von/zu Big Endian
-#define htobe16(val) htons(val)
-#define htobe32(val) htonl(val)
-#define betoh16(val) htobe16(val)
-#define betoh32(val) htobe32(val)
-
-// SCSI-Befehlscodes
-#define SCSI_REQUEST_SENSE 0x03
-#define SCSI_READ6         0x08
-#define SCSI_INQUIRY       0x12
-#define SCSI_READ_CAPACITY 0x25
-#define SCSI_READ10        0x28
-#define SCSI_WRITE10       0x2A
-#define SCSI_READ12        0xA8
-
-// Minimaler SCSI-Befehl
-struct scsi_cmd {
-    // Befehlscode
-    uint8_t operation;
-} __attribute__((packed));
-
-// REQUEST SENSE
-// Gibt Informationen im Fehlerfall zurück.
-struct scsi_cmd_request_sense {
-    struct scsi_cmd cmd;
-    unsigned rsvd1 : 5;
-    // LUN
-    unsigned lun   : 3;
-    uint16_t rsvd2;
-    // Anzahl der Bytes, die der Host zu empfangen bereit ist
-    uint8_t alloc_len;
-    uint8_t control;
-} __attribute__((packed));
-
-// INQUIRY
-// Gibt Informationen zum Gerät zurück.
-struct scsi_cmd_inquiry {
-    struct scsi_cmd cmd;
-    unsigned evpd : 1;
-    unsigned rsvd : 4;
-    // LUN
-    unsigned lun  : 3;
-    uint8_t page;
-    // Anzahl der Bytes, die der Host zu empfangen bereit ist
-    uint16_t alloc_len;
-    uint8_t control;
-} __attribute__((packed));
-
-// READ CAPACITY
-// Gibt die LBA des letzten Blocks zurück sowie die Blockgröße
-struct scsi_cmd_read_capacity {
-    struct scsi_cmd cmd;
-    unsigned reladdr : 1;
-    unsigned rsvd1   : 4;
-    // LUN
-    unsigned lun     : 3;
-    uint32_t lba;
-    uint32_t rsvd2;
-} __attribute__((packed));
-
-// READ6
-// Liest Daten
-struct scsi_cmd_read6 {
-    struct scsi_cmd cmd;
-    // Höherwertiger Teil der LBA
-    unsigned lba_hi : 5;
-    // LUN
-    unsigned lun : 3;
-    // Niederwertiger Teil der LBA
-    uint16_t lba_lo;
-    // Anzahl zu lesende Blöcke
-    uint8_t length;
-    uint8_t control;
-} __attribute__((packed));
-
-// READ10
-// Liest Daten
-struct scsi_cmd_read10 {
-    struct scsi_cmd cmd;
-    unsigned reladdr : 1;
-    unsigned rsvd1   : 2;
-    unsigned fua     : 1;
-    unsigned dpo     : 1;
-    // LUN
-    unsigned lun     : 3;
-    // LBA
-    uint32_t lba;
-    uint8_t rsvd2;
-    // Anzahl zu lesende Blöcke
-    uint16_t length;
-    uint8_t control;
-} __attribute__((packed));
-
-// READ12
-// Liest Daten
-struct scsi_cmd_read12 {
-    struct scsi_cmd cmd;
-    unsigned reladdr : 1;
-    unsigned rsvd1   : 2;
-    unsigned fua     : 1;
-    unsigned dpo     : 1;
-    // LUN
-    unsigned lun     : 3;
-    // LBA
-    uint32_t lba;
-    // Anzahl zu lesende Blöcke
-    uint32_t length;
-    uint16_t rsvd2;
-} __attribute__((packed));
-
-// WRITE10
-// Schreibt Daten
-struct scsi_cmd_write10 {
-    struct scsi_cmd cmd;
-    unsigned reladdr : 1;
-    unsigned rsvd1   : 1;
-    unsigned ebp     : 1;
-    unsigned fua     : 1;
-    unsigned dpo     : 1;
-    // LUN
-    unsigned lun     : 3;
-    // LBA
-    uint32_t lba;
-    uint8_t rsvd2;
-    // Anzahl zu lesende Blöcke
-    uint16_t length;
-    uint8_t control;
-} __attribute__((packed));
-
-// Rückgabestruktur von SCSI SENSE
-struct scsi_sense {
-    unsigned resp_code : 7;
-    unsigned valid     : 1;
-    uint8_t segment;
-    unsigned sense_key : 4;
-    unsigned rsvd1     : 1;
-    unsigned ili       : 1;
-    unsigned eom       : 1;
-    unsigned filemark  : 1;
-    uint32_t information;
-    uint8_t add_sense_length;
-    uint32_t cmd_spec_info;
-    uint8_t add_sense_code;
-    uint8_t add_sense_code_qual;
-    uint8_t field_replacable_unit_code;
-    unsigned sense_key_spec1 : 7;
-    unsigned sksv            : 1;
-    uint8_t sense_key_spec2;
-    uint8_t sense_key_spec3;
-} __attribute__((packed));
-
-// Rückgabestruktur von SCSI INQUIRY
-struct scsi_inq_answer {
-    // Gerätetype
-    unsigned dev_type  : 5;
-    unsigned qualifier : 3;
-    unsigned type_mod : 7;
-    unsigned rmb      : 1;
-    unsigned ansi_version : 3;
-    unsigned ecma_version : 3;
-    unsigned iso_version  : 2;
-    unsigned resp_data_format : 4;
-    unsigned rsvd1            : 2;
-    unsigned trm_iop          : 1;
-    unsigned aec              : 1;
-    uint8_t add_length;
-    uint16_t rsvd2;
-    unsigned soft_rst  : 1;
-    unsigned cmd_queue : 1;
-    unsigned rsvd3     : 1;
-    unsigned linked    : 1;
-    unsigned sync      : 1;
-    unsigned wbus16    : 1;
-    unsigned wbus32    : 1;
-    unsigned rel_adr   : 1;
-    // Herstellername
-    char vendor[8];
-    // Produktname
-    char product[16];
-    uint32_t revision;
-} __attribute__((packed));
-
-#endif
diff --git a/src/modules/usb/msd/usb-lib.c b/src/modules/usb/msd/usb-lib.c
deleted file mode 100644
index fe4eb69..0000000
--- a/src/modules/usb/msd/usb-lib.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include <rpc.h>
-#include <syscall.h>
-
-#include "usb-ddrv.h"
-#include "usb-server.h"
-#include "usb-structs.h"
-#include "usb-trans.h"
-
-pid_t usb_pid;
-
-int usb_get_number_of_endpoints(struct usb_prov_dev* dev)
-{
-    struct usb_devctrl_gne rq = {
-        .req = {
-            .type = USB_DC_NUM_ENDPOINTS
-        },
-        .dev = *dev
-    };
-
-    return rpc_get_int(usb_pid, RPC_USB_SV_DEVCT_FNN, sizeof(rq), (char*)&rq);
-}
-
-int usb_get_interface_id(struct usb_prov_dev* dev)
-{
-    struct usb_devctrl_gii giid = {
-        .req = {
-            .type = USB_DC_GET_IFC_ID
-        },
-        .dev = *dev
-    };
-
-    return rpc_get_int(usb_pid, RPC_USB_SV_DEVCT_FNN, sizeof(giid),
-        (char*)&giid);
-}
-
-void usb_get_endpoint_info(struct usb_prov_dev* dev, int ep_number,
-    struct usb_endpoint_descriptor* ep_desc)
-{
-    struct usb_devctrl_gep gep = {
-        .req = {
-            .type = USB_DC_GET_ENDPOINT
-        },
-        .dev = *dev,
-        .ep_number = ep_number
-    };
-
-    response_t* r = rpc_get_response(usb_pid, RPC_USB_SV_DEVCT_FNN,
-        sizeof(gep), (char*)&gep);
-
-    memcpy(ep_desc, r->data, sizeof(*ep_desc));
-    free(r->data);
-    free(r);
-}
-
-void usb_create_pipe(struct usb_prov_dev* dev, int ep_number,
-    struct usb_pipe* pipe)
-{
-    struct usb_devctrl_gpp gp = {
-        .req = {
-            .type = USB_DC_GET_PIPE
-        },
-        .dev = *dev,
-        .ep_number = ep_number
-    };
-
-    response_t* r = rpc_get_response(usb_pid, RPC_USB_SV_DEVCT_FNN,
-        sizeof(gp), (char*)&gp);
-
-    memcpy(pipe, r->data, sizeof(*pipe));
-    free(r->data);
-    free(r);
-}
-
-int usb_control_transfer(struct usb_prov_dev* dev, struct usb_pipe* pipe,
-    struct usb_setup_packet* setup, void* buffer)
-{
-    uint32_t shm = 0;
-    void* shm_addr = NULL;
-
-    if (setup->length) {
-        shm = create_shared_memory(setup->length);
-        shm_addr = open_shared_memory(shm);
-
-        if ((buffer != NULL) && !(setup->type & USB_SETUP_IN)) {
-            memcpy(shm_addr, buffer, setup->length);
-        }
-    }
-
-    struct usb_devctrl_tct tctrq = {
-        .req = {
-            .type = USB_DC_TRSF_CONTROL
-        },
-        .setup = *setup,
-        .shm = shm
-    };
-
-    if (pipe != NULL) {
-        tctrq.dst.pipe = *pipe;
-        tctrq.ep0 = false;
-    } else {
-        tctrq.dst.dev_id = dev->dev_id;
-        tctrq.ep0 = true;
-    }
-
-    int ret = rpc_get_int(usb_pid, RPC_USB_SV_DEVCT_FNN, sizeof(tctrq),
-        (char*)&tctrq);
-
-    if (setup->length && (buffer != NULL) && (setup->type & USB_SETUP_IN)) {
-        memcpy(buffer, shm_addr, setup->length);
-    }
-
-    if (shm_addr != NULL) {
-        close_shared_memory(shm);
-    }
-
-    return ret;
-}
-
-int usb_bulk_transfer(struct usb_pipe* pipe, void* buffer, size_t length,
-    bool receive)
-{
-    uint32_t shm = 0;
-    void* shm_addr = NULL;
-
-    if (length) {
-        shm = create_shared_memory(length);
-        shm_addr = open_shared_memory(shm);
-
-        if ((buffer != NULL) && !receive) {
-            memcpy(shm_addr, buffer, length);
-        }
-    }
-
-    struct usb_devctrl_tbk tbkrq = {
-        .req = {
-            .type = USB_DC_TRSF_BULK
-        },
-        .pipe = *pipe,
-        .length = length,
-        .shm = shm
-    };
-
-    int ret = rpc_get_int(usb_pid, RPC_USB_SV_DEVCT_FNN, sizeof(tbkrq),
-        (char*)&tbkrq);
-
-    if (length && (buffer != NULL) && receive) {
-        memcpy(buffer, shm_addr, length);
-    }
-
-    if (shm_addr != NULL) {
-        close_shared_memory(shm);
-    }
-
-    if (ret >= 0) {
-        pipe->trs.toggle = ret;
-        ret = 0;
-    }
-
-    return ret;
-}
-
-void usb_clear_halt(struct usb_pipe* pipe)
-{
-    struct usb_devctrl_clh clh = {
-        .req = {
-            .type = USB_DC_CLEAR_HALT
-        },
-        .pipe = *pipe
-    };
-
-    rpc_get_int(usb_pid, RPC_USB_SV_DEVCT_FNN, sizeof(clh), (char*)&clh);
-}
diff --git a/src/modules/usb/msd/usb-lib.h b/src/modules/usb/msd/usb-lib.h
deleted file mode 100644
index 2f7fb9b..0000000
--- a/src/modules/usb/msd/usb-lib.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef USB_LIB_H
-#define USB_LIB_H
-
-#include <stdbool.h>
-#include <stddef.h>
-
-#include "usb-ddrv.h"
-#include "usb-server.h"
-#include "usb-structs.h"
-#include "usb-trans.h"
-
-/*
- * Hinweis: Wenn hier die Rede von einem USB-Gerät ist, so ist ein logisches
- * USB-Gerät gemeint. Dies kann sowohl ein echtes (physisches) Gerät sein oder
- * aber auch nur ein Interface dieses Geräts (meistens letzteres, da so gut
- * wie alle USB-Geräteklassen auf Interfaceebene arbeiten und somit die meisten
- * physischen USB-Geräte genau ein Interface besitzen).
- */
-
-/**
- * Führt einen USB-Bulktransfer durch.
- *
- * @param pipe Zu verwendende Pipe
- * @param buffer Zu bearbeitender Speicherbereich
- * @param length Länge des Transfers
- * @param receive true, wenn empfangen werden soll, sonst false.
- *
- * @return 0 bei Erfolg, sonst -errno.
- */
-int usb_bulk_transfer(struct usb_pipe* pipe, void* buffer, size_t length,
-    bool receive);
-
-/**
- * Entstallt einen Endpunkt.
- *
- * @param pipe Eine zum Endpunkt gehörige Pipe.
- */
-void usb_clear_halt(struct usb_pipe* pipe);
-
-/**
- * Führt einen USB-Controltransfer durch.
- *
- * @param dev Gerät
- * @param pipe Zu verwendende Pipe oder NULL für die Default Control Pipe
- * @param setup SETUP-Paket
- * @param buffer Speicherbereich für die Datenphase
- *
- * @return 0 bei Erfolg, sonst -errno.
- */
-int usb_control_transfer(struct usb_prov_dev* dev, struct usb_pipe* pipe,
-    struct usb_setup_packet* setup, void* buffer);
-
-/**
- * Erstellt eine USB-Pipe.
- *
- * @param dev Zielgerät
- * @param ep_number Nummer des Zielendpunkts (Nummer innerhalb des Interfaces,
- *                  nicht ID!)
- * @param pipe Speicherbereich, in dem die Daten der Pipe abgelegt werden
- *             sollen.
- */
-void usb_create_pipe(struct usb_prov_dev* dev, int ep_number,
-    struct usb_pipe* pipe);
-
-/**
- * Empfängt Informationen zu einem Endpunkt.
- *
- * @param dev Gerät
- * @param ep_number Nummer des Endpunkts
- * @param ep_desc Pointer zu einem Speicherbereich, der einen Endpoint-
- *                Descriptor aufnehmen kann.
- */
-void usb_get_endpoint_info(struct usb_prov_dev* dev, int ep_number,
-    struct usb_endpoint_descriptor* ep_desc);
-
-/**
- * Gibt die Interface-ID des logischen USB-Geräts zurück.
- *
- * @param dev Gerät
- *
- * @return Interface-ID
- */
-int usb_get_interface_id(struct usb_prov_dev* dev);
-
-/**
- * Gibt die Anzahl an Endpunkten des USB-Geräts zurück.
- *
- * @param dev Logisches Gerät
- *
- * @return Anzahl Endpunkte
- */
-int usb_get_number_of_endpoints(struct usb_prov_dev* dev);
-
-#endif
diff --git a/src/modules/usb/uhci/Makefile.all b/src/modules/usb/uhci/Makefile.all
deleted file mode 100644
index cf401d2..0000000
--- a/src/modules/usb/uhci/Makefile.all
+++ /dev/null
@@ -1,8 +0,0 @@
-shopt -s extglob
-source $LOST_BUILDMK_ROOT/config.sh
-
-CC="$CC -I../include"
-
-echo "LD   $1/modules/uhci"
-$LOST_TOOLS_LD $LDSCRIPT -ouhci.mod  *.o --start-group $2 --end-group
-$LOST_TOOLS_STRIP -s uhci.mod -o $1/modules/uhci
diff --git a/src/modules/usb/uhci/ctrl.c b/src/modules/usb/uhci/ctrl.c
deleted file mode 100644
index ad1c3a0..0000000
--- a/src/modules/usb/uhci/ctrl.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#include <ports.h>
-#include <sleep.h>
-
-#include "uhci.h"
-#include "usb-hub.h"
-
-void uhci_reset_port(struct uhci* hc, int port)
-{
-    if (hc == NULL)
-        return;
-
-    outw(hc->iobase + UHCI_RPORTS + port * 2, RPORT_ENABLE | RPORT_RESET | RPORT_CSC);
-    msleep(50);
-    uhci_set_port_status(hc, port, 1);
-    msleep(10);
-}
-
-int uhci_scan_port(struct uhci* hc, int port)
-{
-    int ret;
-
-    if (hc == NULL)
-        return 0;
-
-    uint_fast16_t val = inw(hc->iobase + UHCI_RPORTS + port * 2);
-
-    if (!(val & RPORT_DEVICE)) {
-        ret = 0;
-    } else {
-        ret = USB_HUB_DEVICE;
-        if (val & RPORT_LOSPD) {
-            ret |= USB_HUB_LOW_SPEED;
-        } else {
-            ret |= USB_HUB_FULL_SPEED;
-        }
-
-        if (val & RPORT_CSC) {
-            ret |= USB_HUB_CHANGE;
-            outw(hc->iobase + UHCI_RPORTS + port * 2, (val & RPORT_ENABLE) | RPORT_CSC);
-        }
-    }
-
-    return ret;
-}
-
-void uhci_set_port_status(struct uhci* hc, int port, int status)
-{
-    if (hc == NULL)
-        return;
-
-    int previous = inw(hc->iobase + UHCI_RPORTS + port * 2) & RPORT_ENABLE;
-    outw(hc->iobase + UHCI_RPORTS + port * 2, (status ? RPORT_ENABLE : 0) | RPORT_CSC);
-    msleep(50);
-    if (status && !previous)
-    {
-        outw(hc->iobase + UHCI_RPORTS + port * 2, RPORT_ENABLE | RPORT_RESUME);
-        msleep(20);
-        outw(hc->iobase + UHCI_RPORTS + port * 2, RPORT_ENABLE | RPORT_CSC);
-        msleep(10);
-    }
-}
diff --git a/src/modules/usb/uhci/init.c b/src/modules/usb/uhci/init.c
deleted file mode 100644
index 7a4d6f6..0000000
--- a/src/modules/usb/uhci/init.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <assert.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include <init.h>
-#include <pci.h>
-#include <ports.h>
-#include <rpc.h>
-#include <sleep.h>
-#include <syscall.h>
-
-#include "uhci.h"
-
-extern pid_t usb_pid, pci_pid;
-
-
-extern struct uhci* uhcis[IRQ_COUNT];
-extern void uhci_irq_handler(uint8_t irq);
-
-static uint16_t pci_inw(struct pci_device* dev, int reg)
-{
-    struct pci_config_space_access csa = {
-        .type = PCI_CSA_READ16,
-        .bus = dev->bus,
-        .device = dev->device,
-        .function = dev->function,
-        .reg = reg
-    };
-
-    return rpc_get_dword(pci_pid, RPC_PCI_CONFIG_SPACE_ACCESS, sizeof(csa),
-        (char*)&csa);
-}
-
-static void pci_outw(struct pci_device* dev, int reg, uint16_t val)
-{
-    struct pci_config_space_access csa = {
-        .type = PCI_CSA_WRITE16,
-        .bus = dev->bus,
-        .device = dev->device,
-        .function = dev->function,
-        .reg = reg,
-        .value = val
-    };
-
-    rpc_get_dword(pci_pid, RPC_PCI_CONFIG_SPACE_ACCESS, sizeof(csa),
-        (char*)&csa);
-}
-
-void init_uhc(struct pci_device* dev, size_t devlen)
-{
-    devlen -= sizeof(*dev);
-    int8_t* data = (int8_t*)(dev + 1);
-
-    struct pci_resource pres;
-    uint16_t iobase = 0, iosize = 0;
-
-    while (devlen >= sizeof(pres)) {
-        memcpy(&pres, data, sizeof(pres));
-
-        devlen -= sizeof(pres);
-        data += sizeof(pres);
-
-        if (pres.type == PCI_RESOURCE_PORT) {
-            iobase = pres.start;
-            iosize = pres.length;
-            break;
-        }
-    }
-
-    if (!iobase) {
-        return;
-    }
-
-    struct uhci* ndev = calloc(1, sizeof(*ndev));
-    ndev->pci = dev;
-    ndev->iobase = iobase;
-    ndev->rh = calloc(1, sizeof(*ndev->rh));
-
-    ndev->rh->ports = (iosize - 0x10) >> 1;
-
-    request_ports(iobase, iosize);
-    uhcis[dev->irq] = ndev;
-    register_intr_handler(TYNDUR_IRQ_OFFSET + dev->irq, &uhci_irq_handler);
-
-    outw(iobase + UHCI_USBCMD, GRESET);
-    msleep(50);
-    outw(iobase + UHCI_USBCMD, 0);
-
-    int i;
-    for (i = 2; i < ndev->rh->ports; i++) {
-        if (!(inw(iobase + UHCI_RPORTS + i*2) & 0x0080) ||
-            (inw(iobase + UHCI_RPORTS + i*2) == 0xFFFF))
-        {
-            // Ungültige Werte für einen Rootport, also ist das hier keiner
-            ndev->rh->ports = i;
-            break;
-        }
-    }
-
-    // Mehr als sieben Rootports sind leicht ungewöhnlich
-    if (ndev->rh->ports > 7) {
-        ndev->rh->ports = 2;
-    }
-
-    int legsup = pci_inw(dev, UHCI_PCI_LEGSUP);
-    int cmd = inw(iobase + UHCI_USBCMD);
-    int intr = inw(iobase + UHCI_USBINTR);
-
-    if ((legsup &
-        ~(UHCI_LEGSUP_STATUS | UHCI_LEGSUP_NO_CHG | UHCI_LEGSUP_PIRQ))  ||
-        (cmd & USB_RUN) || (cmd & CONFIGURE) || !(cmd & GLOB_SUSP_MODE) ||
-        (intr & 0x000F))
-    {
-        // Damit uns nicht die IRQs um die Ohren fliegen
-        outw(iobase + UHCI_USBSTS, 0x3F);
-
-        // Einen Frame abwarten
-        msleep(1);
-
-        // Alle LEGSUP-Statusbits löschen
-        pci_outw(dev, UHCI_PCI_LEGSUP, UHCI_LEGSUP_STATUS);
-
-        // Resetten
-        outw(iobase + UHCI_USBCMD, HCRESET);
-        // Ende des Resets abwarten
-        for (i = 0; (inw(iobase + UHCI_USBCMD) & HCRESET) && (i < 50); i++) {
-            msleep(10);
-        }
-
-        // Interrupts erstmal deaktivieren
-        outw(iobase + UHCI_USBINTR, 0);
-        // Den gesamten HC ebenso
-        outw(iobase + UHCI_USBCMD, 0);
-
-        // Alle Ports "runterfahren"
-        for (i = 0; i < ndev->rh->ports; i++) {
-            outw(iobase + UHCI_RPORTS + i * 2, 0);
-        }
-    }
-
-    ndev->frame_list = mem_allocate(4096, 0);
-    assert(ndev->frame_list);
-    ndev->p_frame_list = (uintptr_t)get_phys_addr(ndev->frame_list);
-    assert(ndev->p_frame_list);
-    ndev->frame_list_lock = 0;
-
-    ndev->queue_head = mem_allocate(sizeof(*ndev->queue_head), 0);
-    assert(ndev->queue_head);
-    ndev->p_queue_head = (uintptr_t)get_phys_addr(ndev->queue_head);
-    assert(ndev->p_queue_head);
-    ndev->queue_head_lock = 0;
-
-    // Alle Pointer auf "invalid" setzen
-    ndev->queue_head->next = 1;
-    ndev->queue_head->transfer = 1;
-    ndev->queue_head->q_first = NULL;
-    ndev->queue_head->q_last = NULL;
-
-    for (i = 0; i < 1024; i++) {
-        ndev->frame_list[i] = ndev->p_queue_head | 2;
-    }
-
-    // Alle 1000 µs ein Frame (Standardwert)
-    outb(iobase + UHCI_SOFMOD, 0x40);
-    // Unsere Frameliste eintragen
-    outl(iobase + UHCI_FRBASEADD, ndev->p_frame_list);
-    // Framenummer zurücksetzen
-    outw(iobase + UHCI_FRNUM, 0);
-
-    // Hier setzen wir das PIRQ-Bit und deaktivieren sämtlichen Legacy Support
-    pci_outw(dev, UHCI_PCI_LEGSUP, UHCI_LEGSUP_PIRQ);
-
-    // HC starten
-    outw(iobase + UHCI_USBCMD, USB_RUN | CONFIGURE | MAXP);
-    // Alle Interrupts aktivieren
-    outw(iobase + UHCI_USBINTR, 0xF);
-
-    // Connect-Status-Change-Bit zurücksetzen
-    for (i = 0; i < ndev->rh->ports; i++) {
-        outw(iobase + UHCI_RPORTS + i * 2, RPORT_CSC);
-    }
-
-    // Resumesignal treiben (egal, obs was bringt)
-    outw(iobase + UHCI_USBCMD, USB_RUN | CONFIGURE | MAXP | FORCE_GRESUME);
-    msleep(20);
-    outw(iobase + UHCI_USBCMD, USB_RUN | CONFIGURE | MAXP);
-    msleep(100);
-
-    register_uhci(ndev);
-}
-
-int check_pci(void)
-{
-    struct init_dev_desc* devs;
-
-    int ret = init_dev_list(&devs);
-    if (ret < 0) {
-        return 0;
-    }
-
-    int got_something = 0;
-
-    int8_t* data = (int8_t*)devs;
-    for (;;) {
-        size_t size;
-
-        if (ret < sizeof(*devs)) {
-            break;
-        }
-
-        devs = (struct init_dev_desc*)data;
-        size = sizeof(*devs) + devs->bus_data_size;
-        if (ret < size) {
-            break;
-        }
-
-        if (devs->type == 10) {
-            struct pci_device* dev = (struct pci_device*)devs->bus_data;
-            if ((dev->class_id == 0x0C) && (dev->subclass_id == 0x03) &&
-                (dev->interface_id == 0x00))
-            {
-                got_something = 1;
-                init_uhc(dev, size);
-            }
-        }
-
-        ret -= size;
-        data += size;
-    }
-
-    return got_something;
-}
diff --git a/src/modules/usb/uhci/main.c b/src/modules/usb/uhci/main.c
deleted file mode 100644
index 452f2ad..0000000
--- a/src/modules/usb/uhci/main.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#include <init.h>
-#include <rpc.h>
-#include <sleep.h>
-#include <syscall.h>
-
-#include "uhci.h"
-
-extern pid_t usb_pid, pci_pid;
-
-int main(void)
-{
-    init_messaging();
-
-    // Warten, damit dieser Prozess nach usb1 (und möglichst nach usb-msd)
-    // weiterläuft, sollten diese Treiber gleichzeitig gestartet werden
-    // (z. B. Bootvorgang)
-    msleep(2000);
-
-    usb_pid = init_service_get("usb1");
-    if (!usb_pid) {
-        fprintf(stderr, "You need to start the usb1 driver first.\n");
-        return 1;
-    }
-
-    pci_pid = init_service_get("pci");
-    if (!pci_pid) {
-        fprintf(stderr, "You need to start the pci driver first.\n");
-        return 1;
-    }
-
-    init_rpc_interface();
-
-    if (!check_pci()) {
-        return 0;
-    }
-
-    for (;;) {
-        wait_for_rpc();
-    }
-}
diff --git a/src/modules/usb/uhci/rpc.c b/src/modules/usb/uhci/rpc.c
deleted file mode 100644
index e3f862e..0000000
--- a/src/modules/usb/uhci/rpc.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <errno.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#include <init.h>
-#include <ports.h>
-#include <rpc.h>
-#include <syscall.h>
-
-#include "uhci.h"
-#include "usb-hc.h"
-#include "usb-server.h"
-
-// #define DEBUG
-// #define SHOW_ERRORS
-
-pid_t usb_pid, pci_pid;
-
-struct uhci* uhcis[IRQ_COUNT] = { NULL };
-
-void uhci_irq_handler(uint8_t irq)
-{
-    if ((irq < TYNDUR_IRQ_OFFSET) || (irq >= TYNDUR_IRQ_OFFSET + IRQ_COUNT)) {
-        return;
-    }
-
-    struct uhci* hc = uhcis[irq - TYNDUR_IRQ_OFFSET];
-
-    int status = inw(hc->iobase + UHCI_USBSTS);
-
-    if (!status) {
-        return;
-    }
-
-    if ((status & 0x10) || (status & 0x08)) {
-        fprintf(stderr, "[uhci] SERIOUS HOST ERROR CONDITION (STS: 0x%02X)\n", status);
-        return;
-    }
-
-    if (status & 0x20) {
-        fprintf(stderr, "[uhci] Erm, wtf. HC halted...\n");
-        return;
-    }
-
-    if (status & ~0x03) {
-        return;
-    }
-
-    struct uhci_td *td, *ntd;
-
-    lock(&hc->queue_head_lock);
-
-    td = (struct uhci_td*)hc->queue_head->q_first;
-
-    while (td != NULL) {
-        /*
-        #ifdef DEBUG
-        printf("Active: %i (next: 0x%08X)\n", td->flags.bits.active, td->next);
-        #endif
-        */
-        if (td->flags.bits.active) {
-            if (td->active_count--) {
-                break;
-            } else {
-                #ifdef DEBUG
-                printf("Active timeout on 0x%08X/0x%08X, QH -> 0x%08X/0x%08X\n",
-                    td, td->ptd, hc->queue_head->q_first,
-                    hc->queue_head->transfer);
-                #endif
-                td->flags.bits.active = 0;
-            }
-        }
-
-        #ifdef DEBUG
-        printf("Finished td %s %i:%i, flags: 0x%08X\n",
-            (td->pid == 0x69) ? "from" : "to", td->addr, td->ep,
-            td->flags.flags);
-        #endif
-
-        if (td->result != NULL) {
-            if (td->flags.bits.spd) {
-                #ifdef SHOW_ERRORS
-                printf("[uhci] Short packet detected\n");
-                #endif
-
-                if (hc->queue_head->transfer == td->ptd) {
-                    hc->queue_head->transfer = td->next;
-                }
-
-                *td->result = EMSGSIZE;
-            } else if ((status == 0x01) && !td->flags.bits.e_stall) {
-                #ifdef DEBUG
-                printf("[uhci] Fine, actual len: %i; max len: %i\n",
-                    td->flags.bits.act_len, td->maxlen);
-                #endif
-                if (((td->flags.bits.act_len + 1) & 0x7FF) < ((td->maxlen + 1) & 0x7FF)) {
-                    *td->result = EMSGSIZE;
-                } else {
-                    *td->result = 0;
-                }
-            } else {
-                td->pipe->toggle = td->toggle;
-                // TODO Weitere Transfers aus der Liste entfernen
-                #ifdef SHOW_ERRORS
-                printf("[uhci] Something failed, errors: %c%c%c%c%c%c\n",
-                    td->flags.bits.e_bitstuff ? 'b' : '-',
-                    td->flags.bits.e_crc_timeout ? 'c' : '-',
-                    td->flags.bits.e_nak ? 'n' : '-',
-                    td->flags.bits.e_babble ? 'q' : '-',
-                    td->flags.bits.e_buffer ? 'f' : '-',
-                    td->flags.bits.e_stall ? 's' : '-');
-                printf("[uhci] Next'll be: 0x%08X/0x%08X\n", td->next,
-                    td->q_next);
-                #endif
-
-                if (hc->queue_head->transfer == td->ptd) {
-                    hc->queue_head->transfer = td->next;
-                }
-
-                if (td->flags.bits.e_stall) {
-                    *td->result = EHOSTDOWN;
-                } else {
-                    *td->result = EAGAIN;
-                }
-            }
-        }
-
-        ntd = td->q_next;
-        if (td->free_on_completion) {
-            mem_free(td, 4096);
-        }
-
-        if (td->next & 1) {
-            td = ntd;
-            break;
-        }
-
-        td = ntd;
-    }
-
-    hc->queue_head->q_first = td;
-    if (td == NULL) {
-        hc->queue_head->q_last = NULL;
-        hc->queue_head->transfer = 1;
-    }
-
-    unlock(&hc->queue_head_lock);
-
-    outw(hc->iobase + UHCI_USBSTS, status);
-}
-
-void uhci_hct_handler(pid_t src, uint32_t corr_id, size_t length, void* data)
-{
-    struct usb_hc_trs* trs = data;
-    void* shm;
-    int result;
-
-    if (length < sizeof(*trs)) {
-        rpc_send_int_response(src, corr_id, -EINVAL);
-        return;
-    }
-
-    switch (trs->type)
-    {
-        case USB_TRST_CONTROL:
-            if (length < sizeof(struct usb_hc_trs_ctrl)) {
-                rpc_send_int_response(src, corr_id, -EINVAL);
-                return;
-            }
-            struct usb_hc_trs_ctrl* ctrl = data;
-
-            shm = open_shared_memory(ctrl->shm);
-            result = uhci_do_control(trs->hc.hcd_avail, &trs->pipe,
-                &ctrl->setup, shm);
-            close_shared_memory(ctrl->shm);
-            rpc_send_int_response(src, corr_id, result);
-            break;
-        case USB_TRST_BULK:
-            if (length < sizeof(struct usb_hc_trs_bulk)) {
-                rpc_send_int_response(src, corr_id, -EINVAL);
-                return;
-            }
-            struct usb_hc_trs_bulk* bulk = data;
-
-            shm = open_shared_memory(bulk->shm);
-            result = uhci_do_bulk(trs->hc.hcd_avail, &trs->pipe,
-                bulk->receive, shm, bulk->length);
-            close_shared_memory(bulk->shm);
-
-            if (!result) {
-                // Irgendwie muss der Status des Bits ja zurück
-                result = trs->pipe.toggle;
-            }
-            rpc_send_int_response(src, corr_id, result);
-            break;
-        default:
-            rpc_send_int_response(src, corr_id, -EINVAL);
-            break;
-    }
-}
-
-void uhci_hcc_handler(pid_t src, uint32_t corr_id, size_t length, void* data)
-{
-    struct usb_hc_ctrl_req* rq = data;
-    struct usb_hc_ctrl_scan* rqsc = data;
-    struct usb_hc_ctrl_dsbl* rqdbl = data;
-    struct usb_hc_ctrl_rst* rqrst = data;
-
-    if (length < sizeof(*rq)) {
-        rpc_send_int_response(src, corr_id, 0);
-        return;
-    }
-
-    switch (rq->type)
-    {
-        case HC_CTRL_SCAN_PORT:
-            if (length < sizeof(*rqsc)) {
-                rpc_send_int_response(src, corr_id, 0);
-                return;
-            }
-            int result = uhci_scan_port(rq->hc.hcd_avail, rqsc->port);
-            rpc_send_int_response(src, corr_id, result);
-            break;
-        case HC_CTRL_DSBL_PORT:
-            if (length < sizeof(*rqdbl)) {
-                rpc_send_int_response(src, corr_id, 0);
-                return;
-            }
-            uhci_set_port_status(rq->hc.hcd_avail, rqdbl->port, 0);
-            rpc_send_int_response(src, corr_id, 1);
-            break;
-        case HC_CTRL_RESET:
-            if (length < sizeof(*rqrst)) {
-                rpc_send_int_response(src, corr_id, 0);
-                return;
-            }
-            uhci_reset_port(rq->hc.hcd_avail, rqrst->port);
-            rpc_send_int_response(src, corr_id, 1);
-            break;
-        case HC_CTRL_ADD_PIPE:
-            rpc_send_int_response(src, corr_id, 1);
-            break;
-        default:
-            rpc_send_int_response(src, corr_id, 0);
-            break;
-    }
-}
-
-void init_rpc_interface(void)
-{
-    register_message_handler(RPC_USB_HC_CONTROL_FNN, &uhci_hcc_handler);
-    register_message_handler(RPC_USB_HC_TRANSFER_FNN, &uhci_hct_handler);
-}
-
-void register_uhci(struct uhci* hc)
-{
-    struct usb_hc rhc = {
-        .root_ports = hc->rh->ports,
-        .hcd_avail = hc
-    };
-
-    if (!rpc_get_int(usb_pid, RPC_USB_SV_REGHC_FNN, sizeof(rhc), (char*)&rhc)) {
-        fprintf(stderr, "Could not register UHCI.\n");
-    }
-}
diff --git a/src/modules/usb/uhci/trans.c b/src/modules/usb/uhci/trans.c
deleted file mode 100644
index b9c82c2..0000000
--- a/src/modules/usb/uhci/trans.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <assert.h>
-#include <errno.h>
-#include <stdint.h>
-#include <stdio.h>
-
-#include <syscall.h>
-
-#include "uhci.h"
-#include "usb-hc.h"
-#include "usb-trans.h"
-
-#define USB_SETUP_OUT (0 << 7)
-#define USB_SETUP_IN  (1 << 7)
-
-int insert_td(struct uhci* hc, uintptr_t ptd, struct uhci_td* td);
-
-int uhci_do_control(struct uhci* hc, struct usb_trans_pipe* pipe,
-            struct usb_setup_packet* setup, void* buffer)
-{
-    if ((pipe->speed != USB_HUB_LOW_SPEED) &&
-        (pipe->speed != USB_HUB_FULL_SPEED))
-    {
-        return -EPROTOTYPE;
-    }
-
-    struct uhci_td* td = mem_allocate(sizeof(*td), 0);
-    assert(td);
-    uintptr_t ptd = (uintptr_t)get_phys_addr(td);
-    assert(ptd);
-
-    volatile int status;
-
-    do {
-        status = EALREADY;
-
-        td->next = 1;
-        if (pipe->speed == USB_HUB_LOW_SPEED) {
-            td->flags.flags = 0x1D800000;
-        } else {
-            td->flags.flags = 0x19800000;
-        }
-        td->pid = USB_SETUP;
-        td->toggle = 0;
-        td->addr = pipe->usb_addr;
-        td->ep = pipe->ep_id;
-
-        td->maxlen = sizeof(*setup) - 1;
-        td->buffer = (uintptr_t)get_phys_addr(setup);
-
-        td->result = &status;
-        td->free_on_completion = 0;
-
-        td->pipe = pipe;
-
-        while (insert_td(hc, ptd, td));
-
-        while (status == EALREADY);
-    } while (status == EAGAIN);
-
-    if (status) {
-        if (status == EHOSTDOWN) {
-            pipe->stalled = 1;
-        }
-
-        mem_free(td, 4096);
-        return -status;
-    }
-
-    pipe->toggle = 1;
-
-    int remaining = setup->length;
-    int direction, done = 0;
-
-    if (setup->type & USB_SETUP_IN) {
-        direction = USB_IN;
-    } else {
-        direction = USB_OUT;
-    }
-
-    while (remaining) {
-        int this_len = (remaining > pipe->mps) ? pipe->mps : remaining;
-
-        remaining -= this_len;
-
-        do {
-            status = EALREADY;
-
-            td->next = 1;
-            if (pipe->speed == USB_HUB_LOW_SPEED) {
-                td->flags.flags = 0x1D800000;
-            } else {
-                td->flags.flags = 0x19800000;
-            }
-            td->pid = direction;
-            td->toggle = pipe->toggle;
-            td->addr = pipe->usb_addr;
-            td->ep = pipe->ep_id;
-
-            td->maxlen = (unsigned int)(this_len - 1) & 0x7FF;
-            td->buffer = (uintptr_t)get_phys_addr((void*)((uintptr_t)buffer + done));
-
-            td->result = &status;
-            td->free_on_completion = 0;
-
-            while (insert_td(hc, ptd, td));
-
-            while (status == EALREADY);
-        } while (status == EAGAIN);
-
-        if (status && (status != EMSGSIZE)) {
-            if (status == EHOSTDOWN) {
-                pipe->stalled = 1;
-            }
-
-            mem_free(td, 4096);
-            return -status;
-        }
-
-        pipe->toggle ^= 1;
-        done += this_len;
-
-        if (status == EMSGSIZE)
-            break;
-    }
-
-    if (direction == USB_IN) {
-        direction = USB_OUT;
-    } else {
-        direction = USB_IN;
-    }
-
-    do {
-        status = EALREADY;
-
-        td->next = 1;
-        if (pipe->speed == USB_HUB_LOW_SPEED) {
-            td->flags.flags = 0x1D800000;
-        } else {
-            td->flags.flags = 0x19800000;
-        }
-        td->pid = direction;
-        td->toggle = 1;
-        td->addr = pipe->usb_addr;
-        td->ep = pipe->ep_id;
-
-        td->maxlen = 0x7FF;
-        td->buffer = 0;
-
-        td->result = &status;
-        td->free_on_completion = 0;
-
-        while (insert_td(hc, ptd, td));
-
-        while (status == EALREADY);
-    } while (status == EAGAIN);
-
-    if (status == EHOSTDOWN) {
-        pipe->stalled = 1;
-    }
-
-    pipe->toggle = 0;
-    mem_free(td, sizeof(*td));
-
-    return -status;
-}
-
-int uhci_do_bulk(struct uhci* hc, struct usb_trans_pipe* pipe, bool receive,
-    void* buffer, size_t length)
-{
-    if ((pipe->speed != USB_HUB_LOW_SPEED) &&
-        (pipe->speed != USB_HUB_FULL_SPEED))
-    {
-        return -EPROTOTYPE;
-    }
-
-    if (!length) {
-        return -EINVAL;
-    }
-
-    // printf("Issuing bulk (%i B expected)\n", length);
-
-    struct uhci_td* td = mem_allocate(sizeof(*td), 0);
-    assert(td);
-    uintptr_t ptd = (uintptr_t)get_phys_addr(td);
-    assert(ptd);
-
-    volatile int res;
-
-    int remaining = length;
-    int done = 0;
-
-    while (remaining) {
-        // printf("%i B to go\n", remaining);
-        int this_len = (remaining > pipe->mps) ? pipe->mps : remaining;
-
-        remaining -= this_len;
-
-        td->next = 1;
-        if (pipe->speed == USB_LOW_SPEED) {
-            td->flags.flags = 0x1D800000;
-        } else {
-            td->flags.flags = 0x19800000;
-        }
-        if (receive) {
-            td->pid = USB_IN;
-        } else {
-            td->pid = USB_OUT;
-        }
-        td->toggle = pipe->toggle;
-        td->addr = pipe->usb_addr;
-        td->ep = pipe->ep_id;
-
-        td->maxlen = (unsigned int)(this_len - 1) & 0x7FF;
-        td->buffer = (uintptr_t)
-            get_phys_addr((void *)((uintptr_t)buffer + done));
-
-        res = EALREADY;
-        td->result = &res;
-        td->free_on_completion = 0;
-        td->pipe = pipe;
-
-        // printf("Inserting TD\n");
-        while (insert_td(hc, ptd, td));
-
-        // printf("Waiting for transmission\n");
-        while (res == EALREADY);
-        // printf("Thru\n");
-
-        if (res == EAGAIN) {
-            remaining += this_len;
-            continue;
-        }
-
-        if (res) {
-            return -res;
-        }
-
-        pipe->toggle ^= 1;
-
-        done += this_len;
-    }
-
-    if (res == EHOSTDOWN) {
-        pipe->stalled = 1;
-    }
-
-    mem_free(td, sizeof(*td));
-
-    return -res;
-}
-
-int insert_td(struct uhci* hc, uintptr_t ptd, struct uhci_td* td)
-{
-    struct uhci_td *last;
-
-    lock(&hc->queue_head_lock);
-
-    td->ptd = ptd;
-    td->q_next = NULL;
-    td->active_count = 10;
-
-    if (hc->queue_head->transfer & 1) {
-        // Insert as first element to be done
-        if (hc->queue_head->q_last != NULL) {
-            hc->queue_head->q_last->q_next = td;
-        } else {
-            hc->queue_head->q_first = td;
-        }
-
-        hc->queue_head->q_last = td;
-        hc->queue_head->transfer = ptd;
-    } else {
-        last = (struct uhci_td*)hc->queue_head->q_last;
-        #ifdef DEBUG
-        printf("[uhci] Will append to 0x%08X (p 0x%08X)\n", last, hc->queue_head->transfer);
-        #endif
-
-        last->q_next = td;
-        hc->queue_head->q_last = td;
-        last->next = ptd | 4;
-    }
-
-    unlock(&hc->queue_head_lock);
-
-    return 0;
-}
diff --git a/src/modules/usb/uhci/uhci.h b/src/modules/usb/uhci/uhci.h
deleted file mode 100644
index c6b758c..0000000
--- a/src/modules/usb/uhci/uhci.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef UHCI_H
-#define UHCI_H
-
-#include <stdint.h>
-#include <lock.h>
-
-#include "usb-hc.h"
-#include "usb-trans.h"
-
-
-#define TYNDUR_IRQ_OFFSET 0x20
-#define IRQ_COUNT         0x10
-
-// Befehlsregister (uint16_t)
-#define UHCI_USBCMD    0x00
-// Statusregister (uint16_t)
-#define UHCI_USBSTS    0x02
-// Interruptregister (uint16_t)
-#define UHCI_USBINTR   0x04
-// Aktuelle Framenummer (uint16_t)
-#define UHCI_FRNUM     0x06
-// Pointer zur Frameliste (uint32_t)
-#define UHCI_FRBASEADD 0x08
-// Bestimmt die genaue Länge eines Frames (uint8_t)
-#define UHCI_SOFMOD    0x0C
-// Array von Informationen über je einen Rootport (je uint16_t)
-#define UHCI_RPORTS    0x10
-
-#define MAXP           (1 << 7)
-#define CONFIGURE      (1 << 6)
-// Resumesignal treiben
-#define FORCE_GRESUME  (1 << 4)
-// Alle Rootports befinden sich im Suspendmodus
-#define GLOB_SUSP_MODE (1 << 3)
-// RESET-Signal wird an allen Rootports getrieben
-#define GRESET         (1 << 2)
-// HC wird zurückgesetzt
-#define HCRESET        (1 << 1)
-// Normaler Ausführungsmodus
-#define USB_RUN        (1 << 0)
-
-// Setzt einen Rootport zurück
-#define RPORT_RESET    (1 << 9)
-// Gibt an, ob ein Low-Speed-Gerät angeschlossen ist
-#define RPORT_LOSPD    (1 << 8)
-// Treibt das Resume-Signal auf dem Bus
-#define RPORT_RESUME   (1 << 6)
-// Schaltet den Rootport ein
-#define RPORT_ENABLE   (1 << 2)
-// Wird gesetzt, wenn ein Gerät angeschlossen oder entfernt wird
-#define RPORT_CSC      (1 << 1)
-// Gibt an, ob ein Gerät angeschlossen ist
-#define RPORT_DEVICE   (1 << 0)
-
-// Das Legacy-Support-Register im PCI-Konfigurationsraum (uint16_t)
-#define UHCI_PCI_LEGSUP 0xC0
-
-// Alle Statusbits, die mittels Schreiben einer 1 gelöscht werden
-#define UHCI_LEGSUP_STATUS 0x8F00
-// Unveränderliche Bits (RO oder reserviert)
-#define UHCI_LEGSUP_NO_CHG 0x5040
-// Interrupt wird als PCI-IRQ ausgeführt
-#define UHCI_LEGSUP_PIRQ   0x2000
-
-
-struct uhci_td {
-    volatile uint32_t next;
-
-    union {
-        volatile uint32_t flags;
-        struct {
-            volatile unsigned act_len : 11;
-            unsigned rsvd1 : 6;
-            volatile unsigned e_bitstuff : 1;
-            volatile unsigned e_crc_timeout : 1;
-            volatile unsigned e_nak : 1;
-            volatile unsigned e_babble : 1;
-            volatile unsigned e_buffer : 1;
-            volatile unsigned e_stall : 1;
-            volatile unsigned active : 1;
-            unsigned ioc : 1;
-            unsigned isochronous : 1;
-            unsigned low_speed : 1;
-            volatile unsigned errors : 2;
-            unsigned spd : 1;
-            unsigned rsvd2 : 2;
-        } __attribute__((packed)) bits;
-    } __attribute__((packed)) flags;
-
-    unsigned pid : 8;
-    unsigned addr : 7;
-    unsigned ep : 4;
-    unsigned toggle : 1;
-    unsigned rsvd : 1;
-    unsigned maxlen : 11;
-
-    uint32_t buffer;
-
-    // Diese Felder sind für den HCD
-
-    // Nächster TD in der Warteschlange
-    struct uhci_td* q_next;
-
-    // Pointer zu einer Variable, die einen errno-Wert aufnimmt
-    volatile int* result;
-
-    // Ist dieses Flag gesetzt, so wird der TD nach Abarbeitung vom IRQ-Handler
-    // automatisch freigegeben
-    int free_on_completion;
-
-    // Physische Adresse
-    uintptr_t ptd;
-
-    // Entsprechende Pipe
-    struct usb_trans_pipe* pipe;
-
-    int active_count;
-} __attribute__((packed));
-
-struct uhci_qh {
-    volatile uint32_t next;
-    volatile uint32_t transfer;
-
-    // Diese Felder sind für den HCD
-
-    // Erster TD in der Warteschlange (oder NULL, wenn keiner)
-    volatile struct uhci_td* q_first;
-
-    // Letzter TD in der Warteschlange (oder NULL, wenn keiner)
-    volatile struct uhci_td* q_last;
-} __attribute__((packed));
-
-// Beschreibt ein UHCI
-struct uhci {
-    // PCI-Geräteinformationen
-    struct pci_device* pci;
-    // Beginn des I/O-Raums
-    uint16_t iobase;
-
-    // Physische Adresse der Framelist
-    uintptr_t p_frame_list;
-    // Virtuelle Adresse der Framelist
-    uint32_t* frame_list;
-    // Lock für den Zugriff auf diese Liste
-    lock_t frame_list_lock;
-
-    // Physische Adresse des (bisher einzigen) QHs
-    uintptr_t p_queue_head;
-    // Virtuelle Adresse des QHs
-    struct uhci_qh* queue_head;
-    // Lock für den Zugriff auf diesen
-    lock_t queue_head_lock;
-
-    // Roothub, der durch das UHCI bereitgestellt wird
-    struct usb_rh* rh;
-};
-
-// Beschreibt einen Roothub (nur für UHCI)
-struct usb_rh {
-    // Anzahl der Rootports
-    int ports;
-};
-
-
-/**
- * Durchsucht alle verfügbaren PCI-Geräte nach einem UHCI.
- *
- * @return 1, wenn ein UHCI gefunden wurde, sonst 0.
- */
-int check_pci(void);
-
-/**
- * Initialisiert das RPC-Interface (Handler)
- */
-void init_rpc_interface(void);
-
-/**
- * Registriert einen UHCI als HC beim USB-Treiber.
- *
- * @param hc Das zu registrierende UHCI
- */
-void register_uhci(struct uhci* hc);
-
-/**
- * Führt einen Bulktransfer durch.
- *
- * @param hc UHCI
- * @param pipe Pipe, durch die die Übertragung stattfinden soll
- * @param receive true, wenn empfangen werden soll, sonst false
- * @param buffer Zielspeicherbereich
- * @param length (Angestrebte) Länge des Transfers
- *
- * @return 0 bei Erfolg, sonst -errno
- */
-int uhci_do_bulk(struct uhci* hc, struct usb_trans_pipe* pipe, bool receive,
-    void* buffer, size_t length);
-
-/**
- * Führt einen Controltransfer durch.
- *
- * @param hc UHCI
- * @param pipe Pipe, durch die die Übertragung stattfinden soll
- * @param setup SETUP-Paket
- * @param buffer Speicherbereich, mit dem während der Datenphase gearbeitet
- *               werden soll.
- *
- * @return 0 bei Erfolg, sonst -errno
- */
-int uhci_do_control(struct uhci* hc, struct usb_trans_pipe* pipe,
-    struct usb_setup_packet* setup, void* buffer);
-
-/**
- * Treibt das Resetsignal auf einem Port und aktiviert ihn.
- *
- * @param hc UHCI
- * @param port Der Portindex
- */
-void uhci_reset_port(struct uhci* hc, int port);
-
-/**
- * Überprüft einen Port.
- *
- * @param hc UHCI
- * @param port Zu überprüfender Port
- *
- * @return Status (USB_HUB_...)
- */
-int uhci_scan_port(struct uhci* hc, int port);
-
-/**
- * Aktiviert oder deaktiviert einen Port.
- *
- * @param hc UHCI
- * @param port Portindex
- * @param status 1 zum Aktivieren, 0 zum Deaktivieren
- */
-void uhci_set_port_status(struct uhci* hc, int port, int status);
-
-#endif
diff --git a/src/modules/usb/usb1/Makefile.all b/src/modules/usb/usb1/Makefile.all
deleted file mode 100644
index 54993c8..0000000
--- a/src/modules/usb/usb1/Makefile.all
+++ /dev/null
@@ -1,8 +0,0 @@
-shopt -s extglob
-source $LOST_BUILDMK_ROOT/config.sh
-
-CC="$CC -I../include"
-
-echo "LD   $1/modules/usb1"
-$LOST_TOOLS_LD $LDSCRIPT -ousb1.mod  *.o --start-group $2 --end-group
-$LOST_TOOLS_STRIP -s usb1.mod -o $1/modules/usb1
diff --git a/src/modules/usb/usb1/detect.c b/src/modules/usb/usb1/detect.c
deleted file mode 100644
index a99fd36..0000000
--- a/src/modules/usb/usb1/detect.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <collections.h>
-#include <rpc.h>
-#include <syscall.h>
-
-#include "usb.h"
-#include "usb-ddrv.h"
-#include "usb-hc.h"
-#include "usb-hub.h"
-
-extern void usb_found_hub(struct usb_device* dev);
-
-extern list_t* usb_ddrvs;
-extern list_t* unhandled_devs;
-
-static const char* speed_name(int speed)
-{
-    switch (speed) {
-        case USB_LOW_SPEED:
-            return "low speed";
-        case USB_FULL_SPEED:
-            return "full speed";
-        case USB_HIGH_SPEED:
-            return "high speed";
-        default:
-            return "unknown speed";
-    }
-}
-
-static int fits(int is, int want)
-{
-    if (want == -1)
-        return -1;
-    return !!(is == want);
-}
-
-static int provide_to(struct usb_device* dev, int ifc_num,
-    struct usb_interface_descriptor* ifc, struct usb_ddrv* drv)
-{
-    struct usb_prov_dev pd = {
-        .is_interface = (ifc == NULL) ? false : true,
-        .dev_id = dev,
-        .interface_id = ifc_num,
-        .type = {
-            .vendor_id = dev->dev_desc->vendor_id,
-            .device_id = dev->dev_desc->device_id,
-            .class = (ifc == NULL) ? dev->dev_desc->class : ifc->class,
-            .subclass = (ifc == NULL) ? dev->dev_desc->subclass : ifc->subclass,
-            .protocol = (ifc == NULL) ? dev->dev_desc->protocol : ifc->protocol
-        }
-    };
-
-    return rpc_get_int(drv->pid, RPC_USB_DDRV_PLUG_FNN, sizeof(pd), (char*)&pd);
-}
-
-static void dev_is_unhandled(struct usb_device* dev, int ifc_num,
-    struct usb_interface_descriptor* ifc)
-{
-    struct usb_prov_dev* pd = calloc(1, sizeof(*pd));
-
-    pd->is_interface = (ifc == NULL) ? false : true;
-    pd->dev_id = dev;
-    pd->interface_id = ifc_num;
-    pd->type.vendor_id = dev->dev_desc->vendor_id;
-    pd->type.device_id = dev->dev_desc->device_id;
-    pd->type.class = (ifc == NULL) ? dev->dev_desc->class : ifc->class;
-    pd->type.subclass = (ifc == NULL) ? dev->dev_desc->subclass : ifc->subclass;
-    pd->type.protocol = (ifc == NULL) ? dev->dev_desc->protocol : ifc->protocol;
-
-    p();
-    list_push(unhandled_devs, pd);
-    v();
-}
-
-#define check(svar, lname) int svar##f = fits(svar, drv->handle.lname); \
-    if (!svar##f) { continue; }
-
-#define provto(check) if (check && provide_to(dev, ifc_num, ifc, drv)) \
-    { break; }
-
-static void provide(struct usb_device* dev, int ifc_num,
-    struct usb_interface_descriptor* ifc)
-{
-    int vid, did, cls, scl, ptc;
-
-    vid = dev->dev_desc->vendor_id;
-    did = dev->dev_desc->device_id;
-    if (ifc == NULL) {
-        cls = dev->dev_desc->class;
-        scl = dev->dev_desc->subclass;
-        ptc = dev->dev_desc->protocol;
-    } else {
-        cls = ifc->class;
-        scl = ifc->subclass;
-        ptc = ifc->protocol;
-    }
-
-    int i, s = list_size(usb_ddrvs);
-    for (i = 0; i < s; i++) {
-        struct usb_ddrv* drv = list_get_element_at(usb_ddrvs, i);
-
-        check(vid, vendor_id)
-        check(did, device_id)
-        check(cls, class)
-        check(scl, subclass)
-        check(ptc, protocol)
-
-        // Wenn jemandem noch eine sinnvolle Kombination einfällt, kann er die
-        // gern hier eintragen.
-        // If anyone knows another combination making sense, he is encouraged
-        // to insert it here.
-        provto(vidf && didf)
-        provto(vidf &&         clsf && sclf && ptcf)
-        provto(                clsf && sclf && ptcf)
-        provto(vidf &&         clsf && sclf)
-        provto(                clsf && sclf)
-        provto(vidf &&         clsf)
-        provto(                clsf)
-    }
-
-    if (i == s) {
-        dev_is_unhandled(dev, ifc_num, ifc);
-    }
-}
-
-void update_ep_trs_info(struct usb_pipe* ep)
-{
-    ep->trs.usb_addr = ep->dev->addr;
-    ep->trs.ep_id = ep->ep->number;
-    ep->trs.mps = ep->ep->mps;
-    ep->trs.type = ep->ep->type;
-    ep->trs.speed = ep->dev->speed;
-}
-
-#define TNC(fnc) if ((ret = fnc)) { \
-    printf("[usb1] err@%i, ret is %i\n" # fnc "\n", __LINE__, ret); return; }
-
-void enumerate_device(struct usb_device* dev)
-{
-    struct usb_hub* hub = dev->parent;
-    int p = dev->hub_port;
-
-    printf("[usb1] Enumerating %s device on port %i of some hub\n", speed_name(dev->speed), dev->hub_port);
-
-    hub->reset_port(hub, p);
-    dev->addr = 0;
-    dev->state = USB_DEFAULT;
-
-    struct usb_pipe* ep0;
-    dev->ep0 = ep0 = calloc(1, sizeof(*ep0));
-
-    ep0->dev = dev;
-    ep0->ep = calloc(1, sizeof(*ep0->ep));
-    ep0->ep->number = 0;
-    ep0->ep->mps = 8;
-    ep0->ep->type = USB_EP_CONTROL;
-
-    update_ep_trs_info(ep0);
-
-    ep0->trs.toggle = 0;
-    ep0->trs.stalled = false;
-
-    if (hub->add_pipe != NULL) {
-        hub->add_pipe(hub, ep0);
-    }
-
-    dev->dev_desc = calloc(1, sizeof(*dev->dev_desc));
-
-    int ret = usb_control_transfer(ep0,
-        USB_SETUP_IN | USB_SETUP_REQ_STD | USB_SETUP_REC_DEV,
-        USB_GET_DESCRIPTOR, USB_DESC_DEVICE | 0, 0, 8, dev->dev_desc);
-
-    printf("[usb1] mps0 is %i B\n", dev->dev_desc->mps0);
-
-    if (ret) {
-        fprintf(stderr, "[usb1] Warning: first transfer returned %i\n", ret);
-    }
-
-    if (!dev->dev_desc->mps0) {
-        return;
-    }
-
-    hub->reset_port(hub, p);
-    ep0->ep->mps = dev->dev_desc->mps0;
-    ep0->trs.stalled = false;
-    update_ep_trs_info(ep0);
-
-    int address = dev->hc->addr_counter++;
-    TNC(usb_control_transfer(ep0,
-        USB_SETUP_OUT | USB_SETUP_REQ_STD | USB_SETUP_REC_DEV, USB_SET_ADDRESS,
-        address, 0, 0, NULL));
-    dev->addr = address;
-    update_ep_trs_info(ep0);
-
-    if (hub->add_pipe != NULL) {
-        hub->add_pipe(hub, dev->ep0);
-    }
-
-    dev->state = USB_ADDRESS;
-
-    TNC(usb_control_transfer(ep0,
-        USB_SETUP_IN | USB_SETUP_REQ_STD | USB_SETUP_REC_DEV,
-        USB_GET_DESCRIPTOR, USB_DESC_DEVICE | 0, 0, sizeof(*dev->dev_desc),
-        dev->dev_desc));
-
-    printf("[usb1] 0x%04X:0x%04X (%i configs)\n", dev->dev_desc->vendor_id,
-        dev->dev_desc->device_id, dev->dev_desc->num_configurations);
-
-    int i;
-
-    if (dev->dev_desc->i_manufacturer) {
-        uint8_t name[255];
-
-        TNC(usb_control_transfer(ep0,
-            USB_SETUP_IN | USB_SETUP_REQ_STD | USB_SETUP_REC_DEV,
-            USB_GET_DESCRIPTOR, USB_DESC_STRING | dev->dev_desc->i_manufacturer,
-            0, 255, name));
-
-        printf("[usb1]  -> Manufacturer: ");
-        for (i = 2; i < name[0]; i += 2) {
-            printf("%c", name[i]);
-        }
-        printf("\n");
-    }
-    if (dev->dev_desc->i_product) {
-        uint8_t name[255];
-
-        TNC(usb_control_transfer(ep0,
-            USB_SETUP_IN | USB_SETUP_REQ_STD | USB_SETUP_REC_DEV,
-            USB_GET_DESCRIPTOR, USB_DESC_STRING | dev->dev_desc->i_product,
-            0, 255, name));
-
-        printf("[usb1]  -> Product: ");
-        for (i = 2; i < name[0]; i += 2) {
-            printf("%c", name[i]);
-        }
-        printf("\n");
-    }
-
-    dev->cfg_desc = calloc(dev->dev_desc->num_configurations, sizeof(*dev->cfg_desc));
-    for (i = 0; i < dev->dev_desc->num_configurations; i++) {
-        uint8_t tmp[9];
-
-        // Erstmal Länge aller Deskriptoren herausfinden
-        TNC(usb_control_transfer(ep0,
-            USB_SETUP_IN | USB_SETUP_REQ_STD | USB_SETUP_REC_DEV,
-            USB_GET_DESCRIPTOR, USB_DESC_CONFIGURATION | i, 0, 9, tmp));
-        dev->cfg_desc[i] = calloc(1, tmp[2] | (tmp[3] << 8));
-        TNC(usb_control_transfer(ep0,
-            USB_SETUP_IN | USB_SETUP_REQ_STD | USB_SETUP_REC_DEV,
-            USB_GET_DESCRIPTOR, USB_DESC_CONFIGURATION | i, 0,
-            tmp[2] | (tmp[3] << 8), dev->cfg_desc[i]));
-    }
-
-    if (dev->dev_desc->class == 9) {
-        usb_found_hub(dev);
-        return;
-    }
-
-    if (dev->dev_desc->class) {
-        provide(dev, 0, NULL);
-    }
-
-    struct usb_config_descriptor* best_cfg = dev->cfg_desc[0];
-
-    int c;
-    for (c = 0; c < dev->dev_desc->num_configurations; c++) {
-        struct usb_config_descriptor* cur_cfg = dev->cfg_desc[c];
-
-        if (cur_cfg->self_powered && !best_cfg->self_powered) {
-            // Wir wollen möglichst Self-powered
-            best_cfg = cur_cfg;
-        } else if (cur_cfg->max_power > best_cfg->max_power) {
-            // Und möglichst hohen Stromverbrauch (FIXME: Das aber nicht immer)
-            best_cfg = cur_cfg;
-        }
-    }
-
-    dev->cur_cfg = best_cfg;
-    usb_set_configuration(dev, best_cfg->configuration_value);
-
-    struct usb_interface_descriptor* cur_ifc = (struct usb_interface_descriptor*)(best_cfg + 1);
-
-    for (i = 0; i < best_cfg->num_interfaces; i++) {
-        if (cur_ifc->class && !cur_ifc->alternate_setting) {
-            provide(dev, i, cur_ifc);
-        }
-
-        cur_ifc = (struct usb_interface_descriptor*)
-            ((struct usb_endpoint_descriptor*)(cur_ifc + 1) +
-            cur_ifc->num_endpoints);
-    }
-}
-
-void scan_hub(struct usb_hub* hub)
-{
-    int p;
-
-    printf("[usb1] Hub with %i ports detected.\n", hub->ports);
-
-    for (p = 0; p < hub->ports; p++) {
-        hub->disable_port(hub, p);
-    }
-
-    for (p = 0; p < hub->ports; p++) {
-        int stat = hub->scan_port(hub, p);
-
-        if (stat & USB_HUB_DEVICE) {
-            struct usb_device* dev = calloc(1, sizeof(*dev));
-
-            dev->parent = hub;
-            dev->hub_port = p;
-
-            if (hub->root_hub) {
-                dev->hc = hub->dev.hc;
-            } else {
-                dev->hc = hub->dev.usb->hc;
-            }
-
-            dev->addr = 0;
-            dev->state = USB_ATTACHED;
-            dev->speed = stat & USB_HUB_SPEED;
-
-            enumerate_device(dev);
-        }
-    }
-}
-
-static void rh_addpipe(struct usb_hub* hub, struct usb_pipe* pipe)
-{
-    struct usb_hc* hc;
-
-    if (hub->root_hub) {
-        hc = hub->dev.hc;
-    } else {
-        hc = hub->dev.usb->hc;
-    }
-
-    struct usb_hc_ctrl_appe appe = {
-        .req = {
-            .type = HC_CTRL_ADD_PIPE,
-            .hc = *hc
-        },
-        .pipe = pipe->trs
-    };
-
-    rpc_get_int(hc->pid, RPC_USB_HC_CONTROL_FNN, sizeof(appe),
-        (char*)&appe);
-}
-
-static void rh_rst(struct usb_hub* hub, int port)
-{
-    struct usb_hc_ctrl_rst rqrst = {
-        .req = {
-            .type = HC_CTRL_RESET,
-            .hc = *hub->dev.hc
-        },
-        .port = port
-    };
-
-    rpc_get_int(hub->dev.hc->pid, RPC_USB_HC_CONTROL_FNN, sizeof(rqrst),
-        (char*)&rqrst);
-}
-
-static int rh_scan(struct usb_hub* hub, int port)
-{
-    struct usb_hc_ctrl_scan rqsc = {
-        .req = {
-            .type = HC_CTRL_SCAN_PORT,
-            .hc = *hub->dev.hc
-        },
-        .port = port
-    };
-
-    return rpc_get_int(hub->dev.hc->pid, RPC_USB_HC_CONTROL_FNN, sizeof(rqsc),
-        (char*)&rqsc);
-}
-
-static void rh_disable(struct usb_hub* hub, int port)
-{
-    struct usb_hc_ctrl_dsbl rqdbl = {
-        .req = {
-            .type = HC_CTRL_DSBL_PORT,
-            .hc = *hub->dev.hc
-        },
-        .port = port
-    };
-
-    rpc_get_int(hub->dev.hc->pid, RPC_USB_HC_CONTROL_FNN, sizeof(rqdbl),
-        (char*)&rqdbl);
-}
-
-void scan_hc(struct usb_hc* hc)
-{
-    struct usb_hub* rh = malloc(sizeof(*rh));
-
-    *rh = (struct usb_hub) {
-        .dev = {
-            .hc = hc
-        },
-        .root_hub = true,
-        .ports = hc->root_ports,
-        .add_pipe = &rh_addpipe,
-        .disable_port = &rh_disable,
-        .reset_port = &rh_rst,
-        .scan_port = &rh_scan
-    };
-
-    scan_hub(rh);
-}
diff --git a/src/modules/usb/usb1/hub.c b/src/modules/usb/usb1/hub.c
deleted file mode 100644
index b1d0597..0000000
--- a/src/modules/usb/usb1/hub.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-#include <collections.h>
-#include <rpc.h>
-#include <sleep.h>
-
-#include "usb.h"
-#include "usb-hc.h"
-
-static int scan_hub_port(struct usb_hub* hub, int port)
-{
-    uint32_t status;
-
-    usb_control_transfer(hub->dev.usb->ep0,
-        USB_SETUP_IN | USB_SETUP_REQ_CLS | USB_SETUP_REC_OTH, USB_GET_STATUS,
-        0, port + 1, 4, &status);
-
-    if (!(status & (1 << 0))) {
-        return 0;
-    }
-
-    if (status & (1 << 9)) {
-        return USB_HUB_DEVICE | USB_HUB_LOW_SPEED;
-    } else if (status & (1 << 10)) {
-        return USB_HUB_DEVICE | USB_HUB_HIGH_SPEED;
-    } else {
-        return USB_HUB_DEVICE | USB_HUB_FULL_SPEED;
-    }
-}
-
-static void disable_hub_port(struct usb_hub *hub, int port)
-{
-    // Deaktivieren
-    usb_control_transfer(hub->dev.usb->ep0,
-        USB_SETUP_OUT | USB_SETUP_REQ_CLS | USB_SETUP_REC_OTH,
-        USB_CLEAR_FEATURE, 1, port + 1, 0, NULL);
-}
-
-static void reset_hub_port(struct usb_hub* hub, int port)
-{
-    uint32_t cur;
-
-    port++;
-
-    usb_control_transfer(hub->dev.usb->ep0,
-        USB_SETUP_IN | USB_SETUP_REQ_CLS | USB_SETUP_REC_OTH, USB_GET_STATUS,
-        0, port, 4, &cur);
-
-    // Zurücksetzen
-    usb_control_transfer(hub->dev.usb->ep0,
-        USB_SETUP_OUT | USB_SETUP_REQ_CLS | USB_SETUP_REC_OTH,
-        USB_SET_FEATURE, 4, port, 0, NULL);
-
-    msleep(20);
-
-    if (!(cur & (1 << 1)) || (cur & (1 << 2))) {
-        // Vorher deaktiviert oder im Suspendmodus, Resume treiben
-        usb_control_transfer(hub->dev.usb->ep0,
-            USB_SETUP_OUT | USB_SETUP_REQ_CLS | USB_SETUP_REC_OTH,
-            USB_CLEAR_FEATURE, 2, port, 0, NULL);
-        msleep(30);
-    }
-}
-
-void usb_found_hub(struct usb_device* dev)
-{
-    struct usb_config_descriptor* ccfg;
-    struct usb_interface_descriptor* cint;
-    struct usb_hub* hub;
-    struct usb_hub_descriptor* chub;
-    uint8_t chub_buf[256];
-
-    dev->cur_cfg = NULL;
-
-    int c, i;
-
-    for (c = 0; c < dev->dev_desc->num_configurations; c++) {
-        ccfg = dev->cfg_desc[c];
-        cint = (struct usb_interface_descriptor*)(dev->cfg_desc[c] + 1);
-        for (i = 0; i < ccfg->num_interfaces; i++) {
-            if (cint->class == 9) {
-                dev->cur_cfg = ccfg;
-                break;
-            }
-
-            cint = (struct usb_interface_descriptor*)
-                ((struct usb_endpoint_descriptor*)(cint + 1) +
-                cint->num_endpoints);
-        }
-    }
-
-    if (dev->cur_cfg == NULL) {
-        return;
-    }
-
-    usb_set_configuration(dev, dev->cur_cfg->configuration_value);
-
-    hub = calloc(1, sizeof(*hub));
-    if (hub == NULL) {
-        return;
-    }
-
-    hub->dev.usb = dev;
-    hub->root_hub = false;
-
-    usb_control_transfer(dev->ep0,
-        USB_SETUP_IN | USB_SETUP_REQ_CLS | USB_SETUP_REC_DEV,
-        USB_GET_DESCRIPTOR, USB_DESC_HUB, 0, 256, chub_buf);
-
-    chub = (struct usb_hub_descriptor*)chub_buf;
-
-    hub->ports = chub->nbr_ports;
-
-    for (i = 1; i <= hub->ports; i++) {
-        // Strom einschalten
-        usb_control_transfer(dev->ep0,
-            USB_SETUP_OUT | USB_SETUP_REQ_CLS | USB_SETUP_REC_OTH,
-            USB_SET_FEATURE, 8, i, 0, NULL);
-
-        msleep(chub->pwr_on_2_pwr_good * 2);
-    }
-
-    msleep(100);
-
-    for (i = 1; i <= hub->ports; i++) {
-        uint32_t status;
-
-        usb_control_transfer(dev->ep0,
-            USB_SETUP_IN | USB_SETUP_REQ_CLS | USB_SETUP_REC_OTH,
-            USB_GET_STATUS, 0, i, 4, &status);
-
-        if (status & (1 << 1)) {
-            // Port deaktivieren
-            usb_control_transfer(dev->ep0,
-                USB_SETUP_OUT | USB_SETUP_REQ_CLS | USB_SETUP_REC_OTH,
-                USB_CLEAR_FEATURE, 1, i, 0, NULL);
-        }
-    }
-
-    hub->add_pipe = dev->parent->add_pipe;
-    hub->disable_port = &disable_hub_port;
-    hub->reset_port = &reset_hub_port;
-    hub->scan_port = &scan_hub_port;
-
-    scan_hub(hub);
-}
diff --git a/src/modules/usb/usb1/main.c b/src/modules/usb/usb1/main.c
deleted file mode 100644
index a7611ff..0000000
--- a/src/modules/usb/usb1/main.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#include <collections.h>
-#include <init.h>
-#include <rpc.h>
-#include <syscall.h>
-
-#include "usb.h"
-
-extern list_t* usb_hcs;
-extern list_t* usb_ddrvs;
-extern list_t* unhandled_devs;
-
-int main(void)
-{
-    usb_hcs = list_create();
-    usb_ddrvs = list_create();
-    unhandled_devs = list_create();
-
-    init_messaging();
-    register_rpc_interface();
-
-    for (;;) {
-        wait_for_rpc();
-    }
-}
diff --git a/src/modules/usb/usb1/rpc.c b/src/modules/usb/usb1/rpc.c
deleted file mode 100644
index 51bf0ca..0000000
--- a/src/modules/usb/usb1/rpc.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <errno.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include <collections.h>
-#include <init.h>
-#include <rpc.h>
-#include <syscall.h>
-
-#include "usb.h"
-#include "usb-ddrv.h"
-#include "usb-hc.h"
-#include "usb-server.h"
-
-list_t* usb_hcs;
-list_t* usb_ddrvs;
-list_t* unhandled_devs;
-
-extern void scan_hc(struct usb_hc* hc);
-
-static void hcd_handler(pid_t src, uint32_t corr_id, size_t length, void* data)
-{
-    struct usb_hc* hc;
-
-    if (length < sizeof(*hc)) {
-        rpc_send_int_response(src, corr_id, 0);
-        return;
-    }
-
-    hc = malloc(sizeof(*hc));
-    memcpy(hc, data, sizeof(*hc));
-
-    hc->pid = src;
-    hc->addr_counter = 1;
-    list_push(usb_hcs, hc);
-
-    scan_hc(hc);
-
-    rpc_send_int_response(src, corr_id, 42);
-}
-
-#define check(name) if ((dev->type.name != hd->name) && (hd->name != -1)) \
-    { continue; }
-
-static void ddrv_handler(pid_t src, uint32_t corr_id, size_t length, void* data)
-{
-    struct usb_handle_devs* hd = data;
-
-    if (length < sizeof(*hd)) {
-        rpc_send_int_response(src, corr_id, 0);
-        return;
-    }
-
-    p();
-    struct usb_ddrv* drv = calloc(1, sizeof(*drv));
-    drv->pid = src;
-    drv->handle = *hd;
-    list_push(usb_ddrvs, drv);
-
-    int i, s = list_size(unhandled_devs);
-    for (i = 0; i < s; i++) {
-        struct usb_prov_dev* dev = list_get_element_at(unhandled_devs, i);
-
-        check(vendor_id)
-        check(device_id)
-        check(class)
-        check(subclass)
-        check(protocol)
-
-        if (rpc_get_int(src, RPC_USB_DDRV_PLUG_FNN, sizeof(*dev), (char*)dev)) {
-            list_remove(unhandled_devs, i--);
-            s--;
-        }
-    }
-    v();
-
-    rpc_send_int_response(src, corr_id, 42);
-}
-
-static void devctl_handler(pid_t src, uint32_t corr_id, size_t length,
-    void* data)
-{
-    struct usb_devctrl_req* rq = data;
-
-    if (length < sizeof(*rq)) {
-        rpc_send_int_response(src, corr_id, 0);
-        return;
-    }
-
-    struct usb_device* dev;
-    struct usb_interface_descriptor* ifc;
-    int ifcs, ifc_num, i, ret;
-
-    switch (rq->type) {
-        case USB_DC_NUM_ENDPOINTS:
-        {
-            if (length < sizeof(struct usb_devctrl_gne)) {
-                rpc_send_int_response(src, corr_id, 0);
-                return;
-            }
-
-            struct usb_devctrl_gne* ne = data;
-            dev = ne->dev.dev_id;
-            ifc = (struct usb_interface_descriptor*)(dev->cur_cfg + 1);
-
-            ifcs = dev->cur_cfg->num_interfaces;
-            ifc_num = ne->dev.interface_id;
-            if ((ifc_num < 0) || (ifc_num >= ifcs)) {
-                ifc_num = 0;
-            }
-
-            for (i = 0; i < ifcs; i++) {
-                if (i == ifc_num) {
-                    rpc_send_int_response(src, corr_id, ifc->num_endpoints);
-                    return;
-                }
-
-                ifc = (struct usb_interface_descriptor*)
-                    ((struct usb_endpoint_descriptor*)(ifc + 1) +
-                    ifc->num_endpoints);
-            }
-            // Hierhin sollte der Code nie gelangen
-            // Execution should never get here
-            break;
-        }
-
-        case USB_DC_GET_IFC_ID:
-        {
-            if (length < sizeof(struct usb_devctrl_gii)) {
-                rpc_send_int_response(src, corr_id, 0);
-                return;
-            }
-
-            struct usb_devctrl_gii* ii = data;
-            dev = ii->dev.dev_id;
-            ifc = (struct usb_interface_descriptor*)(dev->cur_cfg + 1);
-
-            ifcs = dev->cur_cfg->num_interfaces;
-            // Das ist nicht die, die wir suchen
-            // This is not the one we're looking for
-            ifc_num = ii->dev.interface_id;
-            if ((ifc_num < 0) || (ifc_num >= ifcs)) {
-                ifc_num = 0;
-            }
-
-            for (i = 0; i < ifcs; i++) {
-                if (i == ifc_num) {
-                    rpc_send_int_response(src, corr_id, ifc->interface_number);
-                    return;
-                }
-
-                ifc = (struct usb_interface_descriptor*)
-                    ((struct usb_endpoint_descriptor*)(ifc + 1) +
-                    ifc->num_endpoints);
-            }
-            // s. o.
-            break;
-        }
-
-        case USB_DC_GET_ENDPOINT:
-        {
-            if (length < sizeof(struct usb_devctrl_gep)) {
-                // Hm, geht wohl nicht anders (und vertretbar, da dieser Fall
-                // nie auftreten sollte)
-                rpc_send_response(src, corr_id, 0, NULL);
-                return;
-            }
-
-            struct usb_devctrl_gep* ge = data;
-            dev = ge->dev.dev_id;
-            ifc = (struct usb_interface_descriptor*)(dev->cur_cfg + 1);
-
-            ifcs = dev->cur_cfg->num_interfaces;
-            ifc_num = ge->dev.interface_id;
-            if ((ifc_num < 0) || (ifc_num >= ifcs)) {
-                ifc_num = 0;
-            }
-
-            for (i = 0; i < ifcs; i++) {
-                if (i == ifc_num) {
-                    struct usb_endpoint_descriptor* epd =
-                        (struct usb_endpoint_descriptor*)(ifc + 1);
-                    rpc_send_response(src, corr_id, sizeof(*epd),
-                        (char*)&epd[ge->ep_number]);
-                    return;
-                }
-
-                ifc = (struct usb_interface_descriptor*)
-                    ((struct usb_endpoint_descriptor*)(ifc + 1) +
-                    ifc->num_endpoints);
-            }
-            // s. o.
-            break;
-        }
-
-        case USB_DC_GET_PIPE:
-        {
-            if (length < sizeof(struct usb_devctrl_gpp)) {
-                // Auch hier wohl nur so möglich
-                rpc_send_response(src, corr_id, 0, NULL);
-                return;
-            }
-
-            struct usb_devctrl_gpp* gp = data;
-            dev = gp->dev.dev_id;
-            ifc = (struct usb_interface_descriptor*)(dev->cur_cfg + 1);
-
-            ifcs = dev->cur_cfg->num_interfaces;
-            ifc_num = gp->dev.interface_id;
-            if ((ifc_num < 0) || (ifc_num >= ifcs)) {
-                ifc_num = 0;
-            }
-
-            for (i = 0; i < ifcs; i++) {
-                if (i == ifc_num) {
-                    if ((gp->ep_number < 0) ||
-                        (gp->ep_number >= ifc->num_endpoints))
-                    {
-                        gp->ep_number = 0;
-                    }
-
-                    struct usb_endpoint_descriptor* epd =
-                        (struct usb_endpoint_descriptor*)(ifc + 1);
-                    epd += gp->ep_number;
-
-                    struct usb_pipe pp = {
-                        .dev = dev,
-                        .ep = epd,
-                        .trs = {
-                            .usb_addr = dev->addr,
-                            .ep_id = epd->number,
-                            .mps = epd->mps,
-                            .type = epd->type,
-                            .speed = dev->speed,
-                            .toggle = 0,
-                            .stalled = false
-                        }
-                    };
-
-                    if (dev->parent->add_pipe != NULL) {
-                        dev->parent->add_pipe(dev->parent, &pp);
-                    }
-
-                    rpc_send_response(src, corr_id, sizeof(pp), (char*)&pp);
-                    return;
-                }
-
-                ifc = (struct usb_interface_descriptor*)
-                    ((struct usb_endpoint_descriptor*)(ifc + 1) +
-                    ifc->num_endpoints);
-            }
-            // s. o.
-            break;
-        }
-
-        case USB_DC_CLEAR_HALT:
-        {
-            if (length < sizeof(struct usb_devctrl_clh)) {
-                rpc_send_int_response(src, corr_id, -EINVAL);
-                return;
-            }
-
-            struct usb_devctrl_clh* clrh = data;
-            usb_clear_halt(&clrh->pipe);
-            rpc_send_int_response(src, corr_id, 0);
-            break;
-        }
-
-        case USB_DC_TRSF_CONTROL:
-        {
-            if (length < sizeof(struct usb_devctrl_tct)) {
-                rpc_send_int_response(src, corr_id, -EINVAL);
-                return;
-            }
-
-            struct usb_devctrl_tct* tctrq = data;
-            if (tctrq->ep0) {
-                dev = tctrq->dst.dev_id;
-                ret = usb_shm_control_transfer(dev->ep0, tctrq->setup.type,
-                    tctrq->setup.request, tctrq->setup.value,
-                    tctrq->setup.index, tctrq->setup.length, tctrq->shm);
-            } else {
-                ret = usb_shm_control_transfer(&tctrq->dst.pipe,
-                    tctrq->setup.type, tctrq->setup.request, tctrq->setup.value,
-                    tctrq->setup.index, tctrq->setup.length, tctrq->shm);
-            }
-
-            rpc_send_int_response(src, corr_id, ret);
-            break;
-        }
-
-        case USB_DC_TRSF_BULK:
-        {
-            if (length < sizeof(struct usb_devctrl_tbk)) {
-                rpc_send_int_response(src, corr_id, -EINVAL);
-                return;
-            }
-
-            struct usb_devctrl_tbk* tbkrq = data;
-            ret = usb_shm_bulk_transfer(&tbkrq->pipe, tbkrq->shm,
-                tbkrq->length);
-
-            // Senden des Togglebitstatus erwünscht
-            rpc_send_int_response(src, corr_id, ret);
-            break;
-        }
-    }
-}
-
-void register_rpc_interface(void)
-{
-    register_message_handler(RPC_USB_SV_REGHC_FNN, &hcd_handler);
-    register_message_handler(RPC_USB_SV_REGDD_FNN, &ddrv_handler);
-    register_message_handler(RPC_USB_SV_DEVCT_FNN, &devctl_handler);
-    init_service_register("usb1");
-}
diff --git a/src/modules/usb/usb1/transfer.c b/src/modules/usb/usb1/transfer.c
deleted file mode 100644
index 8c96c4d..0000000
--- a/src/modules/usb/usb1/transfer.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#include <stddef.h>
-#include <string.h>
-
-#include <rpc.h>
-#include <syscall.h>
-
-#include "usb.h"
-#include "usb-ddrv.h"
-#include "usb-hc.h"
-
-int usb_control_transfer(struct usb_pipe* pipe, int type, int request,
-    int value, int index, int length, void* buffer)
-{
-    uint32_t shm = 0;
-    void *shm_addr = NULL;
-
-    if (length) {
-        shm = create_shared_memory(length);
-        shm_addr = open_shared_memory(shm);
-
-        if ((buffer != NULL) && !(type & USB_SETUP_IN)) {
-            memcpy(shm_addr, buffer, length);
-        }
-    }
-
-    int ret = usb_shm_control_transfer(pipe, type, request, value, index,
-        length, shm);
-
-    if (length && (buffer != NULL) && (type & USB_SETUP_IN)) {
-        memcpy(buffer, shm_addr, length);
-    }
-
-    if (shm_addr != NULL) {
-        close_shared_memory(shm);
-    }
-
-    return ret;
-}
-
-int usb_shm_control_transfer(struct usb_pipe* pipe, int type, int request,
-    int value, int index, int length, uint32_t shm)
-{
-    struct usb_hc_trs_ctrl trs = {
-        .trs = {
-            .type = USB_TRST_CONTROL,
-            .hc = *pipe->dev->hc,
-            .pipe = pipe->trs
-        },
-        .setup = {
-            .type = type,
-            .request = request,
-            .value = value,
-            .index = index,
-            .length = length
-        },
-        .shm = shm
-    };
-
-    return rpc_get_int(pipe->dev->hc->pid, RPC_USB_HC_TRANSFER_FNN,
-        sizeof(trs), (char*)&trs);
-}
-
-int usb_shm_bulk_transfer(struct usb_pipe* pipe, uint32_t shm, size_t length)
-{
-    struct usb_hc_trs_bulk trs = {
-        .trs = {
-            .type = USB_TRST_BULK,
-            .hc = *pipe->dev->hc,
-            .pipe = pipe->trs
-        },
-        .receive = pipe->ep->direction ? true : false,
-        .length = length,
-        .shm = shm
-    };
-
-    return rpc_get_int(pipe->dev->hc->pid, RPC_USB_HC_TRANSFER_FNN,
-        sizeof(trs), (char*)&trs);
-}
-
-void usb_set_configuration(struct usb_device* dev, int config)
-{
-    usb_control_transfer(dev->ep0,
-        USB_SETUP_OUT | USB_SETUP_REQ_STD | USB_SETUP_REC_DEV,
-        USB_SET_CONFIGURATION, config, 0, 0, NULL);
-    dev->state = USB_CONFIGURED;
-}
-
-void usb_clear_halt(struct usb_pipe* pipe)
-{
-    usb_control_transfer(pipe->dev->ep0,
-        USB_SETUP_OUT | USB_SETUP_REQ_STD | USB_SETUP_REC_EP,
-        USB_CLEAR_FEATURE, USB_ENDPOINT_HALT, pipe->ep->number, 0, NULL);
-}
diff --git a/src/modules/usb/usb1/usb.h b/src/modules/usb/usb1/usb.h
deleted file mode 100644
index 6efc729..0000000
--- a/src/modules/usb/usb1/usb.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/*****************************************************************************
-* Copyright (c) 2009-2010 Max Reitz                                          *
-*                                                                            *
-* THE COKE-WARE LICENSE                                                      *
-*                                                                            *
-* Redistribution  and use  in  source  and  binary  forms,  with or  without *
-* modification,  are permitted  provided that the  following  conditions are *
-* met:                                                                       *
-*                                                                            *
-*   1. Redistributions  of  source code  must  retain  the  above  copyright *
-*      notice, this list of conditions and the following disclaimer.         *
-*   2. Redistribution in  binary form  must reproduce  the  above  copyright *
-*      notice  and either  the full  list  of  conditions and  the following *
-*      disclaimer or a link to both.                                         *
-*   3. If we meet one day and you think this stuff is worth it,  you may buy *
-*      me a coke in return.                                                  *
-*                                                                            *
-* THIS SOFTWARE  IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND ANY *
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT NOT LIMITED TO, THE IMPLIED *
-* WARRANTIES  OF MERCHANTABILITY  AND FITNESS  FOR A PARTICULAR PURPOSE  ARE *
-* DISCLAIMED.  IN  NO  EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR *
-* ANY DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL *
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *
-* CAUSED  AND  ON  ANY  THEORY OF  LIABILITY,  WHETHER  IN CONTRACT,  STRICT *
-* LIABILITY,  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY *
-* OUT OF THE USE  OF THIS  SOFTWARE,  EVEN IF ADVISED OF THE  POSSIBILITY OF *
-* SUCH DAMAGE.                                                               *
-*****************************************************************************/
-
-#ifndef USB_H
-#define USB_H
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-#include "usb-ddrv.h"
-#include "usb-hc.h"
-#include "usb-hub.h"
-#include "usb-server.h"
-#include "usb-structs.h"
-#include "usb-trans.h"
-
-struct usb_pipe;
-
-// Beschreibt einen Hub (sowohl Roothub als auch einen normalen).
-struct usb_hub {
-    // Da ein Hub immer nur entweder Root- oder normaler Hub sein kann, macht
-    // sich eine Union hier ganz gut.
-    union {
-        struct usb_device* usb;
-        struct usb_hc* hc;
-    } dev;
-    // true, wenn es sich um einen Roothub handelt.
-    bool root_hub;
-    // Anzahl der Ports am Hub.
-    int ports;
-
-    /**
-     * Wird aufgerufen, wenn eine neue Pipe benötigt wird. Ist bereits eine
-     * Pipe zur angegebenen Geräte-/Endpunkt-Kombination vorhanden, so sollte
-     * diese entfernt werden. Der Pointer darf NULL sein, um anzuzeigen, dass
-     * die Funktion nicht benötigt wird. Normale Hubs müssen jedoch dafür
-     * sorgen, dass die vom Hostcontroller (Roothub) bereitgestellte Funktion
-     * aufgerufen wird (es genügt, einfach den Pointer vom übergeordneten Hub
-     * zu kopieren, der Roothub muss dies erkennen können).
-     *
-     * @param hub Der Hub, an dem das Gerät hängt.
-     * @param pipe Die neu hinzuzufügende Pipe.
-     */
-    void (*add_pipe)(struct usb_hub* hub, struct usb_pipe* pipe);
-
-    /**
-     * Deaktiviert einen Port (zum Aktivieren wird reset_port verwendet).
-     *
-     * @param hub Hub mit dem zu deaktivierenden Port.
-     * @param port Zu deaktivierender Port.
-     */
-    void (*disable_port)(struct usb_hub* hub, int port);
-
-    /**
-     * Treibt das Resetsignal auf einem Port und aktiviert ihn. Wenn nötig,
-     * muss außerdem das Resume-Signal getrieben werden, damit nach dem Aufruf
-     * dieser Funktion mit dem Gerät kommuniziert werden kann.
-     *
-     * @param hub Hub, an dem das Gerät hängt.
-     * @param port Port, an dem es hängt.
-     */
-    void (*reset_port)(struct usb_hub* hub, int port);
-
-    /**
-     * Überprüft einen Port und gibt dessen Status zurück.
-     *
-     * @param hub Zu untersuchender Hub.
-     * @param port Entsprechender Port.
-     *
-     * @return Kombination aus den in usb-hub.h mit USB_HUB beginnenden Flags.
-     */
-    int (*scan_port)(struct usb_hub* hub, int port);
-};
-
-// Beschreibt ein USB-Gerät
-struct usb_device {
-    // Hub, an dem es hängt
-    struct usb_hub* parent;
-    // Index des Ports, an dem es sich befindet
-    int hub_port;
-
-    // Zuständiger Hostcontroller
-    struct usb_hc* hc;
-    // Dort eindeutige USB-Adresse
-    int addr;
-
-    // Aktueller Status
-    enum usb_state state;
-    // Aktuelle Geschwindigkeit
-    int speed;
-
-    // Default Control Pipe
-    struct usb_pipe* ep0;
-    // Device-Descriptor
-    struct usb_device_descriptor* dev_desc;
-    // Alle Configuration-Descriptors
-    struct usb_config_descriptor** cfg_desc;
-    // Aktuelle Konfiguration
-    struct usb_config_descriptor* cur_cfg;
-};
-
-// USB-Gerätetreiber
-struct usb_ddrv {
-    // Prozess-ID
-    pid_t pid;
-    // Gibt an, welche Geräte er behandeln kann
-    struct usb_handle_devs handle;
-};
-
-// Bisher nicht behandeltes USB-Gerät (oder Interface)
-struct usb_unhandled {
-    // Das Gerät
-    struct usb_device* dev;
-    // Das Interface
-    struct usb_interface_descriptor* ifc;
-};
-
-
-/**
- * Initialisiert die RPC-Handler und trägt sich als usb1 bei init ein-
- */
-void register_rpc_interface(void);
-
-/**
- * Enumeriert alle Geräte an einem Hub
- *
- * @param hub Der Hub
- */
-void scan_hub(struct usb_hub* hub);
-
-/**
- * Entstallt einen Endpunkt.
- *
- * @param pipe Zum Endpunkt gehörige Pipe
- */
-void usb_clear_halt(struct usb_pipe* pipe);
-
-/**
- * Führt einen Controltransfer durch.
- *
- * @param pipe Die Pipe
- * @param type type-Feld des SETUP-Pakets
- * @param request request-Feld des SETUP-Pakets
- * @param value value-Feld des SETUP-Pakets
- * @param index index-Feld des SETUP-Pakets
- * @param length length-Feld des SETUP-Pakets
- * @param buffer Speicherbereich, mit dem während der Datenphase gearbeitet
- *               werden soll.
- *
- * @return 0 bei Erfolg, sonst -errno.
- */
-int usb_control_transfer(struct usb_pipe* pipe, int type, int request,
-    int value, int index, int length, void* buffer);
-
-/**
- * Führt einen Bulktransfer durch.
- *
- * @param pipe Die Pipe für den Transfer
- * @param shm SHM-Bereich, mit dem gearbeitet werden soll
- * @param length Länge des Transfers
- *
- * @return -errno bei Fehler, sonst neuer Wert des Toggle-Bits.
- */
-int usb_shm_bulk_transfer(struct usb_pipe* pipe, uint32_t shm, size_t length);
-
-/**
- * Führt einen Controltransfer durch. Entspricht usb_control_transfer, außer
- * dass ein SHM-Bereich verwendet wird.
- */
-int usb_shm_control_transfer(struct usb_pipe* pipe, int type, int request,
-    int value, int index, int length, uint32_t shm);
-
-/**
- * Setzt die aktuelle Konfiguration eines Geräts.
- *
- * @param dev USB-Gerät
- * @param config ID der neuen Konfiguration
- */
-void usb_set_configuration(struct usb_device* dev, int config);
-
-#endif
-- 
2.6.3