[usb] Prepare for soft transition in USB protocol

Add ZX_PROTOCOL_USB_OLD and ZX_PROTOCOL_USB_DEVICE_OLD as aliases for
ZX_PROTOCOL_USB and ZX_PROTOCOL_USB_DEVICE.

Switch Zircon USB drivers to use ZX_PROTOCOL_USB_OLD and
ZX_PROTOCOL_USB_DEVICE_OLD.

After the garnet drivers also switch to ZX_PROTOCOL_USB_OLD
and ZX_PROTOCOL_USB_DEVICE_OLD, we can add new banjo based protocol
for ZX_PROTOCOL_USB and ZX_PROTOCOL_USB_DEVICE and switch our
USB drivers to the new protocol incrementally.

TEST: USB works on NUC.
Change-Id: I38e039004bfc91b0fdd289959f281890ba3157e2
diff --git a/system/dev/audio/usb-audio/usb-audio-descriptors.h b/system/dev/audio/usb-audio/usb-audio-descriptors.h
index 19724d0..38e4816 100644
--- a/system/dev/audio/usb-audio/usb-audio-descriptors.h
+++ b/system/dev/audio/usb-audio/usb-audio-descriptors.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <fbl/ref_counted.h>
 #include <fbl/ref_ptr.h>
 #include <zircon/hw/usb.h>
diff --git a/system/dev/audio/usb-audio/usb-audio-device.cpp b/system/dev/audio/usb-audio/usb-audio-device.cpp
index 68c364a..d8fc48e 100644
--- a/system/dev/audio/usb-audio/usb-audio-device.cpp
+++ b/system/dev/audio/usb-audio/usb-audio-device.cpp
@@ -58,7 +58,7 @@
 
     // Fetch our protocol.  We will need it to do pretty much anything with this
     // device.
-    status = device_get_protocol(parent(), ZX_PROTOCOL_USB, &usb_proto_);
+    status = device_get_protocol(parent(), ZX_PROTOCOL_USB_OLD, &usb_proto_);
     if (status != ZX_OK) {
         LOG(ERROR, "Failed to get USB protocol thunks (status %d)\n", status);
         return status;
diff --git a/system/dev/audio/usb-audio/usb-audio-device.h b/system/dev/audio/usb-audio/usb-audio-device.h
index b3f7fa0..7ca84ea 100644
--- a/system/dev/audio/usb-audio/usb-audio-device.h
+++ b/system/dev/audio/usb-audio/usb-audio-device.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddktl/device.h>
 #include <fbl/array.h>
 #include <fbl/intrusive_double_list.h>
diff --git a/system/dev/audio/usb-audio/usb-midi-sink.c b/system/dev/audio/usb-audio/usb-midi-sink.c
index 8fd31e4..518d306 100644
--- a/system/dev/audio/usb-audio/usb-midi-sink.c
+++ b/system/dev/audio/usb-audio/usb-midi-sink.c
@@ -4,7 +4,7 @@
 
 #include <ddk/device.h>
 #include <ddk/driver.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <zircon/device/midi.h>
diff --git a/system/dev/audio/usb-audio/usb-midi-source.c b/system/dev/audio/usb-audio/usb-midi-source.c
index de74d5b..c18fb07 100644
--- a/system/dev/audio/usb-audio/usb-midi-source.c
+++ b/system/dev/audio/usb-audio/usb-midi-source.c
@@ -4,7 +4,7 @@
 
 #include <ddk/device.h>
 #include <ddk/driver.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <zircon/device/midi.h>
diff --git a/system/dev/block/usb-mass-storage/usb-mass-storage.c b/system/dev/block/usb-mass-storage/usb-mass-storage.c
index f5dd0e3..c8b0822 100644
--- a/system/dev/block/usb-mass-storage/usb-mass-storage.c
+++ b/system/dev/block/usb-mass-storage/usb-mass-storage.c
@@ -5,7 +5,6 @@
 #include <ddk/binding.h>
 #include <ddk/debug.h>
 #include <ddk/driver.h>
-#include <ddk/protocol/usb.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <zircon/assert.h>
@@ -657,7 +656,7 @@
 
 static zx_status_t ums_bind(void* ctx, zx_device_t* device) {
     usb_protocol_t usb;
-    if (device_get_protocol(device, ZX_PROTOCOL_USB, &usb)) {
+    if (device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb)) {
         return 0;
     }
 
@@ -815,7 +814,7 @@
 };
 
 ZIRCON_DRIVER_BEGIN(usb_mass_storage, usb_mass_storage_driver_ops, "zircon", "0.1", 4)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_ABORT_IF(NE, BIND_USB_CLASS, USB_CLASS_MSC),
     BI_ABORT_IF(NE, BIND_USB_SUBCLASS, USB_SUBCLASS_MSC_SCSI),
     BI_MATCH_IF(EQ, BIND_USB_PROTOCOL, USB_PROTOCOL_MSC_BULK_ONLY),
diff --git a/system/dev/block/usb-mass-storage/usb-mass-storage.h b/system/dev/block/usb-mass-storage/usb-mass-storage.h
index 4c22a8e..0497c47 100644
--- a/system/dev/block/usb-mass-storage/usb-mass-storage.h
+++ b/system/dev/block/usb-mass-storage/usb-mass-storage.h
@@ -7,7 +7,7 @@
 #include <inttypes.h>
 #include <ddk/device.h>
 #include <ddk/protocol/block.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <lib/sync/completion.h>
 #include <zircon/device/block.h>
 #include <zircon/listnode.h>
diff --git a/system/dev/bluetooth/bt-transport-usb/bt-transport-usb.c b/system/dev/bluetooth/bt-transport-usb/bt-transport-usb.c
index 90fa6f8..12071fd 100644
--- a/system/dev/bluetooth/bt-transport-usb/bt-transport-usb.c
+++ b/system/dev/bluetooth/bt-transport-usb/bt-transport-usb.c
@@ -7,7 +7,7 @@
 #include <ddk/device.h>
 #include <ddk/driver.h>
 #include <ddk/protocol/bt/hci.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <zircon/device/bt-hci.h>
@@ -574,7 +574,7 @@
     zxlogf(TRACE, "hci_bind\n");
     usb_protocol_t usb;
 
-    zx_status_t status = device_get_protocol(device, ZX_PROTOCOL_USB, &usb);
+    zx_status_t status = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb);
     if (status != ZX_OK) {
         zxlogf(ERROR, "bt-transport-usb: get protocol failed: %s\n", zx_status_get_string(status));
         return status;
@@ -712,7 +712,7 @@
 
 // clang-format off
 ZIRCON_DRIVER_BEGIN(bt_transport_usb, usb_bt_hci_driver_ops, "zircon", "0.1", 4)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_ABORT_IF(NE, BIND_USB_CLASS, USB_CLASS_WIRELESS),
     BI_ABORT_IF(NE, BIND_USB_SUBCLASS, USB_SUBCLASS_BLUETOOTH),
     BI_MATCH_IF(EQ, BIND_USB_PROTOCOL, USB_PROTOCOL_BLUETOOTH),
diff --git a/system/dev/ethernet/asix-88179/asix-88179.c b/system/dev/ethernet/asix-88179/asix-88179.c
index 0f61633..25e8222 100644
--- a/system/dev/ethernet/asix-88179/asix-88179.c
+++ b/system/dev/ethernet/asix-88179/asix-88179.c
@@ -7,7 +7,7 @@
 #include <ddk/device.h>
 #include <ddk/driver.h>
 #include <ddk/protocol/ethernet.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <lib/cksum.h>
@@ -909,7 +909,7 @@
     zxlogf(TRACE, "ax88179_bind\n");
 
     usb_protocol_t usb;
-    zx_status_t result = device_get_protocol(device, ZX_PROTOCOL_USB, &usb);
+    zx_status_t result = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb);
     if (result != ZX_OK) {
         return result;
     }
