mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
ide: add TRIM support
Add support for TRIM sub function of the data set management command, and wire it up to the qemu discard infrastructure. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
4e1e00515e
commit
d353fb72f5
5 changed files with 124 additions and 5 deletions
|
@ -62,7 +62,11 @@ typedef struct IDEDMAOps IDEDMAOps;
|
|||
*/
|
||||
#define CFA_REQ_EXT_ERROR_CODE 0x03 /* CFA Request Extended Error Code */
|
||||
/*
|
||||
* 0x04->0x07 Reserved
|
||||
* 0x04->0x05 Reserved
|
||||
*/
|
||||
#define WIN_DSM 0x06
|
||||
/*
|
||||
* 0x07 Reserved
|
||||
*/
|
||||
#define WIN_SRST 0x08 /* ATAPI soft reset command */
|
||||
#define WIN_DEVICE_RESET 0x08
|
||||
|
@ -190,6 +194,9 @@ typedef struct IDEDMAOps IDEDMAOps;
|
|||
|
||||
#define IDE_DMA_BUF_SECTORS 256
|
||||
|
||||
/* feature values for Data Set Management */
|
||||
#define DSM_TRIM 0x01
|
||||
|
||||
#if (IDE_DMA_BUF_SECTORS < MAX_MULT_SECTORS)
|
||||
#error "IDE_DMA_BUF_SECTORS must be bigger or equal to MAX_MULT_SECTORS"
|
||||
#endif
|
||||
|
@ -382,6 +389,7 @@ struct unreported_events {
|
|||
enum ide_dma_cmd {
|
||||
IDE_DMA_READ,
|
||||
IDE_DMA_WRITE,
|
||||
IDE_DMA_TRIM,
|
||||
};
|
||||
|
||||
#define ide_cmd_is_read(s) \
|
||||
|
@ -521,6 +529,7 @@ struct IDEDeviceInfo {
|
|||
#define BM_STATUS_PIO_RETRY 0x10
|
||||
#define BM_STATUS_RETRY_READ 0x20
|
||||
#define BM_STATUS_RETRY_FLUSH 0x40
|
||||
#define BM_STATUS_RETRY_TRIM 0x80
|
||||
|
||||
#define BM_MIGRATION_COMPAT_STATUS_BITS \
|
||||
(BM_STATUS_DMA_RETRY | BM_STATUS_PIO_RETRY | \
|
||||
|
@ -591,6 +600,9 @@ void ide_transfer_start(IDEState *s, uint8_t *buf, int size,
|
|||
EndTransferFunc *end_transfer_func);
|
||||
void ide_transfer_stop(IDEState *s);
|
||||
void ide_set_inactive(IDEState *s);
|
||||
BlockDriverAIOCB *ide_issue_trim(BlockDriverState *bs,
|
||||
int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
|
||||
BlockDriverCompletionFunc *cb, void *opaque);
|
||||
|
||||
/* hw/ide/atapi.c */
|
||||
void ide_atapi_cmd(IDEState *s);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue