| /* |
| * libqos virtio MMIO definitions |
| * |
| * Copyright (c) 2014 Marc MarĂ |
| * |
| * This work is licensed under the terms of the GNU GPL, version 2 or later. |
| * See the COPYING file in the top-level directory. |
| */ |
| |
| #ifndef LIBQOS_VIRTIO_MMIO_H |
| #define LIBQOS_VIRTIO_MMIO_H |
| |
| #include "libqos/virtio.h" |
| #include "libqos/qgraph.h" |
| |
| #define QVIRTIO_MMIO_MAGIC_VALUE 0x000 |
| #define QVIRTIO_MMIO_VERSION 0x004 |
| #define QVIRTIO_MMIO_DEVICE_ID 0x008 |
| #define QVIRTIO_MMIO_VENDOR_ID 0x00C |
| #define QVIRTIO_MMIO_HOST_FEATURES 0x010 |
| #define QVIRTIO_MMIO_HOST_FEATURES_SEL 0x014 |
| #define QVIRTIO_MMIO_GUEST_FEATURES 0x020 |
| #define QVIRTIO_MMIO_GUEST_FEATURES_SEL 0x024 |
| #define QVIRTIO_MMIO_GUEST_PAGE_SIZE 0x028 |
| #define QVIRTIO_MMIO_QUEUE_SEL 0x030 |
| #define QVIRTIO_MMIO_QUEUE_NUM_MAX 0x034 |
| #define QVIRTIO_MMIO_QUEUE_NUM 0x038 |
| #define QVIRTIO_MMIO_QUEUE_ALIGN 0x03C |
| #define QVIRTIO_MMIO_QUEUE_PFN 0x040 |
| #define QVIRTIO_MMIO_QUEUE_NOTIFY 0x050 |
| #define QVIRTIO_MMIO_INTERRUPT_STATUS 0x060 |
| #define QVIRTIO_MMIO_INTERRUPT_ACK 0x064 |
| #define QVIRTIO_MMIO_DEVICE_STATUS 0x070 |
| #define QVIRTIO_MMIO_DEVICE_SPECIFIC 0x100 |
| |
| typedef struct QVirtioMMIODevice { |
| QOSGraphObject obj; |
| QVirtioDevice vdev; |
| QTestState *qts; |
| uint64_t addr; |
| uint32_t page_size; |
| uint32_t features; /* As it cannot be read later, save it */ |
| } QVirtioMMIODevice; |
| |
| extern const QVirtioBus qvirtio_mmio; |
| |
| void qvirtio_mmio_init_device(QVirtioMMIODevice *dev, QTestState *qts, |
| uint64_t addr, uint32_t page_size); |
| |
| #endif |