1f74c6177SThomas Huth #ifndef HW_IDE_BUS_H 2f74c6177SThomas Huth #define HW_IDE_BUS_H 3f74c6177SThomas Huth 4*91a85383SRichard Henderson #include "system/ioport.h" 5f74c6177SThomas Huth #include "hw/ide/ide-dev.h" 6f74c6177SThomas Huth #include "hw/ide/ide-dma.h" 7f74c6177SThomas Huth 8f74c6177SThomas Huth struct IDEBus { 9f74c6177SThomas Huth BusState qbus; 10f74c6177SThomas Huth IDEDevice *master; 11f74c6177SThomas Huth IDEDevice *slave; 12f74c6177SThomas Huth IDEState ifs[2]; 13f74c6177SThomas Huth QEMUBH *bh; 14f74c6177SThomas Huth 15f74c6177SThomas Huth int bus_id; 16f74c6177SThomas Huth int max_units; 17f74c6177SThomas Huth IDEDMA *dma; 18f74c6177SThomas Huth uint8_t unit; 19f74c6177SThomas Huth uint8_t cmd; 20f74c6177SThomas Huth qemu_irq irq; /* bus output */ 21f74c6177SThomas Huth 22f74c6177SThomas Huth int error_status; 23f74c6177SThomas Huth uint8_t retry_unit; 24f74c6177SThomas Huth int64_t retry_sector_num; 25f74c6177SThomas Huth uint32_t retry_nsector; 26f74c6177SThomas Huth PortioList portio_list; 27f74c6177SThomas Huth PortioList portio2_list; 28f74c6177SThomas Huth VMChangeStateEntry *vmstate; 29f74c6177SThomas Huth }; 30f74c6177SThomas Huth 31f74c6177SThomas Huth #define TYPE_IDE_BUS "IDE" 32f74c6177SThomas Huth OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS) 33f74c6177SThomas Huth 34f74c6177SThomas Huth void ide_bus_init(IDEBus *idebus, size_t idebus_size, DeviceState *dev, 35f74c6177SThomas Huth int bus_id, int max_units); 36f74c6177SThomas Huth IDEDevice *ide_bus_create_drive(IDEBus *bus, int unit, DriveInfo *drive); 37f74c6177SThomas Huth 38f74c6177SThomas Huth int ide_get_geometry(BusState *bus, int unit, 39f74c6177SThomas Huth int16_t *cyls, int8_t *heads, int8_t *secs); 40f74c6177SThomas Huth int ide_get_bios_chs_trans(BusState *bus, int unit); 41f74c6177SThomas Huth 42f74c6177SThomas Huth #endif 43