Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux-2.6-microblaze.git] / drivers / acpi / utils.c
index d5411a1..682edd9 100644 (file)
@@ -6,6 +6,8 @@
  *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
  */
 
+#define pr_fmt(fmt) "ACPI: utils: " fmt
+
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 #include "internal.h"
 #include "sleep.h"
 
-#define _COMPONENT             ACPI_BUS_COMPONENT
-ACPI_MODULE_NAME("utils");
-
 /* --------------------------------------------------------------------------
                             Object Evaluation Helpers
    -------------------------------------------------------------------------- */
-static void
-acpi_util_eval_error(acpi_handle h, acpi_string p, acpi_status s)
+static void acpi_util_eval_error(acpi_handle h, acpi_string p, acpi_status s)
 {
-#ifdef ACPI_DEBUG_OUTPUT
-       char prefix[80] = {'\0'};
-       struct acpi_buffer buffer = {sizeof(prefix), prefix};
-       acpi_get_name(h, ACPI_FULL_PATHNAME, &buffer);
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluate [%s.%s]: %s\n",
-               (char *) prefix, p, acpi_format_exception(s)));
-#else
-       return;
-#endif
+       acpi_handle_debug(h, "Evaluate [%s]: %s\n", p, acpi_format_exception(s));
 }
 
 acpi_status
@@ -53,25 +43,24 @@ acpi_extract_package(union acpi_object *package,
 
        if (!package || (package->type != ACPI_TYPE_PACKAGE)
            || (package->package.count < 1)) {
-               printk(KERN_WARNING PREFIX "Invalid package argument\n");
+               pr_debug("Invalid package argument\n");
                return AE_BAD_PARAMETER;
        }
 
        if (!format || !format->pointer || (format->length < 1)) {
-               printk(KERN_WARNING PREFIX "Invalid format argument\n");
+               pr_debug("Invalid format argument\n");
                return AE_BAD_PARAMETER;
        }
 
        if (!buffer) {
-               printk(KERN_WARNING PREFIX "Invalid buffer argument\n");
+               pr_debug("Invalid buffer argument\n");
                return AE_BAD_PARAMETER;
        }
 
        format_count = (format->length / sizeof(char)) - 1;
        if (format_count > package->package.count) {
-               printk(KERN_WARNING PREFIX "Format specifies more objects [%d]"
-                             " than exist in package [%d].\n",
-                             format_count, package->package.count);
+               pr_debug("Format specifies more objects [%d] than present [%d]\n",
+                        format_count, package->package.count);
                return AE_BAD_DATA;
        }
 
@@ -99,10 +88,8 @@ acpi_extract_package(union acpi_object *package,
                                tail_offset += sizeof(char *);
                                break;
                        default:
-                               printk(KERN_WARNING PREFIX "Invalid package element"
-                                             " [%d]: got number, expecting"
-                                             " [%c]\n",
-                                             i, format_string[i]);
+                               pr_debug("Invalid package element [%d]: got number, expected [%c]\n",
+                                        i, format_string[i]);
                                return AE_BAD_DATA;
                        }
                        break;
@@ -123,10 +110,8 @@ acpi_extract_package(union acpi_object *package,
                                tail_offset += sizeof(u8 *);
                                break;
                        default:
-                               printk(KERN_WARNING PREFIX "Invalid package element"
-                                             " [%d] got string/buffer,"
-                                             " expecting [%c]\n",
-                                             i, format_string[i]);
+                               pr_debug("Invalid package element [%d] got string/buffer, expected [%c]\n",
+                                        i, format_string[i]);
                                return AE_BAD_DATA;
                        }
                        break;
@@ -137,19 +122,15 @@ acpi_extract_package(union acpi_object *package,
                                tail_offset += sizeof(void *);
                                break;
                        default:
-                               printk(KERN_WARNING PREFIX "Invalid package element"
-                                             " [%d] got reference,"
-                                             " expecting [%c]\n",
-                                             i, format_string[i]);
+                               pr_debug("Invalid package element [%d] got reference, expected [%c]\n",
+                                        i, format_string[i]);
                                return AE_BAD_DATA;
                        }
                        break;
 
                case ACPI_TYPE_PACKAGE:
                default:
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                         "Found unsupported element at index=%d\n",
-                                         i));
+                       pr_debug("Unsupported element at index=%d\n", i);
                        /* TBD: handle nested packages... */
                        return AE_SUPPORT;
                }
@@ -289,7 +270,7 @@ acpi_evaluate_integer(acpi_handle handle,
 
        *data = element.integer.value;
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%llu]\n", *data));
+       acpi_handle_debug(handle, "Return value [%llu]\n", *data);
 
        return AE_OK;
 }
@@ -363,8 +344,7 @@ acpi_evaluate_reference(acpi_handle handle,
                /* Get the  acpi_handle. */
 
                list->handles[i] = element->reference.handle;
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found reference [%p]\n",
-                                 list->handles[i]));
+               acpi_handle_debug(list->handles[i], "Found in reference list\n");
        }
 
       end:
@@ -843,12 +823,13 @@ bool acpi_dev_present(const char *hid, const char *uid, s64 hrv)
 EXPORT_SYMBOL(acpi_dev_present);
 
 /**
- * acpi_dev_get_first_match_dev - Return the first match of ACPI device
+ * acpi_dev_get_next_match_dev - Return the next match of ACPI device
+ * @adev: Pointer to the previous acpi_device matching this @hid, @uid and @hrv
  * @hid: Hardware ID of the device.
  * @uid: Unique ID of the device, pass NULL to not check _UID
  * @hrv: Hardware Revision of the device, pass -1 to not check _HRV
  *
- * Return the first match of ACPI device if a matching device was present
+ * Return the next match of ACPI device if another matching device was present
  * at the moment of invocation, or NULL otherwise.
  *
  * The caller is responsible to call put_device() on the returned device.
@@ -856,8 +837,9 @@ EXPORT_SYMBOL(acpi_dev_present);
  * See additional information in acpi_dev_present() as well.
  */
 struct acpi_device *
-acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
+acpi_dev_get_next_match_dev(struct acpi_device *adev, const char *hid, const char *uid, s64 hrv)
 {
+       struct device *start = adev ? &adev->dev : NULL;
        struct acpi_dev_match_info match = {};
        struct device *dev;
 
@@ -865,9 +847,29 @@ acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
        match.uid = uid;
        match.hrv = hrv;
 
-       dev = bus_find_device(&acpi_bus_type, NULL, &match, acpi_dev_match_cb);
+       dev = bus_find_device(&acpi_bus_type, start, &match, acpi_dev_match_cb);
        return dev ? to_acpi_device(dev) : NULL;
 }
+EXPORT_SYMBOL(acpi_dev_get_next_match_dev);
+
+/**
+ * acpi_dev_get_first_match_dev - Return the first match of ACPI device
+ * @hid: Hardware ID of the device.
+ * @uid: Unique ID of the device, pass NULL to not check _UID
+ * @hrv: Hardware Revision of the device, pass -1 to not check _HRV
+ *
+ * Return the first match of ACPI device if a matching device was present
+ * at the moment of invocation, or NULL otherwise.
+ *
+ * The caller is responsible to call put_device() on the returned device.
+ *
+ * See additional information in acpi_dev_present() as well.
+ */
+struct acpi_device *
+acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
+{
+       return acpi_dev_get_next_match_dev(NULL, hid, uid, hrv);
+}
 EXPORT_SYMBOL(acpi_dev_get_first_match_dev);
 
 /*