These descriptors are covered in Section 9.6.4 of the USB 3.0 spec, but there is a better description in the Intel IAD whitepaper (www.usb.org/developers/whitepapers/iadclasscode_r10.pdf).
The short version is that IAD is an extra descriptor type that appears before a group (two or more) interface descriptors, that explains which interface descriptors make up a virtual device. So it could look like: Config Desc IAD#0 Iface#0 Iface#1 Iface#2 IAD#1 Iface#3 Iface#4 [Check the diagram in the Intel IAD whitepaper if that makes no sense] The implementation basically introduces the concept of a grouped of interfaces (with an IAD header), and support for sending it to the device. The intended use for this is USB Video class devices, which have a Control interface and Streaming interface that are a single logical device. Changes v2 (from v1): - Added Signed-off-by, per CODING_STYLE - Fixed bug in altsetting handling (.nif needed instead of .bNumInterfaces) - Fixed some whitespace and line-length problems indicated by checkstyle.pl Diffstat: usb-desc.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- usb-desc.h | 20 ++++++++++++++++++++ usb-hid.c | 3 +++ usb-hub.c | 1 + usb-msd.c | 2 ++ usb-serial.c | 1 + usb-wacom.c | 1 + usb.h | 2 ++ 8 files changed, 79 insertions(+), 3 deletions(-)