]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Virtio MMIO bindings | |
3 | * | |
4 | * Copyright (c) 2011 Linaro Limited | |
5 | * | |
6 | * Author: | |
7 | * Peter Maydell <[email protected]> | |
8 | * | |
9 | * This program is free software; you can redistribute it and/or modify | |
10 | * it under the terms of the GNU General Public License; either version 2 | |
11 | * of the License, or (at your option) any later version. | |
12 | * | |
13 | * This program is distributed in the hope that it will be useful, | |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | * GNU General Public License for more details. | |
17 | * | |
18 | * You should have received a copy of the GNU General Public License along | |
19 | * with this program; if not, see <http://www.gnu.org/licenses/>. | |
20 | */ | |
21 | ||
22 | #ifndef HW_VIRTIO_MMIO_H | |
23 | #define HW_VIRTIO_MMIO_H | |
24 | ||
25 | #include "hw/sysbus.h" | |
26 | #include "hw/virtio/virtio-bus.h" | |
27 | ||
28 | /* QOM macros */ | |
29 | /* virtio-mmio-bus */ | |
30 | #define TYPE_VIRTIO_MMIO_BUS "virtio-mmio-bus" | |
31 | /* This is reusing the VirtioBusState typedef from TYPE_VIRTIO_BUS */ | |
32 | DECLARE_OBJ_CHECKERS(VirtioBusState, VirtioBusClass, | |
33 | VIRTIO_MMIO_BUS, TYPE_VIRTIO_MMIO_BUS) | |
34 | ||
35 | /* virtio-mmio */ | |
36 | #define TYPE_VIRTIO_MMIO "virtio-mmio" | |
37 | OBJECT_DECLARE_SIMPLE_TYPE(VirtIOMMIOProxy, VIRTIO_MMIO) | |
38 | ||
39 | #define VIRT_MAGIC 0x74726976 /* 'virt' */ | |
40 | #define VIRT_VERSION 2 | |
41 | #define VIRT_VERSION_LEGACY 1 | |
42 | #define VIRT_VENDOR 0x554D4551 /* 'QEMU' */ | |
43 | ||
44 | typedef struct VirtIOMMIOQueue { | |
45 | uint16_t num; | |
46 | bool enabled; | |
47 | uint32_t desc[2]; | |
48 | uint32_t avail[2]; | |
49 | uint32_t used[2]; | |
50 | } VirtIOMMIOQueue; | |
51 | ||
52 | #define VIRTIO_IOMMIO_FLAG_USE_IOEVENTFD_BIT 1 | |
53 | #define VIRTIO_IOMMIO_FLAG_USE_IOEVENTFD \ | |
54 | (1 << VIRTIO_IOMMIO_FLAG_USE_IOEVENTFD_BIT) | |
55 | ||
56 | struct VirtIOMMIOProxy { | |
57 | /* Generic */ | |
58 | SysBusDevice parent_obj; | |
59 | MemoryRegion iomem; | |
60 | qemu_irq irq; | |
61 | bool legacy; | |
62 | uint32_t flags; | |
63 | /* Guest accessible state needing migration and reset */ | |
64 | uint32_t host_features_sel; | |
65 | uint32_t guest_features_sel; | |
66 | uint32_t guest_page_shift; | |
67 | /* virtio-bus */ | |
68 | VirtioBusState bus; | |
69 | bool format_transport_address; | |
70 | /* Fields only used for non-legacy (v2) devices */ | |
71 | uint32_t guest_features[2]; | |
72 | VirtIOMMIOQueue vqs[VIRTIO_QUEUE_MAX]; | |
73 | }; | |
74 | ||
75 | #endif |