diff options
author | 2017-05-23 17:55:06 +0000 | |
---|---|---|
committer | 2017-05-23 17:55:06 +0000 | |
commit | 0f6296e038b5c299654d596026e7bee5aa723e56 (patch) | |
tree | a51b545d58c8128abfd6caa9ca43d32343011f62 /qemu/hw/usb/desc.h | |
parent | c4d68bc45aa6aa8b7fe39bce206cb17c2cb2d365 (diff) | |
parent | bb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (diff) |
Merge "Adding qemu as a submodule of KVMFORNFV"
Diffstat (limited to 'qemu/hw/usb/desc.h')
-rw-r--r-- | qemu/hw/usb/desc.h | 244 |
1 files changed, 0 insertions, 244 deletions
diff --git a/qemu/hw/usb/desc.h b/qemu/hw/usb/desc.h deleted file mode 100644 index 4d81c68e0..000000000 --- a/qemu/hw/usb/desc.h +++ /dev/null @@ -1,244 +0,0 @@ -#ifndef QEMU_HW_USB_DESC_H -#define QEMU_HW_USB_DESC_H - -#include <wchar.h> - -/* binary representation */ -typedef struct USBDescriptor { - uint8_t bLength; - uint8_t bDescriptorType; - union { - struct { - uint8_t bcdUSB_lo; - uint8_t bcdUSB_hi; - uint8_t bDeviceClass; - uint8_t bDeviceSubClass; - uint8_t bDeviceProtocol; - uint8_t bMaxPacketSize0; - uint8_t idVendor_lo; - uint8_t idVendor_hi; - uint8_t idProduct_lo; - uint8_t idProduct_hi; - uint8_t bcdDevice_lo; - uint8_t bcdDevice_hi; - uint8_t iManufacturer; - uint8_t iProduct; - uint8_t iSerialNumber; - uint8_t bNumConfigurations; - } device; - struct { - uint8_t bcdUSB_lo; - uint8_t bcdUSB_hi; - uint8_t bDeviceClass; - uint8_t bDeviceSubClass; - uint8_t bDeviceProtocol; - uint8_t bMaxPacketSize0; - uint8_t bNumConfigurations; - uint8_t bReserved; - } 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; - struct { - uint8_t bInterfaceNumber; - uint8_t bAlternateSetting; - uint8_t bNumEndpoints; - uint8_t bInterfaceClass; - uint8_t bInterfaceSubClass; - uint8_t bInterfaceProtocol; - uint8_t iInterface; - } interface; - struct { - uint8_t bEndpointAddress; - uint8_t bmAttributes; - uint8_t wMaxPacketSize_lo; - uint8_t wMaxPacketSize_hi; - uint8_t bInterval; - uint8_t bRefresh; /* only audio ep */ - uint8_t bSynchAddress; /* only audio ep */ - } endpoint; - struct { - uint8_t bMaxBurst; - uint8_t bmAttributes; - uint8_t wBytesPerInterval_lo; - uint8_t wBytesPerInterval_hi; - } super_endpoint; - struct { - uint8_t wTotalLength_lo; - uint8_t wTotalLength_hi; - uint8_t bNumDeviceCaps; - } bos; - struct { - uint8_t bDevCapabilityType; - union { - struct { - uint8_t bmAttributes_1; - uint8_t bmAttributes_2; - uint8_t bmAttributes_3; - uint8_t bmAttributes_4; - } usb2_ext; - struct { - uint8_t bmAttributes; - uint8_t wSpeedsSupported_lo; - uint8_t wSpeedsSupported_hi; - uint8_t bFunctionalitySupport; - uint8_t bU1DevExitLat; - uint8_t wU2DevExitLat_lo; - uint8_t wU2DevExitLat_hi; - } super; - } u; - } cap; - } u; -} QEMU_PACKED USBDescriptor; - -struct USBDescID { - uint16_t idVendor; - uint16_t idProduct; - uint16_t bcdDevice; - uint8_t iManufacturer; - uint8_t iProduct; - uint8_t iSerialNumber; -}; - -struct USBDescDevice { - uint16_t bcdUSB; - uint8_t bDeviceClass; - uint8_t bDeviceSubClass; - uint8_t bDeviceProtocol; - uint8_t bMaxPacketSize0; - uint8_t bNumConfigurations; - - const USBDescConfig *confs; -}; - -struct USBDescConfig { - uint8_t bNumInterfaces; - uint8_t bConfigurationValue; - uint8_t iConfiguration; - uint8_t bmAttributes; - uint8_t bMaxPower; - - /* grouped interfaces */ - uint8_t nif_groups; - const USBDescIfaceAssoc *if_groups; - - /* "normal" interfaces */ - uint8_t nif; - const USBDescIface *ifs; -}; - -/* conceptually an Interface Association Descriptor, and releated interfaces */ -struct USBDescIfaceAssoc { - uint8_t bFirstInterface; - uint8_t bInterfaceCount; - uint8_t bFunctionClass; - uint8_t bFunctionSubClass; - uint8_t bFunctionProtocol; - uint8_t iFunction; - - uint8_t nif; - const USBDescIface *ifs; -}; - -struct USBDescIface { - uint8_t bInterfaceNumber; - uint8_t bAlternateSetting; - uint8_t bNumEndpoints; - uint8_t bInterfaceClass; - uint8_t bInterfaceSubClass; - uint8_t bInterfaceProtocol; - uint8_t iInterface; - - uint8_t ndesc; - USBDescOther *descs; - USBDescEndpoint *eps; -}; - -struct USBDescEndpoint { - uint8_t bEndpointAddress; - uint8_t bmAttributes; - uint16_t wMaxPacketSize; - uint8_t bInterval; - uint8_t bRefresh; - uint8_t bSynchAddress; - - uint8_t is_audio; /* has bRefresh + bSynchAddress */ - uint8_t *extra; - - /* superspeed endpoint companion */ - uint8_t bMaxBurst; - uint8_t bmAttributes_super; - uint16_t wBytesPerInterval; -}; - -struct USBDescOther { - uint8_t length; - const uint8_t *data; -}; - -struct USBDescMSOS { - const char *CompatibleID; - const wchar_t *Label; - bool SelectiveSuspendEnabled; -}; - -typedef const char *USBDescStrings[256]; - -struct USBDesc { - USBDescID id; - const USBDescDevice *full; - const USBDescDevice *high; - const USBDescDevice *super; - const char* const *str; - const USBDescMSOS *msos; -}; - -#define USB_DESC_FLAG_SUPER (1 << 1) - -/* little helpers */ -static inline uint8_t usb_lo(uint16_t val) -{ - return val & 0xff; -} - -static inline uint8_t usb_hi(uint16_t val) -{ - return (val >> 8) & 0xff; -} - -/* generate usb packages from structs */ -int usb_desc_device(const USBDescID *id, const USBDescDevice *dev, - bool msos, uint8_t *dest, size_t len); -int usb_desc_device_qualifier(const USBDescDevice *dev, - uint8_t *dest, size_t len); -int usb_desc_config(const USBDescConfig *conf, int flags, - uint8_t *dest, size_t len); -int usb_desc_iface_group(const USBDescIfaceAssoc *iad, int flags, - uint8_t *dest, size_t len); -int usb_desc_iface(const USBDescIface *iface, int flags, - uint8_t *dest, size_t len); -int usb_desc_endpoint(const USBDescEndpoint *ep, int flags, - uint8_t *dest, size_t len); -int usb_desc_other(const USBDescOther *desc, uint8_t *dest, size_t len); -int usb_desc_msos(const USBDesc *desc, USBPacket *p, - int index, uint8_t *dest, size_t len); - -/* control message emulation helpers */ -void usb_desc_init(USBDevice *dev); -void usb_desc_attach(USBDevice *dev); -void usb_desc_set_string(USBDevice *dev, uint8_t index, const char *str); -void usb_desc_create_serial(USBDevice *dev); -const char *usb_desc_get_string(USBDevice *dev, uint8_t index); -int usb_desc_string(USBDevice *dev, int index, uint8_t *dest, size_t len); -int usb_desc_get_descriptor(USBDevice *dev, USBPacket *p, - int value, uint8_t *dest, size_t len); -int usb_desc_handle_control(USBDevice *dev, USBPacket *p, - int request, int value, int index, int length, uint8_t *data); - -#endif /* QEMU_HW_USB_DESC_H */ |