16c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin/* 26c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin * Copyright (C) 2006 Intel Corp. 36c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin * Tom Long Nguyen (tom.l.nguyen@intel.com) 46c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin * Zhang Yanmin (yanmin.zhang@intel.com) 56c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin */ 66c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin 76c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin#ifndef _AER_H_ 86c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin#define _AER_H_ 96c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin 10efd01a72e7ec99ed583151fbf16b176cd2158967Thierry Reding#include <linux/types.h> 11efd01a72e7ec99ed583151fbf16b176cd2158967Thierry Reding 129e50a9122f048c67a4e83916434e2e212a6f0fe2Betty Dall#define AER_NONFATAL 0 139e50a9122f048c67a4e83916434e2e212a6f0fe2Betty Dall#define AER_FATAL 1 149e50a9122f048c67a4e83916434e2e212a6f0fe2Betty Dall#define AER_CORRECTABLE 2 159e50a9122f048c67a4e83916434e2e212a6f0fe2Betty Dall 165ccb8225abf2ac51cd023a99f28366ac9823bd0dMike Qiustruct pci_dev; 175ccb8225abf2ac51cd023a99f28366ac9823bd0dMike Qiu 18c413d7682020a127f54744a1b30f597692aea1fdHuang Yingstruct aer_header_log_regs { 19c413d7682020a127f54744a1b30f597692aea1fdHuang Ying unsigned int dw0; 20c413d7682020a127f54744a1b30f597692aea1fdHuang Ying unsigned int dw1; 21c413d7682020a127f54744a1b30f597692aea1fdHuang Ying unsigned int dw2; 22c413d7682020a127f54744a1b30f597692aea1fdHuang Ying unsigned int dw3; 23c413d7682020a127f54744a1b30f597692aea1fdHuang Ying}; 24c413d7682020a127f54744a1b30f597692aea1fdHuang Ying 25c413d7682020a127f54744a1b30f597692aea1fdHuang Yingstruct aer_capability_regs { 26c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 header; 27c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 uncor_status; 28c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 uncor_mask; 29c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 uncor_severity; 30c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 cor_status; 31c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 cor_mask; 32c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 cap_control; 33c413d7682020a127f54744a1b30f597692aea1fdHuang Ying struct aer_header_log_regs header_log; 34c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 root_command; 35c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u32 root_status; 36c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u16 cor_err_source; 37c413d7682020a127f54744a1b30f597692aea1fdHuang Ying u16 uncor_err_source; 38c413d7682020a127f54744a1b30f597692aea1fdHuang Ying}; 39c413d7682020a127f54744a1b30f597692aea1fdHuang Ying 406c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin#if defined(CONFIG_PCIEAER) 416c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin/* pci-e port driver needs this function to enable aer */ 42fde41b9fa2d0d6abd5b1b5674f1da3bb40ebc98dBetty Dallint pci_enable_pcie_error_reporting(struct pci_dev *dev); 43fde41b9fa2d0d6abd5b1b5674f1da3bb40ebc98dBetty Dallint pci_disable_pcie_error_reporting(struct pci_dev *dev); 44fde41b9fa2d0d6abd5b1b5674f1da3bb40ebc98dBetty Dallint pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev); 456c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin#else 465547bbeed37f7ab64942ffcce9293681101577efRandy Dunlapstatic inline int pci_enable_pcie_error_reporting(struct pci_dev *dev) 475547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap{ 485547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap return -EINVAL; 495547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap} 505547bbeed37f7ab64942ffcce9293681101577efRandy Dunlapstatic inline int pci_disable_pcie_error_reporting(struct pci_dev *dev) 515547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap{ 525547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap return -EINVAL; 535547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap} 545547bbeed37f7ab64942ffcce9293681101577efRandy Dunlapstatic inline int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev) 555547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap{ 565547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap return -EINVAL; 575547bbeed37f7ab64942ffcce9293681101577efRandy Dunlap} 586c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin#endif 596c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin 60862f0012549110d6f2586bf54b52ed4540cbff3aLinus Torvaldsvoid cper_print_aer(struct pci_dev *dev, int cper_severity, 61fde41b9fa2d0d6abd5b1b5674f1da3bb40ebc98dBetty Dall struct aer_capability_regs *aer); 62fde41b9fa2d0d6abd5b1b5674f1da3bb40ebc98dBetty Dallint cper_severity_to_aer(int cper_severity); 63fde41b9fa2d0d6abd5b1b5674f1da3bb40ebc98dBetty Dallvoid aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, 64862f0012549110d6f2586bf54b52ed4540cbff3aLinus Torvalds int severity, 65862f0012549110d6f2586bf54b52ed4540cbff3aLinus Torvalds struct aer_capability_regs *aer_regs); 666c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin#endif //_AER_H_ 676c2b374d74857e892080ee726184ec1d15e7d4e4Zhang, Yanmin 68