Juan Quintela | 65c0f13 | 2009-10-07 16:56:22 +0200 | [diff] [blame] | 1 | #ifndef HW_IDE_PCI_H |
| 2 | #define HW_IDE_PCI_H |
| 3 | |
| 4 | #include <hw/ide/internal.h> |
| 5 | |
Paolo Bonzini | 7e2648d | 2014-08-04 17:11:13 -0400 | [diff] [blame] | 6 | #define BM_STATUS_DMAING 0x01 |
| 7 | #define BM_STATUS_ERROR 0x02 |
| 8 | #define BM_STATUS_INT 0x04 |
| 9 | |
| 10 | #define BM_CMD_START 0x01 |
| 11 | #define BM_CMD_READ 0x08 |
| 12 | |
Alexander Graf | 40a6238 | 2010-12-15 00:23:00 +0100 | [diff] [blame] | 13 | typedef struct BMDMAState { |
| 14 | IDEDMA dma; |
| 15 | uint8_t cmd; |
| 16 | uint8_t status; |
| 17 | uint32_t addr; |
| 18 | |
| 19 | IDEBus *bus; |
| 20 | /* current transfer state */ |
| 21 | uint32_t cur_addr; |
| 22 | uint32_t cur_prd_last; |
| 23 | uint32_t cur_prd_addr; |
| 24 | uint32_t cur_prd_len; |
Markus Armbruster | 097310b | 2014-10-07 13:59:15 +0200 | [diff] [blame] | 25 | BlockCompletionFunc *dma_cb; |
Avi Kivity | a9deb8c | 2011-08-08 16:09:11 +0300 | [diff] [blame] | 26 | MemoryRegion addr_ioport; |
| 27 | MemoryRegion extra_io; |
Alexander Graf | 40a6238 | 2010-12-15 00:23:00 +0100 | [diff] [blame] | 28 | qemu_irq irq; |
Kevin Wolf | def9379 | 2011-05-26 15:00:34 +0200 | [diff] [blame] | 29 | |
| 30 | /* Bit 0-2 and 7: BM status register |
| 31 | * Bit 3-6: bus->error_status */ |
| 32 | uint8_t migration_compat_status; |
Paolo Bonzini | a96cb23 | 2015-02-23 11:17:57 -0500 | [diff] [blame] | 33 | uint8_t migration_retry_unit; |
Paolo Bonzini | dc5d0af | 2015-02-23 11:17:58 -0500 | [diff] [blame] | 34 | int64_t migration_retry_sector_num; |
| 35 | uint32_t migration_retry_nsector; |
Paolo Bonzini | a96cb23 | 2015-02-23 11:17:57 -0500 | [diff] [blame] | 36 | |
Avi Kivity | a9deb8c | 2011-08-08 16:09:11 +0300 | [diff] [blame] | 37 | struct PCIIDEState *pci_dev; |
Alexander Graf | 40a6238 | 2010-12-15 00:23:00 +0100 | [diff] [blame] | 38 | } BMDMAState; |
| 39 | |
Avi Kivity | a9deb8c | 2011-08-08 16:09:11 +0300 | [diff] [blame] | 40 | typedef struct CMD646BAR { |
| 41 | MemoryRegion cmd; |
| 42 | MemoryRegion data; |
| 43 | IDEBus *bus; |
| 44 | struct PCIIDEState *pci_dev; |
| 45 | } CMD646BAR; |
| 46 | |
Andreas Färber | f6c11d5 | 2013-07-17 18:44:48 +0200 | [diff] [blame] | 47 | #define TYPE_PCI_IDE "pci-ide" |
| 48 | #define PCI_IDE(obj) OBJECT_CHECK(PCIIDEState, (obj), TYPE_PCI_IDE) |
| 49 | |
Juan Quintela | 65c0f13 | 2009-10-07 16:56:22 +0200 | [diff] [blame] | 50 | typedef struct PCIIDEState { |
Andreas Färber | f6c11d5 | 2013-07-17 18:44:48 +0200 | [diff] [blame] | 51 | /*< private >*/ |
| 52 | PCIDevice parent_obj; |
| 53 | /*< public >*/ |
| 54 | |
Juan Quintela | 65c0f13 | 2009-10-07 16:56:22 +0200 | [diff] [blame] | 55 | IDEBus bus[2]; |
| 56 | BMDMAState bmdma[2]; |
Juan Quintela | 7e07831 | 2009-10-07 16:56:26 +0200 | [diff] [blame] | 57 | uint32_t secondary; /* used only for cmd646 */ |
Avi Kivity | a9deb8c | 2011-08-08 16:09:11 +0300 | [diff] [blame] | 58 | MemoryRegion bmdma_bar; |
| 59 | CMD646BAR cmd646_bar[2]; /* used only for cmd646 */ |
Juan Quintela | 65c0f13 | 2009-10-07 16:56:22 +0200 | [diff] [blame] | 60 | } PCIIDEState; |
| 61 | |
Alexander Graf | 40a6238 | 2010-12-15 00:23:00 +0100 | [diff] [blame] | 62 | |
| 63 | static inline IDEState *bmdma_active_if(BMDMAState *bmdma) |
| 64 | { |
Paolo Bonzini | a96cb23 | 2015-02-23 11:17:57 -0500 | [diff] [blame] | 65 | assert(bmdma->bus->retry_unit != (uint8_t)-1); |
| 66 | return bmdma->bus->ifs + bmdma->bus->retry_unit; |
Alexander Graf | 40a6238 | 2010-12-15 00:23:00 +0100 | [diff] [blame] | 67 | } |
| 68 | |
| 69 | |
Avi Kivity | a9deb8c | 2011-08-08 16:09:11 +0300 | [diff] [blame] | 70 | void bmdma_init(IDEBus *bus, BMDMAState *bm, PCIIDEState *d); |
| 71 | void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val); |
| 72 | extern MemoryRegionOps bmdma_addr_ioport_ops; |
Juan Quintela | 3e7e155 | 2009-10-07 16:56:23 +0200 | [diff] [blame] | 73 | void pci_ide_create_devs(PCIDevice *dev, DriveInfo **hd_table); |
Juan Quintela | 407a4f3 | 2009-10-07 20:55:32 +0200 | [diff] [blame] | 74 | |
| 75 | extern const VMStateDescription vmstate_ide_pci; |
Juan Quintela | 65c0f13 | 2009-10-07 16:56:22 +0200 | [diff] [blame] | 76 | #endif |