opnsense-src/sys/dev/pci
John Baldwin 82cb5c3b5b Native PCI-express HotPlug support.
PCI-express HotPlug support is implemented via bits in the slot
registers of the PCI-express capability of the downstream port along
with an interrupt that triggers when bits in the slot status register
change.

This is implemented for FreeBSD by adding HotPlug support to the
PCI-PCI bridge driver which attaches to the virtual PCI-PCI bridges
representing downstream ports on HotPlug slots. The PCI-PCI bridge
driver registers an interrupt handler to receive HotPlug events. It
also uses the slot registers to determine the current HotPlug state
and drive an internal HotPlug state machine. For simplicty of
implementation, the PCI-PCI bridge device detaches and deletes the
child PCI device when a card is removed from a slot and creates and
attaches a PCI child device when a card is inserted into the slot.

The PCI-PCI bridge driver provides a bus_child_present which claims
that child devices are present on HotPlug-capable slots only when a
card is inserted. Rather than requiring a timeout in the RC for
config accesses to not-present children, the pcib_read/write_config
methods fail all requests when a card is not present (or not yet
ready).

These changes include support for various optional HotPlug
capabilities such as a power controller, mechanical latch,
electro-mechanical interlock, indicators, and an attention button.
It also includes support for devices which require waiting for
command completion events before initiating a subsequent HotPlug
command. However, it has only been tested on ExpressCard systems
which support surprise removal and have none of these optional
capabilities.

PCI-express HotPlug support is conditional on the PCI_HP option
which is enabled by default on arm64, x86, and powerpc.

Reviewed by:	adrian, imp, vangyzen (older versions)
Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D6136
2016-05-05 22:26:23 +00:00
..
eisa_pci.c Revert previous change. The magical constants can't be changed 2015-06-06 17:04:36 +00:00
fixup_pci.c Use device_printf(). 2013-08-11 06:57:57 +00:00
hostb_pci.c sys/dev: minor spelling fixes. 2016-05-03 03:41:25 +00:00
ignore_pci.c Revert previous change. The magical constants can't be changed 2015-06-06 17:04:36 +00:00
isa_pci.c Convert rman to use rman_res_t instead of u_long 2016-01-27 02:23:54 +00:00
pci.c Fix build without "options PCI_IOV". 2016-05-04 06:22:41 +00:00
pci_host_generic.c Pull the MSI/MSI-X handling functions out to help with INTRNG integration. 2016-04-18 10:37:50 +00:00
pci_host_generic.h Restore ThunderX Pass1.1 PCI changes removed by r295962 2016-02-26 12:16:11 +00:00
pci_if.m Add a new PCI bus interface method to alloc the ivars (dinfo) for a device. 2016-04-15 03:42:12 +00:00
pci_iov.c Save and restore SRIOV-related config registers. 2016-05-03 19:45:24 +00:00
pci_iov.h Create a separate kobj interface for leaf-driver PCI IOV methods. 2015-05-28 22:01:50 +00:00
pci_iov_if.m Create a separate kobj interface for leaf-driver PCI IOV methods. 2015-05-28 22:01:50 +00:00
pci_iov_private.h Save and restore SRIOV-related config registers. 2016-05-03 19:45:24 +00:00
pci_iov_schema.c Clean up repeated "All rights reserved" 2016-03-14 17:41:17 +00:00
pci_pci.c Native PCI-express HotPlug support. 2016-05-05 22:26:23 +00:00
pci_private.h Implement a PCI bus rescan method. 2016-04-27 16:31:12 +00:00
pci_subr.c Use uintmax_t (typedef'd to rman_res_t type) for rman ranges. 2016-03-18 01:28:41 +00:00
pci_user.c Fix syntax error introduced in previous commit where I removed one 2016-02-19 16:53:21 +00:00
pcib_if.m drop a bunch of white space at end of lines and end of files... 2015-10-18 08:13:51 +00:00
pcib_private.h Native PCI-express HotPlug support. 2016-05-05 22:26:23 +00:00
pcib_support.c Add some pcib methods to get ARI-related information 2015-03-01 00:39:40 +00:00
pcireg.h Native PCI-express HotPlug support. 2016-05-05 22:26:23 +00:00
pcivar.h Add a new PCI bus interface method to alloc the ivars (dinfo) for a device. 2016-04-15 03:42:12 +00:00
schema_private.h Clean up repeated "All rights reserved" 2016-03-14 17:41:17 +00:00
vga_pci.c Replace all resource occurrences of '0UL/~0UL' with '0/~0'. 2016-03-03 05:07:35 +00:00