[SeaBIOS] [PATCH] ata: send TEST UNIT READY correctly
fellaw at gmx.net
fellaw at gmx.net
Mon Mar 19 19:32:15 CET 2012
Confirmed working.
Paolo Bonzini schrieb:
> The ATAPI driver does not need to support writes, but it does needs to
> avoid the PIO transfer and DRQ check when TEST UNIT READY is sent.
> Since TEST UNIT READY has no payload, checking for not busy is enough.
>
> This fixes a timeout when booting from CD/DVD, which fellaw at gmx.net
> reported to cause boot failures.
>
> Signed-off-by: Paolo Bonzini<pbonzini at redhat.com>
> ---
> src/ata.c | 14 ++++++++------
> 1 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/src/ata.c b/src/ata.c
> index 76e4f20..c37691a 100644
> --- a/src/ata.c
> +++ b/src/ata.c
> @@ -645,13 +645,15 @@ atapi_cmd_data(struct disk_op_s *op, void *cdbcmd, u16 blocksize)
> ret = -2;
> goto fail;
> }
> - if (!(status& ATA_CB_STAT_DRQ)) {
> - dprintf(6, "send_atapi_cmd : DRQ not set (status %02x)\n", status);
> - ret = -3;
> - goto fail;
> - }
> + if (blocksize) {
> + if (!(status& ATA_CB_STAT_DRQ)) {
> + dprintf(6, "send_atapi_cmd : DRQ not set (status %02x)\n", status);
> + ret = -3;
> + goto fail;
> + }
>
> - ret = ata_pio_transfer(op, 0, blocksize);
> + ret = ata_pio_transfer(op, 0, blocksize);
> + }
>
> fail:
> // Enable interrupts
More information about the SeaBIOS
mailing list