mirror of
https://git.proxmox.com/git/qemu
synced 2025-07-09 17:17:20 +00:00
ide: Convert WIN_IDENTIFY to ide_cmd_table handler
Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
4286434cd6
commit
1c66869a02
@ -1019,6 +1019,28 @@ static bool cmd_data_set_management(IDEState *s, uint8_t cmd)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool cmd_identify(IDEState *s, uint8_t cmd)
|
||||||
|
{
|
||||||
|
if (s->bs && s->drive_kind != IDE_CD) {
|
||||||
|
if (s->drive_kind != IDE_CFATA) {
|
||||||
|
ide_identify(s);
|
||||||
|
} else {
|
||||||
|
ide_cfata_identify(s);
|
||||||
|
}
|
||||||
|
s->status = READY_STAT | SEEK_STAT;
|
||||||
|
ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
|
||||||
|
ide_set_irq(s->bus);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if (s->drive_kind == IDE_CD) {
|
||||||
|
ide_set_signature(s);
|
||||||
|
}
|
||||||
|
ide_abort_command(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#define HD_OK (1u << IDE_HD)
|
#define HD_OK (1u << IDE_HD)
|
||||||
#define CD_OK (1u << IDE_CD)
|
#define CD_OK (1u << IDE_CD)
|
||||||
#define CFA_OK (1u << IDE_CFATA)
|
#define CFA_OK (1u << IDE_CFATA)
|
||||||
@ -1086,7 +1108,7 @@ static const struct {
|
|||||||
[WIN_SLEEPNOW1] = { NULL, ALL_OK },
|
[WIN_SLEEPNOW1] = { NULL, ALL_OK },
|
||||||
[WIN_FLUSH_CACHE] = { NULL, ALL_OK },
|
[WIN_FLUSH_CACHE] = { NULL, ALL_OK },
|
||||||
[WIN_FLUSH_CACHE_EXT] = { NULL, HD_CFA_OK },
|
[WIN_FLUSH_CACHE_EXT] = { NULL, HD_CFA_OK },
|
||||||
[WIN_IDENTIFY] = { NULL, ALL_OK },
|
[WIN_IDENTIFY] = { cmd_identify, ALL_OK },
|
||||||
[WIN_SETFEATURES] = { NULL, ALL_OK },
|
[WIN_SETFEATURES] = { NULL, ALL_OK },
|
||||||
[IBM_SENSE_CONDITION] = { NULL, CFA_OK },
|
[IBM_SENSE_CONDITION] = { NULL, CFA_OK },
|
||||||
[CFA_WEAR_LEVEL] = { NULL, HD_CFA_OK },
|
[CFA_WEAR_LEVEL] = { NULL, HD_CFA_OK },
|
||||||
@ -1144,22 +1166,6 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch(val) {
|
switch(val) {
|
||||||
case WIN_IDENTIFY:
|
|
||||||
if (s->bs && s->drive_kind != IDE_CD) {
|
|
||||||
if (s->drive_kind != IDE_CFATA)
|
|
||||||
ide_identify(s);
|
|
||||||
else
|
|
||||||
ide_cfata_identify(s);
|
|
||||||
s->status = READY_STAT | SEEK_STAT;
|
|
||||||
ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
|
|
||||||
} else {
|
|
||||||
if (s->drive_kind == IDE_CD) {
|
|
||||||
ide_set_signature(s);
|
|
||||||
}
|
|
||||||
ide_abort_command(s);
|
|
||||||
}
|
|
||||||
ide_set_irq(s->bus);
|
|
||||||
break;
|
|
||||||
case WIN_SPECIFY:
|
case WIN_SPECIFY:
|
||||||
case WIN_RECAL:
|
case WIN_RECAL:
|
||||||
s->error = 0;
|
s->error = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user