]> git.proxmox.com Git - qemu.git/commitdiff
lsi53c895a: Update dnad when skipping MSGOUT bytes
authorStefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Wed, 26 Jan 2011 12:31:00 +0000 (12:31 +0000)
committerAurelien Jarno <aurelien@aurel32.net>
Sun, 6 Mar 2011 17:22:19 +0000 (18:22 +0100)
Update not only dbc but also dnad when skipping bytes during the MSGOUT
phase.  Previously only dbc was updated which is probably wrong and
could lead to bogus message codes being read.

Tested on Linux and Windows Server 2003.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
hw/lsi53c895a.c

index 9c761cdb662db425ee4d36f3fb37e6f1328918e3..84a49928dcc08972b74d82a2afcb0d7809ba428b 100644 (file)
@@ -842,6 +842,13 @@ static uint8_t lsi_get_msgbyte(LSIState *s)
     return data;
 }
 
+/* Skip the next n bytes during a MSGOUT phase. */
+static void lsi_skip_msgbytes(LSIState *s, unsigned int n)
+{
+    s->dnad += n;
+    s->dbc  -= n;
+}
+
 static void lsi_do_msgout(LSIState *s)
 {
     uint8_t msg;
@@ -869,11 +876,11 @@ static void lsi_do_msgout(LSIState *s)
             switch (msg) {
             case 1:
                 DPRINTF("SDTR (ignored)\n");
-                s->dbc -= 2;
+                lsi_skip_msgbytes(s, 2);
                 break;
             case 3:
                 DPRINTF("WDTR (ignored)\n");
-                s->dbc -= 1;
+                lsi_skip_msgbytes(s, 1);
                 break;
             default:
                 goto bad;