diff options
author | Kevin Wolf <kwolf@redhat.com> | 2013-06-18 10:25:56 +0200 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2013-06-24 10:25:15 +0200 |
commit | 4286434cd607b7dea8fb3366f1529abf0ae39fa9 (patch) | |
tree | a025db018be207368244efcb41958e174d7fbe76 /hw/ide/core.c | |
parent | a0436e9239d29837955a60e916f876f857d46452 (diff) | |
download | hqemu-4286434cd607b7dea8fb3366f1529abf0ae39fa9.zip hqemu-4286434cd607b7dea8fb3366f1529abf0ae39fa9.tar.gz |
ide: Convert WIN_DSM to ide_cmd_table handler
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw/ide/core.c')
-rw-r--r-- | hw/ide/core.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/hw/ide/core.c b/hw/ide/core.c index cd9de14..567515e 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -1004,6 +1004,21 @@ void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val) } } +static bool cmd_data_set_management(IDEState *s, uint8_t cmd) +{ + switch (s->feature) { + case DSM_TRIM: + if (s->bs) { + ide_sector_start_dma(s, IDE_DMA_TRIM); + return false; + } + break; + } + + ide_abort_command(s); + return true; +} + #define HD_OK (1u << IDE_HD) #define CD_OK (1u << IDE_CD) #define CFA_OK (1u << IDE_CFATA) @@ -1021,7 +1036,7 @@ static const struct { } ide_cmd_table[0x100] = { /* NOP not implemented, mandatory for CD */ [CFA_REQ_EXT_ERROR_CODE] = { NULL, CFA_OK }, - [WIN_DSM] = { NULL, ALL_OK }, + [WIN_DSM] = { cmd_data_set_management, ALL_OK }, [WIN_DEVICE_RESET] = { NULL, CD_OK }, [WIN_RECAL] = { NULL, HD_CFA_OK }, [WIN_READ] = { NULL, ALL_OK }, @@ -1129,18 +1144,6 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val) } switch(val) { - case WIN_DSM: - switch (s->feature) { - case DSM_TRIM: - if (!s->bs) { - goto abort_cmd; - } - ide_sector_start_dma(s, IDE_DMA_TRIM); - break; - default: - goto abort_cmd; - } - break; case WIN_IDENTIFY: if (s->bs && s->drive_kind != IDE_CD) { if (s->drive_kind != IDE_CFATA) |