1177633Sdfr// Copyright 2017 The Fuchsia Authors. All rights reserved.
2177633Sdfr// Use of this source code is governed by a BSD-style license that can be
3177633Sdfr// found in the LICENSE file.
4177633Sdfr
5177633Sdfr#pragma once
6177633Sdfr
7177633Sdfr#include <zircon/compiler.h>
8177633Sdfr
9177633Sdfr// clang-format off
10177633Sdfr
11177633Sdfrstruct virtio_mmio_config {
12177633Sdfr    /* 0x00 */
13177633Sdfr    uint32_t magic;
14177633Sdfr    uint32_t version;
15177633Sdfr    uint32_t device_id;
16177633Sdfr    uint32_t vendor_id;
17177633Sdfr    /* 0x10 */
18177633Sdfr    uint32_t device_features;
19177633Sdfr    uint32_t device_features_sel;
20177633Sdfr    uint32_t __reserved0[2];
21177633Sdfr    /* 0x20 */
22177633Sdfr    uint32_t driver_features;
23177633Sdfr    uint32_t driver_features_sel;
24177633Sdfr    uint32_t guest_page_size;
25177633Sdfr    uint32_t __reserved1[1];
26177633Sdfr    /* 0x30 */
27177633Sdfr    uint32_t queue_sel;
28177633Sdfr    uint32_t queue_num_max;
29177633Sdfr    uint32_t queue_num;
30177633Sdfr    uint32_t queue_align;
31177633Sdfr    /* 0x40 */
32177633Sdfr    uint32_t queue_pfn;
33177633Sdfr    uint32_t __reserved2[3];
34177633Sdfr    /* 0x50 */
35177633Sdfr    uint32_t queue_notify;
36177633Sdfr    uint32_t __reserved3[3];
37177633Sdfr    /* 0x60 */
38177633Sdfr    uint32_t interrupt_status;
39177633Sdfr    uint32_t interrupt_ack;
40177633Sdfr    uint32_t __reserved4[2];
41177633Sdfr    /* 0x70 */
42177633Sdfr    uint32_t status;
43177633Sdfr    uint8_t __reserved5[0x8c];
44177633Sdfr    /* 0x100 */
45177633Sdfr    uint32_t config[0];
46177633Sdfr};
47177633Sdfr
48177633Sdfrstatic_assert(sizeof(struct virtio_mmio_config) == 0x100, "");
49177633Sdfr
50177633Sdfr#define VIRTIO_MMIO_MAGIC 0x74726976 // 'virt'
51177633Sdfr