From a528f59865a3528b21c18c9fa6956b29f7c343f1 Mon Sep 17 00:00:00 2001 From: Sascha Wildner Date: Mon, 12 Oct 2015 23:22:08 +0200 Subject: [PATCH] kernel/acpi: Restructure _OSC eval func a bit. No functional change. --- sys/dev/acpica/acpi.c | 42 ++++++++++++++++++---------------------- sys/dev/acpica/acpivar.h | 1 + 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index 9d5b9b4d78..ac1dfe14ea 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -1271,39 +1271,35 @@ acpi_eval_osc(device_t dev, ACPI_HANDLE handle, const char *uuidstr, arg[3].Buffer.Pointer = (uint8_t *)buf; status = AcpiEvaluateObject(handle, "_OSC", &arglist, &retbuf); - if (ACPI_FAILURE(status)) { - return (status); - } else { - retobj = retbuf.Pointer; - error = ((uint32_t *)retobj->Buffer.Pointer)[0] & - ~ACPI_OSC_QUERY_SUPPORT; - if (error & ACPI_OSCERR_OSCFAIL) { - device_printf(dev, "_OSC unable to process request\n"); - status = AE_ERROR; - } - if (error & ACPI_OSCERR_UUID) { - device_printf(dev, "_OSC unrecognized UUID (%s)\n", uuidstr); - status = AE_ERROR; - } - if (error & ACPI_OSCERR_REVISION) { - device_printf(dev, "_OSC unrecognized revision ID (%d)\n", - revision); - status = AE_ERROR; - } - if (error & ACPI_OSCERR_CAPSMASKED) { - if (buf[0] & ACPI_OSC_QUERY_SUPPORT) - goto done; + if (ACPI_FAILURE(status)) + goto done; + retobj = retbuf.Pointer; + error = ((uint32_t *)retobj->Buffer.Pointer)[0] & ACPI_OSCERR_MASK; + if (error == 0) + goto done; + status = AE_ERROR; + if (error & ACPI_OSCERR_OSCFAIL) + device_printf(dev, "_OSC unable to process request\n"); + if (error & ACPI_OSCERR_UUID) + device_printf(dev, "_OSC unrecognized UUID (%s)\n", uuidstr); + if (error & ACPI_OSCERR_REVISION) + device_printf(dev, "_OSC unrecognized revision ID (%d)\n", revision); + if (error & ACPI_OSCERR_CAPSMASKED) { + if ((buf[0] & ACPI_OSC_QUERY_SUPPORT) == 0) { for (i = 1; i < count; i++) { device_printf(dev, "_OSC capabilities have been masked: buf[%d]:%#x\n", i, buf[i] & ~((uint32_t *)retobj->Buffer.Pointer)[i]); } status = AE_SUPPORT; + } else { + status = AE_OK; } } done: - AcpiOsFree(retbuf.Pointer); + if (retbuf.Pointer != NULL) + AcpiOsFree(retbuf.Pointer); return (status); } diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h index fe3c338176..e26d8ed0d1 100644 --- a/sys/dev/acpica/acpivar.h +++ b/sys/dev/acpica/acpivar.h @@ -216,6 +216,7 @@ extern struct lock acpi_lock; #define ACPI_OSCERR_UUID (1 << 2) /* Unrecognized UUID */ #define ACPI_OSCERR_REVISION (1 << 3) /* Unrecognized revision ID */ #define ACPI_OSCERR_CAPSMASKED (1 << 4) /* Capabilities have been cleared */ +#define ACPI_OSCERR_MASK 0x0000001e /* * Quirk flags. -- 2.41.0