Merge branch 'for-4.7/acpi6.1' into libnvdimm-for-next
authorDan Williams <dan.j.williams@intel.com>
Wed, 18 May 2016 17:07:19 +0000 (10:07 -0700)
committerDan Williams <dan.j.williams@intel.com>
Wed, 18 May 2016 17:07:19 +0000 (10:07 -0700)
61 files changed:
drivers/acpi/acpica/Makefile
drivers/acpi/acpica/acdebug.h
drivers/acpi/acpica/acevents.h
drivers/acpi/acpica/acglobal.h
drivers/acpi/acpica/acinterp.h
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/acmacros.h
drivers/acpi/acpica/acnamesp.h
drivers/acpi/acpica/acparser.h
drivers/acpi/acpica/acpredef.h
drivers/acpi/acpica/acresrc.h
drivers/acpi/acpica/acstruct.h
drivers/acpi/acpica/acutils.h
drivers/acpi/acpica/dbconvert.c
drivers/acpi/acpica/dbinput.c
drivers/acpi/acpica/dbutils.c
drivers/acpi/acpica/evregion.c
drivers/acpi/acpica/evrgnini.c
drivers/acpi/acpica/exconcat.c [new file with mode: 0644]
drivers/acpi/acpica/exconfig.c
drivers/acpi/acpica/exconvrt.c
drivers/acpi/acpica/exdump.c
drivers/acpi/acpica/exmisc.c
drivers/acpi/acpica/exutils.c
drivers/acpi/acpica/hwregs.c
drivers/acpi/acpica/hwxface.c
drivers/acpi/acpica/nsaccess.c
drivers/acpi/acpica/nsconvert.c
drivers/acpi/acpica/nsdump.c
drivers/acpi/acpica/nsinit.c
drivers/acpi/acpica/nsload.c
drivers/acpi/acpica/nsprepkg.c
drivers/acpi/acpica/psopinfo.c
drivers/acpi/acpica/rsdump.c
drivers/acpi/acpica/rsutils.c
drivers/acpi/acpica/tbfadt.c
drivers/acpi/acpica/tbxfload.c
drivers/acpi/acpica/utdebug.c
drivers/acpi/acpica/utdecode.c
drivers/acpi/acpica/uteval.c
drivers/acpi/acpica/utglobal.c
drivers/acpi/acpica/utmisc.c
drivers/acpi/acpica/utnonansi.c
drivers/acpi/acpica/utprint.c
drivers/acpi/acpica/uttrack.c
drivers/acpi/nfit.c
drivers/acpi/nfit.h
drivers/acpi/osl.c
include/acpi/acpiosxf.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
include/acpi/platform/acenv.h
include/acpi/platform/acmsvcex.h [deleted file]
include/acpi/platform/acwinex.h [deleted file]
tools/power/acpi/os_specific/service_layers/osunixmap.c
tools/power/acpi/tools/acpidump/apdump.c
tools/power/acpi/tools/acpidump/apmain.c

index f682374c19f45a7a421b29b474739e5c7e8109b6..188597fface7d5364ed73721e439027335aa1d4a 100644 (file)
@@ -43,6 +43,7 @@ acpi-y +=             \
        evxfregn.o
 
 acpi-y +=              \
+       exconcat.o      \
        exconfig.o      \
        exconvrt.o      \
        excreate.o      \
index 993af9eb007a28e7b39982022e5d0f7c44602548..9e2e080ac9af979475386539e25bb063f231f9f0 100644 (file)
@@ -53,7 +53,7 @@
 #define ACPI_DEBUG_BUFFER_SIZE  0x4000 /* 16K buffer for return objects */
 
 struct acpi_db_command_info {
-       char *name;             /* Command Name */
+       const char *name;       /* Command Name */
        u8 min_args;            /* Minimum arguments required */
 };
 
@@ -64,7 +64,7 @@ struct acpi_db_command_help {
 };
 
 struct acpi_db_argument_info {
-       char *name;             /* Argument Name */
+       const char *name;       /* Argument Name */
 };
 
 struct acpi_db_execute_walk {
index 010cf81bada9d9d892343bb2732e329cd4419b69..17f221782d2f751df43404607059712ca8bb1fda 100644 (file)
@@ -198,8 +198,6 @@ void
 acpi_ev_detach_region(union acpi_operand_object *region_obj,
                      u8 acpi_ns_is_locked);
 
-void acpi_ev_associate_reg_method(union acpi_operand_object *region_obj);
-
 void
 acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
                            acpi_adr_space_type space_id, u32 function);
index 51b073b68f161799119af908957b1254d7c68781..fded776236e224736be84f73491b23054379b448 100644 (file)
@@ -187,6 +187,8 @@ extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
 extern const char *acpi_gbl_lowest_dstate_names[ACPI_NUM_sx_w_METHODS];
 extern const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS];
 extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
+extern const char acpi_gbl_lower_hex_digits[];
+extern const char acpi_gbl_upper_hex_digits[];
 extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES];
 
 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
@@ -361,6 +363,15 @@ ACPI_GLOBAL(u32, acpi_gbl_num_objects);
 
 #endif                         /* ACPI_DEBUGGER */
 
+#if defined (ACPI_DISASSEMBLER) || defined (ACPI_ASL_COMPILER)
+
+ACPI_GLOBAL(const char, *acpi_gbl_pld_panel_list[]);
+ACPI_GLOBAL(const char, *acpi_gbl_pld_vertical_position_list[]);
+ACPI_GLOBAL(const char, *acpi_gbl_pld_horizontal_position_list[]);
+ACPI_GLOBAL(const char, *acpi_gbl_pld_shape_list[]);
+
+#endif
+
 /*****************************************************************************
  *
  * Application globals
index bae1a35c345f808133f3e33f35184ca2c7ef50e4..8b09d28fe5a88123c39c5df2261cba9ab0a62e5a 100644 (file)
@@ -67,7 +67,7 @@
 typedef const struct acpi_exdump_info {
        u8 opcode;
        u8 offset;
-       char *name;
+       const char *name;
 
 } acpi_exdump_info;
 
index 9562a10a1a18855c70fc1436605a3a178961ebf3..083b16ada31e7a44fa3a3f5c47ac7f294d1866c2 100644 (file)
@@ -1096,6 +1096,7 @@ struct acpi_external_list {
 #define ACPI_EXT_ORIGIN_FROM_FILE           0x02       /* External came from a file */
 #define ACPI_EXT_INTERNAL_PATH_ALLOCATED    0x04       /* Deallocate internal path on completion */
 #define ACPI_EXT_EXTERNAL_EMITTED           0x08       /* External() statement has been emitted */
+#define ACPI_EXT_ORIGIN_FROM_OPCODE         0x10       /* External came from a External() opcode */
 
 struct acpi_external_file {
        char *path;
index 411c18b7d541c8a9aa81b514af7b5f88f6d728af..73f6653c848d6895c07b7edc7001eb629c8cbea7 100644 (file)
 
 #define ACPI_IS_MISALIGNED(value)           (((acpi_size) value) & (sizeof(acpi_size)-1))
 
+/* Generic (power-of-two) rounding */
+
+#define ACPI_IS_POWER_OF_TWO(a)             (((a) & ((a) - 1)) == 0)
+
 /*
  * Bitmask creation
  * Bit positions start at zero.
 /* Generic bitfield macros and masks */
 
 #define ACPI_GET_BITS(source_ptr, position, mask) \
-       ((*source_ptr >> position) & mask)
+       ((*(source_ptr) >> (position)) & (mask))
 
 #define ACPI_SET_BITS(target_ptr, position, mask, value) \
-       (*target_ptr |= ((value & mask) << position))
+       (*(target_ptr) |= (((value) & (mask)) << (position)))
 
 #define ACPI_1BIT_MASK      0x00000001
 #define ACPI_2BIT_MASK      0x00000003
index 022d69cb345a07014d73f674e5a55dd189042952..f33a4ba8e0cb7fe2208cbbbea97615e1cb8500cc 100644 (file)
@@ -206,9 +206,10 @@ void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth);
 void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level);
 
 void
-acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component);
+acpi_ns_dump_pathname(acpi_handle handle,
+                     const char *msg, u32 level, u32 component);
 
-void acpi_ns_print_pathname(u32 num_segments, char *pathname);
+void acpi_ns_print_pathname(u32 num_segments, const char *pathname);
 
 acpi_status
 acpi_ns_dump_one_object(acpi_handle obj_handle,
index 7da639d62416d2049e98c67a84379b9244e56a66..fc305775c3d73c2e45a6d37a5fa0f7578a6a45f4 100644 (file)
@@ -139,7 +139,7 @@ acpi_ps_complete_final_op(struct acpi_walk_state *walk_state,
  */
 const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode);
 
-char *acpi_ps_get_opcode_name(u16 opcode);
+const char *acpi_ps_get_opcode_name(u16 opcode);
 
 u8 acpi_ps_get_argument_count(u32 op_type);
 
index 5faeab41e3028c65d472f3dcd07ba00cf06162c6..4ca426b55509ff229150a61e2ce51cd5b216b342 100644 (file)
@@ -523,6 +523,9 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
          METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */
        PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0),
 
+       {{"_FIT", METHOD_0ARGS,
+         METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},  /* ACPI 6.0 */
+
        {{"_FIX", METHOD_0ARGS,
          METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */
        PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0),
@@ -1053,6 +1056,12 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
          METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING |
                         ACPI_RTYPE_BUFFER)}},
 
