linux/include/xen/interface/io/pciif.h
<<
>>
Prefs
   1/*
   2 * PCI Backend/Frontend Common Data Structures & Macros
   3 *
   4 * Permission is hereby granted, free of charge, to any person obtaining a copy
   5 * of this software and associated documentation files (the "Software"), to
   6 * deal in the Software without restriction, including without limitation the
   7 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   8 * sell copies of the Software, and to permit persons to whom the Software is
   9 * furnished to do so, subject to the following conditions:
  10 *
  11 * The above copyright notice and this permission notice shall be included in
  12 * all copies or substantial portions of the Software.
  13 *
  14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  20 * DEALINGS IN THE SOFTWARE.
  21 *
  22 *   Author: Ryan Wilson <hap9@epoch.ncsc.mil>
  23 */
  24#ifndef __XEN_PCI_COMMON_H__
  25#define __XEN_PCI_COMMON_H__
  26
  27/* Be sure to bump this number if you change this file */
  28#define XEN_PCI_MAGIC "7"
  29
  30/* xen_pci_sharedinfo flags */
  31#define _XEN_PCIF_active                (0)
  32#define XEN_PCIF_active                 (1<<_XEN_PCIF_active)
  33#define _XEN_PCIB_AERHANDLER            (1)
  34#define XEN_PCIB_AERHANDLER             (1<<_XEN_PCIB_AERHANDLER)
  35#define _XEN_PCIB_active                (2)
  36#define XEN_PCIB_active                 (1<<_XEN_PCIB_active)
  37
  38/* xen_pci_op commands */
  39#define XEN_PCI_OP_conf_read            (0)
  40#define XEN_PCI_OP_conf_write           (1)
  41#define XEN_PCI_OP_enable_msi           (2)
  42#define XEN_PCI_OP_disable_msi          (3)
  43#define XEN_PCI_OP_enable_msix          (4)
  44#define XEN_PCI_OP_disable_msix         (5)
  45#define XEN_PCI_OP_aer_detected         (6)
  46#define XEN_PCI_OP_aer_resume           (7)
  47#define XEN_PCI_OP_aer_mmio             (8)
  48#define XEN_PCI_OP_aer_slotreset        (9)
  49
  50/* xen_pci_op error numbers */
  51#define XEN_PCI_ERR_success             (0)
  52#define XEN_PCI_ERR_dev_not_found       (-1)
  53#define XEN_PCI_ERR_invalid_offset      (-2)
  54#define XEN_PCI_ERR_access_denied       (-3)
  55#define XEN_PCI_ERR_not_implemented     (-4)
  56/* XEN_PCI_ERR_op_failed - backend failed to complete the operation */
  57#define XEN_PCI_ERR_op_failed           (-5)
  58
  59/*
  60 * it should be PAGE_SIZE-sizeof(struct xen_pci_op))/sizeof(struct msix_entry))
  61 * Should not exceed 128
  62 */
  63#define SH_INFO_MAX_VEC                 128
  64
  65struct xen_msix_entry {
  66        uint16_t vector;
  67        uint16_t entry;
  68};
  69struct xen_pci_op {
  70        /* IN: what action to perform: XEN_PCI_OP_* */
  71        uint32_t cmd;
  72
  73        /* OUT: will contain an error number (if any) from errno.h */
  74        int32_t err;
  75
  76        /* IN: which device to touch */
  77        uint32_t domain; /* PCI Domain/Segment */
  78        uint32_t bus;
  79        uint32_t devfn;
  80
  81        /* IN: which configuration registers to touch */
  82        int32_t offset;
  83        int32_t size;
  84
  85        /* IN/OUT: Contains the result after a READ or the value to WRITE */
  86        uint32_t value;
  87        /* IN: Contains extra infor for this operation */
  88        uint32_t info;
  89        /*IN:  param for msi-x */
  90        struct xen_msix_entry msix_entries[SH_INFO_MAX_VEC];
  91};
  92
  93/*used for pcie aer handling*/
  94struct xen_pcie_aer_op {
  95        /* IN: what action to perform: XEN_PCI_OP_* */
  96        uint32_t cmd;
  97        /*IN/OUT: return aer_op result or carry error_detected state as input*/
  98        int32_t err;
  99
 100        /* IN: which device to touch */
 101        uint32_t domain; /* PCI Domain/Segment*/
 102        uint32_t bus;
 103        uint32_t devfn;
 104};
 105struct xen_pci_sharedinfo {
 106        /* flags - XEN_PCIF_* */
 107        uint32_t flags;
 108        struct xen_pci_op op;
 109        struct xen_pcie_aer_op aer_op;
 110};
 111
 112#endif /* __XEN_PCI_COMMON_H__ */
 113