Commit 1b982baf authored by Dan Williams's avatar Dan Williams

Merge branch 'for-4.7/acpi6.1' into libnvdimm-for-next

parents 1f716d05 6ca72085
...@@ -43,6 +43,7 @@ acpi-y += \ ...@@ -43,6 +43,7 @@ acpi-y += \
evxfregn.o evxfregn.o
acpi-y += \ acpi-y += \
exconcat.o \
exconfig.o \ exconfig.o \
exconvrt.o \ exconvrt.o \
excreate.o \ excreate.o \
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
#define ACPI_DEBUG_BUFFER_SIZE 0x4000 /* 16K buffer for return objects */ #define ACPI_DEBUG_BUFFER_SIZE 0x4000 /* 16K buffer for return objects */
struct acpi_db_command_info { struct acpi_db_command_info {
char *name; /* Command Name */ const char *name; /* Command Name */
u8 min_args; /* Minimum arguments required */ u8 min_args; /* Minimum arguments required */
}; };
...@@ -64,7 +64,7 @@ struct acpi_db_command_help { ...@@ -64,7 +64,7 @@ struct acpi_db_command_help {
}; };
struct acpi_db_argument_info { struct acpi_db_argument_info {
char *name; /* Argument Name */ const char *name; /* Argument Name */
}; };
struct acpi_db_execute_walk { struct acpi_db_execute_walk {
......
...@@ -198,8 +198,6 @@ void ...@@ -198,8 +198,6 @@ void
acpi_ev_detach_region(union acpi_operand_object *region_obj, acpi_ev_detach_region(union acpi_operand_object *region_obj,
u8 acpi_ns_is_locked); u8 acpi_ns_is_locked);
void acpi_ev_associate_reg_method(union acpi_operand_object *region_obj);
void void
acpi_ev_execute_reg_methods(struct acpi_namespace_node *node, acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
acpi_adr_space_type space_id, u32 function); acpi_adr_space_type space_id, u32 function);
......
...@@ -187,6 +187,8 @@ extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT]; ...@@ -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_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_highest_dstate_names[ACPI_NUM_sx_d_METHODS];
extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS]; 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]; extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES];
#ifdef ACPI_DBG_TRACK_ALLOCATIONS #ifdef ACPI_DBG_TRACK_ALLOCATIONS
...@@ -361,6 +363,15 @@ ACPI_GLOBAL(u32, acpi_gbl_num_objects); ...@@ -361,6 +363,15 @@ ACPI_GLOBAL(u32, acpi_gbl_num_objects);
#endif /* ACPI_DEBUGGER */ #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 * Application globals
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
typedef const struct acpi_exdump_info { typedef const struct acpi_exdump_info {
u8 opcode; u8 opcode;
u8 offset; u8 offset;
char *name; const char *name;
} acpi_exdump_info; } acpi_exdump_info;
......
...@@ -1096,6 +1096,7 @@ struct acpi_external_list { ...@@ -1096,6 +1096,7 @@ struct acpi_external_list {
#define ACPI_EXT_ORIGIN_FROM_FILE 0x02 /* External came from a file */ #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_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */
#define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */ #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 { struct acpi_external_file {
char *path; char *path;
......
...@@ -260,6 +260,10 @@ ...@@ -260,6 +260,10 @@
#define ACPI_IS_MISALIGNED(value) (((acpi_size) value) & (sizeof(acpi_size)-1)) #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 * Bitmask creation
* Bit positions start at zero. * Bit positions start at zero.
...@@ -283,10 +287,10 @@ ...@@ -283,10 +287,10 @@
/* Generic bitfield macros and masks */ /* Generic bitfield macros and masks */
#define ACPI_GET_BITS(source_ptr, position, mask) \ #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) \ #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_1BIT_MASK 0x00000001
#define ACPI_2BIT_MASK 0x00000003 #define ACPI_2BIT_MASK 0x00000003
......
...@@ -206,9 +206,10 @@ void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth); ...@@ -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_entry(acpi_handle handle, u32 debug_level);
void 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_status
acpi_ns_dump_one_object(acpi_handle obj_handle, acpi_ns_dump_one_object(acpi_handle obj_handle,
......
...@@ -139,7 +139,7 @@ acpi_ps_complete_final_op(struct acpi_walk_state *walk_state, ...@@ -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); 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); u8 acpi_ps_get_argument_count(u32 op_type);
......
...@@ -523,6 +523,9 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = { ...@@ -523,6 +523,9 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */ METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */
PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0), 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, {{"_FIX", METHOD_0ARGS,
METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */ METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */
PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0), 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[] = { ...@@ -1053,6 +1056,12 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING | METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING |
ACPI_RTYPE_BUFFER)}}, 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 */ PACKAGE_INFO(0, 0, 0, 0, 0, 0) /* Table terminator */
}; };
#else #else
......
...@@ -124,7 +124,7 @@ typedef enum { ...@@ -124,7 +124,7 @@ typedef enum {
typedef const struct acpi_rsdump_info { typedef const struct acpi_rsdump_info {
u8 opcode; u8 opcode;
u8 offset; u8 offset;
char *name; const char *name;
const char **pointer; const char **pointer;
} acpi_rsdump_info; } acpi_rsdump_info;
...@@ -209,7 +209,7 @@ acpi_rs_get_prs_method_data(struct acpi_namespace_node *node, ...@@ -209,7 +209,7 @@ acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
acpi_status acpi_status
acpi_rs_get_method_data(acpi_handle handle, 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_status
acpi_rs_set_srs_method_data(struct acpi_namespace_node *node, acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
......
...@@ -184,7 +184,7 @@ struct acpi_evaluate_info { ...@@ -184,7 +184,7 @@ struct acpi_evaluate_info {
/* The first 3 elements are passed by the caller to acpi_ns_evaluate */ /* The first 3 elements are passed by the caller to acpi_ns_evaluate */
struct acpi_namespace_node *prefix_node; /* Input: starting node */ 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 */ union acpi_operand_object **parameters; /* Input: argument list */
struct acpi_namespace_node *node; /* Resolved node (prefix_node:relative_pathname) */ struct acpi_namespace_node *node; /* Resolved node (prefix_node:relative_pathname) */
......
...@@ -175,7 +175,14 @@ void acpi_ut_strlwr(char *src_string); ...@@ -175,7 +175,14 @@ void acpi_ut_strlwr(char *src_string);
int acpi_ut_stricmp(char *string1, char *string2); 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 * utglobal - Global data structures and procedures
...@@ -266,7 +273,8 @@ acpi_ut_trace(u32 line_number, ...@@ -266,7 +273,8 @@ acpi_ut_trace(u32 line_number,
void void
acpi_ut_trace_ptr(u32 line_number, acpi_ut_trace_ptr(u32 line_number,
const char *function_name, const char *function_name,
const char *module_name, u32 component_id, void *pointer); const char *module_name,
u32 component_id, const void *pointer);
void void
acpi_ut_trace_u32(u32 line_number, acpi_ut_trace_u32(u32 line_number,
...@@ -276,7 +284,8 @@ acpi_ut_trace_u32(u32 line_number, ...@@ -276,7 +284,8 @@ acpi_ut_trace_u32(u32 line_number,
void void
acpi_ut_trace_str(u32 line_number, acpi_ut_trace_str(u32 line_number,
const char *function_name, const char *function_name,
const char *module_name, u32 component_id, char *string); const char *module_name,
u32 component_id, const char *string);
void void
acpi_ut_exit(u32 line_number, acpi_ut_exit(u32 line_number,
...@@ -335,12 +344,12 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list); ...@@ -335,12 +344,12 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list);
*/ */
acpi_status acpi_status
acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
char *path, const char *path,
u32 expected_return_btypes, u32 expected_return_btypes,
union acpi_operand_object **return_desc); union acpi_operand_object **return_desc);
acpi_status 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, struct acpi_namespace_node *device_node,
u64 *value); u64 *value);
...@@ -526,7 +535,7 @@ void acpi_ut_set_integer_width(u8 revision); ...@@ -526,7 +535,7 @@ void acpi_ut_set_integer_width(u8 revision);
void void
acpi_ut_display_init_pathname(u8 type, acpi_ut_display_init_pathname(u8 type,
struct acpi_namespace_node *obj_handle, struct acpi_namespace_node *obj_handle,
char *path); const char *path);
#endif #endif
/* /*
...@@ -628,7 +637,7 @@ void acpi_ut_dump_allocation_info(void); ...@@ -628,7 +637,7 @@ void acpi_ut_dump_allocation_info(void);
void acpi_ut_dump_allocations(u32 component, const char *module); void acpi_ut_dump_allocations(u32 component, const char *module);
acpi_status 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); u16 object_size, struct acpi_memory_list **return_cache);
#endif /* ACPI_DBG_TRACK_ALLOCATIONS */ #endif /* ACPI_DBG_TRACK_ALLOCATIONS */
......
...@@ -277,7 +277,9 @@ acpi_db_convert_to_object(acpi_object_type type, ...@@ -277,7 +277,9 @@ acpi_db_convert_to_object(acpi_object_type type,
default: default:
object->type = ACPI_TYPE_INTEGER; 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; break;
} }
......
...@@ -57,12 +57,12 @@ static u32 acpi_db_get_line(char *input_buffer); ...@@ -57,12 +57,12 @@ static u32 acpi_db_get_line(char *input_buffer);
static u32 acpi_db_match_command(char *user_command); 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 void acpi_db_display_help(char *command);
static u8 static u8
acpi_db_match_command_help(char *command, acpi_db_match_command_help(const char *command,
const struct acpi_db_command_help *help); const struct acpi_db_command_help *help);
/* /*
...@@ -348,7 +348,7 @@ static const struct acpi_db_command_help acpi_gbl_db_command_help[] = { ...@@ -348,7 +348,7 @@ static const struct acpi_db_command_help acpi_gbl_db_command_help[] = {
******************************************************************************/ ******************************************************************************/
static u8 static u8
acpi_db_match_command_help(char *command, acpi_db_match_command_help(const char *command,
const struct acpi_db_command_help *help) const struct acpi_db_command_help *help)
{ {
char *invocation = help->invocation; char *invocation = help->invocation;
...@@ -402,7 +402,7 @@ acpi_db_match_command_help(char *command, ...@@ -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; const struct acpi_db_command_help *next;
u8 matched; u8 matched;
...@@ -656,8 +656,9 @@ static u32 acpi_db_match_command(char *user_command) ...@@ -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++) { for (i = CMD_FIRST_VALID; acpi_gbl_db_commands[i].name; i++) {
if (strstr(acpi_gbl_db_commands[i].name, user_command) == if (strstr
acpi_gbl_db_commands[i].name) { (ACPI_CAST_PTR(char, acpi_gbl_db_commands[i].name),
user_command) == acpi_gbl_db_commands[i].name) {
return (i); return (i);
} }
} }
......
...@@ -56,8 +56,6 @@ acpi_status acpi_db_second_pass_parse(union acpi_parse_object *root); ...@@ -56,8 +56,6 @@ acpi_status acpi_db_second_pass_parse(union acpi_parse_object *root);
void acpi_db_dump_buffer(u32 address); void acpi_db_dump_buffer(u32 address);
#endif #endif
static char *gbl_hex_to_ascii = "0123456789ABCDEF";
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_db_match_argument * FUNCTION: acpi_db_match_argument
...@@ -82,8 +80,9 @@ acpi_db_match_argument(char *user_argument, ...@@ -82,8 +80,9 @@ acpi_db_match_argument(char *user_argument,
} }
for (i = 0; arguments[i].name; i++) { for (i = 0; arguments[i].name; i++) {
if (strstr(arguments[i].name, user_argument) == if (strstr(ACPI_CAST_PTR(char, arguments[i].name),
arguments[i].name) { ACPI_CAST_PTR(char,
user_argument)) == arguments[i].name) {
return (i); return (i);
} }
} }
...@@ -339,7 +338,7 @@ void acpi_db_uint32_to_hex_string(u32 value, char *buffer) ...@@ -339,7 +338,7 @@ void acpi_db_uint32_to_hex_string(u32 value, char *buffer)
buffer[8] = '\0'; buffer[8] = '\0';
for (i = 7; i >= 0; i--) { 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; value = value >> 4;
} }
} }
......
...@@ -526,81 +526,59 @@ acpi_ev_attach_region(union acpi_operand_object *handler_obj, ...@@ -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 * PARAMETERS: region_obj - Region object
* function - Passed to _REG: On (1) or Off (0)
* *
* RETURN: Status * 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 *method_node;
struct acpi_namespace_node *node; struct acpi_namespace_node *node;
union acpi_operand_object *region_obj2;
acpi_status status; 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); region_obj2 = acpi_ns_get_secondary_object(region_obj);
if (!region_obj2) { 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; node = region_obj->region.node->parent;
/* Find any "_REG" method associated with this region definition */
status = status =
acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD, acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD,
&method_node); &method_node);
if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) {
/* /*
* The _REG method is optional and there can be only one per region * The _REG method is optional and there can be only one per
* definition. This will be executed when the handler is attached * region definition. This will be executed when the handler is
* or removed * attached or removed.
*/ */
region_obj2->extra.method_REG = method_node; region_obj2->extra.method_REG = method_node;
} }
if (region_obj2->extra.method_REG == NULL) {
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) {
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }
......
...@@ -518,7 +518,6 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj, ...@@ -518,7 +518,6 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }
acpi_ev_associate_reg_method(region_obj);
region_obj->common.flags |= AOPOBJ_OBJECT_INITIALIZED; region_obj->common.flags |= AOPOBJ_OBJECT_INITIALIZED;
node = region_obj->region.node->parent; node = region_obj->region.node->parent;
......
This diff is collapsed.
...@@ -118,7 +118,9 @@ acpi_ex_add_table(u32 table_index, ...@@ -118,7 +118,9 @@ acpi_ex_add_table(u32 table_index,
/* Execute any module-level code that was found in the table */ /* Execute any module-level code that was found in the table */
acpi_ex_exit_interpreter(); 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(); acpi_ex_enter_interpreter();
/* /*
......
...@@ -124,7 +124,9 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc, ...@@ -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 * of ACPI 3.0) is that the to_integer() operator allows both decimal
* and hexadecimal strings (hex prefixed with "0x"). * 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)) { if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
......
...@@ -55,9 +55,9 @@ ACPI_MODULE_NAME("exdump") ...@@ -55,9 +55,9 @@ ACPI_MODULE_NAME("exdump")
*/ */
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/* Local prototypes */ /* 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 static void
acpi_ex_dump_object(union acpi_operand_object *obj_desc, acpi_ex_dump_object(union acpi_operand_object *obj_desc,
...@@ -365,8 +365,7 @@ 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) struct acpi_exdump_info *info)
{ {
u8 *target; u8 *target;
char *name; const char *name;
const char *reference_name;
u8 count; u8 count;
union acpi_operand_object *start; union acpi_operand_object *start;
union acpi_operand_object *data = NULL; union acpi_operand_object *data = NULL;
...@@ -459,9 +458,9 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc, ...@@ -459,9 +458,9 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
case ACPI_EXD_REFERENCE: case ACPI_EXD_REFERENCE:
reference_name = acpi_ut_get_reference_name(obj_desc);
acpi_ex_out_string("Class Name", 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); acpi_ex_dump_reference_obj(obj_desc);
break; break;
...@@ -934,12 +933,12 @@ acpi_ex_dump_operands(union acpi_operand_object **operands, ...@@ -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); 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); acpi_os_printf("%20s : %p\n", title, value);
} }
......
...@@ -45,7 +45,6 @@ ...@@ -45,7 +45,6 @@
#include "accommon.h" #include "accommon.h"
#include "acinterp.h" #include "acinterp.h"
#include "amlcode.h" #include "amlcode.h"
#include "amlresrc.h"
#define _COMPONENT ACPI_EXECUTER #define _COMPONENT ACPI_EXECUTER
ACPI_MODULE_NAME("exmisc") ACPI_MODULE_NAME("exmisc")
...@@ -138,295 +137,6 @@ acpi_ex_get_object_reference(union acpi_operand_object *obj_desc, ...@@ -138,295 +137,6 @@ acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
return_ACPI_STATUS(AE_OK); 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 * FUNCTION: acpi_ex_do_math_op
......
...@@ -301,8 +301,8 @@ static u32 acpi_ex_digits_needed(u64 value, u32 base) ...@@ -301,8 +301,8 @@ static u32 acpi_ex_digits_needed(u64 value, u32 base)
* *
* FUNCTION: acpi_ex_eisa_id_to_string * FUNCTION: acpi_ex_eisa_id_to_string
* *
* PARAMETERS: compressed_id - EISAID to be converted * PARAMETERS: out_string - Where to put the converted string (8 bytes)
* out_string - Where to put the converted string (8 bytes) * compressed_id - EISAID to be converted
* *
* RETURN: None * RETURN: None
* *
...@@ -354,7 +354,7 @@ void acpi_ex_eisa_id_to_string(char *out_string, u64 compressed_id) ...@@ -354,7 +354,7 @@ void acpi_ex_eisa_id_to_string(char *out_string, u64 compressed_id)
* possible 64-bit integer. * possible 64-bit integer.
* value - Value to be converted * value - Value to be converted
* *
* RETURN: None, string * RETURN: Converted string in out_string
* *
* DESCRIPTION: Convert a 64-bit integer to decimal string representation. * DESCRIPTION: Convert a 64-bit integer to decimal string representation.
* Assumes string buffer is large enough to hold the string. The * 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) ...@@ -384,9 +384,9 @@ void acpi_ex_integer_to_string(char *out_string, u64 value)
* FUNCTION: acpi_ex_pci_cls_to_string * FUNCTION: acpi_ex_pci_cls_to_string
* *
* PARAMETERS: out_string - Where to put the converted string (7 bytes) * 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. * DESCRIPTION: Convert 3-bytes PCI class code to string representation.
* Return buffer must be large enough to hold the string. The * 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]) ...@@ -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 * 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. * DESCRIPTION: Validate an operation region space_ID.
* *
......
...@@ -83,6 +83,8 @@ acpi_status ...@@ -83,6 +83,8 @@ acpi_status
acpi_hw_validate_register(struct acpi_generic_address *reg, acpi_hw_validate_register(struct acpi_generic_address *reg,
u8 max_bit_width, u64 *address) u8 max_bit_width, u64 *address)
{ {
u8 bit_width;
u8 access_width;
/* Must have a valid pointer to a GAS structure */ /* Must have a valid pointer to a GAS structure */
...@@ -109,23 +111,26 @@ acpi_hw_validate_register(struct acpi_generic_address *reg, ...@@ -109,23 +111,26 @@ acpi_hw_validate_register(struct acpi_generic_address *reg,
return (AE_SUPPORT); return (AE_SUPPORT);
} }
/* Validate the bit_width */ /* Validate the access_width */
if ((reg->bit_width != 8) && if (reg->access_width > 4) {
(reg->bit_width != 16) &&
(reg->bit_width != 32) && (reg->bit_width != max_bit_width)) {
ACPI_ERROR((AE_INFO, ACPI_ERROR((AE_INFO,
"Unsupported register bit width: 0x%X", "Unsupported register access width: 0x%X",
reg->bit_width)); reg->access_width));
return (AE_SUPPORT); 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, ACPI_WARNING((AE_INFO,
"Unsupported register bit offset: 0x%X", "Requested bit width 0x%X is smaller than register bit width 0x%X",
reg->bit_offset)); max_bit_width, bit_width));
return (AE_SUPPORT);
} }
return (AE_OK); return (AE_OK);
......
...@@ -504,9 +504,7 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 *sleep_type_a, u8 *sleep_type_b) ...@@ -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 * Evaluate the \_Sx namespace object containing the register values
* for this state * for this state
*/ */
info->relative_pathname = ACPI_CAST_PTR(char, info->relative_pathname = acpi_gbl_sleep_state_names[sleep_state];
acpi_gbl_sleep_state_names
[sleep_state]);
status = acpi_ns_evaluate(info); status = acpi_ns_evaluate(info);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
......
...@@ -107,9 +107,10 @@ acpi_status acpi_ns_root_initialize(void) ...@@ -107,9 +107,10 @@ acpi_status acpi_ns_root_initialize(void)
continue; continue;
} }
status = acpi_ns_lookup(NULL, init_val->name, init_val->type, status =
ACPI_IMODE_LOAD_PASS2, acpi_ns_lookup(NULL, (char *)init_val->name, init_val->type,
ACPI_NS_NO_UPSEARCH, NULL, &new_node); ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH,
NULL, &new_node);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, ACPI_EXCEPTION((AE_INFO, status,
"Could not create predefined name %s", "Could not create predefined name %s",
......
...@@ -79,7 +79,8 @@ acpi_ns_convert_to_integer(union acpi_operand_object *original_object, ...@@ -79,7 +79,8 @@ acpi_ns_convert_to_integer(union acpi_operand_object *original_object,
/* String-to-Integer conversion */ /* String-to-Integer conversion */
status = acpi_ut_strtoul64(original_object->string.pointer, 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)) { if (ACPI_FAILURE(status)) {
return (status); return (status);
} }
......
...@@ -81,7 +81,7 @@ acpi_ns_get_max_depth(acpi_handle obj_handle, ...@@ -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; u32 i;
...@@ -114,6 +114,9 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname) ...@@ -114,6 +114,9 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname)
acpi_os_printf("]\n"); acpi_os_printf("]\n");
} }
#ifdef ACPI_OBSOLETE_FUNCTIONS
/* Not used at this time, perhaps later */
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_ns_dump_pathname * FUNCTION: acpi_ns_dump_pathname
...@@ -131,7 +134,8 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname) ...@@ -131,7 +134,8 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname)
******************************************************************************/ ******************************************************************************/
void 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); ACPI_FUNCTION_TRACE(ns_dump_pathname);
...@@ -148,6 +152,7 @@ acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component) ...@@ -148,6 +152,7 @@ acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component)
acpi_os_printf("\n"); acpi_os_printf("\n");
return_VOID; return_VOID;
} }
#endif
/******************************************************************************* /*******************************************************************************
* *
......
...@@ -140,6 +140,7 @@ acpi_status acpi_ns_initialize_devices(u32 flags) ...@@ -140,6 +140,7 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
{ {
acpi_status status = AE_OK; acpi_status status = AE_OK;
struct acpi_device_walk_info info; struct acpi_device_walk_info info;
acpi_handle handle;
ACPI_FUNCTION_TRACE(ns_initialize_devices); ACPI_FUNCTION_TRACE(ns_initialize_devices);
...@@ -190,6 +191,27 @@ acpi_status acpi_ns_initialize_devices(u32 flags) ...@@ -190,6 +191,27 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) {
info.num_INI++; 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) ...@@ -198,6 +220,12 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
* Note: Any objects accessed by the _REG methods will be automatically * Note: Any objects accessed by the _REG methods will be automatically
* initialized, even if they contain executable AML (see the call to * initialized, even if they contain executable AML (see the call to
* acpi_ns_initialize_objects below). * 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)) { if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
...@@ -592,33 +620,37 @@ acpi_ns_init_one_device(acpi_handle obj_handle, ...@@ -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 * 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. * under this particular device, it may be lower in the branch.
*/ */
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname if (!ACPI_COMPARE_NAME(device_node->name.ascii, "_SB_") ||
(ACPI_TYPE_METHOD, device_node, METHOD_NAME__INI)); device_node->parent != acpi_gbl_root_node) {
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
memset(info, 0, sizeof(struct acpi_evaluate_info)); (ACPI_TYPE_METHOD, device_node,
info->prefix_node = device_node; METHOD_NAME__INI));
info->relative_pathname = METHOD_NAME__INI;
info->parameters = NULL; memset(info, 0, sizeof(struct acpi_evaluate_info));
info->flags = ACPI_IGNORE_RETURN_VALUE; info->prefix_node = device_node;
info->relative_pathname = METHOD_NAME__INI;
status = acpi_ns_evaluate(info); info->parameters = NULL;
info->flags = ACPI_IGNORE_RETURN_VALUE;
if (ACPI_SUCCESS(status)) {
walk_info->num_INI++; status = acpi_ns_evaluate(info);
} if (ACPI_SUCCESS(status)) {
walk_info->num_INI++;
}
#ifdef ACPI_DEBUG_OUTPUT #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 = char *scope_name =
acpi_ns_get_normalized_pathname(device_node, TRUE); acpi_ns_get_normalized_pathname(device_node, TRUE);
ACPI_EXCEPTION((AE_INFO, status, "during %s._INI execution", ACPI_EXCEPTION((AE_INFO, status,
scope_name)); "during %s._INI execution",
ACPI_FREE(scope_name); scope_name));
} ACPI_FREE(scope_name);
}
#endif #endif
}
/* Ignore errors from above */ /* Ignore errors from above */
......
...@@ -123,8 +123,8 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node) ...@@ -123,8 +123,8 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
acpi_ns_delete_namespace_by_owner(acpi_gbl_root_table_list. acpi_ns_delete_namespace_by_owner(acpi_gbl_root_table_list.
tables[table_index].owner_id); tables[table_index].owner_id);
acpi_tb_release_owner_id(table_index);
acpi_tb_release_owner_id(table_index);
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
......
...@@ -179,6 +179,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info, ...@@ -179,6 +179,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
return (status); return (status);
} }
elements++; elements++;
} }
break; break;
...@@ -225,6 +226,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info, ...@@ -225,6 +226,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
return (status); return (status);
} }
} }
elements++; elements++;
} }
break; break;
...@@ -569,11 +571,13 @@ acpi_ns_check_package_list(struct acpi_evaluate_info *info, ...@@ -569,11 +571,13 @@ acpi_ns_check_package_list(struct acpi_evaluate_info *info,
if (sub_package->package.count < expected_count) { if (sub_package->package.count < expected_count) {
goto package_too_small; goto package_too_small;
} }
if (sub_package->package.count < if (sub_package->package.count <
package->ret_info.count1) { package->ret_info.count1) {
expected_count = package->ret_info.count1; expected_count = package->ret_info.count1;
goto package_too_small; goto package_too_small;
} }
if (expected_count == 0) { if (expected_count == 0) {
/* /*
* Either the num_entries element was originally zero or it was * 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, ...@@ -661,6 +665,7 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info,
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
return (status); return (status);
} }
this_element++; this_element++;
} }
...@@ -671,6 +676,7 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info, ...@@ -671,6 +676,7 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info,
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
return (status); return (status);
} }
this_element++; this_element++;
} }
......
...@@ -158,7 +158,7 @@ const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode) ...@@ -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) #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
......
...@@ -52,17 +52,17 @@ ACPI_MODULE_NAME("rsdump") ...@@ -52,17 +52,17 @@ ACPI_MODULE_NAME("rsdump")
* All functions in this module are used by the AML Debugger only * All functions in this module are used by the AML Debugger only
*/ */
/* Local prototypes */ /* 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); 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) ...@@ -208,7 +208,7 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
{ {
u8 *target = NULL; u8 *target = NULL;
u8 *previous_target; u8 *previous_target;
char *name; const char *name;
u8 count; u8 count;
/* First table entry must contain the table length (# of table entries) */ /* 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) ...@@ -248,10 +248,8 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
case ACPI_RSD_UINT8: case ACPI_RSD_UINT8:
if (table->pointer) { if (table->pointer) {
acpi_rs_out_string(name, ACPI_CAST_PTR(char, acpi_rs_out_string(name,
table-> table->pointer[*target]);
pointer
[*target]));
} else { } else {
acpi_rs_out_integer8(name, ACPI_GET8(target)); acpi_rs_out_integer8(name, ACPI_GET8(target));
} }
...@@ -276,26 +274,20 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) ...@@ -276,26 +274,20 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
case ACPI_RSD_1BITFLAG: case ACPI_RSD_1BITFLAG:
acpi_rs_out_string(name, ACPI_CAST_PTR(char, acpi_rs_out_string(name,
table-> table->pointer[*target & 0x01]);
pointer[*target &
0x01]));
break; break;
case ACPI_RSD_2BITFLAG: case ACPI_RSD_2BITFLAG:
acpi_rs_out_string(name, ACPI_CAST_PTR(char, acpi_rs_out_string(name,
table-> table->pointer[*target & 0x03]);
pointer[*target &
0x03]));
break; break;
case ACPI_RSD_3BITFLAG: case ACPI_RSD_3BITFLAG:
acpi_rs_out_string(name, ACPI_CAST_PTR(char, acpi_rs_out_string(name,
table-> table->pointer[*target & 0x07]);
pointer[*target &
0x07]));
break; break;
case ACPI_RSD_SHORTLIST: case ACPI_RSD_SHORTLIST:
...@@ -481,7 +473,7 @@ static void acpi_rs_dump_address_common(union acpi_resource_data *resource) ...@@ -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); acpi_os_printf("%27s : %s", title, value);
...@@ -491,30 +483,30 @@ static void acpi_rs_out_string(char *title, char *value) ...@@ -491,30 +483,30 @@ static void acpi_rs_out_string(char *title, char *value)
acpi_os_printf("\n"); 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); 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); 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); 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)); 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); acpi_os_printf("%27s : ", title);
......
...@@ -671,7 +671,7 @@ acpi_rs_get_aei_method_data(struct acpi_namespace_node *node, ...@@ -671,7 +671,7 @@ acpi_rs_get_aei_method_data(struct acpi_namespace_node *node,
acpi_status acpi_status
acpi_rs_get_method_data(acpi_handle handle, 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; union acpi_operand_object *obj_desc;
acpi_status status; acpi_status status;
......
...@@ -53,7 +53,7 @@ static void ...@@ -53,7 +53,7 @@ static void
acpi_tb_init_generic_address(struct acpi_generic_address *generic_address, acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
u8 space_id, u8 space_id,
u8 byte_width, 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); static void acpi_tb_convert_fadt(void);
...@@ -65,7 +65,7 @@ acpi_tb_select_address(char *register_name, u32 address32, u64 address64); ...@@ -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 */ /* Table for conversion of FADT to common internal format and FADT validation */
typedef struct acpi_fadt_info { typedef struct acpi_fadt_info {
char *name; const char *name;
u16 address64; u16 address64;
u16 address32; u16 address32;
u16 length; u16 length;
...@@ -192,7 +192,7 @@ static void ...@@ -192,7 +192,7 @@ static void
acpi_tb_init_generic_address(struct acpi_generic_address *generic_address, acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
u8 space_id, u8 space_id,
u8 byte_width, u8 byte_width,
u64 address, char *register_name, u8 flags) u64 address, const char *register_name, u8 flags)
{ {
u8 bit_width; u8 bit_width;
...@@ -385,14 +385,15 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length) ...@@ -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 * 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 * (typically the current ACPI specification version). If so, truncate
* a warning. * the table, and issue a warning.
*/ */
if (length > sizeof(struct acpi_table_fadt)) { if (length > sizeof(struct acpi_table_fadt)) {
ACPI_BIOS_WARNING((AE_INFO, 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", "truncating length %u to %u",
table->revision, length, table->revision, ACPI_FADT_CONFORMANCE,
length,
(u32)sizeof(struct acpi_table_fadt))); (u32)sizeof(struct acpi_table_fadt)));
} }
...@@ -467,7 +468,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length) ...@@ -467,7 +468,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
static void acpi_tb_convert_fadt(void) static void acpi_tb_convert_fadt(void)
{ {
char *name; const char *name;
struct acpi_generic_address *address64; struct acpi_generic_address *address64;
u32 address32; u32 address32;
u8 length; u8 length;
...@@ -646,9 +647,12 @@ static void acpi_tb_convert_fadt(void) ...@@ -646,9 +647,12 @@ static void acpi_tb_convert_fadt(void)
if ((address64->address && !length) || if ((address64->address && !length) ||
(!address64->address && length)) { (!address64->address && length)) {
ACPI_BIOS_WARNING((AE_INFO, ACPI_BIOS_WARNING((AE_INFO,
"Optional FADT field %s has zero address or length: " "Optional FADT field %s has valid %s but zero %s: "
"0x%8.8X%8.8X/0x%X", "0x%8.8X%8.8X/0x%X", name,
name, (length ? "Length" :
"Address"),
(length ? "Address" :
"Length"),
ACPI_FORMAT_UINT64 ACPI_FORMAT_UINT64
(address64->address), (address64->address),
length)); length));
......
...@@ -82,7 +82,7 @@ acpi_status __init acpi_load_tables(void) ...@@ -82,7 +82,7 @@ acpi_status __init acpi_load_tables(void)
* their customized default region handlers. * their customized default region handlers.
*/ */
status = acpi_ev_install_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, ACPI_EXCEPTION((AE_INFO, status,
"During Region initialization")); "During Region initialization"));
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
......
...@@ -51,13 +51,9 @@ ...@@ -51,13 +51,9 @@
ACPI_MODULE_NAME("utdebug") ACPI_MODULE_NAME("utdebug")
#ifdef ACPI_DEBUG_OUTPUT #ifdef ACPI_DEBUG_OUTPUT
static acpi_thread_id acpi_gbl_prev_thread_id = (acpi_thread_id) 0xFFFFFFFF; static acpi_thread_id acpi_gbl_previous_thread_id = (acpi_thread_id) 0xFFFFFFFF;
static char *acpi_gbl_fn_entry_str = "----Entry"; static const char *acpi_gbl_function_entry_prefix = "----Entry";
static char *acpi_gbl_fn_exit_str = "----Exit-"; static const char *acpi_gbl_function_exit_prefix = "----Exit-";
/* Local prototypes */
static const char *acpi_ut_trim_function_name(const char *function_name);
/******************************************************************************* /*******************************************************************************
* *
...@@ -178,14 +174,14 @@ acpi_debug_print(u32 requested_debug_level, ...@@ -178,14 +174,14 @@ acpi_debug_print(u32 requested_debug_level,
* Thread tracking and context switch notification * Thread tracking and context switch notification
*/ */
thread_id = acpi_os_get_thread_id(); 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) { if (ACPI_LV_THREADS & acpi_dbg_level) {
acpi_os_printf acpi_os_printf
("\n**** Context Switch from TID %u to TID %u ****\n\n", ("\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; acpi_gbl_nesting_level = 0;
} }
...@@ -287,7 +283,8 @@ acpi_ut_trace(u32 line_number, ...@@ -287,7 +283,8 @@ acpi_ut_trace(u32 line_number,
if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, module_name, 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) ...@@ -312,7 +309,8 @@ ACPI_EXPORT_SYMBOL(acpi_ut_trace)
void void
acpi_ut_trace_ptr(u32 line_number, acpi_ut_trace_ptr(u32 line_number,
const char *function_name, 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++; acpi_gbl_nesting_level++;
...@@ -323,8 +321,8 @@ acpi_ut_trace_ptr(u32 line_number, ...@@ -323,8 +321,8 @@ acpi_ut_trace_ptr(u32 line_number,
if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, module_name, line_number, function_name, module_name,
component_id, "%s %p\n", acpi_gbl_fn_entry_str, component_id, "%s %p\n",
pointer); acpi_gbl_function_entry_prefix, pointer);
} }
} }
...@@ -348,7 +346,7 @@ acpi_ut_trace_ptr(u32 line_number, ...@@ -348,7 +346,7 @@ acpi_ut_trace_ptr(u32 line_number,
void void
acpi_ut_trace_str(u32 line_number, acpi_ut_trace_str(u32 line_number,
const char *function_name, 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++; acpi_gbl_nesting_level++;
...@@ -359,8 +357,8 @@ acpi_ut_trace_str(u32 line_number, ...@@ -359,8 +357,8 @@ acpi_ut_trace_str(u32 line_number,
if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, module_name, line_number, function_name, module_name,
component_id, "%s %s\n", acpi_gbl_fn_entry_str, component_id, "%s %s\n",
string); acpi_gbl_function_entry_prefix, string);
} }
} }
...@@ -396,7 +394,7 @@ acpi_ut_trace_u32(u32 line_number, ...@@ -396,7 +394,7 @@ acpi_ut_trace_u32(u32 line_number,
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, module_name, line_number, function_name, module_name,
component_id, "%s %08X\n", 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, ...@@ -427,7 +425,8 @@ acpi_ut_exit(u32 line_number,
if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, module_name, 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) { if (acpi_gbl_nesting_level) {
...@@ -467,14 +466,14 @@ acpi_ut_status_exit(u32 line_number, ...@@ -467,14 +466,14 @@ acpi_ut_status_exit(u32 line_number,
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, line_number, function_name,
module_name, component_id, "%s %s\n", module_name, component_id, "%s %s\n",
acpi_gbl_fn_exit_str, acpi_gbl_function_exit_prefix,
acpi_format_exception(status)); acpi_format_exception(status));
} else { } else {
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, line_number, function_name,
module_name, component_id, module_name, component_id,
"%s ****Exception****: %s\n", "%s ****Exception****: %s\n",
acpi_gbl_fn_exit_str, acpi_gbl_function_exit_prefix,
acpi_format_exception(status)); acpi_format_exception(status));
} }
} }
...@@ -514,7 +513,7 @@ acpi_ut_value_exit(u32 line_number, ...@@ -514,7 +513,7 @@ acpi_ut_value_exit(u32 line_number,
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, module_name, line_number, function_name, module_name,
component_id, "%s %8.8X%8.8X\n", component_id, "%s %8.8X%8.8X\n",
acpi_gbl_fn_exit_str, acpi_gbl_function_exit_prefix,
ACPI_FORMAT_UINT64(value)); ACPI_FORMAT_UINT64(value));
} }
...@@ -552,8 +551,8 @@ acpi_ut_ptr_exit(u32 line_number, ...@@ -552,8 +551,8 @@ acpi_ut_ptr_exit(u32 line_number,
if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) { if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_FUNCTIONS, component_id)) {
acpi_debug_print(ACPI_LV_FUNCTIONS, acpi_debug_print(ACPI_LV_FUNCTIONS,
line_number, function_name, module_name, line_number, function_name, module_name,
component_id, "%s %p\n", acpi_gbl_fn_exit_str, component_id, "%s %p\n",
ptr); acpi_gbl_function_exit_prefix, ptr);
} }
if (acpi_gbl_nesting_level) { if (acpi_gbl_nesting_level) {
......
...@@ -446,7 +446,7 @@ const char *acpi_ut_get_mutex_name(u32 mutex_id) ...@@ -446,7 +446,7 @@ const char *acpi_ut_get_mutex_name(u32 mutex_id)
/* Names for Notify() values, used for debug output */ /* 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", /* 00 */ "Bus Check",
/* 01 */ "Device Check", /* 01 */ "Device Check",
/* 02 */ "Device Wake", /* 02 */ "Device Wake",
...@@ -459,49 +459,53 @@ static const char *acpi_gbl_generic_notify[ACPI_NOTIFY_MAX + 1] = { ...@@ -459,49 +459,53 @@ static const char *acpi_gbl_generic_notify[ACPI_NOTIFY_MAX + 1] = {
/* 09 */ "Device PLD Check", /* 09 */ "Device PLD Check",
/* 0A */ "Reserved", /* 0A */ "Reserved",
/* 0B */ "System Locality Update", /* 0B */ "System Locality Update",
/* 0C */ "Shutdown Request", /* 0C */ "Shutdown Request",
/* Reserved in ACPI 6.0 */
/* 0D */ "System Resource Affinity Update" /* 0D */ "System Resource Affinity Update"
}; };
static const char *acpi_gbl_device_notify[4] = { static const char *acpi_gbl_device_notify[5] = {
/* 80 */ "Status Change", /* 80 */ "Status Change",
/* 81 */ "Information Change", /* 81 */ "Information Change",
/* 82 */ "Device-Specific 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", /* 80 */ "Performance Capability Change",
/* 81 */ "C-State Change", /* 81 */ "C-State Change",
/* 82 */ "Throttling Capability 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", /* 80 */ "Thermal Status Change",
/* 81 */ "Thermal Trip Point Change", /* 81 */ "Thermal Trip Point Change",
/* 82 */ "Thermal Device List 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) 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]); return (acpi_gbl_generic_notify[notify_value]);
} }
/* 0D - 7F are reserved */ /* 0E - 7F are reserved */
if (notify_value <= ACPI_MAX_SYS_NOTIFY) { if (notify_value <= ACPI_MAX_SYS_NOTIFY) {
return ("Reserved"); 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) { switch (type) {
case ACPI_TYPE_ANY: case ACPI_TYPE_ANY:
case ACPI_TYPE_DEVICE: case ACPI_TYPE_DEVICE:
......
...@@ -69,7 +69,7 @@ ACPI_MODULE_NAME("uteval") ...@@ -69,7 +69,7 @@ ACPI_MODULE_NAME("uteval")
acpi_status acpi_status
acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
char *path, const char *path,
u32 expected_return_btypes, u32 expected_return_btypes,
union acpi_operand_object **return_desc) union acpi_operand_object **return_desc)
{ {
...@@ -204,7 +204,7 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, ...@@ -204,7 +204,7 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
******************************************************************************/ ******************************************************************************/
acpi_status 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, struct acpi_namespace_node *device_node,
u64 *value) u64 *value)
{ {
......
...@@ -80,6 +80,11 @@ const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS] = { ...@@ -80,6 +80,11 @@ const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS] = {
"_S4D" "_S4D"
}; };
/* Hex-to-ascii */
const char acpi_gbl_lower_hex_digits[] = "0123456789abcdef";
const char acpi_gbl_upper_hex_digits[] = "0123456789ABCDEF";
/******************************************************************************* /*******************************************************************************
* *
* Namespace globals * Namespace globals
...@@ -221,6 +226,49 @@ struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] = ...@@ -221,6 +226,49 @@ struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] =
}; };
#endif /* !ACPI_REDUCED_HARDWARE */ #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 */ /* Public globals */
ACPI_EXPORT_SYMBOL(acpi_gbl_FADT) ACPI_EXPORT_SYMBOL(acpi_gbl_FADT)
......
...@@ -361,7 +361,7 @@ acpi_ut_walk_package_tree(union acpi_operand_object *source_object, ...@@ -361,7 +361,7 @@ acpi_ut_walk_package_tree(union acpi_operand_object *source_object,
void void
acpi_ut_display_init_pathname(u8 type, acpi_ut_display_init_pathname(u8 type,
struct acpi_namespace_node *obj_handle, struct acpi_namespace_node *obj_handle,
char *path) const char *path)
{ {
acpi_status status; acpi_status status;
struct acpi_buffer buffer; struct acpi_buffer buffer;
......
...@@ -205,37 +205,41 @@ acpi_ut_safe_strncat(char *dest, ...@@ -205,37 +205,41 @@ acpi_ut_safe_strncat(char *dest,
* *
* FUNCTION: acpi_ut_strtoul64 * FUNCTION: acpi_ut_strtoul64
* *
* PARAMETERS: string - Null terminated string * PARAMETERS: string - Null terminated string
* base - Radix of the string: 16 or ACPI_ANY_BASE; * base - Radix of the string: 16 or 10 or
* ACPI_ANY_BASE means 'in behalf of to_integer' * ACPI_ANY_BASE
* ret_integer - Where the converted integer is returned * 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 * RETURN: Status and Converted value
* *
* DESCRIPTION: Convert a string into an unsigned value. Performs either a * DESCRIPTION: Convert a string into an unsigned value. Performs either a
* 32-bit or 64-bit conversion, depending on the current mode * 32-bit or 64-bit conversion, depending on the input integer
* of the interpreter. * 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 * 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. * 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; u32 this_digit = 0;
u64 return_value = 0; u64 return_value = 0;
u64 quotient; u64 quotient;
u64 dividend; u64 dividend;
u32 to_integer_op = (base == ACPI_ANY_BASE);
u32 mode32 = (acpi_gbl_integer_byte_width == 4);
u8 valid_digits = 0; u8 valid_digits = 0;
u8 sign_of0x = 0; u8 sign_of0x = 0;
u8 term = 0; u8 term = 0;
...@@ -244,6 +248,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer) ...@@ -244,6 +248,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
switch (base) { switch (base) {
case ACPI_ANY_BASE: case ACPI_ANY_BASE:
case 10:
case 16: case 16:
break; break;
...@@ -265,9 +270,9 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer) ...@@ -265,9 +270,9 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
string++; 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. * We need to determine if it is decimal or hexadecimal.
*/ */
if ((*string == '0') && (tolower((int)*(string + 1)) == 'x')) { if ((*string == '0') && (tolower((int)*(string + 1)) == 'x')) {
...@@ -284,7 +289,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer) ...@@ -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. */ /* Any string left? Check that '0x' is not followed by white space. */
if (!(*string) || isspace((int)*string) || *string == '\t') { if (!(*string) || isspace((int)*string) || *string == '\t') {
if (to_integer_op) { if (base == ACPI_ANY_BASE) {
goto error_exit; goto error_exit;
} else { } else {
goto all_done; goto all_done;
...@@ -292,10 +297,11 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer) ...@@ -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 * Perform a 32-bit or 64-bit conversion, depending upon the input
* execution mode of the interpreter * 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 */ /* 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) ...@@ -323,7 +329,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
} }
if (term) { if (term) {
if (to_integer_op) { if (base == ACPI_ANY_BASE) {
goto error_exit; goto error_exit;
} else { } else {
break; break;
...@@ -338,12 +344,13 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer) ...@@ -338,12 +344,13 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
valid_digits++; valid_digits++;
if (sign_of0x if (sign_of0x && ((valid_digits > 16) ||
&& ((valid_digits > 16) ((valid_digits > 8)
|| ((valid_digits > 8) && mode32))) { && (max_integer_byte_width <=
ACPI_MAX32_BYTE_WIDTH)))) {
/* /*
* This is to_integer operation case. * This is to_integer operation case.
* No any restrictions for string-to-integer conversion, * No restrictions for string-to-integer conversion,
* see ACPI spec. * see ACPI spec.
*/ */
goto error_exit; goto error_exit;
...@@ -355,7 +362,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer) ...@@ -355,7 +362,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
&quotient, NULL); &quotient, NULL);
if (return_value > quotient) { if (return_value > quotient) {
if (to_integer_op) { if (base == ACPI_ANY_BASE) {
goto error_exit; goto error_exit;
} else { } else {
break; break;
...@@ -378,7 +385,8 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer) ...@@ -378,7 +385,8 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
error_exit: error_exit:
/* Base was set/validated above */
/* Base was set/validated above (10 or 16) */
if (base == 10) { if (base == 10) {
return_ACPI_STATUS(AE_BAD_DECIMAL_CONSTANT); return_ACPI_STATUS(AE_BAD_DECIMAL_CONSTANT);
...@@ -388,8 +396,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer) ...@@ -388,8 +396,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
} }
#ifdef _OBSOLETE_FUNCTIONS #ifdef _OBSOLETE_FUNCTIONS
/* TBD: use version in ACPICA main code base? */ /* Removed: 01/2016 */
/* DONE: 01/2016 */
/******************************************************************************* /*******************************************************************************
* *
......
...@@ -67,11 +67,6 @@ static char *acpi_ut_format_number(char *string, ...@@ -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); 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 * FUNCTION: acpi_ut_bound_string_length
......
...@@ -90,7 +90,7 @@ acpi_ut_remove_allocation(struct acpi_debug_mem_block *address, ...@@ -90,7 +90,7 @@ acpi_ut_remove_allocation(struct acpi_debug_mem_block *address,
******************************************************************************/ ******************************************************************************/
acpi_status 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) u16 object_size, struct acpi_memory_list **return_cache)
{ {
struct acpi_memory_list *cache; struct acpi_memory_list *cache;
......
...@@ -861,7 +861,7 @@ static ssize_t vendor_show(struct device *dev, ...@@ -861,7 +861,7 @@ static ssize_t vendor_show(struct device *dev,
{ {
struct acpi_nfit_control_region *dcr = to_nfit_dcr(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); static DEVICE_ATTR_RO(vendor);
...@@ -870,7 +870,7 @@ static ssize_t rev_id_show(struct device *dev, ...@@ -870,7 +870,7 @@ static ssize_t rev_id_show(struct device *dev,
{ {
struct acpi_nfit_control_region *dcr = to_nfit_dcr(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); static DEVICE_ATTR_RO(rev_id);
...@@ -879,10 +879,38 @@ static ssize_t device_show(struct device *dev, ...@@ -879,10 +879,38 @@ static ssize_t device_show(struct device *dev,
{ {
struct acpi_nfit_control_region *dcr = to_nfit_dcr(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 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) static int num_nvdimm_formats(struct nvdimm *nvdimm)
{ {
struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm);
...@@ -900,7 +928,7 @@ static ssize_t format_show(struct device *dev, ...@@ -900,7 +928,7 @@ static ssize_t format_show(struct device *dev,
{ {
struct acpi_nfit_control_region *dcr = to_nfit_dcr(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); static DEVICE_ATTR_RO(format);
...@@ -933,7 +961,8 @@ static ssize_t format1_show(struct device *dev, ...@@ -933,7 +961,8 @@ static ssize_t format1_show(struct device *dev,
continue; continue;
if (nfit_dcr->dcr->code == dcr->code) if (nfit_dcr->dcr->code == dcr->code)
continue; continue;
rc = sprintf(buf, "%#x\n", nfit_dcr->dcr->code); rc = sprintf(buf, "%#x\n",
be16_to_cpu(nfit_dcr->dcr->code));
break; break;
} }
if (rc != ENXIO) if (rc != ENXIO)
...@@ -958,7 +987,7 @@ static ssize_t serial_show(struct device *dev, ...@@ -958,7 +987,7 @@ static ssize_t serial_show(struct device *dev,
{ {
struct acpi_nfit_control_region *dcr = to_nfit_dcr(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); static DEVICE_ATTR_RO(serial);
...@@ -1000,17 +1029,39 @@ static ssize_t flags_show(struct device *dev, ...@@ -1000,17 +1029,39 @@ static ssize_t flags_show(struct device *dev,
} }
static DEVICE_ATTR_RO(flags); 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[] = { static struct attribute *acpi_nfit_dimm_attributes[] = {
&dev_attr_handle.attr, &dev_attr_handle.attr,
&dev_attr_phys_id.attr, &dev_attr_phys_id.attr,
&dev_attr_vendor.attr, &dev_attr_vendor.attr,
&dev_attr_device.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_format.attr,
&dev_attr_formats.attr, &dev_attr_formats.attr,
&dev_attr_format1.attr, &dev_attr_format1.attr,
&dev_attr_serial.attr, &dev_attr_serial.attr,
&dev_attr_rev_id.attr,
&dev_attr_flags.attr, &dev_attr_flags.attr,
&dev_attr_id.attr,
&dev_attr_family.attr, &dev_attr_family.attr,
&dev_attr_dsm_mask.attr, &dev_attr_dsm_mask.attr,
NULL, NULL,
......
...@@ -52,11 +52,13 @@ enum nfit_uuids { ...@@ -52,11 +52,13 @@ enum nfit_uuids {
NFIT_UUID_MAX, NFIT_UUID_MAX,
}; };
enum nfit_fic { /*
NFIT_FIC_BYTE = 0x101, /* byte-addressable energy backed */ * Region format interface codes are stored as an array of bytes in the
NFIT_FIC_BLK = 0x201, /* block-addressable non-energy backed */ * NFIT DIMM Control Region structure
NFIT_FIC_BYTEN = 0x301, /* byte-addressable non-energy backed */ */
}; #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 { enum {
NFIT_BLK_READ_FLUSH = 1, NFIT_BLK_READ_FLUSH = 1,
......
...@@ -582,7 +582,7 @@ static char acpi_os_name[ACPI_MAX_OVERRIDE_LEN]; ...@@ -582,7 +582,7 @@ static char acpi_os_name[ACPI_MAX_OVERRIDE_LEN];
acpi_status acpi_status
acpi_os_predefined_override(const struct acpi_predefined_names *init_val, acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
char **new_val) acpi_string *new_val)
{ {
if (!init_val || !new_val) if (!init_val || !new_val)
return AE_BAD_PARAMETER; return AE_BAD_PARAMETER;
......
...@@ -96,7 +96,7 @@ acpi_physical_address acpi_os_get_root_pointer(void); ...@@ -96,7 +96,7 @@ acpi_physical_address acpi_os_get_root_pointer(void);
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override
acpi_status acpi_status
acpi_os_predefined_override(const struct acpi_predefined_names *init_val, acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
char **new_val); acpi_string *new_val);
#endif #endif
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_table_override #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_table_override
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */ /* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20160108 #define ACPI_CA_VERSION 0x20160318
#include <acpi/acconfig.h> #include <acpi/acconfig.h>
#include <acpi/actypes.h> #include <acpi/actypes.h>
......
...@@ -223,7 +223,7 @@ struct acpi_table_facs { ...@@ -223,7 +223,7 @@ struct acpi_table_facs {
/******************************************************************************* /*******************************************************************************
* *
* FADT - Fixed ACPI Description Table (Signature "FACP") * FADT - Fixed ACPI Description Table (Signature "FACP")
* Version 4 * Version 6
* *
******************************************************************************/ ******************************************************************************/
...@@ -413,4 +413,6 @@ struct acpi_table_desc { ...@@ -413,4 +413,6 @@ struct acpi_table_desc {
#define ACPI_FADT_V5_SIZE (u32) (ACPI_FADT_OFFSET (hypervisor_id)) #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_V6_SIZE (u32) (sizeof (struct acpi_table_fadt))
#define ACPI_FADT_CONFORMANCE "ACPI 6.1 (FADT version 6)"
#endif /* __ACTBL_H__ */ #endif /* __ACTBL_H__ */
...@@ -236,7 +236,8 @@ enum acpi_einj_actions { ...@@ -236,7 +236,8 @@ enum acpi_einj_actions {
ACPI_EINJ_CHECK_BUSY_STATUS = 6, ACPI_EINJ_CHECK_BUSY_STATUS = 6,
ACPI_EINJ_GET_COMMAND_STATUS = 7, ACPI_EINJ_GET_COMMAND_STATUS = 7,
ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS = 8, 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 */ ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */
}; };
...@@ -348,7 +349,8 @@ enum acpi_erst_actions { ...@@ -348,7 +349,8 @@ enum acpi_erst_actions {
ACPI_ERST_GET_ERROR_RANGE = 13, ACPI_ERST_GET_ERROR_RANGE = 13,
ACPI_ERST_GET_ERROR_LENGTH = 14, ACPI_ERST_GET_ERROR_LENGTH = 14,
ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, 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 */ /* Values for Instruction field above */
...@@ -427,7 +429,8 @@ enum acpi_hest_types { ...@@ -427,7 +429,8 @@ enum acpi_hest_types {
ACPI_HEST_TYPE_AER_ENDPOINT = 7, ACPI_HEST_TYPE_AER_ENDPOINT = 7,
ACPI_HEST_TYPE_AER_BRIDGE = 8, ACPI_HEST_TYPE_AER_BRIDGE = 8,
ACPI_HEST_TYPE_GENERIC_ERROR = 9, 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 { ...@@ -506,7 +509,11 @@ enum acpi_hest_notify_types {
ACPI_HEST_NOTIFY_NMI = 4, ACPI_HEST_NOTIFY_NMI = 4,
ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
ACPI_HEST_NOTIFY_MCE = 6, /* 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 */ /* Values for config_write_enable bitfield above */
...@@ -603,6 +610,24 @@ struct acpi_hest_generic { ...@@ -603,6 +610,24 @@ struct acpi_hest_generic {
u32 error_block_length; 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 */ /* Generic Error Status block */
struct acpi_hest_generic_status { struct acpi_hest_generic_status {
...@@ -634,6 +659,33 @@ struct acpi_hest_generic_data { ...@@ -634,6 +659,33 @@ struct acpi_hest_generic_data {
u8 fru_text[20]; 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 * MADT - Multiple APIC Description Table
...@@ -934,7 +986,7 @@ struct acpi_msct_proximity { ...@@ -934,7 +986,7 @@ struct acpi_msct_proximity {
/******************************************************************************* /*******************************************************************************
* *
* NFIT - NVDIMM Interface Table (ACPI 6.0) * NFIT - NVDIMM Interface Table (ACPI 6.0+)
* Version 1 * Version 1
* *
******************************************************************************/ ******************************************************************************/
...@@ -1015,6 +1067,7 @@ struct acpi_nfit_memory_map { ...@@ -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_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_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_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 */ /* 2: Interleave Structure */
...@@ -1046,7 +1099,10 @@ struct acpi_nfit_control_region { ...@@ -1046,7 +1099,10 @@ struct acpi_nfit_control_region {
u16 subsystem_vendor_id; u16 subsystem_vendor_id;
u16 subsystem_device_id; u16 subsystem_device_id;
u16 subsystem_revision_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; u32 serial_number;
u16 code; u16 code;
u16 windows; u16 windows;
...@@ -1061,7 +1117,11 @@ struct acpi_nfit_control_region { ...@@ -1061,7 +1117,11 @@ struct acpi_nfit_control_region {
/* Flags */ /* 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 */ /* 5: NVDIMM Block Data Window Region Structure */
......
...@@ -321,7 +321,7 @@ struct acpi_csrt_descriptor { ...@@ -321,7 +321,7 @@ struct acpi_csrt_descriptor {
* DBG2 - Debug Port Table 2 * DBG2 - Debug Port Table 2
* Version 0 (Both main table and subtables) * 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 { ...@@ -371,6 +371,11 @@ struct acpi_dbg2_device {
#define ACPI_DBG2_16550_COMPATIBLE 0x0000 #define ACPI_DBG2_16550_COMPATIBLE 0x0000
#define ACPI_DBG2_16550_SUBSET 0x0001 #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 #define ACPI_DBG2_1394_STANDARD 0x0000
...@@ -399,7 +404,7 @@ struct acpi_table_dbgp { ...@@ -399,7 +404,7 @@ struct acpi_table_dbgp {
* Version 1 * Version 1
* *
* Conforms to "Intel Virtualization Technology for Directed I/O", * 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 { ...@@ -413,6 +418,8 @@ struct acpi_table_dmar {
/* Masks for Flags field above */ /* Masks for Flags field above */
#define ACPI_DMAR_INTR_REMAP (1) #define ACPI_DMAR_INTR_REMAP (1)
#define ACPI_DMAR_X2APIC_OPT_OUT (1<<1)
#define ACPI_DMAR_X2APIC_MODE (1<<2)
/* DMAR subtable header */ /* DMAR subtable header */
...@@ -655,7 +662,7 @@ struct acpi_ibft_target { ...@@ -655,7 +662,7 @@ struct acpi_ibft_target {
* IORT - IO Remapping Table * IORT - IO Remapping Table
* *
* Conforms to "IO Remapping Table System Software on ARM Platforms", * 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 { ...@@ -685,7 +692,8 @@ enum acpi_iort_node_type {
ACPI_IORT_NODE_ITS_GROUP = 0x00, ACPI_IORT_NODE_ITS_GROUP = 0x00,
ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 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 { struct acpi_iort_id_mapping {
...@@ -775,6 +783,23 @@ struct acpi_iort_smmu { ...@@ -775,6 +783,23 @@ struct acpi_iort_smmu {
#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) #define ACPI_IORT_SMMU_DVM_SUPPORTED (1)
#define ACPI_IORT_SMMU_COHERENT_WALK (1<<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 * IVRS - I/O Virtualization Reporting Structure
...@@ -1102,10 +1127,10 @@ struct acpi_table_slic { ...@@ -1102,10 +1127,10 @@ struct acpi_table_slic {
/******************************************************************************* /*******************************************************************************
* *
* SPCR - Serial Port Console Redirection table * SPCR - Serial Port Console Redirection table
* Version 1 * Version 2
* *
* Conforms to "Serial Port Console Redirection Table", * 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 { ...@@ -1137,6 +1162,8 @@ struct acpi_table_spcr {
#define ACPI_SPCR_DO_NOT_DISABLE (1) #define ACPI_SPCR_DO_NOT_DISABLE (1)
/* Values for Interface Type: See the definition of the DBG2 table */
/******************************************************************************* /*******************************************************************************
* *
* SPMI - Server Platform Management Interface table * SPMI - Server Platform Management Interface table
......
...@@ -184,7 +184,7 @@ struct acpi_table_fpdt { ...@@ -184,7 +184,7 @@ struct acpi_table_fpdt {
struct acpi_table_header header; /* Common ACPI table header */ struct acpi_table_header header; /* Common ACPI table header */
}; };
/* FPDT subtable header */ /* FPDT subtable header (Performance Record Structure) */
struct acpi_fpdt_header { struct acpi_fpdt_header {
u16 type; u16 type;
...@@ -205,19 +205,15 @@ enum acpi_fpdt_type { ...@@ -205,19 +205,15 @@ enum acpi_fpdt_type {
/* 0: Firmware Basic Boot Performance Record */ /* 0: Firmware Basic Boot Performance Record */
struct acpi_fpdt_boot { struct acpi_fpdt_boot_pointer {
struct acpi_fpdt_header header; struct acpi_fpdt_header header;
u8 reserved[4]; u8 reserved[4];
u64 reset_end; u64 address;
u64 load_start;
u64 startup_start;
u64 exit_services_entry;
u64 exit_services_exit;
}; };
/* 1: S3 Performance Table Pointer Record */ /* 1: S3 Performance Table Pointer Record */
struct acpi_fpdt_s3pt_ptr { struct acpi_fpdt_s3pt_pointer {
struct acpi_fpdt_header header; struct acpi_fpdt_header header;
u8 reserved[4]; u8 reserved[4];
u64 address; u64 address;
...@@ -225,7 +221,7 @@ struct acpi_fpdt_s3pt_ptr { ...@@ -225,7 +221,7 @@ struct acpi_fpdt_s3pt_ptr {
/* /*
* S3PT - S3 Performance Table. This table is pointed to by the * S3PT - S3 Performance Table. This table is pointed to by the
* FPDT S3 Pointer Record above. * S3 Pointer Record above.
*/ */
struct acpi_table_s3pt { struct acpi_table_s3pt {
u8 signature[4]; /* "S3PT" */ u8 signature[4]; /* "S3PT" */
...@@ -233,34 +229,43 @@ struct acpi_table_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 { enum acpi_s3pt_type {
ACPI_S3PT_TYPE_RESUME = 0, 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_resume {
struct acpi_s3pt_header header; struct acpi_fpdt_header header;
u32 resume_count; u32 resume_count;
u64 full_resume; u64 full_resume;
u64 average_resume; u64 average_resume;
}; };
struct acpi_s3pt_suspend { struct acpi_s3pt_suspend {
struct acpi_s3pt_header header; struct acpi_fpdt_header header;
u64 suspend_start; u64 suspend_start;
u64 suspend_end; 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) * GTDT - Generic Timer Description Table (ACPI 5.1)
......
...@@ -630,7 +630,8 @@ typedef u64 acpi_integer; ...@@ -630,7 +630,8 @@ typedef u64 acpi_integer;
#define ACPI_NOTIFY_SHUTDOWN_REQUEST (u8) 0x0C #define ACPI_NOTIFY_SHUTDOWN_REQUEST (u8) 0x0C
#define ACPI_NOTIFY_AFFINITY_UPDATE (u8) 0x0D #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 * Types associated with ACPI names and objects. The first group of
...@@ -994,7 +995,7 @@ struct acpi_buffer { ...@@ -994,7 +995,7 @@ struct acpi_buffer {
* Predefined Namespace items * Predefined Namespace items
*/ */
struct acpi_predefined_names { struct acpi_predefined_names {
char *name; const char *name;
u8 type; u8 type;
char *val; char *val;
}; };
...@@ -1227,7 +1228,7 @@ struct acpi_mem_space_context { ...@@ -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 is used only if the ACPICA local cache is enabled
*/ */
struct acpi_memory_list { struct acpi_memory_list {
char *list_name; const char *list_name;
void *list_head; void *list_head;
u16 object_size; u16 object_size;
u16 max_depth; u16 max_depth;
......
...@@ -66,17 +66,28 @@ ...@@ -66,17 +66,28 @@
* *
*****************************************************************************/ *****************************************************************************/
/* 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 */ /* iASL configuration */
#ifdef ACPI_ASL_COMPILER #ifdef ACPI_ASL_COMPILER
#define ACPI_APPLICATION
#define ACPI_DEBUG_OUTPUT #define ACPI_DEBUG_OUTPUT
#define ACPI_CONSTANT_EVAL_ONLY #define ACPI_CONSTANT_EVAL_ONLY
#define ACPI_LARGE_NAMESPACE_NODE #define ACPI_LARGE_NAMESPACE_NODE
#define ACPI_DATA_TABLE_DISASSEMBLY #define ACPI_DATA_TABLE_DISASSEMBLY
#define ACPI_SINGLE_THREADED
#define ACPI_32BIT_PHYSICAL_ADDRESS #define ACPI_32BIT_PHYSICAL_ADDRESS
#define ACPI_DISASSEMBLER 1 #define ACPI_DISASSEMBLER 1
#endif #endif
...@@ -89,21 +100,6 @@ ...@@ -89,21 +100,6 @@
#define ACPI_DBG_TRACK_ALLOCATIONS #define ACPI_DBG_TRACK_ALLOCATIONS
#endif #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. */ /* acpi_help configuration. Error messages disabled. */
#ifdef ACPI_HELP_APP #ifdef ACPI_HELP_APP
...@@ -138,11 +134,16 @@ ...@@ -138,11 +134,16 @@
#define ACPI_REDUCED_HARDWARE 1 #define ACPI_REDUCED_HARDWARE 1
#endif #endif
/* Linkable ACPICA library */ /* Linkable ACPICA library. Two versions, one with full debug. */
#ifdef ACPI_LIBRARY #ifdef ACPI_LIBRARY
#define ACPI_USE_LOCAL_CACHE #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 #endif
/* Common for all ACPICA applications */ /* Common for all ACPICA applications */
...@@ -218,6 +219,9 @@ ...@@ -218,6 +219,9 @@
#elif defined(__HAIKU__) #elif defined(__HAIKU__)
#include "achaiku.h" #include "achaiku.h"
#elif defined(__QNX__)
#include "acqnx.h"
#else #else
/* Unknown environment */ /* Unknown environment */
......
/******************************************************************************
*
* 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__ */
/******************************************************************************
*
* 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__ */
...@@ -54,7 +54,7 @@ ACPI_MODULE_NAME("osunixmap") ...@@ -54,7 +54,7 @@ ACPI_MODULE_NAME("osunixmap")
#ifndef O_BINARY #ifndef O_BINARY
#define O_BINARY 0 #define O_BINARY 0
#endif #endif
#if defined(_dragon_fly) || defined(_free_BSD) #if defined(_dragon_fly) || defined(_free_BSD) || defined(_QNX)
#define MMAP_FLAGS MAP_SHARED #define MMAP_FLAGS MAP_SHARED
#else #else
#define MMAP_FLAGS MAP_PRIVATE #define MMAP_FLAGS MAP_PRIVATE
......
...@@ -286,7 +286,8 @@ int ap_dump_table_by_address(char *ascii_address) ...@@ -286,7 +286,8 @@ int ap_dump_table_by_address(char *ascii_address)
/* Convert argument to an integer physical 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)) { if (ACPI_FAILURE(status)) {
acpi_log_error("%s: Could not convert to a physical address\n", acpi_log_error("%s: Could not convert to a physical address\n",
ascii_address); ascii_address);
......
...@@ -209,7 +209,8 @@ static int ap_do_options(int argc, char **argv) ...@@ -209,7 +209,8 @@ static int ap_do_options(int argc, char **argv)
case 'r': /* Dump tables from specified RSDP */ case 'r': /* Dump tables from specified RSDP */
status = status =
acpi_ut_strtoul64(acpi_gbl_optarg, 0, acpi_ut_strtoul64(acpi_gbl_optarg, ACPI_ANY_BASE,
ACPI_MAX64_BYTE_WIDTH,
&gbl_rsdp_base); &gbl_rsdp_base);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
acpi_log_error acpi_log_error
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment