On Wed, Jan 26, 2011 at 12:31:00PM +0000, Stefan Hajnoczi wrote:
> 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 <[email protected]>
> ---
> hw/lsi53c895a.c | 11 +++++++++--
> 1 files changed, 9 insertions(+), 2 deletions(-)
Thanks, applied.
> diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c
> index 9c761cd..84a4992 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;
> --
> 1.7.2.3
>
>
>
--
Aurelien Jarno GPG: 1024D/F1BCDB73
[email protected] http://www.aurel32.net