]>
git.proxmox.com Git - qemu.git/blob - hw/usb-desc.h
1 #ifndef QEMU_HW_USB_DESC_H
2 #define QEMU_HW_USB_DESC_H
10 uint8_t iManufacturer
;
12 uint8_t iSerialNumber
;
15 struct USBDescDevice
{
18 uint8_t bDeviceSubClass
;
19 uint8_t bDeviceProtocol
;
20 uint8_t bMaxPacketSize0
;
21 uint8_t bNumConfigurations
;
23 const USBDescConfig
*confs
;
26 struct USBDescConfig
{
27 uint8_t bNumInterfaces
;
28 uint8_t bConfigurationValue
;
29 uint8_t iConfiguration
;
34 const USBDescIface
*ifs
;
38 uint8_t bInterfaceNumber
;
39 uint8_t bAlternateSetting
;
40 uint8_t bNumEndpoints
;
41 uint8_t bInterfaceClass
;
42 uint8_t bInterfaceSubClass
;
43 uint8_t bInterfaceProtocol
;
51 struct USBDescEndpoint
{
52 uint8_t bEndpointAddress
;
54 uint16_t wMaxPacketSize
;
63 typedef const char *USBDescStrings
[256];
67 const USBDescDevice
*full
;
68 const USBDescDevice
*high
;
69 const char* const *str
;
72 /* generate usb packages from structs */
73 int usb_desc_device(const USBDescID
*id
, const USBDescDevice
*dev
,
74 uint8_t *dest
, size_t len
);
75 int usb_desc_config(const USBDescConfig
*conf
, uint8_t *dest
, size_t len
);
76 int usb_desc_iface(const USBDescIface
*iface
, uint8_t *dest
, size_t len
);
77 int usb_desc_endpoint(const USBDescEndpoint
*ep
, uint8_t *dest
, size_t len
);
78 int usb_desc_other(const USBDescOther
*desc
, uint8_t *dest
, size_t len
);
79 int usb_desc_string(const char* const *str
, int index
, uint8_t *dest
, size_t len
);
81 /* control message emulation helpers */
82 int usb_desc_get_descriptor(USBDevice
*dev
, int value
, uint8_t *dest
, size_t len
);
83 int usb_desc_handle_control(USBDevice
*dev
, int request
, int value
,
84 int index
, int length
, uint8_t *data
);
86 #endif /* QEMU_HW_USB_DESC_H */