DRY - Use a helper function to check and log failures.

This commit is contained in:
Fredrik Holmqvist 2014-08-27 22:49:09 +02:00
parent 0842eba04e
commit c5baf46055
1 changed files with 39 additions and 52 deletions

View File

@ -44,12 +44,22 @@ extern dpc_module_info* gDPC;
void* gDPCHandle = NULL; void* gDPCHandle = NULL;
static bool
checkAndLogFailure(const ACPI_STATUS status, const char* msg)
{
bool failure = ACPI_FAILURE(status);
if (failure)
dprintf("acpi: %s %s\n", msg, AcpiFormatException(status));
return failure;
}
static ACPI_STATUS static ACPI_STATUS
get_device_by_hid_callback(ACPI_HANDLE object, UINT32 depth, void* context, get_device_by_hid_callback(ACPI_HANDLE object, UINT32 depth, void* context,
void** _returnValue) void** _returnValue)
{ {
uint32* counter = (uint32*)context; uint32* counter = (uint32*)context;
ACPI_STATUS status;
ACPI_BUFFER buffer; ACPI_BUFFER buffer;
TRACE("get_device_by_hid_callback %p, %d, %p\n", object, depth, context); TRACE("get_device_by_hid_callback %p, %d, %p\n", object, depth, context);
@ -60,8 +70,8 @@ get_device_by_hid_callback(ACPI_HANDLE object, UINT32 depth, void* context,
buffer.Length = 254; buffer.Length = 254;
buffer.Pointer = malloc(255); buffer.Pointer = malloc(255);
status = AcpiGetName(object, ACPI_FULL_PATHNAME, &buffer); if (checkAndLogFailure(AcpiGetName(object, ACPI_FULL_PATHNAME, &buffer),
if (status != AE_OK) { "Failed to find device")) {
free(buffer.Pointer); free(buffer.Pointer);
return AE_CTRL_TERMINATE; return AE_CTRL_TERMINATE;
} }
@ -85,7 +95,6 @@ acpi_std_ops(int32 op,...)
switch (op) { switch (op) {
case B_MODULE_INIT: case B_MODULE_INIT:
{ {
ACPI_STATUS status;
ACPI_OBJECT arg; ACPI_OBJECT arg;
ACPI_OBJECT_LIST parameter; ACPI_OBJECT_LIST parameter;
void *settings; void *settings;
@ -125,51 +134,36 @@ acpi_std_ops(int32 op,...)
AcpiDbgLayer = ACPI_ALL_COMPONENTS; AcpiDbgLayer = ACPI_ALL_COMPONENTS;
#endif #endif
status = AcpiInitializeSubsystem(); if (checkAndLogFailure(AcpiInitializeSubsystem(),
if (ACPI_FAILURE(status)) { "AcpiInitializeSubsystem failed"))
ERROR("AcpiInitializeSubsystem failed (%s)\n",
AcpiFormatException(status));
goto err; goto err;
}
status = AcpiInitializeTables(NULL, 0, TRUE); if (checkAndLogFailure(AcpiInitializeTables(NULL, 0, TRUE),
if (ACPI_FAILURE(status)) { "AcpiInitializeTables failed"))
ERROR("AcpiInitializeTables failed (%s)\n",
AcpiFormatException(status));
goto err; goto err;
}
status = AcpiLoadTables(); if (checkAndLogFailure(AcpiLoadTables(),
if (ACPI_FAILURE(status)) { "AcpiLoadTables failed"))
ERROR("AcpiLoadTables failed (%s)\n",
AcpiFormatException(status));
goto err; goto err;
}
/* Install the default address space handlers. */ /* Install the default address space handlers. */
status = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, if (checkAndLogFailure(AcpiInstallAddressSpaceHandler(
ACPI_ADR_SPACE_SYSTEM_MEMORY, ACPI_DEFAULT_HANDLER, NULL, NULL); ACPI_ROOT_OBJECT, ACPI_ADR_SPACE_SYSTEM_MEMORY,
if (ACPI_FAILURE(status)) { ACPI_DEFAULT_HANDLER, NULL, NULL),
ERROR("Could not initialise SystemMemory handler: %s\n", "Could not initialise SystemMemory handler:"))
AcpiFormatException(status));
goto err; goto err;
}
status = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, if (checkAndLogFailure(AcpiInstallAddressSpaceHandler(
ACPI_ADR_SPACE_SYSTEM_IO, ACPI_DEFAULT_HANDLER, NULL, NULL); ACPI_ROOT_OBJECT, ACPI_ADR_SPACE_SYSTEM_IO,
if (ACPI_FAILURE(status)) { ACPI_DEFAULT_HANDLER, NULL, NULL),
ERROR("Could not initialise SystemIO handler: %s\n", "Could not initialise SystemIO handler:"))
AcpiFormatException(status));
goto err; goto err;
}
status = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, if (checkAndLogFailure(AcpiInstallAddressSpaceHandler(
ACPI_ADR_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL); ACPI_ROOT_OBJECT, ACPI_ADR_SPACE_PCI_CONFIG,
if (ACPI_FAILURE(status)) { ACPI_DEFAULT_HANDLER, NULL, NULL),
ERROR("Could not initialise PciConfig handler: %s\n", "Could not initialise PciConfig handler:"))
AcpiFormatException(status));
goto err; goto err;
}
arg.Integer.Type = ACPI_TYPE_INTEGER; arg.Integer.Type = ACPI_TYPE_INTEGER;
arg.Integer.Value = 0; arg.Integer.Value = 0;
@ -179,22 +173,15 @@ acpi_std_ops(int32 op,...)
AcpiEvaluateObject(NULL, "\\_PIC", &parameter, NULL); AcpiEvaluateObject(NULL, "\\_PIC", &parameter, NULL);
// FreeBSD seems to pass in the above flags here as if (checkAndLogFailure(AcpiEnableSubsystem(
// well but specs don't define ACPI_NO_DEVICE_INIT ACPI_FULL_INITIALIZATION),
// and ACPI_NO_OBJECT_INIT here. "AcpiEnableSubsystem failed"))
status = AcpiEnableSubsystem(ACPI_FULL_INITIALIZATION);
if (ACPI_FAILURE(status)) {
ERROR("AcpiEnableSubsystem failed (%s)\n",
AcpiFormatException(status));
goto err; goto err;
}
status = AcpiInitializeObjects(ACPI_FULL_INITIALIZATION); if (checkAndLogFailure(AcpiInitializeObjects(
if (ACPI_FAILURE(status)) { ACPI_FULL_INITIALIZATION),
ERROR("AcpiInitializeObjects failed (%s)\n", "AcpiInitializeObjects failed"))
AcpiFormatException(status));
goto err; goto err;
}
/* Phew. Now in ACPI mode */ /* Phew. Now in ACPI mode */
TRACE("ACPI initialized\n"); TRACE("ACPI initialized\n");
@ -206,8 +193,8 @@ acpi_std_ops(int32 op,...)
case B_MODULE_UNINIT: case B_MODULE_UNINIT:
{ {
if (AcpiTerminate() != AE_OK) if (checkAndLogFailure(AcpiTerminate(),
ERROR("Could not bring system out of ACPI mode. Oh well.\n"); "Could not bring system out of ACPI mode. Oh well."));
gDPC->delete_dpc_queue(gDPCHandle); gDPC->delete_dpc_queue(gDPCHandle);
gDPCHandle = NULL; gDPCHandle = NULL;