[wlan][brcmfmac] Convert to banjo USB protocol
Change-Id: I6cc64a6bc3130aa7a7fc400caac754bcd6f3181a
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/BUILD.gn b/drivers/wlan/third_party/broadcom/brcmfmac/BUILD.gn
index a2f0bbd..9eb81cae 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/BUILD.gn
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/BUILD.gn
@@ -95,12 +95,13 @@
"//zircon/public/banjo/ddk-protocol-gpio",
"//zircon/public/banjo/ddk-protocol-pci",
"//zircon/public/banjo/ddk-protocol-sdio",
+ "//zircon/public/banjo/ddk-protocol-usb",
"//zircon/public/lib/async-loop",
"//zircon/public/lib/broadcom",
"//zircon/public/lib/ddk",
"//zircon/public/lib/driver",
"//zircon/public/lib/sync",
- "//zircon/public/lib/usb-old",
+ "//zircon/public/lib/usb",
"//zircon/public/lib/zx",
]
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/binding.c b/drivers/wlan/third_party/broadcom/brcmfmac/binding.c
index ec71fd7..14f2ce2 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/binding.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/binding.c
@@ -35,7 +35,7 @@
ZIRCON_DRIVER_BEGIN(brcmfmac, brcmfmac_driver_ops, "zircon", "0.1", 33)
BI_GOTO_IF(EQ, BIND_PROTOCOL, ZX_PROTOCOL_SDIO, 5910),
- BI_GOTO_IF(EQ, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD, 758),
+ BI_GOTO_IF(EQ, BIND_PROTOCOL, ZX_PROTOCOL_USB, 758),
BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_PCI),
BI_ABORT_IF(NE, BIND_PCI_VID, BRCM_PCIE_VENDOR_ID_BROADCOM),
BI_ABORT_IF(NE, BIND_PCI_CLASS, PCI_CLASS_NETWORK),
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/bus.h b/drivers/wlan/third_party/broadcom/brcmfmac/bus.h
index ade9304..9836964 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/bus.h
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/bus.h
@@ -18,7 +18,7 @@
#define BRCMFMAC_BUS_H
#include <ddk/protocol/sdio.h>
-#include <ddk/protocol/usb-old.h>
+#include <ddk/protocol/usb.h>
#include "debug.h"
#include "netbuf.h"
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/core.c b/drivers/wlan/third_party/broadcom/brcmfmac/core.c
index 1bc2d4a..6cc64f1 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/core.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/core.c
@@ -19,7 +19,7 @@
#include <ddk/device.h>
#include <ddk/protocol/pci.h>
#include <ddk/protocol/sdio.h>
-#include <ddk/protocol/usb-old.h>
+#include <ddk/protocol/usb.h>
#include <netinet/if_ether.h>
#include <wlan/protocol/phy-impl.h>
#include <zircon/status.h>
@@ -1271,7 +1271,7 @@
#ifdef CONFIG_BRCMFMAC_USB
usb_protocol_t udev;
- result = device_get_protocol(device, ZX_PROTOCOL_USB_OLD, &udev);
+ result = device_get_protocol(device, ZX_PROTOCOL_USB, &udev);
if (result == ZX_OK) {
result = brcmf_usb_register(device, &udev);
if (result != ZX_OK) {
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/device.h b/drivers/wlan/third_party/broadcom/brcmfmac/device.h
index 80aa7a1..521e12a 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/device.h
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/device.h
@@ -21,7 +21,7 @@
#include <ddk/driver.h>
#include <ddk/protocol/pci.h>
#include <ddk/protocol/pci-lib.h>
-#include <ddk/protocol/usb-old.h>
+#include <ddk/protocol/usb.h>
#include <lib/async-loop/loop.h> // to start the worker thread
#include <lib/async/default.h> // for async_get_default_dispatcher()
#include <lib/async/task.h> // for async_post_task()
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/usb.c b/drivers/wlan/third_party/broadcom/brcmfmac/usb.c
index 2b9c5e7..90411c0 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/usb.c
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/usb.c
@@ -16,7 +16,7 @@
#include "usb.h"
-#include <ddk/protocol/usb-old.h>
+#include <ddk/protocol/usb.h>
#include <ddk/usb/usb.h>
#include <usb/usb-request.h>
#include <lib/sync/completion.h>
@@ -180,6 +180,8 @@
struct brcmf_mp_device* settings;
};
+typedef void (*usb_complete_cb)(void* ctx, usb_request_t* req);
+
// Linux->ZX glue functions start here
struct brcmf_urb* brcmf_usb_allocate_urb(usb_protocol_t* usb, size_t parent_req_size) {
@@ -215,7 +217,7 @@
static void brcmf_usb_init_urb(struct brcmf_urb* urb, struct brcmf_usbdev_info* devinfo,
void* buf, uint16_t size, bool zero_packet,
- usb_request_complete_cb complete, void* context, bool out,
+ usb_complete_cb complete, void* context, bool out,
uint8_t ep_address) {
if (urb == NULL) {
brcmf_err("NULL URB");
@@ -249,7 +251,7 @@
static void brcmf_usb_init_control_urb(struct brcmf_urb* urb, struct brcmf_usbdev_info* devinfo,
usb_setup_t* ctl_config,
- void* buf, uint16_t size, usb_request_complete_cb complete,
+ void* buf, uint16_t size, usb_complete_cb complete,
void* context) {
brcmf_usb_init_urb(urb, devinfo, buf, size, false, complete, context,
(ctl_config->bmRequestType & USB_DIR_MASK) == USB_DIR_OUT, 0);
@@ -258,15 +260,19 @@
static void brcmf_usb_init_bulk_urb(struct brcmf_urb* urb, struct brcmf_usbdev_info* devinfo,
uint8_t ep_address, void* buf, uint16_t size, bool zero_packet,
- usb_request_complete_cb complete, void* context) {
+ usb_complete_cb complete, void* context) {
brcmf_usb_init_urb(urb, devinfo, buf, size, zero_packet, complete, context,
(ep_address & USB_ENDPOINT_DIR_MASK) == USB_ENDPOINT_OUT, ep_address);
urb->zxurb->setup.wLength = 0xdead;
}
-zx_status_t brcmf_usb_queue_urb(struct brcmf_urb* urb, usb_request_complete_cb complete) {
+zx_status_t brcmf_usb_queue_urb(struct brcmf_urb* urb, usb_complete_cb cb) {
usb_protocol_t* usb_proto = &urb->devinfo->protocol;
- usb_request_queue(usb_proto, urb->zxurb, complete, urb);
+ usb_request_complete_t complete = {
+ .callback = cb,
+ .ctx = urb,
+ };
+ usb_request_queue(usb_proto, urb->zxurb, &complete);
return ZX_OK;
}
@@ -316,7 +322,8 @@
brcmf_usb_ioctl_resp_wake(devinfo);
}
-static void brcmf_usb_ctlread_complete(usb_request_t* zxurb, struct brcmf_urb* urb) {
+static void brcmf_usb_ctlread_complete(void* ctx, usb_request_t* zxurb) {
+ struct brcmf_urb* urb = ctx;
struct brcmf_usbdev_info* devinfo = (struct brcmf_usbdev_info*)urb->context;
brcmf_dbg(USB, "Enter\n");
@@ -340,7 +347,8 @@
pthread_mutex_unlock(&irq_callback_lock);
}
-static void brcmf_usb_ctlwrite_complete(usb_request_t* zxurb, struct brcmf_urb* urb) {
+static void brcmf_usb_ctlwrite_complete(void* ctx, usb_request_t* zxurb) {
+ struct brcmf_urb* urb = ctx;
struct brcmf_usbdev_info* devinfo = (struct brcmf_usbdev_info*)urb->context;
brcmf_dbg(USB, "Enter\n");
@@ -368,10 +376,9 @@
devinfo->ctl_urb_actual_length = 0;
brcmf_usb_init_control_urb(devinfo->ctl_urb, devinfo, &devinfo->ctl_write, buf, size,
- (usb_request_complete_cb)brcmf_usb_ctlwrite_complete, devinfo);
+ brcmf_usb_ctlwrite_complete, devinfo);
- ret = brcmf_usb_queue_urb(devinfo->ctl_urb,
- (usb_request_complete_cb)brcmf_usb_ctlwrite_complete);
+ ret = brcmf_usb_queue_urb(devinfo->ctl_urb, brcmf_usb_ctlwrite_complete);
if (ret != ZX_OK) {
brcmf_err("usb_queue_urb failed %d\n", ret);
}
@@ -395,10 +402,9 @@
devinfo->ctl_read.bRequest = 1;
brcmf_usb_init_control_urb(devinfo->ctl_urb, devinfo, &devinfo->ctl_read, buf, size,
- (usb_request_complete_cb)brcmf_usb_ctlread_complete, devinfo);
+ brcmf_usb_ctlread_complete, devinfo);
- ret = brcmf_usb_queue_urb(devinfo->ctl_urb,
- (usb_request_complete_cb)brcmf_usb_ctlread_complete);
+ ret = brcmf_usb_queue_urb(devinfo->ctl_urb, brcmf_usb_ctlread_complete);
if (ret != ZX_OK) {
brcmf_err("usb_queue_urb failed %d\n", ret);
}
@@ -572,7 +578,8 @@
pthread_mutex_unlock(&irq_callback_lock);
}
-static void brcmf_usb_tx_complete(usb_request_t* zxurb, struct brcmf_urb* urb) {
+static void brcmf_usb_tx_complete(void* ctx, usb_request_t* zxurb) {
+ struct brcmf_urb* urb = ctx;
struct brcmf_usbreq* req = (struct brcmf_usbreq*)urb->context;
struct brcmf_usbdev_info* devinfo = req->devinfo;
@@ -598,7 +605,8 @@
pthread_mutex_unlock(&irq_callback_lock);
}
-static void brcmf_usb_rx_complete(usb_request_t* zxurb, struct brcmf_urb* urb) {
+static void brcmf_usb_rx_complete(void* ctx, usb_request_t* zxurb) {
+ struct brcmf_urb* urb = ctx;
struct brcmf_usbreq* req = (struct brcmf_usbreq*)urb->context;
struct brcmf_usbdev_info* devinfo = req->devinfo;
struct brcmf_netbuf* netbuf;
@@ -660,12 +668,11 @@
req->netbuf = netbuf;
brcmf_usb_init_bulk_urb(req->urb, devinfo, devinfo->rx_endpoint, netbuf->data,
- brcmf_netbuf_tail_space(netbuf), false,
- (usb_request_complete_cb)brcmf_usb_rx_complete, req);
+ brcmf_netbuf_tail_space(netbuf), false, brcmf_usb_rx_complete, req);
req->devinfo = devinfo;
brcmf_usb_enq(devinfo, &devinfo->rx_postq, req, NULL);
- ret = brcmf_usb_queue_urb(req->urb, (usb_request_complete_cb)brcmf_usb_rx_complete);
+ ret = brcmf_usb_queue_urb(req->urb, brcmf_usb_rx_complete);
if (ret != ZX_OK) {
brcmf_usb_del_fromq(devinfo, req);
brcmu_pkt_buf_free_netbuf(req->netbuf);
@@ -734,9 +741,9 @@
req->netbuf = netbuf;
req->devinfo = devinfo;
brcmf_usb_init_bulk_urb(req->urb, devinfo, devinfo->tx_endpoint, netbuf->data, netbuf->len,
- true, (usb_request_complete_cb)brcmf_usb_tx_complete, req);
+ true, brcmf_usb_tx_complete, req);
brcmf_usb_enq(devinfo, &devinfo->tx_postq, req, NULL);
- ret = brcmf_usb_queue_urb(req->urb, (usb_request_complete_cb)brcmf_usb_tx_complete);
+ ret = brcmf_usb_queue_urb(req->urb, brcmf_usb_tx_complete);
if (ret != ZX_OK) {
brcmf_err("brcmf_usb_tx usb_queue_urb FAILED\n");
brcmf_usb_del_fromq(devinfo, req);
@@ -816,7 +823,8 @@
brcmf_cancel_all_urbs(devinfo);
}
-static void brcmf_usb_sync_complete(usb_request_t* zxurb, struct brcmf_urb* urb) {
+static void brcmf_usb_sync_complete(void* ctx, usb_request_t* zxurb) {
+ struct brcmf_urb* urb = ctx;
pthread_mutex_lock(&irq_callback_lock);
struct brcmf_usbdev_info* devinfo = (struct brcmf_usbdev_info*)urb->context;
@@ -857,10 +865,10 @@
devinfo->ctl_read.bRequest = cmd;
brcmf_usb_init_control_urb(devinfo->ctl_urb, devinfo, &devinfo->ctl_read, (void*)tmpbuf, size,
- (usb_request_complete_cb)brcmf_usb_sync_complete, devinfo);
+ brcmf_usb_sync_complete, devinfo);
sync_completion_reset(&devinfo->ioctl_resp_wait);
- ret = brcmf_usb_queue_urb(devinfo->ctl_urb, (usb_request_complete_cb)brcmf_usb_sync_complete);
+ ret = brcmf_usb_queue_urb(devinfo->ctl_urb, brcmf_usb_sync_complete);
if (ret != ZX_OK) {
brcmf_err("usb_queue_urb failed %d\n", ret);
goto finalize;
@@ -979,10 +987,10 @@
/* Prepare the URB */
brcmf_usb_init_bulk_urb(devinfo->bulk_urb, devinfo, devinfo->tx_endpoint, buffer, len, true,
- (usb_request_complete_cb)brcmf_usb_sync_complete, devinfo);
+ brcmf_usb_sync_complete, devinfo);
sync_completion_reset(&devinfo->ioctl_resp_wait);
- ret = brcmf_usb_queue_urb(devinfo->bulk_urb, (usb_request_complete_cb)brcmf_usb_sync_complete);
+ ret = brcmf_usb_queue_urb(devinfo->bulk_urb, brcmf_usb_sync_complete);
if (ret != ZX_OK) {
brcmf_err("usb_queue_urb failed %d\n", ret);
return ret;
diff --git a/drivers/wlan/third_party/broadcom/brcmfmac/usb.h b/drivers/wlan/third_party/broadcom/brcmfmac/usb.h
index e4449b8..43640d6 100644
--- a/drivers/wlan/third_party/broadcom/brcmfmac/usb.h
+++ b/drivers/wlan/third_party/broadcom/brcmfmac/usb.h
@@ -16,7 +16,7 @@
#ifndef BRCMFMAC_USB_H
#define BRCMFMAC_USB_H
-#include <ddk/protocol/usb-old.h>
+#include <ddk/protocol/usb.h>
#include <zircon/listnode.h>
#include <zircon/types.h>