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