Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c2778357 authored by Andrew Patterson's avatar Andrew Patterson Committed by Greg Kroah-Hartman
Browse files

PCI ACPI: Added a function to register _OSC with only PCIe devices.



The function pci_osc_support_set() traverses every root bridge when
checking for _OSC support for a capability.  It quits as soon as it finds a
device/bridge that doesn't support the requested capability. This won't
work for systems that have mixed PCI and PCIe bridges when checking for
PCIe features.  I split this function into two -- pci_osc_support_set() and
pcie_osc_support_set(). The latter is used when only PCIe devices should be
traversed.

Signed-off-by: default avatarAndrew Patterson <andrew.patterson@hp.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 02d90fc3
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -156,13 +156,13 @@ acpi_run_osc (
}

/**
 * pci_osc_support_set - register OS support to Firmware
 * __pci_osc_support_set - register OS support to Firmware
 * @flags: OS support bits
 *
 * Update OS support fields and doing a _OSC Query to obtain an update
 * from Firmware on supported control bits.
 **/
acpi_status pci_osc_support_set(u32 flags)
acpi_status __pci_osc_support_set(u32 flags, const char *hid)
{
	u32 temp;
	acpi_status retval;
@@ -176,7 +176,7 @@ acpi_status pci_osc_support_set(u32 flags)
	temp = ctrlset_buf[OSC_CONTROL_TYPE];
	ctrlset_buf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE;
	ctrlset_buf[OSC_CONTROL_TYPE] = OSC_CONTROL_MASKS;
	acpi_get_devices ( PCI_ROOT_HID_STRING,
	acpi_get_devices(hid,
			acpi_query_osc,
			ctrlset_buf,
			(void **) &retval );
+10 −1
Original line number Diff line number Diff line
@@ -48,7 +48,15 @@

#ifdef CONFIG_ACPI
extern acpi_status pci_osc_control_set(acpi_handle handle, u32 flags);
extern acpi_status pci_osc_support_set(u32 flags);
extern acpi_status __pci_osc_support_set(u32 flags, const char *hid);
static inline acpi_status pci_osc_support_set(u32 flags)
{
	return __pci_osc_support_set(flags, PCI_ROOT_HID_STRING);
}
static inline acpi_status pcie_osc_support_set(u32 flags)
{
	return __pci_osc_support_set(flags, PCI_EXPRESS_ROOT_HID_STRING);
}
#else
#if !defined(AE_ERROR)
typedef u32 		acpi_status;
@@ -57,6 +65,7 @@ typedef u32 acpi_status;
static inline acpi_status pci_osc_control_set(acpi_handle handle, u32 flags)
{return AE_ERROR;}
static inline acpi_status pci_osc_support_set(u32 flags) {return AE_ERROR;} 
static inline acpi_status pcie_osc_support_set(u32 flags) {return AE_ERROR;}
#endif

#endif	/* _PCI_ACPI_H_ */