mirror of https://github.com/proxmox/mirror_qemu
ide: Clean up ide_exec_cmd()
All commands are now converted to ide_cmd_table handlers, so it can be unconditional now and the old switch block can go. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>master
parent
ff35267730
commit
dfe1ea8fc4
|
@ -1694,6 +1694,7 @@ static bool ide_cmd_permitted(IDEState *s, uint32_t cmd)
|
||||||
void ide_exec_cmd(IDEBus *bus, uint32_t val)
|
void ide_exec_cmd(IDEBus *bus, uint32_t val)
|
||||||
{
|
{
|
||||||
IDEState *s;
|
IDEState *s;
|
||||||
|
bool complete;
|
||||||
|
|
||||||
#if defined(DEBUG_IDE)
|
#if defined(DEBUG_IDE)
|
||||||
printf("ide: CMD=%02x\n", val);
|
printf("ide: CMD=%02x\n", val);
|
||||||
|
@ -1708,37 +1709,24 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!ide_cmd_permitted(s, val)) {
|
if (!ide_cmd_permitted(s, val)) {
|
||||||
goto abort_cmd;
|
ide_abort_command(s);
|
||||||
}
|
ide_set_irq(s->bus);
|
||||||
|
|
||||||
if (ide_cmd_table[val].handler != NULL) {
|
|
||||||
bool complete;
|
|
||||||
|
|
||||||
s->status = READY_STAT | BUSY_STAT;
|
|
||||||
s->error = 0;
|
|
||||||
|
|
||||||
complete = ide_cmd_table[val].handler(s, val);
|
|
||||||
if (complete) {
|
|
||||||
s->status &= ~BUSY_STAT;
|
|
||||||
assert(!!s->error == !!(s->status & ERR_STAT));
|
|
||||||
|
|
||||||
if ((ide_cmd_table[val].flags & SET_DSC) && !s->error) {
|
|
||||||
s->status |= SEEK_STAT;
|
|
||||||
}
|
|
||||||
|
|
||||||
ide_set_irq(s->bus);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(val) {
|
s->status = READY_STAT | BUSY_STAT;
|
||||||
default:
|
s->error = 0;
|
||||||
/* should not be reachable */
|
|
||||||
abort_cmd:
|
complete = ide_cmd_table[val].handler(s, val);
|
||||||
ide_abort_command(s);
|
if (complete) {
|
||||||
|
s->status &= ~BUSY_STAT;
|
||||||
|
assert(!!s->error == !!(s->status & ERR_STAT));
|
||||||
|
|
||||||
|
if ((ide_cmd_table[val].flags & SET_DSC) && !s->error) {
|
||||||
|
s->status |= SEEK_STAT;
|
||||||
|
}
|
||||||
|
|
||||||
ide_set_irq(s->bus);
|
ide_set_irq(s->bus);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue