diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2010-11-30 17:35:34 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2011-01-11 15:56:01 +0100 |
commit | ed5a83ddd8c1d8ec7b1015315530cf29949e7c48 (patch) | |
tree | 6c78080c354298840f92b088ec866ed90147fb0e /hw/usb-desc.c | |
parent | a980a065fb5e86d6dec337e6cb6ff432f1a143c9 (diff) |
usb: move remote wakeup handling to common code
This patch moves setting and clearing the remote_wakeup feature
bit (via USB_REQ_{SET,CLEAR}_FEATURE) to common code. Also
USB_REQ_GET_STATUS handling is moved to common code.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb-desc.c')
-rw-r--r-- | hw/usb-desc.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/hw/usb-desc.c b/hw/usb-desc.c index 14c9e112ce..56ef734bde 100644 --- a/hw/usb-desc.c +++ b/hw/usb-desc.c @@ -299,6 +299,32 @@ int usb_desc_handle_control(USBDevice *dev, int request, int value, } trace_usb_set_config(dev->addr, value, ret); break; + + case DeviceRequest | USB_REQ_GET_STATUS: + data[0] = 0; + if (dev->config->bmAttributes & 0x40) { + data[0] |= 1 << USB_DEVICE_SELF_POWERED; + } + if (dev->remote_wakeup) { + data[0] |= 1 << USB_DEVICE_REMOTE_WAKEUP; + } + data[1] = 0x00; + ret = 2; + break; + case DeviceOutRequest | USB_REQ_CLEAR_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + dev->remote_wakeup = 0; + ret = 0; + } + trace_usb_clear_device_feature(dev->addr, value, ret); + break; + case DeviceOutRequest | USB_REQ_SET_FEATURE: + if (value == USB_DEVICE_REMOTE_WAKEUP) { + dev->remote_wakeup = 1; + ret = 0; + } + trace_usb_set_device_feature(dev->addr, value, ret); + break; } return ret; } |