Merge branch 'acpica'
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 5 Aug 2014 20:50:12 +0000 (22:50 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 5 Aug 2014 20:50:12 +0000 (22:50 +0200)
* acpica:
  ACPICA: Update version to 20140724.
  ACPICA: ACPI 5.1: Update for PCCT table changes.
  ACPICA/ARM: ACPI 5.1: Update for GTDT table changes.
  ACPICA/ARM: ACPI 5.1: Update for MADT changes.
  ACPICA/ARM: ACPI 5.1: Update for FADT changes.
  ACPICA: ACPI 5.1: Support for the _CCA predifined name.
  ACPICA: ACPI 5.1: New notify value for System Affinity Update.
  ACPICA: ACPI 5.1: Support for the _DSD predefined name.
  ACPICA: Debug object: Add current value of Timer() to debug line prefix.
  ACPICA: acpihelp: Add UUID support, restructure some existing files.
  ACPICA: Utilities: Fix local printf issue.
  ACPICA: Tables: Update for DMAR table changes.
  ACPICA: Remove some extraneous printf arguments.
  ACPICA: Update for comments/formatting. No functional changes.
  ACPICA: Disassembler: Add support for the ToUUID opererator (macro).
  ACPICA: Remove a redundant cast to acpi_size for ACPI_OFFSET() macro.
  ACPICA: Work around an ancient GCC bug.

21 files changed:
drivers/acpi/acpica/Makefile
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/acpredef.h
drivers/acpi/acpica/acutils.h
drivers/acpi/acpica/exdebug.c
drivers/acpi/acpica/exdump.c
drivers/acpi/acpica/exfield.c
drivers/acpi/acpica/utdecode.c
drivers/acpi/acpica/utfileio.c
drivers/acpi/acpica/uthex.c [new file with mode: 0644]
drivers/acpi/acpica/utprint.c
drivers/acpi/acpica/utuuid.c [new file with mode: 0644]
drivers/iommu/dmar.c
include/acpi/acconfig.h
include/acpi/acnames.h
include/acpi/acpixf.h
include/acpi/actbl.h
include/acpi/actbl1.h
include/acpi/actbl2.h
include/acpi/actbl3.h
include/acpi/actypes.h

index 4be4cc9..c1a9635 100644 (file)
@@ -157,6 +157,7 @@ acpi-y +=           \
        uterror.o       \
        uteval.o        \
        utglobal.o      \
+       uthex.o         \
        utids.o         \
        utinit.o        \
        utlock.o        \
@@ -175,5 +176,10 @@ acpi-y +=          \
        utxferror.o     \
        utxfmutex.o
 
-acpi-$(ACPI_FUTURE_USAGE) += utfileio.o utprint.o uttrack.o utcache.o
+acpi-$(ACPI_FUTURE_USAGE) +=   \
+       utcache.o               \
+       utfileio.o              \
+       utprint.o               \
+       uttrack.o               \
+       utuuid.o
 
index 91f801a..1f9aba5 100644 (file)
@@ -730,12 +730,13 @@ union acpi_parse_value {
 #define ACPI_DASM_STRING                0x02   /* Buffer is a ASCII string */
 #define ACPI_DASM_UNICODE               0x03   /* Buffer is a Unicode string */
 #define ACPI_DASM_PLD_METHOD            0x04   /* Buffer is a _PLD method bit-packed buffer */
-#define ACPI_DASM_EISAID                0x05   /* Integer is an EISAID */
-#define ACPI_DASM_MATCHOP               0x06   /* Parent opcode is a Match() operator */
-#define ACPI_DASM_LNOT_PREFIX           0x07   /* Start of a Lnot_equal (etc.) pair of opcodes */
-#define ACPI_DASM_LNOT_SUFFIX           0x08   /* End  of a Lnot_equal (etc.) pair of opcodes */
-#define ACPI_DASM_HID_STRING            0x09   /* String is a _HID or _CID */
-#define ACPI_DASM_IGNORE                0x0A   /* Not used at this time */
+#define ACPI_DASM_UUID                  0x05   /* Buffer is a UUID/GUID */
+#define ACPI_DASM_EISAID                0x06   /* Integer is an EISAID */
+#define ACPI_DASM_MATCHOP               0x07   /* Parent opcode is a Match() operator */
+#define ACPI_DASM_LNOT_PREFIX           0x08   /* Start of a Lnot_equal (etc.) pair of opcodes */
+#define ACPI_DASM_LNOT_SUFFIX           0x09   /* End  of a Lnot_equal (etc.) pair of opcodes */
+#define ACPI_DASM_HID_STRING            0x0A   /* String is a _HID or _CID */
+#define ACPI_DASM_IGNORE                0x0B   /* Not used at this time */
 
 /*
  * Generic operation (for example:  If, While, Store)
@@ -1154,4 +1155,9 @@ struct ah_device_id {
        char *description;
 };
 
+struct ah_uuid {
+       char *description;
+       char *string;
+};
+
 #endif                         /* __ACLOCAL_H__ */
index bd08817..bd3908d 100644 (file)
  *      count = 0 (optional)
  *      (Used for _DLM)
  *
+ * ACPI_PTYPE2_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID
+ *      defines the format of the package. Zero-length parent package is
+ *      allowed.
+ *      (Used for _DSD)
+ *
  *****************************************************************************/
 
 enum acpi_return_package_types {
@@ -117,7 +122,8 @@ enum acpi_return_package_types {
        ACPI_PTYPE2_FIXED = 7,
        ACPI_PTYPE2_MIN = 8,
        ACPI_PTYPE2_REV_FIXED = 9,
-       ACPI_PTYPE2_FIX_VAR = 10
+       ACPI_PTYPE2_FIX_VAR = 10,
+       ACPI_PTYPE2_UUID_PAIR = 11
 };
 
 /* Support macros for users of the predefined info table */
@@ -364,6 +370,9 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
        {{"_CBA", METHOD_0ARGS,
          METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */
 
+       {{"_CCA", METHOD_0ARGS,
+         METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* ACPI 5.1 */
+
        {{"_CDM", METHOD_0ARGS,
          METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
 
@@ -436,6 +445,11 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
        {{"_DOS", METHOD_1ARGS(ACPI_TYPE_INTEGER),
          METHOD_NO_RETURN_VALUE}},
 
+       {{"_DSD", METHOD_0ARGS,
+         METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */
+       PACKAGE_INFO(ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1,
+                    ACPI_RTYPE_PACKAGE, 1, 0),
+
        {{"_DSM",
          METHOD_4ARGS(ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER,
                       ACPI_TYPE_PACKAGE),
index ed614f4..486d342 100644 (file)
@@ -194,6 +194,8 @@ char *acpi_ut_get_event_name(u32 event_id);
 
 char acpi_ut_hex_to_ascii_char(u64 integer, u32 position);
 
+u8 acpi_ut_ascii_char_to_hex(int hex_char);
+
 u8 acpi_ut_valid_object_type(acpi_object_type type);
 
 /*
@@ -759,6 +761,8 @@ const struct ah_predefined_name *acpi_ah_match_predefined_name(char *nameseg);
 
 const struct ah_device_id *acpi_ah_match_hardware_id(char *hid);
 
+const char *acpi_ah_match_uuid(u8 *data);
+
 /*
  * utprint - printf/vprintf output functions
  */
@@ -778,4 +782,9 @@ int acpi_ut_file_vprintf(ACPI_FILE file, const char *format, va_list args);
 int acpi_ut_file_printf(ACPI_FILE file, const char *format, ...);
 #endif
 
+/*
+ * utuuid -- UUID support functions
+ */
+void acpi_ut_convert_string_to_uuid(char *in_string, u8 *uuid_buffer);
+
 #endif                         /* _ACUTILS_H */
index 4cfc3d3..6fbfad4 100644 (file)
@@ -75,6 +75,7 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
                        u32 level, u32 index)
 {
        u32 i;
+       u32 timer;
 
        ACPI_FUNCTION_TRACE_PTR(ex_do_debug_object, source_desc);
 
@@ -85,12 +86,20 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
                return_VOID;
        }
 
+       /*
+        * We will emit the current timer value (in microseconds) with each
+        * debug output. Only need the lower 26 bits. This allows for 67
+        * million microseconds or 67 seconds before rollover.
+        */
+       timer = ((u32)acpi_os_get_timer() / 10);        /* (100 nanoseconds to microseconds) */
+       timer &= 0x03FFFFFF;
+
        /*
         * Print line header as long as we are not in the middle of an
         * object display
         */
        if (!((level > 0) && index == 0)) {
-               acpi_os_printf("[ACPI Debug] %*s", level, " ");
+               acpi_os_printf("[ACPI Debug %.8u] %*s", timer, level, " ");
        }
 
        /* Display the index for package output only */
index 925202a..0f23c3f 100644 (file)
@@ -494,7 +494,7 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
                                }
                        }
 
-                       acpi_os_printf("\n", next);
+                       acpi_os_printf("\n");
                        break;
 
                case ACPI_EXD_HDLR_LIST:
@@ -528,7 +528,7 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
                                }
                        }
 
-                       acpi_os_printf("\n", next);
+                       acpi_os_printf("\n");
                        break;
 
                case ACPI_EXD_RGN_LIST:
@@ -562,7 +562,7 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
                                }
                        }
 
-                       acpi_os_printf("\n", next);
+                       acpi_os_printf("\n");
                        break;
 
                case ACPI_EXD_NODE:
index 1ff42c0..6907ce0 100644 (file)
@@ -186,12 +186,11 @@ acpi_ex_read_data_from_field(struct acpi_walk_state * walk_state,
                                                                  access_length);
 
                        /*
-                        * Add additional 2 bytes for modeled generic_serial_bus data buffer:
-                        * typedef struct {
-                        *     BYTEStatus; // Byte 0 of the data buffer
-                        *     BYTELength; // Byte 1 of the data buffer
-                        *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
-                        * }
+                        * Add additional 2 bytes for the generic_serial_bus data buffer:
+                        *
+                        *     Status;      (Byte 0 of the data buffer)
+                        *     Length;      (Byte 1 of the data buffer)
+                        *     Data[x-1];   (Bytes 2-x of the arbitrary length data buffer)
                         */
                        length += 2;
                        function = ACPI_READ | (accessor_type << 16);
@@ -368,12 +367,11 @@ acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
                                                                  access_length);
 
                        /*
-                        * Add additional 2 bytes for modeled generic_serial_bus data buffer:
-                        * typedef struct {
-                        *     BYTEStatus; // Byte 0 of the data buffer
-                        *     BYTELength; // Byte 1 of the data buffer
-                        *     BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
-                        * }
+                        * Add additional 2 bytes for the generic_serial_bus data buffer:
+                        *
+                        *     Status;      (Byte 0 of the data buffer)
+                        *     Length;      (Byte 1 of the data buffer)
+                        *     Data[x-1];   (Bytes 2-x of the arbitrary length data buffer)
                         */
                        length += 2;
                        function = ACPI_WRITE | (accessor_type << 16);
index 90ec37c..40e923e 100644 (file)
@@ -86,33 +86,6 @@ const u8 acpi_gbl_ns_properties[ACPI_NUM_NS_TYPES] = {
        ACPI_NS_NORMAL          /* 30 Invalid          */
 };
 
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_hex_to_ascii_char
- *
- * PARAMETERS:  integer             - Contains the hex digit
- *              position            - bit position of the digit within the
- *                                    integer (multiple of 4)
- *
- * RETURN:      The converted Ascii character
- *
- * DESCRIPTION: Convert a hex digit to an Ascii character
- *
- ******************************************************************************/
-
-/* Hex to ASCII conversion table */
-
-static const char acpi_gbl_hex_to_ascii[] = {
-       '0', '1', '2', '3', '4', '5', '6', '7',
-       '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
-};
-
-char acpi_ut_hex_to_ascii_char(u64 integer, u32 position)
-{
-
-       return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
-}
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_region_name
@@ -475,7 +448,8 @@ static const char *acpi_gbl_generic_notify[ACPI_NOTIFY_MAX + 1] = {
        /* 09 */ "Device PLD Check",
        /* 0A */ "Reserved",
        /* 0B */ "System Locality Update",
-       /* 0C */ "Shutdown Request"
+       /* 0C */ "Shutdown Request",
+       /* 0D */ "System Resource Affinity Update"
 };
 
 static const char *acpi_gbl_device_notify[4] = {
@@ -502,7 +476,7 @@ static const char *acpi_gbl_thermal_notify[4] = {
 const char *acpi_ut_get_notify_name(u32 notify_value, acpi_object_type type)
 {
 
-       /* 00 - 0C are common to all object types */
+       /* 00 - 0D are common to all object types */
 
        if (notify_value <= ACPI_NOTIFY_MAX) {
                return (acpi_gbl_generic_notify[notify_value]);
index bdf9914..4e263a8 100644 (file)
@@ -201,8 +201,7 @@ acpi_ut_read_table(FILE * fp,
                        status = fl_check_for_ascii(fp, NULL, FALSE);
                        if (ACPI_SUCCESS(status)) {
                                acpi_os_printf
-                                   ("File appears to be ASCII only, must be binary\n",
-                                    table_header.length, file_size);
+                                   ("File appears to be ASCII only, must be binary\n");
                        }
 #endif
                        return (AE_BAD_HEADER);
diff --git a/drivers/acpi/acpica/uthex.c b/drivers/acpi/acpica/uthex.c
new file mode 100644 (file)
index 0000000..9afa944
--- /dev/null
@@ -0,0 +1,100 @@
+/******************************************************************************
+ *
+ * Module Name: uthex -- Hex/ASCII support functions
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include <acpi/acpi.h>
+#include "accommon.h"
+
+#define _COMPONENT          ACPI_COMPILER
+ACPI_MODULE_NAME("uthex")
+
+/* Hex to ASCII conversion table */
+static char acpi_gbl_hex_to_ascii[] = {
+       '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
+           'E', 'F'
+};
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_hex_to_ascii_char
+ *
+ * PARAMETERS:  integer             - Contains the hex digit
+ *              position            - bit position of the digit within the
+ *                                    integer (multiple of 4)
+ *
+ * RETURN:      The converted Ascii character
+ *
+ * DESCRIPTION: Convert a hex digit to an Ascii character
+ *
+ ******************************************************************************/
+
+char acpi_ut_hex_to_ascii_char(u64 integer, u32 position)
+{
+
+       return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_hex_char_to_value
+ *
+ * PARAMETERS:  ascii_char            - Hex character in Ascii
+ *
+ * RETURN:      The binary value of the ascii/hex character
+ *
+ * DESCRIPTION: Perform ascii-to-hex translation
+ *
+ ******************************************************************************/
+
+u8 acpi_ut_ascii_char_to_hex(int hex_char)
+{
+
+       if (hex_char <= 0x39) {
+               return ((u8)(hex_char - 0x30));
+       }
+
+       if (hex_char <= 0x46) {
+               return ((u8)(hex_char - 0x37));
+       }
+
+       return ((u8)(hex_char - 0x57));
+}
index 1031164..0ce3f5a 100644 (file)
@@ -242,6 +242,7 @@ static char *acpi_ut_format_number(char *string,
                                   u64 number,
                                   u8 base, s32 width, s32 precision, u8 type)
 {
+       char *pos;
        char sign;
        char zero;
        u8 need_prefix;
@@ -289,9 +290,8 @@ static char *acpi_ut_format_number(char *string,
 
        /* Generate full string in reverse order */
 
-       i = ACPI_PTR_DIFF(acpi_ut_put_number
-                         (reversed_string, number, base, upper),
-                         reversed_string);
+       pos = acpi_ut_put_number(reversed_string, number, base, upper);
+       i = ACPI_PTR_DIFF(pos, reversed_string);
 
        /* Printing 100 using %2d gives "100", not "00" */
 
@@ -401,6 +401,7 @@ acpi_ut_vsnprintf(char *string,
 
                /* Process width */
 
+               width = -1;
                if (ACPI_IS_DIGIT(*format)) {
                        format = acpi_ut_scan_number(format, &number);
                        width = (s32) number;
@@ -415,6 +416,7 @@ acpi_ut_vsnprintf(char *string,
 
                /* Process precision */
 
+               precision = -1;
                if (*format == '.') {
                        ++format;
                        if (ACPI_IS_DIGIT(*format)) {
@@ -431,6 +433,7 @@ acpi_ut_vsnprintf(char *string,
 
                /* Process qualifier */
 
+               qualifier = -1;
                if (*format == 'h' || *format == 'l' || *format == 'L') {
                        qualifier = *format;
                        ++format;
diff --git a/drivers/acpi/acpica/utuuid.c b/drivers/acpi/acpica/utuuid.c
new file mode 100644 (file)
index 0000000..4dc3313
--- /dev/null
@@ -0,0 +1,96 @@
+/******************************************************************************
+ *
+ * Module Name: utuuid -- UUID support functions
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2014, Intel Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include <acpi/acpi.h>
+#include "accommon.h"
+
+#define _COMPONENT          ACPI_COMPILER
+ACPI_MODULE_NAME("utuuid")
+
+/*
+ * UUID support functions.
+ *
+ * This table is used to convert an input UUID ascii string to a 16 byte
+ * buffer and the reverse. The table maps a UUID buffer index 0-15 to
+ * the index within the 36-byte UUID string where the associated 2-byte
+ * hex value can be found.
+ *
+ * 36-byte UUID strings are of the form:
+ *     aabbccdd-eeff-gghh-iijj-kkllmmnnoopp
+ * Where aa-pp are one byte hex numbers, made up of two hex digits
+ *
+ * Note: This table is basically the inverse of the string-to-offset table
+ * found in the ACPI spec in the description of the to_UUID macro.
+ */
+const u8 acpi_gbl_map_to_uuid_offset[UUID_BUFFER_LENGTH] = {
+       6, 4, 2, 0, 11, 9, 16, 14, 19, 21, 24, 26, 28, 30, 32, 34
+};
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_convert_string_to_uuid
+ *
+ * PARAMETERS:  in_string           - 36-byte formatted UUID string
+ *              uuid_buffer         - Where the 16-byte UUID buffer is returned
+ *
+ * RETURN:      None. Output data is returned in the uuid_buffer
+ *
+ * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer
+ *
+ ******************************************************************************/
+
+void acpi_ut_convert_string_to_uuid(char *in_string, u8 *uuid_buffer)
+{
+       u32 i;
+
+       for (i = 0; i < UUID_BUFFER_LENGTH; i++) {
+               uuid_buffer[i] =
+                   (acpi_ut_ascii_char_to_hex
+                    (in_string[acpi_gbl_map_to_uuid_offset[i]]) << 4);
+
+               uuid_buffer[i] |=
+                   acpi_ut_ascii_char_to_hex(in_string
+                                             [acpi_gbl_map_to_uuid_offset[i] +
+                                              1]);
+       }
+}
index 9a4f05e..bbe33a8 100644 (file)
@@ -84,7 +84,7 @@ void *dmar_alloc_dev_scope(void *start, void *end, int *cnt)
        *cnt = 0;
        while (start < end) {
                scope = start;
-               if (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ACPI ||
+               if (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_NAMESPACE ||
                    scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT ||
                    scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE)
                        (*cnt)++;
@@ -380,7 +380,7 @@ static int __init dmar_parse_one_andd(struct acpi_dmar_header *header)
        struct acpi_dmar_andd *andd = (void *)header;
 
        /* Check for NUL termination within the designated length */
-       if (strnlen(andd->object_name, header->length - 8) == header->length - 8) {
+       if (strnlen(andd->device_name, header->length - 8) == header->length - 8) {
                WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND,
                           "Your BIOS is broken; ANDD object name is not NUL-terminated\n"
                           "BIOS vendor: %s; Ver: %s; Product Version: %s\n",
@@ -390,7 +390,7 @@ static int __init dmar_parse_one_andd(struct acpi_dmar_header *header)
                return -EINVAL;
        }
        pr_info("ANDD device: %x name: %s\n", andd->device_number,
-               andd->object_name);
+               andd->device_name);
 
        return 0;
 }
@@ -448,17 +448,17 @@ dmar_table_print_dmar_entry(struct acpi_dmar_header *header)
                        (unsigned long long)rmrr->base_address,
                        (unsigned long long)rmrr->end_address);
                break;
-       case ACPI_DMAR_TYPE_ATSR:
+       case ACPI_DMAR_TYPE_ROOT_ATS:
                atsr = container_of(header, struct acpi_dmar_atsr, header);
                pr_info("ATSR flags: %#x\n", atsr->flags);
                break;
-       case ACPI_DMAR_HARDWARE_AFFINITY:
+       case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
                rhsa = container_of(header, struct acpi_dmar_rhsa, header);
                pr_info("RHSA base: %#016Lx proximity domain: %#x\n",
                       (unsigned long long)rhsa->base_address,
                       rhsa->proximity_domain);
                break;
-       case ACPI_DMAR_TYPE_ANDD:
+       case ACPI_DMAR_TYPE_NAMESPACE:
                /* We don't print this here because we need to sanity-check
                   it first. So print it in dmar_parse_one_andd() instead. */
                break;
@@ -539,15 +539,15 @@ parse_dmar_table(void)
                case ACPI_DMAR_TYPE_RESERVED_MEMORY:
                        ret = dmar_parse_one_rmrr(entry_header);
                        break;
-               case ACPI_DMAR_TYPE_ATSR:
+               case ACPI_DMAR_TYPE_ROOT_ATS:
                        ret = dmar_parse_one_atsr(entry_header);
                        break;
-               case ACPI_DMAR_HARDWARE_AFFINITY:
+               case ACPI_DMAR_TYPE_HARDWARE_AFFINITY:
 #ifdef CONFIG_ACPI_NUMA
                        ret = dmar_parse_one_rhsa(entry_header);
 #endif
                        break;
-               case ACPI_DMAR_TYPE_ANDD:
+               case ACPI_DMAR_TYPE_NAMESPACE:
                        ret = dmar_parse_one_andd(entry_header);
                        break;
                default:
@@ -631,7 +631,7 @@ static void __init dmar_acpi_insert_dev_scope(u8 device_number,
                for (scope = (void *)(drhd + 1);
                     (unsigned long)scope < ((unsigned long)drhd) + drhd->header.length;
                     scope = ((void *)scope) + scope->length) {
-                       if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_ACPI)
+                       if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_NAMESPACE)
                                continue;
                        if (scope->enumeration_id != device_number)
                                continue;
@@ -666,21 +666,21 @@ static int __init dmar_acpi_dev_scope_init(void)
        for (andd = (void *)dmar_tbl + sizeof(struct acpi_table_dmar);
             ((unsigned long)andd) < ((unsigned long)dmar_tbl) + dmar_tbl->length;
             andd = ((void *)andd) + andd->header.length) {
-               if (andd->header.type == ACPI_DMAR_TYPE_ANDD) {
+               if (andd->header.type == ACPI_DMAR_TYPE_NAMESPACE) {
                        acpi_handle h;
                        struct acpi_device *adev;
 
                        if (!ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT,
-                                                         andd->object_name,
+                                                         andd->device_name,
                                                          &h))) {
                                pr_err("Failed to find handle for ACPI object %s\n",
-                                      andd->object_name);
+                                      andd->device_name);
                                continue;
                        }
                        acpi_bus_get_device(h, &adev);
                        if (!adev) {
                                pr_err("Failed to get device for ACPI object %s\n",
-                                      andd->object_name);
+                                      andd->device_name);
                                continue;
                        }
                        dmar_acpi_insert_dev_scope(andd->device_number, adev);
index 932a60d..5a0a3e5 100644 (file)
 #define ACPI_NUM_sx_d_METHODS           4
 #define ACPI_NUM_sx_w_METHODS           5
 
+/******************************************************************************
+ *
+ * Miscellaneous constants
+ *
+ *****************************************************************************/
+
+/* UUID constants */
+
+#define UUID_BUFFER_LENGTH          16 /* Length of UUID in memory */
+#define UUID_STRING_LENGTH          36 /* Total length of a UUID string */
+
+/* Positions for required hyphens (dashes) in UUID strings */
+
+#define UUID_HYPHEN1_OFFSET         8
+#define UUID_HYPHEN2_OFFSET         13
+#define UUID_HYPHEN3_OFFSET         18
+#define UUID_HYPHEN4_OFFSET         23
+
 /******************************************************************************
  *
  * ACPI AML Debugger
index 3dd6e83..c728113 100644 (file)
@@ -55,6 +55,7 @@
 #define METHOD_NAME__HID        "_HID"
 #define METHOD_NAME__INI        "_INI"
 #define METHOD_NAME__PLD        "_PLD"
+#define METHOD_NAME__DSD        "_DSD"
 #define METHOD_NAME__PRS        "_PRS"
 #define METHOD_NAME__PRT        "_PRT"
 #define METHOD_NAME__PRW        "_PRW"
index c3f38bc..b7c89d4 100644 (file)
@@ -46,7 +46,7 @@
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20140627
+#define ACPI_CA_VERSION                 0x20140724
 
 #include <acpi/acconfig.h>
 #include <acpi/actypes.h>
index 1cc7ef1..bee19d8 100644 (file)
@@ -270,7 +270,8 @@ struct acpi_table_fadt {
        u32 flags;              /* Miscellaneous flag bits (see below for individual flags) */
        struct acpi_generic_address reset_register;     /* 64-bit address of the Reset register */
        u8 reset_value;         /* Value to write to the reset_register port to reset the system */
-       u8 reserved4[3];        /* Reserved, must be zero */
+       u16 arm_boot_flags;     /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */
+       u8 minor_revision;      /* FADT Minor Revision (ACPI 5.1) */
        u64 Xfacs;              /* 64-bit physical address of FACS */
        u64 Xdsdt;              /* 64-bit physical address of DSDT */
        struct acpi_generic_address xpm1a_event_block;  /* 64-bit Extended Power Mgt 1a Event Reg Blk address */
@@ -285,7 +286,7 @@ struct acpi_table_fadt {
        struct acpi_generic_address sleep_status;       /* 64-bit Sleep Status register (ACPI 5.0) */
 };
 
-/* Masks for FADT Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */
+/* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */
 
 #define ACPI_FADT_LEGACY_DEVICES    (1)        /* 00: [V2] System has LPC or ISA bus devices */
 #define ACPI_FADT_8042              (1<<1)     /* 01: [V3] System has an 8042 controller on port 60/64 */
@@ -296,6 +297,11 @@ struct acpi_table_fadt {
 
 #define FADT2_REVISION_ID               3
 
+/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */
+
+#define ACPI_FADT_PSCI_COMPLIANT    (1)        /* 00: [V5+] PSCI 0.2+ is implemented */
+#define ACPI_FADT_PSCI_USE_HVC      (1<<1)     /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */
+
 /* Masks for FADT flags */
 
 #define ACPI_FADT_WBINVD            (1)        /* 00: [V1] The WBINVD instruction works properly */
@@ -399,7 +405,7 @@ struct acpi_table_desc {
  *     FADT V5  size: 0x10C
  */
 #define ACPI_FADT_V1_SIZE       (u32) (ACPI_FADT_OFFSET (flags) + 4)
-#define ACPI_FADT_V2_SIZE       (u32) (ACPI_FADT_OFFSET (reserved4[0]) + 3)
+#define ACPI_FADT_V2_SIZE       (u32) (ACPI_FADT_OFFSET (minor_revision) + 1)
 #define ACPI_FADT_V3_SIZE       (u32) (ACPI_FADT_OFFSET (sleep_control))
 #define ACPI_FADT_V5_SIZE       (u32) (sizeof (struct acpi_table_fadt))
 
index 9613e8e..7626bfe 100644 (file)
@@ -671,7 +671,9 @@ enum acpi_madt_type {
        ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
        ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
        ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
-       ACPI_MADT_TYPE_RESERVED = 13    /* 13 and greater are reserved */
+       ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
+       ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
+       ACPI_MADT_TYPE_RESERVED = 15    /* 15 and greater are reserved */
 };
 
 /*
@@ -797,15 +799,26 @@ struct acpi_madt_local_x2apic_nmi {
 struct acpi_madt_generic_interrupt {
        struct acpi_subtable_header header;
        u16 reserved;           /* reserved - must be zero */
-       u32 gic_id;
+       u32 cpu_interface_number;
        u32 uid;
        u32 flags;
        u32 parking_version;
        u32 performance_interrupt;
        u64 parked_address;
        u64 base_address;
+       u64 gicv_base_address;
+       u64 gich_base_address;
+       u32 vgic_interrupt;
+       u64 gicr_base_address;
+       u64 arm_mpidr;
 };
 
+/* Masks for Flags field above */
+
+/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
+#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1) /* 01: Performance Interrupt Mode */
+#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2) /* 02: VGIC Maintenance Interrupt mode */
+
 /* 12: Generic Distributor (ACPI 5.0) */
 
 struct acpi_madt_generic_distributor {
@@ -817,11 +830,36 @@ struct acpi_madt_generic_distributor {
        u32 reserved2;          /* reserved - must be zero */
 };
 
+/* 13: Generic MSI Frame (ACPI 5.1) */
+
+struct acpi_madt_generic_msi_frame {
+       struct acpi_subtable_header header;
+       u16 reserved;           /* reserved - must be zero */
+       u32 msi_frame_id;
+       u64 base_address;
+       u32 flags;
+       u16 spi_count;
+       u16 spi_base;
+};
+
+/* Masks for Flags field above */
+
+#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
+
+/* 14: Generic Redistributor (ACPI 5.1) */
+
+struct acpi_madt_generic_redistributor {
+       struct acpi_subtable_header header;
+       u16 reserved;           /* reserved - must be zero */
+       u64 base_address;
+       u32 length;
+};
+
 /*
  * Common flags fields for MADT subtables
  */
 
-/* MADT Local APIC flags (lapic_flags) and GIC flags */
+/* MADT Local APIC flags */
 
 #define ACPI_MADT_ENABLED           (1)        /* 00: Processor is usable if set */
 
index 21314d3..ecff624 100644 (file)
@@ -396,7 +396,7 @@ struct acpi_table_dbgp {
  *        Version 1
  *
  * Conforms to "Intel Virtualization Technology for Directed I/O",
- * Version 1.2, Sept. 2008
+ * Version 2.2, Sept. 2013
  *
  ******************************************************************************/
 
@@ -423,9 +423,9 @@ struct acpi_dmar_header {
 enum acpi_dmar_type {
        ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
        ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
-       ACPI_DMAR_TYPE_ATSR = 2,
-       ACPI_DMAR_HARDWARE_AFFINITY = 3,
-       ACPI_DMAR_TYPE_ANDD = 4,
+       ACPI_DMAR_TYPE_ROOT_ATS = 2,
+       ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3,
+       ACPI_DMAR_TYPE_NAMESPACE = 4,
        ACPI_DMAR_TYPE_RESERVED = 5     /* 5 and greater are reserved */
 };
 
@@ -439,7 +439,7 @@ struct acpi_dmar_device_scope {
        u8 bus;
 };
 
-/* Values for entry_type in struct acpi_dmar_device_scope */
+/* Values for entry_type in struct acpi_dmar_device_scope - device types */
 
 enum acpi_dmar_scope_type {
        ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
@@ -447,7 +447,7 @@ enum acpi_dmar_scope_type {
        ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
        ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
        ACPI_DMAR_SCOPE_TYPE_HPET = 4,
-       ACPI_DMAR_SCOPE_TYPE_ACPI = 5,
+       ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5,
        ACPI_DMAR_SCOPE_TYPE_RESERVED = 6       /* 6 and greater are reserved */
 };
 
@@ -516,7 +516,7 @@ struct acpi_dmar_andd {
        struct acpi_dmar_header header;
        u8 reserved[3];
        u8 device_number;
-       char object_name[1];
+       char device_name[1];
 };
 
 /*******************************************************************************
index c2295cc..787bcc8 100644 (file)
@@ -241,33 +241,96 @@ struct acpi_s3pt_suspend {
 
 /*******************************************************************************
  *
- * GTDT - Generic Timer Description Table (ACPI 5.0)
- *        Version 1
+ * GTDT - Generic Timer Description Table (ACPI 5.1)
+ *        Version 2
  *
  ******************************************************************************/
 
 struct acpi_table_gtdt {
        struct acpi_table_header header;        /* Common ACPI table header */
-       u64 address;
-       u32 flags;
-       u32 secure_pl1_interrupt;
-       u32 secure_pl1_flags;
-       u32 non_secure_pl1_interrupt;
-       u32 non_secure_pl1_flags;
+       u64 counter_block_addresss;
+       u32 reserved;
+       u32 secure_el1_interrupt;
+       u32 secure_el1_flags;
+       u32 non_secure_el1_interrupt;
+       u32 non_secure_el1_flags;
        u32 virtual_timer_interrupt;
        u32 virtual_timer_flags;
-       u32 non_secure_pl2_interrupt;
-       u32 non_secure_pl2_flags;
+       u32 non_secure_el2_interrupt;
+       u32 non_secure_el2_flags;
+       u64 counter_read_block_address;
+       u32 platform_timer_count;
+       u32 platform_timer_offset;
 };
 
-/* Values for Flags field above */
+/* Flag Definitions: Timer Block Physical Timers and Virtual timers */
+
+#define ACPI_GTDT_INTERRUPT_MODE        (1)
+#define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1)
+#define ACPI_GTDT_ALWAYS_ON             (1<<2)
+
+/* Common GTDT subtable header */
+
+struct acpi_gtdt_header {
+       u8 type;
+       u16 length;
+};
 
-#define ACPI_GTDT_MAPPED_BLOCK_PRESENT      1
+/* Values for GTDT subtable type above */
 
-/* Values for all "TimerFlags" fields above */
+enum acpi_gtdt_type {
+       ACPI_GTDT_TYPE_TIMER_BLOCK = 0,
+       ACPI_GTDT_TYPE_WATCHDOG = 1,
+       ACPI_GTDT_TYPE_RESERVED = 2     /* 2 and greater are reserved */
+};
+
+/* GTDT Subtables, correspond to Type in struct acpi_gtdt_header */
+
+/* 0: Generic Timer Block */
+
+struct acpi_gtdt_timer_block {
+       struct acpi_gtdt_header header;
+       u8 reserved;
+       u64 block_address;
+       u32 timer_count;
+       u32 timer_offset;
+};
+
+/* Timer Sub-Structure, one per timer */
+
+struct acpi_gtdt_timer_entry {
+       u8 frame_number;
+       u8 reserved[3];
+       u64 base_address;
+       u64 el0_base_address;
+       u32 timer_interrupt;
+       u32 timer_flags;
+       u32 virtual_timer_interrupt;
+       u32 virtual_timer_flags;
+       u32 common_flags;
+};
 
-#define ACPI_GTDT_INTERRUPT_MODE            1
-#define ACPI_GTDT_INTERRUPT_POLARITY        2
+/* Flag Definitions: common_flags above */
+
+#define ACPI_GTDT_GT_IS_SECURE_TIMER    (1)
+#define ACPI_GTDT_GT_ALWAYS_ON          (1<<1)
+
+/* 1: SBSA Generic Watchdog Structure */
+
+struct acpi_gtdt_watchdog {
+       struct acpi_gtdt_header header;
+       u8 reserved;
+       u64 refresh_frame_address;
+       u64 control_frame_address;
+       u32 timer_interrupt;
+       u32 timer_flags;
+};
+
+/* Flag Definitions: timer_flags above */
+
+#define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1)
+#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1)
+#define ACPI_GTDT_WATCHDOG_SECURE           (1<<2)
 
 /*******************************************************************************
  *
@@ -385,7 +448,8 @@ struct acpi_table_pcct {
 
 enum acpi_pcct_type {
        ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
-       ACPI_PCCT_TYPE_RESERVED = 1     /* 1 and greater are reserved */
+       ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
+       ACPI_PCCT_TYPE_RESERVED = 2     /* 2 and greater are reserved */
 };
 
 /*
@@ -407,6 +471,28 @@ struct acpi_pcct_subspace {
        u16 min_turnaround_time;
 };
 
+/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
+
+struct acpi_pcct_hw_reduced {
+       struct acpi_subtable_header header;
+       u32 doorbell_interrupt;
+       u8 flags;
+       u8 reserved;
+       u64 base_address;
+       u64 length;
+       struct acpi_generic_address doorbell_register;
+       u64 preserve_mask;
+       u64 write_mask;
+       u32 latency;
+       u32 max_access_rate;
+       u16 min_turnaround_time;
+};
+
+/* Values for doorbell flags above */
+
+#define ACPI_PCCT_INTERRUPT_POLARITY    (1)
+#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
+
 /*
  * PCC memory structures (not part of the ACPI table)
  */
index 608a040..ac03ec8 100644 (file)
@@ -517,7 +517,7 @@ typedef u64 acpi_integer;
 
 #define ACPI_TO_POINTER(i)              ACPI_ADD_PTR (void, (void *) NULL,(acpi_size) i)
 #define ACPI_TO_INTEGER(p)              ACPI_PTR_DIFF (p, (void *) NULL)
-#define ACPI_OFFSET(d, f)               (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL)
+#define ACPI_OFFSET(d, f)               ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) NULL)
 #define ACPI_PHYSADDR_TO_PTR(i)         ACPI_TO_POINTER(i)
 #define ACPI_PTR_TO_PHYSADDR(i)         ACPI_TO_INTEGER(i)
 
@@ -612,8 +612,9 @@ typedef u64 acpi_integer;
 #define ACPI_NOTIFY_RESERVED            (u8) 0x0A
 #define ACPI_NOTIFY_LOCALITY_UPDATE     (u8) 0x0B
 #define ACPI_NOTIFY_SHUTDOWN_REQUEST    (u8) 0x0C
+#define ACPI_NOTIFY_AFFINITY_UPDATE     (u8) 0x0D
 
-#define ACPI_NOTIFY_MAX                 0x0C
+#define ACPI_NOTIFY_MAX                 0x0D
 
 /*
  * Types associated with ACPI names and objects. The first group of