• While trying to make VX-3000 camera work on XP under KVM I realized that
    we do not necessarily have to find original TD address. All we care about
    is the token which identifies the transfer rather well (direction, endpoint,
    size, etc).
    This is especially important for the isochronous transfers because otherwise
    they are being canceled left and right and we do not make much progress.
    
    With this patch all devices that used bulk transfers that I've tried so
    far continue to work just as well. And now my USB web cammera (isoc transfers)
    is working well tool. It's not as smooth as native Windows but it's pretty
    darn smooth.
    
    The cool thing is that new USB code (both usb-uhci and usb-linux) is totaly
    generic and does not need any special logic for ISOC.
    
    Signed-off-by: Max Krasnyansky <maxk@kernel.org>
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5072 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »
  • Fixes regression reported agains Linux 2.6.18.
    Looks like XP and newer Linux kernels are less sensitive
    to length returned for control transfers.
    
    Signed-off-by: Max Krasnyansky <maxk@kernel.org>
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5070 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »
  • Some bugs on SH4 MMU are fixed.
    
    - When a TLB entry is overwritten or invalidated, tlb_flush_page() should be
      invoked to invalidate old entry.
    - When a ASID is changed, tlb_flush() should be invoke to invalidate entries
      which have old ASID.
    - The check for shared bit in TLB entry causes multiple TLB hit exception.
      As SH3's MMU, shared bit is ignored.
    - ASID is used when MMUCR's SV bit or SR's MD bit is zero.
      No need to check both bits are zero.
    
    (Shin-ichiro KAWASAKI)
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5068 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »
  • SH4 MMU's memory mapped TLB feature is implemented.
    SH-Linux seems to write to memory mapped TLB to invalidate a TLB entry,
    but does not to read it. So only memory write feature is implemented.
    Work on memory read feature is left.
    
    (Shin-ichiro KAWASAKI)
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5067 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Dir »
  • (Jindrich Makovicka)
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5064 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »
  • The direction bit in the control register should not be directly
    
    set using PPWCONTROL. The kernel gives the following debug message.
    
        parport0 (ppdev0): use data_reverse for this!
    
    More over setting the data pins to forward mode does not work,
    perhaps a bug in the Linux PP driver. The right way to do this is
    to use PPDATADIR to set the direction. The patch checks if the
    user is toggling the direction bit, and invokes PPDATADIR to
    do the job.
    
    Signed-off-by: Vijay Kumar B <vijaykumar@bravegnu.org>
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5063 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Dir »

  • Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5061 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »
  • Feature, Sector Count, LBA Low/Mid/High and Device registers should be
    written only when both BSY and DRQ are cleared to zero.
    Command register shall only be written when BSY and DRQ are set to zero
    for all commands except DEVICE RESET.
    Data Port register shall be accessed for host PIO data transfer only when
    DRQ is set to one.
    
    Signed-off-by: Gleb Natapov <gleb@qumranet.com>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5060 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse File »
  • (fix CVE-2008-1945)
    
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5059 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »
  • For some reason we were not registering save/load-vm handler for piix3
    flavor of UHCI and hence save/load was broken.
    
    Async transactions need to be canceled when we save the VM because there
    is no way we can save/restore all that state. Since we do not mess the
    original TD/QH the driver will simply resubmit the transfers.
    
    Tested with Windows XP-SP2 running under QEMU/KQEMU.
    
    Signed-off-by: Max Krasnyansky <maxk@kernel.org>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5054 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »
  • …nsactions (Max Krasnyansky)
    
    This is esentially a re-write of the QEMU UHCI layer. My initial goal
    was to support fully async operation with multiple outstanding async
    transactions. Along the way I realized that I can greatly simplify
    and cleanup the overall logic. There was a lot of duplicate and confusing
    code in the UHCI data structure parsing and other places.
    We were actually violating UHCI spec in handling async ISOC transaction
    (host controller is not supposed to write into the frame pointer).
    
    The reason I wanted to support fully async operation is because current
    synchronous version is unusable with most devices exported from host
    (via usb-linux.c). Transactions take a long time and the whole VM becomes
    slow as hell.
    
    Current async support is very rudimentory and for the most part
    non-functional. Single transaction at a time is simply not enough. I have
    a device for which XP driver submits both IN and OUT packets at the same
    time. IN packet always times out unless OUT packet makes it to the device.
    Hence we must be able to process both in order for that device to work.
    
    The new code is backwards compatible and was first tested agains original
    synchronous usb-linux.c and builtin usb devices like tablet which is also
    synchronous. Rewrite of the usb-linux.c is coming up next.
    
    Async support was tested against various XP versions (ie XP, SP2, SP3) and
    a bunch of different USB devices: serial port controllers, mice, keyboard,
    JTAG dongles (from Xilinx and Altera).
    
    ISOC support was only lighly tested and needs more work. It's not any worse
    than current code though.
    
    UHCI parser changes are probably somewhat hard to review without the
    understanding of the UHCI spec.
    The async design should be fairly easy to follow. Basically we have a list
    of async objects for each pending transfer. Async objects are tagged with
    the original TD (transfer descriptor) address and token. We now support
    unlimited number of outstanding isoc and one outstanding bulk/intr/ctrl
    transfer per QH (queue head). UHCI spec does not have a clear protocol for
    the cancelation of the trasfer requests. Driver can yank out TDs on any
    frame boundary. In oder to handle that I added somewhat fancy TD validation
    logic logic to avoid unnecessary cancelations.
    
    Signed-off-by: Max Krasnyansky <maxk@kernel.org>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5050 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »
  • A bit better documentation of the USB device API, namely
    return codes.
    Rewrite of usb_generic_handle_packet() to make it more
    reable and easier to follow.
    
    Signed-off-by: Max Krasnyansky <maxk@kernel.org>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5049 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse Code »
  • QEMU can now automatically grab host USB devices that match the filter.
    For now I just extended 'host:X.Y' and 'host:VID:PID' syntax to handle
    wildcards. So for example if you do something like
       usb_add host:5.*
    QEMU will automatically grab any non-hub device with host address 5.*.
    
    Same with the 'host:PID:*', we grab any device that matches PID.
    
    Filtering itself is very generic so we can probably add more elaborate
    syntax like 'host:BUS.ADDR:VID:PID'. So that we can do 'host:5.*:6000:*'.
    
    Anyway, it's implemented using a periodic timer that scans host devices
    and grabs those that match the filter. Timer is started when the first
    filter is added.
    
    We now keep the list of all host devices that we grabbed to make sure that
    we do not grab the same device twice.
    
    btw It's currently possible to grab the same host device more than once.
    ie You can just do "usb_add host:1.1" more than once, which of course does
    not work. So this patch fixes that issue too.
    
    Along with auto disconnect patch that I send a minute ago the setup is very
    seamless now. You can just allocate some usb ports to the VMs and plug/unplug
    devices at any time.
    
    Signed-off-by: Max Krasnyansky <maxk@kernel.org>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5048 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse File »
  • I got really annoyed by the fact that you have to manually do
    usb_del in the monitor when host device is unplugged and decided
    to fix it :)
    
    Basically we now automatically remove guest USB device
    when the actual host device is disconnected.
    
    At first I've extended set_fd_handlerX() stuff to support checking
    for exceptions on fds. But unfortunately usbfs code does not wake up
    user-space process when device is removed, which means we need a
    timer to periodically check if device is still there. So I removed
    fd exception stuff and implemented it with the timer.
    
    Signed-off-by: Max Krasnyansky <maxk@kernel.org>
    Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
    
    
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5047 c046a42c-6fe2-441c-8c8c-71466251a162
    aliguori authored
     
    Browse File »
  • git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5044 c046a42c-6fe2-441c-8c8c-71466251a162
    blueswir1 authored
     
    Browse Code »
  • [ Taking latest isapc changes into account. ]
    
    Ensure that PIC-delivered IRQs are properly de-asserted in case the APIC
    is in EXTINT or FIXED mode (with level-triggering selected) on LINT0.
    Fixes EFI-BIOS boot issues.
    
    This patch also cleans up a bit the interface between PIC and APIC,
    making apic_local_deliver private again.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5041 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »
  • [ Taking latest isapc changes into account. ]
    
    In case the PIC IRQ gets de-asserted on an isapc machine, we also have
    to reset CPU_INTERRUPT_HARD. This is what older qemu (before the
    routing-through-APIC changes) used to do as well.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5040 c046a42c-6fe2-441c-8c8c-71466251a162
    aurel32 authored
     
    Browse Code »