@@ -1045,7 +1045,7 @@
 };
 
 ZIRCON_DRIVER_BEGIN(ethernet_ax88179, ax88179_driver_ops, "zircon", "0.1", 3)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_ABORT_IF(NE, BIND_USB_VID, ASIX_VID),
     BI_MATCH_IF(EQ, BIND_USB_PID, AX88179_PID),
 ZIRCON_DRIVER_END(ethernet_ax88179)
diff --git a/system/dev/ethernet/asix-88772b/asix-88772b.c b/system/dev/ethernet/asix-88772b/asix-88772b.c
index cb18238..1715799 100644
--- a/system/dev/ethernet/asix-88772b/asix-88772b.c
+++ b/system/dev/ethernet/asix-88772b/asix-88772b.c
@@ -9,7 +9,7 @@
 #include <ddk/driver.h>
 #include <ddk/binding.h>
 #include <ddk/protocol/ethernet.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <zircon/assert.h>
@@ -616,7 +616,7 @@
 
 static zx_status_t ax88772b_bind(void* ctx, zx_device_t* device) {
     usb_protocol_t usb;
-    zx_status_t result = device_get_protocol(device, ZX_PROTOCOL_USB, &usb);
+    zx_status_t result = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb);
     if (result != ZX_OK) {
         return result;
     }
@@ -727,7 +727,7 @@
 };
 
 ZIRCON_DRIVER_BEGIN(ethernet_ax88772b, ax88772b_driver_ops, "zircon", "0.1", 3)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_ABORT_IF(NE, BIND_USB_VID, ASIX_VID),
     BI_MATCH_IF(EQ, BIND_USB_PID, ASIX_PID),
 ZIRCON_DRIVER_END(ethernet_ax88772b)
diff --git a/system/dev/ethernet/rndis/rndishost.c b/system/dev/ethernet/rndis/rndishost.c
index dced929..b9db6ec 100644
--- a/system/dev/ethernet/rndis/rndishost.c
+++ b/system/dev/ethernet/rndis/rndishost.c
@@ -9,7 +9,7 @@
 #include <ddk/device.h>
 #include <ddk/driver.h>
 #include <ddk/protocol/ethernet.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <zircon/hw/usb-cdc.h>
@@ -472,7 +472,7 @@
 
 static zx_status_t rndishost_bind(void* ctx, zx_device_t* device) {
     usb_protocol_t usb;
-    zx_status_t status = device_get_protocol(device, ZX_PROTOCOL_USB, &usb);
+    zx_status_t status = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb);
     if (status != ZX_OK) {
         return status;
     }
@@ -630,7 +630,7 @@
 // covers the tethered device case.
 // clang-format off
 ZIRCON_DRIVER_BEGIN(rndishost, rndis_driver_ops, "zircon", "0.1", 4)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_ABORT_IF(NE, BIND_USB_CLASS, USB_CLASS_WIRELESS),
     BI_ABORT_IF(NE, BIND_USB_SUBCLASS, RNDIS_SUBCLASS),
     BI_MATCH_IF(EQ, BIND_USB_PROTOCOL, RNDIS_PROTOCOL),
diff --git a/system/dev/ethernet/usb-cdc-ecm/usb-cdc-ecm.c b/system/dev/ethernet/usb-cdc-ecm/usb-cdc-ecm.c
index b7d8b3b..8a9a734 100644
--- a/system/dev/ethernet/usb-cdc-ecm/usb-cdc-ecm.c
+++ b/system/dev/ethernet/usb-cdc-ecm/usb-cdc-ecm.c
@@ -7,7 +7,7 @@
 #include <ddk/device.h>
 #include <ddk/driver.h>
 #include <ddk/protocol/ethernet.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/protocol/usb/composite.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
@@ -529,7 +529,7 @@
     zxlogf(TRACE, "%s: starting %s\n", module_name, __FUNCTION__);
 
     usb_protocol_t usb;
-    zx_status_t result = device_get_protocol(device, ZX_PROTOCOL_USB, &usb);
+    zx_status_t result = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb);
     if (result != ZX_OK) {
         return result;
     }
@@ -781,7 +781,7 @@
 };
 
 ZIRCON_DRIVER_BEGIN(ethernet_usb_cdc_ecm, ecm_driver_ops, "zircon", "0.1", 4)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_ABORT_IF(NE, BIND_USB_CLASS, USB_CLASS_COMM),
     BI_ABORT_IF(NE, BIND_USB_SUBCLASS, USB_CDC_SUBCLASS_ETHERNET),
     BI_MATCH_IF(EQ, BIND_USB_PROTOCOL, 0),
diff --git a/system/dev/input/usb-hid/usb-hid.c b/system/dev/input/usb-hid/usb-hid.c
index b31e1aa..2a04f18 100644
--- a/system/dev/input/usb-hid/usb-hid.c
+++ b/system/dev/input/usb-hid/usb-hid.c
@@ -7,7 +7,7 @@
 #include <ddk/driver.h>
 #include <ddk/binding.h>
 #include <ddk/protocol/hidbus.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <zircon/hw/usb-hid.h>
@@ -245,7 +245,7 @@
         return ZX_ERR_NO_MEMORY;
     }
 
-    zx_status_t status = device_get_protocol(dev, ZX_PROTOCOL_USB, &usbhid->usb);
+    zx_status_t status = device_get_protocol(dev, ZX_PROTOCOL_USB_OLD, &usbhid->usb);
     if (status != ZX_OK) {
         goto fail;
     }
@@ -337,6 +337,6 @@
 };
 
 ZIRCON_DRIVER_BEGIN(usb_hid, usb_hid_driver_ops, "zircon", "0.1", 2)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_MATCH_IF(EQ, BIND_USB_CLASS, USB_CLASS_HID),
 ZIRCON_DRIVER_END(usb_hid)
diff --git a/system/dev/lib/usb/include/ddk/usb/usb.h b/system/dev/lib/usb/include/ddk/usb/usb.h
index e8160f5..636a1ce 100644
--- a/system/dev/lib/usb/include/ddk/usb/usb.h
+++ b/system/dev/lib/usb/include/ddk/usb/usb.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/protocol/usb/composite.h>
 #include <zircon/compiler.h>
 #include <zircon/hw/usb.h>
diff --git a/system/dev/lib/usb/include/usb/usb-request.h b/system/dev/lib/usb/include/usb/usb-request.h
index 2d09ddc..cdd88e0 100644
--- a/system/dev/lib/usb/include/usb/usb-request.h
+++ b/system/dev/lib/usb/include/usb/usb-request.h
@@ -8,7 +8,7 @@
 #include <sys/types.h>
 #include <ddk/io-buffer.h>
 #include <ddk/phys-iter.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <zircon/hw/usb.h>
 #include <zircon/listnode.h>
 
