Xen - USB passthrough - pciback?

Hi,

I need to be able to access a usb dongle from the Windows 2003 domU. I believe the current state of Xen is that individual USB devices cannot be passed through to the domU.

I have, however, seen instructions on how to pass through a NIC using pciback to hide it from dom0 then allocating it specifically to the domU.
Can the same be done for an entire usb bus?
See the following outputs:

suse-xen:~ # lspci
00:02.0 USB Controller: nVidia Corporation MCP67 OHCI USB 1.1 Controller (rev a2)
00:02.1 USB Controller: nVidia Corporation MCP67 EHCI USB 2.0 Controller (rev a2)
00:04.0 USB Controller: nVidia Corporation MCP67 OHCI USB 1.1 Controller (rev a2)
00:04.1 USB Controller: nVidia Corporation MCP67 EHCI USB 2.0 Controller (rev a2)

suse-xen:~ # lsusb
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 004: ID 045e:0084 Microsoft Corp. Basic Optical Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

There appear to be two controller devices for USB 2.0 in the PCI device list. There are however 4 buses listed from lsusb. When I plug the dongle in, it shows up under bus 001 or 002 depending on which port it is plugged in to.

I guess pciback would only pass through an entire controller… ie with pci=[0000:00:04.0] in my Win2k3 config file. Has anyone done this? would it work? or can I actually pass through one of the USB buses?

Cheers

Further information:

It appears that the USB Bus to PCI controller relationship is as follows:

USB Bus…PCI USB Controller
Bus 004…00:04.1 USB 2.0
Bus 003…00:02.1 USB 2.0
Bus 002…00:04.0 USB 1.1
Bus 001…00:02.0 USB 1.1

Can anyone see a problem using pciback on one of the controllers? The dongle appears to use USB1.1 so I’d be trying to pass through PCI [00:02.0] only.

I seem to be stalled here.

xm dmesg contains:
(XEN) I/O Virtualization disabled

This is the VT-d or iommu AFAIK. My motherboard is an Asus M2N68-VM with the latest BIOS update. There is no option in the CMOS to enable or disable IOMMU.

I have tried iommu=memaper and iommu=calgary on the kernal boot options (in /boot/grub/menu.lst)
Neither had an affect.

Where do I go from here? Is there a kernel option/command to enable iommu that works with openSUSE 11.1 and XEN 3.3?

I’m slowly getting a better understanding of this. I was assuming that I’d have some form of hardware IOMMU. What I hadn’t realised was that the IOMMU is part of the Northbridge chipset on the motherboard. While AMD has a specification for this, there don’t appear to be any implementations as yet. On the other side of the fence, Intel has 3 or 4 chipsets that support VT-d so far.
My current kernel parameters are iommu=soft,memaper=3 swiotlb=128
I had read that the swiotlb parameter should be specified in kilobytes, but I got a kernel panic when it tried to assign 128GB of RAM to SWIOTLB. I had swiotlb=131072
/var/log/boot.msg seems to have everything in order. Software IOMMU enabled etc. However, xm dmesg still contains (XEN) I/O virtualisation disabled.