}
-static int __init
-acpi_bus_init (void)
+void __init
+acpi_early_init (void)
{
- int result = 0;
acpi_status status = AE_OK;
struct acpi_buffer buffer = {sizeof(acpi_fadt), &acpi_fadt};
- ACPI_FUNCTION_TRACE("acpi_bus_init");
+ ACPI_FUNCTION_TRACE("acpi_early_init");
+
+ if (acpi_disabled)
+ return;
+
+ /* enable workarounds, unless strict ACPI spec. compliance */
+ if (!acpi_strict)
+ acpi_gbl_enable_interpreter_slack = TRUE;
status = acpi_initialize_subsystem();
if (ACPI_FAILURE(status)) {
status = acpi_get_table(ACPI_TABLE_FADT, 1, &buffer);
if (ACPI_FAILURE(status)) {
printk(KERN_ERR PREFIX "Unable to get the FADT\n");
- goto error1;
+ goto error0;
}
#ifdef CONFIG_X86
}
#endif
- status = acpi_enable_subsystem(ACPI_FULL_INITIALIZATION);
+ status = acpi_enable_subsystem(~(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE));
+ if (ACPI_FAILURE(status)) {
+ printk(KERN_ERR PREFIX "Unable to enable ACPI\n");
+ goto error0;
+ }
+
+ return;
+
+error0:
+ disable_acpi();
+ return;
+}
+
+static int __init
+acpi_bus_init (void)
+{
+ int result = 0;
+ acpi_status status = AE_OK;
+ extern acpi_status acpi_os_initialize1(void);
+
+ ACPI_FUNCTION_TRACE("acpi_bus_init");
+
+ status = acpi_os_initialize1();
+
+ status = acpi_enable_subsystem(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE);
if (ACPI_FAILURE(status)) {
printk(KERN_ERR PREFIX "Unable to start the ACPI Interpreter\n");
goto error1;
}
+ if (ACPI_FAILURE(status)) {
+ printk(KERN_ERR PREFIX "Unable to initialize ACPI OS objects\n");
+ goto error1;
+ }
#ifdef CONFIG_ACPI_EC
/*
* ACPI 2.0 requires the EC driver to be loaded and work before
/* Mimic structured exception handling */
error1:
acpi_terminate();
-error0:
return_VALUE(-ENODEV);
}
printk(KERN_INFO PREFIX "Subsystem revision %08x\n",
ACPI_CA_VERSION);
- /* Initial core debug level excludes drivers, so include them now */
- acpi_set_debug(ACPI_DEBUG_LOW);
-
if (acpi_disabled) {
printk(KERN_INFO PREFIX "Interpreter disabled.\n");
return -ENODEV;