From 444dd39b5f226926e8b8a950821e6f48a5da3ccd Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 26 Jan 2011 12:31:00 +0000 Subject: [PATCH] lsi53c895a: Update dnad when skipping MSGOUT bytes 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 Signed-off-by: Aurelien Jarno --- hw/lsi53c895a.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c index 9c761cdb6..84a49928d 100644 --- a/hw/lsi53c895a.c +++ b/hw/lsi53c895a.c @@ -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; -- 2.39.2