Home | History | Annotate | Download | only in usb
History log of /src/sys/dev/usb/ugen.c
RevisionDateAuthorComments
 1.178  26-Apr-2025  skrll Some USBHIST (aka KERNHIST) fixes from sc.dying on current-users.
 1.177  29-Mar-2024  thorpej ugen and ugenif share the same /dev/ugenN.xx namespace in such a way
that the device unit number does not necessarily match the /dev/ugenN.xx
unit number (N). If you ONLY have ugen devices, it happens to work out
and devpubd scripts can be extremely naive. If you ONLY have ugenif
devices, it also happens to work out, but your devpubd scripts have to
slightly more informed. If you have a mix of ugen AND ugenif devices,
though, you're pretty much out of luck.

So, this change adds a "ugen-unit" device property which devpubd scripts
can query to determine which /dev/ugenN.xx nodes a given ugen or ugenif
device is using.
 1.176  26-Mar-2024  thorpej Define a "flags 1" config directive for ugenif, which is similar to ugen's,
but rather forces the ugenif to match at the *lowest* match priority rather
than the highest. This allows ugenif to claim only otherwise unclaimed
interfaces.
 1.175  06-Nov-2023  hannken Undo the DPRINTFN part of the last commit. It breaks i386 at least
when KERNHIST_LOG casts the pointer to uintmax_t.

Kernel ALL/i386 compiles again.
 1.174  10-Oct-2023  simonb Debug printf tidy up, KNF comma,space nits.
 1.173  31-Jul-2023  christos Don't call versioned stuff "old". Follow the naming convention for versioning
and name them after the last version of the OS they appeared on.
 1.172  20-Jul-2023  mrg various debug updates for some usb drivers

- several new *_DEBUG_DEFAULT options that allow usb debug values to
be set to a default that is non-zero:
EHCI_DEBUG_DEFAULT, UGEN_DEBUG_DEFAULT, URTWN_DEBUG_DEFAULT,
UMS_DEBUG_DEFAULT, and USB_DEBUG_DEFAULT
- ugen debug uses fewer usbhist lines for the same info
- ums.c converted from printf() to usbhist
 1.171  23-Oct-2022  riastradh branches: 1.171.2;
ugen(4): Make sure opened is initialized in ugenopen.

Otherwise the error branch is based on garbage.
 1.170  23-Oct-2022  skrll Fix USBDEBUG build on ILP32
 1.169  21-Oct-2022  mrg ugen(4): convert to USBHIST style debugging.
 1.168  26-Sep-2021  thorpej Change the kqueue filterops::f_isfd field to filterops::f_flags, and
define a flag FILTEROP_ISFD that has the meaning of the prior f_isfd.
Field and flag name aligned with OpenBSD.

This does not constitute a functional or ABI change, as the field location
and size, and the value placed in that field, are the same as the previous
code, but we're bumping __NetBSD_Version__ so 3rd-party module source code
can adapt, as needed.

NetBSD 9.99.89
 1.167  07-Sep-2021  riastradh ugen(4): Keep fields null when not allocated; kassert on close.

This avoids silent leaks in DIAGNOSTIC kernels.
 1.166  07-Sep-2021  riastradh ugen(4): Use cv_wait loop for draining reference count on detach.

- Should be no need to use cv_timedwait because all users have now
been given a wakeup (previously writers were not, so we relied on
the timeouts to work out).

- Need to run this in a loop or else a spurious wakeup could cause us
to free data structures before the users have actually drained.
 1.165  07-Sep-2021  riastradh ugen(4): Use cv_broadcast to wake all I/O operations on detach.

Nothing prevents two concurrent reads or two concurrent writes on any
particular ugen endpoint, as far as I can tell, and we need to wake
all of them, so use cv_broadcast rather than cv_signal on detach.

XXX It's not clear to me that cv_signal in the xfer completion
callbacks is correct either: any one consumer might use less than the
full buffer. So I think either we should use cv_broadcast, or
consumers that don't use the whole buffer need to issue cv_signal too
to wake up another consumer even if we want to avoid a thundering
herd.
 1.164  07-Sep-2021  riastradh ugen(4): Issue explicit wakeup on detach for OUT endpoints too.

Writers can be blocked in cv_timedwait_sig too.

While here, fix comment: aborting the pipes does not cause all
waiters to wake, because the xfer completion callbacks sometimes skip
the notification. We should maybe change that, but this is a simpler
fix to ensure everyone waiting on I/O is woken to notice sc_dying.
 1.163  07-Sep-2021  riastradh ugen(4): Ensure we close pipes on detach.

Calling vdevgone has the effect of VOP_REVOKE -> spec_node_revoke ->
VOP_CLOSE -> spec_close -> cdev_close -> ugenclose, but:

(a) the flags passed to VOP_CLOSE don't have FREAD or FWRITE, and
(b) ugenclose has no effect when sc_dying is set anyway.

So create another path into the close logic, ugen_do_close. We have
to do this in detach _after_ the references have drained because we
may free buffers that other users are still using while the reference
count is nonzero.
 1.162  07-Sep-2021  riastradh ugen(4): Refuse non-forced detach with EBUSY if endpoints are open.

Sprinkle some comments.
 1.161  07-Sep-2021  riastradh ugen(4): Prevent ugenopen while ugen_set_config is in progress.

(except on the control endpoint)

Although we hold the kernel lock (which we should eventually change),
we may sleep in usbd_set_config_no at which point ugenopen might
happen and start making use of endpoint state which we'll stomp all
over once usbd_set_config_no returns. Setting sc_is_open[endpt]
while we wait prevents this.
 1.160  07-Sep-2021  riastradh ugen(4): Fix race of ugenopen against itself.

Even though we have the kernel lock held, a sleep during kmem_alloc
or usbd_open_pipe could allow another ugenopen to run concurrently
before we have marked the endpoint opened.

To avoid this, mark the endpoint open immediately (while we still
have the kernel lock held and before any sleeps, so there is no
TOCTOU error here), and then revert on unwind in the event of
failure.
 1.159  07-Sep-2021  riastradh ugen(4): Sprinkle KERNEL_LOCKED_P assertions around sc_is_open.
 1.158  18-Dec-2020  thorpej Use sel{record,remove}_knote().
 1.157  18-Aug-2020  riastradh branches: 1.157.2;
Fix ugen detach after partial attach.

While here, register null pmf handler even for partially attached
devices so they don't needlessly interfere with suspend.

Reported-by: syzbot+5a091d2e62da20b77259@syzkaller.appspotmail.com
 1.156  16-Aug-2020  riastradh Fix sloppy mistakes in previous.

1. Give the offset of the rbnode, not some other random members to
overwrite with garbage.

2. Don't try to unlock a mutex at NULL.

3. Make sure all paths out after ugenif_acquire go via
ugenif_release.
 1.155  16-Aug-2020  riastradh Share unit numbering for ugen and ugenif.

This way putting ugenif in kernel config actually works to wire it to
the /dev/ugenN.MM device nodes in userland.

Not a fully fleshed out solution to the ugen problem -- there's no
way for a userland driver to kick out a kernel driver and take over,
but this will let us, e.g., use uhidev(4) for Yubikey OTP/U2F/FIDO2
but ugen(4), with pcscd(8), for Yubikey CCID.

Fix various MP-safety issues while here (still not MPSAFE, but more
progress).
 1.154  16-Aug-2020  riastradh Convert DIAGNOSTIC prints to KASSERTs.
 1.153  16-Aug-2020  riastradh Hold the lock over access to the data structures it covers.

Still not MPSAFE, but progress.
 1.152  16-Aug-2020  riastradh Remove UGEN_ASLP microoptimization.

cv_signal already has this microoptimization.

While here, make the lock cover the relevant things we're issuing
cv_signal about -- progress toward real MP-safety.
 1.151  21-Mar-2020  skrll KNG
 1.150  14-Mar-2020  christos revert the 0x% -> %# change for fixed width formats pointed out by uwe.
 1.149  13-Mar-2020  christos PR/55068: sc.dying: Fix printf formats:
- no %s/%p for kernel log
- 0x% -> %#
- always %j for kernel log
 1.148  11-Dec-2019  bouyer reading usbdi.c it looks like usbd_get_config_descriptor() can actually
return NULL, so check for this.
I got NULL pointer dereference here with a device showing:
[ 303.732632] ugen0: autoconfiguration error: setting configuration index 0 failed
 1.147  01-Dec-2019  maxv localify
 1.146  05-May-2019  mrg branches: 1.146.2;
remove explicit 'extern struct cfdriver <my>_cd;' and use ioconf.h
 1.145  01-Mar-2019  pgoyette Rename the MODULE_*_HOOK() macros to MODULE_HOOK_*() as briefly
discussed on irc.

NFCI intended.

Ride the earlier kernel bump - it;s getting crowded.
 1.144  07-Feb-2019  skrll Remove (mostly useless) usb_detach_{broadcast,wait} and replace with
cv_{broadcast,timedwait}

Really should loop on conditon.
 1.143  29-Jan-2019  pgoyette Normalize all the compat hooks' names to the form

<subsystem>_<function>_<version>_hook

NFCI

XXX Note that although this introduces a change in the kernel-to-
XXX module interface, we are NOT bumping the kernel version number.
XXX We will bump the version number once the interface stabilizes.
 1.142  27-Jan-2019  pgoyette Merge the [pgoyette-compat] branch
 1.141  08-Nov-2018  manu Enfore USB timeout on ugen(4) write operations
 1.140  03-Sep-2018  riastradh Rename min/max -> uimin/uimax for better honesty.

These functions are defined on unsigned int. The generic name
min/max should not silently truncate to 32 bits on 64-bit systems.
This is purely a name change -- no functional change intended.

HOWEVER! Some subsystems have

#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))

even though our standard name for that is MIN/MAX. Although these
may invite multiple evaluation bugs, these do _not_ cause integer
truncation.

