mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
ide: make all commands go through cmd_done
AHCI has code to fill in the D2H FIS trigger the IRQ all over the place. Centralize this in a single cmd_done callback by generalizing the existing async_cmd_done callback. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
08ee9e3368
commit
c7e73adb48
4 changed files with 16 additions and 24 deletions
|
@ -440,12 +440,20 @@ void ide_transfer_start(IDEState *s, uint8_t *buf, int size,
|
|||
}
|
||||
}
|
||||
|
||||
static void ide_cmd_done(IDEState *s)
|
||||
{
|
||||
if (s->bus->dma->ops->cmd_done) {
|
||||
s->bus->dma->ops->cmd_done(s->bus->dma);
|
||||
}
|
||||
}
|
||||
|
||||
void ide_transfer_stop(IDEState *s)
|
||||
{
|
||||
s->end_transfer_func = ide_transfer_stop;
|
||||
s->data_ptr = s->io_buffer;
|
||||
s->data_end = s->io_buffer;
|
||||
s->status &= ~DRQ_STAT;
|
||||
ide_cmd_done(s);
|
||||
}
|
||||
|
||||
int64_t ide_get_sector(IDEState *s)
|
||||
|
@ -588,20 +596,13 @@ static void dma_buf_commit(IDEState *s)
|
|||
qemu_sglist_destroy(&s->sg);
|
||||
}
|
||||
|
||||
static void ide_async_cmd_done(IDEState *s)
|
||||
{
|
||||
if (s->bus->dma->ops->async_cmd_done) {
|
||||
s->bus->dma->ops->async_cmd_done(s->bus->dma);
|
||||
}
|
||||
}
|
||||
|
||||
void ide_set_inactive(IDEState *s, bool more)
|
||||
{
|
||||
s->bus->dma->aiocb = NULL;
|
||||
if (s->bus->dma->ops->set_inactive) {
|
||||
s->bus->dma->ops->set_inactive(s->bus->dma, more);
|
||||
}
|
||||
ide_async_cmd_done(s);
|
||||
ide_cmd_done(s);
|
||||
}
|
||||
|
||||
void ide_dma_error(IDEState *s)
|
||||
|
@ -849,7 +850,7 @@ static void ide_flush_cb(void *opaque, int ret)
|
|||
|
||||
bdrv_acct_done(s->bs, &s->acct);
|
||||
s->status = READY_STAT | SEEK_STAT;
|
||||
ide_async_cmd_done(s);
|
||||
ide_cmd_done(s);
|
||||
ide_set_irq(s->bus);
|
||||
}
|
||||
|
||||
|
@ -1773,6 +1774,7 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
|
|||
s->status |= SEEK_STAT;
|
||||
}
|
||||
|
||||
ide_cmd_done(s);
|
||||
ide_set_irq(s->bus);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue