Patchwork [05/10] ide: add ncq identify data for ahci sata drives

login
register
mail settings
Submitter Alexander Graf
Date Dec. 1, 2010, 7:17 p.m.
Message ID <1291231032-21150-6-git-send-email-agraf@suse.de>
Download mbox | patch
Permalink /patch/73879/
State New
Headers show

Comments

Alexander Graf - Dec. 1, 2010, 7:17 p.m.
From: Roland Elek <elek.roland@gmail.com>

I modified ide_identify() to include the zero-based queue length
value in word 75, and set bit 8 in word 76 to signal NCQ support
in the identify data for AHCI SATA drives.

Signed-off-by: Roland Elek <elek.roland@gmail.com>
---
 hw/ide/core.c     |    7 +++++++
 hw/ide/internal.h |    2 ++
 2 files changed, 9 insertions(+), 0 deletions(-)
Stefan Hajnoczi - Dec. 2, 2010, 10:19 a.m.
On Wed, Dec 1, 2010 at 7:17 PM, Alexander Graf <agraf@suse.de> wrote:
> From: Roland Elek <elek.roland@gmail.com>
>
> I modified ide_identify() to include the zero-based queue length
> value in word 75, and set bit 8 in word 76 to signal NCQ support
> in the identify data for AHCI SATA drives.
>
> Signed-off-by: Roland Elek <elek.roland@gmail.com>
> ---
>  hw/ide/core.c     |    7 +++++++
>  hw/ide/internal.h |    2 ++
>  2 files changed, 9 insertions(+), 0 deletions(-)

Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Patch

diff --git a/hw/ide/core.c b/hw/ide/core.c
index 1680a38..cac209e 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -147,6 +147,13 @@  static void ide_identify(IDEState *s)
     put_le16(p + 66, 120);
     put_le16(p + 67, 120);
     put_le16(p + 68, 120);
+
+    if (s->ncq_queues) {
+        put_le16(p + 75, s->ncq_queues - 1);
+        /* NCQ supported */
+        put_le16(p + 76, (1 << 8));
+    }
+
     put_le16(p + 80, 0xf0); /* ata3 -> ata6 supported */
     put_le16(p + 81, 0x16); /* conforms to ata5 */
     /* 14=NOP supported, 5=WCACHE supported, 0=SMART supported */
diff --git a/hw/ide/internal.h b/hw/ide/internal.h
index 1b5e738..85cb938 100644
--- a/hw/ide/internal.h
+++ b/hw/ide/internal.h
@@ -452,6 +452,8 @@  struct IDEState {
     int smart_errors;
     uint8_t smart_selftest_count;
     uint8_t *smart_selftest_data;
+    /* AHCI */
+    int ncq_queues;
 };
 
 /* This struct represents a device that uses an IDE bus, but requires