+       {{"_WPC", METHOD_0ARGS,
+         METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* ACPI 6.1 */
+
+       {{"_WPP", METHOD_0ARGS,
+         METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* ACPI 6.1 */
+
        PACKAGE_INFO(0, 0, 0, 0, 0, 0)  /* Table terminator */
 };
 #else
index 5dd58beafa5cc9f35510bea1fe1562c2ac1ba743..83e9a296c6eebab81f40139ca8941ec335b6728b 100644 (file)
@@ -124,7 +124,7 @@ typedef enum {
 typedef const struct acpi_rsdump_info {
        u8 opcode;
        u8 offset;
-       char *name;
+       const char *name;
        const char **pointer;
 
 } acpi_rsdump_info;
@@ -209,7 +209,7 @@ acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
 
 acpi_status
 acpi_rs_get_method_data(acpi_handle handle,
-                       char *path, struct acpi_buffer *ret_buffer);
+                       const char *path, struct acpi_buffer *ret_buffer);
 
 acpi_status
 acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
index b3b386e0b1194481741ae72c7ce2a6c727769e33..6235642e31d38af81c8605789f8391ab58ef26c2 100644 (file)
@@ -184,7 +184,7 @@ struct acpi_evaluate_info {
        /* The first 3 elements are passed by the caller to acpi_ns_evaluate */
 
        struct acpi_namespace_node *prefix_node;        /* Input: starting node */
-       char *relative_pathname;        /* Input: path relative to prefix_node */
+       const char *relative_pathname;  /* Input: path relative to prefix_node */
        union acpi_operand_object **parameters; /* Input: argument list */
 
        struct acpi_namespace_node *node;       /* Resolved node (prefix_node:relative_pathname) */
index e43ab6f2ad7ea3d51bd73486d5cfbdc8b3872cc0..4ff971c4c9795d9d9eb9659163500e5230c0d1c6 100644 (file)
@@ -175,7 +175,14 @@ void acpi_ut_strlwr(char *src_string);
 
 int acpi_ut_stricmp(char *string1, char *string2);
 
-acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer);
+acpi_status
+acpi_ut_strtoul64(char *string,
+                 u32 base, u32 max_integer_byte_width, u64 *ret_integer);
+
+/* Values for max_integer_byte_width above */
+
+#define ACPI_MAX32_BYTE_WIDTH       4
+#define ACPI_MAX64_BYTE_WIDTH       8
 
 /*
  * utglobal - Global data structures and procedures
@@ -266,7 +273,8 @@ acpi_ut_trace(u32 line_number,
 void
 acpi_ut_trace_ptr(u32 line_number,
                  const char *function_name,
-                 const char *module_name, u32 component_id, void *pointer);
+                 const char *module_name,
+                 u32 component_id, const void *pointer);
 
 void
 acpi_ut_trace_u32(u32 line_number,
@@ -276,7 +284,8 @@ acpi_ut_trace_u32(u32 line_number,
 void
 acpi_ut_trace_str(u32 line_number,
                  const char *function_name,
-                 const char *module_name, u32 component_id, char *string);
+                 const char *module_name,
+                 u32 component_id, const char *string);
 
 void
 acpi_ut_exit(u32 line_number,
@@ -335,12 +344,12 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list);
  */
 acpi_status
 acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
-                       char *path,
+                       const char *path,
                        u32 expected_return_btypes,
                        union acpi_operand_object **return_desc);
 
 acpi_status
-acpi_ut_evaluate_numeric_object(char *object_name,
+acpi_ut_evaluate_numeric_object(const char *object_name,
                                struct acpi_namespace_node *device_node,
                                u64 *value);
 
@@ -526,7 +535,7 @@ void acpi_ut_set_integer_width(u8 revision);
 void
 acpi_ut_display_init_pathname(u8 type,
                              struct acpi_namespace_node *obj_handle,
-                             char *path);
+                             const char *path);
 #endif
 
 /*
@@ -628,7 +637,7 @@ void acpi_ut_dump_allocation_info(void);
 void acpi_ut_dump_allocations(u32 component, const char *module);
 
 acpi_status
-acpi_ut_create_list(char *list_name,
+acpi_ut_create_list(const char *list_name,
                    u16 object_size, struct acpi_memory_list **return_cache);
 
 #endif                         /* ACPI_DBG_TRACK_ALLOCATIONS */
index 68f4e0f4b095ef0e1f7753d2680a3dc3e1ecf305..c79c5fb23fb61ef288844089bccb9ba403f10ebf 100644 (file)
@@ -277,7 +277,9 @@ acpi_db_convert_to_object(acpi_object_type type,
        default:
 
                object->type = ACPI_TYPE_INTEGER;
-               status = acpi_ut_strtoul64(string, 16, &object->integer.value);
+               status =
+                   acpi_ut_strtoul64(string, 16, acpi_gbl_integer_byte_width,
+                                     &object->integer.value);
                break;
        }
 
index 417c02a899150131666cea221fa5968ce71ed783..f53cb30e0a09763c418d0d9573128ad4da884002 100644 (file)
@@ -57,12 +57,12 @@ static u32 acpi_db_get_line(char *input_buffer);
 
 static u32 acpi_db_match_command(char *user_command);
 
-static void acpi_db_display_command_info(char *command, u8 display_all);
+static void acpi_db_display_command_info(const char *command, u8 display_all);
 
 static void acpi_db_display_help(char *command);
 
 static u8
-acpi_db_match_command_help(char *command,
+acpi_db_match_command_help(const char *command,
                           const struct acpi_db_command_help *help);
 
 /*
@@ -348,7 +348,7 @@ static const struct acpi_db_command_help acpi_gbl_db_command_help[] = {
  ******************************************************************************/
 
 static u8
-acpi_db_match_command_help(char *command,
+acpi_db_match_command_help(const char *command,
                           const struct acpi_db_command_help *help)
 {
        char *invocation = help->invocation;
@@ -402,7 +402,7 @@ acpi_db_match_command_help(char *command,
  *
  ******************************************************************************/
 
-static void acpi_db_display_command_info(char *command, u8 display_all)
+static void acpi_db_display_command_info(const char *command, u8 display_all)
 {
        const struct acpi_db_command_help *next;
        u8 matched;
@@ -656,8 +656,9 @@ static u32 acpi_db_match_command(char *user_command)
        }
 
        for (i = CMD_FIRST_VALID; acpi_gbl_db_commands[i].name; i++) {
-               if (strstr(acpi_gbl_db_commands[i].name, user_command) ==
-                   acpi_gbl_db_commands[i].name) {
+               if (strstr
+                   (ACPI_CAST_PTR(char, acpi_gbl_db_commands[i].name),
+                    user_command) == acpi_gbl_db_commands[i].name) {
                        return (i);
                }
        }
index b37a2c77b86b5bd6c86b0499a262389b08145d0d..ae80106d100052da4ce5196be2fbeebac23488e7 100644 (file)
@@ -56,8 +56,6 @@ acpi_status acpi_db_second_pass_parse(union acpi_parse_object *root);
 void acpi_db_dump_buffer(u32 address);
 #endif
 
-static char *gbl_hex_to_ascii = "0123456789ABCDEF";
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_db_match_argument
@@ -82,8 +80,9 @@ acpi_db_match_argument(char *user_argument,
        }
 
        for (i = 0; arguments[i].name; i++) {
-               if (strstr(arguments[i].name, user_argument) ==
-                   arguments[i].name) {
+               if (strstr(ACPI_CAST_PTR(char, arguments[i].name),
+                          ACPI_CAST_PTR(char,
+                                        user_argument)) == arguments[i].name) {
                        return (i);
                }
        }
@@ -339,7 +338,7 @@ void acpi_db_uint32_to_hex_string(u32 value, char *buffer)
        buffer[8] = '\0';
 
        for (i = 7; i >= 0; i--) {
-               buffer[i] = gbl_hex_to_ascii[value & 0x0F];
+               buffer[i] = acpi_gbl_upper_hex_digits[value & 0x0F];
                value = value >> 4;
        }
 }
index 63924d1c737a0b303f999fa4de9f08cf5e12a89b..4c6f795140402a3d74231882cb67561fe0c15115 100644 (file)
@@ -526,81 +526,59 @@ acpi_ev_attach_region(union acpi_operand_object *handler_obj,
 
 /*******************************************************************************
  *
- * FUNCTION:    acpi_ev_associate_reg_method
+ * FUNCTION:    acpi_ev_execute_reg_method
  *
  * PARAMETERS:  region_obj          - Region object
+ *              function            - Passed to _REG: On (1) or Off (0)
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Find and associate _REG method to a region
+ * DESCRIPTION: Execute _REG method for a region
  *
  ******************************************************************************/
 
-void acpi_ev_associate_reg_method(union acpi_operand_object *region_obj)
+acpi_status
+acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
 {
-       acpi_name *reg_name_ptr = (acpi_name *) METHOD_NAME__REG;
+       struct acpi_evaluate_info *info;
+       union acpi_operand_object *args[3];
+       union acpi_operand_object *region_obj2;
+       const acpi_name *reg_name_ptr =
+           ACPI_CAST_PTR(acpi_name, METHOD_NAME__REG);
        struct acpi_namespace_node *method_node;
        struct acpi_namespace_node *node;
-       union acpi_operand_object *region_obj2;
        acpi_status status;
 
-       ACPI_FUNCTION_TRACE(ev_associate_reg_method);
+       ACPI_FUNCTION_TRACE(ev_execute_reg_method);
+
+       if (!acpi_gbl_namespace_initialized ||
+           region_obj->region.handler == NULL) {
+               return_ACPI_STATUS(AE_OK);
+       }
 
        region_obj2 = acpi_ns_get_secondary_object(region_obj);
        if (!region_obj2) {
-               return_VOID;
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
+       /*
+        * Find any "_REG" method associated with this region definition.
+        * The method should always be updated as this function may be
+        * invoked after a namespace change.
+        */
        node = region_obj->region.node->parent;
-
-       /* Find any "_REG" method associated with this region definition */
-
        status =
            acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD,
                                     &method_node);
        if (ACPI_SUCCESS(status)) {
                /*
-                * The _REG method is optional and there can be only one per region
-                * definition. This will be executed when the handler is attached
-                * or removed
+                * The _REG method is optional and there can be only one per
+                * region definition. This will be executed when the handler is
+                * attached or removed.
                 */
                region_obj2->extra.method_REG = method_node;
        }
-
-       return_VOID;
-}
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ev_execute_reg_method
- *
- * PARAMETERS:  region_obj          - Region object
- *              function            - Passed to _REG: On (1) or Off (0)
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Execute _REG method for a region
- *
- ******************************************************************************/
-
-acpi_status
-acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
-{
-       struct acpi_evaluate_info *info;
-       union acpi_operand_object *args[3];
-       union acpi_operand_object *region_obj2;
-       acpi_status status;
-
-       ACPI_FUNCTION_TRACE(ev_execute_reg_method);
-
-       region_obj2 = acpi_ns_get_secondary_object(region_obj);
-       if (!region_obj2) {
-               return_ACPI_STATUS(AE_NOT_EXIST);
-       }
-
-       if (region_obj2->extra.method_REG == NULL ||
-           region_obj->region.handler == NULL ||
-           !acpi_gbl_namespace_initialized) {
+       if (region_obj2->extra.method_REG == NULL) {
                return_ACPI_STATUS(AE_OK);
        }
 
index fda869c9ad0b9984e9fc2e4e545295596e06f978..6972ab4ddb6630d571861975f365c0d7c4d14ecb 100644 (file)
@@ -518,7 +518,6 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
                return_ACPI_STATUS(AE_OK);
        }
 
-       acpi_ev_associate_reg_method(region_obj);
        region_obj->common.flags |= AOPOBJ_OBJECT_INITIALIZED;
 
        node = region_obj->region.node->parent;
diff --git a/drivers/acpi/acpica/exconcat.c b/drivers/acpi/acpica/exconcat.c
new file mode 100644 (file)
index 0000000..553e014
--- /dev/null
@@ -0,0 +1,439 @@
+/******************************************************************************
+ *
+ * Module Name: exconcat - Concatenate-type AML operators
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2016, 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"
+#include "acinterp.h"
+#include "amlresrc.h"
+
+#define _COMPONENT          ACPI_EXECUTER
+ACPI_MODULE_NAME("exconcat")
+
+/* Local Prototypes */
+static acpi_status
+acpi_ex_convert_to_object_type_string(union acpi_operand_object *obj_desc,
+                                     union acpi_operand_object **result_desc);
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_do_concatenate
+ *
+ * PARAMETERS:  operand0            - First source object
+ *              operand1            - Second source object
+ *              actual_return_desc  - Where to place the return object
+ *              walk_state          - Current walk state
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Concatenate two objects with the ACPI-defined conversion
+ *              rules as necessary.
+ * NOTE:
+ * Per the ACPI spec (up to 6.1), Concatenate only supports Integer,
+ * String, and Buffer objects. However, we support all objects here
+ * as an extension. This improves the usefulness of both Concatenate
+ * and the Printf/Fprintf macros. The extension returns a string
+ * describing the object type for the other objects.
+ * 02/2016.
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_ex_do_concatenate(union acpi_operand_object *operand0,
+                      union acpi_operand_object *operand1,
+                      union acpi_operand_object **actual_return_desc,
+                      struct acpi_walk_state *walk_state)
+{
+       union acpi_operand_object *local_operand0 = operand0;
+       union acpi_operand_object *local_operand1 = operand1;
+       union acpi_operand_object *temp_operand1 = NULL;
+       union acpi_operand_object *return_desc;
+       char *buffer;
+       acpi_object_type operand0_type;
+       acpi_object_type operand1_type;
+       acpi_status status;
+
+       ACPI_FUNCTION_TRACE(ex_do_concatenate);
+
+       /* Operand 0 preprocessing */
+
+       switch (operand0->common.type) {
+       case ACPI_TYPE_INTEGER:
+       case ACPI_TYPE_STRING:
+       case ACPI_TYPE_BUFFER:
+
+               operand0_type = operand0->common.type;
+               break;
+
+       default:
+
+               /* For all other types, get the "object type" string */
+
+               status =
+                   acpi_ex_convert_to_object_type_string(operand0,
+                                                         &local_operand0);
+               if (ACPI_FAILURE(status)) {
+                       goto cleanup;
+               }
+
+               operand0_type = ACPI_TYPE_STRING;
+               break;
+       }
+
+       /* Operand 1 preprocessing */
+
+       switch (operand1->common.type) {
+       case ACPI_TYPE_INTEGER:
+       case ACPI_TYPE_STRING:
+       case ACPI_TYPE_BUFFER:
+
+               operand1_type = operand1->common.type;
+               break;
+
+       default:
+
+               /* For all other types, get the "object type" string */
+
+               status =
+                   acpi_ex_convert_to_object_type_string(operand1,
+                                                         &local_operand1);
+               if (ACPI_FAILURE(status)) {
+                       goto cleanup;
+               }
+
+               operand1_type = ACPI_TYPE_STRING;
+               break;
+       }
+
+       /*
+        * Convert the second operand if necessary. The first operand (0)
+        * determines the type of the second operand (1) (See the Data Types
+        * section of the ACPI specification). Both object types are
+        * guaranteed to be either Integer/String/Buffer by the operand
+        * resolution mechanism.
+        */
+       switch (operand0_type) {
+       case ACPI_TYPE_INTEGER:
+
+               status =
+                   acpi_ex_convert_to_integer(local_operand1, &temp_operand1,
+                                              16);
+               break;
+
+       case ACPI_TYPE_BUFFER:
+
+               status =
+                   acpi_ex_convert_to_buffer(local_operand1, &temp_operand1);
+               break;
+
+       case ACPI_TYPE_STRING:
+
+               switch (operand1_type) {
+               case ACPI_TYPE_INTEGER:
+               case ACPI_TYPE_STRING:
+               case ACPI_TYPE_BUFFER:
+
+                       /* Other types have already been converted to string */
+
+                       status =
+                           acpi_ex_convert_to_string(local_operand1,
+                                                     &temp_operand1,
+                                                     ACPI_IMPLICIT_CONVERT_HEX);
+                       break;
+
+               default:
+
+                       status = AE_OK;
+                       break;
+               }
+               break;
+
+       default:
+
+               ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
+                           operand0->common.type));
+               status = AE_AML_INTERNAL;
+       }
+
+       if (ACPI_FAILURE(status)) {
+               goto cleanup;
+       }
+
+       /* Take care with any newly created operand objects */
+
+       if ((local_operand1 != operand1) && (local_operand1 != temp_operand1)) {
+               acpi_ut_remove_reference(local_operand1);
+       }
+
+       local_operand1 = temp_operand1;
+
+       /*
+        * Both operands are now known to be the same object type
+        * (Both are Integer, String, or Buffer), and we can now perform
+        * the concatenation.
+        *
+        * There are three cases to handle, as per the ACPI spec:
+        *
+        * 1) Two Integers concatenated to produce a new Buffer
+        * 2) Two Strings concatenated to produce a new String
+        * 3) Two Buffers concatenated to produce a new Buffer
+        */
+       switch (operand0_type) {
+       case ACPI_TYPE_INTEGER:
+
+               /* Result of two Integers is a Buffer */
+               /* Need enough buffer space for two integers */
+
+               return_desc = acpi_ut_create_buffer_object((acpi_size)
+                                                          ACPI_MUL_2
+                                                          (acpi_gbl_integer_byte_width));
+               if (!return_desc) {
+                       status = AE_NO_MEMORY;
+                       goto cleanup;
+               }
+
+               buffer = (char *)return_desc->buffer.pointer;
+
+               /* Copy the first integer, LSB first */
+
+               memcpy(buffer, &operand0->integer.value,
+                      acpi_gbl_integer_byte_width);
+
+               /* Copy the second integer (LSB first) after the first */
+
+               memcpy(buffer + acpi_gbl_integer_byte_width,
+                      &local_operand1->integer.value,
+                      acpi_gbl_integer_byte_width);
+               break;
+
+       case ACPI_TYPE_STRING:
+
+               /* Result of two Strings is a String */
+
+               return_desc = acpi_ut_create_string_object(((acpi_size)
+                                                           local_operand0->
+                                                           string.length +
+                                                           local_operand1->
+                                                           string.length));
+               if (!return_desc) {
+                       status = AE_NO_MEMORY;
+                       goto cleanup;
+               }
+
+               buffer = return_desc->string.pointer;
+
+               /* Concatenate the strings */
+
+               strcpy(buffer, local_operand0->string.pointer);
+               strcat(buffer, local_operand1->string.pointer);
+               break;
+
+       case ACPI_TYPE_BUFFER:
+
+               /* Result of two Buffers is a Buffer */
+
+               return_desc = acpi_ut_create_buffer_object(((acpi_size)
+                                                           operand0->buffer.
+                                                           length +
+                                                           local_operand1->
+                                                           buffer.length));
+               if (!return_desc) {
+                       status = AE_NO_MEMORY;
+                       goto cleanup;
+               }
+
+               buffer = (char *)return_desc->buffer.pointer;
+
+               /* Concatenate the buffers */
+
+               memcpy(buffer, operand0->buffer.pointer,
+                      operand0->buffer.length);
+               memcpy(buffer + operand0->buffer.length,
+                      local_operand1->buffer.pointer,
+                      local_operand1->buffer.length);
+               break;
+
+       default:
+
+               /* Invalid object type, should not happen here */
+
+               ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
+                           operand0->common.type));
+               status = AE_AML_INTERNAL;
+               goto cleanup;
+       }
+
+       *actual_return_desc = return_desc;
+
+cleanup:
+       if (local_operand0 != operand0) {
+               acpi_ut_remove_reference(local_operand0);
+       }
+
+       if (local_operand1 != operand1) {
+               acpi_ut_remove_reference(local_operand1);
+       }
+
+       return_ACPI_STATUS(status);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_convert_to_object_type_string
+ *
+ * PARAMETERS:  obj_desc            - Object to be converted
+ *              return_desc         - Where to place the return object
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Convert an object of arbitrary type to a string object that
+ *              contains the namestring for the object. Used for the
+ *              concatenate operator.
+ *
+ ******************************************************************************/
+
+static acpi_status
+acpi_ex_convert_to_object_type_string(union acpi_operand_object *obj_desc,
+                                     union acpi_operand_object **result_desc)
+{
+       union acpi_operand_object *return_desc;
+       const char *type_string;
+
+       type_string = acpi_ut_get_type_name(obj_desc->common.type);
+
+       return_desc = acpi_ut_create_string_object(((acpi_size) strlen(type_string) + 9));      /* 9 For "[ Object]" */
+       if (!return_desc) {
+               return (AE_NO_MEMORY);
+       }
+
+       strcpy(return_desc->string.pointer, "[");
+       strcat(return_desc->string.pointer, type_string);
+       strcat(return_desc->string.pointer, " Object]");
+
+       *result_desc = return_desc;
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_concat_template
+ *
+ * PARAMETERS:  operand0            - First source object
+ *              operand1            - Second source object
+ *              actual_return_desc  - Where to place the return object
+ *              walk_state          - Current walk state
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Concatenate two resource templates
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_ex_concat_template(union acpi_operand_object *operand0,
+                       union acpi_operand_object *operand1,
+                       union acpi_operand_object **actual_return_desc,
+                       struct acpi_walk_state * walk_state)
+{
+       acpi_status status;
+       union acpi_operand_object *return_desc;
+       u8 *new_buf;
+       u8 *end_tag;
+       acpi_size length0;
+       acpi_size length1;
+       acpi_size new_length;
+
+       ACPI_FUNCTION_TRACE(ex_concat_template);
+
+       /*
+        * Find the end_tag descriptor in each resource template.
+        * Note1: returned pointers point TO the end_tag, not past it.
+        * Note2: zero-length buffers are allowed; treated like one end_tag
+        */
+
+       /* Get the length of the first resource template */
+
+       status = acpi_ut_get_resource_end_tag(operand0, &end_tag);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
+
+       length0 = ACPI_PTR_DIFF(end_tag, operand0->buffer.pointer);
+
+       /* Get the length of the second resource template */
+
+       status = acpi_ut_get_resource_end_tag(operand1, &end_tag);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
+
+       length1 = ACPI_PTR_DIFF(end_tag, operand1->buffer.pointer);
+
+       /* Combine both lengths, minimum size will be 2 for end_tag */
+
+       new_length = length0 + length1 + sizeof(struct aml_resource_end_tag);
+
+       /* Create a new buffer object for the result (with one end_tag) */
+
+       return_desc = acpi_ut_create_buffer_object(new_length);
+       if (!return_desc) {
+               return_ACPI_STATUS(AE_NO_MEMORY);
+       }
+
+       /*
+        * Copy the templates to the new buffer, 0 first, then 1 follows. One
+        * end_tag descriptor is copied from Operand1.
+        */
+       new_buf = return_desc->buffer.pointer;
+       memcpy(new_buf, operand0->buffer.pointer, length0);
+       memcpy(new_buf + length0, operand1->buffer.pointer, length1);
+
+       /* Insert end_tag and set the checksum to zero, means "ignore checksum" */
+
+       new_buf[new_length - 1] = 0;
+       new_buf[new_length - 2] = ACPI_RESOURCE_NAME_END_TAG | 1;
+
+       /* Return the completed resource template */
+
+       *actual_return_desc = return_desc;
+       return_ACPI_STATUS(AE_OK);
+}
index f7416130103798549e0b95f0f80069e381c30195..a1d177d58254cd8e201836481a51b809ec98c628 100644 (file)
@@ -118,7 +118,9 @@ acpi_ex_add_table(u32 table_index,
        /* Execute any module-level code that was found in the table */
 
        acpi_ex_exit_interpreter();
-       acpi_ns_exec_module_code_list();
+       if (acpi_gbl_group_module_level_code) {
+               acpi_ns_exec_module_code_list();
+       }
        acpi_ex_enter_interpreter();
 
        /*
index 0b9f2c13b98a906ba72202285d80890238ddcae6..d0d16daa7ed552f61169875f724dc093d769f259 100644 (file)
@@ -124,7 +124,9 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
                 * of ACPI 3.0) is that the to_integer() operator allows both decimal
                 * and hexadecimal strings (hex prefixed with "0x").
                 */
-               status = acpi_ut_strtoul64((char *)pointer, flags, &result);
+               status = acpi_ut_strtoul64((char *)pointer, flags,
+                                          acpi_gbl_integer_byte_width,
+                                          &result);
                if (ACPI_FAILURE(status)) {
                        return_ACPI_STATUS(status);
                }
index ee30974b245a581c0956ea002c81c5cd70ce2210..fce6b2e10209b01747ae2106f93cb2ad21f120af 100644 (file)
@@ -55,9 +55,9 @@ ACPI_MODULE_NAME("exdump")
  */
 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 /* Local prototypes */
-static void acpi_ex_out_string(char *title, char *value);
+static void acpi_ex_out_string(const char *title, const char *value);
 
-static void acpi_ex_out_pointer(char *title, void *value);
+static void acpi_ex_out_pointer(const char *title, const void *value);
 
 static void
 acpi_ex_dump_object(union acpi_operand_object *obj_desc,
@@ -365,8 +365,7 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
                    struct acpi_exdump_info *info)
 {
        u8 *target;
-       char *name;
-       const char *reference_name;
+       const char *name;
        u8 count;
        union acpi_operand_object *start;
        union acpi_operand_object *data = NULL;
@@ -459,9 +458,9 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
 
                case ACPI_EXD_REFERENCE:
 
-                       reference_name = acpi_ut_get_reference_name(obj_desc);
                        acpi_ex_out_string("Class Name",
-                                          ACPI_CAST_PTR(char, reference_name));
+                                          acpi_ut_get_reference_name
+                                          (obj_desc));
                        acpi_ex_dump_reference_obj(obj_desc);
                        break;
 
@@ -934,12 +933,12 @@ acpi_ex_dump_operands(union acpi_operand_object **operands,
  *
  ******************************************************************************/
 
-static void acpi_ex_out_string(char *title, char *value)
+static void acpi_ex_out_string(const char *title, const char *value)
 {
        acpi_os_printf("%20s : %s\n", title, value);
 }
 
-static void acpi_ex_out_pointer(char *title, void *value)
+static void acpi_ex_out_pointer(const char *title, const void *value)
 {
        acpi_os_printf("%20s : %p\n", title, value);
 }
index db30ae43ddd8685e820619b00e1f2df858081238..4f7e667624b30e9dc51bcb819db2cc58c0dde08d 100644 (file)
@@ -45,7 +45,6 @@
 #include "accommon.h"
 #include "acinterp.h"
 #include "amlcode.h"
-#include "amlresrc.h"
 
 #define _COMPONENT          ACPI_EXECUTER
 ACPI_MODULE_NAME("exmisc")
@@ -138,295 +137,6 @@ acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
        return_ACPI_STATUS(AE_OK);
 }
 
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ex_concat_template
- *
- * PARAMETERS:  operand0            - First source object
- *              operand1            - Second source object
- *              actual_return_desc  - Where to place the return object
- *              walk_state          - Current walk state
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Concatenate two resource templates
- *
- ******************************************************************************/
-
-acpi_status
-acpi_ex_concat_template(union acpi_operand_object *operand0,
-                       union acpi_operand_object *operand1,
-                       union acpi_operand_object **actual_return_desc,
-                       struct acpi_walk_state *walk_state)
-{
-       acpi_status status;
-       union acpi_operand_object *return_desc;
-       u8 *new_buf;
-       u8 *end_tag;
-       acpi_size length0;
-       acpi_size length1;
-       acpi_size new_length;
-
-       ACPI_FUNCTION_TRACE(ex_concat_template);
-
-       /*
-        * Find the end_tag descriptor in each resource template.
-        * Note1: returned pointers point TO the end_tag, not past it.
-        * Note2: zero-length buffers are allowed; treated like one end_tag
-        */
-
-       /* Get the length of the first resource template */
-
-       status = acpi_ut_get_resource_end_tag(operand0, &end_tag);
-       if (ACPI_FAILURE(status)) {
-               return_ACPI_STATUS(status);
-       }
-
-       length0 = ACPI_PTR_DIFF(end_tag, operand0->buffer.pointer);
-
-       /* Get the length of the second resource template */
-
-       status = acpi_ut_get_resource_end_tag(operand1, &end_tag);
-       if (ACPI_FAILURE(status)) {
-               return_ACPI_STATUS(status);
-       }
-
-       length1 = ACPI_PTR_DIFF(end_tag, operand1->buffer.pointer);
-
-       /* Combine both lengths, minimum size will be 2 for end_tag */
-
-       new_length = length0 + length1 + sizeof(struct aml_resource_end_tag);
-
-       /* Create a new buffer object for the result (with one end_tag) */
-
-       return_desc = acpi_ut_create_buffer_object(new_length);
-       if (!return_desc) {
-               return_ACPI_STATUS(AE_NO_MEMORY);
-       }
-
-       /*
-        * Copy the templates to the new buffer, 0 first, then 1 follows. One
-        * end_tag descriptor is copied from Operand1.
-        */
-       new_buf = return_desc->buffer.pointer;
-       memcpy(new_buf, operand0->buffer.pointer, length0);
-       memcpy(new_buf + length0, operand1->buffer.pointer, length1);
-
-       /* Insert end_tag and set the checksum to zero, means "ignore checksum" */
-
-       new_buf[new_length - 1] = 0;
-       new_buf[new_length - 2] = ACPI_RESOURCE_NAME_END_TAG | 1;
-
-       /* Return the completed resource template */
-
-       *actual_return_desc = return_desc;
-       return_ACPI_STATUS(AE_OK);
-}
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ex_do_concatenate
- *
- * PARAMETERS:  operand0            - First source object
- *              operand1            - Second source object
- *              actual_return_desc  - Where to place the return object
- *              walk_state          - Current walk state
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Concatenate two objects OF THE SAME TYPE.
- *
- ******************************************************************************/
-
-acpi_status
-acpi_ex_do_concatenate(union acpi_operand_object *operand0,
-                      union acpi_operand_object *operand1,
-                      union acpi_operand_object **actual_return_desc,
-                      struct acpi_walk_state *walk_state)
-{
-       union acpi_operand_object *local_operand1 = operand1;
-       union acpi_operand_object *return_desc;
-       char *new_buf;
-       const char *type_string;
-       acpi_status status;
-
-       ACPI_FUNCTION_TRACE(ex_do_concatenate);
-
-       /*
-        * Convert the second operand if necessary. The first operand
-        * determines the type of the second operand, (See the Data Types
-        * section of the ACPI specification.)  Both object types are
-        * guaranteed to be either Integer/String/Buffer by the operand
-        * resolution mechanism.
-        */
-       switch (operand0->common.type) {
-       case ACPI_TYPE_INTEGER:
-
-               status =
-                   acpi_ex_convert_to_integer(operand1, &local_operand1, 16);
-               break;
-
-       case ACPI_TYPE_STRING:
-               /*
-                * Per the ACPI spec, Concatenate only supports int/str/buf.
-                * However, we support all objects here as an extension.
-                * This improves the usefulness of the Printf() macro.
-                * 12/2015.
-                */
-               switch (operand1->common.type) {
-               case ACPI_TYPE_INTEGER:
-               case ACPI_TYPE_STRING:
-               case ACPI_TYPE_BUFFER:
-
-                       status =
-                           acpi_ex_convert_to_string(operand1, &local_operand1,
-                                                     ACPI_IMPLICIT_CONVERT_HEX);
-                       break;
-
-               default:
-                       /*
-                        * Just emit a string containing the object type.
-                        */
-                       type_string =
-                           acpi_ut_get_type_name(operand1->common.type);
-
-                       local_operand1 = acpi_ut_create_string_object(((acpi_size) strlen(type_string) + 9));   /* 9 For "[Object]" */
-                       if (!local_operand1) {
-                               status = AE_NO_MEMORY;
-                               goto cleanup;
-                       }
-
-                       strcpy(local_operand1->string.pointer, "[");
-                       strcat(local_operand1->string.pointer, type_string);
-                       strcat(local_operand1->string.pointer, " Object]");
-                       status = AE_OK;
-                       break;
-               }
-               break;
-
-       case ACPI_TYPE_BUFFER:
-
-               status = acpi_ex_convert_to_buffer(operand1, &local_operand1);
-               break;
-
-       default:
-
-               ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
-                           operand0->common.type));
-               status = AE_AML_INTERNAL;
-       }
-
-       if (ACPI_FAILURE(status)) {
-               goto cleanup;
-       }
-
-       /*
-        * Both operands are now known to be the same object type
-        * (Both are Integer, String, or Buffer), and we can now perform the
-        * concatenation.
-        */
-
-       /*
-        * There are three cases to handle:
-        *
-        * 1) Two Integers concatenated to produce a new Buffer
-        * 2) Two Strings concatenated to produce a new String
-        * 3) Two Buffers concatenated to produce a new Buffer
-        */
-       switch (operand0->common.type) {
-       case ACPI_TYPE_INTEGER:
-
-               /* Result of two Integers is a Buffer */
-               /* Need enough buffer space for two integers */
-
-               return_desc = acpi_ut_create_buffer_object((acpi_size)
-                                                          ACPI_MUL_2
-                                                          (acpi_gbl_integer_byte_width));
-               if (!return_desc) {
-                       status = AE_NO_MEMORY;
-                       goto cleanup;
-               }
-
-               new_buf = (char *)return_desc->buffer.pointer;
-
-               /* Copy the first integer, LSB first */
-
-               memcpy(new_buf, &operand0->integer.value,
-                      acpi_gbl_integer_byte_width);
-
-               /* Copy the second integer (LSB first) after the first */
-
-               memcpy(new_buf + acpi_gbl_integer_byte_width,
-                      &local_operand1->integer.value,
-                      acpi_gbl_integer_byte_width);
-               break;
-
-       case ACPI_TYPE_STRING:
-
-               /* Result of two Strings is a String */
-
-               return_desc = acpi_ut_create_string_object(((acpi_size)
-                                                           operand0->string.
-                                                           length +
-                                                           local_operand1->
-                                                           string.length));
-               if (!return_desc) {
-                       status = AE_NO_MEMORY;
-                       goto cleanup;
-               }
-
-               new_buf = return_desc->string.pointer;
-
-               /* Concatenate the strings */
-
-               strcpy(new_buf, operand0->string.pointer);
-               strcat(new_buf, local_operand1->string.pointer);
-               break;
-
-       case ACPI_TYPE_BUFFER:
-
-               /* Result of two Buffers is a Buffer */
-
-               return_desc = acpi_ut_create_buffer_object(((acpi_size)
-                                                           operand0->buffer.
-                                                           length +
-                                                           local_operand1->
-                                                           buffer.length));
-               if (!return_desc) {
-                       status = AE_NO_MEMORY;
-                       goto cleanup;
-               }
-
-               new_buf = (char *)return_desc->buffer.pointer;
-
-               /* Concatenate the buffers */
-
-               memcpy(new_buf, operand0->buffer.pointer,
-                      operand0->buffer.length);
-               memcpy(new_buf + operand0->buffer.length,
-                      local_operand1->buffer.pointer,
-                      local_operand1->buffer.length);
-               break;
-
-       default:
-
-               /* Invalid object type, should not happen here */
-
-               ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
-                           operand0->common.type));
-               status = AE_AML_INTERNAL;
-               goto cleanup;
-       }
-
-       *actual_return_desc = return_desc;
-
-cleanup:
-       if (local_operand1 != operand1) {
-               acpi_ut_remove_reference(local_operand1);
-       }
-       return_ACPI_STATUS(status);
-}
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_do_math_op
index 4d44bc1cb2ca82fbb6a8a69b36df6bba46b256e6..425f13372e68f3fe57c8b58cfb1d2948d54886a1 100644 (file)
@@ -301,8 +301,8 @@ static u32 acpi_ex_digits_needed(u64 value, u32 base)
  *
  * FUNCTION:    acpi_ex_eisa_id_to_string
  *
- * PARAMETERS:  compressed_id   - EISAID to be converted
- *              out_string      - Where to put the converted string (8 bytes)
+ * PARAMETERS:  out_string      - Where to put the converted string (8 bytes)
+ *              compressed_id   - EISAID to be converted
  *
  * RETURN:      None
  *
@@ -354,7 +354,7 @@ void acpi_ex_eisa_id_to_string(char *out_string, u64 compressed_id)
  *                                possible 64-bit integer.
  *              value           - Value to be converted
  *
- * RETURN:      None, string
+ * RETURN:      Converted string in out_string
  *
  * DESCRIPTION: Convert a 64-bit integer to decimal string representation.
  *              Assumes string buffer is large enough to hold the string. The
@@ -384,9 +384,9 @@ void acpi_ex_integer_to_string(char *out_string, u64 value)
  * FUNCTION:    acpi_ex_pci_cls_to_string
  *
  * PARAMETERS:  out_string      - Where to put the converted string (7 bytes)
- * PARAMETERS:  class_code      - PCI class code to be converted (3 bytes)
+ *              class_code      - PCI class code to be converted (3 bytes)
  *
- * RETURN:      None
+ * RETURN:      Converted string in out_string
  *
  * DESCRIPTION: Convert 3-bytes PCI class code to string representation.
  *              Return buffer must be large enough to hold the string. The
@@ -417,7 +417,7 @@ void acpi_ex_pci_cls_to_string(char *out_string, u8 class_code[3])
  *
  * PARAMETERS:  space_id            - ID to be validated
  *
- * RETURN:      TRUE if valid/supported ID.
+ * RETURN:      TRUE if space_id is a valid/supported ID.
  *
  * DESCRIPTION: Validate an operation region space_ID.
  *
index 5ba0498412fd5773d07feadd44ca442d88211b91..035fb52c3bcd75ace39ffed7c5e4ccbac2ef51f0 100644 (file)
@@ -83,6 +83,8 @@ acpi_status
 acpi_hw_validate_register(struct acpi_generic_address *reg,
                          u8 max_bit_width, u64 *address)
 {
+       u8 bit_width;
+       u8 access_width;
 
        /* Must have a valid pointer to a GAS structure */
 
@@ -109,23 +111,26 @@ acpi_hw_validate_register(struct acpi_generic_address *reg,
                return (AE_SUPPORT);
        }
 
-       /* Validate the bit_width */
+       /* Validate the access_width */
 
-       if ((reg->bit_width != 8) &&
-           (reg->bit_width != 16) &&
-           (reg->bit_width != 32) && (reg->bit_width != max_bit_width)) {
+       if (reg->access_width > 4) {
                ACPI_ERROR((AE_INFO,
-                           "Unsupported register bit width: 0x%X",
-                           reg->bit_width));
+                           "Unsupported register access width: 0x%X",
+                           reg->access_width));
                return (AE_SUPPORT);
        }
 
-       /* Validate the bit_offset. Just a warning for now. */
+       /* Validate the bit_width, convert access_width into number of bits */
 
-       if (reg->bit_offset != 0) {
+       access_width = reg->access_width ? reg->access_width : 1;
+       access_width = 1 << (access_width + 2);
+       bit_width =
+           ACPI_ROUND_UP(reg->bit_offset + reg->bit_width, access_width);
+       if (max_bit_width < bit_width) {
                ACPI_WARNING((AE_INFO,
-                             "Unsupported register bit offset: 0x%X",
-                             reg->bit_offset));
+                             "Requested bit width 0x%X is smaller than register bit width 0x%X",
+                             max_bit_width, bit_width));
+               return (AE_SUPPORT);
        }
 
        return (AE_OK);
index a01ddb393a55c92aecc66053acacba1f06116527..7caaaf3b8787dbdce1bbcdb476920a86d556151e 100644 (file)
@@ -504,9 +504,7 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 *sleep_type_a, u8 *sleep_type_b)
         * Evaluate the \_Sx namespace object containing the register values
         * for this state
         */
-       info->relative_pathname = ACPI_CAST_PTR(char,
-                                               acpi_gbl_sleep_state_names
-                                               [sleep_state]);
+       info->relative_pathname = acpi_gbl_sleep_state_names[sleep_state];
 
        status = acpi_ns_evaluate(info);
        if (ACPI_FAILURE(status)) {
index 697af810e5ad480caf3780d0097eb649e6fb5ebf..426a6307eafaebb7165436e760a15b46882153c4 100644 (file)
@@ -107,9 +107,10 @@ acpi_status acpi_ns_root_initialize(void)
                        continue;
                }
 
-               status = acpi_ns_lookup(NULL, init_val->name, init_val->type,
-                                       ACPI_IMODE_LOAD_PASS2,
-                                       ACPI_NS_NO_UPSEARCH, NULL, &new_node);
+               status =
+                   acpi_ns_lookup(NULL, (char *)init_val->name, init_val->type,
+                                  ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH,
+                                  NULL, &new_node);
                if (ACPI_FAILURE(status)) {
                        ACPI_EXCEPTION((AE_INFO, status,
                                        "Could not create predefined name %s",
index 878e8fb6a64c251d0a30c15edf4826119e6020d9..256f56c583d6c4f4855ac107f5b4028044949152 100644 (file)
@@ -79,7 +79,8 @@ acpi_ns_convert_to_integer(union acpi_operand_object *original_object,
                /* String-to-Integer conversion */
 
                status = acpi_ut_strtoul64(original_object->string.pointer,
-                                          ACPI_ANY_BASE, &value);
+                                          ACPI_ANY_BASE,
+                                          acpi_gbl_integer_byte_width, &value);
                if (ACPI_FAILURE(status)) {
                        return (status);
                }
index af236e348294cf450c579c6519557d3aa273c310..ce1f8605d996c8c594ac49b29e96bd475c9f0b1a 100644 (file)
@@ -81,7 +81,7 @@ acpi_ns_get_max_depth(acpi_handle obj_handle,
  *
  ******************************************************************************/
 
-void acpi_ns_print_pathname(u32 num_segments, char *pathname)
+void acpi_ns_print_pathname(u32 num_segments, const char *pathname)
 {
        u32 i;
 
@@ -114,6 +114,9 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname)
        acpi_os_printf("]\n");
 }
 
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+/* Not used at this time, perhaps later */
+
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_dump_pathname
@@ -131,7 +134,8 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname)
  ******************************************************************************/
 
 void
-acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component)
+acpi_ns_dump_pathname(acpi_handle handle,
+                     const char *msg, u32 level, u32 component)
 {
 
        ACPI_FUNCTION_TRACE(ns_dump_pathname);
@@ -148,6 +152,7 @@ acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component)
        acpi_os_printf("\n");
        return_VOID;
 }
+#endif
 
 /*******************************************************************************
  *
index d4aa8b696ee9d8e970c904e62ef95907841f1b4c..36643a8cf65a03b7694401befecf6000192f0c52 100644 (file)
@@ -140,6 +140,7 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
 {
        acpi_status status = AE_OK;
        struct acpi_device_walk_info info;
+       acpi_handle handle;
 
        ACPI_FUNCTION_TRACE(ns_initialize_devices);
 
@@ -190,6 +191,27 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
                if (ACPI_SUCCESS(status)) {
                        info.num_INI++;
                }
+
+               /*
+                * Execute \_SB._INI.
+                * There appears to be a strict order requirement for \_SB._INI,
+                * which should be evaluated before any _REG evaluations.
+                */
+               status = acpi_get_handle(NULL, "\\_SB", &handle);
+               if (ACPI_SUCCESS(status)) {
+                       memset(info.evaluate_info, 0,
+                              sizeof(struct acpi_evaluate_info));
+                       info.evaluate_info->prefix_node = handle;
+                       info.evaluate_info->relative_pathname =
+                           METHOD_NAME__INI;
+                       info.evaluate_info->parameters = NULL;
+                       info.evaluate_info->flags = ACPI_IGNORE_RETURN_VALUE;
+
+                       status = acpi_ns_evaluate(info.evaluate_info);
+                       if (ACPI_SUCCESS(status)) {
+                               info.num_INI++;
+                       }
+               }
        }
 
        /*
@@ -198,6 +220,12 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
         * Note: Any objects accessed by the _REG methods will be automatically
         * initialized, even if they contain executable AML (see the call to
         * acpi_ns_initialize_objects below).
+        *
+        * Note: According to the ACPI specification, we actually needn't execute
+        * _REG for system_memory/system_io operation regions, but for PCI_Config
+        * operation regions, it is required to evaluate _REG for those on a PCI
+        * root bus that doesn't contain _BBN object. So this code is kept here
+        * in order not to break things.
         */
        if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
                ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
@@ -592,33 +620,37 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
         * Note: We know there is an _INI within this subtree, but it may not be
         * under this particular device, it may be lower in the branch.
         */
-       ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
-                       (ACPI_TYPE_METHOD, device_node, METHOD_NAME__INI));
-
-       memset(info, 0, sizeof(struct acpi_evaluate_info));
-       info->prefix_node = device_node;
-       info->relative_pathname = METHOD_NAME__INI;
-       info->parameters = NULL;
-       info->flags = ACPI_IGNORE_RETURN_VALUE;
-
-       status = acpi_ns_evaluate(info);
-
-       if (ACPI_SUCCESS(status)) {
-               walk_info->num_INI++;
-       }
+       if (!ACPI_COMPARE_NAME(device_node->name.ascii, "_SB_") ||
+           device_node->parent != acpi_gbl_root_node) {
+               ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
+                               (ACPI_TYPE_METHOD, device_node,
+                                METHOD_NAME__INI));
+
+               memset(info, 0, sizeof(struct acpi_evaluate_info));
+               info->prefix_node = device_node;
+               info->relative_pathname = METHOD_NAME__INI;
+               info->parameters = NULL;
+               info->flags = ACPI_IGNORE_RETURN_VALUE;
+
+               status = acpi_ns_evaluate(info);
+               if (ACPI_SUCCESS(status)) {
+                       walk_info->num_INI++;
+               }
 #ifdef ACPI_DEBUG_OUTPUT
