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