mirror of https://github.com/xemu-project/xemu.git
hw/ide: Move IDE device related definitions to ide-dev.h
Untangle internal.h by moving public IDE device related definitions to ide-dev.h. Signed-off-by: Thomas Huth <thuth@redhat.com> Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20240220085505.30255-5-thuth@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
1b986676eb
commit
5fc5934a4b
|
@ -23,6 +23,7 @@
|
|||
#include "qemu/error-report.h"
|
||||
#include "qemu/module.h"
|
||||
#include "hw/ide/ide-dev.h"
|
||||
#include "hw/ide/internal.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
#include "sysemu/blockdev.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
|
|
@ -20,9 +20,150 @@
|
|||
#ifndef IDE_DEV_H
|
||||
#define IDE_DEV_H
|
||||
|
||||
#include "sysemu/dma.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/block/block.h"
|
||||
#include "hw/ide/internal.h"
|
||||
|
||||
typedef struct IDEDevice IDEDevice;
|
||||
typedef struct IDEState IDEState;
|
||||
typedef struct IDEBus IDEBus;
|
||||
|
||||
typedef void EndTransferFunc(IDEState *);
|
||||
|
||||
#define MAX_IDE_DEVS 2
|
||||
|
||||
#define TYPE_IDE_DEVICE "ide-device"
|
||||
OBJECT_DECLARE_TYPE(IDEDevice, IDEDeviceClass, IDE_DEVICE)
|
||||
|
||||
typedef enum { IDE_HD, IDE_CD, IDE_CFATA } IDEDriveKind;
|
||||
|
||||
struct unreported_events {
|
||||
bool eject_request;
|
||||
bool new_media;
|
||||
};
|
||||
|
||||
enum ide_dma_cmd {
|
||||
IDE_DMA_READ = 0,
|
||||
IDE_DMA_WRITE,
|
||||
IDE_DMA_TRIM,
|
||||
IDE_DMA_ATAPI,
|
||||
IDE_DMA__COUNT
|
||||
};
|
||||
|
||||
/* NOTE: IDEState represents in fact one drive */
|
||||
struct IDEState {
|
||||
IDEBus *bus;
|
||||
uint8_t unit;
|
||||
/* ide config */
|
||||
IDEDriveKind drive_kind;
|
||||
int drive_heads, drive_sectors;
|
||||
int cylinders, heads, sectors, chs_trans;
|
||||
int64_t nb_sectors;
|
||||
int mult_sectors;
|
||||
int identify_set;
|
||||
uint8_t identify_data[512];
|
||||
int drive_serial;
|
||||
char drive_serial_str[21];
|
||||
char drive_model_str[41];
|
||||
uint64_t wwn;
|
||||
/* ide regs */
|
||||
uint8_t feature;
|
||||
uint8_t error;
|
||||
uint32_t nsector;
|
||||
uint8_t sector;
|
||||
uint8_t lcyl;
|
||||
uint8_t hcyl;
|
||||
/* other part of tf for lba48 support */
|
||||
uint8_t hob_feature;
|
||||
uint8_t hob_nsector;
|
||||
uint8_t hob_sector;
|
||||
uint8_t hob_lcyl;
|
||||
uint8_t hob_hcyl;
|
||||
|
||||
uint8_t select;
|
||||
uint8_t status;
|
||||
|
||||
bool io8;
|
||||
bool reset_reverts;
|
||||
|
||||
/* set for lba48 access */
|
||||
uint8_t lba48;
|
||||
BlockBackend *blk;
|
||||
char version[9];
|
||||
/* ATAPI specific */
|
||||
struct unreported_events events;
|
||||
uint8_t sense_key;
|
||||
uint8_t asc;
|
||||
bool tray_open;
|
||||
bool tray_locked;
|
||||
uint8_t cdrom_changed;
|
||||
int packet_transfer_size;
|
||||
int elementary_transfer_size;
|
||||
int32_t io_buffer_index;
|
||||
int lba;
|
||||
int cd_sector_size;
|
||||
int atapi_dma; /* true if dma is requested for the packet cmd */
|
||||
BlockAcctCookie acct;
|
||||
BlockAIOCB *pio_aiocb;
|
||||
QEMUIOVector qiov;
|
||||
QLIST_HEAD(, IDEBufferedRequest) buffered_requests;
|
||||
/* ATA DMA state */
|
||||
uint64_t io_buffer_offset;
|
||||
int32_t io_buffer_size;
|
||||
QEMUSGList sg;
|
||||
/* PIO transfer handling */
|
||||
int req_nb_sectors; /* number of sectors per interrupt */
|
||||
EndTransferFunc *end_transfer_func;
|
||||
uint8_t *data_ptr;
|
||||
uint8_t *data_end;
|
||||
uint8_t *io_buffer;
|
||||
/* PIO save/restore */
|
||||
int32_t io_buffer_total_len;
|
||||
int32_t cur_io_buffer_offset;
|
||||
int32_t cur_io_buffer_len;
|
||||
uint8_t end_transfer_fn_idx;
|
||||
QEMUTimer *sector_write_timer; /* only used for win2k install hack */
|
||||
uint32_t irq_count; /* counts IRQs when using win2k install hack */
|
||||
/* CF-ATA extended error */
|
||||
uint8_t ext_error;
|
||||
/* CF-ATA metadata storage */
|
||||
uint32_t mdata_size;
|
||||
uint8_t *mdata_storage;
|
||||
int media_changed;
|
||||
enum ide_dma_cmd dma_cmd;
|
||||
/* SMART */
|
||||
uint8_t smart_enabled;
|
||||
uint8_t smart_autosave;
|
||||
int smart_errors;
|
||||
uint8_t smart_selftest_count;
|
||||
uint8_t *smart_selftest_data;
|
||||
/* AHCI */
|
||||
int ncq_queues;
|
||||
};
|
||||
|
||||
struct IDEDeviceClass {
|
||||
DeviceClass parent_class;
|
||||
void (*realize)(IDEDevice *dev, Error **errp);
|
||||
};
|
||||
|
||||
struct IDEDevice {
|
||||
DeviceState qdev;
|
||||
uint32_t unit;
|
||||
BlockConf conf;
|
||||
int chs_trans;
|
||||
char *version;
|
||||
char *serial;
|
||||
char *model;
|
||||
uint64_t wwn;
|
||||
/*
|
||||
* 0x0000 - rotation rate not reported
|
||||
* 0x0001 - non-rotating medium (SSD)
|
||||
* 0x0002-0x0400 - reserved
|
||||
* 0x0401-0xffe - rotations per minute
|
||||
* 0xffff - reserved
|
||||
*/
|
||||
uint16_t rotation_rate;
|
||||
};
|
||||
|
||||
typedef struct IDEDrive {
|
||||
IDEDevice dev;
|
||||
|
|
|
@ -8,23 +8,17 @@
|
|||
*/
|
||||
|
||||
#include "hw/ide.h"
|
||||
#include "sysemu/dma.h"
|
||||
#include "hw/block/block.h"
|
||||
#include "exec/ioport.h"
|
||||
#include "hw/ide/ide-dma.h"
|
||||
#include "hw/ide/ide-dev.h"
|
||||
|
||||
/* debug IDE devices */
|
||||
#define USE_DMA_CDROM
|
||||
#include "qom/object.h"
|
||||
|
||||
typedef struct IDEDevice IDEDevice;
|
||||
typedef struct IDEState IDEState;
|
||||
|
||||
#define TYPE_IDE_BUS "IDE"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
||||
|
||||
#define MAX_IDE_DEVS 2
|
||||
|
||||
/* Device/Head ("select") Register */
|
||||
#define ATA_DEV_SELECT 0x10
|
||||
/* ATA1,3: Defined as '1'.
|
||||
|
@ -327,23 +321,6 @@ OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
|||
#define SMART_DISABLE 0xd9
|
||||
#define SMART_STATUS 0xda
|
||||
|
||||
typedef enum { IDE_HD, IDE_CD, IDE_CFATA } IDEDriveKind;
|
||||
|
||||
typedef void EndTransferFunc(IDEState *);
|
||||
|
||||
struct unreported_events {
|
||||
bool eject_request;
|
||||
bool new_media;
|
||||
};
|
||||
|
||||
enum ide_dma_cmd {
|
||||
IDE_DMA_READ = 0,
|
||||
IDE_DMA_WRITE,
|
||||
IDE_DMA_TRIM,
|
||||
IDE_DMA_ATAPI,
|
||||
IDE_DMA__COUNT
|
||||
};
|
||||
|
||||
extern const char *IDE_DMA_CMD_lookup[IDE_DMA__COUNT];
|
||||
|
||||
extern const MemoryRegionPortio ide_portio_list[];
|
||||
|
@ -361,97 +338,6 @@ typedef struct IDEBufferedRequest {
|
|||
bool orphaned;
|
||||
} IDEBufferedRequest;
|
||||
|
||||
/* NOTE: IDEState represents in fact one drive */
|
||||
struct IDEState {
|
||||
IDEBus *bus;
|
||||
uint8_t unit;
|
||||
/* ide config */
|
||||
IDEDriveKind drive_kind;
|
||||
int drive_heads, drive_sectors;
|
||||
int cylinders, heads, sectors, chs_trans;
|
||||
int64_t nb_sectors;
|
||||
int mult_sectors;
|
||||
int identify_set;
|
||||
uint8_t identify_data[512];
|
||||
int drive_serial;
|
||||
char drive_serial_str[21];
|
||||
char drive_model_str[41];
|
||||
uint64_t wwn;
|
||||
/* ide regs */
|
||||
uint8_t feature;
|
||||
uint8_t error;
|
||||
uint32_t nsector;
|
||||
uint8_t sector;
|
||||
uint8_t lcyl;
|
||||
uint8_t hcyl;
|
||||
/* other part of tf for lba48 support */
|
||||
uint8_t hob_feature;
|
||||
uint8_t hob_nsector;
|
||||
uint8_t hob_sector;
|
||||
uint8_t hob_lcyl;
|
||||
uint8_t hob_hcyl;
|
||||
|
||||
uint8_t select;
|
||||
uint8_t status;
|
||||
|
||||
bool io8;
|
||||
bool reset_reverts;
|
||||
|
||||
/* set for lba48 access */
|
||||
uint8_t lba48;
|
||||
BlockBackend *blk;
|
||||
char version[9];
|
||||
/* ATAPI specific */
|
||||
struct unreported_events events;
|
||||
uint8_t sense_key;
|
||||
uint8_t asc;
|
||||
bool tray_open;
|
||||
bool tray_locked;
|
||||
uint8_t cdrom_changed;
|
||||
int packet_transfer_size;
|
||||
int elementary_transfer_size;
|
||||
int32_t io_buffer_index;
|
||||
int lba;
|
||||
int cd_sector_size;
|
||||
int atapi_dma; /* true if dma is requested for the packet cmd */
|
||||
BlockAcctCookie acct;
|
||||
BlockAIOCB *pio_aiocb;
|
||||
QEMUIOVector qiov;
|
||||
QLIST_HEAD(, IDEBufferedRequest) buffered_requests;
|
||||
/* ATA DMA state */
|
||||
uint64_t io_buffer_offset;
|
||||
int32_t io_buffer_size;
|
||||
QEMUSGList sg;
|
||||
/* PIO transfer handling */
|
||||
int req_nb_sectors; /* number of sectors per interrupt */
|
||||
EndTransferFunc *end_transfer_func;
|
||||
uint8_t *data_ptr;
|
||||
uint8_t *data_end;
|
||||
uint8_t *io_buffer;
|
||||
/* PIO save/restore */
|
||||
int32_t io_buffer_total_len;
|
||||
int32_t cur_io_buffer_offset;
|
||||
int32_t cur_io_buffer_len;
|
||||
uint8_t end_transfer_fn_idx;
|
||||
QEMUTimer *sector_write_timer; /* only used for win2k install hack */
|
||||
uint32_t irq_count; /* counts IRQs when using win2k install hack */
|
||||
/* CF-ATA extended error */
|
||||
uint8_t ext_error;
|
||||
/* CF-ATA metadata storage */
|
||||
uint32_t mdata_size;
|
||||
uint8_t *mdata_storage;
|
||||
int media_changed;
|
||||
enum ide_dma_cmd dma_cmd;
|
||||
/* SMART */
|
||||
uint8_t smart_enabled;
|
||||
uint8_t smart_autosave;
|
||||
int smart_errors;
|
||||
uint8_t smart_selftest_count;
|
||||
uint8_t *smart_selftest_data;
|
||||
/* AHCI */
|
||||
int ncq_queues;
|
||||
};
|
||||
|
||||
struct IDEBus {
|
||||
BusState qbus;
|
||||
IDEDevice *master;
|
||||
|
@ -475,33 +361,6 @@ struct IDEBus {
|
|||
VMChangeStateEntry *vmstate;
|
||||
};
|
||||
|
||||
#define TYPE_IDE_DEVICE "ide-device"
|
||||
OBJECT_DECLARE_TYPE(IDEDevice, IDEDeviceClass, IDE_DEVICE)
|
||||
|
||||
struct IDEDeviceClass {
|
||||
DeviceClass parent_class;
|
||||
void (*realize)(IDEDevice *dev, Error **errp);
|
||||
};
|
||||
|
||||
struct IDEDevice {
|
||||
DeviceState qdev;
|
||||
uint32_t unit;
|
||||
BlockConf conf;
|
||||
int chs_trans;
|
||||
char *version;
|
||||
char *serial;
|
||||
char *model;
|
||||
uint64_t wwn;
|
||||
/*
|
||||
* 0x0000 - rotation rate not reported
|
||||
* 0x0001 - non-rotating medium (SSD)
|
||||
* 0x0002-0x0400 - reserved
|
||||
* 0x0401-0xffe - rotations per minute
|
||||
* 0xffff - reserved
|
||||
*/
|
||||
uint16_t rotation_rate;
|
||||
};
|
||||
|
||||
/* These are used for the error_status field of IDEBus */
|
||||
#define IDE_RETRY_MASK 0xf8
|
||||
#define IDE_RETRY_DMA 0x08
|
||||
|
|
Loading…
Reference in New Issue