[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