Statistics
| Branch: | Revision:

root / hw / ide / pci.h @ 31410948

History | View | Annotate | Download (1.5 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
typedef struct PCIIDEState {
41
    PCIDevice dev;
42
    IDEBus bus[2];
43
    BMDMAState bmdma[2];
44
    uint32_t secondary; /* used only for cmd646 */
45
    MemoryRegion bmdma_bar;
46
    CMD646BAR cmd646_bar[2]; /* used only for cmd646 */
47
} PCIIDEState;
48

    
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

    
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;
60
void pci_ide_create_devs(PCIDevice *dev, DriveInfo **hd_table);
61

    
62
extern const VMStateDescription vmstate_ide_pci;
63
#endif