Am 14.12.2010 01:34, schrieb Alexander Graf: > We hook into transfer_start and immediately call the end function > for ahci. This means that everything needs to be in place for the > end function when we start the transfer, so let's move the function > down to where all state is in place. > > Signed-off-by: Alexander Graf <ag...@suse.de> > --- > hw/ide/core.c | 8 ++++---- > 1 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/hw/ide/core.c b/hw/ide/core.c > index 2d0ad56..04e463a 100644 > --- a/hw/ide/core.c > +++ b/hw/ide/core.c > @@ -814,11 +814,11 @@ static void ide_atapi_cmd_reply_end(IDEState *s) > size = s->cd_sector_size - s->io_buffer_index; > if (size > s->elementary_transfer_size) > size = s->elementary_transfer_size; > - ide_transfer_start(s, s->io_buffer + s->io_buffer_index, > - size, ide_atapi_cmd_reply_end); > s->packet_transfer_size -= size; > s->elementary_transfer_size -= size; > s->io_buffer_index += size; > + ide_transfer_start(s, s->io_buffer + s->io_buffer_index + size,
I think this should be s->io_buffer + s->io_buffer_index - size. Kevin > + size, ide_atapi_cmd_reply_end); > } else { > /* a new transfer is needed */ > s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO; > @@ -843,11 +843,11 @@ static void ide_atapi_cmd_reply_end(IDEState *s) > if (size > (s->cd_sector_size - s->io_buffer_index)) > size = (s->cd_sector_size - s->io_buffer_index); > } > - ide_transfer_start(s, s->io_buffer + s->io_buffer_index, > - size, ide_atapi_cmd_reply_end); > s->packet_transfer_size -= size; > s->elementary_transfer_size -= size; > s->io_buffer_index += size; > + ide_transfer_start(s, s->io_buffer + s->io_buffer_index - size, > + size, ide_atapi_cmd_reply_end); > ide_set_irq(s->bus); > #ifdef DEBUG_IDE_ATAPI > printf("status=0x%x\n", s->status);