root/include/xen/interface/io/pciif.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  65 struct xen_msix_entry {
  66         uint16_t vector;
  67         uint16_t entry;
  68 };
  69 struct 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*/
  94 struct 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 };
 105 struct 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__ */

/* [<][>][^][v][top][bottom][index][help] */