[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] i8257: fix Terminal Count status
From: |
John Snow |
Subject: |
Re: [Qemu-devel] [PATCH] i8257: fix Terminal Count status |
Date: |
Fri, 26 Feb 2016 18:51:46 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 |
On 02/25/2016 07:45 AM, Hervé Poussineau wrote:
> When a DMA transfer is done (ie all bytes have been transfered), the
> corresponding
> Terminal Count bit must be set in the status register.
> This bit is already cleared in i8257_read_cont and i8257_write_cont when
> required.
>
> This fixes (at least) floppy transfer in IBM 40p firmware, which checks in DMA
> controller if everything went fine.
>
> Signed-off-by: Hervé Poussineau <address@hidden>
> ---
> hw/dma/i8257.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/hw/dma/i8257.c b/hw/dma/i8257.c
> index 5a52707..6078893 100644
> --- a/hw/dma/i8257.c
> +++ b/hw/dma/i8257.c
> @@ -342,6 +342,10 @@ static void i8257_channel_run(I8257State *d, int ichan)
> r->now[COUNT], (r->base[COUNT] + 1) << ncont);
> r->now[COUNT] = n;
> ldebug ("dma_pos %d size %d\n", n, (r->base[COUNT] + 1) << ncont);
> + if (n == (r->base[COUNT] + 1) << ncont) {
> + ldebug("transfer done\n");
> + d->status |= (1 << ichan);
> + }
> }
>
> static void i8257_dma_run(void *opaque)
>
As best as I can tell from the i8257 data sheet I found this seems to be
correct, assuming the size calculation is correct (looks right, based on
that existing ldebug print.)
Reviewed-by: John Snow <address@hidden>