diff --git a/system/dev/lib/usb/usb-request.c b/system/dev/lib/usb/usb-request.c
index b1923a4..1c24288 100644
--- a/system/dev/lib/usb/usb-request.c
+++ b/system/dev/lib/usb/usb-request.c
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <usb/usb-request.h>
 #include <ddk/debug.h>
 
diff --git a/system/dev/serial/ftdi/ftdi.c b/system/dev/serial/ftdi/ftdi.c
index 4a2523a..8e9510c 100644
--- a/system/dev/serial/ftdi/ftdi.c
+++ b/system/dev/serial/ftdi/ftdi.c
@@ -7,7 +7,7 @@
 #include <ddk/device.h>
 #include <ddk/driver.h>
 #include <ddk/protocol/serialimpl.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/usb/usb.h>
 #include <usb/usb-request.h>
 #include <zircon/device/serial.h>
@@ -352,7 +352,7 @@
 static zx_status_t ftdi_bind(void* ctx, zx_device_t* device) {
 
     usb_protocol_t usb;
-    zx_status_t status = device_get_protocol(device, ZX_PROTOCOL_USB, &usb);
+    zx_status_t status = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb);
     if (status != ZX_OK) {
         return status;
     }
@@ -486,7 +486,7 @@
 };
 
 ZIRCON_DRIVER_BEGIN(ftdi, _ftdi_driver_ops, "zircon", "0.1", 3)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_MATCH_IF(EQ, BIND_USB_VID, FTDI_VID),
     BI_MATCH_IF(EQ, BIND_USB_PID, FTDI_232R_PID),
 ZIRCON_DRIVER_END(ftdi)
diff --git a/system/dev/test/ddk-test/usb-request-test.c b/system/dev/test/ddk-test/usb-request-test.c
index 41bba76..bb7a3cc 100644
--- a/system/dev/test/ddk-test/usb-request-test.c
+++ b/system/dev/test/ddk-test/usb-request-test.c
@@ -4,7 +4,7 @@
 
 #include <limits.h>
 
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <lib/fake-bti/bti.h>
 #include <usb/usb-request.h>
 #include <unittest/unittest.h>
