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: Andrew Patterson <andrew.patterson@hp.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
02d90fc343
commit
c277835723
2 changed files with 13 additions and 4 deletions
|
@ -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
|
* @flags: OS support bits
|
||||||
*
|
*
|
||||||
* Update OS support fields and doing a _OSC Query to obtain an update
|
* Update OS support fields and doing a _OSC Query to obtain an update
|
||||||
* from Firmware on supported control bits.
|
* 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;
|
u32 temp;
|
||||||
acpi_status retval;
|
acpi_status retval;
|
||||||
|
@ -176,7 +176,7 @@ acpi_status pci_osc_support_set(u32 flags)
|
||||||
temp = ctrlset_buf[OSC_CONTROL_TYPE];
|
temp = ctrlset_buf[OSC_CONTROL_TYPE];
|
||||||
ctrlset_buf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE;
|
ctrlset_buf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE;
|
||||||
ctrlset_buf[OSC_CONTROL_TYPE] = OSC_CONTROL_MASKS;
|
ctrlset_buf[OSC_CONTROL_TYPE] = OSC_CONTROL_MASKS;
|
||||||
acpi_get_devices ( PCI_ROOT_HID_STRING,
|
acpi_get_devices(hid,
|
||||||
acpi_query_osc,
|
acpi_query_osc,
|
||||||
ctrlset_buf,
|
ctrlset_buf,
|
||||||
(void **) &retval );
|
(void **) &retval );
|
||||||
|
|
|
@ -48,7 +48,15 @@
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
extern acpi_status pci_osc_control_set(acpi_handle handle, u32 flags);
|
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
|
#else
|
||||||
#if !defined(AE_ERROR)
|
#if !defined(AE_ERROR)
|
||||||
typedef u32 acpi_status;
|
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)
|
static inline acpi_status pci_osc_control_set(acpi_handle handle, u32 flags)
|
||||||
{return AE_ERROR;}
|
{return AE_ERROR;}
|
||||||
static inline acpi_status pci_osc_support_set(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
|
||||||
|
|
||||||
#endif /* _PCI_ACPI_H_ */
|
#endif /* _PCI_ACPI_H_ */
|
||||||
|
|
Loading…
Reference in a new issue