Page MenuHomeFreeBSD

D48048.diff
No OneTemporary

D48048.diff

diff --git a/sys/dev/pci/pci_host_generic_acpi.h b/sys/dev/pci/pci_host_generic_acpi.h
--- a/sys/dev/pci/pci_host_generic_acpi.h
+++ b/sys/dev/pci/pci_host_generic_acpi.h
@@ -35,6 +35,7 @@
struct generic_pcie_acpi_softc {
struct generic_pcie_core_softc base;
int segment;
+ uint32_t osc_ctl;
ACPI_BUFFER ap_prt; /* interrupt routing table */
};
diff --git a/sys/dev/pci/pci_host_generic_acpi.c b/sys/dev/pci/pci_host_generic_acpi.c
--- a/sys/dev/pci/pci_host_generic_acpi.c
+++ b/sys/dev/pci/pci_host_generic_acpi.c
@@ -287,6 +287,8 @@
sc = device_get_softc(dev);
handle = acpi_get_handle(dev);
+ acpi_pcib_osc(dev, &sc->osc_ctl, 0);
+
/* Get Start bus number for the PCI host bus is from _BBN method */
status = acpi_GetInteger(handle, "_BBN", &sc->base.bus_start);
if (ACPI_FAILURE(status)) {
@@ -504,6 +506,30 @@
return (pcib_get_id(pci, child, type, id));
}
+static int
+generic_pcie_acpi_request_feature(device_t pcib, device_t dev,
+ enum pci_feature feature)
+{
+ struct generic_pcie_acpi_softc *sc;
+ uint32_t osc_ctl;
+
+ sc = device_get_softc(pcib);
+
+ switch (feature) {
+ case PCI_FEATURE_HP:
+ osc_ctl = PCIM_OSC_CTL_PCIE_HP;
+ break;
+ case PCI_FEATURE_AER:
+ osc_ctl = PCIM_OSC_CTL_PCIE_AER;
+ break;
+ default:
+ return (EINVAL);
+ }
+
+ return (acpi_pcib_osc(pcib, &sc->osc_ctl, osc_ctl));
+}
+
+
static device_method_t generic_pcie_acpi_methods[] = {
DEVMETHOD(device_probe, generic_pcie_acpi_probe),
DEVMETHOD(device_attach, pci_host_generic_acpi_attach),
@@ -517,6 +543,7 @@
DEVMETHOD(pcib_release_msix, generic_pcie_acpi_release_msix),
DEVMETHOD(pcib_map_msi, generic_pcie_acpi_map_msi),
DEVMETHOD(pcib_get_id, generic_pcie_acpi_get_id),
+ DEVMETHOD(pcib_request_feature, generic_pcie_acpi_request_feature),
DEVMETHOD_END
};

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 17, 10:04 PM (14 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27699880
Default Alt Text
D48048.diff (1 KB)

Event Timeline