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
   6typedef 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
  33typedef struct CMD646BAR {
  34    MemoryRegion cmd;
  35    MemoryRegion data;
  36    IDEBus *bus;
  37    struct PCIIDEState *pci_dev;
  38} CMD646BAR;
  39
  40typedef 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
  50static 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
  57void bmdma_init(IDEBus *bus, BMDMAState *bm, PCIIDEState *d);
  58void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val);
  59extern MemoryRegionOps bmdma_addr_ioport_ops;
  60void pci_ide_create_devs(PCIDevice *dev, DriveInfo **hd_table);
  61
  62extern const VMStateDescription vmstate_ide_pci;
  63#endif
  64