vserver 1.9.3
[linux-2.6.git] / drivers / acpi / bus.c
index 5136233..4c303e1 100644 (file)
@@ -590,14 +590,20 @@ acpi_bus_init_irq (void)
 }
 
 
-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)) {
@@ -617,7 +623,7 @@ acpi_bus_init (void)
        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
@@ -640,12 +646,40 @@ acpi_bus_init (void)
        }
 #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
@@ -693,7 +727,6 @@ acpi_bus_init (void)
        /* Mimic structured exception handling */
 error1:
        acpi_terminate();
-error0:
        return_VALUE(-ENODEV);
 }
 
@@ -708,9 +741,6 @@ static int __init acpi_init (void)
        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;