#define dev_fmt(fmt) …
#include <linux/aer.h>
#include <linux/bitfield.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/pci.h>
#include "portdrv.h"
#include "../pci.h"
#define PCI_EXP_DPC_CTL_EN_MASK …
static const char * const rp_pio_error_string[] = …;
void pci_save_dpc_state(struct pci_dev *dev)
{ … }
void pci_restore_dpc_state(struct pci_dev *dev)
{ … }
static DECLARE_WAIT_QUEUE_HEAD(dpc_completed_waitqueue);
#ifdef CONFIG_HOTPLUG_PCI_PCIE
static bool dpc_completed(struct pci_dev *pdev)
{ … }
bool pci_dpc_recovered(struct pci_dev *pdev)
{ … }
#endif
static int dpc_wait_rp_inactive(struct pci_dev *pdev)
{ … }
pci_ers_result_t dpc_reset_link(struct pci_dev *pdev)
{ … }
static void dpc_process_rp_pio_error(struct pci_dev *pdev)
{ … }
static int dpc_get_aer_uncorrect_severity(struct pci_dev *dev,
struct aer_err_info *info)
{ … }
void dpc_process_error(struct pci_dev *pdev)
{ … }
static void pci_clear_surpdn_errors(struct pci_dev *pdev)
{ … }
static void dpc_handle_surprise_removal(struct pci_dev *pdev)
{ … }
static bool dpc_is_surprise_removal(struct pci_dev *pdev)
{ … }
static irqreturn_t dpc_handler(int irq, void *context)
{ … }
static irqreturn_t dpc_irq(int irq, void *context)
{ … }
void pci_dpc_init(struct pci_dev *pdev)
{ … }
static void dpc_enable(struct pcie_device *dev)
{ … }
static void dpc_disable(struct pcie_device *dev)
{ … }
#define FLAG(x, y) …
static int dpc_probe(struct pcie_device *dev)
{ … }
static int dpc_suspend(struct pcie_device *dev)
{ … }
static int dpc_resume(struct pcie_device *dev)
{ … }
static void dpc_remove(struct pcie_device *dev)
{ … }
static struct pcie_port_service_driver dpcdriver = …;
int __init pcie_dpc_init(void)
{ … }