/* * Virtio PCI driver * * This module allows virtio devices to be used over a virtual PCI device. * This can be used with QEMU based VMMs like KVM or Xen. * * Copyright IBM Corp. 2007 * * Authors: * Anthony Liguori <[email protected]> * * This header is BSD licensed so anyone can use the definitions to implement * compatible drivers/servers. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of IBM nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef _LINUX_VIRTIO_PCI_H #define _LINUX_VIRTIO_PCI_H #include <linux/types.h> #ifndef VIRTIO_PCI_NO_LEGACY /* A 32-bit r/o bitmask of the features supported by the host */ #define VIRTIO_PCI_HOST_FEATURES … /* A 32-bit r/w bitmask of features activated by the guest */ #define VIRTIO_PCI_GUEST_FEATURES … /* A 32-bit r/w PFN for the currently selected queue */ #define VIRTIO_PCI_QUEUE_PFN … /* A 16-bit r/o queue size for the currently selected queue */ #define VIRTIO_PCI_QUEUE_NUM … /* A 16-bit r/w queue selector */ #define VIRTIO_PCI_QUEUE_SEL … /* A 16-bit r/w queue notifier */ #define VIRTIO_PCI_QUEUE_NOTIFY … /* An 8-bit device status register. */ #define VIRTIO_PCI_STATUS … /* An 8-bit r/o interrupt status register. Reading the value will return the * current contents of the ISR and will also clear it. This is effectively * a read-and-acknowledge. */ #define VIRTIO_PCI_ISR … /* MSI-X registers: only enabled if MSI-X is enabled. */ /* A 16-bit vector for configuration changes. */ #define VIRTIO_MSI_CONFIG_VECTOR … /* A 16-bit vector for selected queue notifications. */ #define VIRTIO_MSI_QUEUE_VECTOR … /* The remaining space is defined by each driver as the per-driver * configuration space */ #define VIRTIO_PCI_CONFIG_OFF(msix_enabled) … /* Deprecated: please use VIRTIO_PCI_CONFIG_OFF instead */ #define VIRTIO_PCI_CONFIG(dev) … /* Virtio ABI version, this must match exactly */ #define VIRTIO_PCI_ABI_VERSION … /* How many bits to shift physical queue address written to QUEUE_PFN. * 12 is historical, and due to x86 page size. */ #define VIRTIO_PCI_QUEUE_ADDR_SHIFT … /* The alignment to use between consumer and producer parts of vring. * x86 pagesize again. */ #define VIRTIO_PCI_VRING_ALIGN … #endif /* VIRTIO_PCI_NO_LEGACY */ /* The bit of the ISR which indicates a device configuration change. */ #define VIRTIO_PCI_ISR_CONFIG … /* Vector value used to disable MSI for queue */ #define VIRTIO_MSI_NO_VECTOR … #ifndef VIRTIO_PCI_NO_MODERN /* IDs for different capabilities. Must all exist. */ /* Common configuration */ #define VIRTIO_PCI_CAP_COMMON_CFG … /* Notifications */ #define VIRTIO_PCI_CAP_NOTIFY_CFG … /* ISR access */ #define VIRTIO_PCI_CAP_ISR_CFG … /* Device specific configuration */ #define VIRTIO_PCI_CAP_DEVICE_CFG … /* PCI configuration access */ #define VIRTIO_PCI_CAP_PCI_CFG … /* Additional shared memory capability */ #define VIRTIO_PCI_CAP_SHARED_MEMORY_CFG … /* This is the PCI capability header: */ struct virtio_pci_cap { … }; struct virtio_pci_cap64 { … }; struct virtio_pci_notify_cap { … }; /* Fields in VIRTIO_PCI_CAP_COMMON_CFG: */ struct virtio_pci_common_cfg { … }; /* * Warning: do not use sizeof on this: use offsetofend for * specific fields you need. */ struct virtio_pci_modern_common_cfg { … }; /* Fields in VIRTIO_PCI_CAP_PCI_CFG: */ struct virtio_pci_cfg_cap { … }; /* Macro versions of offsets for the Old Timers! */ #define VIRTIO_PCI_CAP_VNDR … #define VIRTIO_PCI_CAP_NEXT … #define VIRTIO_PCI_CAP_LEN … #define VIRTIO_PCI_CAP_CFG_TYPE … #define VIRTIO_PCI_CAP_BAR … #define VIRTIO_PCI_CAP_OFFSET … #define VIRTIO_PCI_CAP_LENGTH … #define VIRTIO_PCI_NOTIFY_CAP_MULT … #define VIRTIO_PCI_COMMON_DFSELECT … #define VIRTIO_PCI_COMMON_DF … #define VIRTIO_PCI_COMMON_GFSELECT … #define VIRTIO_PCI_COMMON_GF … #define VIRTIO_PCI_COMMON_MSIX … #define VIRTIO_PCI_COMMON_NUMQ … #define VIRTIO_PCI_COMMON_STATUS … #define VIRTIO_PCI_COMMON_CFGGENERATION … #define VIRTIO_PCI_COMMON_Q_SELECT … #define VIRTIO_PCI_COMMON_Q_SIZE … #define VIRTIO_PCI_COMMON_Q_MSIX … #define VIRTIO_PCI_COMMON_Q_ENABLE … #define VIRTIO_PCI_COMMON_Q_NOFF … #define VIRTIO_PCI_COMMON_Q_DESCLO … #define VIRTIO_PCI_COMMON_Q_DESCHI … #define VIRTIO_PCI_COMMON_Q_AVAILLO … #define VIRTIO_PCI_COMMON_Q_AVAILHI … #define VIRTIO_PCI_COMMON_Q_USEDLO … #define VIRTIO_PCI_COMMON_Q_USEDHI … #define VIRTIO_PCI_COMMON_Q_NDATA … #define VIRTIO_PCI_COMMON_Q_RESET … #define VIRTIO_PCI_COMMON_ADM_Q_IDX … #define VIRTIO_PCI_COMMON_ADM_Q_NUM … #endif /* VIRTIO_PCI_NO_MODERN */ /* Admin command status. */ #define VIRTIO_ADMIN_STATUS_OK … /* Admin command opcode. */ #define VIRTIO_ADMIN_CMD_LIST_QUERY … #define VIRTIO_ADMIN_CMD_LIST_USE … /* Admin command group type. */ #define VIRTIO_ADMIN_GROUP_TYPE_SRIOV … /* Transitional device admin command. */ #define VIRTIO_ADMIN_CMD_LEGACY_COMMON_CFG_WRITE … #define VIRTIO_ADMIN_CMD_LEGACY_COMMON_CFG_READ … #define VIRTIO_ADMIN_CMD_LEGACY_DEV_CFG_WRITE … #define VIRTIO_ADMIN_CMD_LEGACY_DEV_CFG_READ … #define VIRTIO_ADMIN_CMD_LEGACY_NOTIFY_INFO … struct virtio_admin_cmd_hdr { … }; struct virtio_admin_cmd_status { … }; struct virtio_admin_cmd_legacy_wr_data { … }; struct virtio_admin_cmd_legacy_rd_data { … }; #define VIRTIO_ADMIN_CMD_NOTIFY_INFO_FLAGS_END … #define VIRTIO_ADMIN_CMD_NOTIFY_INFO_FLAGS_OWNER_DEV … #define VIRTIO_ADMIN_CMD_NOTIFY_INFO_FLAGS_OWNER_MEM … #define VIRTIO_ADMIN_CMD_MAX_NOTIFY_INFO … struct virtio_admin_cmd_notify_info_data { … }; struct virtio_admin_cmd_notify_info_result { … }; #endif