/** * default_downstream_reset_link - default reset function for Downstream Port * @dev: pointer to downstream port's pci_dev data structure * * Invoked when performing link reset at Downstream Port w/ no aer driver. */ static pci_ers_result_t default_downstream_reset_link(struct pci_dev *dev) { aer_do_secondary_bus_reset(dev); dev_printk(KERN_DEBUG, &dev->dev, "Downstream Port link has been reset\n"); return PCI_ERS_RESULT_RECOVERED; }
static pci_ers_result_t aer_root_reset(struct pci_dev *dev) { u32 reg32; int pos; pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR); /* Disable Root's interrupt in response to error messages */ pci_read_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND, ®32); reg32 &= ~ROOT_PORT_INTR_ON_MESG_MASK; pci_write_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND, reg32); aer_do_secondary_bus_reset(dev); dev_printk(KERN_DEBUG, &dev->dev, "Root Port link has been reset\n"); /* Clear Root Error Status */ pci_read_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, ®32); pci_write_config_dword(dev, pos + PCI_ERR_ROOT_STATUS, reg32); /* Enable Root Port's interrupt in response to error messages */ pci_read_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND, ®32); reg32 |= ROOT_PORT_INTR_ON_MESG_MASK; pci_write_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND, reg32); return PCI_ERS_RESULT_RECOVERED; }