To avoid `fixing' these cases, I first changed the name in libkern,
and then compile-tested every file where min/max occurred in order to
confirm that it failed -- and thus confirm that nothing shadowed
min/max -- before changing it.

I have left a handful of bootloaders that are too annoying to
compile-test, and some dead code:

cobalt ews4800mips hp300 hppa ia64 luna68k vax
acorn32/if_ie.c (not included in any kernels)
macppc/if_gm.c (superseded by gem(4))

It should be easy to fix the fallout once identified -- this way of
doing things fails safe, and the goal here, after all, is to _avoid_
silent integer truncations, not introduce them.

Maybe one day we can reintroduce min/max as type-generic things that
never silently truncate. But we should avoid doing that for a while,
so that existing code has a chance to be detected by the compiler for
conversion to uimin/uimax without changing the semantics until we can
properly audit it all. (Who knows, maybe in some cases integer
truncation is actually intended!)
 1.139  05-Mar-2018  ws branches: 1.139.2; 1.139.4;
Fix last:

Since config(1) could not distinguish between device and
interface attachments, it was generating only the latter.
Thus devices without their own driver wouldn't match the
ugen driver anymore.

Fix this by using a different device name for interface attachments.
 1.138  20-Feb-2018  ws Attach uftdi to each interface found in the device separately.
This allows for other drivers (e.g. ugen) to attach to some of
the other interfaces.

Allow ugen to attach only to some of the interfaces found in a device.
 1.137  21-Jan-2018  skrll PR kern/52931 Kernel panics with Atheros usb wireless interface

Audit the flags to usbd_create_xfer so that USBD_FORCE_SHORT_XFER is
supplied wherever such a transfer is setup. We can drop
USBD_SHORT_XFER_OK as it has not bearing on number of TDs
 1.136  25-Oct-2017  maya Use C99 initializer for filterops

Mostly done with spatch with touchups for indentation

@@
expression a;
identifier b,c,d;
identifier p;
@@
const struct filterops p =
- { a, b, c, d
+ {
+ .f_isfd = a,
+ .f_attach = b,
+ .f_detach = c,
+ .f_event = d,
};
 1.135  05-Sep-2017  mrg remove redundant checks against sc and sc->sc_dying.
check sc_dying in more places.
 1.134  07-Jul-2016  msaitoh branches: 1.134.10;
KNF. Remove extra spaces. No functional change.
 1.133  23-Apr-2016  skrll Merge nick-nhusb

- API / infrastructure changes to support memory management changes.
- Memory management improvements and bug fixes.
- HCDs should now be MP safe
- conversion to KERNHIST based debug
- FS/LS isoc support on ehci(4).
- conversion to kmem(9)
- Some USB 3 support - mostly from Takahiro HAYASHI (t-hash).
- interrupt transfers now get proper DMA operations
- general bug fixes
- kern/48308
- uhub status notification improvements
- umass(4) probe fix (applied to HEAD already)
- ohci(4) short transfer fix
 1.132  13-Mar-2016  skrll KNF
 1.131  22-Feb-2016  skrll Provide a ugen_clear_endpoints declaration
 1.130  22-Feb-2016  skrll Only clear the endpoint information in ugen_set_interface only if setting
the new altno suceeds.

Avoids the null de-ref in PR/50597 and PR/50810
 1.129  21-Feb-2016  skrll Remove always true conditional
 1.128  20-Feb-2016  skrll One more s/0/NULL/
 1.127  20-Feb-2016  skrll s/0/NULL/
 1.126  20-Sep-2014  gson branches: 1.126.2;
Include opt_usb.h to make "options UGEN_DEBUG" work.
 1.125  05-Sep-2014  matt Don't nest structure definitions.
 1.124  25-Jul-2014  dholland branches: 1.124.2; 1.124.4;
Add d_discard to all struct cdevsw instances I could find.

All have been set to "nodiscard"; some should get a real implementation.
 1.123  16-Mar-2014  dholland branches: 1.123.2;
Change (mostly mechanically) every cdevsw/bdevsw I can find to use
designated initializers.

I have not built every extant kernel so I have probably broken at
least one build; however I've also found and fixed some wrong
cdevsw/bdevsw entries so even if so I think we come out ahead.
 1.122  05-Jan-2013  christos branches: 1.122.2;
- need opt_usb.h if depending on USB_DEBUG
- remove trailing whitespace
- add missing KERNEL_RCSID
 1.121  04-Dec-2012  riastradh Fix some error branches in ugen.

There remains some cruft that should perhaps be better organized, but
at least this should reduce some memory leaks in screw cases, and at
least this does fix panics when plugging in and unplugging a USB
device with a botched configuration (a beaglebone with a hosed sd
card).
 1.120  10-Jun-2012  mrg branches: 1.120.2;
merge the jmcneill-usbmp branch. many thanks to jared for the
initial work, and every one else who has tested things for me.
this is largely my fault at this point :-)

the main changes are something like:

- usbd_bus_methods{} gains a get_lock() to enable the
host controller to provide a lock for the USB code.
if the lock isn't provided, old-style protection is
(partially) applied.

- ehci/ohci/uhci have been converted to the new
interfaces, including mutex/cv/etc conversion.

- usbdivar.h contains a discussion about locking and
what locks are held for which method calls. more
to come for usbdi(9) here.

- audio drivers (uaudio, umidi, auvitek) have been
properly SMPified now that USB is ready.

- scsi drivers have been modified to take the kernel
lock explicitly before calling into scsi code.

- usb pipes are associated with a lock, that is the
same as the controller lock. (this could be split
up further in the future.)

- several usbfoo_locked() or usbfoo_unlocked()
functions have been added to the usbdi(9) to
enable functionality with or without the USB
lock (per controller) already being held.

the TODO.usbmp file has specific details on what is left to
do, including what device-specific changes should be done now
that the whole framework is ready.
 1.119  25-Apr-2012  dholland Remove duplicate break. PR 46368 from Henning Petersen.
 1.118  06-Mar-2012  mrg pull down from usbmp branch:

- rename usb_detach_{wake,waitup}() to usb_detach_{wake,waitup}old()
- use some c99 struct .initialisers
 1.117  24-Feb-2012  mrg remove any remnants of freebsd/openbsd code.
 1.116  23-Dec-2011  jakllsch Revert previous due to active usbmp branch(es).
 1.115  22-Dec-2011  jakllsch Adjust-away inconsistent and trailing whitespace.
 1.114  01-Dec-2011  jakllsch branches: 1.114.2;
Don't double clfree() when closing an interrupt endpoint.
From Geoff C. Wing in PR#37934.
 1.113  25-Nov-2011  jakllsch Prevent poll and kqueue on the control endpoint.
Addresses PR#33352.

(The control endpoint doesn't support pipes, so this would be of dubious
usefulness even if it didn't expose bugs.)
 1.112  20-Nov-2011  gavan Implement timeouts when blocking the calling process with tsleep.

Fixes PR kern/33452
 1.111  03-Nov-2010  dyoung branches: 1.111.8;
Stop using the compatibility macros USB_ATTACH(), USB_DETACH(),
USB_MATCH(), et cetera. These files produce the same assembly
(according to objdump -d) before and after the change
 1.110  27-Jul-2010  jakllsch Tune ugen(4) isochronous parameters to better support high speed pipes.

Fixes PR#43159.

Justification:

UGEN_NISORFRMS, previously 4, is now 8 because that's the number of
microframes per frame on a high speed bus. This allows data to be
transfered every microframe if necessary.

UGEN_NISOREQS, previously 6, is now 4. This is harder to justify,
but I didn't think the total number of buffer frames needed to be
much more than it was.

UGEN_NISOFRAMES, previously 500, is now (UGEN_NISORFRMS * UGEN_NISOREQS)
(32 with values as above). This is all the more we've actually used.
 1.109  19-Feb-2010  pooka branches: 1.109.2;
Replace USB_GET_SC() instances with USB_GET_SC_OPEN(). The latter
is exactly like the former, except it returns with ENXIO if sc is
NULL instead of continuing on to use it. Most of the time this is
handled by the fd layer and you get EBADF, but sometimes it's
possible to race into the device method for whatever reason and
you get a kernel panic. I have no idea what the "whatever reason"
might be.
 1.108  24-Dec-2009  jakllsch branches: 1.108.2;
defflag UGEN_BULK_RA_WB is no more.
Hi pooka
 1.107  23-Dec-2009  pooka unifdef -D UGEN_BULK_RA_WB

Default behaviour unchanged, the feature must still be explicitly
enabled for a ugen fd.
 1.106  06-Dec-2009  dyoung Simplify device-activation hooks.
 1.105  24-Sep-2009  pooka Add a simple kvm integer toggle to control ugen priority and override
the autoconf flags value. This helps to change the priority at
runtime. (XXX: is there a better way to do this?)
 1.104  24-Sep-2009  pooka ugen_get_cdesc() can return NULL. When this happens, return the
karmic EINVAL error instead of crashing.
 1.103  23-Sep-2009  plunky fix up USB drivers printing of autoconf information

1. expand the USB_ATTACH_SETUP macro (requested by jmcneill)

2. reorder the attach function so that the first thing it does is print
newlines.

3. after this, we can call usbd_devinfo_alloc(), which polls the device
allowing a context switch, and aprint_normal() the device information.

this avoids problems where autoconf messages are getting mixed up.
 1.102  20-Mar-2009  drochner Putting a device into the unconfigured state by an ioctl seems legitimate,
so check for a non-NULL configuration descriptor before dereferencing.
Should fix a crash reported by Nicolas Joly per PR kern/41048.
(It still doesn't look good that the ioctl which unconfigures the device
returns EIO -- either it is legitimate or it isn't -- but since this
is a pullup candidate I don't dare to change user visible behaviour.)
 1.101  20-Jan-2009  drochner branches: 1.101.2;
Change major()/minor() to return 32-bit types again, called
devmajor_t/devminor_t, as proposed on tech-kern.
This avoids 64-bit arithmetics and 64-bit printf formats in parts
of the kernel where it is not really useful, and helps clarity.
 1.100  11-Jan-2009  cegger make this compile
 1.99  24-May-2008  cube branches: 1.99.6; 1.99.8;
Split device_t and softc for all USB device drivers, and related cosmetic
changes.

Matthias Drochner kindly reviewed this patch, and tested ums, ubt, uaudio
and ral. I tested umass myself.
 1.98  28-Apr-2008  martin branches: 1.98.2;
Remove clause 3 and 4 from TNF licenses
 1.97  01-Mar-2008  rmind branches: 1.97.2; 1.97.4;
Welcome to 4.99.55:

- Add a lot of missing selinit() and seldestroy() calls.

- Merge selwakeup() and selnotify() calls into a single selnotify().

- Add an additional 'events' argument to selnotify() call. It will
indicate which event (POLL_IN, POLL_OUT, etc) happen. If unknown,
zero may be used.

Note: please pass appropriate value of 'events' where possible.
Proposed on: <tech-kern>
 1.96  24-Dec-2007  smb branches: 1.96.2; 1.96.6;
Add missing call to pmf_deregister() in the USB_DETACH routine.
 1.95  09-Dec-2007  jmcneill branches: 1.95.2;
Merge jmcneill-pm branch.
 1.94  05-Dec-2007  pooka branches: 1.94.2;
Do not "return 1" from kqfilter for errors. That value is passed
directly to the userland caller and results in a mysterious EPERM.
Instead, return EINVAL or something else sensible depending on the
case.
 1.93  01-Dec-2007  jmcneill branches: 1.93.2;
aprintify
 1.92  04-Mar-2007  christos branches: 1.92.14; 1.92.16; 1.92.22;
Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
 1.91  26-Feb-2007  drochner branches: 1.91.4;
The manpage promises not to touch the device on USB_GET_DEVICEINFO.
Make it so.
 1.90  21-Feb-2007  wiz Fix debug format strings (found on amd64).
 1.89  03-Dec-2006  pavel branches: 1.89.2;
Restore compatibility of USB_DEVICEINFO ioctl and reads from /dev/usb with
NetBSD 3.x. Patch from Stephan Thesing provided in
http://mail-index.netbsd.org/current-users/2006/03/21/0002.html, with some
modifications by me.
See also
http://mail-index.netbsd.org/current-users/2006/08/29/0017.html

The code is conditionally compiled depending on COMPAT_30.

Also fix a leak of struct usb_event in usbread() introduced while converting
on-stack variables to dynamic allocation.

Reviewed by martin@.
 1.88  16-Nov-2006  christos branches: 1.88.2;
__unused removal on arguments; approved by core.
 1.87  12-Oct-2006  xtraeme sigh, another missing __unused.
 1.86  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.85  03-Sep-2006  christos branches: 1.85.2; 1.85.4;
add missing initializer
 1.84  24-Jul-2006  gdt Add UGEN_BULK_RA_WB, which allows users of ugen(4) to request read
ahead and write behind, improving performance for the Universal
Software Radio Peripheral (USRP) used with GNU Radio.

Enable UGEN_BULK_RA_WB in GENERIC and GENERIC_LAPTOP; behavior is
unchanged unless the new ioctl is called.

This code was written by Joanne Mikkelson under funding from DARPA's
ACERT program.

ok'd by christos@, tested by Berndt Josef Wulf
 1.83  09-Jun-2006  christos stack police: Don't allocate large buffers on the stack for I/O. Put the
buffer in the softc instead.
 1.82  14-Apr-2006  christos branches: 1.82.2;
Coverity CID 1354: Add a KASSERT to convince coverity that there is no NULL
pointer dereference.
 1.81  14-Apr-2006  christos Coverity CID 1355: Add a KASSERT to convince coverity that this is not NULL.
 1.80  28-Mar-2006  thorpej Use device_unit().
 1.79  01-Mar-2006  yamt branches: 1.79.2; 1.79.4; 1.79.6;
merge yamt-uio_vmspace branch.

- use vmspace rather than proc or lwp where appropriate.
the latter is more natural to specify an address space.
(and less likely to be abused for random purposes.)
- fix a swdmover race.
 1.78  11-Dec-2005  christos branches: 1.78.2; 1.78.4; 1.78.6;
merge ktrace-lwp.
 1.77  28-Nov-2005  augustss Add a new match level, UMATCH_HIGHEST.
 1.76  23-Nov-2005  augustss Normally a ugen device only attaches if no other driver wants the device.
Add the ability to force ugen to attach with very high priority if "flags 1"
is specified. This can be used with the vendor and product locators to
force ugen to be used for certain devices.
Similarly, uhid only attaches if no other HID driver (ums or ukbd) wants it.
Again, "flags 1" will force uhid to attach anyway.
 1.75  21-Jun-2005  ws branches: 1.75.2; 1.75.8;
PR-30566: Poll must not return <sys/errno.h> values.
Start with those places I can easily test.
 1.74  30-May-2005  christos - const poisoning
- eliminate variable shadowing
 1.73  17-May-2005  augustss Allow multiple opens of the control endpoint. This is unproblematic since
the control endpoint is in some sense always open to the device.

From wulf@ping.net.au.
 1.72  11-May-2005  augustss Don't keep the devinfo string on the stack, instead use malloc/free.
This should cure some rare stack overflows.
 1.71  02-Mar-2005  mycroft Copyright maintenance.
 1.70  27-Feb-2005  perry nuke trailing whitespace
 1.69  03-Dec-2004  augustss branches: 1.69.4; 1.69.6;
Allow interrupt output devices. From FreeBSD.
 1.68  23-Jun-2004  mycroft Yes, some devices return incorrect lengths in their string descriptors. Rather
than losing, do what Windows does: just request the maximum size, and allow a
shorter response. Obsoletes the need for UQ_NO_STRINGS, and therefore these
"quirks" are removed.
 1.67  23-Apr-2004  itojun use bounded string ops (snprintf, strl*)
 1.66  04-Sep-2003  mycroft branches: 1.66.2;
Cast a printf() arg so that USB_DEBUG compiles on multiple platforms.
 1.65  29-Jun-2003  fvdl branches: 1.65.2;
Back out the lwp/ktrace changes. They contained a lot of colateral damage,
and need to be examined and discussed more.
 1.64  28-Jun-2003  darrenr Pass lwp pointers throughtout the kernel, as required, so that the lwpid can
be inserted into ktrace records. The general change has been to replace
"struct proc *" with "struct lwp *" in various function prototypes, pass
the lwp through and use l_proc to get the process pointer when needed.

Bump the kernel rev up to 1.6V
 1.63  26-Nov-2002  christos si_ -> sel_
 1.62  23-Oct-2002  jdolecek merge kqueue branch into -current

kqueue provides a stateful and efficient event notification framework
currently supported events include socket, file, directory, fifo,
pipe, tty and device changes, and monitoring of processes and signals

kqueue is supported by all writable filesystems in NetBSD tree
(with exception of Coda) and all device drivers supporting poll(2)

based on work done by Jonathan Lemon for FreeBSD
initial NetBSD port done by Luke Mewburn and Jason Thorpe
 1.61  23-Sep-2002  simonb Remove breaks after returns, unreachable returns and returns after
returns(!).
 1.60  06-Sep-2002  gehenna Merge the gehenna-devsw branch into the trunk.

This merge changes the device switch tables from static array to
dynamically generated by config(8).

- All device switches is defined as a constant structure in device drivers.

- The new grammer ``device-major'' is introduced to ``files''.

device-major <prefix> char <num> [block <num>] [<rules>]

- All device major numbers must be listed up in port dependent majors.<arch>
by using this grammer.

- Added the new naming convention.
The name of the device switch must be <prefix>_[bc]devsw for auto-generation
of device switch tables.

- The backward compatibility of loading block/character device
switch by LKM framework is broken. This is necessary to convert
from block/character device major to device name in runtime and vice versa.

- The restriction to assign device major by LKM is completely removed.
We don't need to reserve LKM entries for dynamic loading of device switch.

- In compile time, device major numbers list is packed into the kernel and
the LKM framework will refer it to assign device major number dynamically.
 1.59  11-Jul-2002  augustss Get rid of trailing white space.
 1.58  20-Feb-2002  christos branches: 1.58.8;
Prefix structure members to protect them against clashes with eg. c++ keywords.
Suggested by Alfred Perlstein, from FreeBSD, ok'd by augustss
 1.57  11-Feb-2002  augustss Give usbd_do_request_flags() an extra argument for the timeout.
 1.56  02-Jan-2002  augustss More whitespace fixes from FreeBSD.
 1.55  31-Dec-2001  augustss Whitespace fixes (from FreeBSD).
 1.54  31-Dec-2001  augustss Make a typedef for struct proc to make portingeasier.
 1.53  31-Dec-2001  augustss Don't allow setting the configuration when an endpoint is open. From
FreeBSD.
 1.52  31-Dec-2001  augustss Only clear stall if endpoint is stalled. From FreeBSD.
 1.51  13-Nov-2001  augustss More test for NULL pipes.
 1.50  13-Nov-2001  lukem add RCSIDs
 1.49  24-Oct-2001  augustss Add commented out match level feature.
 1.48  16-Sep-2001  yamt branches: 1.48.2;
make ugen use updated frlengths.
 1.47  16-Sep-2001  wiz Spell 'occurred' with two 'r's.
 1.46  15-Sep-2001  yamt correct debug messages.
 1.45  13-Dec-2000  augustss branches: 1.45.2; 1.45.4; 1.45.6;
Don't try to access a device that is being disconnected when generating
the detach event. Fixes (I hope) PR 11713 from itohy@netbsd.org (ITOH Yasufumi).
 1.44  26-Nov-2000  augustss Improve a debug message.
 1.43  24-Oct-2000  augustss Tell usbd_set_config_no() to be verbose. It's nice to know whyit fails.
 1.42  08-Sep-2000  augustss ANSIfy last patch.
 1.41  08-Sep-2000  augustss Add isoc support. From FreeBSD via Berndt Josef Wulf <wulf@ping.net.au>
 1.40  01-Jun-2000  augustss Bring the coding style into the 80s, i.e., get rid of __P and use
ANSI prototypes and declarations.
 1.39  31-May-2000  augustss Add a comment.
 1.38  27-Apr-2000  augustss branches: 1.38.2;
Change my email address.
 1.37  27-Mar-2000  augustss Change (almost) all static to Static. The symbol `Static' can then be defined
