xhci: Fix some DMA host endian bugs
commit616b5d53ae81a94a4aabe8a87a5d950e9d349bc5
authorDavid Gibson <david@gibson.dropbear.id.au>
Mon, 5 Nov 2012 03:29:01 +0000 (5 14:29 +1100)
committerGerd Hoffmann <kraxel@redhat.com>
Fri, 9 Nov 2012 07:27:55 +0000 (9 08:27 +0100)
treed3bee04faa9de8f0ef43e42e3213e0e76bb9d5c9
parentffd8a97fb33d3b036d61c508bd73ee7fa4051c6b
xhci: Fix some DMA host endian bugs

The xhci device does correct endian switches on the results of some DMAs
but not all.  In particular, there are many DMAs of what are essentially
arrays of 32-bit integers which never get byteswapped.  This causes them
to be interpreted incorrectly on big-endian hosts, since (as per the xhci
spec) these arrays are always little-endian in guest memory.

This patch adds some helper functions to fix these bugs.  This may not be
all the endian bugs in the xhci code, but it's certainly some of them and
the Linux guest xhci driver certainly gets further with these fixes.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
hw/usb/hcd-xhci.c