HomeFreeBSD

Implement a proper detach method for the PCI-PCI bridge driver.

Description

Implement a proper detach method for the PCI-PCI bridge driver.

  • Add a pcib_detach() function for the PCI-PCI bridge driver. It tears down the NEW_PCIB and hotplug state including destroying resource managers, deleting child devices, and disabling hotplug events.
  • Add a detach method to the ACPI PCI-PCI bridge driver which calls pcib_detach() and then frees the copy of the _PRT interrupt routing table.
  • Add a detach method to the PCI-Cardbus bridge driver which frees the PCI bus resources in addition to calling cbb_detach().
  • Explicitly clear any pending hotplug events during attach to ensure future events will generate an interrupt.
  • If a the Command Completed bit is set in the slot status register when the command completion timeout fires, treat it as if the command completed and the completion interrupt was just lost rather than forcing a detach.
  • Don't wait for a Command Completed notification if Command Completion interrupts are disabled. The spec explicitly says no interrupt is enabled when clearing CCIE, and on my T400 no interrupt is generated when CCIE is changed from cleared to set, either. In addition, the T400 doesn't appear to set the Command Completed bit in the cases where it doesn't generate an interrupt, so don't schedule the timer either. (If the CC bit were always set, one could always set the timer and rely on the logic of treating CC set as a missed interrupt.)

Reviewed by: imp (older version)
Differential Revision: https://reviews.freebsd.org/D6424

Details

Provenance
jhbAuthored on
Reviewer
imp
Differential Revision
D6424: Implement a proper detach method for the PCI-PCI bridge driver.
Parents
rS300248: iwm: add 'opt_wlan.h' include into source files.
Branches
Unknown
Tags
Unknown