to `' or `static' depending on if you want to debug or not.
 1.36  06-Mar-2000  augustss Generate better error codes on bulk write.
 1.35  29-Feb-2000  augustss Distinguish between device and interface classes.
(I finally found a document that said that they were different.)
 1.34  08-Feb-2000  augustss Use NULL instead of 0.
 1.33  02-Feb-2000  augustss Generate usb events on attach and detach.
 1.32  19-Jan-2000  augustss Add an argument to usbd_open_pipe_intr() to specify the polling interval
for an interrupt pipe in case we don't what what the descriptor suggests.
 1.31  18-Dec-1999  augustss Change the way the initial configuration value is picked.
Idea from Matthias Drochner <M.Drochner@fz-juelich.de>
 1.30  18-Nov-1999  augustss Cosmetic changes and some small improvements. From FreeBSD and Nick Hibma.
 1.29  17-Nov-1999  augustss A few more purely stylistic changes that I missed in the last round.
 1.28  12-Nov-1999  augustss A number of stylistic changes to increase readability (many suggested
by Nick Hibma):
use NULL not 0
declare all local definitions static
rename s/usbd_request/usbd_xfer/ s/reqh/xfer/
rename s/r/err/
use implicit test for no err
KNF
 1.27  28-Oct-1999  augustss Add a few more tests for safety.
 1.26  28-Oct-1999  augustss Make sure read() and write() fails on the control pipe.
 1.25  13-Oct-1999  augustss branches: 1.25.2; 1.25.4;
Merge in a large batch of changes from Nick Hibma <hibma@skylink.it> so
the USB stack compiles on FreeBSD again.
 1.24  12-Oct-1999  augustss Add an event mechanism so that a userland process can watch devices come
and go.
 1.23  09-Sep-1999  augustss branches: 1.23.2;
Change the internal API to allow DMA buffers to be pre-allocated by
the device driver instead of happening automagically in the HC driver.
This affects both the HC-USBD interface as well as the USBD-device
interface.
This change will allow DMA buffers to be reused e.g. in isochronous
traffic.

