root / hw / ide / pci.h @ 34b5d2c6
History | View | Annotate | Download (1.6 kB)
1 |
#ifndef HW_IDE_PCI_H
|
---|---|
2 |
#define HW_IDE_PCI_H
|
3 |
|
4 |
#include <hw/ide/internal.h> |
5 |
|
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; |
22 |
MemoryRegion addr_ioport; |
23 |
MemoryRegion extra_io; |
24 |
QEMUBH *bh; |
25 |
qemu_irq irq; |
26 |
|
27 |
/* Bit 0-2 and 7: BM status register
|
28 |
* Bit 3-6: bus->error_status */
|
29 |
uint8_t migration_compat_status; |
30 |
struct PCIIDEState *pci_dev;
|
31 |
} BMDMAState; |
32 |
|
33 |
typedef struct CMD646BAR { |
34 |
MemoryRegion cmd; |
35 |
MemoryRegion data; |
36 |
IDEBus *bus; |
37 |
struct PCIIDEState *pci_dev;
|
38 |
} CMD646BAR; |
39 |
|
40 |
#define TYPE_PCI_IDE "pci-ide" |
41 |
#define PCI_IDE(obj) OBJECT_CHECK(PCIIDEState, (obj), TYPE_PCI_IDE)
|
42 |
|
43 |
typedef struct PCIIDEState { |
44 |
/*< private >*/
|
45 |
PCIDevice parent_obj; |
46 |
/*< public >*/
|
47 |
|
48 |
IDEBus bus[2];
|
49 |
BMDMAState bmdma[2];
|
50 |
uint32_t secondary; /* used only for cmd646 */
|
51 |
MemoryRegion bmdma_bar; |
52 |
CMD646BAR cmd646_bar[2]; /* used only for cmd646 */ |
53 |
} PCIIDEState; |
54 |
|
55 |
|
56 |
static inline IDEState *bmdma_active_if(BMDMAState *bmdma) |
57 |
{ |
58 |
assert(bmdma->unit != (uint8_t)-1);
|
59 |
return bmdma->bus->ifs + bmdma->unit;
|
60 |
} |
61 |
|
62 |
|
63 |
void bmdma_init(IDEBus *bus, BMDMAState *bm, PCIIDEState *d);
|
64 |
void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val);
|
65 |
extern MemoryRegionOps bmdma_addr_ioport_ops;
|
66 |
void pci_ide_create_devs(PCIDevice *dev, DriveInfo **hd_table);
|
67 |
|
68 |
extern const VMStateDescription vmstate_ide_pci; |
69 |
#endif
|