qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	John Snow <jsnow@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PULL 23/24] IDE: Fill the IDENTIFY request consistently
Date: Mon,  8 Sep 2014 11:51:48 +0100	[thread overview]
Message-ID: <1410173509-26667-24-git-send-email-stefanha@redhat.com> (raw)
In-Reply-To: <1410173509-26667-1-git-send-email-stefanha@redhat.com>

From: John Snow <jsnow@redhat.com>

IDE-HD, IDE-ATAPI and IDE-CFATA all fill the
identify buffer in slightly different ways,
this is a relatively minor patch to make them
uniform, to emphasize that:

(1) We build the s->identify_data cache first, then
(2) We copy it to s->io_buffer to fulfill the request.

Signed-off-by: John Snow <jsnow@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/ide/core.c | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/hw/ide/core.c b/hw/ide/core.c
index de0e5e9..e0232d4 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -81,13 +81,12 @@ static void ide_identify(IDEState *s)
     unsigned int oldsize;
     IDEDevice *dev = s->unit ? s->bus->slave : s->bus->master;
 
+    p = (uint16_t *)s->identify_data;
     if (s->identify_set) {
-	memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
-	return;
+        goto fill_buffer;
     }
+    memset(p, 0, sizeof(s->identify_data));
 
-    memset(s->io_buffer, 0, 512);
-    p = (uint16_t *)s->io_buffer;
     put_le16(p + 0, 0x0040);
     put_le16(p + 1, s->cylinders);
     put_le16(p + 3, s->heads);
@@ -180,21 +179,22 @@ static void ide_identify(IDEState *s)
         put_le16(p + 169, 1); /* TRIM support */
     }
 
-    memcpy(s->identify_data, p, sizeof(s->identify_data));
     s->identify_set = 1;
+
+fill_buffer:
+    memcpy(s->io_buffer, p, sizeof(s->identify_data));
 }
 
 static void ide_atapi_identify(IDEState *s)
 {
     uint16_t *p;
 
+    p = (uint16_t *)s->identify_data;
     if (s->identify_set) {
-	memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
-	return;
+        goto fill_buffer;
     }
+    memset(p, 0, sizeof(s->identify_data));
 
-    memset(s->io_buffer, 0, 512);
-    p = (uint16_t *)s->io_buffer;
     /* Removable CDROM, 50us response, 12 byte packets */
     put_le16(p + 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0));
     padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
@@ -247,8 +247,10 @@ static void ide_atapi_identify(IDEState *s)
         put_le16(p + 111, s->wwn);
     }
 
-    memcpy(s->identify_data, p, sizeof(s->identify_data));
     s->identify_set = 1;
+
+fill_buffer:
+    memcpy(s->io_buffer, p, sizeof(s->identify_data));
 }
 
 static void ide_cfata_identify(IDEState *s)
@@ -256,10 +258,10 @@ static void ide_cfata_identify(IDEState *s)
     uint16_t *p;
     uint32_t cur_sec;
 
-    p = (uint16_t *) s->identify_data;
-    if (s->identify_set)
+    p = (uint16_t *)s->identify_data;
+    if (s->identify_set) {
         goto fill_buffer;
-
+    }
     memset(p, 0, sizeof(s->identify_data));
 
     cur_sec = s->cylinders * s->heads * s->sectors;
-- 
1.9.3

  parent reply	other threads:[~2014-09-08 10:53 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-08 10:51 [Qemu-devel] [PULL v2 00/24] Block patches Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 01/24] block: kill tail whitespace in block.c Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 02/24] pflash_cfi01: fixup stale DPRINTF() calls Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 03/24] pflash_cfi01: write flash contents to bdrv on incoming migration Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 04/24] tests: Functions bus_foreach and device_find from libqos virtio API Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 05/24] tests: Add virtio device initialization Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 06/24] libqos: Added basic virtqueue support to virtio implementation Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 07/24] libqos: Added indirect descriptor " Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 08/24] libqos: Added test case for configuration changes in virtio-blk test Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 09/24] libqos: Added MSI-X support Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 10/24] libqos: Added EVENT_IDX support Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 11/24] qemu-img: clarify src_cache option documentation Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 12/24] qemu-img: fix rebase " Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 13/24] block/archipelago: Use QEMU atomic builtins Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 14/24] rename parse_enum_option to qapi_enum_parse and make it public Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 15/24] qemu-nbd: add option to set detect-zeroes mode Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 16/24] qemu-nbd: fix indentation and coding style Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 17/24] MAINTAINERS: update sheepdog maintainer Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 18/24] libqos: add a simple first-fit memory allocator Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 19/24] qtest/ide: Uninitialize PC allocator Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 20/24] ide: Add wwn support to IDE-ATAPI drive Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 21/24] vmdk: fix vmdk_parse_extents() extent_file leaks Stefan Hajnoczi
2014-09-08 10:51 ` [Qemu-devel] [PULL 22/24] vmdk: fix buf leak in vmdk_parse_extents() Stefan Hajnoczi
2014-09-08 10:51 ` Stefan Hajnoczi [this message]
2014-09-08 10:51 ` [Qemu-devel] [PULL 24/24] ide: Add resize callback to ide/core Stefan Hajnoczi
2014-09-08 14:06 ` [Qemu-devel] [PULL v2 00/24] Block patches Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1410173509-26667-24-git-send-email-stefanha@redhat.com \
    --to=stefanha@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).