diff --git a/system/dev/usb/usb-bus/usb-bus.c b/system/dev/usb/usb-bus/usb-bus.c
index 3a68741..c7618b7 100644
--- a/system/dev/usb/usb-bus/usb-bus.c
+++ b/system/dev/usb/usb-bus/usb-bus.c
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include <ddk/debug.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/protocol/usb/bus.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -64,7 +64,7 @@
 
 static zx_status_t bus_get_device_id(zx_device_t* device, uint32_t* out) {
     usb_protocol_t usb;
-    if (device_get_protocol(device, ZX_PROTOCOL_USB, &usb) != ZX_OK) {
+    if (device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb) != ZX_OK) {
         return ZX_ERR_INTERNAL;
     }
     *out = usb_get_device_id(&usb);
diff --git a/system/dev/usb/usb-bus/usb-device.c b/system/dev/usb/usb-bus/usb-device.c
index 21892e1..a674369 100644
--- a/system/dev/usb/usb-bus/usb-device.c
+++ b/system/dev/usb/usb-bus/usb-device.c
@@ -122,7 +122,7 @@
 }
 
 static zx_status_t usb_device_get_protocol(void* ctx, uint32_t proto_id, void* protocol) {
-    if (proto_id == ZX_PROTOCOL_USB) {
+    if (proto_id == ZX_PROTOCOL_USB_OLD) {
         usb_protocol_t* usb_proto = protocol;
         usb_proto->ctx = ctx;
         usb_proto->ops = &_usb_protocol;
@@ -622,7 +622,7 @@
         .name = name,
         .ctx = dev,
         .ops = &usb_device_proto,
-        .proto_id = ZX_PROTOCOL_USB_DEVICE,
+        .proto_id = ZX_PROTOCOL_USB_DEVICE_OLD,
         .proto_ops = &_usb_protocol,
         .props = props,
         .prop_count = countof(props),
diff --git a/system/dev/usb/usb-bus/usb-device.h b/system/dev/usb/usb-bus/usb-device.h
index 81023cd..69516f3 100644
--- a/system/dev/usb/usb-bus/usb-device.h
+++ b/system/dev/usb/usb-bus/usb-device.h
@@ -8,7 +8,7 @@
 #include <ddk/device.h>
 #include <ddk/protocol/usb/hci.h>
 #include <ddk/protocol/usb/hub.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <usb/usb-request.h>
 #include <lib/sync/completion.h>
 #include <zircon/hw/usb.h>
diff --git a/system/dev/usb/usb-bus/util.c b/system/dev/usb/usb-bus/util.c
index 3fa736c..5c556f6 100644
--- a/system/dev/usb/usb-bus/util.c
+++ b/system/dev/usb/usb-bus/util.c
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include <ddk/debug.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <usb/usb-request.h>
 #include <endian.h>
 #include <lib/sync/completion.h>
diff --git a/system/dev/usb/usb-composite/usb-composite.c b/system/dev/usb/usb-composite/usb-composite.c
index 366b63c..dac892f 100644
--- a/system/dev/usb/usb-composite/usb-composite.c
+++ b/system/dev/usb/usb-composite/usb-composite.c
@@ -77,7 +77,7 @@
     snprintf(name, sizeof(name), "ifc-%03d", interface_desc->bInterfaceNumber);
 
     zx_device_prop_t props[] = {
-        { BIND_PROTOCOL, 0, ZX_PROTOCOL_USB },
+        { BIND_PROTOCOL, 0, ZX_PROTOCOL_USB_OLD },
         { BIND_USB_VID, 0, device_desc->idVendor },
         { BIND_USB_PID, 0, device_desc->idProduct },
         { BIND_USB_CLASS, 0, usb_class },
@@ -90,7 +90,7 @@
         .name = name,
         .ctx = intf,
         .ops = &usb_interface_proto,
-        .proto_id = ZX_PROTOCOL_USB,
+        .proto_id = ZX_PROTOCOL_USB_OLD,
         .proto_ops = &usb_device_protocol,
         .props = props,
         .prop_count = countof(props),
@@ -159,7 +159,7 @@
     snprintf(name, sizeof(name), "asc-%03d", assoc_desc->iFunction);
 
     zx_device_prop_t props[] = {
-        { BIND_PROTOCOL, 0, ZX_PROTOCOL_USB },
+        { BIND_PROTOCOL, 0, ZX_PROTOCOL_USB_OLD },
         { BIND_USB_VID, 0, device_desc->idVendor },
         { BIND_USB_PID, 0, device_desc->idProduct },
         { BIND_USB_CLASS, 0, usb_class },
@@ -172,7 +172,7 @@
         .name = name,
         .ctx = intf,
         .ops = &usb_interface_proto,
-        .proto_id = ZX_PROTOCOL_USB,
+        .proto_id = ZX_PROTOCOL_USB_OLD,
         .proto_ops = &usb_device_protocol,
         .props = props,
         .prop_count = countof(props),
@@ -362,7 +362,7 @@
 
 static zx_status_t usb_composite_bind(void* ctx, zx_device_t* parent) {
     usb_protocol_t usb;
-    zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_USB, &usb);
+    zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_USB_OLD, &usb);
     if (status != ZX_OK) {
         return status;
     }
@@ -416,5 +416,5 @@
 // The '*' in the version string is important. This marks this driver as a fallback,
 // to allow other drivers to bind against ZX_PROTOCOL_USB_DEVICE to handle more specific cases.
 ZIRCON_DRIVER_BEGIN(usb_composite, usb_composite_driver_ops, "zircon", "*0.1", 1)
-    BI_MATCH_IF(EQ, BIND_PROTOCOL, ZX_PROTOCOL_USB_DEVICE),
+    BI_MATCH_IF(EQ, BIND_PROTOCOL, ZX_PROTOCOL_USB_DEVICE_OLD),
 ZIRCON_DRIVER_END(usb_composite)
diff --git a/system/dev/usb/usb-composite/usb-composite.h b/system/dev/usb/usb-composite/usb-composite.h
index 916be1d..2e88982 100644
--- a/system/dev/usb/usb-composite/usb-composite.h
+++ b/system/dev/usb/usb-composite/usb-composite.h
@@ -6,7 +6,7 @@
 
 #include <ddk/binding.h>
 #include <ddk/device.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <lib/sync/completion.h>
 #include <zircon/hw/usb.h>
 
diff --git a/system/dev/usb/usb-composite/usb-interface.c b/system/dev/usb/usb-composite/usb-interface.c
index 4eabdaf..ef9de98 100644
--- a/system/dev/usb/usb-composite/usb-interface.c
+++ b/system/dev/usb/usb-composite/usb-interface.c
@@ -4,7 +4,7 @@
 
 #include <ddk/binding.h>
 #include <ddk/debug.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/protocol/usb/composite.h>
 #include <usb/usb-request.h>
 #include <stdlib.h>
@@ -17,7 +17,7 @@
 static zx_status_t usb_interface_get_protocol(void* ctx, uint32_t proto_id, void* out) {
     usb_interface_t* intf = ctx;
     switch (proto_id) {
-    case ZX_PROTOCOL_USB: {
+    case ZX_PROTOCOL_USB_OLD: {
         usb_protocol_t* proto = (usb_protocol_t *)out;
         proto->ctx = intf;
         proto->ops = &usb_device_protocol;
diff --git a/system/dev/usb/usb-dfu/usb-dfu.cpp b/system/dev/usb/usb-dfu/usb-dfu.cpp
index f602ea6..87bda67 100644
--- a/system/dev/usb/usb-dfu/usb-dfu.cpp
+++ b/system/dev/usb/usb-dfu/usb-dfu.cpp
@@ -7,7 +7,7 @@
 #include <ddk/binding.h>
 #include <ddk/debug.h>
 #include <ddk/device.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <fbl/algorithm.h>
 #include <fbl/unique_ptr.h>
 #include <fuchsia/mem/c/fidl.h>
@@ -211,7 +211,7 @@
 // static
 zx_status_t Dfu::Create(zx_device_t* parent) {
     usb_protocol_t usb;
-    zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_USB, &usb);
+    zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_USB_OLD, &usb);
     if (status != ZX_OK) {
         return status;
     }
@@ -281,7 +281,7 @@
 
 // clang-format off
 ZIRCON_DRIVER_BEGIN(usb_dfu, usb::dfu_driver_ops, "zircon", "0.1", 4)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_ABORT_IF(NE, BIND_USB_CLASS, USB_CLASS_APPLICATION_SPECIFIC),
     BI_ABORT_IF(NE, BIND_USB_SUBCLASS, USB_SUBCLASS_DFU),
     BI_MATCH_IF(EQ, BIND_USB_PROTOCOL, USB_PROTOCOL_DFU),
diff --git a/system/dev/usb/usb-hub/usb-hub.c b/system/dev/usb/usb-hub/usb-hub.c
index 4e71009..439ea30 100644
--- a/system/dev/usb/usb-hub/usb-hub.c
+++ b/system/dev/usb/usb-hub/usb-hub.c
@@ -6,7 +6,7 @@
 #include <ddk/debug.h>
 #include <ddk/device.h>
 #include <ddk/driver.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <ddk/protocol/usb/bus.h>
 #include <ddk/protocol/usb/hub.h>
 #include <ddk/usb/usb.h>
@@ -406,7 +406,7 @@
 
 static zx_status_t usb_hub_bind(void* ctx, zx_device_t* device) {
     usb_protocol_t usb;
-    zx_status_t status = device_get_protocol(device, ZX_PROTOCOL_USB, &usb);
+    zx_status_t status = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &usb);
     if (status != ZX_OK) {
         return status;
     }
@@ -521,6 +521,6 @@
 };
 
 ZIRCON_DRIVER_BEGIN(usb_hub, usb_hub_driver_ops, "zircon", "0.1", 2)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_DEVICE),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_DEVICE_OLD),
     BI_MATCH_IF(EQ, BIND_USB_CLASS, USB_CLASS_HUB),
 ZIRCON_DRIVER_END(usb_hub)
diff --git a/system/dev/usb/usb-test/flash-programmer/flash-programmer.cpp b/system/dev/usb/usb-test/flash-programmer/flash-programmer.cpp
index bf90f33..edbb7ee 100644
--- a/system/dev/usb/usb-test/flash-programmer/flash-programmer.cpp
+++ b/system/dev/usb/usb-test/flash-programmer/flash-programmer.cpp
@@ -228,7 +228,7 @@
 // static
 zx_status_t FlashProgrammer::Create(zx_device_t* parent) {
     usb_protocol_t usb;
-    zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_USB, &usb);
+    zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_USB_OLD, &usb);
     if (status != ZX_OK) {
         return status;
     }
@@ -262,7 +262,7 @@
 
 // clang-format off
 ZIRCON_DRIVER_BEGIN(flash_programmer, usb::flash_programmer_driver_ops, "zircon", "0.1", 3)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_DEVICE),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_DEVICE_OLD),
     BI_ABORT_IF(NE, BIND_USB_VID, CYPRESS_VID),
     BI_MATCH_IF(EQ, BIND_USB_PID, FLASH_PROGRAMMER_PID),
 ZIRCON_DRIVER_END(flash_programmer)
diff --git a/system/dev/usb/usb-test/fx3/fx3.c b/system/dev/usb/usb-test/fx3/fx3.c
index af09df4..43a113f 100644
--- a/system/dev/usb/usb-test/fx3/fx3.c
+++ b/system/dev/usb/usb-test/fx3/fx3.c
@@ -251,7 +251,7 @@
     if (!fx3) {
         return ZX_ERR_NO_MEMORY;
     }
-    zx_status_t result = device_get_protocol(device, ZX_PROTOCOL_USB, &fx3->usb);
+    zx_status_t result = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &fx3->usb);
     if (result != ZX_OK) {
         fx3_free(fx3);
         return result;
@@ -280,7 +280,7 @@
 };
 
 ZIRCON_DRIVER_BEGIN(fx3, fx3_driver_ops, "zircon", "0.1", 4)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
     BI_ABORT_IF(NE, BIND_USB_VID, CYPRESS_VID),
     BI_MATCH_IF(EQ, BIND_USB_PID, FX3_DEFAULT_BOOTLOADER_PID),
     BI_MATCH_IF(EQ, BIND_USB_PID, FX3_SECOND_STAGE_BOOTLOADER_PID),
diff --git a/system/dev/usb/usb-test/usb-tester/usb-tester.cpp b/system/dev/usb/usb-test/usb-tester/usb-tester.cpp
index 0097a39..920905b 100644
--- a/system/dev/usb/usb-test/usb-tester/usb-tester.cpp
+++ b/system/dev/usb/usb-test/usb-tester/usb-tester.cpp
@@ -472,7 +472,7 @@
 // static
 zx_status_t UsbTester::Create(zx_device_t* parent) {
     usb_protocol_t usb;
-    zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_USB, &usb);
+    zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_USB_OLD, &usb);
     if (status != ZX_OK) {
         return status;
     }
