#ifndef _SYS_PCIFM_H
#define _SYS_PCIFM_H
#include <sys/dditypes.h>
#ifdef __cplusplus
extern "C" {
#endif
#define PCI_BRIDGE_DEV 0x02
#define PCIX_DEV 0x04
#define PCI_ERR_STATUS_VALID 0x1
#define PCI_BDG_SEC_STAT_VALID 0x2
#define PCI_BDG_CTRL_VALID 0x4
#define PCIX_ERR_STATUS_VALID 0x8
#define PCIX_ERR_ECC_STS_VALID 0x10
#define PCIX_ERR_S_ECC_STS_VALID 0x20
#define PCIX_BDG_STATUS_VALID 0x40
#define PCIX_BDG_SEC_STATUS_VALID 0x80
typedef struct pci_bdg_error_regs {
uint16_t pci_bdg_vflags;
uint16_t pci_bdg_sec_stat;
uint16_t pci_bdg_ctrl;
} pci_bdg_error_regs_t;
typedef struct pci_error_regs {
uint16_t pci_vflags;
uint8_t pci_cap_ptr;
uint16_t pci_err_status;
uint16_t pci_cfg_comm;
pci_bdg_error_regs_t *pci_bdg_regs;
} pci_error_regs_t;
typedef struct pci_erpt {
ddi_acc_handle_t pe_hdl;
uint64_t pe_dflags;
uint16_t pe_bdf;
pci_error_regs_t *pe_pci_regs;
void *pe_regs;
} pci_erpt_t;
typedef struct pcix_ecc_regs {
uint16_t pcix_ecc_vflags;
uint16_t pcix_ecc_bdf;
uint32_t pcix_ecc_ctlstat;
uint32_t pcix_ecc_fstaddr;
uint32_t pcix_ecc_secaddr;
uint32_t pcix_ecc_attr;
} pcix_ecc_regs_t;
typedef struct pcix_error_regs {
uint16_t pcix_vflags;
uint8_t pcix_cap_ptr;
uint16_t pcix_ver;
uint16_t pcix_command;
uint32_t pcix_status;
pcix_ecc_regs_t *pcix_ecc_regs;
} pcix_error_regs_t;
typedef struct pcix_bdg_error_regs {
uint16_t pcix_bdg_vflags;
uint8_t pcix_bdg_cap_ptr;
uint16_t pcix_bdg_ver;
uint16_t pcix_bdg_sec_stat;
uint32_t pcix_bdg_stat;
pcix_ecc_regs_t *pcix_bdg_ecc_regs[2];
} pcix_bdg_error_regs_t;
typedef struct pci_fme_bus_specific {
int pci_bs_type;
uint64_t pci_bs_addr;
uint16_t pci_bs_bdf;
int pci_bs_flags;
} pci_fme_bus_specific_t;
#define PCI_BS_ADDR_VALID 1
#define PCI_BS_BDF_VALID 2
#define TARGET_MAX_ERRS 6
#define TGT_PCI_SPACE_UNKNOWN 4
typedef struct pci_target_err {
uint64_t tgt_err_addr;
uint64_t tgt_err_ena;
uint64_t tgt_pci_addr;
uint32_t tgt_pci_space;
dev_info_t *tgt_dip;
char *tgt_err_class;
char *tgt_bridge_type;
} pci_target_err_t;
#define PCI_FM_SEV_INC(x) ((x) == DDI_FM_FATAL) ? fatal++ :\
(((x) == DDI_FM_NONFATAL) ? nonfatal++ :\
(((x) == DDI_FM_UNKNOWN) ? unknown++ : ok++));
#ifdef __cplusplus
}
#endif
#endif