96 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * PCI Backend/Frontend Common Data Structures & Macros4 *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 12845 */46#define SH_INFO_MAX_VEC 12847 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__ */96