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