1*43402ba5SAndrew Jones #ifndef _VIRTIO_MMIO_H_ 2*43402ba5SAndrew Jones #define _VIRTIO_MMIO_H_ 3*43402ba5SAndrew Jones /* 4*43402ba5SAndrew Jones * A minimal implementation of virtio-mmio. Adapted from the Linux Kernel. 5*43402ba5SAndrew Jones * 6*43402ba5SAndrew Jones * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com> 7*43402ba5SAndrew Jones * 8*43402ba5SAndrew Jones * This work is licensed under the terms of the GNU LGPL, version 2. 9*43402ba5SAndrew Jones */ 10*43402ba5SAndrew Jones #include "libcflat.h" 11*43402ba5SAndrew Jones #include "virtio.h" 12*43402ba5SAndrew Jones 13*43402ba5SAndrew Jones #define VIRTIO_MMIO_MAGIC_VALUE 0x000 14*43402ba5SAndrew Jones #define VIRTIO_MMIO_VERSION 0x004 15*43402ba5SAndrew Jones #define VIRTIO_MMIO_DEVICE_ID 0x008 16*43402ba5SAndrew Jones #define VIRTIO_MMIO_VENDOR_ID 0x00c 17*43402ba5SAndrew Jones #define VIRTIO_MMIO_HOST_FEATURES 0x010 18*43402ba5SAndrew Jones #define VIRTIO_MMIO_HOST_FEATURES_SEL 0x014 19*43402ba5SAndrew Jones #define VIRTIO_MMIO_GUEST_FEATURES 0x020 20*43402ba5SAndrew Jones #define VIRTIO_MMIO_GUEST_FEATURES_SEL 0x024 21*43402ba5SAndrew Jones #define VIRTIO_MMIO_GUEST_PAGE_SIZE 0x028 22*43402ba5SAndrew Jones #define VIRTIO_MMIO_QUEUE_SEL 0x030 23*43402ba5SAndrew Jones #define VIRTIO_MMIO_QUEUE_NUM_MAX 0x034 24*43402ba5SAndrew Jones #define VIRTIO_MMIO_QUEUE_NUM 0x038 25*43402ba5SAndrew Jones #define VIRTIO_MMIO_QUEUE_ALIGN 0x03c 26*43402ba5SAndrew Jones #define VIRTIO_MMIO_QUEUE_PFN 0x040 27*43402ba5SAndrew Jones #define VIRTIO_MMIO_QUEUE_NOTIFY 0x050 28*43402ba5SAndrew Jones #define VIRTIO_MMIO_INTERRUPT_STATUS 0x060 29*43402ba5SAndrew Jones #define VIRTIO_MMIO_INTERRUPT_ACK 0x064 30*43402ba5SAndrew Jones #define VIRTIO_MMIO_STATUS 0x070 31*43402ba5SAndrew Jones #define VIRTIO_MMIO_CONFIG 0x100 32*43402ba5SAndrew Jones 33*43402ba5SAndrew Jones #define VIRTIO_MMIO_INT_VRING (1 << 0) 34*43402ba5SAndrew Jones #define VIRTIO_MMIO_INT_CONFIG (1 << 1) 35*43402ba5SAndrew Jones 36*43402ba5SAndrew Jones 37*43402ba5SAndrew Jones #define to_virtio_mmio_device(vdev_ptr) \ 38*43402ba5SAndrew Jones container_of(vdev_ptr, struct virtio_mmio_device, vdev) 39*43402ba5SAndrew Jones 40*43402ba5SAndrew Jones struct virtio_mmio_device { 41*43402ba5SAndrew Jones struct virtio_device vdev; 42*43402ba5SAndrew Jones void *base; 43*43402ba5SAndrew Jones }; 44*43402ba5SAndrew Jones 45*43402ba5SAndrew Jones extern struct virtio_device *virtio_mmio_bind(u32 devid); 46*43402ba5SAndrew Jones 47*43402ba5SAndrew Jones #endif /* _VIRTIO_MMIO_H_ */ 48