@@ -581,7 +581,7 @@
 
 // clang-format off
 ZIRCON_DRIVER_BEGIN(usb_tester, usb::driver_ops, "zircon", "0.1", 3)
-    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_DEVICE),
+    BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_DEVICE_OLD),
     BI_ABORT_IF(NE, BIND_USB_VID, GOOGLE_VID),
     BI_MATCH_IF(EQ, BIND_USB_PID, USB_TESTER_PID),
 ZIRCON_DRIVER_END(usb_tester)
diff --git a/system/dev/usb/xhci/usb-xhci.cpp b/system/dev/usb/xhci/usb-xhci.cpp
index 2e9cd0a..981496c 100644
--- a/system/dev/usb/xhci/usb-xhci.cpp
+++ b/system/dev/usb/xhci/usb-xhci.cpp
@@ -10,7 +10,6 @@
 // TODO: Reorder. This needs to be included first until USB headers move to banjo.
 #include <zircon/hw/usb-hub.h>
 #include <ddk/protocol/usb/hci.h>
-#include <ddk/protocol/usb.h>
 
 #include <hw/arch_ops.h>
 #include <hw/reg.h>
diff --git a/system/dev/usb/xhci/xdc.h b/system/dev/usb/xhci/xdc.h
index 9879994..253236f 100644
--- a/system/dev/usb/xhci/xdc.h
+++ b/system/dev/usb/xhci/xdc.h
@@ -6,7 +6,7 @@
 
 #include <atomic>
 #include <ddk/device.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb-old.h>
 #include <lib/sync/completion.h>
 #include <usb/usb-request.h>
 #include <xdc-server-utils/packet.h>
diff --git a/system/dev/usb/xhci/xhci-root-hub.cpp b/system/dev/usb/xhci/xhci-root-hub.cpp
index f3e6e30..2044b0b 100644
--- a/system/dev/usb/xhci/xhci-root-hub.cpp
+++ b/system/dev/usb/xhci/xhci-root-hub.cpp
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include <ddk/debug.h>
-#include <ddk/protocol/usb.h>
 #include <usb/usb-request.h>
 #include <stdlib.h>
 #include <stdio.h>
diff --git a/system/dev/usb/xhci/xhci-root-hub.h b/system/dev/usb/xhci/xhci-root-hub.h
index 2ca36af..0b8c725 100644
--- a/system/dev/usb/xhci/xhci-root-hub.h
+++ b/system/dev/usb/xhci/xhci-root-hub.h
@@ -4,7 +4,8 @@
 
 #pragma once
 
-#include <ddk/protocol/usb.h>
+#include <ddk/phys-iter.h>
+#include <ddk/protocol/usb/request.h>
 #include <zircon/listnode.h>
 
 #include "xhci-trb.h"
diff --git a/system/dev/usb/xhci/xhci-transfer-common.h b/system/dev/usb/xhci/xhci-transfer-common.h
index eac5671..500b55c 100644
--- a/system/dev/usb/xhci/xhci-transfer-common.h
+++ b/system/dev/usb/xhci/xhci-transfer-common.h
@@ -4,7 +4,6 @@
 
 #pragma once
 
-#include <ddk/protocol/usb.h>
 #include <usb/usb-request.h>
 
 #include "xhci-trb.h"
diff --git a/system/dev/usb/xhci/xhci-transfer.cpp b/system/dev/usb/xhci/xhci-transfer.cpp
index 5d8d761..d59f84e 100644
--- a/system/dev/usb/xhci/xhci-transfer.cpp
+++ b/system/dev/usb/xhci/xhci-transfer.cpp
@@ -3,7 +3,8 @@
 // found in the LICENSE file.
 
 #include <ddk/debug.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/phys-iter.h>
+#include <zircon/hw/usb-hub.h>
 #include <ddk/protocol/usb/hci.h>
 #include <zircon/assert.h>
 #include <zircon/hw/usb.h>
diff --git a/system/dev/usb/xhci/xhci.h b/system/dev/usb/xhci/xhci.h
index c2fc822..ef0195b 100644
--- a/system/dev/usb/xhci/xhci.h
+++ b/system/dev/usb/xhci/xhci.h
@@ -15,11 +15,12 @@
 
 #include <ddk/device.h>
 #include <ddk/mmio-buffer.h>
+#include <ddk/phys-iter.h>
 #include <ddk/protocol/pci.h>
 #include <ddk/protocol/platform-device-lib.h>
 #include <ddk/protocol/platform/device.h>
 #include <ddk/protocol/usb/bus.h>
-#include <ddk/protocol/usb.h>
+#include <ddk/protocol/usb/request.h>
 #include <usb/usb-request.h>
 
 #include "xhci-hw.h"
diff --git a/system/ulib/ddk/include/ddk/driver.h b/system/ulib/ddk/include/ddk/driver.h
index b8daf80..711177d 100644
--- a/system/ulib/ddk/include/ddk/driver.h
+++ b/system/ulib/ddk/include/ddk/driver.h
@@ -160,6 +160,7 @@
 
 // Protocol Identifiers
 #define DDK_PROTOCOL_DEF(tag, val, name, flags) ZX_PROTOCOL_##tag = val,
+#define DDK_PROTOCOL_DEF_ALIAS(tag, val, name, flags) ZX_PROTOCOL_##tag = val,
 enum {
 #include <ddk/protodefs.h>
 };
