mirror of https://github.com/xemu-project/xemu.git
usb: use USBDescriptor for config descriptors.
Add config descriptor substruct to USBDescriptor, use it in the descriptor generator code. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
3cfeee6177
commit
0a263db17a
|
@ -78,22 +78,24 @@ int usb_desc_config(const USBDescConfig *conf, uint8_t *dest, size_t len)
|
||||||
{
|
{
|
||||||
uint8_t bLength = 0x09;
|
uint8_t bLength = 0x09;
|
||||||
uint16_t wTotalLength = 0;
|
uint16_t wTotalLength = 0;
|
||||||
|
USBDescriptor *d = (void *)dest;
|
||||||
int i, rc;
|
int i, rc;
|
||||||
|
|
||||||
if (len < bLength) {
|
if (len < bLength) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dest[0x00] = bLength;
|
d->bLength = bLength;
|
||||||
dest[0x01] = USB_DT_CONFIG;
|
d->bDescriptorType = USB_DT_CONFIG;
|
||||||
dest[0x04] = conf->bNumInterfaces;
|
|
||||||
dest[0x05] = conf->bConfigurationValue;
|
d->u.config.bNumInterfaces = conf->bNumInterfaces;
|
||||||
dest[0x06] = conf->iConfiguration;
|
d->u.config.bConfigurationValue = conf->bConfigurationValue;
|
||||||
dest[0x07] = conf->bmAttributes;
|
d->u.config.iConfiguration = conf->iConfiguration;
|
||||||
dest[0x08] = conf->bMaxPower;
|
d->u.config.bmAttributes = conf->bmAttributes;
|
||||||
|
d->u.config.bMaxPower = conf->bMaxPower;
|
||||||
wTotalLength += bLength;
|
wTotalLength += bLength;
|
||||||
|
|
||||||
/* handle grouped interfaces if any*/
|
/* handle grouped interfaces if any */
|
||||||
for (i = 0; i < conf->nif_groups; i++) {
|
for (i = 0; i < conf->nif_groups; i++) {
|
||||||
rc = usb_desc_iface_group(&(conf->if_groups[i]),
|
rc = usb_desc_iface_group(&(conf->if_groups[i]),
|
||||||
dest + wTotalLength,
|
dest + wTotalLength,
|
||||||
|
@ -113,8 +115,8 @@ int usb_desc_config(const USBDescConfig *conf, uint8_t *dest, size_t len)
|
||||||
wTotalLength += rc;
|
wTotalLength += rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
dest[0x02] = usb_lo(wTotalLength);
|
d->u.config.wTotalLength_lo = usb_lo(wTotalLength);
|
||||||
dest[0x03] = usb_hi(wTotalLength);
|
d->u.config.wTotalLength_hi = usb_hi(wTotalLength);
|
||||||
return wTotalLength;
|
return wTotalLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,15 @@ typedef struct USBDescriptor {
|
||||||
uint8_t bNumConfigurations;
|
uint8_t bNumConfigurations;
|
||||||
uint8_t bReserved;
|
uint8_t bReserved;
|
||||||
} device_qualifier;
|
} device_qualifier;
|
||||||
|
struct {
|
||||||
|
uint8_t wTotalLength_lo;
|
||||||
|
uint8_t wTotalLength_hi;
|
||||||
|
uint8_t bNumInterfaces;
|
||||||
|
uint8_t bConfigurationValue;
|
||||||
|
uint8_t iConfiguration;
|
||||||
|
uint8_t bmAttributes;
|
||||||
|
uint8_t bMaxPower;
|
||||||
|
} config;
|
||||||
} u;
|
} u;
|
||||||
} QEMU_PACKED USBDescriptor;
|
} QEMU_PACKED USBDescriptor;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue