diff options
author | RajithaY <rajithax.yerrumsetty@intel.com> | 2017-04-25 03:31:15 -0700 |
---|---|---|
committer | Rajitha Yerrumchetty <rajithax.yerrumsetty@intel.com> | 2017-05-22 06:48:08 +0000 |
commit | bb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch) | |
tree | ca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/hw/usb/desc-msos.c | |
parent | a14b48d18a9ed03ec191cf16b162206998a895ce (diff) |
Adding qemu as a submodule of KVMFORNFV
This Patch includes the changes to add qemu as a submodule to
kvmfornfv repo and make use of the updated latest qemu for the
execution of all testcase
Change-Id: I1280af507a857675c7f81d30c95255635667bdd7
Signed-off-by:RajithaY<rajithax.yerrumsetty@intel.com>
Diffstat (limited to 'qemu/hw/usb/desc-msos.c')
-rw-r--r-- | qemu/hw/usb/desc-msos.c | 239 |
1 files changed, 0 insertions, 239 deletions
diff --git a/qemu/hw/usb/desc-msos.c b/qemu/hw/usb/desc-msos.c deleted file mode 100644 index 365291981..000000000 --- a/qemu/hw/usb/desc-msos.c +++ /dev/null @@ -1,239 +0,0 @@ -#include "qemu/osdep.h" -#include "hw/usb.h" -#include "hw/usb/desc.h" - -/* - * Microsoft OS Descriptors - * - * Windows tries to fetch some special descriptors with informations - * specifically for windows. Presence is indicated using a special - * string @ index 0xee. There are two kinds of descriptors: - * - * compatid descriptor - * Used to bind drivers, if usb class isn't specific enougth. - * Used for PTP/MTP for example (both share the same usb class). - * - * properties descriptor - * Does carry registry entries. They show up in - * HLM\SYSTEM\CurrentControlSet\Enum\USB\<devid>\<serial>\Device Parameters - * - * Note that Windows caches the stuff it got in the registry, so when - * playing with this you have to delete registry subtrees to make - * windows query the device again: - * HLM\SYSTEM\CurrentControlSet\Control\usbflags - * HLM\SYSTEM\CurrentControlSet\Enum\USB - * Windows will complain it can't delete entries on the second one. - * It has deleted everything it had permissions too, which is enouth - * as this includes "Device Parameters". - * - * http://msdn.microsoft.com/en-us/library/windows/hardware/ff537430.aspx - * - */ - -/* ------------------------------------------------------------------ */ - -typedef struct msos_compat_hdr { - uint32_t dwLength; - uint8_t bcdVersion_lo; - uint8_t bcdVersion_hi; - uint8_t wIndex_lo; - uint8_t wIndex_hi; - uint8_t bCount; - uint8_t reserved[7]; -} QEMU_PACKED msos_compat_hdr; - -typedef struct msos_compat_func { - uint8_t bFirstInterfaceNumber; - uint8_t reserved_1; - char compatibleId[8]; - uint8_t subCompatibleId[8]; - uint8_t reserved_2[6]; -} QEMU_PACKED msos_compat_func; - -static int usb_desc_msos_compat(const USBDesc *desc, uint8_t *dest) -{ - msos_compat_hdr *hdr = (void *)dest; - msos_compat_func *func; - int length = sizeof(*hdr); - int count = 0; - - func = (void *)(dest + length); - func->bFirstInterfaceNumber = 0; - func->reserved_1 = 0x01; - if (desc->msos->CompatibleID) { - snprintf(func->compatibleId, sizeof(func->compatibleId), - "%s", desc->msos->CompatibleID); - } - length += sizeof(*func); - count++; - - hdr->dwLength = cpu_to_le32(length); - hdr->bcdVersion_lo = 0x00; - hdr->bcdVersion_hi = 0x01; - hdr->wIndex_lo = 0x04; - hdr->wIndex_hi = 0x00; - hdr->bCount = count; - return length; -} - -/* ------------------------------------------------------------------ */ - -typedef struct msos_prop_hdr { - uint32_t dwLength; - uint8_t bcdVersion_lo; - uint8_t bcdVersion_hi; - uint8_t wIndex_lo; - uint8_t wIndex_hi; - uint8_t wCount_lo; - uint8_t wCount_hi; -} QEMU_PACKED msos_prop_hdr; - -typedef struct msos_prop { - uint32_t dwLength; - uint32_t dwPropertyDataType; - uint8_t dwPropertyNameLength_lo; - uint8_t dwPropertyNameLength_hi; - uint8_t bPropertyName[]; -} QEMU_PACKED msos_prop; - -typedef struct msos_prop_data { - uint32_t dwPropertyDataLength; - uint8_t bPropertyData[]; -} QEMU_PACKED msos_prop_data; - -typedef enum msos_prop_type { - MSOS_REG_SZ = 1, - MSOS_REG_EXPAND_SZ = 2, - MSOS_REG_BINARY = 3, - MSOS_REG_DWORD_LE = 4, - MSOS_REG_DWORD_BE = 5, - MSOS_REG_LINK = 6, - MSOS_REG_MULTI_SZ = 7, -} msos_prop_type; - -static int usb_desc_msos_prop_name(struct msos_prop *prop, - const wchar_t *name) -{ - int length = wcslen(name) + 1; - int i; - - prop->dwPropertyNameLength_lo = usb_lo(length*2); - prop->dwPropertyNameLength_hi = usb_hi(length*2); - for (i = 0; i < length; i++) { - prop->bPropertyName[i*2] = usb_lo(name[i]); - prop->bPropertyName[i*2+1] = usb_hi(name[i]); - } - return length*2; -} - -static int usb_desc_msos_prop_str(uint8_t *dest, msos_prop_type type, - const wchar_t *name, const wchar_t *value) -{ - struct msos_prop *prop = (void *)dest; - struct msos_prop_data *data; - int length = sizeof(*prop); - int i, vlen = wcslen(value) + 1; - - prop->dwPropertyDataType = cpu_to_le32(type); - length += usb_desc_msos_prop_name(prop, name); - data = (void *)(dest + length); - - data->dwPropertyDataLength = cpu_to_le32(vlen*2); - length += sizeof(*prop); - - for (i = 0; i < vlen; i++) { - data->bPropertyData[i*2] = usb_lo(value[i]); - data->bPropertyData[i*2+1] = usb_hi(value[i]); - } - length += vlen*2; - - prop->dwLength = cpu_to_le32(length); - return length; -} - -static int usb_desc_msos_prop_dword(uint8_t *dest, const wchar_t *name, - uint32_t value) -{ - struct msos_prop *prop = (void *)dest; - struct msos_prop_data *data; - int length = sizeof(*prop); - - prop->dwPropertyDataType = cpu_to_le32(MSOS_REG_DWORD_LE); - length += usb_desc_msos_prop_name(prop, name); - data = (void *)(dest + length); - - data->dwPropertyDataLength = cpu_to_le32(4); - data->bPropertyData[0] = (value) & 0xff; - data->bPropertyData[1] = (value >> 8) & 0xff; - data->bPropertyData[2] = (value >> 16) & 0xff; - data->bPropertyData[3] = (value >> 24) & 0xff; - length += sizeof(*prop) + 4; - - prop->dwLength = cpu_to_le32(length); - return length; -} - -static int usb_desc_msos_prop(const USBDesc *desc, uint8_t *dest) -{ - msos_prop_hdr *hdr = (void *)dest; - int length = sizeof(*hdr); - int count = 0; - - if (desc->msos->Label) { - /* - * Given as example in the specs. Havn't figured yet where - * this label shows up in the windows gui. - */ - length += usb_desc_msos_prop_str(dest+length, MSOS_REG_SZ, - L"Label", desc->msos->Label); - count++; - } - - if (desc->msos->SelectiveSuspendEnabled) { - /* - * Signaling remote wakeup capability in the standard usb - * descriptors isn't enouth to make windows actually use it. - * This is the "Yes, we really mean it" registy entry to flip - * the switch in the windows drivers. - */ - length += usb_desc_msos_prop_dword(dest+length, - L"SelectiveSuspendEnabled", 1); - count++; - } - - hdr->dwLength = cpu_to_le32(length); - hdr->bcdVersion_lo = 0x00; - hdr->bcdVersion_hi = 0x01; - hdr->wIndex_lo = 0x05; - hdr->wIndex_hi = 0x00; - hdr->wCount_lo = usb_lo(count); - hdr->wCount_hi = usb_hi(count); - return length; -} - -/* ------------------------------------------------------------------ */ - -int usb_desc_msos(const USBDesc *desc, USBPacket *p, - int index, uint8_t *dest, size_t len) -{ - void *buf = g_malloc0(4096); - int length = 0; - - switch (index) { - case 0x0004: - length = usb_desc_msos_compat(desc, buf); - break; - case 0x0005: - length = usb_desc_msos_prop(desc, buf); - break; - } - - if (length > len) { - length = len; - } - memcpy(dest, buf, length); - g_free(buf); - - p->actual_length = length; - return 0; -} |