1*11447b59SVenkatesh Srinivas /*- 2*11447b59SVenkatesh Srinivas * Copyright IBM Corp. 2007 3*11447b59SVenkatesh Srinivas * 4*11447b59SVenkatesh Srinivas * Authors: 5*11447b59SVenkatesh Srinivas * Anthony Liguori <aliguori@us.ibm.com> 6*11447b59SVenkatesh Srinivas * 7*11447b59SVenkatesh Srinivas * This header is BSD licensed so anyone can use the definitions to implement 8*11447b59SVenkatesh Srinivas * compatible drivers/servers. 9*11447b59SVenkatesh Srinivas * 10*11447b59SVenkatesh Srinivas * Redistribution and use in source and binary forms, with or without 11*11447b59SVenkatesh Srinivas * modification, are permitted provided that the following conditions 12*11447b59SVenkatesh Srinivas * are met: 13*11447b59SVenkatesh Srinivas * 1. Redistributions of source code must retain the above copyright 14*11447b59SVenkatesh Srinivas * notice, this list of conditions and the following disclaimer. 15*11447b59SVenkatesh Srinivas * 2. Redistributions in binary form must reproduce the above copyright 16*11447b59SVenkatesh Srinivas * notice, this list of conditions and the following disclaimer in the 17*11447b59SVenkatesh Srinivas * documentation and/or other materials provided with the distribution. 18*11447b59SVenkatesh Srinivas * 3. Neither the name of IBM nor the names of its contributors 19*11447b59SVenkatesh Srinivas * may be used to endorse or promote products derived from this software 20*11447b59SVenkatesh Srinivas * without specific prior written permission. 21*11447b59SVenkatesh Srinivas * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22*11447b59SVenkatesh Srinivas * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 23*11447b59SVenkatesh Srinivas * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24*11447b59SVenkatesh Srinivas * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE 25*11447b59SVenkatesh Srinivas * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26*11447b59SVenkatesh Srinivas * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27*11447b59SVenkatesh Srinivas * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28*11447b59SVenkatesh Srinivas * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29*11447b59SVenkatesh Srinivas * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30*11447b59SVenkatesh Srinivas * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31*11447b59SVenkatesh Srinivas * SUCH DAMAGE. 32*11447b59SVenkatesh Srinivas * 33*11447b59SVenkatesh Srinivas * $FreeBSD: src/sys/dev/virtio/pci/virtio_pci.h,v 1.2 2011/12/06 06:28:32 grehan Exp $ 34*11447b59SVenkatesh Srinivas */ 35*11447b59SVenkatesh Srinivas 36*11447b59SVenkatesh Srinivas #ifndef _VIRTIO_PCI_H 37*11447b59SVenkatesh Srinivas #define _VIRTIO_PCI_H 38*11447b59SVenkatesh Srinivas 39*11447b59SVenkatesh Srinivas /* VirtIO PCI vendor/device ID. */ 40*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_VENDORID 0x1AF4 41*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_DEVICEID_MIN 0x1000 42*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_DEVICEID_MAX 0x103F 43*11447b59SVenkatesh Srinivas 44*11447b59SVenkatesh Srinivas /* VirtIO ABI version, this must match exactly. */ 45*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_ABI_VERSION 0 46*11447b59SVenkatesh Srinivas 47*11447b59SVenkatesh Srinivas /* 48*11447b59SVenkatesh Srinivas * VirtIO Header, located in BAR 0. 49*11447b59SVenkatesh Srinivas */ 50*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_HOST_FEATURES 0 /* host's supported features (32bit, RO)*/ 51*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_GUEST_FEATURES 4 /* guest's supported features (32, RW) */ 52*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_QUEUE_PFN 8 /* physical address of VQ (32, RW) */ 53*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_QUEUE_NUM 12 /* number of ring entries (16, RO) */ 54*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_QUEUE_SEL 14 /* current VQ selection (16, RW) */ 55*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_QUEUE_NOTIFY 16 /* notify host regarding VQ (16, RW) */ 56*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_STATUS 18 /* device status register (8, RW) */ 57*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_ISR 19 /* interrupt status register, reading 58*11447b59SVenkatesh Srinivas * also clears the register (8, RO) */ 59*11447b59SVenkatesh Srinivas /* Only if MSIX is enabled: */ 60*11447b59SVenkatesh Srinivas #define VIRTIO_MSI_CONFIG_VECTOR 20 /* configuration change vector (16, RW) */ 61*11447b59SVenkatesh Srinivas #define VIRTIO_MSI_QUEUE_VECTOR 22 /* vector for selected VQ notifications 62*11447b59SVenkatesh Srinivas (16, RW) */ 63*11447b59SVenkatesh Srinivas 64*11447b59SVenkatesh Srinivas /* The bit of the ISR which indicates a device has an interrupt. */ 65*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_ISR_INTR 0x1 66*11447b59SVenkatesh Srinivas /* The bit of the ISR which indicates a device configuration change. */ 67*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_ISR_CONFIG 0x2 68*11447b59SVenkatesh Srinivas /* Vector value used to disable MSI for queue. */ 69*11447b59SVenkatesh Srinivas #define VIRTIO_MSI_NO_VECTOR 0xFFFF 70*11447b59SVenkatesh Srinivas 71*11447b59SVenkatesh Srinivas /* 72*11447b59SVenkatesh Srinivas * The remaining space is defined by each driver as the per-driver 73*11447b59SVenkatesh Srinivas * configuration space. 74*11447b59SVenkatesh Srinivas */ 75*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_CONFIG(sc) \ 76*11447b59SVenkatesh Srinivas (((sc)->vtpci_flags & VIRTIO_PCI_FLAG_MSIX) ? 24 : 20) 77*11447b59SVenkatesh Srinivas 78*11447b59SVenkatesh Srinivas /* 79*11447b59SVenkatesh Srinivas * How many bits to shift physical queue address written to QUEUE_PFN. 80*11447b59SVenkatesh Srinivas * 12 is historical, and due to x86 page size. 81*11447b59SVenkatesh Srinivas */ 82*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_QUEUE_ADDR_SHIFT 12 83*11447b59SVenkatesh Srinivas 84*11447b59SVenkatesh Srinivas /* The alignment to use between consumer and producer parts of vring. */ 85*11447b59SVenkatesh Srinivas #define VIRTIO_PCI_VRING_ALIGN 4096 86*11447b59SVenkatesh Srinivas 87*11447b59SVenkatesh Srinivas #endif /* _VIRTIO_PCI_H */ 88