9ae3a8
From e67d424de7c9f4ab359757195e8d3319c03b70a0 Mon Sep 17 00:00:00 2001
9ae3a8
From: John Snow <jsnow@redhat.com>
9ae3a8
Date: Mon, 8 Sep 2014 22:34:25 +0200
9ae3a8
Subject: [PATCH 01/20] ide: Add wwn support to IDE-ATAPI drive
9ae3a8
9ae3a8
Message-id: <1410215665-27240-2-git-send-email-jsnow@redhat.com>
9ae3a8
Patchwork-id: 60913
9ae3a8
O-Subject: [RHEL7.1 qemu-kvm PATCH] ide: Add wwn support to IDE-ATAPI drive
9ae3a8
Bugzilla: 1131316
9ae3a8
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
9ae3a8
RH-Acked-by: Fam Zheng <famz@redhat.com>
9ae3a8
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
9ae3a8
9ae3a8
Although it is possible to specify the wwn
9ae3a8
property for cdrom devices on the command line,
9ae3a8
the underlying driver fails to relay this information
9ae3a8
to the guest operating system via IDENTIFY.
9ae3a8
9ae3a8
This is a simple patch to correct that.
9ae3a8
9ae3a8
See ATA8-ACS, Table 22 parts 5, 6, and 9.
9ae3a8
9ae3a8
Signed-off-by: John Snow <jsnow@redhat.com>
9ae3a8
Reviewed-by: Fam Zheng <famz@redhat.com>
9ae3a8
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
9ae3a8
(cherry picked from commit c5fe97e359bf03db9a005433092f25d27d57398f)
9ae3a8
Signed-off-by: John Snow <jsnow@redhat.com>
9ae3a8
---
9ae3a8
 hw/ide/core.c | 14 ++++++++++++++
9ae3a8
 1 file changed, 14 insertions(+)
9ae3a8
9ae3a8
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
9ae3a8
---
9ae3a8
 hw/ide/core.c |   14 ++++++++++++++
9ae3a8
 1 files changed, 14 insertions(+), 0 deletions(-)
9ae3a8
9ae3a8
diff --git a/hw/ide/core.c b/hw/ide/core.c
9ae3a8
index a2947a9..98128fb 100644
9ae3a8
--- a/hw/ide/core.c
9ae3a8
+++ b/hw/ide/core.c
9ae3a8
@@ -230,9 +230,23 @@ static void ide_atapi_identify(IDEState *s)
9ae3a8
     }
9ae3a8
 
9ae3a8
     put_le16(p + 80, 0x1e); /* support up to ATA/ATAPI-4 */
9ae3a8
+    if (s->wwn) {
9ae3a8
+        put_le16(p + 84, (1 << 8)); /* supports WWN for words 108-111 */
9ae3a8
+        put_le16(p + 87, (1 << 8)); /* WWN enabled */
9ae3a8
+    }
9ae3a8
+
9ae3a8
 #ifdef USE_DMA_CDROM
9ae3a8
     put_le16(p + 88, 0x3f | (1 << 13)); /* udma5 set and supported */
9ae3a8
 #endif
9ae3a8
+
9ae3a8
+    if (s->wwn) {
9ae3a8
+        /* LE 16-bit words 111-108 contain 64-bit World Wide Name */
9ae3a8
+        put_le16(p + 108, s->wwn >> 48);
9ae3a8
+        put_le16(p + 109, s->wwn >> 32);
9ae3a8
+        put_le16(p + 110, s->wwn >> 16);
9ae3a8
+        put_le16(p + 111, s->wwn);
9ae3a8
+    }
9ae3a8
+
9ae3a8
     memcpy(s->identify_data, p, sizeof(s->identify_data));
9ae3a8
     s->identify_set = 1;
9ae3a8
 }
9ae3a8
-- 
9ae3a8
1.7.1
9ae3a8