Module Name: src
Committed By: riastradh
Date: Sat Mar 19 11:37:06 UTC 2022
Modified Files:
src/sys/arch/arm/broadcom: bcm2835_rng.c
src/sys/arch/arm/omap: am335x_trng.c
src/sys/arch/arm/rockchip: rk_v1crypto.c
src/sys/arch/arm/sunxi: sun8i_crypto.c
src/sys/arch/arm/ti: ti_rng.c
src/sys/arch/mips/cavium/dev: octeon_rnm.c
src/sys/arch/mips/ingenic: ingenic_rng.c
src/sys/dev/ic: amdccp.c rng200.c
src/sys/dev/pci: amdpm.c viornd.c
src/sys/dev/usb: ualea.c
Log Message:
rnd(9): Adjust IPL of locks used by rndsource callbacks.
These no longer ever run from hard interrupt context or with a spin
lock held, so there is no longer any need to have them at IPL_VM to
block hard interrupts. Instead, lower them to IPL_SOFTSERIAL.
To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/broadcom/bcm2835_rng.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/omap/am335x_trng.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/rockchip/rk_v1crypto.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/arm/sunxi/sun8i_crypto.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/ti/ti_rng.c
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/mips/cavium/dev/octeon_rnm.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/mips/ingenic/ingenic_rng.c
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/ic/amdccp.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ic/rng200.c
cvs rdiff -u -r1.42 -r1.43 src/sys/dev/pci/amdpm.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/pci/viornd.c
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/usb/ualea.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/broadcom/bcm2835_rng.c
diff -u src/sys/arch/arm/broadcom/bcm2835_rng.c:1.15 src/sys/arch/arm/broadcom/bcm2835_rng.c:1.16
--- src/sys/arch/arm/broadcom/bcm2835_rng.c:1.15 Wed Jan 27 03:10:19 2021
+++ src/sys/arch/arm/broadcom/bcm2835_rng.c Sat Mar 19 11:37:05 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835_rng.c,v 1.15 2021/01/27 03:10:19 thorpej Exp $ */
+/* $NetBSD: bcm2835_rng.c,v 1.16 2022/03/19 11:37:05 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_rng.c,v 1.15 2021/01/27 03:10:19 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_rng.c,v 1.16 2022/03/19 11:37:05 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -121,7 +121,7 @@ bcmrng_attach(device_t parent, device_t
bus_space_write_4(sc->sc_iot, sc->sc_ioh, RNG_CTRL, ctrl);
/* set up an rndsource */
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
rndsource_setcb(&sc->sc_rndsource, &bcmrng_get, sc);
rnd_attach_source(&sc->sc_rndsource, device_xname(self), RND_TYPE_RNG,
RND_FLAG_COLLECT_VALUE|RND_FLAG_HASCB);
@@ -134,7 +134,7 @@ bcmrng_get(size_t bytes_wanted, void *ar
uint32_t status, cnt;
uint32_t buf[RNG_DATA_MAX]; /* 1k on the stack */
- mutex_spin_enter(&sc->sc_lock);
+ mutex_enter(&sc->sc_lock);
while (bytes_wanted) {
status = bus_space_read_4(sc->sc_iot, sc->sc_ioh, RNG_STATUS);
cnt = __SHIFTOUT(status, RNG_STATUS_CNT);
@@ -148,5 +148,5 @@ bcmrng_get(size_t bytes_wanted, void *ar
bytes_wanted -= MIN(bytes_wanted, (cnt * 4));
}
explicit_memset(buf, 0, sizeof(buf));
- mutex_spin_exit(&sc->sc_lock);
+ mutex_exit(&sc->sc_lock);
}
Index: src/sys/arch/arm/omap/am335x_trng.c
diff -u src/sys/arch/arm/omap/am335x_trng.c:1.3 src/sys/arch/arm/omap/am335x_trng.c:1.4
--- src/sys/arch/arm/omap/am335x_trng.c:1.3 Thu Apr 30 03:40:52 2020
+++ src/sys/arch/arm/omap/am335x_trng.c Sat Mar 19 11:37:05 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: am335x_trng.c,v 1.3 2020/04/30 03:40:52 riastradh Exp $ */
+/* $NetBSD: am335x_trng.c,v 1.4 2022/03/19 11:37:05 riastradh Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: am335x_trng.c,v 1.3 2020/04/30 03:40:52 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: am335x_trng.c,v 1.4 2022/03/19 11:37:05 riastradh Exp $");
#include "opt_omap.h"
@@ -99,7 +99,7 @@ trng_attach(device_t parent, device_t se
return;
}
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
prcm_module_enable(&rng_module);
Index: src/sys/arch/arm/rockchip/rk_v1crypto.c
diff -u src/sys/arch/arm/rockchip/rk_v1crypto.c:1.7 src/sys/arch/arm/rockchip/rk_v1crypto.c:1.8
--- src/sys/arch/arm/rockchip/rk_v1crypto.c:1.7 Wed Jan 27 03:10:19 2021
+++ src/sys/arch/arm/rockchip/rk_v1crypto.c Sat Mar 19 11:37:05 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_v1crypto.c,v 1.7 2021/01/27 03:10:19 thorpej Exp $ */
+/* $NetBSD: rk_v1crypto.c,v 1.8 2022/03/19 11:37:05 riastradh Exp $ */
/*-
* Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: rk_v1crypto.c,v 1.7 2021/01/27 03:10:19 thorpej Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk_v1crypto.c,v 1.8 2022/03/19 11:37:05 riastradh Exp $");
#include <sys/types.h>
@@ -128,7 +128,7 @@ rk_v1crypto_attach(device_t parent, devi
sc->sc_dev = self;
sc->sc_bst = faa->faa_bst;
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
/* Get and map device registers. */
if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) {
Index: src/sys/arch/arm/sunxi/sun8i_crypto.c
diff -u src/sys/arch/arm/sunxi/sun8i_crypto.c:1.29 src/sys/arch/arm/sunxi/sun8i_crypto.c:1.30
--- src/sys/arch/arm/sunxi/sun8i_crypto.c:1.29 Fri Mar 18 23:36:57 2022
+++ src/sys/arch/arm/sunxi/sun8i_crypto.c Sat Mar 19 11:37:05 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: sun8i_crypto.c,v 1.29 2022/03/18 23:36:57 riastradh Exp $ */
+/* $NetBSD: sun8i_crypto.c,v 1.30 2022/03/19 11:37:05 riastradh Exp $ */
/*-
* Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -43,7 +43,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: sun8i_crypto.c,v 1.29 2022/03/18 23:36:57 riastradh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: sun8i_crypto.c,v 1.30 2022/03/19 11:37:05 riastradh Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -390,10 +390,10 @@ sun8i_crypto_attach(device_t parent, dev
sc->sc_dmat = faa->faa_dmat;
sc->sc_bst = faa->faa_bst;
sc->sc_taskpool = pool_cache_init(sizeof(struct sun8i_crypto_task),
- 0, 0, 0, "sun8icry", NULL, IPL_VM,
+ 0, 0, 0, "sun8icry", NULL, IPL_SOFTSERIAL,
&sun8i_crypto_task_ctor, &sun8i_crypto_task_dtor, sc);
sc->sc_cfg = of_compatible_lookup(phandle, compat_data)->data;
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
mutex_init(&sc->sc_intr_lock, MUTEX_DEFAULT, IPL_VM);
callout_init(&sc->sc_timeout, CALLOUT_MPSAFE);
callout_setfunc(&sc->sc_timeout, &sun8i_crypto_timeout, sc);
Index: src/sys/arch/arm/ti/ti_rng.c
diff -u src/sys/arch/arm/ti/ti_rng.c:1.5 src/sys/arch/arm/ti/ti_rng.c:1.6
--- src/sys/arch/arm/ti/ti_rng.c:1.5 Wed Jan 27 03:10:20 2021
+++ src/sys/arch/arm/ti/ti_rng.c Sat Mar 19 11:37:05 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: ti_rng.c,v 1.5 2021/01/27 03:10:20 thorpej Exp $ */
+/* $NetBSD: ti_rng.c,v 1.6 2022/03/19 11:37:05 riastradh Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ti_rng.c,v 1.5 2021/01/27 03:10:20 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ti_rng.c,v 1.6 2022/03/19 11:37:05 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -101,7 +101,7 @@ ti_rng_attach(device_t parent, device_t
return;
}
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
if ((RD4(sc, TRNG_CONTROL_REG) & TRNG_CONTROL_ENABLE) == 0) {
WR4(sc, TRNG_CONFIG_REG,
Index: src/sys/arch/mips/cavium/dev/octeon_rnm.c
diff -u src/sys/arch/mips/cavium/dev/octeon_rnm.c:1.13 src/sys/arch/mips/cavium/dev/octeon_rnm.c:1.14
--- src/sys/arch/mips/cavium/dev/octeon_rnm.c:1.13 Tue Dec 28 13:22:43 2021
+++ src/sys/arch/mips/cavium/dev/octeon_rnm.c Sat Mar 19 11:37:05 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: octeon_rnm.c,v 1.13 2021/12/28 13:22:43 riastradh Exp $ */
+/* $NetBSD: octeon_rnm.c,v 1.14 2022/03/19 11:37:05 riastradh Exp $ */
/*
* Copyright (c) 2007 Internet Initiative Japan, Inc.
@@ -99,7 +99,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: octeon_rnm.c,v 1.13 2021/12/28 13:22:43 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: octeon_rnm.c,v 1.14 2022/03/19 11:37:05 riastradh Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -185,7 +185,7 @@ octrnm_attach(device_t parent, device_t
}
/* Create a mutex to serialize access to the FIFO. */
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
/*
* Reset the core, enable the RNG engine without entropy, wait
Index: src/sys/arch/mips/ingenic/ingenic_rng.c
diff -u src/sys/arch/mips/ingenic/ingenic_rng.c:1.5 src/sys/arch/mips/ingenic/ingenic_rng.c:1.6
--- src/sys/arch/mips/ingenic/ingenic_rng.c:1.5 Thu Apr 30 03:40:53 2020
+++ src/sys/arch/mips/ingenic/ingenic_rng.c Sat Mar 19 11:37:05 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: ingenic_rng.c,v 1.5 2020/04/30 03:40:53 riastradh Exp $ */
+/* $NetBSD: ingenic_rng.c,v 1.6 2022/03/19 11:37:05 riastradh Exp $ */
/*-
* Copyright (c) 2015 Michael McConville
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ingenic_rng.c,v 1.5 2020/04/30 03:40:53 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ingenic_rng.c,v 1.6 2022/03/19 11:37:05 riastradh Exp $");
/*
* adapted from Jared McNeill's amlogic_rng.c
@@ -94,7 +94,7 @@ ingenic_rng_attach(device_t parent, devi
return;
}
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
aprint_naive(": Ingenic random number generator\n");
aprint_normal(": Ingenic random number generator\n");
@@ -110,7 +110,7 @@ ingenic_rng_get(size_t bytes_wanted, voi
struct ingenic_rng_softc * const sc = priv;
uint32_t data;
- mutex_spin_enter(&sc->sc_lock);
+ mutex_enter(&sc->sc_lock);
while (bytes_wanted) {
data = bus_space_read_4(sc->sc_bst, sc->sc_bsh, 0);
delay(1);
@@ -119,5 +119,5 @@ ingenic_rng_get(size_t bytes_wanted, voi
bytes_wanted -= MIN(bytes_wanted, sizeof(data));
}
explicit_memset(&data, 0, sizeof(data));
- mutex_spin_exit(&sc->sc_lock);
+ mutex_exit(&sc->sc_lock);
}
Index: src/sys/dev/ic/amdccp.c
diff -u src/sys/dev/ic/amdccp.c:1.3 src/sys/dev/ic/amdccp.c:1.4
--- src/sys/dev/ic/amdccp.c:1.3 Mon Aug 23 23:55:43 2021
+++ src/sys/dev/ic/amdccp.c Sat Mar 19 11:37:06 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: amdccp.c,v 1.3 2021/08/23 23:55:43 mrg Exp $ */
+/* $NetBSD: amdccp.c,v 1.4 2022/03/19 11:37:06 riastradh Exp $ */
/*
* Copyright (c) 2018 Jonathan A. Kollasch
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amdccp.c,v 1.3 2021/08/23 23:55:43 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdccp.c,v 1.4 2022/03/19 11:37:06 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -44,7 +44,8 @@ static void amdccp_rnd_callback(size_t,
void
amdccp_common_attach(struct amdccp_softc *sc)
{
- mutex_init(&sc->sc_rndlock, MUTEX_DEFAULT, IPL_VM);
+
+ mutex_init(&sc->sc_rndlock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
rndsource_setcb(&sc->sc_rndsource, amdccp_rnd_callback, sc);
rnd_attach_source(&sc->sc_rndsource, device_xname(sc->sc_dev),
RND_TYPE_RNG, RND_FLAG_COLLECT_VALUE|RND_FLAG_HASCB);
Index: src/sys/dev/ic/rng200.c
diff -u src/sys/dev/ic/rng200.c:1.2 src/sys/dev/ic/rng200.c:1.3
--- src/sys/dev/ic/rng200.c:1.2 Thu Apr 30 03:40:53 2020
+++ src/sys/dev/ic/rng200.c Sat Mar 19 11:37:06 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rng200.c,v 1.2 2020/04/30 03:40:53 riastradh Exp $ */
+/* $NetBSD: rng200.c,v 1.3 2022/03/19 11:37:06 riastradh Exp $ */
/*
* Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -79,7 +79,7 @@ rng200_get(size_t bytes_wanted, void *pr
uint32_t w, data;
unsigned count;
- mutex_spin_enter(&sc->sc_lock);
+ mutex_enter(&sc->sc_lock);
while (bytes_wanted) {
w = READ4(sc, RNG200_STATUS);
@@ -98,14 +98,14 @@ rng200_get(size_t bytes_wanted, void *pr
bytes_wanted -= MIN(bytes_wanted, sizeof(data));
}
explicit_memset(&data, 0, sizeof(data));
- mutex_spin_exit(&sc->sc_lock);
+ mutex_exit(&sc->sc_lock);
}
void
rng200_attach(struct rng200_softc *sc)
{
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
rndsource_setcb(&sc->sc_rndsource, rng200_get, sc);
rnd_attach_source(&sc->sc_rndsource, sc->sc_name,
Index: src/sys/dev/pci/amdpm.c
diff -u src/sys/dev/pci/amdpm.c:1.42 src/sys/dev/pci/amdpm.c:1.43
--- src/sys/dev/pci/amdpm.c:1.42 Sat May 30 10:27:29 2020
+++ src/sys/dev/pci/amdpm.c Sat Mar 19 11:37:06 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: amdpm.c,v 1.42 2020/05/30 10:27:29 jdolecek Exp $ */
+/* $NetBSD: amdpm.c,v 1.43 2022/03/19 11:37:06 riastradh Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amdpm.c,v 1.42 2020/05/30 10:27:29 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdpm.c,v 1.43 2022/03/19 11:37:06 riastradh Exp $");
#include "opt_amdpm.h"
@@ -159,8 +159,7 @@ amdpm_attach(device_t parent, device_t s
AMDPM_TMR, ((confreg & AMDPM_TMR32) ? ACPIPMT_32BIT : 0));
}
- /* XXX this mutex is IPL_VM because it can be taken by rnd_getmore() */
- mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_SOFTSERIAL);
/* try to attach devices on the smbus */
if (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_PBC8111_ACPI ||
Index: src/sys/dev/pci/viornd.c
diff -u src/sys/dev/pci/viornd.c:1.14 src/sys/dev/pci/viornd.c:1.15
--- src/sys/dev/pci/viornd.c:1.14 Wed Jan 20 19:46:48 2021
+++ src/sys/dev/pci/viornd.c Sat Mar 19 11:37:06 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: viornd.c,v 1.14 2021/01/20 19:46:48 reinoud Exp $ */
+/* $NetBSD: viornd.c,v 1.15 2022/03/19 11:37:06 riastradh Exp $ */
/* $OpenBSD: viornd.c,v 1.1 2014/01/21 21:14:58 sf Exp $ */
/*
@@ -139,9 +139,9 @@ viornd_attach(device_t parent, device_t
sc->sc_dev = self;
sc->sc_virtio = vsc;
- mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_SOFTSERIAL);
- error = bus_dmamem_alloc(virtio_dmat(vsc),
+ error = bus_dmamem_alloc(virtio_dmat(vsc),
VIRTIO_PAGE_SIZE, 0, 0, segs, 1, &nsegs,
BUS_DMA_NOWAIT|BUS_DMA_ALLOCNOW);
if (error) {
@@ -247,6 +247,6 @@ viornd_vq_done(struct virtqueue *vq)
out:
virtio_dequeue_commit(vsc, vq, slot);
mutex_exit(&sc->sc_mutex);
-
+
return 1;
}
Index: src/sys/dev/usb/ualea.c
diff -u src/sys/dev/usb/ualea.c:1.15 src/sys/dev/usb/ualea.c:1.16
--- src/sys/dev/usb/ualea.c:1.15 Thu Mar 3 06:06:52 2022
+++ src/sys/dev/usb/ualea.c Sat Mar 19 11:37:06 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: ualea.c,v 1.15 2022/03/03 06:06:52 riastradh Exp $ */
+/* $NetBSD: ualea.c,v 1.16 2022/03/19 11:37:06 riastradh Exp $ */
/*-
* Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ualea.c,v 1.15 2022/03/03 06:06:52 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ualea.c,v 1.16 2022/03/19 11:37:06 riastradh Exp $");
#include <sys/types.h>
#include <sys/atomic.h>
@@ -104,7 +104,7 @@ ualea_attach(device_t parent, device_t s
/* Initialize the softc. */
sc->sc_dev = self;
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTUSB);
+ mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTSERIAL);
/* Get endpoint descriptor 0. Make sure it's bulk-in. */
ed = usbd_interface2endpoint_descriptor(uiaa->uiaa_iface, 0);