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