|
|
1.1 root 1: #ifndef HW_IDE_PCI_H
2: #define HW_IDE_PCI_H
3:
4: #include <hw/ide/internal.h>
5:
1.1.1.2 root 6: typedef struct BMDMAState {
7: IDEDMA dma;
8: uint8_t cmd;
9: uint8_t status;
10: uint32_t addr;
11:
12: IDEBus *bus;
13: /* current transfer state */
14: uint32_t cur_addr;
15: uint32_t cur_prd_last;
16: uint32_t cur_prd_addr;
17: uint32_t cur_prd_len;
18: uint8_t unit;
19: BlockDriverCompletionFunc *dma_cb;
20: int64_t sector_num;
21: uint32_t nsector;
1.1.1.4 ! root 22: MemoryRegion addr_ioport;
! 23: MemoryRegion extra_io;
1.1.1.2 root 24: QEMUBH *bh;
25: qemu_irq irq;
1.1.1.3 root 26:
27: /* Bit 0-2 and 7: BM status register
28: * Bit 3-6: bus->error_status */
29: uint8_t migration_compat_status;
1.1.1.4 ! root 30: struct PCIIDEState *pci_dev;
1.1.1.2 root 31: } BMDMAState;
32:
1.1.1.4 ! root 33: typedef struct CMD646BAR {
! 34: MemoryRegion cmd;
! 35: MemoryRegion data;
! 36: IDEBus *bus;
! 37: struct PCIIDEState *pci_dev;
! 38: } CMD646BAR;
! 39:
1.1 root 40: typedef struct PCIIDEState {
41: PCIDevice dev;
42: IDEBus bus[2];
43: BMDMAState bmdma[2];
44: uint32_t secondary; /* used only for cmd646 */
1.1.1.4 ! root 45: MemoryRegion bmdma_bar;
! 46: CMD646BAR cmd646_bar[2]; /* used only for cmd646 */
1.1 root 47: } PCIIDEState;
48:
1.1.1.2 root 49:
50: static inline IDEState *bmdma_active_if(BMDMAState *bmdma)
51: {
52: assert(bmdma->unit != (uint8_t)-1);
53: return bmdma->bus->ifs + bmdma->unit;
54: }
55:
56:
1.1.1.4 ! root 57: void bmdma_init(IDEBus *bus, BMDMAState *bm, PCIIDEState *d);
! 58: void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val);
! 59: extern MemoryRegionOps bmdma_addr_ioport_ops;
1.1 root 60: void pci_ide_create_devs(PCIDevice *dev, DriveInfo **hd_table);
61:
62: extern const VMStateDescription vmstate_ide_pci;
63: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.