Page MenuHomeFreeBSD

D6040.id15427.diff
No OneTemporary

D6040.id15427.diff

Index: sys/dev/acpica/acpi.c
===================================================================
--- sys/dev/acpica/acpi.c
+++ sys/dev/acpica/acpi.c
@@ -2482,10 +2482,12 @@
ACPI_STATUS
acpi_EvaluateOSC(ACPI_HANDLE handle, uint8_t *uuid, int revision, int count,
- uint32_t *caps)
+ uint32_t *caps_in, uint32_t *caps_out, bool query)
{
- ACPI_OBJECT arg[4];
+ ACPI_OBJECT arg[4], *ret;
ACPI_OBJECT_LIST arglist;
+ ACPI_BUFFER buf;
+ ACPI_STATUS status;
arglist.Pointer = arg;
arglist.Count = 4;
@@ -2497,9 +2499,25 @@
arg[2].Type = ACPI_TYPE_INTEGER;
arg[2].Integer.Value = count;
arg[3].Type = ACPI_TYPE_BUFFER;
- arg[3].Buffer.Length = count * sizeof(*caps);
- arg[3].Buffer.Pointer = (uint8_t *)caps;
- return (AcpiEvaluateObject(handle, "_OSC", &arglist, NULL));
+ arg[3].Buffer.Length = count * sizeof(*caps_in);
+ arg[3].Buffer.Pointer = (uint8_t *)caps_in;
+ caps_in[0] = query ? 1 : 0;
+ buf.Pointer = NULL;
+ buf.Length = ACPI_ALLOCATE_BUFFER;
+ status = AcpiEvaluateObjectTyped(handle, "_OSC", &arglist, &buf,
+ ACPI_TYPE_BUFFER);
+ if (ACPI_FAILURE(status))
+ return (status);
+ if (caps_out != NULL) {
+ ret = buf.Pointer;
+ if (ret->Buffer.Length != count * sizeof(*caps_out)) {
+ AcpiOsFree(buf.Pointer);
+ return (AE_BUFFER_OVERFLOW);
+ }
+ bcopy(ret->Buffer.Pointer, caps_out, ret->Buffer.Length);
+ }
+ AcpiOsFree(buf.Pointer);
+ return (status);
}
/*
Index: sys/dev/acpica/acpi_cpu.c
===================================================================
--- sys/dev/acpica/acpi_cpu.c
+++ sys/dev/acpica/acpi_cpu.c
@@ -391,9 +391,9 @@
* Intel Processor Vendor-Specific ACPI Interface Specification.
*/
if (sc->cpu_features) {
- cap_set[0] = 0;
cap_set[1] = sc->cpu_features;
- status = acpi_EvaluateOSC(sc->cpu_handle, cpu_oscuuid, 1, 2, cap_set);
+ status = acpi_EvaluateOSC(sc->cpu_handle, cpu_oscuuid, 1, 2, cap_set,
+ cap_set, false);
if (ACPI_SUCCESS(status)) {
if (cap_set[0] != 0)
device_printf(dev, "_OSC returned status %#x\n", cap_set[0]);
Index: sys/dev/acpica/acpi_pcib_acpi.c
===================================================================
--- sys/dev/acpica/acpi_pcib_acpi.c
+++ sys/dev/acpica/acpi_pcib_acpi.c
@@ -306,9 +306,6 @@
0x96, 0x57, 0x74, 0x41, 0xc0, 0x3d, 0xd7, 0x66
};
- /* Query Support Flag */
- cap_set[0] = 0;
-
/* Support Field: Extended PCI Config Space, MSI */
cap_set[1] = 0x11;
@@ -316,7 +313,7 @@
cap_set[2] = 0;
status = acpi_EvaluateOSC(sc->ap_handle, pci_host_bridge_uuid, 1,
- nitems(cap_set), cap_set);
+ nitems(cap_set), cap_set, cap_set, false);
if (ACPI_FAILURE(status)) {
if (status == AE_NOT_FOUND)
return;
Index: sys/dev/acpica/acpivar.h
===================================================================
--- sys/dev/acpica/acpivar.h
+++ sys/dev/acpica/acpivar.h
@@ -336,7 +336,8 @@
ACPI_STATUS acpi_AppendBufferResource(ACPI_BUFFER *buf,
ACPI_RESOURCE *res);
ACPI_STATUS acpi_EvaluateOSC(ACPI_HANDLE handle, uint8_t *uuid,
- int revision, int count, uint32_t *caps);
+ int revision, int count, uint32_t *caps_in,
+ uint32_t *caps_out, bool query);
ACPI_STATUS acpi_OverrideInterruptLevel(UINT32 InterruptNumber);
ACPI_STATUS acpi_SetIntrModel(int model);
int acpi_ReqSleepState(struct acpi_softc *sc, int state);

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 21, 3:05 AM (3 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28907008
Default Alt Text
D6040.id15427.diff (3 KB)

Event Timeline