diff --git a/system/ulib/ddk/include/ddk/protocol/usb-old.h b/system/ulib/ddk/include/ddk/protocol/usb-old.h
new file mode 100644
index 0000000..54d2491
--- /dev/null
+++ b/system/ulib/ddk/include/ddk/protocol/usb-old.h
@@ -0,0 +1,217 @@
+// Copyright 2016 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#pragma once
+
+#include <ddk/phys-iter.h>
+#include <ddk/protocol/usb/request.h>
+#include <sys/types.h>
+#include <zircon/compiler.h>
+#include <zircon/types.h>
+#include <zircon/hw/usb.h>
+#include <zircon/hw/usb-hub.h>
+#include <zircon/listnode.h>
+
+__BEGIN_CDECLS;
+
+typedef struct usb_request usb_request_t;
+
+// cache maintenance ops
+#define USB_REQUEST_CACHE_INVALIDATE        ZX_VMO_OP_CACHE_INVALIDATE
+#define USB_REQUEST_CACHE_CLEAN             ZX_VMO_OP_CACHE_CLEAN
+#define USB_REQUEST_CACHE_CLEAN_INVALIDATE  ZX_VMO_OP_CACHE_CLEAN_INVALIDATE
+#define USB_REQUEST_CACHE_SYNC              ZX_VMO_OP_CACHE_SYNC
+
+typedef void (*usb_request_complete_cb)(usb_request_t* req, void* cookie);
+
+// Returns a batch of completed requests for an endpoint.
+// The client should free the completed_reqs array once they are finished with it.
+typedef void (*usb_batch_complete_cb)(usb_request_t** completed_reqs, size_t num_completed,
+                                      void* cookie);
+
+typedef struct {
+    zx_status_t (*control)(void* ctx, uint8_t request_type, uint8_t request, uint16_t value,
+                           uint16_t index, void* data, size_t length, zx_time_t timeout,
+                           size_t* out_length);
+    // queues a USB request
+    void (*request_queue)(void* ctx, usb_request_t* usb_request, usb_request_complete_cb,
+                          void* cookie);
+
+    zx_status_t (*configure_batch_callback)(void* ctx, uint8_t ep_address,
+                                            usb_batch_complete_cb cb, void* cookie);
+
+    usb_speed_t (*get_speed)(void* ctx);
+    zx_status_t (*set_interface)(void* ctx, uint8_t interface_number, uint8_t alt_setting);
+    uint8_t (*get_configuration)(void* ctx);
+    zx_status_t (*set_configuration)(void* ctx, uint8_t configuration);
+    zx_status_t (*enable_endpoint)(void* ctx, usb_endpoint_descriptor_t* ep_desc,
+                                   usb_ss_ep_comp_descriptor_t* ss_comp_desc, bool enable);
+    zx_status_t (*reset_endpoint)(void* ctx, uint8_t ep_address);
+    size_t (*get_max_transfer_size)(void* ctx, uint8_t ep_address);
+    uint32_t (*get_device_id)(void* ctx);
+    void (*get_device_descriptor)(void* ctx, usb_device_descriptor_t* out_desc);
+    zx_status_t (*get_configuration_descriptor)(void* ctx, uint8_t configuration,
+                                                usb_configuration_descriptor_t** out,
+                                                size_t* out_length);
+    zx_status_t (*get_descriptor_list)(void* ctx, void** out_descriptors, size_t* out_length);
+    zx_status_t (*get_string_descriptor)(void* ctx, uint8_t desc_id, uint16_t lang_id,
+                                         uint8_t* buf, size_t buflen, size_t* out_actual,
+                                         uint16_t* out_actual_lang_id);
+    zx_status_t (*cancel_all)(void* ctx, uint8_t ep_address);
+    uint64_t (*get_current_frame)(void* ctx);
+    size_t (*get_request_size)(void* ctx);
+} usb_protocol_ops_t;
+
+typedef struct usb_protocol {
+    usb_protocol_ops_t* ops;
+    void* ctx;
+} usb_protocol_t;
+
+// synchronously executes a control request on endpoint zero
+static inline zx_status_t usb_control(const usb_protocol_t* usb, uint8_t request_type,
+                                      uint8_t request, uint16_t value, uint16_t index, void* data,
+                                      size_t length, zx_time_t timeout, size_t* out_length) {
+    return usb->ops->control(usb->ctx, request_type, request, value, index, data, length, timeout,
+                             out_length);
+}
+
+static inline zx_status_t usb_get_descriptor(const usb_protocol_t* usb, uint8_t request_type,
+                                             uint16_t type, uint16_t index, void* data,
+                                             size_t length, zx_time_t timeout, size_t* out_length) {
+    return usb_control(usb, request_type | USB_DIR_IN, USB_REQ_GET_DESCRIPTOR,
+                       (uint16_t)(type << 8 | index), 0, data, length, timeout, out_length);
+}
+
+static inline zx_status_t usb_get_status(const usb_protocol_t* usb, uint8_t request_type,
+                                         uint16_t index, void* data, size_t length,
+                                         zx_time_t timeout, size_t* out_length) {
+    return usb_control(usb, request_type | USB_DIR_IN, USB_REQ_GET_STATUS, 0, index, data, length,
+                       timeout, out_length);
+}
+
+static inline zx_status_t usb_set_feature(const usb_protocol_t* usb, uint8_t request_type,
+                                          uint16_t feature, uint16_t index, zx_time_t timeout) {
+    return usb_control(usb, request_type, USB_REQ_SET_FEATURE, feature, index, NULL, 0, timeout,
+                       NULL);
+}
+
+static inline zx_status_t usb_clear_feature(const usb_protocol_t* usb, uint8_t request_type,
+                                            uint16_t feature, uint16_t index, zx_time_t timeout) {
+    return usb_control(usb, request_type, USB_REQ_CLEAR_FEATURE, feature, index, NULL, 0, timeout,
+                       NULL);
+}
+
+static inline void usb_request_queue(const usb_protocol_t* usb, usb_request_t* usb_request,
+                                     usb_request_complete_cb cb, void* cookie) {
+    return usb->ops->request_queue(usb->ctx, usb_request, cb, cookie);
+}
+
+// Configures an endpoint to batch multiple requests to a single callback.
+// Requests will receive a callback if they have set require_batch_cb to true, or an error occurs.
+//   ep_address: the endpoint which requests will be queued on.
+//   complete_cb: callback for the batch of completed requests.
+//   cookie: user data passed to the |complete_cb|.
+static inline zx_status_t usb_configure_batch_callback(const usb_protocol_t* usb,
+                                                       uint8_t ep_address,
+                                                       usb_batch_complete_cb complete_cb,
+                                                       void* cookie) {
+    return usb->ops->configure_batch_callback(usb->ctx, ep_address, complete_cb, cookie);
+}
+
+static inline usb_speed_t usb_get_speed(const usb_protocol_t* usb) {
+    return usb->ops->get_speed(usb->ctx);
+}
+
+static inline zx_status_t usb_set_interface(const usb_protocol_t* usb, uint8_t interface_number,
+                                            uint8_t alt_setting) {
+    return usb->ops->set_interface(usb->ctx, interface_number, alt_setting);
+}
+
+static inline uint8_t usb_get_configuration(const usb_protocol_t* usb) {
+    return usb->ops->get_configuration(usb->ctx);
+}
+
+static inline zx_status_t usb_set_configuration(const usb_protocol_t* usb, uint8_t configuration) {
+    return usb->ops->set_configuration(usb->ctx, configuration);
+}
+
+static inline zx_status_t usb_enable_endpoint(const usb_protocol_t* usb,
+                                              usb_endpoint_descriptor_t* ep_desc,
+                                              usb_ss_ep_comp_descriptor_t* ss_comp_desc,
+                                              bool enable) {
+    return usb->ops->enable_endpoint(usb->ctx, ep_desc, ss_comp_desc, enable);
+}
+
+// Resets an endpoint that is in a halted or error state.
+// Endpoints will be halted if the device returns a STALL in response to a USB transaction.
+// When that occurs, the transaction will fail with ERR_IO_REFUSED.
+// usb_reset_endpoint() the endpoint to normal running state.
+static inline zx_status_t usb_reset_endpoint(const usb_protocol_t* usb, uint8_t ep_address) {
+    return usb->ops->reset_endpoint(usb->ctx, ep_address);
+}
+
+// returns the maximum amount of data that can be transferred on an endpoint in a single transaction.
+static inline size_t usb_get_max_transfer_size(const usb_protocol_t* usb, uint8_t ep_address) {
+    return usb->ops->get_max_transfer_size(usb->ctx, ep_address);
+}
+
+// Returns the device ID for the device.
+// This ID is generated by and used internally by the USB HCI controller driver.
+static inline uint32_t usb_get_device_id(const usb_protocol_t* usb) {
+    return usb->ops->get_device_id(usb->ctx);
+}
+
+// Returns the device's device descriptor.
+static inline void usb_get_device_descriptor(const usb_protocol_t* usb,
+                                             usb_device_descriptor_t* out_desc) {
+    usb->ops->get_device_descriptor(usb->ctx, out_desc);
+}
+
+// Returns the configuration descriptor for the given configuration.
+static inline zx_status_t usb_get_configuration_descriptor(const usb_protocol_t* usb,
+                                                           uint8_t configuration,
+                                                           usb_configuration_descriptor_t** out,
+                                                           size_t* out_length) {
+    return usb->ops->get_configuration_descriptor(usb->ctx, configuration, out, out_length);
+}
+
+// returns the USB descriptors for the USB device or interface
+// the returned value is de-allocated with free()
+static inline zx_status_t usb_get_descriptor_list(const usb_protocol_t* usb, void** out_descriptors,
+                                                  size_t* out_length) {
+    return usb->ops->get_descriptor_list(usb->ctx, out_descriptors, out_length);
+}
+
+// Fetch the descriptor using the provided descriptor ID and language ID.  If
+// the language ID requested is not available, the first entry of the language
+// ID table will be used instead and be provided in the updated version of the
+// parameter.
+//
+// The string will be encoded using UTF-8, and will be truncated to fit the
+// space provided by the buflen parameter.  Embedded nulls may be present
+// in the string, and the result may not be null terminated if the string
+// occupies the entire provided buffer.
+//
+static inline zx_status_t usb_get_string_descriptor(const usb_protocol_t* usb, uint8_t desc_id, 
+                                                    uint16_t lang_id, uint8_t* buf, size_t buflen,
+                                                    size_t* out_actual,
+                                                    uint16_t* out_actual_lang_id) {
+    return usb->ops->get_string_descriptor(usb->ctx, desc_id, lang_id, buf, buflen, out_actual,
+                                           out_actual_lang_id);
+}
+
+static inline zx_status_t usb_cancel_all(const usb_protocol_t* usb, uint8_t ep_address) {
+    return usb->ops->cancel_all(usb->ctx, ep_address);
+}
+
+// returns the current frame (in milliseconds), used for isochronous transfers
+static inline uint64_t usb_get_current_frame(const usb_protocol_t* usb) {
+    return usb->ops->get_current_frame(usb->ctx);
+}
+
+// return the internal context size plus parents request size
+static inline uint64_t usb_get_request_size(const usb_protocol_t* usb) {
+    return usb->ops->get_request_size(usb->ctx);
+}
+__END_CDECLS;
diff --git a/system/ulib/ddk/include/ddk/protocol/usb.h b/system/ulib/ddk/include/ddk/protocol/usb.h
index 54d2491..2a9a00f 100644
--- a/system/ulib/ddk/include/ddk/protocol/usb.h
+++ b/system/ulib/ddk/include/ddk/protocol/usb.h
@@ -1,217 +1,7 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #pragma once
 
