1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * PCI Backend/Frontend Common Data Structures & Macros 4 * 5 * Author: Ryan Wilson <hap9@epoch.ncsc.mil> 6 */ 7 #ifndef __XEN_PCI_COMMON_H__ 8 #define __XEN_PCI_COMMON_H__ 9 10 /* Be sure to bump this number if you change this file */ 11 #define XEN_PCI_MAGIC "7" 12 13 /* xen_pci_sharedinfo flags */ 14 #define _XEN_PCIF_active (0) 15 #define XEN_PCIF_active (1<<_XEN_PCIF_active) 16 #define _XEN_PCIB_AERHANDLER (1) 17 #define XEN_PCIB_AERHANDLER (1<<_XEN_PCIB_AERHANDLER) 18 #define _XEN_PCIB_active (2) 19 #define XEN_PCIB_active (1<<_XEN_PCIB_active) 20 21 /* xen_pci_op commands */ 22 #define XEN_PCI_OP_conf_read (0) 23 #define XEN_PCI_OP_conf_write (1) 24 #define XEN_PCI_OP_enable_msi (2) 25 #define XEN_PCI_OP_disable_msi (3) 26 #define XEN_PCI_OP_enable_msix (4) 27 #define XEN_PCI_OP_disable_msix (5) 28 #define XEN_PCI_OP_aer_detected (6) 29 #define XEN_PCI_OP_aer_resume (7) 30 #define XEN_PCI_OP_aer_mmio (8) 31 #define XEN_PCI_OP_aer_slotreset (9) 32 33 /* xen_pci_op error numbers */ 34 #define XEN_PCI_ERR_success (0) 35 #define XEN_PCI_ERR_dev_not_found (-1) 36 #define XEN_PCI_ERR_invalid_offset (-2) 37 #define XEN_PCI_ERR_access_denied (-3) 38 #define XEN_PCI_ERR_not_implemented (-4) 39 /* XEN_PCI_ERR_op_failed - backend failed to complete the operation */ 40 #define XEN_PCI_ERR_op_failed (-5) 41 42 /* 43 * it should be PAGE_SIZE-sizeof(struct xen_pci_op))/sizeof(struct msix_entry)) 44 * Should not exceed 128 45 */ 46 #define SH_INFO_MAX_VEC 128 47 48 struct xen_msix_entry { 49 uint16_t vector; 50 uint16_t entry; 51 }; 52 struct xen_pci_op { 53 /* IN: what action to perform: XEN_PCI_OP_* */ 54 uint32_t cmd; 55 56 /* OUT: will contain an error number (if any) from errno.h */ 57 int32_t err; 58 59 /* IN: which device to touch */ 60 uint32_t domain; /* PCI Domain/Segment */ 61 uint32_t bus; 62 uint32_t devfn; 63 64 /* IN: which configuration registers to touch */ 65 int32_t offset; 66 int32_t size; 67 68 /* IN/OUT: Contains the result after a READ or the value to WRITE */ 69 uint32_t value; 70 /* IN: Contains extra infor for this operation */ 71 uint32_t info; 72 /*IN: param for msi-x */ 73 struct xen_msix_entry msix_entries[SH_INFO_MAX_VEC]; 74 }; 75 76 /*used for pcie aer handling*/ 77 struct xen_pcie_aer_op { 78 /* IN: what action to perform: XEN_PCI_OP_* */ 79 uint32_t cmd; 80 /*IN/OUT: return aer_op result or carry error_detected state as input*/ 81 int32_t err; 82 83 /* IN: which device to touch */ 84 uint32_t domain; /* PCI Domain/Segment*/ 85 uint32_t bus; 86 uint32_t devfn; 87 }; 88 struct xen_pci_sharedinfo { 89 /* flags - XEN_PCIF_* */ 90 uint32_t flags; 91 struct xen_pci_op op; 92 struct xen_pcie_aer_op aer_op; 93 }; 94 95 #endif /* __XEN_PCI_COMMON_H__ */ 96