linux/include/uapi/linux/virtio_pci.h
<<
>>
Prefs
   1/*
   2 * Virtio PCI driver
   3 *
   4 * This module allows virtio devices to be used over a virtual PCI device.
   5 * This can be used with QEMU based VMMs like KVM or Xen.
   6 *
   7 * Copyright IBM Corp. 2007
   8 *
   9 * Authors:
  10 *  Anthony Liguori  <aliguori@us.ibm.com>
  11 *
  12 * This header is BSD licensed so anyone can use the definitions to implement
  13 * compatible drivers/servers.
  14 *
  15 * Redistribution and use in source and binary forms, with or without
  16 * modification, are permitted provided that the following conditions
  17 * are met:
  18 * 1. Redistributions of source code must retain the above copyright
  19 *    notice, this list of conditions and the following disclaimer.
  20 * 2. Redistributions in binary form must reproduce the above copyright
  21 *    notice, this list of conditions and the following disclaimer in the
  22 *    documentation and/or other materials provided with the distribution.
  23 * 3. Neither the name of IBM nor the names of its contributors
  24 *    may be used to endorse or promote products derived from this software
  25 *    without specific prior written permission.
  26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
  27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29 * ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
  30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36 * SUCH DAMAGE.
  37 */
  38
  39#ifndef _LINUX_VIRTIO_PCI_H
  40#define _LINUX_VIRTIO_PCI_H
  41
  42#include <linux/virtio_config.h>
  43
  44/* A 32-bit r/o bitmask of the features supported by the host */
  45#define VIRTIO_PCI_HOST_FEATURES        0
  46
  47/* A 32-bit r/w bitmask of features activated by the guest */
  48#define VIRTIO_PCI_GUEST_FEATURES       4
  49
  50/* A 32-bit r/w PFN for the currently selected queue */
  51#define VIRTIO_PCI_QUEUE_PFN            8
  52
  53/* A 16-bit r/o queue size for the currently selected queue */
  54#define VIRTIO_PCI_QUEUE_NUM            12
  55
  56/* A 16-bit r/w queue selector */
  57#define VIRTIO_PCI_QUEUE_SEL            14
  58
  59/* A 16-bit r/w queue notifier */
  60#define VIRTIO_PCI_QUEUE_NOTIFY         16
  61
  62/* An 8-bit device status register.  */
  63#define VIRTIO_PCI_STATUS               18
  64
  65/* An 8-bit r/o interrupt status register.  Reading the value will return the
  66 * current contents of the ISR and will also clear it.  This is effectively
  67 * a read-and-acknowledge. */
  68#define VIRTIO_PCI_ISR                  19
  69
  70/* The bit of the ISR which indicates a device configuration change. */
  71#define VIRTIO_PCI_ISR_CONFIG           0x2
  72
  73/* MSI-X registers: only enabled if MSI-X is enabled. */
  74/* A 16-bit vector for configuration changes. */
  75#define VIRTIO_MSI_CONFIG_VECTOR        20
  76/* A 16-bit vector for selected queue notifications. */
  77#define VIRTIO_MSI_QUEUE_VECTOR         22
  78/* Vector value used to disable MSI for queue */
  79#define VIRTIO_MSI_NO_VECTOR            0xffff
  80
  81/* The remaining space is defined by each driver as the per-driver
  82 * configuration space */
  83#define VIRTIO_PCI_CONFIG_OFF(msix_enabled)     ((msix_enabled) ? 24 : 20)
  84/* Deprecated: please use VIRTIO_PCI_CONFIG_OFF instead */
  85#define VIRTIO_PCI_CONFIG(dev)  VIRTIO_PCI_CONFIG_OFF((dev)->msix_enabled)
  86
  87/* Virtio ABI version, this must match exactly */
  88#define VIRTIO_PCI_ABI_VERSION          0
  89
  90/* How many bits to shift physical queue address written to QUEUE_PFN.
  91 * 12 is historical, and due to x86 page size. */
  92#define VIRTIO_PCI_QUEUE_ADDR_SHIFT     12
  93
  94/* The alignment to use between consumer and producer parts of vring.
  95 * x86 pagesize again. */
  96#define VIRTIO_PCI_VRING_ALIGN          4096
  97#endif
  98