[PATCH 04/11] acpica: fwts_acpica: reworking required for new ACPICA changes
Colin King
colin.king at canonical.com
Wed Apr 11 23:50:49 UTC 2012
From: Colin Ian King <colin.king at canonical.com>
Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
src/acpica/fwts_acpica.c | 496 ++++++++++++++++++++++++++++++++--------------
1 file changed, 351 insertions(+), 145 deletions(-)
diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
index 609dc8f..7d851e9 100644
--- a/src/acpica/fwts_acpica.c
+++ b/src/acpica/fwts_acpica.c
@@ -80,6 +80,25 @@ static int fwts_acpica_force_sem_timeout; /* > 0, forces a semaphore timeout
static bool fwts_acpica_init_called; /* > 0, ACPICA initialised */
static fwts_acpica_log_callback fwts_acpica_log_callback_func = NULL; /* logging call back func */
+#define ACPI_ADR_SPACE_USER_DEFINED1 0x80
+#define ACPI_ADR_SPACE_USER_DEFINED2 0xE4
+
+static ACPI_ADR_SPACE_TYPE fwts_space_id_list[] =
+{
+ ACPI_ADR_SPACE_SYSTEM_MEMORY,
+ ACPI_ADR_SPACE_SYSTEM_IO,
+ ACPI_ADR_SPACE_EC,
+ ACPI_ADR_SPACE_SMBUS,
+ ACPI_ADR_SPACE_CMOS,
+ ACPI_ADR_SPACE_GSBUS,
+ ACPI_ADR_SPACE_GPIO,
+ ACPI_ADR_SPACE_PCI_BAR_TARGET,
+ ACPI_ADR_SPACE_IPMI,
+ ACPI_ADR_SPACE_FIXED_HARDWARE,
+ ACPI_ADR_SPACE_USER_DEFINED1,
+ ACPI_ADR_SPACE_USER_DEFINED2
+};
+
/* Semaphore Tracking */
/*
@@ -126,17 +145,16 @@ void fwts_acpica_simulate_sem_timeout(int timeout)
fwts_acpica_force_sem_timeout = timeout;
}
-
/*
* hash_sem_handle()
* generate a simple hash based on semaphore handle
*/
static unsigned int hash_sem_handle(sem_t *sem)
-{
+{
unsigned int i = (unsigned int)((unsigned long)sem % MAX_SEMAPHORES);
int j;
- for (j=0;j<MAX_SEMAPHORES;j++) {
+ for (j = 0; j<MAX_SEMAPHORES; j++) {
if (sem_hash_table[i].sem == sem)
return i;
if (sem_hash_table[i].sem == NULL)
@@ -175,61 +193,205 @@ static void hash_sem_dec_count(sem_t *sem)
/* ACPICA Handlers */
/*
- * fwtsNotifyHandler()
+ * fwts_notify_handler()
* Notify handler
*/
-static void fwtsNotifyHandler(ACPI_HANDLE Device, UINT32 Value, void *Context)
+static void fwts_notify_handler(ACPI_HANDLE Device, UINT32 Value, void *Context)
+{
+ (void)AcpiEvaluateObject(Device, "_NOT", NULL, NULL);
+}
+
+static void fwts_device_notify_handler(ACPI_HANDLE Device, UINT32 Value, void *Context)
{
- /* fwts_log_info(fwts_acpica_fw, "Received a notify 0x%X", Value); */
+ (void)AcpiEvaluateObject(Device, "_NOT", NULL, NULL);
}
-static UINT32 fwtsInterfaceHandler(ACPI_STRING InterfaceName, UINT32 Supported)
+static UINT32 fwts_interface_handler(ACPI_STRING InterfaceName, UINT32 Supported)
{
return Supported;
}
-static ACPI_STATUS fwtsTableHandler(UINT32 Event, void *Table, void *Context)
+static ACPI_STATUS fwts_table_handler(UINT32 Event, void *Table, void *Context)
{
return AE_OK;
}
-static ACPI_STATUS fwtsExceptionHandler(ACPI_STATUS AmlStatus, ACPI_NAME Name,
- UINT16 Opcode, UINT32 AmlOffset, void *Context)
+static UINT32 fwts_event_handler(void *Context)
+{
+ return 0;
+}
+
+static ACPI_STATUS fwts_exception_handler(
+ ACPI_STATUS AmlStatus,
+ ACPI_NAME Name,
+ UINT16 Opcode,
+ UINT32 AmlOffset,
+ void *Context)
{
char *exception = (char*)AcpiFormatException(AmlStatus);
if (Name)
- fwts_log_info(fwts_acpica_fw, "ACPICA Exception %s during execution of method %4.4s", exception, (char*)&Name);
+ fwts_log_info(fwts_acpica_fw,
+ "ACPICA Exception %s during execution of method %4.4s",
+ exception, (char*)&Name);
else
- fwts_log_info(fwts_acpica_fw, "ACPICA Exception %s during execution at module level (table load)", exception);
+ fwts_log_info(fwts_acpica_fw,
+ "ACPICA Exception %s during execution at module level (table load)",
+ exception);
return AmlStatus;
}
-static void fwtsDeviceNotifyHandler(ACPI_HANDLE device, UINT32 value, void *context)
+static void fwts_attached_data_handler(ACPI_HANDLE obj, void *data)
{
- (void)AcpiEvaluateObject(device, "_NOT", NULL, NULL);
}
-static void fwtsAttachedDataHandler(ACPI_HANDLE obj, void *data)
+static ACPI_STATUS fwts_region_init(
+ ACPI_HANDLE RegionHandle,
+ UINT32 Function,
+ void *HandlerContext,
+ void **RegionContext)
{
+ *RegionContext = RegionHandle;
+ return AE_OK;
}
-static ACPI_STATUS fwtsRegionInit(ACPI_HANDLE RegionHandle, UINT32 Function,
- void *HandlerContext, void **RegionContext)
+static ACPI_STATUS fwts_region_handler(
+ UINT32 function,
+ ACPI_PHYSICAL_ADDRESS address,
+ UINT32 bitwidth,
+ UINT64 *value,
+ void *handlercontext,
+ void *regioncontext)
{
- *RegionContext = RegionHandle;
- return (AE_OK);
-}
+ ACPI_OPERAND_OBJECT *regionobject = ACPI_CAST_PTR(ACPI_OPERAND_OBJECT, regioncontext);
+ UINT8 *buffer = ACPI_CAST_PTR(UINT8, value);
+ ACPI_SIZE length;
+ UINT32 bytewidth;
+ ACPI_CONNECTION_INFO *context;
+ int i;
+
+ if (regionobject->Region.Type != ACPI_TYPE_REGION)
+ return AE_OK;
+
+ context = ACPI_CAST_PTR (ACPI_CONNECTION_INFO, handlercontext);
+ length = (ACPI_SIZE)regionobject->Region.Length;
+
+ switch (regionobject->Region.SpaceId) {
+ case ACPI_ADR_SPACE_SYSTEM_IO:
+ switch (function & ACPI_IO_MASK) {
+ case ACPI_READ:
+ *value = 0;
+ break;
+ case ACPI_WRITE:
+ break;
+ default:
+ return AE_BAD_PARAMETER;
+ break;
+ }
+ break;
-extern ACPI_STATUS
-AeRegionHandler (
- UINT32 Function,
- ACPI_PHYSICAL_ADDRESS Address,
- UINT32 BitWidth,
- UINT64 *Value,
- void *HandlerContext,
- void *RegionContext);
+ case ACPI_ADR_SPACE_SMBUS:
+ case ACPI_ADR_SPACE_GSBUS: /* ACPI 5.0 */
+ length = 0;
+
+ switch (function & ACPI_IO_MASK) {
+ case ACPI_READ:
+ switch (function >> 16) {
+ case AML_FIELD_ATTRIB_QUICK:
+ case AML_FIELD_ATTRIB_SEND_RCV:
+ case AML_FIELD_ATTRIB_BYTE:
+ length = 1;
+ break;
+ case AML_FIELD_ATTRIB_WORD:
+ case AML_FIELD_ATTRIB_WORD_CALL:
+ length = 2;
+ break;
+ case AML_FIELD_ATTRIB_BLOCK:
+ case AML_FIELD_ATTRIB_BLOCK_CALL:
+ length = 32;
+ break;
+ case AML_FIELD_ATTRIB_MULTIBYTE:
+ case AML_FIELD_ATTRIB_RAW_BYTES:
+ case AML_FIELD_ATTRIB_RAW_PROCESS:
+ length = context->AccessLength - 2;
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case ACPI_WRITE:
+ switch (function >> 16) {
+ case AML_FIELD_ATTRIB_QUICK:
+ case AML_FIELD_ATTRIB_SEND_RCV:
+ case AML_FIELD_ATTRIB_BYTE:
+ case AML_FIELD_ATTRIB_WORD:
+ case AML_FIELD_ATTRIB_BLOCK:
+ length = 0;
+ break;
+ case AML_FIELD_ATTRIB_WORD_CALL:
+ length = 2;
+ break;
+ case AML_FIELD_ATTRIB_BLOCK_CALL:
+ length = 32;
+ break;
+ case AML_FIELD_ATTRIB_MULTIBYTE:
+ case AML_FIELD_ATTRIB_RAW_BYTES:
+ case AML_FIELD_ATTRIB_RAW_PROCESS:
+ length = context->AccessLength - 2;
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ for (i = 0; i < length; i++)
+ buffer[i+2] = (UINT8)(0xA0 + i);
+ buffer[0] = 0x7A;
+ buffer[1] = (UINT8)length;
+ return AE_OK;
+
+ case ACPI_ADR_SPACE_IPMI: /* ACPI 4.0 */
+ buffer[0] = 0; /* Status byte */
+ buffer[1] = 64; /* Return buffer data length */
+ buffer[2] = 0; /* Completion code */
+ buffer[3] = 0; /* Reserved */
+ for (i = 4; i < 66; i++)
+ buffer[i] = (UINT8) (i);
+ return AE_OK;
+
+ case ACPI_ADR_SPACE_SYSTEM_MEMORY:
+ case ACPI_ADR_SPACE_EC:
+ case ACPI_ADR_SPACE_CMOS:
+ case ACPI_ADR_SPACE_GPIO:
+ case ACPI_ADR_SPACE_PCI_BAR_TARGET:
+ case ACPI_ADR_SPACE_FIXED_HARDWARE:
+ case ACPI_ADR_SPACE_USER_DEFINED1:
+ case ACPI_ADR_SPACE_USER_DEFINED2:
+ default:
+ bytewidth = (bitwidth / 8);
+ if (bitwidth % 8)
+ bytewidth += 1;
+
+ switch (function) {
+ case ACPI_READ:
+ /* Fake it, return all zeros */
+ memset(value, 0, bytewidth);
+ break;
+ case ACPI_WRITE:
+ /* Fake it, do nothing */
+ break;
+ default:
+ return AE_BAD_PARAMETER;
+ }
+ return AE_OK;
+ }
+
+ return AE_OK;
+}
/*
* AeLocalGetRootPointer()
@@ -237,7 +399,7 @@ AeRegionHandler (
*/
ACPI_PHYSICAL_ADDRESS AeLocalGetRootPointer(void)
{
- return ((ACPI_PHYSICAL_ADDRESS) fwts_acpica_RSDP);
+ return (ACPI_PHYSICAL_ADDRESS)fwts_acpica_RSDP;
}
/*
@@ -266,10 +428,10 @@ void fwts_acpica_debug_command(fwts_framework *fw, fwts_acpica_log_callback func
void fwts_acpica_vprintf(const char *fmt, va_list args)
{
static char *buffer;
- static int buffer_len;
+ static size_t buffer_len;
char tmp[4096];
- int tmp_len;
+ size_t tmp_len;
vsnprintf(tmp, sizeof(tmp), fmt, args);
tmp_len = strlen(tmp);
@@ -289,7 +451,7 @@ void fwts_acpica_vprintf(const char *fmt, va_list args)
else
buffer_len = 0;
}
-
+
if (index(buffer, '\n') != NULL) {
if (fwts_acpica_log_callback_func)
fwts_acpica_log_callback_func(fwts_acpica_fw, buffer);
@@ -365,7 +527,7 @@ ACPI_STATUS AcpiOsWaitSemaphore(ACPI_HANDLE handle, UINT32 Units, UINT16 Timeout
* Override ACPICA AcpiOsSignalSemaphore to keep track of semaphore releases
* so that we can see if any methods are sloppy in their releases.
*/
-ACPI_STATUS AcpiOsSignalSemaphore (ACPI_HANDLE handle, UINT32 Units)
+ACPI_STATUS AcpiOsSignalSemaphore(ACPI_HANDLE handle, UINT32 Units)
{
sem_t *sem = (sem_t *)handle;
@@ -387,17 +549,17 @@ ACPI_STATUS AcpiOsSignalSemaphore (ACPI_HANDLE handle, UINT32 Units)
ACPI_STATUS AcpiOsReadPort(ACPI_IO_ADDRESS addr, UINT32 *value, UINT32 width)
{
switch (width) {
- case 8:
- *value = 0xFF;
- break;
- case 16:
- *value = 0xFFFF;
- break;
- case 32:
- *value = 0xFFFFFFFF;
- break;
- default:
- return AE_BAD_PARAMETER;
+ case 8:
+ *value = 0xFF;
+ break;
+ case 16:
+ *value = 0xFFFF;
+ break;
+ case 32:
+ *value = 0xFFFFFFFF;
+ break;
+ default:
+ return AE_BAD_PARAMETER;
}
return AE_OK;
}
@@ -409,39 +571,154 @@ ACPI_STATUS AcpiOsReadPort(ACPI_IO_ADDRESS addr, UINT32 *value, UINT32 width)
ACPI_STATUS AcpiOsReadPciConfiguration(ACPI_PCI_ID *pciid, UINT32 reg, UINT64 *value, UINT32 width)
{
switch (width) {
- case 8:
- *value = 0x00;
- break;
- case 16:
- *value = 0x0000;
- break;
- case 32:
- *value = 0x00000000;
- break;
- default:
- return AE_BAD_PARAMETER;
+ case 8:
+ *value = 0x00;
+ break;
+ case 16:
+ *value = 0x0000;
+ break;
+ case 32:
+ *value = 0x00000000;
+ break;
+ default:
+ return AE_BAD_PARAMETER;
}
return AE_OK;
}
void AeTableOverride(ACPI_TABLE_HEADER *ExistingTable, ACPI_TABLE_HEADER **NewTable)
{
- if (strncmp(ExistingTable->Signature, ACPI_SIG_DSDT, 4) == 0)
+ if (strncmp(ExistingTable->Signature, ACPI_SIG_DSDT, 4) == 0)
*NewTable = (ACPI_TABLE_HEADER*)fwts_acpica_DSDT;
}
-ACPI_STATUS AcpiOsSignal (UINT32 function, void *info)
+ACPI_STATUS AcpiOsSignal(UINT32 function, void *info)
{
- switch (function) {
- case ACPI_SIGNAL_BREAKPOINT:
- fwts_warning(fwts_acpica_fw, "Method contains an ACPICA breakpoint: %s\n", info ? (char*)info : "No Information");
- AcpiGbl_CmSingleStep = FALSE;
- break;
- case ACPI_SIGNAL_FATAL:
- default:
- break;
- }
- return AE_OK;
+ switch (function) {
+ case ACPI_SIGNAL_BREAKPOINT:
+ fwts_warning(fwts_acpica_fw,
+ "Method contains an ACPICA breakpoint: %s\n",
+ info ? (char*)info : "No Information");
+ AcpiGbl_CmSingleStep = FALSE;
+ break;
+ case ACPI_SIGNAL_FATAL:
+ default:
+ break;
+ }
+ return AE_OK;
+}
+
+int fwtsInstallLateHandlers(fwts_framework *fw)
+{
+ int i;
+
+ if (!AcpiGbl_ReducedHardware) {
+ if (AcpiInstallFixedEventHandler(ACPI_EVENT_GLOBAL, fwts_event_handler, NULL) != AE_OK) {
+ fwts_log_error(fw, "Failed to install global event handler.");
+ return FWTS_ERROR;
+ }
+ if (AcpiInstallFixedEventHandler(ACPI_EVENT_RTC, fwts_event_handler, NULL) != AE_OK) {
+ fwts_log_error(fw, "Failed to install RTC event handler.");
+ return FWTS_ERROR;
+ }
+ }
+
+ for (i = 0; i < ACPI_ARRAY_LENGTH(fwts_space_id_list); i++) {
+ if (AcpiInstallAddressSpaceHandler(AcpiGbl_RootNode,
+ fwts_space_id_list[i], fwts_region_handler, fwts_region_init, NULL) != AE_OK) {
+ fwts_log_error(fw,
+ "Failed to install handler for %s space(%u)",
+ AcpiUtGetRegionName((UINT8)fwts_space_id_list[i]),
+ fwts_space_id_list[i]);
+ return FWTS_ERROR;
+ }
+ }
+
+ return FWTS_OK;
+}
+
+int fwtsInstallEarlyHandlers(fwts_framework *fw)
+{
+ int i;
+ ACPI_HANDLE handle;
+
+ if (AcpiInstallInterfaceHandler(fwts_interface_handler) != AE_OK) {
+ fwts_log_error(fw, "Failed to install interface handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiInstallTableHandler(fwts_table_handler, NULL) != AE_OK) {
+ fwts_log_error(fw, "Failed to install table handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiInstallExceptionHandler(fwts_exception_handler) != AE_OK) {
+ fwts_log_error(fw, "Failed to install exception handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiInstallNotifyHandler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY, fwts_notify_handler, NULL) != AE_OK) {
+ fwts_log_error(fw, "Failed to install system notify handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiInstallNotifyHandler(ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY, fwts_device_notify_handler, NULL) != AE_OK) {
+ fwts_log_error(fw, "Failed to install device notify handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiGetHandle(NULL, "\\_SB", &handle) == AE_OK) {
+ if (AcpiInstallNotifyHandler(handle, ACPI_SYSTEM_NOTIFY, fwts_notify_handler, NULL) != AE_OK) {
+ fwts_log_error(fw, "Failed to install notify handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiRemoveNotifyHandler(handle, ACPI_SYSTEM_NOTIFY, fwts_notify_handler) != AE_OK) {
+ fwts_log_error(fw, "Failed to remove notify handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiInstallNotifyHandler(handle, ACPI_ALL_NOTIFY, fwts_notify_handler, NULL) != AE_OK) {
+ fwts_log_error(fw, "Failed to install notify handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiRemoveNotifyHandler(handle, ACPI_ALL_NOTIFY, fwts_notify_handler) != AE_OK) {
+ fwts_log_error(fw, "Failed to remove notify handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiInstallNotifyHandler(handle, ACPI_ALL_NOTIFY, fwts_notify_handler, NULL) != AE_OK) {
+ fwts_log_error(fw, "Failed to install notify handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiAttachData(handle, fwts_attached_data_handler, handle) != AE_OK) {
+ fwts_log_error(fw, "Failed to attach data handler.");
+ return FWTS_ERROR;
+ }
+ if (AcpiDetachData(handle, fwts_attached_data_handler) != AE_OK) {
+ fwts_log_error(fw, "Failed to detach data handler.");
+ return FWTS_ERROR;
+ }
+
+ if (AcpiAttachData(handle, fwts_attached_data_handler, handle) != AE_OK) {
+ fwts_log_error(fw, "Failed to attach data handler.");
+ return FWTS_ERROR;
+ }
+ }
+
+ for (i = 0; i < ACPI_ARRAY_LENGTH(fwts_space_id_list); i++) {
+ if (AcpiInstallAddressSpaceHandler(AcpiGbl_RootNode,
+ fwts_space_id_list[i], fwts_region_handler, fwts_region_init, NULL) != AE_OK) {
+ fwts_log_error(fw,
+ "Could not install an OpRegion handler for %s space(%u)",
+ AcpiUtGetRegionName((UINT8)fwts_space_id_list[i]),
+ fwts_space_id_list[i]);
+ return FWTS_ERROR;
+ }
+ }
+ return FWTS_OK;
}
@@ -451,12 +728,10 @@ ACPI_STATUS AcpiOsSignal (UINT32 function, void *info)
*/
int fwts_acpica_init(fwts_framework *fw)
{
- ACPI_HANDLE handle;
int i;
int n;
UINT32 init_flags = ACPI_FULL_INITIALIZATION;
fwts_acpi_table_info *table;
- ACPI_ADR_SPACE_TYPE SpaceIdList[] = {0, 1, 3, 4, 5, 6, 7, 0x80};
/* Abort if already initialised */
if (fwts_acpica_init_called)
@@ -517,7 +792,7 @@ int fwts_acpica_init(fwts_framework *fw)
} else {
fwts_acpica_FADT = NULL;
}
-
+
/* Clone XSDT, make it point to tables in user address space */
if (fwts_acpi_find_table(fw, "XSDT", 0, &table) != FWTS_OK)
return FWTS_ERROR;
@@ -558,14 +833,14 @@ int fwts_acpica_init(fwts_framework *fw)
return FWTS_ERROR;
if (table) {
uint32_t *entries;
-
+
fwts_acpica_RSDT = fwts_low_calloc(1, table->length);
if (fwts_acpica_RSDT == NULL) {
fwts_log_error(fw, "Out of memory allocating RSDT.");
return FWTS_ERROR;
}
memcpy(fwts_acpica_RSDT, table->data, sizeof(ACPI_TABLE_HEADER));
-
+
n = (table->length - sizeof(ACPI_TABLE_HEADER)) / sizeof(uint32_t);
entries = (uint32_t*)(table->data + sizeof(ACPI_TABLE_HEADER));
for (i=0; i<n; i++) {
@@ -621,80 +896,11 @@ int fwts_acpica_init(fwts_framework *fw)
return FWTS_ERROR;
}
- /* Install handlers */
- if (AcpiInstallInterfaceHandler(fwtsInterfaceHandler) != AE_OK) {
- fwts_log_error(fw, "Failed to install interface handler.");
- return FWTS_ERROR;
- }
- if (AcpiInstallTableHandler(fwtsTableHandler, NULL) != AE_OK) {
- fwts_log_error(fw, "Failed to install table handler.");
- return FWTS_ERROR;
- }
- if (AcpiInstallExceptionHandler(fwtsExceptionHandler) != AE_OK) {
- fwts_log_error(fw, "Failed to install exception handler.");
- return FWTS_ERROR;
- }
- if (AcpiInstallNotifyHandler( ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY, fwtsNotifyHandler, NULL) != AE_OK) {
- fwts_log_error(fw, "Failed to install notify handler.");
- return FWTS_ERROR;
- }
- if (AcpiInstallNotifyHandler( ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY, fwtsDeviceNotifyHandler, NULL) != AE_OK) {
- fwts_log_error(fw, "Failed to install notify handler.");
- return FWTS_ERROR;
- }
- if (AcpiGetHandle(NULL, "\\_SB", &handle) == AE_OK) {
-#if 0
- if (AcpiInstallNotifyHandler(handle, ACPI_SYSTEM_NOTIFY, fwtsNotifyHandler, NULL) != AE_OK) {
- fwts_log_error(fw, "Failed to install notify handler.");
- return FWTS_ERROR;
- }
- if (AcpiRemoveNotifyHandler(handle, ACPI_SYSTEM_NOTIFY, fwtsNotifyHandler) != AE_OK) {
- fwts_log_error(fw, "Failed to remove notify handler.");
- return FWTS_ERROR;
- }
- if (AcpiInstallNotifyHandler(handle, ACPI_ALL_NOTIFY, fwtsNotifyHandler, NULL) != AE_OK) {
- fwts_log_error(fw, "Failed to install notify handler.");
- return FWTS_ERROR;
- }
- if (AcpiRemoveNotifyHandler(handle, ACPI_ALL_NOTIFY, fwtsNotifyHandler) != AE_OK) {
- fwts_log_error(fw, "Failed to remove notify handler.");
- return FWTS_ERROR;
- }
-#endif
- if (AcpiInstallNotifyHandler(handle, ACPI_ALL_NOTIFY, fwtsNotifyHandler, NULL) != AE_OK) {
- fwts_log_error(fw, "Failed to install notify handler.");
- return FWTS_ERROR;
- }
-#if 0
- if (AcpiAttachData(handle, fwtsAttachedDataHandler, handle) != AE_OK) {
- fwts_log_error(fw, "Failed to attach data handler.");
- return FWTS_ERROR;
- }
- if (AcpiDetachData(handle, fwtsAttachedDataHandler) != AE_OK) {
- fwts_log_error(fw, "Failed to detach data handler.");
- return FWTS_ERROR;
- }
-#endif
- if (AcpiAttachData(handle, fwtsAttachedDataHandler, handle) != AE_OK) {
- fwts_log_error(fw, "Failed to attach data handler.");
- return FWTS_ERROR;
- }
- }
-
- for (i = 0; i < AEXEC_NUM_REGIONS; i++) {
- AcpiRemoveAddressSpaceHandler (AcpiGbl_RootNode, SpaceIdList[i], AeRegionHandler);
- if (AcpiInstallAddressSpaceHandler (AcpiGbl_RootNode,
- SpaceIdList[i], AeRegionHandler, fwtsRegionInit, NULL) != AE_OK) {
- fwts_log_error(fw, "Could not install an OpRegion handler for %s space(%u)",
- AcpiUtGetRegionName((UINT8)SpaceIdList[i]), SpaceIdList[i]);
- return FWTS_ERROR;
- }
- }
+ (void)fwtsInstallEarlyHandlers(fw);
AcpiEnableSubsystem(init_flags);
AcpiInitializeObjects(init_flags);
-
- AcpiDbCommandDispatch ("methods", NULL, NULL);
+ (void)fwtsInstallLateHandlers(fw);
fwts_acpica_init_called = true;
@@ -763,8 +969,8 @@ fwts_list *fwts_acpica_get_object_names(int type)
fwts_list *list;
if ((list = fwts_list_new()) != NULL)
- AcpiWalkNamespace (type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
+ AcpiWalkNamespace(type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
fwts_acpi_walk_for_object_names, NULL, list, NULL);
-
+
return list;
}
--
1.7.9.5
More information about the fwts-devel
mailing list