[PATCH 04/11] acpica: fwts_acpica: reworking required for new ACPICA changes
Keng-Yu Lin
kengyu at canonical.com
Thu Apr 12 06:16:10 UTC 2012
On Thu, Apr 12, 2012 at 7:50 AM, Colin King <colin.king at canonical.com> wrote:
> 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
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list