qemu/include/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#include "hw/pci/pci.h"
   6#include "qom/object.h"
   7
   8#define BM_STATUS_DMAING 0x01
   9#define BM_STATUS_ERROR  0x02
  10#define BM_STATUS_INT    0x04
  11
  12#define BM_CMD_START     0x01
  13#define BM_CMD_READ      0x08
  14
  15typedef struct BMDMAState {
  16    IDEDMA dma;
  17    uint8_t cmd;
  18    uint8_t status;
  19    uint32_t addr;
  20
  21    IDEBus *bus;
  22    /* current transfer state */
  23    uint32_t cur_addr;
  24    uint32_t cur_prd_last;
  25    uint32_t cur_prd_addr;
  26    uint32_t cur_prd_len;
  27    BlockCompletionFunc *dma_cb;
  28    MemoryRegion addr_ioport;
  29    MemoryRegion extra_io;
  30    qemu_irq irq;
  31
  32    /* Bit 0-2 and 7:   BM status register
  33     * Bit 3-6:         bus->error_status */
  34    uint8_t migration_compat_status;
  35    uint8_t migration_retry_unit;
  36    int64_t migration_retry_sector_num;
  37    uint32_t migration_retry_nsector;
  38
  39    struct PCIIDEState *pci_dev;
  40} BMDMAState;
  41
  42#define TYPE_PCI_IDE "pci-ide"
  43OBJECT_DECLARE_SIMPLE_TYPE(PCIIDEState, PCI_IDE)
  44
  45struct PCIIDEState {
  46    /*< private >*/
  47    PCIDevice parent_obj;
  48    /*< public >*/
  49
  50    IDEBus bus[2];
  51    BMDMAState bmdma[2];
  52    uint32_t secondary; /* used only for cmd646 */
  53    MemoryRegion bmdma_bar;
  54    MemoryRegion cmd_bar[2];
  55    MemoryRegion data_bar[2];
  56};
  57
  58static inline IDEState *bmdma_active_if(BMDMAState *bmdma)
  59{
  60    assert(bmdma->bus->retry_unit != (uint8_t)-1);
  61    return bmdma->bus->ifs + bmdma->bus->retry_unit;
  62}
  63
  64void bmdma_init(IDEBus *bus, BMDMAState *bm, PCIIDEState *d);
  65void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val);
  66extern MemoryRegionOps bmdma_addr_ioport_ops;
  67void pci_ide_create_devs(PCIDevice *dev);
  68
  69extern const VMStateDescription vmstate_ide_pci;
  70extern const MemoryRegionOps pci_ide_cmd_le_ops;
  71extern const MemoryRegionOps pci_ide_data_le_ops;
  72#endif
  73