virtio: introduce virtio_legacy_is_cross_endian()
authorGreg Kurz <gkurz@linux.vnet.ibm.com>
Wed, 17 Jun 2015 13:23:34 +0000 (15:23 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 17 Jun 2015 15:12:54 +0000 (17:12 +0200)
This helper will be used by vhost and tap to detect cross-endianness in
the legacy virtio case.

Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
include/hw/virtio/virtio-access.h

index ee28c21fefeda40ff8ff2d199842bcc4e7f7ecdb..cee5dd70c9970a14e951ddb204a14400d253b3da 100644 (file)
@@ -32,6 +32,19 @@ static inline bool virtio_access_is_big_endian(VirtIODevice *vdev)
 #endif
 }
 
+static inline bool virtio_legacy_is_cross_endian(VirtIODevice *vdev)
+{
+#ifdef TARGET_IS_BIENDIAN
+#ifdef HOST_WORDS_BIGENDIAN
+    return !virtio_is_big_endian(vdev);
+#else
+    return virtio_is_big_endian(vdev);
+#endif
+#else
+    return false;
+#endif
+}
+
 static inline uint16_t virtio_lduw_phys(VirtIODevice *vdev, hwaddr pa)
 {
     if (virtio_access_is_big_endian(vdev)) {