Home | History | Annotate | Line # | Download | only in io
      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 (at) 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 #define XEN_PCI_OP_enable_multi_msi	(10)
     50 
     51 /* xen_pci_op error numbers */
     52 #define XEN_PCI_ERR_success          (0)
     53 #define XEN_PCI_ERR_dev_not_found   (-1)
     54 #define XEN_PCI_ERR_invalid_offset  (-2)
     55 #define XEN_PCI_ERR_access_denied   (-3)
     56 #define XEN_PCI_ERR_not_implemented (-4)
     57 /* XEN_PCI_ERR_op_failed - backend failed to complete the operation */
     58 #define XEN_PCI_ERR_op_failed       (-5)
     59 
     60 /*
     61  * it should be PAGE_SIZE-sizeof(struct xen_pci_op))/sizeof(struct msix_entry))
     62  * Should not exceed 128
     63  */
     64 #define SH_INFO_MAX_VEC     128
     65 
     66 struct xen_msix_entry {
     67     uint16_t vector;
     68     uint16_t entry;
     69 };
     70 struct xen_pci_op {
     71     /* IN: what action to perform: XEN_PCI_OP_* */
     72     uint32_t cmd;
     73 
     74     /* OUT: will contain an error number (if any) from errno.h */
     75     int32_t err;
     76 
     77     /* IN: which device to touch */
     78     uint32_t domain; /* PCI Domain/Segment */
     79     uint32_t bus;
     80     uint32_t devfn;
     81 
     82     /* IN: which configuration registers to touch */
     83     int32_t offset;
     84     int32_t size;
     85 
     86     /* IN/OUT: Contains the result after a READ or the value to WRITE */
     87     uint32_t value;
     88     /* IN: Contains extra infor for this operation */
     89     uint32_t info;
     90     /*IN:  param for msi-x */
     91     struct xen_msix_entry msix_entries[SH_INFO_MAX_VEC];
     92 };
     93 
     94 /*used for pcie aer handling*/
     95 struct xen_pcie_aer_op
     96 {
     97 
     98     /* IN: what action to perform: XEN_PCI_OP_* */
     99     uint32_t cmd;
    100     /*IN/OUT: return aer_op result or carry error_detected state as input*/
    101     int32_t err;
    102 
    103     /* IN: which device to touch */
    104     uint32_t domain; /* PCI Domain/Segment*/
    105     uint32_t bus;
    106     uint32_t devfn;
    107 };
    108 struct xen_pci_sharedinfo {
    109     /* flags - XEN_PCIF_* */
    110     uint32_t flags;
    111     struct xen_pci_op op;
    112     struct xen_pcie_aer_op aer_op;
    113 };
    114 
    115 #endif /* __XEN_PCI_COMMON_H__ */
    116 
    117 /*
    118  * Local variables:
    119  * mode: C
    120  * c-file-style: "BSD"
    121  * c-basic-offset: 4
    122  * tab-width: 4
    123  * indent-tabs-mode: nil
    124  * End:
    125  */
    126