-       else if (status != AE_NOT_FOUND) {
+               else if (status != AE_NOT_FOUND) {
 
-               /* Ignore error and move on to next device */
+                       /* Ignore error and move on to next device */
 
-               char *scope_name =
-                   acpi_ns_get_normalized_pathname(device_node, TRUE);
+                       char *scope_name =
+                           acpi_ns_get_normalized_pathname(device_node, TRUE);
 
-               ACPI_EXCEPTION((AE_INFO, status, "during %s._INI execution",
-                               scope_name));
-               ACPI_FREE(scope_name);
-       }
+                       ACPI_EXCEPTION((AE_INFO, status,
+                                       "during %s._INI execution",
+                                       scope_name));
+                       ACPI_FREE(scope_name);
+               }
 #endif
+       }
 
        /* Ignore errors from above */
 
index 75cdb8790d490faf4acd86ef5041b3864be51cec..b5e2b0ada0abb4a7072df63b8a58ccb8cb675287 100644 (file)
@@ -123,8 +123,8 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
                (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
                acpi_ns_delete_namespace_by_owner(acpi_gbl_root_table_list.
                                                  tables[table_index].owner_id);
-               acpi_tb_release_owner_id(table_index);
 
+               acpi_tb_release_owner_id(table_index);
                return_ACPI_STATUS(status);
        }
 