Add isochronous support to the UHCI driver (not for OHCI yet).
 1.22  05-Sep-1999  augustss Change the way the `struct device' base part of all driver softc are
declared and accessed to make it more portable. Idea from Nick Hibma, FreeBSD.
No functional changes.
 1.21  04-Sep-1999  augustss Change the way the direction is extracted from the endpoint descriptor.
No functional changes to the drivers. From Nick Hibma, FreeBSD.
 1.20  28-Aug-1999  augustss Change some 'struct device' to 'bdevice'. From FreeBSD.
 1.19  28-Aug-1999  augustss Change a type name.
 1.18  23-Aug-1999  augustss Make sure to mark the device as dying already in the (de)activate routine.
This avoids access to it before the detach routine has blown it away.
 1.17  22-Aug-1999  augustss Move more of the transfer completion processing to HC independent code.
Fix some problems with transfer abort & timeout.
 1.16  19-Aug-1999  augustss Use the right type for the size argument when calling usbd_bulk_transfer().
 1.15  17-Aug-1999  augustss Make some small changes to make it compile on OpenBSD.
 1.14  14-Aug-1999  augustss Some changes from FreeBSD (no functional differences).
 1.13  02-Aug-1999  augustss Change it so that a pipe can be open RW instead of just R or W.
This makes close() work properly, but it is still not ideal. Perhaps
there should be different device nodes for input and output on to
and endpoint with the same number?
Pay attention to the SHORT_XFER_OK ioctl().
 1.12  30-Jun-1999  augustss Totally redo the way device detach is done. It now uses a kernel event
thread and the config detach method.
Squish a number of space leaks on detach.
 1.11  08-Jan-1999  augustss branches: 1.11.4;
Various little fixes from the FreeBSD version.
 1.10  07-Jan-1999  augustss Fix some pastos.
 1.9  03-Jan-1999  augustss Add an ugly workaround for a bug (feature) in the NetBSD open()/close()
protocol.
 1.8  01-Jan-1999  augustss Fix bug in reading from interrupt pipe.
Make read and write on bulk pipes interruptible.
 1.7  29-Dec-1998  augustss Don't set configuration unnecessarily, some (broken) devices seem to break
if you do.
 1.6  29-Dec-1998  augustss Make it possible to specify the request flags when issuing a raw USB request.
 1.5  26-Dec-1998  augustss Merge changes to make the USB stack work with FreeBSD. The original
diffs from Nick Hibma <n_hibma@freebsd.org>, but with substantial
changes from me.
XXX Not tested on FreeBSD yet.
 1.4  12-Dec-1998  augustss Move initialization of sce around.
 1.3  10-Dec-1998  augustss Take care of some lines > 80 chars.
 1.2  09-Dec-1998  augustss Improvement to the ugen driver.
Better error checking.
Some code rearrengment.
 1.1  08-Dec-1998  augustss Add a generic USB driver. It allows easy access to descriptors, the
control pipe via ioctl() and read() and write() access to bulk and
interrupt pipes.
 1.11.4.1  01-Jul-1999  thorpej Sync w/ -current.
 1.23.2.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.25.4.1  15-Nov-1999  fvdl Sync with -current
 1.25.2.3  13-Dec-2000  bouyer Sync with HEAD (for UBC fixes).
 1.25.2.2  08-Dec-2000  bouyer Sync with HEAD.
 1.25.2.1  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
A i386 GENERIC kernel compiles without the siop, ahc and bha drivers
(will be updated later). i386 IDE/ATAPI and ncr work, as well as
sparc/esp_sbus. alpha should work as well (untested yet).
siop, ahc and bha will be updated once I've updated the branch to current
-current, as well as machine-dependant code.
 1.38.2.1  22-Jun-2000  minoura Sync w/ netbsd-1-5-base.
 1.45.6.3  01-Oct-2001  fvdl Catch up with -current.
 1.45.6.2  26-Sep-2001  fvdl * add a VCLONED vnode flag that indicates a vnode representing a cloned
device.
* rename REVOKEALL to REVOKEALIAS, and add a REVOKECLONE flag, to pass
to VOP_REVOKE
* the revoke system call will revoke all aliases, as before, but not the
clones
* vdevgone is called when detaching a device, so make it use REVOKECLONE
to get rid of all clones as well
* clean up all uses of VOP_OPEN wrt. locking.
* add a few VOPS to spec_vnops that need to do something when it's a
clone vnode (access and getattr)
* add a copy of the vnode vattr structure of the original 'master' vnode
to the specinfo of a cloned vnode. could possibly redirect getattr to
the 'master' vnode, but this has issues with revoke
* add a vdev_reassignvp function that disassociates a vnode from its
original device, and reassociates it with the specified dev_t. to be
used by cloning devices only, in case a new minor is allocated.
* change all direct references in drivers to v_devcookie and v_rdev
to vdev_privdata(vp) and vdev_rdev(vp). for diagnostic purposes
when debugging race conditions that still exist wrt. locking and
revoking vnodes.
* make the locking state of a vnode consistent when passed to
d_open and d_close (unlocked). locked would be better, but has
some deadlock issues
 1.45.6.1  07-Sep-2001  thorpej Commit my "devvp" changes to the thorpej-devvp branch. This
replaces the use of dev_t in most places with a struct vnode *.

This will form the basic infrastructure for real cloning device
support (besides being architecurally cleaner -- it'll be good
to get away from using numbers to represent objects).
 1.45.4.7  10-Oct-2002  jdolecek sync kqueue with -current; this includes merge of gehenna-devsw branch,
merge of i386 MP branch, and part of autoconf rototil work
 1.45.4.6  02-Oct-2002  jdolecek do not need the (void *) cast for kn_hook anymore
 1.45.4.5  06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.45.4.4  16-Mar-2002  jdolecek Catch up with -current.
 1.45.4.3  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.45.4.2  08-Sep-2001  thorpej Use the seltrue filter as appropriate (or, rather, as the "poll"
entry points of these drivers indicate).
 1.45.4.1  08-Sep-2001  thorpej Add kqueue support.
 1.45.2.10  11-Dec-2002  thorpej Sync with HEAD.
 1.45.2.9  11-Nov-2002  nathanw Catch up to -current
 1.45.2.8  18-Oct-2002  nathanw Catch up to -current.
 1.45.2.7  17-Sep-2002  nathanw Catch up to -current.
 1.45.2.6  01-Aug-2002  nathanw Catch up to -current.
 1.45.2.5  28-Feb-2002  nathanw Catch up to -current.
 1.45.2.4  11-Jan-2002  nathanw More catchup.
 1.45.2.3  08-Jan-2002  nathanw Catch up to -current.
 1.45.2.2  14-Nov-2001  nathanw Catch up to -current.
 1.45.2.1  21-Sep-2001  nathanw Catch up to -current.
 1.48.2.1  12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.58.8.2  15-Jul-2002  gehenna catch up with -current.
 1.58.8.1  16-May-2002  gehenna Add the character device switch.
Replace the direct-access to devsw table with calling devsw API.
 1.65.2.8  11-Dec-2005  christos Sync with head.
 1.65.2.7  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.65.2.6  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.65.2.5  18-Dec-2004  skrll Sync with HEAD.
 1.65.2.4  21-Sep-2004  skrll Fix the sync with head I botched.
 1.65.2.3  18-Sep-2004  skrll Sync with HEAD.
 1.65.2.2  03-Aug-2004  skrll Sync with HEAD
 1.65.2.1  02-Jul-2003  darrenr Apply the aborted ktrace-lwp changes to a specific branch. This is just for
others to review, I'm concerned that patch fuziness may have resulted in some
errant code being generated but I'll look at that later by comparing the diff
from the base to the branch with the file I attempt to apply to it. This will,
at the very least, put the changes in a better context for others to review
them and attempt to tinker with removing passing of 'struct lwp' through
the kernel.
 1.66.2.1  02-Jul-2004  he Pull up revision 1.68 (requested by mycroft in ticket #572):
Several fixes mostly related to USB:
o Add a general workaround for devices returning incorrect
lengths in string descriptors, so that we don't need
separate quirk entries for these.
 1.69.6.1  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.69.4.1  29-Apr-2005  kent sync with -current
 1.75.8.1  29-Nov-2005  yamt sync with head.
 1.75.2.7  17-Mar-2008  yamt sync with head.
 1.75.2.6  21-Jan-2008  yamt sync with head
 1.75.2.5  07-Dec-2007  yamt sync with head
 1.75.2.4  03-Sep-2007  yamt sync with head.
 1.75.2.3  26-Feb-2007  yamt sync with head.
 1.75.2.2  30-Dec-2006  yamt sync with head.
 1.75.2.1  21-Jun-2006  yamt sync with head.
 1.78.6.1  22-Apr-2006  simonb Sync with head.
 1.78.4.1  09-Sep-2006  rpaulo sync with head
 1.78.2.1  05-Feb-2006  yamt adapt dev/usb.
 1.79.6.2  24-May-2006  tron Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
 1.79.6.1  31-Mar-2006  tron Merge 2006-03-31 NetBSD-current into the "peter-altq" branch.
 1.79.4.1  19-Apr-2006  elad sync with head.
 1.79.2.5  03-Sep-2006  yamt sync with head.
 1.79.2.4  11-Aug-2006  yamt sync with head
 1.79.2.3  26-Jun-2006  yamt sync with head.
 1.79.2.2  24-May-2006  yamt sync with head.
 1.79.2.1  01-Apr-2006  yamt sync with head.
 1.82.2.1  19-Jun-2006  chap Sync with head.
 1.85.4.2  10-Dec-2006  yamt sync with head.
 1.85.4.1  22-Oct-2006  yamt sync with head
 1.85.2.2  12-Jan-2007  ad Sync with head.
 1.85.2.1  18-Nov-2006  ad Sync with head.
 1.88.2.2  06-Apr-2007  bouyer Pull up following revision(s) (requested by pavel in ticket #556):
sys/dev/usb/ugen.c: revision 1.89
sys/dev/usb/usb.c: revisions 1.92, 1.93
sys/dev/usb/usb_subr.c: revision 1.139, 1.140
sys/dev/usb/usb.h: revision 1.75
sys/dev/usb/usbdi.h: revisions 1.71, 1.72
sys/dev/usb/usbdi.c: revision 1.115, 1.116
sys/dev/usb/uhid.c: revision 1.73
Restore compatibility of USB_DEVICEINFO ioctl and reads from /dev/usb with
NetBSD 3.x. The code is conditionally compiled depending on COMPAT_30.
 1.88.2.1  24-Feb-2007  bouyer Pull up following revision(s) (requested by wiz in ticket #460):
sys/dev/usb/if_rum.c: revision 1.5
sys/dev/usb/ugen.c: revision 1.90
Fix debug format strings (found on amd64).
 1.89.2.2  12-Mar-2007  rmind Sync with HEAD.
 1.89.2.1  27-Feb-2007  yamt - sync with head.
- move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
 1.91.4.3  17-Jun-2007  itohy - Pullup 1.92 in a different way.
- struct lwp *l -> usb_proc_ptr p
- Use macro to set vmspace of uio for portability.
 1.91.4.2  16-Jun-2007  itohy - Change order to fit current API: usbd_open_pipe() -> usbd_alloc_xfer;
usbd_abort_pipe() -> usbd_free_xfer() -> usbd_close_pipe().
 1.91.4.1  22-May-2007  itohy Overhaul of USB stack, mostly DMA related

This applies to NetBSD 4.99.13 (March 1, 2007)

usbdi(9) interface is based on FreeBSD version, excluding
- removal of portability code

Patch most NetBSD changes, excluding
- DMA memory "reserve", since we don't need contiguous buffers any longer
- volatiles in DMA structure, since it should not be needed
with proper bus_dmamap_sync(9)s

DMA/non-DMA memory management overhaul
- Move all DMA related code to usb_mem.[ch]
(add usb_alloc_buffer_dma(), usb_free_buffer_dma(), etc.).
XXX Should usb_mem.[ch] be renamed as usb_mem_dma.[ch] ?
- Add corresponding non-DMA code to usb_mem_nodma.[ch] .
Currently just use malloc(9).
- Above files are conditionally used by config framework (added
attributes to conf/files and dev/usb/files.usb).
- Add diagnostic panics when resource allocation is requested
on interrupt context.
- Change memory allocations (that require context) from NOWAIT to WAITOK.

Allocate DMA/non-DMA buffer per host interface, not globally.
advantage: Buffers can be freed on detaching host interface.
Activity of a host interface does not affect others.
disadvantages: It possibly consumes more memory.

API changes
- usbd_alloc_xfer() is changed:
old: usbd_xfer_handle usbd_alloc_xfer(usbd_device_handle dev);
new: usbd_xfer_handle usbd_alloc_xfer(usbd_device_handle dev,
usbd_pipe_handle pipe);
- pipe argument of usbd_setup_*xfer() are now unused
XXX the pipe argument should be removed?
- add mapping APIs
- async request will be processed as a task (kernel thread context),
and delayed to some extent
- usbdivar.h: struct usbd_xfer: renamed a member "allocbuf" to "hcbuffer"
(mapped/allocated/refered buffer for HCI driver)
- usb_port.h: change usb_proc_ptr from struct ptoc * to struct lwp *
- usb_port.h: add usb_sigproc_ptr for psignal(9) (struct proc *)
- usb.h: add UE_MAXPKTSZ(ep) and UE_MAXPKTSZ_MASK macros for USB 2.0

changes to USB device drivers
- atu, aue, axe, cdce, cue, kue, rum, udav, upl, ural, url,
uaudio, ubt, ucom, ugen, uhidev, uirda, ulpt, umidi, urio,
uscanner, ustir, utoppy:
* catch up API change of usbd_alloc_xfer()
- umass, usscanner:
* catch up API change of usbd_alloc_xfer()
* eliminate memory copy for large transfer

ohci
- free resources on detach
- add lots of bus_dmamap_sync() operations
- simplify the code of loading std chain
- rewrite code of looking up TD/ITD from DMA addr by using allocation chunk
- add workaround for CMD Tech 670 and 673 chipsets
- make sure resources are not allocated in interrupt context
- add support for mapping buffer and mbuf

slhci
- allocate xfer and slhci_xfer at once, and simplify relevant code
- add slhci_detach()
- remove second arg of slhci_attach() since it is the same as the first arg.
- add support for "mapping" (no, it doesn't map since it doesn't do DMA)
buffer and mbuf
- add pcmcia frontend
- NOT TESTED, missing hardware

ehci
- add lots of bus_dmamap_sync() operations, possibly too many
- make sure resources are not allocated in interrupt context
- add support for mapping buffer and mbuf
- done only simple test

uhci
- add lots of bus_dmamap_sync() operations, possibly too many
- make sure resources are not allocated in interrupt context
- add support for mapping buffer and mbuf

To do
- review, test, debug
- rewrite network drivers to utilize usbd_map_buffer_mbuf()
- rewrite uaudio(4) to eliminate memcpy
- "pipe" argument of usbd_setup_*xfer() should eventually be removed
 1.92.22.2  27-Dec-2007  mjf Sync with HEAD.
 1.92.22.1  08-Dec-2007  mjf Sync with HEAD.
 1.92.16.2  23-Mar-2008  matt sync with HEAD
 1.92.16.1  09-Jan-2008  matt sync with HEAD
 1.92.14.4  09-Dec-2007  jmcneill Sync with HEAD.
 1.92.14.3  08-Dec-2007  jmcneill Rename pnp(9) -> pmf(9), as requested by many.
 1.92.14.2  01-Dec-2007  jmcneill Sync with HEAD.
 1.92.14.1  23-Nov-2007  joerg Register with PM framework.
 1.93.2.2  26-Dec-2007  ad Sync with head.
 1.93.2.1  08-Dec-2007  ad Sync with head.
 1.94.2.1  11-Dec-2007  yamt sync with head.
 1.95.2.1  02-Jan-2008  bouyer Sync with HEAD
 1.96.6.5  17-Jan-2009  mjf Sync with HEAD.
 1.96.6.4  02-Jun-2008  mjf Sync with HEAD.
 1.96.6.3  06-Apr-2008  mjf - after some discussion with agc@ i agreed it would be a good idea to move
device_unregister_* to device_deregister_* to be more like the pmf(9)
functions, especially since a lot of the time the function calls are next
to each other.

- add device_register_name() support for dk(4).
 1.96.6.2  05-Apr-2008  mjf - add "file-system DEVFS" and "pseudo-device devfsctl" to conf/std seeing
as these are always needed.

- convert many, many drivers over to the New Devfs World Order. For a
list of device drivers yet to be converted see,
http://www.netbsd.org/~mjf/devfs-todo.html.

- add a new device_unregister_all(device_t) function to remove all device
names associated with a device_t, which saves us having to construct
device names when the driver is detached.

- add a DEV_AUDIO type for devices.
 1.96.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.96.2.1  24-Mar-2008  keiichi sync with head.
 1.97.4.4  11-Aug-2010  yamt sync with head.
 1.97.4.3  11-Mar-2010  yamt sync with head
 1.97.4.2  04-May-2009  yamt sync with head.
 1.97.4.1  16-May-2008  yamt sync with head.
 1.97.2.2  04-Jun-2008  yamt sync with head
 1.97.2.1  18-May-2008  yamt sync with head.
 1.98.2.1  23-Jun-2008  wrstuden Sync w/ -current. 34 merge conflicts to follow.
 1.99.8.4  25-Jan-2012  riz Pull up following revision(s) (requested by gavan in ticket #1697):
sys/dev/usb/ugen.c: revision 1.112
Implement timeouts when blocking the calling process with tsleep.
Fixes PR kern/33452
 1.99.8.3  09-Mar-2010  snj Pull up following revision(s) (requested by pooka in ticket #1332):
sys/dev/usb/ugen.c: revision 1.109
Replace USB_GET_SC() instances with USB_GET_SC_OPEN(). The latter
is exactly like the former, except it returns with ENXIO if sc is
NULL instead of continuing on to use it. Most of the time this is
handled by the fd layer and you get EBADF, but sometimes it's
possible to race into the device method for whatever reason and
you get a kernel panic. I have no idea what the "whatever reason"
might be.
 1.99.8.2  26-Sep-2009  snj Pull up following revision(s) (requested by pooka in ticket #1017):
sys/dev/usb/ugen.c: revision 1.104
ugen_get_cdesc() can return NULL. When this happens, return the
karmic EINVAL error instead of crashing.
 1.99.8.1  24-Mar-2009  snj branches: 1.99.8.1.4;
Pull up following revision(s) (requested by drochner in ticket #603):
sys/dev/usb/ugen.c: revision 1.102
Putting a device into the unconfigured state by an ioctl seems legitimate,
so check for a non-NULL configuration descriptor before dereferencing.
Should fix a crash reported by Nicolas Joly per PR kern/41048.
(It still doesn't look good that the ioctl which unconfigures the device
returns EIO -- either it is legitimate or it isn't -- but since this
is a pullup candidate I don't dare to change user visible behaviour.)
 1.99.8.1.4.1  21-Apr-2010  matt sync to netbsd-5
 1.99.6.3  28-Apr-2009  skrll Sync with HEAD.
 1.99.6.2  03-Mar-2009  skrll Sync with HEAD.
 1.99.6.1  19-Jan-2009  skrll Sync with HEAD.
 1.101.2.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.108.2.3  06-Nov-2010  uebayasi Sync with HEAD.
 1.108.2.2  17-Aug-2010  uebayasi Sync with HEAD.
 1.108.2.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.109.2.1  05-Mar-2011  rmind sync with head
 1.111.8.6  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.111.8.5  23-Jan-2013  yamt sync with head
 1.111.8.4  16-Jan-2013  yamt sync with (a bit old) head
 1.111.8.3  30-Oct-2012  yamt sync with head
 1.111.8.2  23-May-2012  yamt sync with head.
 1.111.8.1  17-Apr-2012  yamt sync with head
 1.114.2.5  12-May-2012  mrg port this to usbmp and also make it largely MPSAFE, but not yet enough
for D_MPSAFE to be added. should be merge-ready now, but needs testing.
 1.114.2.4  29-Apr-2012  mrg sync to latest -current.
 1.114.2.3  26-Feb-2012  mrg rename old usb_detach_wakeup/wait to usb_detach_{wake,wakeup}old().
 1.114.2.2  24-Feb-2012  mrg sync to -current.
 1.114.2.1  18-Feb-2012  mrg merge to -current.
 1.120.2.3  03-Dec-2017  jdolecek update from HEAD
 1.120.2.2  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.120.2.1  25-Feb-2013  tls resync with head
 1.122.2.1  18-May-2014  rmind sync with head
 1.123.2.1  10-Aug-2014  tls Rebase.
 1.124.4.2  07-Mar-2016  martin Additionally pull up r1.131 for ticket #1124 (requested by skrll)
 1.124.4.1  06-Mar-2016  martin Pull up following revision(s) (requested by skrll in ticket #1124):
sys/dev/usb/ugen.c: revision 1.127
sys/dev/usb/ugen.c: revision 1.128
sys/dev/usb/ugen.c: revision 1.129
sys/dev/usb/ugen.c: revision 1.130
s/0/NULL/
One more s/0/NULL/
Remove always true conditional
Only clear the endpoint information in ugen_set_interface only if setting
the new altno suceeds.
Avoids the null de-ref in PR/50597 and PR/50810
 1.124.2.5  25-Aug-2018  martin Pull up following revision(s) (requested by mrg in ticket #1632):

sys/dev/usb/usbdivar.h: revision 1.117
sys/external/bsd/dwc2/dwc2.c: revision 1.52
sys/dev/usb/xhcivar.h: revision 1.10
sys/dev/usb/motg.c: revision 1.22
sys/dev/usb/ehci.c: revision 1.260
sys/dev/usb/ehci.c: revision 1.261
sys/dev/usb/xhci.c: revision 1.96
sys/dev/usb/ohci.c: revision 1.282
sys/dev/usb/ohci.c: revision 1.283
sys/dev/usb/ehcivar.h: revision 1.45
sys/dev/usb/uhci.c: revision 1.281
sys/dev/usb/uhci.c: revision 1.282
sys/dev/usb/usbdi.c: revision 1.177
sys/dev/usb/ohcivar.h: revision 1.60
sys/dev/usb/uhcivar.h: revision 1.55
(all via patch)

pull across abort fixes from nick-nhusb. add more abort fixes, using
ideas from Taylor and Nick, and myself. special thanks to both who
inspired much of the code here, if not wrote it directly.

among other problems, this assert should no longer trigger:

panic: kernel diagnostic assertion "xfer->ux_state == XFER_ONQU" failed: file "/current/src/sys/dev/usb/usbdi.c", line 914

using usbhist i was able to track down my instance of it being related
to userland close() beginning, dropping the sc_lock, and then the usb
softintr completes the transfer normally, and when it is done, the
abort path attempts to re-complete the transfer, and the above assert
is tripped.

changes from nhusb were commited with these logs:
--
Move the struct usb_task to struct usbd_xfer for everyone to use.
--
Set device transfer status to USBD_IN_PROGRESS if start methods succeeds
--
Actually set the transfer status on transfers in ohci_abort_xfer and
the controller is dying
--
Don't supply the lock to callout_halt when polling as it won't be held
--
Improve transfer abort
--
Mark device transfers as USBD_IN_PROGRESS appropriately and improve
abort handling
--
--
Mark device transfers as USBD_IN_PROGRESS appropriately and improve
abort handling
--

additional changes include:
- initialise the usb abort task in the HCI allocx routine, so that it
can be safely usb_rem_task()'d.
- rework the handling of softintr vs cancellation vs timeout abort based
upon a scheme from Taylor:
when completing a transfer normally:
- if the status is not in progress, it must be cancelled or timed out,
and we should not process this xfer.
- set the status as normal.
- unconditionallly callout_stop() and usb_rem_task(). they're safe and
either aren't running, or will run and do nothing.
- finally call usb_transfer_complete().
when aborting a transfer:
- status should be cancelled or timed out.
- if cancelling, callout_halt and usb_rem_task_wait() to make sure the
timer is either done or cancelled.
- at this point, the ux_status must not be cancelled or timed out, and
if it is not in progress we're done.
- set the status.
- if the controller is dying, just return.
- perform HCI-specific tasks to abort this xfer.
- finally call usb_transfer_complete().
for the timeout and timeout task:
- if the HCI is not dying, and the ux_status is in progress, then
trigger the usb abort task.
- remove UXFER_ABORTWAIT and UXFER_ABORTING.

tested on:
- multiple PC systems with several types of devices: ugen/UPS, ucom,
umass with disk, ssd and cdrom backends, kbd, ms, using uhci, ehci
and xhci.
- erlite3: sd@umass on dwc2.
- sunblade2000: kbd/ms and umass disk on ohci.

untested:
- motg, slhci and ahci. motg has some portion of the new scheme
applied, but slhci and ahci require more study.

future work includes pushing a lot of the common abort handling into
usbdi.c and leaving upm_abort() for HC specific tasks, but this change
is pullup-able to netbsd-7 and netbsd-8 as it does not change any
external API, as well as removing over 100 lines of code while adding
over 30 new asserts.

XXX: pullup-7, pullup-8.

fix DIAGNOSTIC build by not copying ub_usepolling to stack before use

Sprinkle __diagused
 1.124.2.4  19-Feb-2018  snj Pull up following revision(s) (requested by skrll in ticket #1556):
sys/dev/usb/if_athn_usb.c: 1.25
sys/dev/usb/if_atu.c: 1.56
sys/dev/usb/if_aue.c: 1.142
sys/dev/usb/if_axe.c: 1.84
sys/dev/usb/if_axen.c: 1.12
sys/dev/usb/if_cdce.c: 1.45
sys/dev/usb/if_cue.c: 1.77
sys/dev/usb/if_kue.c: 1.91
sys/dev/usb/if_otus.c: 1.32
sys/dev/usb/if_rum.c: 1.59
sys/dev/usb/if_run.c: 1.25
sys/dev/usb/if_smsc.c: 1.33
sys/dev/usb/if_udav.c: 1.52
sys/dev/usb/if_upgt.c: 1.18
sys/dev/usb/if_upl.c: 1.61
sys/dev/usb/if_ural.c: 1.53
sys/dev/usb/if_url.c: 1.57
sys/dev/usb/if_urndis.c: 1.17
sys/dev/usb/if_urtw.c: 1.14
sys/dev/usb/if_urtwn.c: 1.56
sys/dev/usb/if_zyd.c: 1.45
sys/dev/usb/irmce.c: 1.4
sys/dev/usb/pseye.c: 1.24
sys/dev/usb/ubt.c: 1.60
sys/dev/usb/ucom.c: 1.120
sys/dev/usb/udsir.c: 1.6
sys/dev/usb/ugen.c: 1.137
sys/dev/usb/uhso.c: 1.27
sys/dev/usb/uirda.c: 1.43
sys/dev/usb/ulpt.c: 1.99
sys/dev/usb/umass.c: 1.163
sys/dev/usb/umidi.c: 1.74
sys/dev/usb/uscanner.c: 1.82
sys/dev/usb/usscanner.c: 1.43
sys/dev/usb/ustir.c: 1.39
sys/dev/usb/utoppy.c: 1.30
sys/dev/usb/uvideo.c: 1.46
PR kern/52931 Kernel panics with Atheros usb wireless interface
Audit the flags to usbd_create_xfer so that USBD_FORCE_SHORT_XFER is
supplied wherever such a transfer is setup. We can drop
USBD_SHORT_XFER_OK as it has not bearing on number of TDs
 1.124.2.3  05-Apr-2017  snj Pull up following revision(s) (requested by skrll in ticket #1395):
share/man/man4/axe.4: netbsd-7-nhusb
share/man/man4/axen.4: netbsd-7-nhusb
share/man/man4/cdce.4: netbsd-7-nhusb
share/man/man4/uaudio.4: netbsd-7-nhusb
share/man/man4/ucom.4: netbsd-7-nhusb
share/man/man4/uep.4: netbsd-7-nhusb
share/man/man4/urtw.4: netbsd-7-nhusb
share/man/man4/usb.4: netbsd-7-nhusb
share/man/man4/uyap.4: netbsd-7-nhusb
share/man/man4/xhci.4: netbsd-7-nhusb
share/man/man9/usbdi.9: netbsd-7-nhusb
sys/arch/amd64/conf/ALL: netbsd-7-nhusb
sys/arch/amd64/conf/GENERIC: netbsd-7-nhusb
sys/arch/amiga/dev/slhci_zbus.c: netbsd-7-nhusb
sys/arch/arm/allwinner/awin_otg.c: netbsd-7-nhusb
sys/arch/arm/allwinner/awin_usb.c: netbsd-7-nhusb
sys/arch/arm/amlogic/amlogic_dwctwo.c: netbsd-7-nhusb
sys/arch/arm/at91/at91ohci.c: netbsd-7-nhusb
sys/arch/arm/broadcom/bcm2835_dwctwo.c: netbsd-7-nhusb
sys/arch/arm/broadcom/bcm53xx_usb.c: netbsd-7-nhusb
sys/arch/arm/ep93xx/epohci.c: netbsd-7-nhusb
sys/arch/arm/gemini/obio_ehci.c: netbsd-7-nhusb
sys/arch/arm/imx/files.imx23: netbsd-7-nhusb
sys/arch/arm/imx/imxusb.c: netbsd-7-nhusb
sys/arch/arm/imx/imxusbreg.h: netbsd-7-nhusb
sys/arch/arm/omap/obio_ohci.c: netbsd-7-nhusb
sys/arch/arm/omap/omap3_ehci.c: netbsd-7-nhusb
sys/arch/arm/omap/omapl1x_ohci.c: netbsd-7-nhusb
sys/arch/arm/omap/tiotg.c: netbsd-7-nhusb
sys/arch/arm/s3c2xx0/ohci_s3c24x0.c: netbsd-7-nhusb
sys/arch/arm/samsung/exynos_usb.c: netbsd-7-nhusb
sys/arch/arm/xscale/pxa2x0_ohci.c: netbsd-7-nhusb
sys/arch/arm/zynq/zynq_usb.c: netbsd-7-nhusb
sys/arch/hpcarm/dev/nbp_slhci.c: netbsd-7-nhusb
sys/arch/hpcmips/dev/plumohci.c: netbsd-7-nhusb
sys/arch/i386/conf/ALL: netbsd-7-nhusb
sys/arch/i386/conf/GENERIC: netbsd-7-nhusb
sys/arch/i386/pci/gcscehci.c: netbsd-7-nhusb
sys/arch/luna68k/conf/GENERIC: netbsd-7-nhusb
sys/arch/mips/adm5120/dev/ahci.c: netbsd-7-nhusb
sys/arch/mips/adm5120/dev/ahcivar.h: netbsd-7-nhusb
sys/arch/mips/alchemy/dev/ohci_aubus.c: netbsd-7-nhusb
sys/arch/mips/atheros/dev/ehci_arbus.c: netbsd-7-nhusb
sys/arch/mips/atheros/dev/ohci_arbus.c: netbsd-7-nhusb
sys/arch/mips/conf/files.adm5120: netbsd-7-nhusb
sys/arch/mips/ralink/ralink_ehci.c: netbsd-7-nhusb
sys/arch/mips/ralink/ralink_ohci.c: netbsd-7-nhusb
sys/arch/mips/rmi/rmixl_ehci.c: netbsd-7-nhusb
sys/arch/mips/rmi/rmixl_ohci.c: netbsd-7-nhusb
sys/arch/playstation2/dev/ohci_sbus.c: netbsd-7-nhusb
sys/arch/powerpc/booke/dev/pq3ehci.c: netbsd-7-nhusb
sys/arch/powerpc/ibm4xx/dev/dwctwo_plb.c: netbsd-7-nhusb
sys/arch/x68k/dev/slhci_intio.c: netbsd-7-nhusb
sys/conf/files: netbsd-7-nhusb
sys/dev/cardbus/ehci_cardbus.c: netbsd-7-nhusb
sys/dev/cardbus/ohci_cardbus.c: netbsd-7-nhusb
sys/dev/cardbus/uhci_cardbus.c: netbsd-7-nhusb
sys/dev/ic/sl811hs.c: netbsd-7-nhusb
sys/dev/ic/sl811hsvar.h: netbsd-7-nhusb
sys/dev/isa/slhci_isa.c: netbsd-7-nhusb
sys/dev/marvell/ehci_mv.c: netbsd-7-nhusb
sys/dev/pci/ehci_pci.c: netbsd-7-nhusb
sys/dev/pci/ohci_pci.c: netbsd-7-nhusb
sys/dev/pci/uhci_pci.c: netbsd-7-nhusb
sys/dev/pci/xhci_pci.c: netbsd-7-nhusb
sys/dev/pcmcia/slhci_pcmcia.c: netbsd-7-nhusb
sys/dev/usb/Makefile.usbdevs: netbsd-7-nhusb
sys/dev/usb/TODO: netbsd-7-nhusb
sys/dev/usb/TODO.usbmp: netbsd-7-nhusb
sys/dev/usb/aubtfwl.c: netbsd-7-nhusb
sys/dev/usb/auvitek.c: netbsd-7-nhusb
sys/dev/usb/auvitek_audio.c: netbsd-7-nhusb
sys/dev/usb/auvitek_dtv.c: netbsd-7-nhusb
sys/dev/usb/auvitek_i2c.c: netbsd-7-nhusb
sys/dev/usb/auvitek_video.c: netbsd-7-nhusb
sys/dev/usb/auvitekvar.h: netbsd-7-nhusb
sys/dev/usb/ehci.c: netbsd-7-nhusb
sys/dev/usb/ehcireg.h: netbsd-7-nhusb
sys/dev/usb/ehcivar.h: netbsd-7-nhusb
sys/dev/usb/emdtv.c: netbsd-7-nhusb
sys/dev/usb/emdtv_dtv.c: netbsd-7-nhusb
sys/dev/usb/emdtv_ir.c: netbsd-7-nhusb
sys/dev/usb/emdtvvar.h: netbsd-7-nhusb
sys/dev/usb/ezload.c: netbsd-7-nhusb
sys/dev/usb/ezload.h: netbsd-7-nhusb
sys/dev/usb/files.usb: netbsd-7-nhusb
sys/dev/usb/hid.c: netbsd-7-nhusb
sys/dev/usb/hid.h: netbsd-7-nhusb
sys/dev/usb/if_athn_usb.c: netbsd-7-nhusb
sys/dev/usb/if_athn_usb.h: netbsd-7-nhusb
sys/dev/usb/if_atu.c: netbsd-7-nhusb
sys/dev/usb/if_atureg.h: netbsd-7-nhusb
sys/dev/usb/if_aue.c: netbsd-7-nhusb
sys/dev/usb/if_auereg.h: netbsd-7-nhusb
sys/dev/usb/if_axe.c: netbsd-7-nhusb
sys/dev/usb/if_axen.c: netbsd-7-nhusb
sys/dev/usb/if_axenreg.h: netbsd-7-nhusb
sys/dev/usb/if_axereg.h: netbsd-7-nhusb
sys/dev/usb/if_cdce.c: netbsd-7-nhusb
sys/dev/usb/if_cdcereg.h: netbsd-7-nhusb
sys/dev/usb/if_cue.c: netbsd-7-nhusb
sys/dev/usb/if_cuereg.h: netbsd-7-nhusb
sys/dev/usb/if_kue.c: netbsd-7-nhusb
sys/dev/usb/if_kuereg.h: netbsd-7-nhusb
sys/dev/usb/if_otus.c: netbsd-7-nhusb
sys/dev/usb/if_otusvar.h: netbsd-7-nhusb
sys/dev/usb/if_rum.c: netbsd-7-nhusb
sys/dev/usb/if_rumreg.h: netbsd-7-nhusb
sys/dev/usb/if_rumvar.h: netbsd-7-nhusb
sys/dev/usb/if_run.c: netbsd-7-nhusb
sys/dev/usb/if_runvar.h: netbsd-7-nhusb
sys/dev/usb/if_smsc.c: netbsd-7-nhusb
sys/dev/usb/if_smscreg.h: netbsd-7-nhusb
sys/dev/usb/if_smscvar.h: netbsd-7-nhusb
sys/dev/usb/if_udav.c: netbsd-7-nhusb
sys/dev/usb/if_udavreg.h: netbsd-7-nhusb
sys/dev/usb/if_upgt.c: netbsd-7-nhusb
sys/dev/usb/if_upgtvar.h: netbsd-7-nhusb
sys/dev/usb/if_upl.c: netbsd-7-nhusb
sys/dev/usb/if_ural.c: netbsd-7-nhusb
sys/dev/usb/if_uralreg.h: netbsd-7-nhusb
sys/dev/usb/if_uralvar.h: netbsd-7-nhusb
sys/dev/usb/if_url.c: netbsd-7-nhusb
sys/dev/usb/if_urlreg.h: netbsd-7-nhusb
sys/dev/usb/if_urndis.c: netbsd-7-nhusb
sys/dev/usb/if_urndisreg.h: netbsd-7-nhusb
sys/dev/usb/if_urtw.c: netbsd-7-nhusb
sys/dev/usb/if_urtwn.c: netbsd-7-nhusb
sys/dev/usb/if_urtwn_data.h: netbsd-7-nhusb
sys/dev/usb/if_urtwnreg.h: netbsd-7-nhusb
sys/dev/usb/if_urtwnvar.h: netbsd-7-nhusb
sys/dev/usb/if_urtwreg.h: netbsd-7-nhusb
sys/dev/usb/if_zyd.c: netbsd-7-nhusb
sys/dev/usb/if_zydreg.h: netbsd-7-nhusb
sys/dev/usb/irmce.c: netbsd-7-nhusb
sys/dev/usb/moscom.c: netbsd-7-nhusb
sys/dev/usb/motg.c: netbsd-7-nhusb
sys/dev/usb/motgvar.h: netbsd-7-nhusb
sys/dev/usb/ohci.c: netbsd-7-nhusb
sys/dev/usb/ohcireg.h: netbsd-7-nhusb
sys/dev/usb/ohcivar.h: netbsd-7-nhusb
sys/dev/usb/pseye.c: netbsd-7-nhusb
sys/dev/usb/slurm.c: netbsd-7-nhusb
sys/dev/usb/stuirda.c: netbsd-7-nhusb
sys/dev/usb/u3g.c: netbsd-7-nhusb
sys/dev/usb/uark.c: netbsd-7-nhusb
sys/dev/usb/uatp.c: netbsd-7-nhusb
sys/dev/usb/uaudio.c: netbsd-7-nhusb
sys/dev/usb/uberry.c: netbsd-7-nhusb
sys/dev/usb/ubsa.c: netbsd-7-nhusb
sys/dev/usb/ubsa_common.c: netbsd-7-nhusb
sys/dev/usb/ubsavar.h: netbsd-7-nhusb
sys/dev/usb/ubt.c: netbsd-7-nhusb
sys/dev/usb/uchcom.c: netbsd-7-nhusb
sys/dev/usb/ucom.c: netbsd-7-nhusb
sys/dev/usb/ucomvar.h: netbsd-7-nhusb
sys/dev/usb/ucycom.c: netbsd-7-nhusb
sys/dev/usb/udl.c: netbsd-7-nhusb
sys/dev/usb/udl.h: netbsd-7-nhusb
sys/dev/usb/udsbr.c: netbsd-7-nhusb
sys/dev/usb/udsir.c: netbsd-7-nhusb
sys/dev/usb/uep.c: netbsd-7-nhusb
sys/dev/usb/uftdi.c: netbsd-7-nhusb
sys/dev/usb/uftdireg.h: netbsd-7-nhusb
sys/dev/usb/ugen.c: netbsd-7-nhusb
sys/dev/usb/ugensa.c: netbsd-7-nhusb
sys/dev/usb/uhci.c: netbsd-7-nhusb
sys/dev/usb/uhcireg.h: netbsd-7-nhusb
sys/dev/usb/uhcivar.h: netbsd-7-nhusb
sys/dev/usb/uhid.c: netbsd-7-nhusb
sys/dev/usb/uhidev.c: netbsd-7-nhusb
sys/dev/usb/uhidev.h: netbsd-7-nhusb
sys/dev/usb/uhmodem.c: netbsd-7-nhusb
sys/dev/usb/uhso.c: netbsd-7-nhusb
sys/dev/usb/uhub.c: netbsd-7-nhusb
sys/dev/usb/uipad.c: netbsd-7-nhusb
sys/dev/usb/uipaq.c: netbsd-7-nhusb
sys/dev/usb/uirda.c: netbsd-7-nhusb
sys/dev/usb/uirdavar.h: netbsd-7-nhusb
sys/dev/usb/ukbd.c: netbsd-7-nhusb
sys/dev/usb/ukbdmap.c: netbsd-7-nhusb
sys/dev/usb/ukyopon.c: netbsd-7-nhusb
sys/dev/usb/ukyopon.h: netbsd-7-nhusb
sys/dev/usb/ulpt.c: netbsd-7-nhusb
sys/dev/usb/umass.c: netbsd-7-nhusb
sys/dev/usb/umass_isdata.c: netbsd-7-nhusb
sys/dev/usb/umass_isdata.h: netbsd-7-nhusb
sys/dev/usb/umass_quirks.c: netbsd-7-nhusb
sys/dev/usb/umass_quirks.h: netbsd-7-nhusb
sys/dev/usb/umass_scsipi.c: netbsd-7-nhusb
sys/dev/usb/umass_scsipi.h: netbsd-7-nhusb
sys/dev/usb/umassvar.h: netbsd-7-nhusb
sys/dev/usb/umcs.c: netbsd-7-nhusb
sys/dev/usb/umct.c: netbsd-7-nhusb
sys/dev/usb/umidi.c: netbsd-7-nhusb
sys/dev/usb/umidi_quirks.c: netbsd-7-nhusb
sys/dev/usb/umidi_quirks.h: netbsd-7-nhusb
sys/dev/usb/umodem.c: netbsd-7-nhusb
sys/dev/usb/umodem_common.c: netbsd-7-nhusb
sys/dev/usb/umodemvar.h: netbsd-7-nhusb
sys/dev/usb/ums.c: netbsd-7-nhusb
sys/dev/usb/uplcom.c: netbsd-7-nhusb
sys/dev/usb/urio.c: netbsd-7-nhusb
sys/dev/usb/urio.h: netbsd-7-nhusb
sys/dev/usb/usb.c: netbsd-7-nhusb
sys/dev/usb/usb.h: netbsd-7-nhusb
sys/dev/usb/usb_mem.c: netbsd-7-nhusb
sys/dev/usb/usb_mem.h: netbsd-7-nhusb
sys/dev/usb/usb_quirks.c: netbsd-7-nhusb
sys/dev/usb/usb_quirks.h: netbsd-7-nhusb
sys/dev/usb/usb_subr.c: netbsd-7-nhusb
sys/dev/usb/usbdevices.config: netbsd-7-nhusb
sys/dev/usb/usbdevs: netbsd-7-nhusb
sys/dev/usb/usbdevs.h: netbsd-7-nhusb
sys/dev/usb/usbdevs_data.h: netbsd-7-nhusb
sys/dev/usb/usbdi.c: netbsd-7-nhusb
sys/dev/usb/usbdi.h: netbsd-7-nhusb
sys/dev/usb/usbdi_util.c: netbsd-7-nhusb
sys/dev/usb/usbdi_util.h: netbsd-7-nhusb
sys/dev/usb/usbdivar.h: netbsd-7-nhusb
sys/dev/usb/usbhid.h: netbsd-7-nhusb
sys/dev/usb/usbhist.h: netbsd-7-nhusb
sys/dev/usb/usbroothub.c: netbsd-7-nhusb
sys/dev/usb/usbroothub.h: netbsd-7-nhusb
sys/dev/usb/usbroothub_subr.c: delete
sys/dev/usb/usbroothub_subr.h: delete
sys/dev/usb/uscanner.c: netbsd-7-nhusb
sys/dev/usb/uslsa.c: netbsd-7-nhusb
sys/dev/usb/usscanner.c: netbsd-7-nhusb
sys/dev/usb/ustir.c: netbsd-7-nhusb
sys/dev/usb/uthum.c: netbsd-7-nhusb
sys/dev/usb/utoppy.c: netbsd-7-nhusb
sys/dev/usb/uts.c: netbsd-7-nhusb
sys/dev/usb/uvideo.c: netbsd-7-nhusb
sys/dev/usb/uvisor.c: netbsd-7-nhusb
sys/dev/usb/uvscom.c: netbsd-7-nhusb
sys/dev/usb/uyap.c: netbsd-7-nhusb
sys/dev/usb/uyap_firmware.h: netbsd-7-nhusb
sys/dev/usb/uyurex.c: netbsd-7-nhusb
sys/dev/usb/x1input_rdesc.h: netbsd-7-nhusb
sys/dev/usb/xhci.c: netbsd-7-nhusb
sys/dev/usb/xhcireg.h: netbsd-7-nhusb
sys/dev/usb/xhcivar.h: netbsd-7-nhusb
sys/dev/usb/xinput_rdesc.h: netbsd-7-nhusb
sys/external/bsd/common/conf/files.linux: netbsd-7-nhusb
sys/external/bsd/common/include/linux/err.h: netbsd-7-nhusb
sys/external/bsd/common/include/linux/kernel.h: netbsd-7-nhusb
sys/external/bsd/common/include/linux/workqueue.h: netbsd-7-nhusb
sys/external/bsd/common/linux/linux_work.c: netbsd-7-nhusb
sys/external/bsd/drm2/dist/drm/radeon/atombios_encoders.c: netbsd-7-nhusb
sys/external/bsd/drm2/dist/drm/radeon/radeon_legacy_encoders.c: netbsd-7-nhusb
sys/external/bsd/drm2/drm/files.drmkms: netbsd-7-nhusb
sys/external/bsd/drm2/i915drm/files.i915drmkms: netbsd-7-nhusb
sys/external/bsd/drm2/include/linux/err.h: delete
sys/external/bsd/drm2/include/linux/workqueue.h: delete
sys/external/bsd/drm2/linux/files.drmkms_linux: netbsd-7-nhusb
sys/external/bsd/drm2/linux/linux_work.c: delete
sys/external/bsd/dwc2/dwc2.c: netbsd-7-nhusb
sys/external/bsd/dwc2/dwc2.h: netbsd-7-nhusb
sys/external/bsd/dwc2/dwc2var.h: netbsd-7-nhusb
sys/external/bsd/dwc2/dwctwo2netbsd: netbsd-7-nhusb
sys/external/bsd/dwc2/conf/files.dwc2: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_core.c: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_core.h: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_coreintr.c: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_hcd.c: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_hcd.h: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_hcdddma.c: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_hcdintr.c: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_hcdqueue.c: netbsd-7-nhusb
sys/external/bsd/dwc2/dist/dwc2_hw.h: netbsd-7-nhusb
sys/modules/drmkms_linux/Makefile: netbsd-7-nhusb
sys/modules/i915drmkms/Makefile: netbsd-7-nhusb
sys/rump/dev/lib/libugenhc/ugenhc.c: netbsd-7-nhusb
sys/rump/dev/lib/libusb/Makefile: netbsd-7-nhusb
sys/rump/dev/lib/libusb/USB.ioconf: netbsd-7-nhusb
sys/rump/dev/lib/libusb/usb_at_ugenhc.c: delete
sys/rump/dev/lib/libusb/opt/opt_usb.h: delete
sys/rump/dev/lib/libusb/opt/opt_usbverbose.h: delete
sys/sys/mbuf.h: netbsd-7-nhusb
usr.sbin/usbdevs/usbdevs.8: netbsd-7-nhusb
usr.sbin/usbdevs/usbdevs.c: netbsd-7-nhusb
Merge netbsd-7-nhusb:
- API / infrastructure changes to support memory management changes.
- Memory management improvements and bug fixes.
- HCDs should now be MP safe
- conversion to KERNHIST based debug
- FS/LS isoc support on ehci(4).
- conversion to kmem(9)
- Some USB 3 support - mostly from Takahiro HAYASHI (t-hash).
- interrupt transfers now get proper DMA operations
- general bug fixes
- kern/48308
- uhub status notification improvements
- umass(4) probe fix (applied to HEAD already)
- ohci(4) short transfer fix
- Change the SOFTINT level from NET to SERIAL for the USB softint handler.
This gives the callback a chance of running when another softint handler
at SOFTINT_NET has blocked holding a lock, e.g. softnet_lock and most of
the network stack.
- kern/49065 - ifconfig tun0 ... sequence locks up system / lockup:
softnet_lock held across usb xfr
- kern/50491 - unkillable wait in usbd_transfer while using usmsc0
on raspberry pi 2
- kern/51395 - USB Ethernet makes xhci hang
- Various improvements to slhci(4)
- Various improvements to dwc2(4)
 1.124.2.2  07-Mar-2016  martin branches: 1.124.2.2.2;
Additionally pull up r1.131 for ticket #1124 (requested by skrll)
 1.124.2.1  06-Mar-2016  martin Pull up following revision(s) (requested by skrll in ticket #1124):
sys/dev/usb/ugen.c: revision 1.127
sys/dev/usb/ugen.c: revision 1.128
sys/dev/usb/ugen.c: revision 1.129
sys/dev/usb/ugen.c: revision 1.130
s/0/NULL/
One more s/0/NULL/
Remove always true conditional
Only clear the endpoint information in ugen_set_interface only if setting
the new altno suceeds.
Avoids the null de-ref in PR/50597 and PR/50810
 1.124.2.2.2.3  31-Mar-2017  skrll Whitespace
 1.124.2.2.2.2  26-Jan-2017  skrll Sync with HEAD/nhusb
 1.124.2.2.2.1  06-Sep-2016  skrll First pass at netbsd-7 updated with USB code from HEAD
 1.126.2.16  27-Oct-2016  skrll Retire usb_detach_{wait,broadcast} and simply use condvar(9) instead
 1.126.2.15  09-Jul-2016  skrll Sync with HEAD
 1.126.2.14  19-Mar-2016  skrll Sync with HEAD
 1.126.2.13  28-Dec-2015  skrll Use IPL_SOFTUSB instead of IPL_USB appropriately. Transfer completions
are executed as a softint and so this is the priority level required.
 1.126.2.12  28-Dec-2015  skrll Strictly follow the sequence abort pipe, destroy xfers, and close pipe as
API now requires. Plug some memory leaks in some drivers while doing
this.

Also, remove up_refcnt as it was broken and helped leak more memory.
 1.126.2.11  06-Oct-2015  skrll Move from usbd_{alloc,free}_xfer and usbd_{alloc,free}_buffer to
usbd_{create,destroy}_xfer. The API change will allow future changes
to HCDs to simplify the transfer resource allocation and activation.

Several devices tested including ucom, umass, smsc, uvideo, and uaudio.
 1.126.2.10  23-Jun-2015  skrll KNF
 1.126.2.9  09-May-2015  skrll Use NULL not 0 for pointer comparison
 1.126.2.8  21-Mar-2015  skrll Add prefixes to attach_arg structure member names. No functional change.
 1.126.2.7  19-Mar-2015  skrll Do the same as OpenBSD and get rid of the *_handle typedefs and use
plain structures insteads
 1.126.2.6  06-Dec-2014  skrll KNF. Remove argument name from function declarations.

No functional change.
 1.126.2.5  05-Dec-2014  skrll KNF. Remove ( ) from return statements.
 1.126.2.4  03-Dec-2014  skrll Replace malloc(9) with kmem(9)
 1.126.2.3  02-Dec-2014  skrll Step #1 of memory allocation re-organisation.

Centralised the buffer allocation routine which now supports DMA
and non-DMA capable host controllers. Remove the
ubm_{alloc,free}m methods from usbd_bus_methods.

The buffer allocation is only allowed in thread context and,
therefore, negates the usefulness of the reserve dma code which
is removed in this change.

USBD_NO_COPY is also no longer required as usbd_transfer and
usbd_transfer_complete now track buffer usage and handle any
copying.
 1.126.2.2  01-Dec-2014  skrll Remove the lbl argument from usbd_{bulk,intr}_transfer.
 1.126.2.1  30-Nov-2014  skrll Use C99 types. u_int{8,16,32,64}_t to uint{8,16,32,64}_t.

No functional change.
 1.134.10.2  12-Nov-2018  martin Pull up following revision(s) (requested by manu in ticket #1090):

sys/dev/usb/ugen.c: revision 1.141

Enfore USB timeout on ugen(4) write operations
 1.134.10.1  31-Jan-2018  martin Pull up following revision(s) (requested by skrll in ticket #509):
sys/dev/usb/if_ural.c: revision 1.53
sys/dev/usb/if_run.c: revision 1.25
sys/dev/usb/ustir.c: revision 1.39
sys/dev/usb/irmce.c: revision 1.4
sys/dev/usb/if_urtwn.c: revision 1.56
sys/dev/usb/pseye.c: revision 1.24
sys/dev/usb/if_rum.c: revision 1.59
sys/dev/usb/if_upl.c: revision 1.61
sys/dev/usb/ucom.c: revision 1.120
sys/dev/usb/if_zyd.c: revision 1.45
sys/dev/usb/if_axen.c: revision 1.12
sys/dev/usb/umidi.c: revision 1.74
sys/dev/usb/if_udav.c: revision 1.52
sys/dev/usb/if_athn_usb.c: revision 1.25
sys/dev/usb/usscanner.c: revision 1.43
sys/dev/usb/ualea.c: revision 1.6 - 1.9
sys/dev/usb/if_upgt.c: revision 1.18
sys/dev/usb/if_atu.c: revision 1.56
sys/dev/usb/utoppy.c: revision 1.30
sys/dev/usb/ubt.c: revision 1.60
sys/dev/usb/if_urtw.c: revision 1.14
sys/dev/usb/uirda.c: revision 1.43
sys/dev/usb/umass.c: revision 1.163
sys/dev/usb/if_cdce.c: revision 1.45
sys/dev/usb/if_cue.c: revision 1.77
sys/dev/usb/if_kue.c: revision 1.91
sys/dev/usb/uvideo.c: revision 1.46
sys/dev/usb/uhso.c: revision 1.27
sys/dev/usb/if_smsc.c: revision 1.33
sys/dev/usb/ugen.c: revision 1.137
sys/dev/usb/if_axe.c: revision 1.84
sys/dev/usb/if_aue.c: revision 1.142
sys/dev/usb/uscanner.c: revision 1.82
sys/dev/usb/if_urndis.c: revision 1.17
sys/dev/usb/udsir.c: revision 1.6
sys/dev/usb/if_url.c: revision 1.57
sys/dev/usb/if_otus.c: revision 1.32
sys/dev/usb/ulpt.c: revision 1.99

PR kern/52931 Kernel panics with Atheros usb wireless interface
Audit the flags to usbd_create_xfer so that USBD_FORCE_SHORT_XFER is
supplied wherever such a transfer is setup. We can drop
USBD_SHORT_XFER_OK as it has not bearing on number of TDs

ualea: Tidy up a bit. Fulfil requests completely.
Don't subtract uninitialized pktsize in error path.
 1.139.4.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.139.4.1  10-Jun-2019  christos Sync with HEAD
 1.139.2.10  22-Jan-2019  pgoyette Convert the MODULE_{,VOID_}HOOK_CALL macros to do everything in-line
rather than defining an intermediate hook##call function. Almost
all of the hooks are called only once, and although we lose the
ability of doing things like

if (MODULE_HOOK_CALL(...) == 0) ...

we simplify things quite a bit. With this change, we no longer need
to have both declaration and definition macros, and the definition
no longer needs to have both prototype argument list and a "real"
argument list.

FWIW, the above if now needs to written as

int ret;

MODULE_HOOK_CALL(..., ret);
if (ret == 0) ...

with appropriate use of braces {}.
 1.139.2.9  18-Jan-2019  pgoyette Don't restrict hooks to having only int or void types. Pass the hook's
type to the various macros, as needed.

Allows us to reduce diffs to original in at least one or two places (we
no longer have to provide an additional parameter to the hook routine
for returning a non-int return value).
 1.139.2.8  14-Jan-2019  pgoyette Create a variant of the HOOK macros that handles hook routines of
type void, and use them where appropriate.
 1.139.2.7  13-Jan-2019  pgoyette Remove the HOOK2 versions of the MODULE_HOOK macros. There were
only a few uses, and using them led to some lack of clarity in the
code. Instead, we now use two separate hooks, with names that
make it clear(er) what we're doing.

This also positions us to start unraveling some of the rtsock_50
mess, which will need (at least) five hooks.
 1.139.2.6  26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.139.2.5  29-Sep-2018  pgoyette In MODULE_HOOK_CALL_DECL we don't need to provide the actual argument
list for calling the hook function, nor do we need to provide the
default value (for when the hook has not been set).
 1.139.2.4  18-Sep-2018  pgoyette The COMPAT_HOOK macros were renamed to MODULE_HOOK, adjust all callers
 1.139.2.3  18-Sep-2018  pgoyette Split the COMPAT_CALL_HOOK to separate the declaration from the
implementation. Some hooks are called from multiple source files,
and the old method resulted in duplicate implementations.

Implement MP-safe hooks for the usb_subr_30 code. Pass the helper
functions as arguments to the compat code so it does not have to
determine if the kernel contains usb code.
 1.139.2.2  06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.139.2.1  29-Mar-2018  pgoyette Split out the usb compat_30 code and add it to the module
 1.146.2.2  27-Aug-2020  martin Pull up following revision(s) (requested by riastradh in ticket #1065):

sys/dev/usb/usbdevices.config: revision 1.41 (patch)
sys/dev/usb/ugen.c: revision 1.152
sys/dev/usb/ugen.c: revision 1.153
sys/dev/usb/ugen.c: revision 1.154
sys/dev/usb/ugen.c: revision 1.155 (patch)
sys/dev/usb/ugen.c: revision 1.156
sys/dev/usb/ugen.c: revision 1.157

Remove UGEN_ASLP microoptimization.
cv_signal already has this microoptimization.
While here, make the lock cover the relevant things we're issuing
cv_signal about -- progress toward real MP-safety.

Hold the lock over access to the data structures it covers.
Still not MPSAFE, but progress.

Convert DIAGNOSTIC prints to KASSERTs.

Share unit numbering for ugen and ugenif.
This way putting ugenif in kernel config actually works to wire it to
the /dev/ugenN.MM device nodes in userland.

Not a fully fleshed out solution to the ugen problem -- there's no
way for a userland driver to kick out a kernel driver and take over,
but this will let us, e.g., use uhidev(4) for Yubikey OTP/U2F/FIDO2
but ugen(4), with pcscd(8), for Yubikey CCID.

Fix various MP-safety issues while here (still not MPSAFE, but more
progress).

Expose Yubikey CCID interface to userland via ugenif.

Fix sloppy mistakes in previous.
1. Give the offset of the rbnode, not some other random members to
overwrite with garbage.
2. Don't try to unlock a mutex at NULL.
3. Make sure all paths out after ugenif_acquire go via
ugenif_release.

Fix ugen detach after partial attach.

While here, register null pmf handler even for partially attached
devices so they don't needlessly interfere with suspend.
 1.146.2.1  11-Dec-2019  martin Pull up following revision(s) (requested by bouyer in ticket #544):

sys/dev/usb/ugen.c: revision 1.148

reading usbdi.c it looks like usbd_get_config_descriptor() can actually
return NULL, so check for this.

I got NULL pointer dereference here with a device showing:
[ 303.732632] ugen0: autoconfiguration error: setting configuration index 0 failed
 1.157.2.1  03-Jan-2021  thorpej Sync w/ HEAD.
 1.171.2.2  16-Apr-2024  martin Pull up following revision(s) (requested by thorpej in ticket #651):

sys/dev/usb/ugen.c: revision 1.177

ugen and ugenif share the same /dev/ugenN.xx namespace in such a way
that the device unit number does not necessarily match the /dev/ugenN.xx
unit number (N). If you ONLY have ugen devices, it happens to work out
and devpubd scripts can be extremely naive. If you ONLY have ugenif
devices, it also happens to work out, but your devpubd scripts have to
slightly more informed. If you have a mix of ugen AND ugenif devices,
though, you're pretty much out of luck.

So, this change adds a "ugen-unit" device property which devpubd scripts
can query to determine which /dev/ugenN.xx nodes a given ugen or ugenif
device is using.
 1.171.2.1  16-Apr-2024  martin Pull up following revision(s) (requested by thorpej in ticket #649):

sys/dev/usb/uftdi.c: revision 1.77
share/man/man4/ugen.4: revision 1.39
sys/dev/usb/ugen.c: revision 1.176
sys/dev/usb/usbdevices.config: revision 1.43

Define a "flags 1" config directive for ugenif, which is similar to ugen's,
but rather forces the ugenif to match at the *lowest* match priority rather
than the highest. This allows ugenif to claim only otherwise unclaimed
interfaces.

Add a "match quirk" mechanism to the uftdi driver that allows it to
selectively reject individual interfaces based on the combination of
- Vendor ID
- Product ID
- Interface number
- Vendor string
- Product string

This is necessary[*] to allow some devices that would otherwise match
uftdi (and thus instantiate a ucom) to be matched by ugenif instead,
which is required to make the device available to libusb1.

[*] ...due to a deficiency in the USB stack that does not provide a
mechanism for a user-space driver to claim a device from a kernel driver
and then return it back at a later time.

Use this new match quirk mechanism to reject "interface 1" of the
FTDI 2232C-based Tigard debug board; On this board, "interface 0"
is brought out to regular TTL-level UART pins, but "interface 1" is
brought out to SWD and JTAG headers, and is really only useful when
used with something like openocd. Because the FTDI 2232C on this board
just uses the standard FTDI vendor and product IDs, it can only be
distinguished by the strings, which cannot be specified usbdevices.config,
thus necessitating the match quirk entry (that works in combination
with the ugenif entry added in usbdevices.config).

RSS XML Feed