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/error-report.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include "hw/ide/ide-dev.h"
|
#include "hw/ide/ide-dev.h"
|
||||||
|
#include "hw/ide/internal.h"
|
||||||
#include "sysemu/block-backend.h"
|
#include "sysemu/block-backend.h"
|
||||||
#include "sysemu/blockdev.h"
|
#include "sysemu/blockdev.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
|
@ -20,9 +20,150 @@
|
|||||||
#ifndef IDE_DEV_H
|
#ifndef IDE_DEV_H
|
||||||
#define IDE_DEV_H
|
#define IDE_DEV_H
|
||||||
|
|
||||||
|
#include "sysemu/dma.h"
|
||||||
#include "hw/qdev-properties.h"
|
#include "hw/qdev-properties.h"
|
||||||
#include "hw/block/block.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 {
|
typedef struct IDEDrive {
|
||||||
IDEDevice dev;
|
IDEDevice dev;
|
||||||
|
@ -8,23 +8,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hw/ide.h"
|
#include "hw/ide.h"
|
||||||
#include "sysemu/dma.h"
|
|
||||||
#include "hw/block/block.h"
|
|
||||||
#include "exec/ioport.h"
|
#include "exec/ioport.h"
|
||||||
#include "hw/ide/ide-dma.h"
|
#include "hw/ide/ide-dma.h"
|
||||||
|
#include "hw/ide/ide-dev.h"
|
||||||
|
|
||||||
/* debug IDE devices */
|
/* debug IDE devices */
|
||||||
#define USE_DMA_CDROM
|
#define USE_DMA_CDROM
|
||||||
#include "qom/object.h"
|
#include "qom/object.h"
|
||||||
|
|
||||||
typedef struct IDEDevice IDEDevice;
|
|
||||||
typedef struct IDEState IDEState;
|
|
||||||
|
|
||||||
#define TYPE_IDE_BUS "IDE"
|
#define TYPE_IDE_BUS "IDE"
|
||||||
OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
||||||
|
|
||||||
#define MAX_IDE_DEVS 2
|
|
||||||
|
|
||||||
/* Device/Head ("select") Register */
|
/* Device/Head ("select") Register */
|
||||||
#define ATA_DEV_SELECT 0x10
|
#define ATA_DEV_SELECT 0x10
|
||||||
/* ATA1,3: Defined as '1'.
|
/* ATA1,3: Defined as '1'.
|
||||||
@ -327,23 +321,6 @@ OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS)
|
|||||||
#define SMART_DISABLE 0xd9
|
#define SMART_DISABLE 0xd9
|
||||||
#define SMART_STATUS 0xda
|
#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 char *IDE_DMA_CMD_lookup[IDE_DMA__COUNT];
|
||||||
|
|
||||||
extern const MemoryRegionPortio ide_portio_list[];
|
extern const MemoryRegionPortio ide_portio_list[];
|
||||||
@ -361,97 +338,6 @@ typedef struct IDEBufferedRequest {
|
|||||||
bool orphaned;
|
bool orphaned;
|
||||||
} IDEBufferedRequest;
|
} 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 {
|
struct IDEBus {
|
||||||
BusState qbus;
|
BusState qbus;
|
||||||
IDEDevice *master;
|
IDEDevice *master;
|
||||||
@ -475,33 +361,6 @@ struct IDEBus {
|
|||||||
VMChangeStateEntry *vmstate;
|
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 */
|
/* These are used for the error_status field of IDEBus */
|
||||||
#define IDE_RETRY_MASK 0xf8
|
#define IDE_RETRY_MASK 0xf8
|
||||||
#define IDE_RETRY_DMA 0x08
|
#define IDE_RETRY_DMA 0x08
|
||||||
|
Loading…
x
Reference in New Issue
Block a user