usb: bugfixes.
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEoDKM/7k6F6eZAf59TLbY7tPocTgFAmEvI20ACgkQTLbY7tPo cTgn0w/8D6q00AJLux/xU65314uzibch7KpYFLaIUNnFl/Njuw+44RW2kUkmUVyC fzvsTLi3bmHgqQkYmKz3zAwoSQgKIMwepMxxulfZzp5ieSwETdTPWE9rOkelmeXT iL2B4zjHAuFKd3zQM/DBI2LrVDMfRMcJzTsgswE8eNPdHcFviHB1roqOivS4ET6T rBqlyBUJA7nmHYhx3L/PWlQeXCB/Zozn5lfGvp+adPYm1+wwSreseolEmuhHKyPm oDzV7TS7WWI8Nxr5w1wK9kHOz6ouKDulb4lw+YYQPaGQfQrNImxg5IXYFGCwtcAz zoKmFmzI84+2OI5Pl4iUkaWb2BkuB6NrZ25rhqG53sTxqPF22focwmTxGzxxyUb0 V1+7mOhvcz6Hwtqd17VTzkWTY3K+2Qr8QPoVQ1MQO0Cw2S+Rdqa4Eizn2KvH3tVB Uui97V16OMG4UqzwJusIpvirB/2PND0c0HH0Yh09+Dh3TaR7pU35DcraPjo1o0dh pQ9EB8IFUej6cdid1psx2sGh3q6cXPDO4rMEdibSLzJVFnSqwsYXPXNauZ9RmEWf CvkrkspKVcgIcEKDnT4MgzIhpW/hEybXx9gKho7ltZlPoEVQQvukBy1DAj8ZD03i lTJ6ryS75l8/PJZs9G4qdNtdd1Onf/PhMoxVIyrIoJxW9DHnlSA= =Hfou -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/usb-20210901-pull-request' into staging usb: bugfixes. # gpg: Signature made Wed 01 Sep 2021 07:53:33 BST # gpg: using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/usb-20210901-pull-request: hw/usb: Fix typo in comments and print uas: add stream number sanity checks. Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
4c41a1c595
@ -5,12 +5,12 @@
|
|||||||
/*
|
/*
|
||||||
* Microsoft OS Descriptors
|
* Microsoft OS Descriptors
|
||||||
*
|
*
|
||||||
* Windows tries to fetch some special descriptors with informations
|
* Windows tries to fetch some special descriptors with information
|
||||||
* specifically for windows. Presence is indicated using a special
|
* specifically for windows. Presence is indicated using a special
|
||||||
* string @ index 0xee. There are two kinds of descriptors:
|
* string @ index 0xee. There are two kinds of descriptors:
|
||||||
*
|
*
|
||||||
* compatid descriptor
|
* compatid descriptor
|
||||||
* Used to bind drivers, if usb class isn't specific enougth.
|
* Used to bind drivers, if usb class isn't specific enough.
|
||||||
* Used for PTP/MTP for example (both share the same usb class).
|
* Used for PTP/MTP for example (both share the same usb class).
|
||||||
*
|
*
|
||||||
* properties descriptor
|
* properties descriptor
|
||||||
@ -23,7 +23,7 @@
|
|||||||
* HLM\SYSTEM\CurrentControlSet\Control\usbflags
|
* HLM\SYSTEM\CurrentControlSet\Control\usbflags
|
||||||
* HLM\SYSTEM\CurrentControlSet\Enum\USB
|
* HLM\SYSTEM\CurrentControlSet\Enum\USB
|
||||||
* Windows will complain it can't delete entries on the second one.
|
* Windows will complain it can't delete entries on the second one.
|
||||||
* It has deleted everything it had permissions too, which is enouth
|
* It has deleted everything it had permissions too, which is enough
|
||||||
* as this includes "Device Parameters".
|
* as this includes "Device Parameters".
|
||||||
*
|
*
|
||||||
* http://msdn.microsoft.com/en-us/library/windows/hardware/ff537430.aspx
|
* http://msdn.microsoft.com/en-us/library/windows/hardware/ff537430.aspx
|
||||||
@ -192,8 +192,8 @@ static int usb_desc_msos_prop(const USBDesc *desc, uint8_t *dest)
|
|||||||
if (desc->msos->SelectiveSuspendEnabled) {
|
if (desc->msos->SelectiveSuspendEnabled) {
|
||||||
/*
|
/*
|
||||||
* Signaling remote wakeup capability in the standard usb
|
* Signaling remote wakeup capability in the standard usb
|
||||||
* descriptors isn't enouth to make windows actually use it.
|
* descriptors isn't enough to make windows actually use it.
|
||||||
* This is the "Yes, we really mean it" registy entry to flip
|
* This is the "Yes, we really mean it" registry entry to flip
|
||||||
* the switch in the windows drivers.
|
* the switch in the windows drivers.
|
||||||
*/
|
*/
|
||||||
length += usb_desc_msos_prop_dword(dest+length,
|
length += usb_desc_msos_prop_dword(dest+length,
|
||||||
|
@ -133,7 +133,7 @@ struct USBDescConfig {
|
|||||||
const USBDescIface *ifs;
|
const USBDescIface *ifs;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* conceptually an Interface Association Descriptor, and releated interfaces */
|
/* conceptually an Interface Association Descriptor, and related interfaces */
|
||||||
struct USBDescIfaceAssoc {
|
struct USBDescIfaceAssoc {
|
||||||
uint8_t bFirstInterface;
|
uint8_t bFirstInterface;
|
||||||
uint8_t bInterfaceCount;
|
uint8_t bInterfaceCount;
|
||||||
|
@ -168,7 +168,7 @@ static const USBDescIface desc_iface[] = {
|
|||||||
STRING_FEATURE_UNIT, /* u8 iFeature */
|
STRING_FEATURE_UNIT, /* u8 iFeature */
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
/* Headphone Ouptut Terminal ID3 Descriptor */
|
/* Headphone Output Terminal ID3 Descriptor */
|
||||||
.data = (uint8_t[]) {
|
.data = (uint8_t[]) {
|
||||||
0x09, /* u8 bLength */
|
0x09, /* u8 bLength */
|
||||||
USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
|
USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
|
||||||
@ -332,7 +332,7 @@ static const USBDescIface desc_iface_multi[] = {
|
|||||||
STRING_FEATURE_UNIT, /* u8 iFeature */
|
STRING_FEATURE_UNIT, /* u8 iFeature */
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
/* Headphone Ouptut Terminal ID3 Descriptor */
|
/* Headphone Output Terminal ID3 Descriptor */
|
||||||
.data = (uint8_t[]) {
|
.data = (uint8_t[]) {
|
||||||
0x09, /* u8 bLength */
|
0x09, /* u8 bLength */
|
||||||
USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
|
USB_DT_CS_INTERFACE, /* u8 bDescriptorType */
|
||||||
|
@ -840,6 +840,9 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UAS_PIPE_ID_STATUS:
|
case UAS_PIPE_ID_STATUS:
|
||||||
|
if (p->stream > UAS_MAX_STREAMS) {
|
||||||
|
goto err_stream;
|
||||||
|
}
|
||||||
if (p->stream) {
|
if (p->stream) {
|
||||||
QTAILQ_FOREACH(st, &uas->results, next) {
|
QTAILQ_FOREACH(st, &uas->results, next) {
|
||||||
if (st->stream == p->stream) {
|
if (st->stream == p->stream) {
|
||||||
@ -867,6 +870,9 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p)
|
|||||||
break;
|
break;
|
||||||
case UAS_PIPE_ID_DATA_IN:
|
case UAS_PIPE_ID_DATA_IN:
|
||||||
case UAS_PIPE_ID_DATA_OUT:
|
case UAS_PIPE_ID_DATA_OUT:
|
||||||
|
if (p->stream > UAS_MAX_STREAMS) {
|
||||||
|
goto err_stream;
|
||||||
|
}
|
||||||
if (p->stream) {
|
if (p->stream) {
|
||||||
req = usb_uas_find_request(uas, p->stream);
|
req = usb_uas_find_request(uas, p->stream);
|
||||||
} else {
|
} else {
|
||||||
@ -902,6 +908,11 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p)
|
|||||||
p->status = USB_RET_STALL;
|
p->status = USB_RET_STALL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err_stream:
|
||||||
|
error_report("%s: invalid stream %d", __func__, p->stream);
|
||||||
|
p->status = USB_RET_STALL;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usb_uas_unrealize(USBDevice *dev)
|
static void usb_uas_unrealize(USBDevice *dev)
|
||||||
|
@ -1706,7 +1706,7 @@ static void usb_host_free_streams(USBDevice *udev, USBEndpoint **eps,
|
|||||||
/*
|
/*
|
||||||
* This is *NOT* about restoring state. We have absolutely no idea
|
* This is *NOT* about restoring state. We have absolutely no idea
|
||||||
* what state the host device is in at the moment and whenever it is
|
* what state the host device is in at the moment and whenever it is
|
||||||
* still present in the first place. Attemping to contine where we
|
* still present in the first place. Attempting to continue where we
|
||||||
* left off is impossible.
|
* left off is impossible.
|
||||||
*
|
*
|
||||||
* What we are going to do here is emulate a surprise removal of
|
* What we are going to do here is emulate a surprise removal of
|
||||||
|
@ -625,9 +625,9 @@
|
|||||||
* Definitions for Icom Inc. devices
|
* Definitions for Icom Inc. devices
|
||||||
*/
|
*/
|
||||||
#define ICOM_VID 0x0C26 /* Icom vendor ID */
|
#define ICOM_VID 0x0C26 /* Icom vendor ID */
|
||||||
/* Note: ID-1 is a communications tranceiver for HAM-radio operators */
|
/* Note: ID-1 is a communications transceiver for HAM-radio operators */
|
||||||
#define ICOM_ID_1_PID 0x0004 /* ID-1 USB to RS-232 */
|
#define ICOM_ID_1_PID 0x0004 /* ID-1 USB to RS-232 */
|
||||||
/* Note: OPC is an Optional cable to connect an Icom Tranceiver */
|
/* Note: OPC is an Optional cable to connect an Icom Transceiver */
|
||||||
#define ICOM_OPC_U_UC_PID 0x0018 /* OPC-478UC, OPC-1122U cloning cable */
|
#define ICOM_OPC_U_UC_PID 0x0018 /* OPC-478UC, OPC-1122U cloning cable */
|
||||||
/* Note: ID-RP* devices are Icom Repeater Devices for HAM-radio */
|
/* Note: ID-RP* devices are Icom Repeater Devices for HAM-radio */
|
||||||
#define ICOM_ID_RP2C1_PID 0x0009 /* ID-RP2C Asset 1 to RS-232 */
|
#define ICOM_ID_RP2C1_PID 0x0009 /* ID-RP2C Asset 1 to RS-232 */
|
||||||
|
@ -307,7 +307,7 @@ static void u2f_emulated_realize(U2FKeyState *base, Error **errp)
|
|||||||
rc = u2f_emulated_setup_vdev_manualy(key);
|
rc = u2f_emulated_setup_vdev_manualy(key);
|
||||||
} else {
|
} else {
|
||||||
error_setg(errp, "%s: cert, priv, entropy and counter "
|
error_setg(errp, "%s: cert, priv, entropy and counter "
|
||||||
"parameters must be provided to manualy configure "
|
"parameters must be provided to manually configure "
|
||||||
"the emulated device", TYPE_U2F_EMULATED);
|
"the emulated device", TYPE_U2F_EMULATED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user