linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / acpi / bus.c
index 279c4ba..606f873 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
-#include <linux/kernel.h>
 #include <linux/list.h>
 #include <linux/sched.h>
 #include <linux/pm.h>
@@ -44,7 +43,7 @@ ACPI_MODULE_NAME("acpi_bus")
 extern void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger);
 #endif
 
-struct fadt_descriptor acpi_fadt;
+FADT_DESCRIPTOR acpi_fadt;
 EXPORT_SYMBOL(acpi_fadt);
 
 struct acpi_device *acpi_root;
@@ -61,20 +60,21 @@ int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
 {
        acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_bus_get_device");
 
        if (!device)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        /* TBD: Support fixed-feature devices */
 
        status = acpi_get_data(handle, acpi_bus_data_handler, (void **)device);
        if (ACPI_FAILURE(status) || !*device) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No context for object [%p]\n",
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "No context for object [%p]\n",
                                  handle));
-               return -ENODEV;
+               return_VALUE(-ENODEV);
        }
 
-       return 0;
+       return_VALUE(0);
 }
 
 EXPORT_SYMBOL(acpi_bus_get_device);
@@ -84,9 +84,10 @@ int acpi_bus_get_status(struct acpi_device *device)
        acpi_status status = AE_OK;
        unsigned long sta = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_bus_get_status");
 
        if (!device)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        /*
         * Evaluate _STA if present.
@@ -95,7 +96,7 @@ int acpi_bus_get_status(struct acpi_device *device)
                status =
                    acpi_evaluate_integer(device->handle, "_STA", NULL, &sta);
                if (ACPI_FAILURE(status))
-                       return -ENODEV;
+                       return_VALUE(-ENODEV);
                STRUCT_TO_INT(device->status) = (int)sta;
        }
 
@@ -119,7 +120,7 @@ int acpi_bus_get_status(struct acpi_device *device)
                          device->pnp.bus_id,
                          (u32) STRUCT_TO_INT(device->status)));
 
-       return 0;
+       return_VALUE(0);
 }
 
 EXPORT_SYMBOL(acpi_bus_get_status);
@@ -135,10 +136,11 @@ int acpi_bus_get_power(acpi_handle handle, int *state)
        struct acpi_device *device = NULL;
        unsigned long psc = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_bus_get_power");
 
        result = acpi_bus_get_device(handle, &device);
        if (result)
-               return result;
+               return_VALUE(result);
 
        *state = ACPI_STATE_UNKNOWN;
 
@@ -157,12 +159,12 @@ int acpi_bus_get_power(acpi_handle handle, int *state)
                        status = acpi_evaluate_integer(device->handle, "_PSC",
                                                       NULL, &psc);
                        if (ACPI_FAILURE(status))
-                               return -ENODEV;
+                               return_VALUE(-ENODEV);
                        device->power.state = (int)psc;
                } else if (device->power.flags.power_resources) {
                        result = acpi_power_get_inferred_state(device);
                        if (result)
-                               return result;
+                               return_VALUE(result);
                }
 
                *state = device->power.state;
@@ -171,7 +173,7 @@ int acpi_bus_get_power(acpi_handle handle, int *state)
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] power state is D%d\n",
                          device->pnp.bus_id, device->power.state));
 
-       return 0;
+       return_VALUE(0);
 }
 
 EXPORT_SYMBOL(acpi_bus_get_power);
@@ -183,43 +185,42 @@ int acpi_bus_set_power(acpi_handle handle, int state)
        struct acpi_device *device = NULL;
        char object_name[5] = { '_', 'P', 'S', '0' + state, '\0' };
 
+       ACPI_FUNCTION_TRACE("acpi_bus_set_power");
 
        result = acpi_bus_get_device(handle, &device);
        if (result)
-               return result;
+               return_VALUE(result);
 
        if ((state < ACPI_STATE_D0) || (state > ACPI_STATE_D3))
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        /* Make sure this is a valid target state */
 
        if (!device->flags.power_manageable) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device `[%s]' is not power manageable\n",
-                               device->kobj.name));
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Device is not power manageable\n"));
+               return_VALUE(-ENODEV);
        }
        /*
         * Get device's current power state if it's unknown
         * This means device power state isn't initialized or previous setting failed
         */
-       if (!device->flags.force_power_state) {
-               if (device->power.state == ACPI_STATE_UNKNOWN)
-                       acpi_bus_get_power(device->handle, &device->power.state);
-               if (state == device->power.state) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n",
-                                         state));
-                       return 0;
-               }
+       if (device->power.state == ACPI_STATE_UNKNOWN)
+               acpi_bus_get_power(device->handle, &device->power.state);
+       if (state == device->power.state) {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n",
+                                 state));
+               return_VALUE(0);
        }
        if (!device->power.states[state].flags.valid) {
-               printk(KERN_WARNING PREFIX "Device does not support D%d\n", state);
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device does not support D%d\n",
+                                 state));
+               return_VALUE(-ENODEV);
        }
        if (device->parent && (state < device->parent->power.state)) {
-               printk(KERN_WARNING PREFIX
-                             "Cannot set device to a higher-powered"
-                             " state than parent\n");
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Cannot set device to a higher-powered state than parent\n"));
+               return_VALUE(-ENODEV);
        }
 
        /*
@@ -261,15 +262,15 @@ int acpi_bus_set_power(acpi_handle handle, int state)
 
       end:
        if (result)
-               printk(KERN_WARNING PREFIX
-                             "Transitioning device [%s] to D%d\n",
-                             device->pnp.bus_id, state);
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Error transitioning device [%s] to D%d\n",
+                                 device->pnp.bus_id, state));
        else
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
                                  "Device [%s] transitioned to D%d\n",
                                  device->pnp.bus_id, state));
 
-       return result;
+       return_VALUE(result);
 }
 
 EXPORT_SYMBOL(acpi_bus_set_power);
@@ -290,17 +291,18 @@ int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
        struct acpi_bus_event *event = NULL;
        unsigned long flags = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_bus_generate_event");
 
        if (!device)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        /* drop event on the floor if no one's listening */
        if (!event_is_open)
-               return 0;
+               return_VALUE(0);
 
        event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
        if (!event)
-               return -ENOMEM;
+               return_VALUE(-ENOMEM);
 
        strcpy(event->device_class, device->pnp.device_class);
        strcpy(event->bus_id, device->pnp.bus_id);
@@ -313,7 +315,7 @@ int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
 
        wake_up_interruptible(&acpi_bus_event_queue);
 
-       return 0;
+       return_VALUE(0);
 }
 
 EXPORT_SYMBOL(acpi_bus_generate_event);
@@ -325,9 +327,10 @@ int acpi_bus_receive_event(struct acpi_bus_event *event)
 
        DECLARE_WAITQUEUE(wait, current);
 
+       ACPI_FUNCTION_TRACE("acpi_bus_receive_event");
 
        if (!event)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        if (list_empty(&acpi_bus_event_list)) {
 
@@ -341,7 +344,7 @@ int acpi_bus_receive_event(struct acpi_bus_event *event)
                set_current_state(TASK_RUNNING);
 
                if (signal_pending(current))
-                       return -ERESTARTSYS;
+                       return_VALUE(-ERESTARTSYS);
        }
 
        spin_lock_irqsave(&acpi_bus_event_lock, flags);
@@ -352,13 +355,13 @@ int acpi_bus_receive_event(struct acpi_bus_event *event)
        spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
 
        if (!entry)
-               return -ENODEV;
+               return_VALUE(-ENODEV);
 
        memcpy(event, entry, sizeof(struct acpi_bus_event));
 
        kfree(entry);
 
-       return 0;
+       return_VALUE(0);
 }
 
 EXPORT_SYMBOL(acpi_bus_receive_event);
@@ -373,9 +376,10 @@ acpi_bus_check_device(struct acpi_device *device, int *status_changed)
        acpi_status status = 0;
        struct acpi_device_status old_status;
 
+       ACPI_FUNCTION_TRACE("acpi_bus_check_device");
 
        if (!device)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        if (status_changed)
                *status_changed = 0;
@@ -392,15 +396,15 @@ acpi_bus_check_device(struct acpi_device *device, int *status_changed)
                        if (status_changed)
                                *status_changed = 1;
                }
-               return 0;
+               return_VALUE(0);
        }
 
        status = acpi_bus_get_status(device);
        if (ACPI_FAILURE(status))
-               return -ENODEV;
+               return_VALUE(-ENODEV);
 
        if (STRUCT_TO_INT(old_status) == STRUCT_TO_INT(device->status))
-               return 0;
+               return_VALUE(0);
 
        if (status_changed)
                *status_changed = 1;
@@ -416,7 +420,7 @@ acpi_bus_check_device(struct acpi_device *device, int *status_changed)
                /* TBD: Handle device removal */
        }
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_bus_check_scope(struct acpi_device *device)
@@ -424,24 +428,25 @@ static int acpi_bus_check_scope(struct acpi_device *device)
        int result = 0;
        int status_changed = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_bus_check_scope");
 
        if (!device)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        /* Status Change? */
        result = acpi_bus_check_device(device, &status_changed);
        if (result)
-               return result;
+               return_VALUE(result);
 
        if (!status_changed)
-               return 0;
+               return_VALUE(0);
 
        /*
         * TBD: Enumerate child devices within this device's scope and
         *       run acpi_bus_check_device()'s on them.
         */
 
-       return 0;
+       return_VALUE(0);
 }
 
 /**
@@ -454,9 +459,10 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
        int result = 0;
        struct acpi_device *device = NULL;
 
+       ACPI_FUNCTION_TRACE("acpi_bus_notify");
 
        if (acpi_bus_get_device(handle, &device))
-               return;
+               return_VOID;
 
        switch (type) {
 
@@ -531,7 +537,7 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
                break;
        }
 
-       return;
+       return_VOID;
 }
 
 /* --------------------------------------------------------------------------
@@ -545,6 +551,7 @@ static int __init acpi_bus_init_irq(void)
        struct acpi_object_list arg_list = { 1, &arg };
        char *message = NULL;
 
+       ACPI_FUNCTION_TRACE("acpi_bus_init_irq");
 
        /* 
         * Let the system know what interrupt model we are using by
@@ -563,7 +570,7 @@ static int __init acpi_bus_init_irq(void)
                break;
        default:
                printk(KERN_WARNING PREFIX "Unknown interrupt routing model\n");
-               return -ENODEV;
+               return_VALUE(-ENODEV);
        }
 
        printk(KERN_INFO PREFIX "Using %s for interrupt routing\n", message);
@@ -572,11 +579,11 @@ static int __init acpi_bus_init_irq(void)
 
        status = acpi_evaluate_object(NULL, "\\_PIC", &arg_list, NULL);
        if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
-               ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PIC"));
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PIC\n"));
+               return_VALUE(-ENODEV);
        }
 
-       return 0;
+       return_VALUE(0);
 }
 
 void __init acpi_early_init(void)
@@ -584,11 +591,10 @@ void __init acpi_early_init(void)
        acpi_status status = AE_OK;
        struct acpi_buffer buffer = { sizeof(acpi_fadt), &acpi_fadt };
 
+       ACPI_FUNCTION_TRACE("acpi_early_init");
 
        if (acpi_disabled)
-               return;
-
-       printk(KERN_INFO PREFIX "Core revision %08x\n", ACPI_CA_VERSION);
+               return_VOID;
 
        /* enable workarounds, unless strict ACPI spec. compliance */
        if (!acpi_strict)
@@ -611,7 +617,7 @@ void __init acpi_early_init(void)
        /*
         * Get a separate copy of the FADT for use by other drivers.
         */
-       status = acpi_get_table(ACPI_TABLE_ID_FADT, 1, &buffer);
+       status = acpi_get_table(ACPI_TABLE_FADT, 1, &buffer);
        if (ACPI_FAILURE(status)) {
                printk(KERN_ERR PREFIX "Unable to get the FADT\n");
                goto error0;
@@ -646,11 +652,11 @@ void __init acpi_early_init(void)
                goto error0;
        }
 
-       return;
+       return_VOID;
 
       error0:
        disable_acpi();
-       return;
+       return_VOID;
 }
 
 static int __init acpi_bus_init(void)
@@ -659,6 +665,7 @@ static int __init acpi_bus_init(void)
        acpi_status status = AE_OK;
        extern acpi_status acpi_os_initialize1(void);
 
+       ACPI_FUNCTION_TRACE("acpi_bus_init");
 
        status = acpi_os_initialize1();
 
@@ -720,12 +727,12 @@ static int __init acpi_bus_init(void)
         */
        acpi_root_dir = proc_mkdir(ACPI_BUS_FILE_ROOT, NULL);
 
-       return 0;
+       return_VALUE(0);
 
        /* Mimic structured exception handling */
       error1:
        acpi_terminate();
-       return -ENODEV;
+       return_VALUE(-ENODEV);
 }
 
 decl_subsys(acpi, NULL, NULL);
@@ -734,16 +741,16 @@ static int __init acpi_init(void)
 {
        int result = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_init");
+
+       printk(KERN_INFO PREFIX "Subsystem revision %08x\n", ACPI_CA_VERSION);
 
        if (acpi_disabled) {
                printk(KERN_INFO PREFIX "Interpreter disabled.\n");
-               return -ENODEV;
+               return_VALUE(-ENODEV);
        }
 
-       result = firmware_register(&acpi_subsys);
-       if (result < 0)
-               printk(KERN_WARNING "%s: firmware_register error: %d\n",
-                       __FUNCTION__, result);
+       firmware_register(&acpi_subsys);
 
        result = acpi_bus_init();
 
@@ -761,7 +768,7 @@ static int __init acpi_init(void)
        } else
                disable_acpi();
 
-       return result;
+       return_VALUE(result);
 }
 
 subsys_initcall(acpi_init);