mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
pci: Make PCIe Eject timeout configurable
PCIe mandates a 5 second delay between when the "Attention Button" is pressed and when the associated device is detached; this is to allow for the button to be pressed a second time to cancel the ejection. On some systems this 5 second delay may not be desireable; so introduce a hw.pci.pcie_hp_detach_timeout sysctl (which can also be set as a loader tunable) which specifies the timeout in milliseconds (default 5000). If set to zero, the device is detached immediately. Reviewed by: jhb MFC after: 2 weeks Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D49585 (cherry picked from commit 9be42ee6c9c741052bdc49f13bc953bf88a24423)
This commit is contained in:
parent
1bd29261b9
commit
217fce1377
1 changed files with 16 additions and 5 deletions
|
|
@ -951,6 +951,11 @@ SYSCTL_INT(_hw_pci, OID_AUTO, enable_pcie_hp, CTLFLAG_RDTUN,
|
|||
&pci_enable_pcie_hp, 0,
|
||||
"Enable support for native PCI-express HotPlug.");
|
||||
|
||||
static sbintime_t pcie_hp_detach_timeout = 5 * SBT_1S;
|
||||
SYSCTL_SBINTIME_MSEC(_hw_pci, OID_AUTO, pcie_hp_detach_timeout, CTLFLAG_RWTUN,
|
||||
&pcie_hp_detach_timeout,
|
||||
"Attention Button delay for PCI-express Eject.");
|
||||
|
||||
TASKQUEUE_DEFINE_THREAD(pci_hp);
|
||||
|
||||
static void
|
||||
|
|
@ -1221,11 +1226,17 @@ pcib_pcie_intr_hotplug(void *arg)
|
|||
&sc->pcie_ab_task, NULL);
|
||||
} else if (old_slot_sta & PCIEM_SLOT_STA_PDS) {
|
||||
/* Only initiate detach sequence if device present. */
|
||||
device_printf(dev,
|
||||
"Attention Button Pressed: Detaching in 5 seconds\n");
|
||||
sc->flags |= PCIB_DETACH_PENDING;
|
||||
taskqueue_enqueue_timeout(taskqueue_pci_hp,
|
||||
&sc->pcie_ab_task, 5 * hz);
|
||||
if (pcie_hp_detach_timeout != 0) {
|
||||
device_printf(dev,
|
||||
"Attention Button Pressed: Detaching in %ld ms\n",
|
||||
(long)(pcie_hp_detach_timeout / SBT_1MS));
|
||||
sc->flags |= PCIB_DETACH_PENDING;
|
||||
taskqueue_enqueue_timeout_sbt(taskqueue_pci_hp,
|
||||
&sc->pcie_ab_task, pcie_hp_detach_timeout,
|
||||
SBT_1S, 0);
|
||||
} else {
|
||||
sc->flags |= PCIB_DETACHING;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sc->pcie_slot_sta & PCIEM_SLOT_STA_PFD)
|
||||
|
|
|
|||
Loading…
Reference in a new issue