• H
    usb: Add an usb_device_ep_stopped USBDevice method · f79738b0
    Hans de Goede 提交于
    Some usb devices (host or network redirection) can benefit from knowing when
    the guest stops using an endpoint. Redirection may involve submitting packets
    independently from the guest (in combination with a fifo buffer between the
    redirection code and the guest), to ensure that buffers of the real usb device
    are timely emptied. This is done for example for isoc traffic and for interrupt
    input endpoints. But when the (re)submission of packets is done by the device
    code, then how does it know when to stop this?
    
    For isoc endpoints this is handled by detecting a set interface (change alt
    setting) command, which works well for isoc endpoints. But for interrupt
    endpoints currently the redirection code never stops receiving data from
    the device, which is less then ideal.
    
    However the controller emulation is aware when a guest looses interest, as
    then the qh for the endpoint gets unlinked (ehci, ohci, uhci) or the endpoint
    is explicitly stopped (xhci). This patch adds a new ep_stopped USBDevice
    method and modifies the hcd code to call this on queue unlink / ep stop.
    
    This makes it possible for the redirection code to properly stop receiving
    interrupt input (*) data when the guest no longer has interest in it.
    
    *) And in the future also buffered bulk input.
    Signed-off-by: NHans de Goede <hdegoede@redhat.com>
    Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
    f79738b0
hcd-ohci.c 55.2 KB