Hi, All
As currently defined, UsbIo protocol performs USB transfers on an interface as well as it returns various descriptors data for the selected device configuration.
This functionality is sufficient for common device drivers - mass storage, keyboard/mouse. However, more complex devices implement several types of descriptors that are not supported by UsbIo. These are Class Specific interface and endpoint
descriptors, as well as interface association descriptors.
Also, when an interface descriptor contains multiple alternate settings, currently it is impossible to retrieve the data of non-default setting without selecting this setting. And this selection involves USB transaction with SET_INTERFACE
command. Issuing this command might change the device state and may not be desirable.
The list of such "complex" devices includes USB cameras, audio devices, communication devices, modems, network controllers. Writing UEFI device driver for these using existing UsbIo is challenging.
A new protocol UsbIoExt extends the functionality of UsbDxeBus and aims to overcome the above mentioned problems.
PR: https://github.com/tianocore/edk2/pull/6368
It implements a protocol that 1) retrieves class specific descriptors 2) allows to get data from different alt setting without switching to this setting
Interface Association descriptor support will be a different PR that makes use of this UsbIoExt protocol.
Please review and respond.
Oleg Ilyasov
BIOS Core Group
American Megatrends International LLC.
+1(770)246-8798