| #ifndef HW_IDE_BUS_H | 
 | #define HW_IDE_BUS_H | 
 |  | 
 | #include "exec/ioport.h" | 
 | #include "hw/ide/ide-dev.h" | 
 | #include "hw/ide/ide-dma.h" | 
 |  | 
 | struct IDEBus { | 
 |     BusState qbus; | 
 |     IDEDevice *master; | 
 |     IDEDevice *slave; | 
 |     IDEState ifs[2]; | 
 |     QEMUBH *bh; | 
 |  | 
 |     int bus_id; | 
 |     int max_units; | 
 |     IDEDMA *dma; | 
 |     uint8_t unit; | 
 |     uint8_t cmd; | 
 |     qemu_irq irq; /* bus output */ | 
 |  | 
 |     int error_status; | 
 |     uint8_t retry_unit; | 
 |     int64_t retry_sector_num; | 
 |     uint32_t retry_nsector; | 
 |     PortioList portio_list; | 
 |     PortioList portio2_list; | 
 |     VMChangeStateEntry *vmstate; | 
 | }; | 
 |  | 
 | #define TYPE_IDE_BUS "IDE" | 
 | OBJECT_DECLARE_SIMPLE_TYPE(IDEBus, IDE_BUS) | 
 |  | 
 | void ide_bus_init(IDEBus *idebus, size_t idebus_size, DeviceState *dev, | 
 |                   int bus_id, int max_units); | 
 | IDEDevice *ide_bus_create_drive(IDEBus *bus, int unit, DriveInfo *drive); | 
 |  | 
 | int ide_get_geometry(BusState *bus, int unit, | 
 |                      int16_t *cyls, int8_t *heads, int8_t *secs); | 
 | int ide_get_bios_chs_trans(BusState *bus, int unit); | 
 |  | 
 | #endif |