index 9047f2808d5b39bc2622b319e95a0b4a7079bbbe..fde5a09819e013793c8f85bb7dd3079703bf7069 100644 (file)
@@ -179,6 +179,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
                        if (ACPI_FAILURE(status)) {
                                return (status);
                        }
+
                        elements++;
                }
                break;
@@ -225,6 +226,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
                                        return (status);
                                }
                        }
+
                        elements++;
                }
                break;
@@ -569,11 +571,13 @@ acpi_ns_check_package_list(struct acpi_evaluate_info *info,
                        if (sub_package->package.count < expected_count) {
                                goto package_too_small;
                        }
+
                        if (sub_package->package.count <
                            package->ret_info.count1) {
                                expected_count = package->ret_info.count1;
                                goto package_too_small;
                        }
+
                        if (expected_count == 0) {
                                /*
                                 * Either the num_entries element was originally zero or it was
@@ -661,6 +665,7 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info,
                if (ACPI_FAILURE(status)) {
                        return (status);
                }
+
                this_element++;
        }
 
@@ -671,6 +676,7 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info,
                if (ACPI_FAILURE(status)) {
                        return (status);
                }
+
                this_element++;
        }
 
index cfd17a4f2e91badda16dee6a7d98ffc116271399..177b05b239b701235105dbfcd746de7fbe2a553b 100644 (file)
@@ -158,7 +158,7 @@ const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
  *
  ******************************************************************************/
 
-char *acpi_ps_get_opcode_name(u16 opcode)
+const char *acpi_ps_get_opcode_name(u16 opcode)
 {
 #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
 
index 23a17c86d5a9fdfc7be6c17c0bc612478e297216..5ffdb5602d8db31d2c06776e4f5846252f1129da 100644 (file)
@@ -52,17 +52,17 @@ ACPI_MODULE_NAME("rsdump")
  * All functions in this module are used by the AML Debugger only
  */
 /* Local prototypes */
-static void acpi_rs_out_string(char *title, char *value);
+static void acpi_rs_out_string(const char *title, const char *value);
 
-static void acpi_rs_out_integer8(char *title, u8 value);
+static void acpi_rs_out_integer8(const char *title, u8 value);
 
-static void acpi_rs_out_integer16(char *title, u16 value);
+static void acpi_rs_out_integer16(const char *title, u16 value);
 
-static void acpi_rs_out_integer32(char *title, u32 value);
+static void acpi_rs_out_integer32(const char *title, u32 value);
 
-static void acpi_rs_out_integer64(char *title, u64 value);
+static void acpi_rs_out_integer64(const char *title, u64 value);
 
-static void acpi_rs_out_title(char *title);
+static void acpi_rs_out_title(const char *title);
 
 static void acpi_rs_dump_byte_list(u16 length, u8 *data);
 
@@ -208,7 +208,7 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
 {
        u8 *target = NULL;
        u8 *previous_target;
-       char *name;
+       const char *name;
        u8 count;
 
        /* First table entry must contain the table length (# of table entries) */
@@ -248,10 +248,8 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
                case ACPI_RSD_UINT8:
 
                        if (table->pointer) {
-                               acpi_rs_out_string(name, ACPI_CAST_PTR(char,
-                                                                      table->
-                                                                      pointer
-                                                                      [*target]));
+                               acpi_rs_out_string(name,
+                                                  table->pointer[*target]);
                        } else {
                                acpi_rs_out_integer8(name, ACPI_GET8(target));
                        }
@@ -276,26 +274,20 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
 
                case ACPI_RSD_1BITFLAG:
 
-                       acpi_rs_out_string(name, ACPI_CAST_PTR(char,
-                                                              table->
-                                                              pointer[*target &
-                                                                      0x01]));
+                       acpi_rs_out_string(name,
+                                          table->pointer[*target & 0x01]);
                        break;
 
                case ACPI_RSD_2BITFLAG:
 
-                       acpi_rs_out_string(name, ACPI_CAST_PTR(char,
-                                                              table->
-                                                              pointer[*target &
-                                                                      0x03]));
+                       acpi_rs_out_string(name,
+                                          table->pointer[*target & 0x03]);
                        break;
 
                case ACPI_RSD_3BITFLAG:
 
-                       acpi_rs_out_string(name, ACPI_CAST_PTR(char,
-                                                              table->
-                                                              pointer[*target &
-                                                                      0x07]));
+                       acpi_rs_out_string(name,
+                                          table->pointer[*target & 0x07]);
                        break;
 
                case ACPI_RSD_SHORTLIST:
@@ -481,7 +473,7 @@ static void acpi_rs_dump_address_common(union acpi_resource_data *resource)
  *
  ******************************************************************************/
 
-static void acpi_rs_out_string(char *title, char *value)
+static void acpi_rs_out_string(const char *title, const char *value)
 {
 
        acpi_os_printf("%27s : %s", title, value);
@@ -491,30 +483,30 @@ static void acpi_rs_out_string(char *title, char *value)
        acpi_os_printf("\n");
 }
 
-static void acpi_rs_out_integer8(char *title, u8 value)
+static void acpi_rs_out_integer8(const char *title, u8 value)
 {
        acpi_os_printf("%27s : %2.2X\n", title, value);
 }
 
-static void acpi_rs_out_integer16(char *title, u16 value)
+static void acpi_rs_out_integer16(const char *title, u16 value)
 {
 
        acpi_os_printf("%27s : %4.4X\n", title, value);
 }
 
-static void acpi_rs_out_integer32(char *title, u32 value)
+static void acpi_rs_out_integer32(const char *title, u32 value)
 {
 
        acpi_os_printf("%27s : %8.8X\n", title, value);
 }
 
-static void acpi_rs_out_integer64(char *title, u64 value)
+static void acpi_rs_out_integer64(const char *title, u64 value)
 {
 
        acpi_os_printf("%27s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value));
 }
 
-static void acpi_rs_out_title(char *title)
+static void acpi_rs_out_title(const char *title)
 {
 
        acpi_os_printf("%27s : ", title);
index cf06e49cd91c396237e5f96bb856f12daa6867c2..e0d60239d6ff46e4965079ffa6b159dc60a5e536 100644 (file)
@@ -671,7 +671,7 @@ acpi_rs_get_aei_method_data(struct acpi_namespace_node *node,
 
 acpi_status
 acpi_rs_get_method_data(acpi_handle handle,
-                       char *path, struct acpi_buffer *ret_buffer)
+                       const char *path, struct acpi_buffer *ret_buffer)
 {
        union acpi_operand_object *obj_desc;
        acpi_status status;
index a79e4f30b53051b4de6be90e26bae84f2c5c9866..635d9513994d425e035742386c3818a582f8b18f 100644 (file)
@@ -53,7 +53,7 @@ static void
 acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
                             u8 space_id,
                             u8 byte_width,
-                            u64 address, char *register_name, u8 flags);
+                            u64 address, const char *register_name, u8 flags);
 
 static void acpi_tb_convert_fadt(void);
 
@@ -65,7 +65,7 @@ acpi_tb_select_address(char *register_name, u32 address32, u64 address64);
 /* Table for conversion of FADT to common internal format and FADT validation */
 
 typedef struct acpi_fadt_info {
-       char *name;
+       const char *name;
        u16 address64;
        u16 address32;
        u16 length;
@@ -192,7 +192,7 @@ static void
 acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
                             u8 space_id,
                             u8 byte_width,
-                            u64 address, char *register_name, u8 flags)
+                            u64 address, const char *register_name, u8 flags)
 {
        u8 bit_width;
 
@@ -385,14 +385,15 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
 {
        /*
         * Check if the FADT is larger than the largest table that we expect
-        * (the ACPI 5.0 version). If so, truncate the table, and issue
-        * a warning.
+        * (typically the current ACPI specification version). If so, truncate
+        * the table, and issue a warning.
         */
        if (length > sizeof(struct acpi_table_fadt)) {
                ACPI_BIOS_WARNING((AE_INFO,
-                                  "FADT (revision %u) is longer than ACPI 5.0 version, "
+                                  "FADT (revision %u) is longer than %s length, "
                                   "truncating length %u to %u",
-                                  table->revision, length,
+                                  table->revision, ACPI_FADT_CONFORMANCE,
+                                  length,
                                   (u32)sizeof(struct acpi_table_fadt)));
        }
 
@@ -467,7 +468,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
 
 static void acpi_tb_convert_fadt(void)
 {
-       char *name;
+       const char *name;
        struct acpi_generic_address *address64;
        u32 address32;
        u8 length;
@@ -646,9 +647,12 @@ static void acpi_tb_convert_fadt(void)
                        if ((address64->address && !length) ||
                            (!address64->address && length)) {
                                ACPI_BIOS_WARNING((AE_INFO,
-                                                  "Optional FADT field %s has zero address or length: "
-                                                  "0x%8.8X%8.8X/0x%X",
-                                                  name,
+                                                  "Optional FADT field %s has valid %s but zero %s: "
+                                                  "0x%8.8X%8.8X/0x%X", name,
+                                                  (length ? "Length" :
+                                                   "Address"),
+                                                  (length ? "Address" :
+                                                   "Length"),
                                                   ACPI_FORMAT_UINT64
                                                   (address64->address),
                                                   length));
index 3151968c10d1a0aef3c2a1610307568b8e171d4a..ac71abcd32bbc6c48aaa9afd1374ae3d584ec288 100644 (file)
@@ -82,7 +82,7 @@ acpi_status __init acpi_load_tables(void)
         * their customized default region handlers.
         */
        status = acpi_ev_install_region_handlers();
-       if (ACPI_FAILURE(status) && status != AE_ALREADY_EXISTS) {
+       if (ACPI_FAILURE(status)) {
                ACPI_EXCEPTION((AE_INFO, status,
                                "During Region initialization"));
                return_ACPI_STATUS(status);
index 1cfc5f69b0338048b1a76ac736543a21a95ac4fc..5744222050052b9ad29f4bdbd0ec5864654ec007 100644 (file)
 ACPI_MODULE_NAME("utdebug")
 
 #ifdef ACPI_DEBUG_OUTPUT
-static acpi_thread_id acpi_gbl_prev_thread_id = (acpi_thread_id) 0xFFFFFFFF;
-static char *acpi_gbl_fn_entry_str = "----Entry";
-static char *acpi_gbl_fn_exit_str = "----Exit-";
-
-/* Local prototypes */
-
-static const char *acpi_ut_trim_function_name(const char *function_name);
+static acpi_thread_id acpi_gbl_previous_thread_id = (acpi_thread_id) 0xFFFFFFFF;
+static const char *acpi_gbl_function_entry_prefix = "----Entry";
+static const char *acpi_gbl_function_exit_prefix = "----Exit-";
 
 /*******************************************************************************
  *
@@ -178,14 +174,14 @@ acpi_debug_print(u32 requested_debug_level,
         * Thread tracking and context switch notification
         */
        thread_id = acpi_os_get_thread_id();
-       if (thread_id != acpi_gbl_prev_thread_id) {
+       if (thread_id != acpi_gbl_previous_thread_id) {
                if (ACPI_LV_THREADS & acpi_dbg_level) {
                        acpi_os_printf
                            ("\n**** Context Switch from TID %u to TID %u ****\n\n",
-                            (u32)acpi_gbl_prev_thread_id, (u32)thread_id);
+                            (u32)acpi_gbl_previous_thread_id, (u32)thread_id);
                }
 
-               acpi_gbl_prev_thread_id = thread_id;
+               acpi_gbl_previous_thread_id = thread_id;
                acpi_gbl_nesting_level = 0;
        }
 
@@ -287,7 +283,8 @@ acpi_ut_trace(u32 line_number,
        if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
                acpi_debug_print(ACPI_LV_FUNCTIONS,
                                 line_number, function_name, module_name,
-                                component_id, "%s\n", acpi_gbl_fn_entry_str);
+                                component_id, "%s\n",
+                                acpi_gbl_function_entry_prefix);
        }
 }
 
@@ -312,7 +309,8 @@ ACPI_EXPORT_SYMBOL(acpi_ut_trace)
 void
 acpi_ut_trace_ptr(u32 line_number,
                  const char *function_name,
-                 const char *module_name, u32 component_id, void *pointer)
+                 const char *module_name,
+                 u32 component_id, const void *pointer)
 {
 
        acpi_gbl_nesting_level++;
@@ -323,8 +321,8 @@ acpi_ut_trace_ptr(u32 line_number,
        if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
                acpi_debug_print(ACPI_LV_FUNCTIONS,
                                 line_number, function_name, module_name,
-                                component_id, "%s %p\n", acpi_gbl_fn_entry_str,
-                                pointer);
+                                component_id, "%s %p\n",
+                                acpi_gbl_function_entry_prefix, pointer);
        }
 }
 
@@ -348,7 +346,7 @@ acpi_ut_trace_ptr(u32 line_number,
 void
 acpi_ut_trace_str(u32 line_number,
                  const char *function_name,
-                 const char *module_name, u32 component_id, char *string)
+                 const char *module_name, u32 component_id, const char *string)
 {
 
        acpi_gbl_nesting_level++;
@@ -359,8 +357,8 @@ acpi_ut_trace_str(u32 line_number,
        if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
                acpi_debug_print(ACPI_LV_FUNCTIONS,
                                 line_number, function_name, module_name,
-                                component_id, "%s %s\n", acpi_gbl_fn_entry_str,
-                                string);
+                                component_id, "%s %s\n",
+                                acpi_gbl_function_entry_prefix, string);
        }
 }
 
@@ -396,7 +394,7 @@ acpi_ut_trace_u32(u32 line_number,
                acpi_debug_print(ACPI_LV_FUNCTIONS,
                                 line_number, function_name, module_name,
                                 component_id, "%s %08X\n",
-                                acpi_gbl_fn_entry_str, integer);
+                                acpi_gbl_function_entry_prefix, integer);
        }
 }
 
@@ -427,7 +425,8 @@ acpi_ut_exit(u32 line_number,
        if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
                acpi_debug_print(ACPI_LV_FUNCTIONS,
                                 line_number, function_name, module_name,
-                                component_id, "%s\n", acpi_gbl_fn_exit_str);
+                                component_id, "%s\n",
+                                acpi_gbl_function_exit_prefix);
        }
 
        if (acpi_gbl_nesting_level) {
@@ -467,14 +466,14 @@ acpi_ut_status_exit(u32 line_number,
                        acpi_debug_print(ACPI_LV_FUNCTIONS,
                                         line_number, function_name,
                                         module_name, component_id, "%s %s\n",
-                                        acpi_gbl_fn_exit_str,
+                                        acpi_gbl_function_exit_prefix,
                                         acpi_format_exception(status));
                } else {
                        acpi_debug_print(ACPI_LV_FUNCTIONS,
                                         line_number, function_name,
                                         module_name, component_id,
                                         "%s ****Exception****: %s\n",
-                                        acpi_gbl_fn_exit_str,
+                                        acpi_gbl_function_exit_prefix,
                                         acpi_format_exception(status));
                }
        }
@@ -514,7 +513,7 @@ acpi_ut_value_exit(u32 line_number,
                acpi_debug_print(ACPI_LV_FUNCTIONS,
                                 line_number, function_name, module_name,
                                 component_id, "%s %8.8X%8.8X\n",
-                                acpi_gbl_fn_exit_str,
+                                acpi_gbl_function_exit_prefix,
                                 ACPI_FORMAT_UINT64(value));
        }
 
@@ -552,8 +551,8 @@ acpi_ut_ptr_exit(u32 line_number,
        if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
                acpi_debug_print(ACPI_LV_FUNCTIONS,
                                 line_number, function_name, module_name,
-                                component_id, "%s %p\n", acpi_gbl_fn_exit_str,
-                                ptr);
+                                component_id, "%s %p\n",
+                                acpi_gbl_function_exit_prefix, ptr);
        }
 
        if (acpi_gbl_nesting_level) {
index 6ba65b02550c164ab4dba6a709a0691f83cd188c..efd7988e34cb6ace48e5a7447595b769587fdb90 100644 (file)
@@ -446,7 +446,7 @@ const char *acpi_ut_get_mutex_name(u32 mutex_id)
 
 /* Names for Notify() values, used for debug output */
 
-static const char *acpi_gbl_generic_notify[ACPI_NOTIFY_MAX + 1] = {
+static const char *acpi_gbl_generic_notify[ACPI_GENERIC_NOTIFY_MAX + 1] = {
        /* 00 */ "Bus Check",
        /* 01 */ "Device Check",
        /* 02 */ "Device Wake",
@@ -459,49 +459,53 @@ 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",
+                                       /* Reserved in ACPI 6.0 */
        /* 0D */ "System Resource Affinity Update"
 };
 
-static const char *acpi_gbl_device_notify[4] = {
+static const char *acpi_gbl_device_notify[5] = {
        /* 80 */ "Status Change",
        /* 81 */ "Information Change",
        /* 82 */ "Device-Specific Change",
-       /* 83 */ "Device-Specific Change"
+       /* 83 */ "Device-Specific Change",
+       /* 84 */ "Reserved"
 };
 
-static const char *acpi_gbl_processor_notify[4] = {
+static const char *acpi_gbl_processor_notify[5] = {
        /* 80 */ "Performance Capability Change",
        /* 81 */ "C-State Change",
        /* 82 */ "Throttling Capability Change",
-       /* 83 */ "Device-Specific Change"
+       /* 83 */ "Guaranteed Change",
+       /* 84 */ "Minimum Excursion"
 };
 
-static const char *acpi_gbl_thermal_notify[4] = {
+static const char *acpi_gbl_thermal_notify[5] = {
        /* 80 */ "Thermal Status Change",
        /* 81 */ "Thermal Trip Point Change",
        /* 82 */ "Thermal Device List Change",
-       /* 83 */ "Thermal Relationship Change"
+       /* 83 */ "Thermal Relationship Change",
+       /* 84 */ "Reserved"
 };
 
 const char *acpi_ut_get_notify_name(u32 notify_value, acpi_object_type type)
 {
 
-       /* 00 - 0D are common to all object types */
+       /* 00 - 0D are "common to all object types" (from ACPI Spec) */
 
-       if (notify_value <= ACPI_NOTIFY_MAX) {
+       if (notify_value <= ACPI_GENERIC_NOTIFY_MAX) {
                return (acpi_gbl_generic_notify[notify_value]);
        }
 
-       /* 0D - 7F are reserved */
+       /* 0E - 7F are reserved */
 
        if (notify_value <= ACPI_MAX_SYS_NOTIFY) {
                return ("Reserved");
        }
 
-       /* 80 - 83 are per-object-type */
+       /* 80 - 84 are per-object-type */
 
-       if (notify_value <= 0x83) {
+       if (notify_value <= ACPI_SPECIFIC_NOTIFY_MAX) {
                switch (type) {
                case ACPI_TYPE_ANY:
                case ACPI_TYPE_DEVICE:
index 17b9f3e6e1e1a7d321a723a43077ab599b314c7f..7bad13f2e518a184f8fd79c7b09512af3b5a7abf 100644 (file)
@@ -69,7 +69,7 @@ ACPI_MODULE_NAME("uteval")
 
 acpi_status
 acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
-                       char *path,
+                       const char *path,
                        u32 expected_return_btypes,
                        union acpi_operand_object **return_desc)
 {
@@ -204,7 +204,7 @@ cleanup:
  ******************************************************************************/
 
 acpi_status
-acpi_ut_evaluate_numeric_object(char *object_name,
+acpi_ut_evaluate_numeric_object(const char *object_name,
                                struct acpi_namespace_node *device_node,
                                u64 *value)
 {
index 48fffcfe9911547edaba7d016bf01f8baff32f9e..dd3fd7f97f8e2520fffeb17495c879e314845ed0 100644 (file)
@@ -80,6 +80,11 @@ const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS] = {
        "_S4D"
 };
 
+/* Hex-to-ascii */
+
+const char acpi_gbl_lower_hex_digits[] = "0123456789abcdef";
+const char acpi_gbl_upper_hex_digits[] = "0123456789ABCDEF";
+
 /*******************************************************************************
  *
  * Namespace globals
@@ -221,6 +226,49 @@ struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] =
 };
 #endif                         /* !ACPI_REDUCED_HARDWARE */
 
+#if defined (ACPI_DISASSEMBLER) || defined (ACPI_ASL_COMPILER)
+
+/* to_pld macro: compile/disassemble strings */
+
+const char *acpi_gbl_pld_panel_list[] = {
+       "TOP",
+       "BOTTOM",
+       "LEFT",
+       "RIGHT",
+       "FRONT",
+       "BACK",
+       "UNKNOWN",
+       NULL
+};
+
+const char *acpi_gbl_pld_vertical_position_list[] = {
+       "UPPER",
+       "CENTER",
+       "LOWER",
+       NULL
+};
+
+const char *acpi_gbl_pld_horizontal_position_list[] = {
+       "LEFT",
+       "CENTER",
+       "RIGHT",
+       NULL
+};
+
+const char *acpi_gbl_pld_shape_list[] = {
+       "ROUND",
+       "OVAL",
+       "SQUARE",
+       "VERTICALRECTANGLE",
+       "HORIZONTALRECTANGLE",
+       "VERTICALTRAPEZOID",
+       "HORIZONTALTRAPEZOID",
+       "UNKNOWN",
+       "CHAMFERED",
+       NULL
+};
+#endif
+
 /* Public globals */
 
 ACPI_EXPORT_SYMBOL(acpi_gbl_FADT)
index d938c27cc6cf495fbeed499eafc23af80faa5ede..389de3bd1ff1fa2c27b511d1671d9b43c9a2fae0 100644 (file)
@@ -361,7 +361,7 @@ acpi_ut_walk_package_tree(union acpi_operand_object *source_object,
 void
 acpi_ut_display_init_pathname(u8 type,
                              struct acpi_namespace_node *obj_handle,
-                             char *path)
+                             const char *path)
 {
        acpi_status status;
        struct acpi_buffer buffer;
index d5c3adf19bd0595ea6f1e1ea356d7d081986246f..3465fe2c5a5c5f04a723c268c482d4dfe65a37a9 100644 (file)
@@ -205,37 +205,41 @@ acpi_ut_safe_strncat(char *dest,
  *
  * FUNCTION:    acpi_ut_strtoul64
  *
- * PARAMETERS:  string          - Null terminated string
- *              base            - Radix of the string: 16 or ACPI_ANY_BASE;
- *                                ACPI_ANY_BASE means 'in behalf of to_integer'
- *              ret_integer     - Where the converted integer is returned
+ * PARAMETERS:  string                  - Null terminated string
+ *              base                    - Radix of the string: 16 or 10 or
+ *                                        ACPI_ANY_BASE
+ *              max_integer_byte_width  - Maximum allowable integer,in bytes:
+ *                                        4 or 8 (32 or 64 bits)
+ *              ret_integer             - Where the converted integer is
+ *                                        returned
  *
  * RETURN:      Status and Converted value
  *
  * DESCRIPTION: Convert a string into an unsigned value. Performs either a
- *              32-bit or 64-bit conversion, depending on the current mode
- *              of the interpreter.
+ *              32-bit or 64-bit conversion, depending on the input integer
+ *              size (often the current mode of the interpreter).
  *
- * NOTES:       acpi_gbl_integer_byte_width should be set to the proper width.
+ * NOTES:       Negative numbers are not supported, as they are not supported
+ *              by ACPI.
+ *
+ *              acpi_gbl_integer_byte_width should be set to the proper width.
  *              For the core ACPICA code, this width depends on the DSDT
- *              version. For iASL, the default byte width is always 8.
+ *              version. For iASL, the default byte width is always 8 for the
+ *              parser, but error checking is performed later to flag cases
+ *              where a 64-bit constant is defined in a 32-bit DSDT/SSDT.
  *
  *              Does not support Octal strings, not needed at this time.
  *
- *              There is an earlier version of the function after this one,
- *              below. It is slightly different than this one, and the two
- *              may eventually may need to be merged. (01/2016).
- *
  ******************************************************************************/
 
-acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
+acpi_status
+acpi_ut_strtoul64(char *string,
+                 u32 base, u32 max_integer_byte_width, u64 *ret_integer)
 {
        u32 this_digit = 0;
        u64 return_value = 0;
        u64 quotient;
        u64 dividend;
-       u32 to_integer_op = (base == ACPI_ANY_BASE);
-       u32 mode32 = (acpi_gbl_integer_byte_width == 4);
        u8 valid_digits = 0;
        u8 sign_of0x = 0;
        u8 term = 0;
@@ -244,6 +248,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
 
        switch (base) {
        case ACPI_ANY_BASE:
+       case 10:
        case 16:
 
                break;
@@ -265,9 +270,9 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
                string++;
        }
 
-       if (to_integer_op) {
+       if (base == ACPI_ANY_BASE) {
                /*
-                * Base equal to ACPI_ANY_BASE means 'ToInteger operation case'.
+                * Base equal to ACPI_ANY_BASE means 'Either decimal or hex'.
                 * We need to determine if it is decimal or hexadecimal.
                 */
                if ((*string == '0') && (tolower((int)*(string + 1)) == 'x')) {
@@ -284,7 +289,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
        /* Any string left? Check that '0x' is not followed by white space. */
 
        if (!(*string) || isspace((int)*string) || *string == '\t') {
-               if (to_integer_op) {
+               if (base == ACPI_ANY_BASE) {
                        goto error_exit;
                } else {
                        goto all_done;
@@ -292,10 +297,11 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
        }
 
        /*
-        * Perform a 32-bit or 64-bit conversion, depending upon the current
-        * execution mode of the interpreter
+        * Perform a 32-bit or 64-bit conversion, depending upon the input
+        * byte width
         */
-       dividend = (mode32) ? ACPI_UINT32_MAX : ACPI_UINT64_MAX;
+       dividend = (max_integer_byte_width <= ACPI_MAX32_BYTE_WIDTH) ?
+           ACPI_UINT32_MAX : ACPI_UINT64_MAX;
 
        /* Main loop: convert the string to a 32- or 64-bit integer */
 
@@ -323,7 +329,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
                }
 
                if (term) {
-                       if (to_integer_op) {
+                       if (base == ACPI_ANY_BASE) {
                                goto error_exit;
                        } else {
                                break;
@@ -338,12 +344,13 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
 
                valid_digits++;
 
-               if (sign_of0x
-                   && ((valid_digits > 16)
-                       || ((valid_digits > 8) && mode32))) {
+               if (sign_of0x && ((valid_digits > 16) ||
+                                 ((valid_digits > 8)
+                                  && (max_integer_byte_width <=
+                                      ACPI_MAX32_BYTE_WIDTH)))) {
                        /*
                         * This is to_integer operation case.
-                        * No any restrictions for string-to-integer conversion,
+                        * No restrictions for string-to-integer conversion,
                         * see ACPI spec.
                         */
                        goto error_exit;
@@ -355,7 +362,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
                                           &quotient, NULL);
 
                if (return_value > quotient) {
-                       if (to_integer_op) {
+                       if (base == ACPI_ANY_BASE) {
                                goto error_exit;
                        } else {
                                break;
@@ -378,7 +385,8 @@ all_done:
        return_ACPI_STATUS(AE_OK);
 
 error_exit:
-       /* Base was set/validated above */
+
+       /* Base was set/validated above (10 or 16) */
 
        if (base == 10) {
                return_ACPI_STATUS(AE_BAD_DECIMAL_CONSTANT);
@@ -388,8 +396,7 @@ error_exit:
 }
 
 #ifdef _OBSOLETE_FUNCTIONS
-/* TBD: use version in ACPICA main code base? */
-/* DONE: 01/2016 */
+/* Removed: 01/2016 */
 
 /*******************************************************************************
  *
index 8c218ad787cdf57daa6fc2711cdfb7568ace70da..208d71aa9f50aa1e510e54f348de3a28dd2e67aa 100644 (file)
@@ -67,11 +67,6 @@ static char *acpi_ut_format_number(char *string,
 
 static char *acpi_ut_put_number(char *string, u64 number, u8 base, u8 upper);
 
-/* Module globals */
-
-static const char acpi_gbl_lower_hex_digits[] = "0123456789abcdef";
-static const char acpi_gbl_upper_hex_digits[] = "0123456789ABCDEF";
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_bound_string_length
index 60c406a8efcb3b533b6d2fd1f1f5c9f75f13831e..0df07dfa53b6acccdce504f8b69de283f61677dc 100644 (file)
@@ -90,7 +90,7 @@ acpi_ut_remove_allocation(struct acpi_debug_mem_block *address,
  ******************************************************************************/
 
 acpi_status
-acpi_ut_create_list(char *list_name,
+acpi_ut_create_list(const char *list_name,
                    u16 object_size, struct acpi_memory_list **return_cache)
 {
        struct acpi_memory_list *cache;
index 2564f330a93e44c1eff3a7435572df78c639a1a7..2215fc847fa90c572b40b426a5edc2a88f5792a2 100644 (file)
@@ -861,7 +861,7 @@ static ssize_t vendor_show(struct device *dev,
 {
        struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
 
-       return sprintf(buf, "%#x\n", dcr->vendor_id);
+       return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->vendor_id));
 }
 static DEVICE_ATTR_RO(vendor);
 
@@ -870,7 +870,7 @@ static ssize_t rev_id_show(struct device *dev,
 {
        struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
 
-       return sprintf(buf, "%#x\n", dcr->revision_id);
+       return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->revision_id));
 }
 static DEVICE_ATTR_RO(rev_id);
 
@@ -879,10 +879,38 @@ static ssize_t device_show(struct device *dev,
 {
        struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
 
-       return sprintf(buf, "%#x\n", dcr->device_id);
+       return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->device_id));
 }
 static DEVICE_ATTR_RO(device);
 
+static ssize_t subsystem_vendor_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
+
+       return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->subsystem_vendor_id));
+}
+static DEVICE_ATTR_RO(subsystem_vendor);
+
+static ssize_t subsystem_rev_id_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
+
+       return sprintf(buf, "0x%04x\n",
+                       be16_to_cpu(dcr->subsystem_revision_id));
+}
+static DEVICE_ATTR_RO(subsystem_rev_id);
+
+static ssize_t subsystem_device_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
+
+       return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->subsystem_device_id));
+}
+static DEVICE_ATTR_RO(subsystem_device);
+
 static int num_nvdimm_formats(struct nvdimm *nvdimm)
 {
        struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm);
@@ -900,7 +928,7 @@ static ssize_t format_show(struct device *dev,
 {
        struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
 
-       return sprintf(buf, "%#x\n", dcr->code);
+       return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->code));
 }
 static DEVICE_ATTR_RO(format);
 
@@ -933,7 +961,8 @@ static ssize_t format1_show(struct device *dev,
                                continue;
                        if (nfit_dcr->dcr->code == dcr->code)
                                continue;
-                       rc = sprintf(buf, "%#x\n", nfit_dcr->dcr->code);
+                       rc = sprintf(buf, "%#x\n",
+                                       be16_to_cpu(nfit_dcr->dcr->code));
                        break;
                }
                if (rc != ENXIO)
@@ -958,7 +987,7 @@ static ssize_t serial_show(struct device *dev,
 {
        struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
 
-       return sprintf(buf, "%#x\n", dcr->serial_number);
+       return sprintf(buf, "0x%08x\n", be32_to_cpu(dcr->serial_number));
 }
 static DEVICE_ATTR_RO(serial);
 
@@ -1000,17 +1029,39 @@ static ssize_t flags_show(struct device *dev,
 }
 static DEVICE_ATTR_RO(flags);
 
+static ssize_t id_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev);
+
+       if (dcr->valid_fields & ACPI_NFIT_CONTROL_MFG_INFO_VALID)
+               return sprintf(buf, "%04x-%02x-%04x-%08x\n",
+                               be16_to_cpu(dcr->vendor_id),
+                               dcr->manufacturing_location,
+                               be16_to_cpu(dcr->manufacturing_date),
+                               be32_to_cpu(dcr->serial_number));
+       else
+               return sprintf(buf, "%04x-%08x\n",
+                               be16_to_cpu(dcr->vendor_id),
+                               be32_to_cpu(dcr->serial_number));
+}
+static DEVICE_ATTR_RO(id);
+
 static struct attribute *acpi_nfit_dimm_attributes[] = {
        &dev_attr_handle.attr,
        &dev_attr_phys_id.attr,
        &dev_attr_vendor.attr,
        &dev_attr_device.attr,
+       &dev_attr_rev_id.attr,
+       &dev_attr_subsystem_vendor.attr,
+       &dev_attr_subsystem_device.attr,
+       &dev_attr_subsystem_rev_id.attr,
        &dev_attr_format.attr,
        &dev_attr_formats.attr,
        &dev_attr_format1.attr,
        &dev_attr_serial.attr,
-       &dev_attr_rev_id.attr,
        &dev_attr_flags.attr,
+       &dev_attr_id.attr,
        &dev_attr_family.attr,
        &dev_attr_dsm_mask.attr,
        NULL,
index 46c50148e4b79cf8d05999a3ce651564b805e537..11cb38348aef600cac3215985d98bc7559e37d63 100644 (file)
@@ -52,11 +52,13 @@ enum nfit_uuids {
        NFIT_UUID_MAX,
 };
 
-enum nfit_fic {
-       NFIT_FIC_BYTE = 0x101, /* byte-addressable energy backed */
-       NFIT_FIC_BLK = 0x201, /* block-addressable non-energy backed */
-       NFIT_FIC_BYTEN = 0x301, /* byte-addressable non-energy backed */
-};
+/*
+ * Region format interface codes are stored as an array of bytes in the
+ * NFIT DIMM Control Region structure
+ */
+#define NFIT_FIC_BYTE cpu_to_be16(0x101) /* byte-addressable energy backed */
+#define NFIT_FIC_BLK cpu_to_be16(0x201) /* block-addressable non-energy backed */
+#define NFIT_FIC_BYTEN cpu_to_be16(0x301) /* byte-addressable non-energy backed */
 
 enum {
        NFIT_BLK_READ_FLUSH = 1,
index 814d5f83b75e1e73385b59f753c733326957696f..bef06c9503cdccb9321cb3045a1592a0153922ca 100644 (file)
@@ -582,7 +582,7 @@ static char acpi_os_name[ACPI_MAX_OVERRIDE_LEN];
 
 acpi_status
 acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
-                           char **new_val)
+                           acpi_string *new_val)
 {
        if (!init_val || !new_val)
                return AE_BAD_PARAMETER;
index d1e34d1eeea67e36deac0a268415c46a57828b66..6026308f5b268d2b66d7f81c3c7325568c57eaa4 100644 (file)
@@ -96,7 +96,7 @@ acpi_physical_address acpi_os_get_root_pointer(void);
 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override
 acpi_status
 acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
-                           char **new_val);
+                           acpi_string *new_val);
 #endif
 
 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_table_override
index 17556979dc79bffdb26b928d6f6348edfae4d095..83583a251e720e25679b6906a5aee986624ba164 100644 (file)
@@ -46,7 +46,7 @@
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20160108
+#define ACPI_CA_VERSION                 0x20160318
 
 #include <acpi/acconfig.h>
 #include <acpi/actypes.h>
index 0cb1a003698637543fee127e2726091f563a4cef..c19700e2a2fe25d169a64180593438d9815c3f77 100644 (file)
@@ -223,7 +223,7 @@ struct acpi_table_facs {
 /*******************************************************************************
  *
  * FADT - Fixed ACPI Description Table (Signature "FACP")
- *        Version 4
+ *        Version 6
  *
  ******************************************************************************/
 
@@ -413,4 +413,6 @@ struct acpi_table_desc {
 #define ACPI_FADT_V5_SIZE       (u32) (ACPI_FADT_OFFSET (hypervisor_id))
 #define ACPI_FADT_V6_SIZE       (u32) (sizeof (struct acpi_table_fadt))
 
+#define ACPI_FADT_CONFORMANCE   "ACPI 6.1 (FADT version 6)"
+
 #endif                         /* __ACTBL_H__ */
index 16e013600c194de06f2c4d74708a4c7e0d6013b8..796d6baae3a34c08c51787bc1b8d562323d2d0f2 100644 (file)
@@ -236,7 +236,8 @@ enum acpi_einj_actions {
        ACPI_EINJ_CHECK_BUSY_STATUS = 6,
        ACPI_EINJ_GET_COMMAND_STATUS = 7,
        ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8,
-       ACPI_EINJ_ACTION_RESERVED = 9,  /* 9 and greater are reserved */
+       ACPI_EINJ_GET_EXECUTE_TIMINGS = 9,
+       ACPI_EINJ_ACTION_RESERVED = 10, /* 10 and greater are reserved */
        ACPI_EINJ_TRIGGER_ERROR = 0xFF  /* Except for this value */
 };
 
@@ -348,7 +349,8 @@ enum acpi_erst_actions {
        ACPI_ERST_GET_ERROR_RANGE = 13,
        ACPI_ERST_GET_ERROR_LENGTH = 14,
        ACPI_ERST_GET_ERROR_ATTRIBUTES = 15,
-       ACPI_ERST_ACTION_RESERVED = 16  /* 16 and greater are reserved */
+       ACPI_ERST_EXECUTE_TIMINGS = 16,
+       ACPI_ERST_ACTION_RESERVED = 17  /* 17 and greater are reserved */
 };
 
 /* Values for Instruction field above */
@@ -427,7 +429,8 @@ enum acpi_hest_types {
        ACPI_HEST_TYPE_AER_ENDPOINT = 7,
        ACPI_HEST_TYPE_AER_BRIDGE = 8,
        ACPI_HEST_TYPE_GENERIC_ERROR = 9,
-       ACPI_HEST_TYPE_RESERVED = 10    /* 10 and greater are reserved */
+       ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
+       ACPI_HEST_TYPE_RESERVED = 11    /* 11 and greater are reserved */
 };
 
 /*
@@ -506,7 +509,11 @@ enum acpi_hest_notify_types {
        ACPI_HEST_NOTIFY_NMI = 4,
        ACPI_HEST_NOTIFY_CMCI = 5,      /* ACPI 5.0 */
        ACPI_HEST_NOTIFY_MCE = 6,       /* ACPI 5.0 */
-       ACPI_HEST_NOTIFY_RESERVED = 7   /* 7 and greater are reserved */
+       ACPI_HEST_NOTIFY_GPIO = 7,      /* ACPI 6.0 */
+       ACPI_HEST_NOTIFY_SEA = 8,       /* ACPI 6.1 */
+       ACPI_HEST_NOTIFY_SEI = 9,       /* ACPI 6.1 */
+       ACPI_HEST_NOTIFY_GSIV = 10,     /* ACPI 6.1 */
+       ACPI_HEST_NOTIFY_RESERVED = 11  /* 11 and greater are reserved */
 };
 
 /* Values for config_write_enable bitfield above */
@@ -603,6 +610,24 @@ struct acpi_hest_generic {
        u32 error_block_length;
 };
 
+/* 10: Generic Hardware Error Source, version 2 */
+
+struct acpi_hest_generic_v2 {
+       struct acpi_hest_header header;
+       u16 related_source_id;
+       u8 reserved;
+       u8 enabled;
+       u32 records_to_preallocate;
+       u32 max_sections_per_record;
+       u32 max_raw_data_length;
+       struct acpi_generic_address error_status_address;
+       struct acpi_hest_notify notify;
+       u32 error_block_length;
+       struct acpi_generic_address read_ack_register;
+       u64 read_ack_preserve;
+       u64 read_ack_write;
+};
+
 /* Generic Error Status block */
 
 struct acpi_hest_generic_status {
@@ -634,6 +659,33 @@ struct acpi_hest_generic_data {
        u8 fru_text[20];
 };
 
+/* Extension for revision 0x0300 */
+
+struct acpi_hest_generic_data_v300 {
+       u8 section_type[16];
+       u32 error_severity;
+       u16 revision;
+       u8 validation_bits;
+       u8 flags;
+       u32 error_data_length;
+       u8 fru_id[16];
+       u8 fru_text[20];
+       u64 time_stamp;
+};
+
+/* Values for error_severity above */
+
+#define ACPI_HEST_GEN_ERROR_RECOVERABLE     0
+#define ACPI_HEST_GEN_ERROR_FATAL           1
+#define ACPI_HEST_GEN_ERROR_CORRECTED       2
+#define ACPI_HEST_GEN_ERROR_NONE            3
+
+/* Flags for validation_bits above */
+
+#define ACPI_HEST_GEN_VALID_FRU_ID          (1)
+#define ACPI_HEST_GEN_VALID_FRU_STRING      (1<<1)
+#define ACPI_HEST_GEN_VALID_TIMESTAMP       (1<<2)
+
 /*******************************************************************************
  *
  * MADT - Multiple APIC Description Table
@@ -934,7 +986,7 @@ struct acpi_msct_proximity {
 
 /*******************************************************************************
  *
- * NFIT - NVDIMM Interface Table (ACPI 6.0)
+ * NFIT - NVDIMM Interface Table (ACPI 6.0+)
  *        Version 1
  *
  ******************************************************************************/
@@ -1015,6 +1067,7 @@ struct acpi_nfit_memory_map {
 #define ACPI_NFIT_MEM_NOT_ARMED         (1<<3) /* 03: Memory Device is not armed */
 #define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4) /* 04: Memory Device observed SMART/health events */
 #define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5) /* 05: SMART/health events enabled */
+#define ACPI_NFIT_MEM_MAP_FAILED        (1<<6) /* 06: Mapping to SPA failed */
 
 /* 2: Interleave Structure */
 
@@ -1046,7 +1099,10 @@ struct acpi_nfit_control_region {
        u16 subsystem_vendor_id;
        u16 subsystem_device_id;
        u16 subsystem_revision_id;
-       u8 reserved[6];         /* Reserved, must be zero */
+       u8 valid_fields;
+       u8 manufacturing_location;
+       u16 manufacturing_date;
+       u8 reserved[2];         /* Reserved, must be zero */
        u32 serial_number;
        u16 code;
        u16 windows;
@@ -1061,7 +1117,11 @@ struct acpi_nfit_control_region {
 
 /* Flags */
 
-#define ACPI_NFIT_CONTROL_BUFFERED      (1)    /* Block Data Windows implementation is buffered */
+#define ACPI_NFIT_CONTROL_BUFFERED          (1)        /* Block Data Windows implementation is buffered */
+
+/* valid_fields bits */
+
+#define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)        /* Manufacturing fields are valid */
 
 /* 5: NVDIMM Block Data Window Region Structure */
 
index a4ef62537cac8d747f2f1985b56c5632146ab513..c93dbadfc71d34836f085d872c2b625b8bce1ad6 100644 (file)
@@ -321,7 +321,7 @@ struct acpi_csrt_descriptor {
  * DBG2 - Debug Port Table 2
  *        Version 0 (Both main table and subtables)
  *
- * Conforms to "Microsoft Debug Port Table 2 (DBG2)", May 22 2012.
+ * Conforms to "Microsoft Debug Port Table 2 (DBG2)", December 10, 2015
  *
  ******************************************************************************/
 
@@ -371,6 +371,11 @@ struct acpi_dbg2_device {
 
 #define ACPI_DBG2_16550_COMPATIBLE  0x0000
 #define ACPI_DBG2_16550_SUBSET      0x0001
+#define ACPI_DBG2_ARM_PL011         0x0003
+#define ACPI_DBG2_ARM_SBSA_32BIT    0x000D
+#define ACPI_DBG2_ARM_SBSA_GENERIC  0x000E
+#define ACPI_DBG2_ARM_DCC           0x000F
+#define ACPI_DBG2_BCM2835           0x0010
 
 #define ACPI_DBG2_1394_STANDARD     0x0000
 
@@ -399,7 +404,7 @@ struct acpi_table_dbgp {
  *        Version 1
  *
  * Conforms to "Intel Virtualization Technology for Directed I/O",
- * Version 2.2, Sept. 2013
+ * Version 2.3, October 2014
  *
  ******************************************************************************/
 
@@ -413,6 +418,8 @@ struct acpi_table_dmar {
 /* Masks for Flags field above */
 
 #define ACPI_DMAR_INTR_REMAP        (1)
+#define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
+#define ACPI_DMAR_X2APIC_MODE       (1<<2)
 
 /* DMAR subtable header */
 
@@ -655,7 +662,7 @@ struct acpi_ibft_target {
  * IORT - IO Remapping Table
  *
  * Conforms to "IO Remapping Table System Software on ARM Platforms",
- * Document number: ARM DEN 0049A, 2015
+ * Document number: ARM DEN 0049B, October 2015
  *
  ******************************************************************************/
 
@@ -685,7 +692,8 @@ enum acpi_iort_node_type {
        ACPI_IORT_NODE_ITS_GROUP = 0x00,
        ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
        ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
-       ACPI_IORT_NODE_SMMU = 0x03
+       ACPI_IORT_NODE_SMMU = 0x03,
+       ACPI_IORT_NODE_SMMU_V3 = 0x04
 };
 
 struct acpi_iort_id_mapping {
@@ -775,6 +783,23 @@ struct acpi_iort_smmu {
 #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
 #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
 
+struct acpi_iort_smmu_v3 {
+       u64 base_address;       /* SMMUv3 base address */
+       u32 flags;
+       u32 reserved;
+       u64 vatos_address;
+       u32 model;              /* O: generic SMMUv3 */
+       u32 event_gsiv;
+       u32 pri_gsiv;
+       u32 gerr_gsiv;
+       u32 sync_gsiv;
+};
+
+/* Masks for Flags field above */
+
+#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
+#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
+
 /*******************************************************************************
  *
  * IVRS - I/O Virtualization Reporting Structure
@@ -1102,10 +1127,10 @@ struct acpi_table_slic {
 /*******************************************************************************
  *
  * SPCR - Serial Port Console Redirection table
- *        Version 1
+ *        Version 2
  *
  * Conforms to "Serial Port Console Redirection Table",
- * Version 1.00, January 11, 2002
+ * Version 1.03, August 10, 2015
  *
  ******************************************************************************/
 
@@ -1137,6 +1162,8 @@ struct acpi_table_spcr {
 
 #define ACPI_SPCR_DO_NOT_DISABLE    (1)
 
+/* Values for Interface Type: See the definition of the DBG2 table */
+
 /*******************************************************************************
  *
  * SPMI - Server Platform Management Interface table
index ddf5e66c3b1543d288f9a16782cfb37d800d82b3..f12f4bb1907beee0c36719ead43fb8c0dd459623 100644 (file)
@@ -184,7 +184,7 @@ struct acpi_table_fpdt {
        struct acpi_table_header header;        /* Common ACPI table header */
 };
 
-/* FPDT subtable header */
+/* FPDT subtable header (Performance Record Structure) */
 
 struct acpi_fpdt_header {
        u16 type;
@@ -205,19 +205,15 @@ enum acpi_fpdt_type {
 
 /* 0: Firmware Basic Boot Performance Record */
 
-struct acpi_fpdt_boot {
+struct acpi_fpdt_boot_pointer {
        struct acpi_fpdt_header header;
        u8 reserved[4];
-       u64 reset_end;
-       u64 load_start;
-       u64 startup_start;
-       u64 exit_services_entry;
-       u64 exit_services_exit;
+       u64 address;
 };
 
 /* 1: S3 Performance Table Pointer Record */
 
-struct acpi_fpdt_s3pt_ptr {
+struct acpi_fpdt_s3pt_pointer {
        struct acpi_fpdt_header header;
        u8 reserved[4];
        u64 address;
@@ -225,7 +221,7 @@ struct acpi_fpdt_s3pt_ptr {
 
 /*
  * S3PT - S3 Performance Table. This table is pointed to by the
- * FPDT S3 Pointer Record above.
+ * S3 Pointer Record above.
  */
 struct acpi_table_s3pt {
        u8 signature[4];        /* "S3PT" */
@@ -233,34 +229,43 @@ struct acpi_table_s3pt {
 };
 
 /*
- * S3PT Subtables
+ * S3PT Subtables (Not part of the actual FPDT)
  */
-struct acpi_s3pt_header {
-       u16 type;
-       u8 length;
-       u8 revision;
-};
 
-/* Values for Type field above */
+/* Values for Type field in S3PT header */
 
 enum acpi_s3pt_type {
        ACPI_S3PT_TYPE_RESUME = 0,
-       ACPI_S3PT_TYPE_SUSPEND = 1
+       ACPI_S3PT_TYPE_SUSPEND = 1,
+       ACPI_FPDT_BOOT_PERFORMANCE = 2
 };
 
 struct acpi_s3pt_resume {
-       struct acpi_s3pt_header header;
+       struct acpi_fpdt_header header;
        u32 resume_count;
        u64 full_resume;
        u64 average_resume;
 };
 
 struct acpi_s3pt_suspend {
-       struct acpi_s3pt_header header;
+       struct acpi_fpdt_header header;
        u64 suspend_start;
        u64 suspend_end;
 };
 
+/*
+ * FPDT Boot Performance Record (Not part of the actual FPDT)
+ */
+struct acpi_fpdt_boot {
+       struct acpi_fpdt_header header;
+       u8 reserved[4];
+       u64 reset_end;
+       u64 load_start;
+       u64 startup_start;
+       u64 exit_services_entry;
+       u64 exit_services_exit;
+};
+
 /*******************************************************************************
  *
  * GTDT - Generic Timer Description Table (ACPI 5.1)
index db46546d3b9d6534834fcc6c99c1b6e35cb66b86..b9a8b72e297c5a172a7d6234d847762629838d1c 100644 (file)
@@ -630,7 +630,8 @@ typedef u64 acpi_integer;
 #define ACPI_NOTIFY_SHUTDOWN_REQUEST    (u8) 0x0C
 #define ACPI_NOTIFY_AFFINITY_UPDATE     (u8) 0x0D
 
-#define ACPI_NOTIFY_MAX                 0x0D
+#define ACPI_GENERIC_NOTIFY_MAX         0x0D
+#define ACPI_SPECIFIC_NOTIFY_MAX        0x84
 
 /*
  * Types associated with ACPI names and objects. The first group of
@@ -994,7 +995,7 @@ struct acpi_buffer {
  * Predefined Namespace items
  */
 struct acpi_predefined_names {
-       char *name;
+       const char *name;
        u8 type;
        char *val;
 };
@@ -1227,7 +1228,7 @@ struct acpi_mem_space_context {
  * struct acpi_memory_list is used only if the ACPICA local cache is enabled
  */
 struct acpi_memory_list {
-       char *list_name;
+       const char *list_name;
        void *list_head;
        u16 object_size;
        u16 max_depth;
index 7c0595bde1324ec152d1b4b7d5f4b73efd036f34..86b5a8447606c4b4d1c87ac7c9b76146babd1dd7 100644 (file)
  *
  *****************************************************************************/
 
+/* Common application configuration. All single threaded except for acpi_exec. */
+
+#if (defined ACPI_ASL_COMPILER) || \
+       (defined ACPI_BIN_APP)      || \
+       (defined ACPI_DUMP_APP)     || \
+       (defined ACPI_HELP_APP)     || \
+       (defined ACPI_NAMES_APP)    || \
+       (defined ACPI_SRC_APP)      || \
+       (defined ACPI_XTRACT_APP)   || \
+       (defined ACPI_EXAMPLE_APP)
+#define ACPI_APPLICATION
+#define ACPI_SINGLE_THREADED
+#endif
+
 /* iASL configuration */
 
 #ifdef ACPI_ASL_COMPILER
-#define ACPI_APPLICATION
 #define ACPI_DEBUG_OUTPUT
 #define ACPI_CONSTANT_EVAL_ONLY
 #define ACPI_LARGE_NAMESPACE_NODE
 #define ACPI_DATA_TABLE_DISASSEMBLY
-#define ACPI_SINGLE_THREADED
 #define ACPI_32BIT_PHYSICAL_ADDRESS
-
 #define ACPI_DISASSEMBLER 1
 #endif
 
 #define ACPI_DBG_TRACK_ALLOCATIONS
 #endif
 
-/*
- * acpi_bin/acpi_dump/acpi_help/acpi_names/acpi_src/acpi_xtract/Example
- * configuration. All single threaded.
- */
-#if (defined ACPI_BIN_APP)      || \
-       (defined ACPI_DUMP_APP)     || \
-       (defined ACPI_HELP_APP)     || \
-       (defined ACPI_NAMES_APP)    || \
-       (defined ACPI_SRC_APP)      || \
-       (defined ACPI_XTRACT_APP)   || \
-       (defined ACPI_EXAMPLE_APP)
-#define ACPI_APPLICATION
-#define ACPI_SINGLE_THREADED
-#endif
-
 /* acpi_help configuration. Error messages disabled. */
 
 #ifdef ACPI_HELP_APP
 #define ACPI_REDUCED_HARDWARE 1
 #endif
 
-/* Linkable ACPICA library */
+/* Linkable ACPICA library. Two versions, one with full debug. */
 
 #ifdef ACPI_LIBRARY
 #define ACPI_USE_LOCAL_CACHE
-#define ACPI_FULL_DEBUG
+#define ACPI_DEBUGGER 1
+#define ACPI_DISASSEMBLER 1
+
+#ifdef _DEBUG
+#define ACPI_DEBUG_OUTPUT
+#endif
 #endif
 
 /* Common for all ACPICA applications */
 #elif defined(__HAIKU__)
 #include "achaiku.h"
 
+#elif defined(__QNX__)
+#include "acqnx.h"
+
 #else
 
 /* Unknown environment */
diff --git a/include/acpi/platform/acmsvcex.h b/include/acpi/platform/acmsvcex.h
deleted file mode 100644 (file)
index 28084a1..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/******************************************************************************
- *
- * Name: acmsvcex.h - Extra VC specific defines, etc.
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000 - 2016, 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.
- */
-
-#ifndef __ACMSVCEX_H__
-#define __ACMSVCEX_H__
-
-/* Debug support. */
-
-#ifdef _DEBUG
-#define _CRTDBG_MAP_ALLOC      /* Enables specific file/lineno for leaks */
-#include <crtdbg.h>
-#endif
-
-#endif                         /* __ACMSVCEX_H__ */
diff --git a/include/acpi/platform/acwinex.h b/include/acpi/platform/acwinex.h
deleted file mode 100644 (file)
index a00b3e4..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/******************************************************************************
- *
- * Name: acwinex.h - Extra OS specific defines, etc.
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000 - 2016, 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.
- */
-
-#ifndef __ACWINEX_H__
-#define __ACWINEX_H__
-
-/* Windows uses VC */
-
-#endif                         /* __ACWINEX_H__ */
index 3818fd07e50fd1e74a8ea2450bbfa29bff4957ba..cbfbce18783d322978ffa32dea43f4d6d96a7f20 100644 (file)
@@ -54,7 +54,7 @@ ACPI_MODULE_NAME("osunixmap")
 #ifndef O_BINARY
 #define O_BINARY 0
 #endif
-#if defined(_dragon_fly) || defined(_free_BSD)
+#if defined(_dragon_fly) || defined(_free_BSD) || defined(_QNX)
 #define MMAP_FLAGS          MAP_SHARED
 #else
 #define MMAP_FLAGS          MAP_PRIVATE
index da44458d3b6c313eb3d967bb65d2dd03dd325298..9c2db0eb467f2e2a3eb343ac018872aa4d32e3e2 100644 (file)
@@ -286,7 +286,8 @@ int ap_dump_table_by_address(char *ascii_address)
 
        /* Convert argument to an integer physical address */
 
-       status = acpi_ut_strtoul64(ascii_address, 0, &long_address);
+       status = acpi_ut_strtoul64(ascii_address, ACPI_ANY_BASE,
+                                  ACPI_MAX64_BYTE_WIDTH, &long_address);
        if (ACPI_FAILURE(status)) {
                acpi_log_error("%s: Could not convert to a physical address\n",
                               ascii_address);
index c3c09152fac665da753a26a9ef59caf0637ef083..7692e6b887e120c3f89757f104653255d6e87651 100644 (file)
@@ -209,7 +209,8 @@ static int ap_do_options(int argc, char **argv)
                case 'r':       /* Dump tables from specified RSDP */
 
                        status =
-                           acpi_ut_strtoul64(acpi_gbl_optarg, 0,
+                           acpi_ut_strtoul64(acpi_gbl_optarg, ACPI_ANY_BASE,
+                                             ACPI_MAX64_BYTE_WIDTH,
                                              &gbl_rsdp_base);
                        if (ACPI_FAILURE(status)) {
                                acpi_log_error