pciif.h (2561B)
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 48struct xen_msix_entry { 49 uint16_t vector; 50 uint16_t entry; 51}; 52struct 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*/ 77struct 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}; 88struct 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__ */