-#include <ddk/phys-iter.h>
-#include <ddk/protocol/usb/request.h>
-#include <sys/types.h>
-#include <zircon/compiler.h>
-#include <zircon/types.h>
-#include <zircon/hw/usb.h>
-#include <zircon/hw/usb-hub.h>
-#include <zircon/listnode.h>
-
-__BEGIN_CDECLS;
-
-typedef struct usb_request usb_request_t;
-
-// cache maintenance ops
-#define USB_REQUEST_CACHE_INVALIDATE        ZX_VMO_OP_CACHE_INVALIDATE
-#define USB_REQUEST_CACHE_CLEAN             ZX_VMO_OP_CACHE_CLEAN
-#define USB_REQUEST_CACHE_CLEAN_INVALIDATE  ZX_VMO_OP_CACHE_CLEAN_INVALIDATE
-#define USB_REQUEST_CACHE_SYNC              ZX_VMO_OP_CACHE_SYNC
-
-typedef void (*usb_request_complete_cb)(usb_request_t* req, void* cookie);
-
-// Returns a batch of completed requests for an endpoint.
-// The client should free the completed_reqs array once they are finished with it.
-typedef void (*usb_batch_complete_cb)(usb_request_t** completed_reqs, size_t num_completed,
-                                      void* cookie);
-
-typedef struct {
-    zx_status_t (*control)(void* ctx, uint8_t request_type, uint8_t request, uint16_t value,
-                           uint16_t index, void* data, size_t length, zx_time_t timeout,
-                           size_t* out_length);
-    // queues a USB request
-    void (*request_queue)(void* ctx, usb_request_t* usb_request, usb_request_complete_cb,
-                          void* cookie);
-
-    zx_status_t (*configure_batch_callback)(void* ctx, uint8_t ep_address,
-                                            usb_batch_complete_cb cb, void* cookie);
-
-    usb_speed_t (*get_speed)(void* ctx);
-    zx_status_t (*set_interface)(void* ctx, uint8_t interface_number, uint8_t alt_setting);
-    uint8_t (*get_configuration)(void* ctx);
-    zx_status_t (*set_configuration)(void* ctx, uint8_t configuration);
-    zx_status_t (*enable_endpoint)(void* ctx, usb_endpoint_descriptor_t* ep_desc,
-                                   usb_ss_ep_comp_descriptor_t* ss_comp_desc, bool enable);
-    zx_status_t (*reset_endpoint)(void* ctx, uint8_t ep_address);
-    size_t (*get_max_transfer_size)(void* ctx, uint8_t ep_address);
-    uint32_t (*get_device_id)(void* ctx);
-    void (*get_device_descriptor)(void* ctx, usb_device_descriptor_t* out_desc);
-    zx_status_t (*get_configuration_descriptor)(void* ctx, uint8_t configuration,
-                                                usb_configuration_descriptor_t** out,
-                                                size_t* out_length);
-    zx_status_t (*get_descriptor_list)(void* ctx, void** out_descriptors, size_t* out_length);
-    zx_status_t (*get_string_descriptor)(void* ctx, uint8_t desc_id, uint16_t lang_id,
-                                         uint8_t* buf, size_t buflen, size_t* out_actual,
-                                         uint16_t* out_actual_lang_id);
-    zx_status_t (*cancel_all)(void* ctx, uint8_t ep_address);
-    uint64_t (*get_current_frame)(void* ctx);
-    size_t (*get_request_size)(void* ctx);
-} usb_protocol_ops_t;
-
-typedef struct usb_protocol {
-    usb_protocol_ops_t* ops;
-    void* ctx;
-} usb_protocol_t;
-
-// synchronously executes a control request on endpoint zero
-static inline zx_status_t usb_control(const usb_protocol_t* usb, uint8_t request_type,
-                                      uint8_t request, uint16_t value, uint16_t index, void* data,
-                                      size_t length, zx_time_t timeout, size_t* out_length) {
-    return usb->ops->control(usb->ctx, request_type, request, value, index, data, length, timeout,
-                             out_length);
-}
-
-static inline zx_status_t usb_get_descriptor(const usb_protocol_t* usb, uint8_t request_type,
-                                             uint16_t type, uint16_t index, void* data,
-                                             size_t length, zx_time_t timeout, size_t* out_length) {
-    return usb_control(usb, request_type | USB_DIR_IN, USB_REQ_GET_DESCRIPTOR,
-                       (uint16_t)(type << 8 | index), 0, data, length, timeout, out_length);
-}
-
-static inline zx_status_t usb_get_status(const usb_protocol_t* usb, uint8_t request_type,
-                                         uint16_t index, void* data, size_t length,
-                                         zx_time_t timeout, size_t* out_length) {
-    return usb_control(usb, request_type | USB_DIR_IN, USB_REQ_GET_STATUS, 0, index, data, length,
-                       timeout, out_length);
-}
-
-static inline zx_status_t usb_set_feature(const usb_protocol_t* usb, uint8_t request_type,
-                                          uint16_t feature, uint16_t index, zx_time_t timeout) {
-    return usb_control(usb, request_type, USB_REQ_SET_FEATURE, feature, index, NULL, 0, timeout,
-                       NULL);
-}
-
-static inline zx_status_t usb_clear_feature(const usb_protocol_t* usb, uint8_t request_type,
-                                            uint16_t feature, uint16_t index, zx_time_t timeout) {
-    return usb_control(usb, request_type, USB_REQ_CLEAR_FEATURE, feature, index, NULL, 0, timeout,
-                       NULL);
-}
-
-static inline void usb_request_queue(const usb_protocol_t* usb, usb_request_t* usb_request,
-                                     usb_request_complete_cb cb, void* cookie) {
-    return usb->ops->request_queue(usb->ctx, usb_request, cb, cookie);
-}
-
-// Configures an endpoint to batch multiple requests to a single callback.
-// Requests will receive a callback if they have set require_batch_cb to true, or an error occurs.
-//   ep_address: the endpoint which requests will be queued on.
-//   complete_cb: callback for the batch of completed requests.
-//   cookie: user data passed to the |complete_cb|.
-static inline zx_status_t usb_configure_batch_callback(const usb_protocol_t* usb,
-                                                       uint8_t ep_address,
-                                                       usb_batch_complete_cb complete_cb,
-                                                       void* cookie) {
-    return usb->ops->configure_batch_callback(usb->ctx, ep_address, complete_cb, cookie);
-}
-
-static inline usb_speed_t usb_get_speed(const usb_protocol_t* usb) {
-    return usb->ops->get_speed(usb->ctx);
-}
-
-static inline zx_status_t usb_set_interface(const usb_protocol_t* usb, uint8_t interface_number,
-                                            uint8_t alt_setting) {
-    return usb->ops->set_interface(usb->ctx, interface_number, alt_setting);
-}
-
-static inline uint8_t usb_get_configuration(const usb_protocol_t* usb) {
-    return usb->ops->get_configuration(usb->ctx);
-}
-
-static inline zx_status_t usb_set_configuration(const usb_protocol_t* usb, uint8_t configuration) {
-    return usb->ops->set_configuration(usb->ctx, configuration);
-}
-
-static inline zx_status_t usb_enable_endpoint(const usb_protocol_t* usb,
-                                              usb_endpoint_descriptor_t* ep_desc,
-                                              usb_ss_ep_comp_descriptor_t* ss_comp_desc,
-                                              bool enable) {
-    return usb->ops->enable_endpoint(usb->ctx, ep_desc, ss_comp_desc, enable);
-}
-
-// Resets an endpoint that is in a halted or error state.
-// Endpoints will be halted if the device returns a STALL in response to a USB transaction.
-// When that occurs, the transaction will fail with ERR_IO_REFUSED.
-// usb_reset_endpoint() the endpoint to normal running state.
-static inline zx_status_t usb_reset_endpoint(const usb_protocol_t* usb, uint8_t ep_address) {
-    return usb->ops->reset_endpoint(usb->ctx, ep_address);
-}
-
-// returns the maximum amount of data that can be transferred on an endpoint in a single transaction.
-static inline size_t usb_get_max_transfer_size(const usb_protocol_t* usb, uint8_t ep_address) {
-    return usb->ops->get_max_transfer_size(usb->ctx, ep_address);
-}
-
-// Returns the device ID for the device.
-// This ID is generated by and used internally by the USB HCI controller driver.
-static inline uint32_t usb_get_device_id(const usb_protocol_t* usb) {
-    return usb->ops->get_device_id(usb->ctx);
-}
-
-// Returns the device's device descriptor.
-static inline void usb_get_device_descriptor(const usb_protocol_t* usb,
-                                             usb_device_descriptor_t* out_desc) {
-    usb->ops->get_device_descriptor(usb->ctx, out_desc);
-}
-
-// Returns the configuration descriptor for the given configuration.
-static inline zx_status_t usb_get_configuration_descriptor(const usb_protocol_t* usb,
-                                                           uint8_t configuration,
-                                                           usb_configuration_descriptor_t** out,
-                                                           size_t* out_length) {
-    return usb->ops->get_configuration_descriptor(usb->ctx, configuration, out, out_length);
-}
-
-// returns the USB descriptors for the USB device or interface
-// the returned value is de-allocated with free()
-static inline zx_status_t usb_get_descriptor_list(const usb_protocol_t* usb, void** out_descriptors,
-                                                  size_t* out_length) {
-    return usb->ops->get_descriptor_list(usb->ctx, out_descriptors, out_length);
-}
-
-// Fetch the descriptor using the provided descriptor ID and language ID.  If
-// the language ID requested is not available, the first entry of the language
-// ID table will be used instead and be provided in the updated version of the
-// parameter.
-//
-// The string will be encoded using UTF-8, and will be truncated to fit the
-// space provided by the buflen parameter.  Embedded nulls may be present
-// in the string, and the result may not be null terminated if the string
-// occupies the entire provided buffer.
-//
-static inline zx_status_t usb_get_string_descriptor(const usb_protocol_t* usb, uint8_t desc_id, 
-                                                    uint16_t lang_id, uint8_t* buf, size_t buflen,
-                                                    size_t* out_actual,
-                                                    uint16_t* out_actual_lang_id) {
-    return usb->ops->get_string_descriptor(usb->ctx, desc_id, lang_id, buf, buflen, out_actual,
-                                           out_actual_lang_id);
-}
-
-static inline zx_status_t usb_cancel_all(const usb_protocol_t* usb, uint8_t ep_address) {
-    return usb->ops->cancel_all(usb->ctx, ep_address);
-}
-
-// returns the current frame (in milliseconds), used for isochronous transfers
-static inline uint64_t usb_get_current_frame(const usb_protocol_t* usb) {
-    return usb->ops->get_current_frame(usb->ctx);
-}
-
-// return the internal context size plus parents request size
-static inline uint64_t usb_get_request_size(const usb_protocol_t* usb) {
-    return usb->ops->get_request_size(usb->ctx);
-}
-__END_CDECLS;
+#include <ddk/protocol/usb-old.h>
diff --git a/system/ulib/ddk/include/ddk/protodefs.h b/system/ulib/ddk/include/ddk/protodefs.h
index 73a8535..7e9692f 100644
--- a/system/ulib/ddk/include/ddk/protodefs.h
+++ b/system/ulib/ddk/include/ddk/protodefs.h
@@ -101,4 +101,12 @@
 DDK_PROTOCOL_DEF(TEE,            'pTEE', "tee", 0)
 DDK_PROTOCOL_DEF(VSOCK,          'pVSK', "vsock", 0)
 #undef DDK_PROTOCOL_DEF
+
+#ifdef DDK_PROTOCOL_DEF_ALIAS
+// Temporary aliases for soft protocol transition.
+DDK_PROTOCOL_DEF_ALIAS(USB_OLD,        'pUSB', "usb", PF_NOPUB)
+DDK_PROTOCOL_DEF_ALIAS(USB_DEVICE_OLD, 'pUSD', "usb-device", 0)
+#undef DDK_PROTOCOL_DEF_ALIAS
+#endif
+
 #endif