Merge back new ACPICA material for v4.7.

This commit is contained in:
Rafael J. Wysocki 2016-05-06 01:41:06 +02:00
commit d1ce3bb955
129 changed files with 1957 additions and 1289 deletions

View File

@ -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 \
@ -149,6 +150,7 @@ acpi-y += \
acpi-y += \ acpi-y += \
utaddress.o \ utaddress.o \
utalloc.o \ utalloc.o \
utascii.o \
utbuffer.o \ utbuffer.o \
utcopy.o \ utcopy.o \
utexcep.o \ utexcep.o \

View File

@ -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 {
}; };
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 {
@ -196,7 +196,7 @@ ACPI_DBR_DEPENDENT_RETURN_VOID(void
acpi_walk_state acpi_walk_state
*walk_state)) *walk_state))
acpi_status acpi_db_display_all_methods(char *display_count_arg); acpi_status acpi_db_display_all_methods(char *display_count_arg);
void acpi_db_display_arguments(void); void acpi_db_display_arguments(void);
@ -220,7 +220,7 @@ ACPI_DBR_DEPENDENT_RETURN_VOID(void
* dbexec - debugger control method execution * dbexec - debugger control method execution
*/ */
void void
acpi_db_execute(char *name, char **args, acpi_object_type * types, u32 flags); acpi_db_execute(char *name, char **args, acpi_object_type *types, u32 flags);
void void
acpi_db_create_execution_threads(char *num_threads_arg, acpi_db_create_execution_threads(char *num_threads_arg,
@ -271,7 +271,7 @@ void ACPI_SYSTEM_XFACE acpi_db_execute_thread(void *context);
acpi_status acpi_db_user_commands(void); acpi_status acpi_db_user_commands(void);
char *acpi_db_get_next_token(char *string, char *acpi_db_get_next_token(char *string,
char **next, acpi_object_type * return_type); char **next, acpi_object_type *return_type);
/* /*
* dbobject * dbobject

View File

@ -72,6 +72,7 @@ acpi_status acpi_ev_init_global_lock_handler(void);
ACPI_HW_DEPENDENT_RETURN_OK(acpi_status ACPI_HW_DEPENDENT_RETURN_OK(acpi_status
acpi_ev_acquire_global_lock(u16 timeout)) acpi_ev_acquire_global_lock(u16 timeout))
ACPI_HW_DEPENDENT_RETURN_OK(acpi_status acpi_ev_release_global_lock(void)) ACPI_HW_DEPENDENT_RETURN_OK(acpi_status acpi_ev_release_global_lock(void))
acpi_status acpi_ev_remove_global_lock_handler(void); acpi_status acpi_ev_remove_global_lock_handler(void);
/* /*
@ -198,8 +199,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);

View File

@ -187,6 +187,8 @@ extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
extern const char *acpi_gbl_lowest_dstate_names[ACPI_NUM_sx_w_METHODS]; extern const char *acpi_gbl_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);
#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

View File

@ -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;
@ -370,7 +370,7 @@ acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
acpi_status acpi_status
acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
union acpi_operand_object *operand, union acpi_operand_object *operand,
acpi_object_type * return_type, acpi_object_type *return_type,
union acpi_operand_object **return_desc); union acpi_operand_object **return_desc);
/* /*

View File

@ -278,7 +278,7 @@ struct acpi_create_field_info {
}; };
typedef typedef
acpi_status(*acpi_internal_method) (struct acpi_walk_state * walk_state); acpi_status (*acpi_internal_method) (struct acpi_walk_state * walk_state);
/* /*
* Bitmapped ACPI types. Used internally only * Bitmapped ACPI types. Used internally only
@ -395,11 +395,12 @@ union acpi_predefined_info {
/* Return object auto-repair info */ /* Return object auto-repair info */
typedef acpi_status(*acpi_object_converter) (struct acpi_namespace_node * scope, typedef acpi_status (*acpi_object_converter) (struct acpi_namespace_node *
union acpi_operand_object scope,
*original_object, union acpi_operand_object *
union acpi_operand_object original_object,
**converted_object); union acpi_operand_object **
converted_object);
struct acpi_simple_repair_info { struct acpi_simple_repair_info {
char name[ACPI_NAME_SIZE]; char name[ACPI_NAME_SIZE];
@ -539,10 +540,10 @@ struct acpi_gpe_device_info {
struct acpi_namespace_node *gpe_device; struct acpi_namespace_node *gpe_device;
}; };
typedef acpi_status(*acpi_gpe_callback) (struct acpi_gpe_xrupt_info * typedef acpi_status (*acpi_gpe_callback) (struct acpi_gpe_xrupt_info *
gpe_xrupt_info, gpe_xrupt_info,
struct acpi_gpe_block_info *gpe_block, struct acpi_gpe_block_info *
void *context); gpe_block, void *context);
/* Information about each particular fixed event */ /* Information about each particular fixed event */
@ -657,10 +658,11 @@ struct acpi_result_values {
}; };
typedef typedef
acpi_status(*acpi_parse_downwards) (struct acpi_walk_state * walk_state, acpi_status (*acpi_parse_downwards) (struct acpi_walk_state * walk_state,
union acpi_parse_object ** out_op); union acpi_parse_object ** out_op);
typedef acpi_status(*acpi_parse_upwards) (struct acpi_walk_state * walk_state); typedef
acpi_status (*acpi_parse_upwards) (struct acpi_walk_state * walk_state);
/* Global handlers for AML Notifies */ /* Global handlers for AML Notifies */
@ -700,7 +702,8 @@ union acpi_generic_state {
* *
****************************************************************************/ ****************************************************************************/
typedef acpi_status(*acpi_execute_op) (struct acpi_walk_state * walk_state); typedef
acpi_status (*acpi_execute_op) (struct acpi_walk_state * walk_state);
/* Address Range info block */ /* Address Range info block */
@ -854,7 +857,7 @@ struct acpi_parse_state {
/* Parse object flags */ /* Parse object flags */
#define ACPI_PARSEOP_GENERIC 0x01 #define ACPI_PARSEOP_GENERIC 0x01
#define ACPI_PARSEOP_NAMED 0x02 #define ACPI_PARSEOP_NAMED_OBJECT 0x02
#define ACPI_PARSEOP_DEFERRED 0x04 #define ACPI_PARSEOP_DEFERRED 0x04
#define ACPI_PARSEOP_BYTELIST 0x08 #define ACPI_PARSEOP_BYTELIST 0x08
#define ACPI_PARSEOP_IN_STACK 0x10 #define ACPI_PARSEOP_IN_STACK 0x10
@ -864,11 +867,11 @@ struct acpi_parse_state {
/* Parse object disasm_flags */ /* Parse object disasm_flags */
#define ACPI_PARSEOP_IGNORE 0x01 #define ACPI_PARSEOP_IGNORE 0x01
#define ACPI_PARSEOP_PARAMLIST 0x02 #define ACPI_PARSEOP_PARAMETER_LIST 0x02
#define ACPI_PARSEOP_EMPTY_TERMLIST 0x04 #define ACPI_PARSEOP_EMPTY_TERMLIST 0x04
#define ACPI_PARSEOP_PREDEF_CHECKED 0x08 #define ACPI_PARSEOP_PREDEFINED_CHECKED 0x08
#define ACPI_PARSEOP_CLOSING_PAREN 0x10 #define ACPI_PARSEOP_CLOSING_PAREN 0x10
#define ACPI_PARSEOP_COMPOUND 0x20 #define ACPI_PARSEOP_COMPOUND_ASSIGNMENT 0x20
#define ACPI_PARSEOP_ASSIGNMENT 0x40 #define ACPI_PARSEOP_ASSIGNMENT 0x40
#define ACPI_PARSEOP_ELSEIF 0x80 #define ACPI_PARSEOP_ELSEIF 0x80
@ -1096,6 +1099,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;

View File

@ -260,14 +260,31 @@
#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_ALIGNED(a, s) (((a) & ((s) - 1)) == 0)
#define ACPI_IS_POWER_OF_TWO(a) ACPI_IS_ALIGNED(a, a)
/* /*
* Bitmask creation * Bitmask creation
* Bit positions start at zero. * Bit positions start at zero.
* MASK_BITS_ABOVE creates a mask starting AT the position and above * MASK_BITS_ABOVE creates a mask starting AT the position and above
* MASK_BITS_BELOW creates a mask starting one bit BELOW the position * MASK_BITS_BELOW creates a mask starting one bit BELOW the position
* MASK_BITS_ABOVE/BELOW accpets a bit offset to create a mask
* MASK_BITS_ABOVE/BELOW_32/64 accpets a bit width to create a mask
* Note: The ACPI_INTEGER_BIT_SIZE check is used to bypass compiler
* differences with the shift operator
*/ */
#define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_UINT64_MAX) << ((u32) (position)))) #define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_UINT64_MAX) << ((u32) (position))))
#define ACPI_MASK_BITS_BELOW(position) ((ACPI_UINT64_MAX) << ((u32) (position))) #define ACPI_MASK_BITS_BELOW(position) ((ACPI_UINT64_MAX) << ((u32) (position)))
#define ACPI_MASK_BITS_ABOVE_32(width) ((u32) ACPI_MASK_BITS_ABOVE(width))
#define ACPI_MASK_BITS_BELOW_32(width) ((u32) ACPI_MASK_BITS_BELOW(width))
#define ACPI_MASK_BITS_ABOVE_64(width) ((width) == ACPI_INTEGER_BIT_SIZE ? \
ACPI_UINT64_MAX : \
ACPI_MASK_BITS_ABOVE(width))
#define ACPI_MASK_BITS_BELOW_64(width) ((width) == ACPI_INTEGER_BIT_SIZE ? \
(u64) 0 : \
ACPI_MASK_BITS_BELOW(width))
/* Bitfields within ACPI registers */ /* Bitfields within ACPI registers */
@ -283,10 +300,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

View File

@ -206,9 +206,10 @@ void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth);
void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level); void acpi_ns_dump_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,

View File

@ -139,7 +139,7 @@ acpi_ps_complete_final_op(struct acpi_walk_state *walk_state,
*/ */
const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode); 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);

View File

@ -129,7 +129,8 @@ enum acpi_return_package_types {
ACPI_PTYPE2_REV_FIXED = 9, ACPI_PTYPE2_REV_FIXED = 9,
ACPI_PTYPE2_FIX_VAR = 10, ACPI_PTYPE2_FIX_VAR = 10,
ACPI_PTYPE2_VAR_VAR = 11, ACPI_PTYPE2_VAR_VAR = 11,
ACPI_PTYPE2_UUID_PAIR = 12 ACPI_PTYPE2_UUID_PAIR = 12,
ACPI_PTYPE_CUSTOM = 13
}; };
/* Support macros for users of the predefined info table */ /* Support macros for users of the predefined info table */
@ -340,7 +341,7 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
{{"_BIX", METHOD_0ARGS, {{"_BIX", METHOD_0ARGS,
METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (16 Int),(4 Str) */ METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (16 Int),(4 Str) */
PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16, PACKAGE_INFO(ACPI_PTYPE_CUSTOM, ACPI_RTYPE_INTEGER, 16,
ACPI_RTYPE_STRING, 4, 0), ACPI_RTYPE_STRING, 4, 0),
{{"_BLT", {{"_BLT",
@ -523,6 +524,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 +1057,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

View File

@ -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,
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,
@ -223,16 +223,16 @@ acpi_rs_get_aei_method_data(struct acpi_namespace_node *node,
* rscalc * rscalc
*/ */
acpi_status acpi_status
acpi_rs_get_list_length(u8 * aml_buffer, acpi_rs_get_list_length(u8 *aml_buffer,
u32 aml_buffer_length, acpi_size * size_needed); u32 aml_buffer_length, acpi_size *size_needed);
acpi_status acpi_status
acpi_rs_get_aml_length(struct acpi_resource *resource_list, acpi_rs_get_aml_length(struct acpi_resource *resource_list,
acpi_size resource_list_size, acpi_size * size_needed); acpi_size resource_list_size, acpi_size *size_needed);
acpi_status acpi_status
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object, acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
acpi_size * buffer_size_needed); acpi_size *buffer_size_needed);
acpi_status acpi_status
acpi_rs_convert_aml_to_resources(u8 * aml, acpi_rs_convert_aml_to_resources(u8 * aml,

View File

@ -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) */

View File

@ -161,8 +161,6 @@ acpi_tb_install_fixed_table(acpi_physical_address address,
acpi_status acpi_tb_parse_root_table(acpi_physical_address rsdp_address); acpi_status acpi_tb_parse_root_table(acpi_physical_address rsdp_address);
u8 acpi_is_valid_signature(char *signature);
/* /*
* tbxfload * tbxfload
*/ */

View File

@ -136,14 +136,14 @@ extern const char *acpi_gbl_pt_decode[];
#define ACPI_SMALL_VARIABLE_LENGTH 3 #define ACPI_SMALL_VARIABLE_LENGTH 3
typedef typedef
acpi_status(*acpi_walk_aml_callback) (u8 *aml, acpi_status (*acpi_walk_aml_callback) (u8 *aml,
u32 length, u32 length,
u32 offset, u32 offset,
u8 resource_index, void **context); u8 resource_index, void **context);
typedef typedef
acpi_status(*acpi_pkg_callback) (u8 object_type, acpi_status (*acpi_pkg_callback) (u8 object_type,
union acpi_operand_object *source_object, union acpi_operand_object * source_object,
union acpi_generic_state * state, union acpi_generic_state * state,
void *context); void *context);
@ -166,6 +166,15 @@ struct acpi_pkg_info {
#define DB_DWORD_DISPLAY 4 #define DB_DWORD_DISPLAY 4
#define DB_QWORD_DISPLAY 8 #define DB_QWORD_DISPLAY 8
/*
* utascii - ASCII utilities
*/
u8 acpi_ut_valid_nameseg(char *signature);
u8 acpi_ut_valid_name_char(char character, u32 position);
void acpi_ut_check_and_repair_ascii(u8 *name, char *repaired_name, u32 count);
/* /*
* utnonansi - Non-ANSI C library functions * utnonansi - Non-ANSI C library functions
*/ */
@ -175,7 +184,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 +282,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 +293,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 +353,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);
@ -415,7 +433,7 @@ union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size);
union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size); union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size);
acpi_status acpi_status
acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size * obj_length); acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size *obj_length);
/* /*
* utosi - Support for the _OSI predefined control method * utosi - Support for the _OSI predefined control method
@ -526,15 +544,15 @@ 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
/* /*
* utownerid - Support for Table/Method Owner IDs * utownerid - Support for Table/Method Owner IDs
*/ */
acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id); acpi_status acpi_ut_allocate_owner_id(acpi_owner_id *owner_id);
void acpi_ut_release_owner_id(acpi_owner_id * owner_id); void acpi_ut_release_owner_id(acpi_owner_id *owner_id);
/* /*
* utresrc * utresrc
@ -570,10 +588,6 @@ void acpi_ut_print_string(char *string, u16 max_length);
void ut_convert_backslashes(char *pathname); void ut_convert_backslashes(char *pathname);
#endif #endif
u8 acpi_ut_valid_acpi_name(char *name);
u8 acpi_ut_valid_acpi_char(char character, u32 position);
void acpi_ut_repair_name(char *name); void acpi_ut_repair_name(char *name);
#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
@ -628,7 +642,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 */

View File

@ -738,9 +738,9 @@ acpi_dm_test_resource_conversion(struct acpi_namespace_node *node, char *name)
original_aml = return_buffer.pointer; original_aml = return_buffer.pointer;
acpi_dm_compare_aml_resources(original_aml->buffer.pointer, acpi_dm_compare_aml_resources(original_aml->buffer.pointer,
(acpi_rsdesc_size) original_aml->buffer. (acpi_rsdesc_size)original_aml->buffer.
length, new_aml.pointer, length, new_aml.pointer,
(acpi_rsdesc_size) new_aml.length); (acpi_rsdesc_size)new_aml.length);
/* Cleanup and exit */ /* Cleanup and exit */

View File

@ -194,7 +194,7 @@ acpi_db_convert_to_buffer(char *string, union acpi_object *object)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_db_convert_to_package(char *string, union acpi_object * object) acpi_status acpi_db_convert_to_package(char *string, union acpi_object *object)
{ {
char *this; char *this;
char *next; char *next;
@ -252,7 +252,7 @@ acpi_status acpi_db_convert_to_package(char *string, union acpi_object * object)
acpi_status acpi_status
acpi_db_convert_to_object(acpi_object_type type, acpi_db_convert_to_object(acpi_object_type type,
char *string, union acpi_object * object) char *string, union acpi_object *object)
{ {
acpi_status status = AE_OK; acpi_status status = AE_OK;
@ -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;
} }

View File

@ -361,7 +361,7 @@ acpi_db_execution_walk(acpi_handle obj_handle,
******************************************************************************/ ******************************************************************************/
void void
acpi_db_execute(char *name, char **args, acpi_object_type * types, u32 flags) acpi_db_execute(char *name, char **args, acpi_object_type *types, u32 flags)
{ {
acpi_status status; acpi_status status;
struct acpi_buffer return_obj; struct acpi_buffer return_obj;

View File

@ -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[] = {
******************************************************************************/ ******************************************************************************/
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,
* *
******************************************************************************/ ******************************************************************************/
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;
@ -466,7 +466,7 @@ static void acpi_db_display_help(char *command)
******************************************************************************/ ******************************************************************************/
char *acpi_db_get_next_token(char *string, char *acpi_db_get_next_token(char *string,
char **next, acpi_object_type * return_type) char **next, acpi_object_type *return_type)
{ {
char *start; char *start;
u32 depth; u32 depth;
@ -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);
} }
} }
@ -683,8 +684,8 @@ static u32 acpi_db_match_command(char *user_command)
acpi_status acpi_status
acpi_db_command_dispatch(char *input_buffer, acpi_db_command_dispatch(char *input_buffer,
struct acpi_walk_state * walk_state, struct acpi_walk_state *walk_state,
union acpi_parse_object * op) union acpi_parse_object *op)
{ {
u32 temp; u32 temp;
u32 command_index; u32 command_index;

View File

@ -285,7 +285,7 @@ void acpi_db_dump_namespace_by_owner(char *owner_arg, char *depth_arg)
u32 max_depth = ACPI_UINT32_MAX; u32 max_depth = ACPI_UINT32_MAX;
acpi_owner_id owner_id; acpi_owner_id owner_id;
owner_id = (acpi_owner_id) strtoul(owner_arg, NULL, 0); owner_id = (acpi_owner_id)strtoul(owner_arg, NULL, 0);
/* Now we can check for the depth argument */ /* Now we can check for the depth argument */
@ -709,7 +709,7 @@ acpi_db_integrity_walk(acpi_handle obj_handle,
return (AE_OK); return (AE_OK);
} }
if (!acpi_ut_valid_acpi_name(node->name.ascii)) { if (!acpi_ut_valid_nameseg(node->name.ascii)) {
acpi_os_printf("Invalid AcpiName for Node %p\n", node); acpi_os_printf("Invalid AcpiName for Node %p\n", node);
return (AE_OK); return (AE_OK);
} }

View File

@ -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,
} }
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)
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;
} }
} }

View File

@ -162,8 +162,8 @@ void acpi_db_signal_break_point(struct acpi_walk_state *walk_state)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_db_single_step(struct acpi_walk_state * walk_state, acpi_db_single_step(struct acpi_walk_state *walk_state,
union acpi_parse_object * op, u32 opcode_class) union acpi_parse_object *op, u32 opcode_class)
{ {
union acpi_parse_object *next; union acpi_parse_object *next;
acpi_status status = AE_OK; acpi_status status = AE_OK;

View File

@ -163,8 +163,8 @@ acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state, acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state,
union acpi_parse_object * op) union acpi_parse_object *op)
{ {
acpi_status status = AE_OK; acpi_status status = AE_OK;
union acpi_generic_state *control_state; union acpi_generic_state *control_state;

View File

@ -188,7 +188,7 @@ acpi_ds_init_one_object(acpi_handle obj_handle,
acpi_status acpi_status
acpi_ds_initialize_objects(u32 table_index, acpi_ds_initialize_objects(u32 table_index,
struct acpi_namespace_node * start_node) struct acpi_namespace_node *start_node)
{ {
acpi_status status; acpi_status status;
struct acpi_init_walk_info info; struct acpi_init_walk_info info;

View File

@ -209,7 +209,7 @@ acpi_ds_detect_named_opcodes(struct acpi_walk_state *walk_state,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ds_method_error(acpi_status status, struct acpi_walk_state * walk_state) acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
{ {
u32 aml_offset; u32 aml_offset;

View File

@ -569,7 +569,7 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
/* TBD: May only be temporary */ /* TBD: May only be temporary */
obj_desc = obj_desc =
acpi_ut_create_string_object((acpi_size) name_length); acpi_ut_create_string_object((acpi_size)name_length);
strncpy(obj_desc->string.pointer, strncpy(obj_desc->string.pointer,
name_string, name_length); name_string, name_length);

View File

@ -137,8 +137,8 @@ acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state, acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
union acpi_parse_object ** out_op) union acpi_parse_object **out_op)
{ {
union acpi_parse_object *op; union acpi_parse_object *op;
struct acpi_namespace_node *node; struct acpi_namespace_node *node;

View File

@ -490,8 +490,8 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
status = status =
acpi_ds_create_index_field(op, acpi_ds_create_index_field(op,
(acpi_handle) arg-> (acpi_handle)arg->common.
common.node, walk_state); node, walk_state);
break; break;
case AML_BANK_FIELD_OP: case AML_BANK_FIELD_OP:

View File

@ -143,8 +143,8 @@ acpi_ds_result_pop(union acpi_operand_object **object,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ds_result_push(union acpi_operand_object * object, acpi_ds_result_push(union acpi_operand_object *object,
struct acpi_walk_state * walk_state) struct acpi_walk_state *walk_state)
{ {
union acpi_generic_state *state; union acpi_generic_state *state;
acpi_status status; acpi_status status;
@ -307,7 +307,7 @@ static acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state *walk_state)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ds_obj_stack_push(void *object, struct acpi_walk_state * walk_state) acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state)
{ {
ACPI_FUNCTION_NAME(ds_obj_stack_push); ACPI_FUNCTION_NAME(ds_obj_stack_push);
@ -354,7 +354,7 @@ acpi_ds_obj_stack_push(void *object, struct acpi_walk_state * walk_state)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state * walk_state) acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state)
{ {
u32 i; u32 i;
@ -411,7 +411,7 @@ acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
return; return;
} }
for (i = (s32) pop_count - 1; i >= 0; i--) { for (i = (s32)pop_count - 1; i >= 0; i--) {
if (walk_state->num_operands == 0) { if (walk_state->num_operands == 0) {
return; return;
} }

View File

@ -440,7 +440,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list)
gpe_event_info = gpe_event_info =
&gpe_block-> &gpe_block->
event_info[((acpi_size) i * event_info[((acpi_size)i *
ACPI_GPE_REGISTER_WIDTH) + j]; ACPI_GPE_REGISTER_WIDTH) + j];
gpe_number = gpe_number =
j + gpe_register_info->base_gpe_number; j + gpe_register_info->base_gpe_number;
@ -652,7 +652,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_enable_gpe(void *context)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info * gpe_event_info) acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info)
{ {
acpi_status status; acpi_status status;

View File

@ -211,7 +211,7 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
/* Allocate the GPE register information block */ /* Allocate the GPE register information block */
gpe_register_info = ACPI_ALLOCATE_ZEROED((acpi_size) gpe_block-> gpe_register_info = ACPI_ALLOCATE_ZEROED((acpi_size)gpe_block->
register_count * register_count *
sizeof(struct sizeof(struct
acpi_gpe_register_info)); acpi_gpe_register_info));
@ -225,7 +225,7 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
* Allocate the GPE event_info block. There are eight distinct GPEs * Allocate the GPE event_info block. There are eight distinct GPEs
* per register. Initialization to zeros is sufficient. * per register. Initialization to zeros is sufficient.
*/ */
gpe_event_info = ACPI_ALLOCATE_ZEROED((acpi_size) gpe_block->gpe_count * gpe_event_info = ACPI_ALLOCATE_ZEROED((acpi_size)gpe_block->gpe_count *
sizeof(struct sizeof(struct
acpi_gpe_event_info)); acpi_gpe_event_info));
if (!gpe_event_info) { if (!gpe_event_info) {

View File

@ -163,7 +163,7 @@ acpi_ev_get_gpe_device(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
acpi_status acpi_status
acpi_ev_get_gpe_xrupt_block(u32 interrupt_number, acpi_ev_get_gpe_xrupt_block(u32 interrupt_number,
struct acpi_gpe_xrupt_info ** gpe_xrupt_block) struct acpi_gpe_xrupt_info **gpe_xrupt_block)
{ {
struct acpi_gpe_xrupt_info *next_gpe_xrupt; struct acpi_gpe_xrupt_info *next_gpe_xrupt;
struct acpi_gpe_xrupt_info *gpe_xrupt; struct acpi_gpe_xrupt_info *gpe_xrupt;
@ -320,7 +320,7 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
/* Now look at the individual GPEs in this byte register */ /* Now look at the individual GPEs in this byte register */
for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) { for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) {
gpe_event_info = &gpe_block->event_info[((acpi_size) i * gpe_event_info = &gpe_block->event_info[((acpi_size)i *
ACPI_GPE_REGISTER_WIDTH) ACPI_GPE_REGISTER_WIDTH)
+ j]; + j];

View File

@ -359,7 +359,7 @@ union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ev_install_space_handler(struct acpi_namespace_node * node, acpi_ev_install_space_handler(struct acpi_namespace_node *node,
acpi_adr_space_type space_id, acpi_adr_space_type space_id,
acpi_adr_space_handler handler, acpi_adr_space_handler handler,
acpi_adr_space_setup setup, void *context) acpi_adr_space_setup setup, void *context)

View File

@ -99,8 +99,7 @@ u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ev_queue_notify_request(struct acpi_namespace_node * node, acpi_ev_queue_notify_request(struct acpi_namespace_node *node, u32 notify_value)
u32 notify_value)
{ {
union acpi_operand_object *obj_desc; union acpi_operand_object *obj_desc;
union acpi_operand_object *handler_list_head = NULL; union acpi_operand_object *handler_list_head = NULL;

View File

@ -524,52 +524,6 @@ acpi_ev_attach_region(union acpi_operand_object *handler_obj,
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }
/*******************************************************************************
*
* FUNCTION: acpi_ev_associate_reg_method
*
* PARAMETERS: region_obj - Region object
*
* RETURN: Status
*
* DESCRIPTION: Find and associate _REG method to a region
*
******************************************************************************/
void acpi_ev_associate_reg_method(union acpi_operand_object *region_obj)
{
acpi_name *reg_name_ptr = (acpi_name *) METHOD_NAME__REG;
struct acpi_namespace_node *method_node;
struct acpi_namespace_node *node;
union acpi_operand_object *region_obj2;
acpi_status status;
ACPI_FUNCTION_TRACE(ev_associate_reg_method);
region_obj2 = acpi_ns_get_secondary_object(region_obj);
if (!region_obj2) {
return_VOID;
}
node = region_obj->region.node->parent;
/* Find any "_REG" method associated with this region definition */
status =
acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD,
&method_node);
if (ACPI_SUCCESS(status)) {
/*
* The _REG method is optional and there can be only one per region
* definition. This will be executed when the handler is attached
* or removed
*/
region_obj2->extra.method_REG = method_node;
}
return_VOID;
}
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_ev_execute_reg_method * FUNCTION: acpi_ev_execute_reg_method
@ -589,18 +543,42 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
struct acpi_evaluate_info *info; struct acpi_evaluate_info *info;
union acpi_operand_object *args[3]; union acpi_operand_object *args[3];
union acpi_operand_object *region_obj2; union acpi_operand_object *region_obj2;
const acpi_name *reg_name_ptr =
ACPI_CAST_PTR(acpi_name, METHOD_NAME__REG);
struct acpi_namespace_node *method_node;
struct acpi_namespace_node *node;
acpi_status status; acpi_status status;
ACPI_FUNCTION_TRACE(ev_execute_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_ACPI_STATUS(AE_NOT_EXIST); return_ACPI_STATUS(AE_NOT_EXIST);
} }
if (region_obj2->extra.method_REG == NULL || /*
region_obj->region.handler == NULL || * Find any "_REG" method associated with this region definition.
!acpi_gbl_namespace_initialized) { * The method should always be updated as this function may be
* invoked after a namespace change.
*/
node = region_obj->region.node->parent;
status =
acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD,
&method_node);
if (ACPI_SUCCESS(status)) {
/*
* The _REG method is optional and there can be only one per
* region definition. This will be executed when the handler is
* attached or removed.
*/
region_obj2->extra.method_REG = method_node;
}
if (region_obj2->extra.method_REG == NULL) {
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }

View File

@ -227,7 +227,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
/* Install a handler for this PCI root bridge */ /* Install a handler for this PCI root bridge */
status = acpi_install_address_space_handler((acpi_handle) pci_root_node, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL); status = acpi_install_address_space_handler((acpi_handle)pci_root_node, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
if (status == AE_SAME_HANDLER) { if (status == AE_SAME_HANDLER) {
/* /*
@ -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;

View File

@ -917,7 +917,7 @@ ACPI_EXPORT_SYMBOL(acpi_remove_gpe_block)
* the FADT-defined gpe blocks. Otherwise, the GPE block device. * the FADT-defined gpe blocks. Otherwise, the GPE block device.
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_get_gpe_device(u32 index, acpi_handle * gpe_device) acpi_status acpi_get_gpe_device(u32 index, acpi_handle *gpe_device)
{ {
struct acpi_gpe_device_info info; struct acpi_gpe_device_info info;
acpi_status status; acpi_status status;

View File

@ -0,0 +1,439 @@
/******************************************************************************
*
* Module Name: exconcat - Concatenate-type AML operators
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2016, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#include <acpi/acpi.h>
#include "accommon.h"
#include "acinterp.h"
#include "amlresrc.h"
#define _COMPONENT ACPI_EXECUTER
ACPI_MODULE_NAME("exconcat")
/* Local Prototypes */
static acpi_status
acpi_ex_convert_to_object_type_string(union acpi_operand_object *obj_desc,
union acpi_operand_object **result_desc);
/*******************************************************************************
*
* FUNCTION: acpi_ex_do_concatenate
*
* PARAMETERS: operand0 - First source object
* operand1 - Second source object
* actual_return_desc - Where to place the return object
* walk_state - Current walk state
*
* RETURN: Status
*
* DESCRIPTION: Concatenate two objects with the ACPI-defined conversion
* rules as necessary.
* NOTE:
* Per the ACPI spec (up to 6.1), Concatenate only supports Integer,
* String, and Buffer objects. However, we support all objects here
* as an extension. This improves the usefulness of both Concatenate
* and the Printf/Fprintf macros. The extension returns a string
* describing the object type for the other objects.
* 02/2016.
*
******************************************************************************/
acpi_status
acpi_ex_do_concatenate(union acpi_operand_object *operand0,
union acpi_operand_object *operand1,
union acpi_operand_object **actual_return_desc,
struct acpi_walk_state *walk_state)
{
union acpi_operand_object *local_operand0 = operand0;
union acpi_operand_object *local_operand1 = operand1;
union acpi_operand_object *temp_operand1 = NULL;
union acpi_operand_object *return_desc;
char *buffer;
acpi_object_type operand0_type;
acpi_object_type operand1_type;
acpi_status status;
ACPI_FUNCTION_TRACE(ex_do_concatenate);
/* Operand 0 preprocessing */
switch (operand0->common.type) {
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
operand0_type = operand0->common.type;
break;
default:
/* For all other types, get the "object type" string */
status =
acpi_ex_convert_to_object_type_string(operand0,
&local_operand0);
if (ACPI_FAILURE(status)) {
goto cleanup;
}
operand0_type = ACPI_TYPE_STRING;
break;
}
/* Operand 1 preprocessing */
switch (operand1->common.type) {
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
operand1_type = operand1->common.type;
break;
default:
/* For all other types, get the "object type" string */
status =
acpi_ex_convert_to_object_type_string(operand1,
&local_operand1);
if (ACPI_FAILURE(status)) {
goto cleanup;
}
operand1_type = ACPI_TYPE_STRING;
break;
}
/*
* Convert the second operand if necessary. The first operand (0)
* determines the type of the second operand (1) (See the Data Types
* section of the ACPI specification). Both object types are
* guaranteed to be either Integer/String/Buffer by the operand
* resolution mechanism.
*/
switch (operand0_type) {
case ACPI_TYPE_INTEGER:
status =
acpi_ex_convert_to_integer(local_operand1, &temp_operand1,
16);
break;
case ACPI_TYPE_BUFFER:
status =
acpi_ex_convert_to_buffer(local_operand1, &temp_operand1);
break;
case ACPI_TYPE_STRING:
switch (operand1_type) {
case ACPI_TYPE_INTEGER:
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
/* Other types have already been converted to string */
status =
acpi_ex_convert_to_string(local_operand1,
&temp_operand1,
ACPI_IMPLICIT_CONVERT_HEX);
break;
default:
status = AE_OK;
break;
}
break;
default:
ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
operand0->common.type));
status = AE_AML_INTERNAL;
}
if (ACPI_FAILURE(status)) {
goto cleanup;
}
/* Take care with any newly created operand objects */
if ((local_operand1 != operand1) && (local_operand1 != temp_operand1)) {
acpi_ut_remove_reference(local_operand1);
}
local_operand1 = temp_operand1;
/*
* Both operands are now known to be the same object type
* (Both are Integer, String, or Buffer), and we can now perform
* the concatenation.
*
* There are three cases to handle, as per the ACPI spec:
*
* 1) Two Integers concatenated to produce a new Buffer
* 2) Two Strings concatenated to produce a new String
* 3) Two Buffers concatenated to produce a new Buffer
*/
switch (operand0_type) {
case ACPI_TYPE_INTEGER:
/* Result of two Integers is a Buffer */
/* Need enough buffer space for two integers */
return_desc = acpi_ut_create_buffer_object((acpi_size)
ACPI_MUL_2
(acpi_gbl_integer_byte_width));
if (!return_desc) {
status = AE_NO_MEMORY;
goto cleanup;
}
buffer = (char *)return_desc->buffer.pointer;
/* Copy the first integer, LSB first */
memcpy(buffer, &operand0->integer.value,
acpi_gbl_integer_byte_width);
/* Copy the second integer (LSB first) after the first */
memcpy(buffer + acpi_gbl_integer_byte_width,
&local_operand1->integer.value,
acpi_gbl_integer_byte_width);
break;
case ACPI_TYPE_STRING:
/* Result of two Strings is a String */
return_desc = acpi_ut_create_string_object(((acpi_size)
local_operand0->
string.length +
local_operand1->
string.length));
if (!return_desc) {
status = AE_NO_MEMORY;
goto cleanup;
}
buffer = return_desc->string.pointer;
/* Concatenate the strings */
strcpy(buffer, local_operand0->string.pointer);
strcat(buffer, local_operand1->string.pointer);
break;
case ACPI_TYPE_BUFFER:
/* Result of two Buffers is a Buffer */
return_desc = acpi_ut_create_buffer_object(((acpi_size)
operand0->buffer.
length +
local_operand1->
buffer.length));
if (!return_desc) {
status = AE_NO_MEMORY;
goto cleanup;
}
buffer = (char *)return_desc->buffer.pointer;
/* Concatenate the buffers */
memcpy(buffer, operand0->buffer.pointer,
operand0->buffer.length);
memcpy(buffer + operand0->buffer.length,
local_operand1->buffer.pointer,
local_operand1->buffer.length);
break;
default:
/* Invalid object type, should not happen here */
ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
operand0->common.type));
status = AE_AML_INTERNAL;
goto cleanup;
}
*actual_return_desc = return_desc;
cleanup:
if (local_operand0 != operand0) {
acpi_ut_remove_reference(local_operand0);
}
if (local_operand1 != operand1) {
acpi_ut_remove_reference(local_operand1);
}
return_ACPI_STATUS(status);
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_convert_to_object_type_string
*
* PARAMETERS: obj_desc - Object to be converted
* return_desc - Where to place the return object
*
* RETURN: Status
*
* DESCRIPTION: Convert an object of arbitrary type to a string object that
* contains the namestring for the object. Used for the
* concatenate operator.
*
******************************************************************************/
static acpi_status
acpi_ex_convert_to_object_type_string(union acpi_operand_object *obj_desc,
union acpi_operand_object **result_desc)
{
union acpi_operand_object *return_desc;
const char *type_string;
type_string = acpi_ut_get_type_name(obj_desc->common.type);
return_desc = acpi_ut_create_string_object(((acpi_size)strlen(type_string) + 9)); /* 9 For "[ Object]" */
if (!return_desc) {
return (AE_NO_MEMORY);
}
strcpy(return_desc->string.pointer, "[");
strcat(return_desc->string.pointer, type_string);
strcat(return_desc->string.pointer, " Object]");
*result_desc = return_desc;
return (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_concat_template
*
* PARAMETERS: operand0 - First source object
* operand1 - Second source object
* actual_return_desc - Where to place the return object
* walk_state - Current walk state
*
* RETURN: Status
*
* DESCRIPTION: Concatenate two resource templates
*
******************************************************************************/
acpi_status
acpi_ex_concat_template(union acpi_operand_object *operand0,
union acpi_operand_object *operand1,
union acpi_operand_object **actual_return_desc,
struct acpi_walk_state *walk_state)
{
acpi_status status;
union acpi_operand_object *return_desc;
u8 *new_buf;
u8 *end_tag;
acpi_size length0;
acpi_size length1;
acpi_size new_length;
ACPI_FUNCTION_TRACE(ex_concat_template);
/*
* Find the end_tag descriptor in each resource template.
* Note1: returned pointers point TO the end_tag, not past it.
* Note2: zero-length buffers are allowed; treated like one end_tag
*/
/* Get the length of the first resource template */
status = acpi_ut_get_resource_end_tag(operand0, &end_tag);
if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status);
}
length0 = ACPI_PTR_DIFF(end_tag, operand0->buffer.pointer);
/* Get the length of the second resource template */
status = acpi_ut_get_resource_end_tag(operand1, &end_tag);
if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status);
}
length1 = ACPI_PTR_DIFF(end_tag, operand1->buffer.pointer);
/* Combine both lengths, minimum size will be 2 for end_tag */
new_length = length0 + length1 + sizeof(struct aml_resource_end_tag);
/* Create a new buffer object for the result (with one end_tag) */
return_desc = acpi_ut_create_buffer_object(new_length);
if (!return_desc) {
return_ACPI_STATUS(AE_NO_MEMORY);
}
/*
* Copy the templates to the new buffer, 0 first, then 1 follows. One
* end_tag descriptor is copied from Operand1.
*/
new_buf = return_desc->buffer.pointer;
memcpy(new_buf, operand0->buffer.pointer, length0);
memcpy(new_buf + length0, operand1->buffer.pointer, length1);
/* Insert end_tag and set the checksum to zero, means "ignore checksum" */
new_buf[new_length - 1] = 0;
new_buf[new_length - 2] = ACPI_RESOURCE_NAME_END_TAG | 1;
/* Return the completed resource template */
*actual_return_desc = return_desc;
return_ACPI_STATUS(AE_OK);
}

View File

@ -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();
if (acpi_gbl_group_module_level_code) {
acpi_ns_exec_module_code_list(); acpi_ns_exec_module_code_list();
}
acpi_ex_enter_interpreter(); acpi_ex_enter_interpreter();
/* /*

View File

@ -124,7 +124,9 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
* of ACPI 3.0) is that the to_integer() operator allows both decimal * 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);
} }
@ -439,7 +441,7 @@ acpi_ex_convert_to_string(union acpi_operand_object * obj_desc,
* Need enough space for one ASCII integer (plus null terminator) * Need enough space for one ASCII integer (plus null terminator)
*/ */
return_desc = return_desc =
acpi_ut_create_string_object((acpi_size) string_length); acpi_ut_create_string_object((acpi_size)string_length);
if (!return_desc) { if (!return_desc) {
return_ACPI_STATUS(AE_NO_MEMORY); return_ACPI_STATUS(AE_NO_MEMORY);
} }
@ -518,7 +520,7 @@ acpi_ex_convert_to_string(union acpi_operand_object * obj_desc,
} }
return_desc = return_desc =
acpi_ut_create_string_object((acpi_size) string_length); acpi_ut_create_string_object((acpi_size)string_length);
if (!return_desc) { if (!return_desc) {
return_ACPI_STATUS(AE_NO_MEMORY); return_ACPI_STATUS(AE_NO_MEMORY);
} }

View File

@ -394,7 +394,7 @@ acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state)
obj_desc->processor.proc_id = (u8) operand[1]->integer.value; obj_desc->processor.proc_id = (u8) operand[1]->integer.value;
obj_desc->processor.length = (u8) operand[3]->integer.value; obj_desc->processor.length = (u8) operand[3]->integer.value;
obj_desc->processor.address = obj_desc->processor.address =
(acpi_io_address) operand[2]->integer.value; (acpi_io_address)operand[2]->integer.value;
/* Install the processor object in the parent Node */ /* Install the processor object in the parent Node */

View File

@ -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,
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,
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,
* *
******************************************************************************/ ******************************************************************************/
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);
} }

View File

@ -126,7 +126,7 @@ acpi_ex_get_serial_access_length(u32 accessor_type, u32 access_length)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ex_read_data_from_field(struct acpi_walk_state * walk_state, acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
union acpi_operand_object *obj_desc, union acpi_operand_object *obj_desc,
union acpi_operand_object **ret_buffer_desc) union acpi_operand_object **ret_buffer_desc)
{ {
@ -233,7 +233,7 @@ acpi_ex_read_data_from_field(struct acpi_walk_state * walk_state,
* Note: Field.length is in bits. * Note: Field.length is in bits.
*/ */
length = length =
(acpi_size) ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->field.bit_length); (acpi_size)ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->field.bit_length);
if (length > acpi_gbl_integer_byte_width) { if (length > acpi_gbl_integer_byte_width) {

View File

@ -164,7 +164,7 @@ acpi_ex_setup_region(union acpi_operand_object *obj_desc,
if (ACPI_ROUND_UP(rgn_desc->region.length, if (ACPI_ROUND_UP(rgn_desc->region.length,
obj_desc->common_field. obj_desc->common_field.
access_byte_width) >= access_byte_width) >=
((acpi_size) obj_desc->common_field. ((acpi_size)obj_desc->common_field.
base_byte_offset + base_byte_offset +
obj_desc->common_field.access_byte_width + obj_desc->common_field.access_byte_width +
field_datum_byte_offset)) { field_datum_byte_offset)) {
@ -897,17 +897,9 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
access_bit_width = ACPI_MUL_8(obj_desc->common_field.access_byte_width); access_bit_width = ACPI_MUL_8(obj_desc->common_field.access_byte_width);
/* /* Create the bitmasks used for bit insertion */
* Create the bitmasks used for bit insertion.
* Note: This if/else is used to bypass compiler differences with the
* shift operator
*/
if (access_bit_width == ACPI_INTEGER_BIT_SIZE) {
width_mask = ACPI_UINT64_MAX;
} else {
width_mask = ACPI_MASK_BITS_ABOVE(access_bit_width);
}
width_mask = ACPI_MASK_BITS_ABOVE_64(access_bit_width);
mask = width_mask & mask = width_mask &
ACPI_MASK_BITS_BELOW(obj_desc->common_field.start_field_bit_offset); ACPI_MASK_BITS_BELOW(obj_desc->common_field.start_field_bit_offset);

View File

@ -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,
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

View File

@ -178,7 +178,7 @@ static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string)
for (index = 0; for (index = 0;
(index < ACPI_NAME_SIZE) (index < ACPI_NAME_SIZE)
&& (acpi_ut_valid_acpi_char(*aml_address, 0)); index++) { && (acpi_ut_valid_name_char(*aml_address, 0)); index++) {
char_buf[index] = *aml_address++; char_buf[index] = *aml_address++;
ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "%c\n", char_buf[index])); ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "%c\n", char_buf[index]));
} }

View File

@ -184,7 +184,7 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
/* Get the Integer values from the objects */ /* Get the Integer values from the objects */
index = operand[1]->integer.value; index = operand[1]->integer.value;
length = (acpi_size) operand[2]->integer.value; length = (acpi_size)operand[2]->integer.value;
/* /*
* If the index is beyond the length of the String/Buffer, or if the * If the index is beyond the length of the String/Buffer, or if the
@ -198,8 +198,8 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
else if ((index + length) > operand[0]->string.length) { else if ((index + length) > operand[0]->string.length) {
length = length =
(acpi_size) operand[0]->string.length - (acpi_size)operand[0]->string.length -
(acpi_size) index; (acpi_size)index;
} }
/* Strings always have a sub-pointer, not so for buffers */ /* Strings always have a sub-pointer, not so for buffers */
@ -209,7 +209,7 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
/* Always allocate a new buffer for the String */ /* Always allocate a new buffer for the String */
buffer = ACPI_ALLOCATE_ZEROED((acpi_size) length + 1); buffer = ACPI_ALLOCATE_ZEROED((acpi_size)length + 1);
if (!buffer) { if (!buffer) {
status = AE_NO_MEMORY; status = AE_NO_MEMORY;
goto cleanup; goto cleanup;

View File

@ -207,7 +207,7 @@ acpi_ex_do_match(u32 match_op,
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state * walk_state) acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state *walk_state)
{ {
union acpi_operand_object **operand = &walk_state->operands[0]; union acpi_operand_object **operand = &walk_state->operands[0];
union acpi_operand_object *return_desc = NULL; union acpi_operand_object *return_desc = NULL;

View File

@ -325,15 +325,15 @@ acpi_ex_system_io_space_handler(u32 function,
switch (function) { switch (function) {
case ACPI_READ: case ACPI_READ:
status = acpi_hw_read_port((acpi_io_address) address, status = acpi_hw_read_port((acpi_io_address)address,
&value32, bit_width); &value32, bit_width);
*value = value32; *value = value32;
break; break;
case ACPI_WRITE: case ACPI_WRITE:
status = acpi_hw_write_port((acpi_io_address) address, status = acpi_hw_write_port((acpi_io_address)address,
(u32) * value, bit_width); (u32)*value, bit_width);
break; break;
default: default:

View File

@ -93,7 +93,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
*/ */
node = *object_ptr; node = *object_ptr;
source_desc = acpi_ns_get_attached_object(node); source_desc = acpi_ns_get_attached_object(node);
entry_type = acpi_ns_get_type((acpi_handle) node); entry_type = acpi_ns_get_type((acpi_handle)node);
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]\n", ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]\n",
node, source_desc, node, source_desc,
@ -106,7 +106,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
node = ACPI_CAST_PTR(struct acpi_namespace_node, node->object); node = ACPI_CAST_PTR(struct acpi_namespace_node, node->object);
source_desc = acpi_ns_get_attached_object(node); source_desc = acpi_ns_get_attached_object(node);
entry_type = acpi_ns_get_type((acpi_handle) node); entry_type = acpi_ns_get_type((acpi_handle)node);
*object_ptr = node; *object_ptr = node;
} }

View File

@ -334,7 +334,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
acpi_status acpi_status
acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
union acpi_operand_object *operand, union acpi_operand_object *operand,
acpi_object_type * return_type, acpi_object_type *return_type,
union acpi_operand_object **return_desc) union acpi_operand_object **return_desc)
{ {
union acpi_operand_object *obj_desc = ACPI_CAST_PTR(void, operand); union acpi_operand_object *obj_desc = ACPI_CAST_PTR(void, operand);

View File

@ -131,8 +131,8 @@ acpi_ex_check_object_type(acpi_object_type type_needed,
acpi_status acpi_status
acpi_ex_resolve_operands(u16 opcode, acpi_ex_resolve_operands(u16 opcode,
union acpi_operand_object ** stack_ptr, union acpi_operand_object **stack_ptr,
struct acpi_walk_state * walk_state) struct acpi_walk_state *walk_state)
{ {
union acpi_operand_object *obj_desc; union acpi_operand_object *obj_desc;
acpi_status status = AE_OK; acpi_status status = AE_OK;

View File

@ -188,7 +188,7 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
* Clear old string and copy in the new one * Clear old string and copy in the new one
*/ */
memset(target_desc->string.pointer, 0, memset(target_desc->string.pointer, 0,
(acpi_size) target_desc->string.length + 1); (acpi_size)target_desc->string.length + 1);
memcpy(target_desc->string.pointer, buffer, length); memcpy(target_desc->string.pointer, buffer, length);
} else { } else {
/* /*
@ -204,7 +204,7 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
} }
target_desc->string.pointer = target_desc->string.pointer =
ACPI_ALLOCATE_ZEROED((acpi_size) length + 1); ACPI_ALLOCATE_ZEROED((acpi_size)length + 1);
if (!target_desc->string.pointer) { if (!target_desc->string.pointer) {
return_ACPI_STATUS(AE_NO_MEMORY); return_ACPI_STATUS(AE_NO_MEMORY);

View File

@ -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)
* 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)
* 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])
* *
* 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.
* *

View File

@ -166,7 +166,7 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info * gpe_event_info) acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info *gpe_event_info)
{ {
struct acpi_gpe_register_info *gpe_register_info; struct acpi_gpe_register_info *gpe_register_info;
acpi_status status; acpi_status status;
@ -206,7 +206,7 @@ acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info * gpe_event_info)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info, acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
acpi_event_status *event_status) acpi_event_status *event_status)
{ {
u32 in_byte; u32 in_byte;
@ -391,7 +391,7 @@ acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
acpi_status acpi_status
acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info, acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
struct acpi_gpe_block_info * gpe_block, struct acpi_gpe_block_info *gpe_block,
void *context) void *context)
{ {
u32 i; u32 i;

View File

@ -51,6 +51,10 @@ ACPI_MODULE_NAME("hwregs")
#if (!ACPI_REDUCED_HARDWARE) #if (!ACPI_REDUCED_HARDWARE)
/* Local Prototypes */ /* Local Prototypes */
static u8
acpi_hw_get_access_bit_width(struct acpi_generic_address *reg,
u8 max_bit_width);
static acpi_status static acpi_status
acpi_hw_read_multiple(u32 *value, acpi_hw_read_multiple(u32 *value,
struct acpi_generic_address *register_a, struct acpi_generic_address *register_a,
@ -63,6 +67,48 @@ acpi_hw_write_multiple(u32 value,
#endif /* !ACPI_REDUCED_HARDWARE */ #endif /* !ACPI_REDUCED_HARDWARE */
/******************************************************************************
*
* FUNCTION: acpi_hw_get_access_bit_width
*
* PARAMETERS: reg - GAS register structure
* max_bit_width - Max bit_width supported (32 or 64)
*
* RETURN: Status
*
* DESCRIPTION: Obtain optimal access bit width
*
******************************************************************************/
static u8
acpi_hw_get_access_bit_width(struct acpi_generic_address *reg, u8 max_bit_width)
{
u64 address;
if (!reg->access_width) {
/*
* Detect old register descriptors where only the bit_width field
* makes senses. The target address is copied to handle possible
* alignment issues.
*/
ACPI_MOVE_64_TO_64(&address, &reg->address);
if (!reg->bit_offset && reg->bit_width &&
ACPI_IS_POWER_OF_TWO(reg->bit_width) &&
ACPI_IS_ALIGNED(reg->bit_width, 8) &&
ACPI_IS_ALIGNED(address, reg->bit_width)) {
return (reg->bit_width);
} else {
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
return (32);
} else {
return (max_bit_width);
}
}
} else {
return (1 << (reg->access_width + 2));
}
}
/****************************************************************************** /******************************************************************************
* *
* FUNCTION: acpi_hw_validate_register * FUNCTION: acpi_hw_validate_register
@ -83,6 +129,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 +157,25 @@ 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 = acpi_hw_get_access_bit_width(reg, max_bit_width);
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);
@ -145,17 +195,19 @@ acpi_hw_validate_register(struct acpi_generic_address *reg,
* 64-bit values is not needed. * 64-bit values is not needed.
* *
* LIMITATIONS: <These limitations also apply to acpi_hw_write> * LIMITATIONS: <These limitations also apply to acpi_hw_write>
* bit_width must be exactly 8, 16, or 32.
* space_ID must be system_memory or system_IO. * space_ID must be system_memory or system_IO.
* bit_offset and access_width are currently ignored, as there has
* not been a need to implement these.
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_hw_read(u32 *value, struct acpi_generic_address *reg) acpi_status acpi_hw_read(u32 *value, struct acpi_generic_address *reg)
{ {
u64 address; u64 address;
u8 access_width;
u32 bit_width;
u8 bit_offset;
u64 value64; u64 value64;
u32 value32;
u8 index;
acpi_status status; acpi_status status;
ACPI_FUNCTION_NAME(hw_read); ACPI_FUNCTION_NAME(hw_read);
@ -167,28 +219,75 @@ acpi_status acpi_hw_read(u32 *value, struct acpi_generic_address *reg)
return (status); return (status);
} }
/* Initialize entire 32-bit return value to zero */ /*
* Initialize entire 32-bit return value to zero, convert access_width
* into number of bits based
*/
*value = 0; *value = 0;
access_width = acpi_hw_get_access_bit_width(reg, 32);
bit_width = reg->bit_offset + reg->bit_width;
bit_offset = reg->bit_offset;
/* /*
* Two address spaces supported: Memory or IO. PCI_Config is * Two address spaces supported: Memory or IO. PCI_Config is
* not supported here because the GAS structure is insufficient * not supported here because the GAS structure is insufficient
*/ */
index = 0;
while (bit_width) {
if (bit_offset >= access_width) {
value32 = 0;
bit_offset -= access_width;
} else {
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) { if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
status = acpi_os_read_memory((acpi_physical_address) status =
address, &value64, reg->bit_width); acpi_os_read_memory((acpi_physical_address)
address +
*value = (u32)value64; index *
ACPI_DIV_8
(access_width),
&value64, access_width);
value32 = (u32)value64;
} else { /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */ } else { /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
status = acpi_hw_read_port((acpi_io_address) status = acpi_hw_read_port((acpi_io_address)
address, value, reg->bit_width); address +
index *
ACPI_DIV_8
(access_width),
&value32,
access_width);
}
/*
* Use offset style bit masks because:
* bit_offset < access_width/bit_width < access_width, and
* access_width is ensured to be less than 32-bits by
* acpi_hw_validate_register().
*/
if (bit_offset) {
value32 &= ACPI_MASK_BITS_BELOW(bit_offset);
bit_offset = 0;
}
if (bit_width < access_width) {
value32 &= ACPI_MASK_BITS_ABOVE(bit_width);
}
}
/*
* Use offset style bit writes because "Index * AccessWidth" is
* ensured to be less than 32-bits by acpi_hw_validate_register().
*/
ACPI_SET_BITS(value, index * access_width,
ACPI_MASK_BITS_ABOVE_32(access_width), value32);
bit_width -=
bit_width > access_width ? access_width : bit_width;
index++;
} }
ACPI_DEBUG_PRINT((ACPI_DB_IO, ACPI_DEBUG_PRINT((ACPI_DB_IO,
"Read: %8.8X width %2d from %8.8X%8.8X (%s)\n", "Read: %8.8X width %2d from %8.8X%8.8X (%s)\n",
*value, reg->bit_width, ACPI_FORMAT_UINT64(address), *value, access_width, ACPI_FORMAT_UINT64(address),
acpi_ut_get_region_name(reg->space_id))); acpi_ut_get_region_name(reg->space_id)));
return (status); return (status);
@ -212,6 +311,12 @@ acpi_status acpi_hw_read(u32 *value, struct acpi_generic_address *reg)
acpi_status acpi_hw_write(u32 value, struct acpi_generic_address *reg) acpi_status acpi_hw_write(u32 value, struct acpi_generic_address *reg)
{ {
u64 address; u64 address;
u8 access_width;
u32 bit_width;
u8 bit_offset;
u64 value64;
u32 new_value32, old_value32;
u8 index;
acpi_status status; acpi_status status;
ACPI_FUNCTION_NAME(hw_write); ACPI_FUNCTION_NAME(hw_write);
@ -223,23 +328,145 @@ acpi_status acpi_hw_write(u32 value, struct acpi_generic_address *reg)
return (status); return (status);
} }
/* Convert access_width into number of bits based */
access_width = acpi_hw_get_access_bit_width(reg, 32);
bit_width = reg->bit_offset + reg->bit_width;
bit_offset = reg->bit_offset;
/* /*
* Two address spaces supported: Memory or IO. PCI_Config is * Two address spaces supported: Memory or IO. PCI_Config is
* not supported here because the GAS structure is insufficient * not supported here because the GAS structure is insufficient
*/ */
index = 0;
while (bit_width) {
/*
* Use offset style bit reads because "Index * AccessWidth" is
* ensured to be less than 32-bits by acpi_hw_validate_register().
*/
new_value32 = ACPI_GET_BITS(&value, index * access_width,
ACPI_MASK_BITS_ABOVE_32
(access_width));
if (bit_offset >= access_width) {
bit_offset -= access_width;
} else {
/*
* Use offset style bit masks because access_width is ensured
* to be less than 32-bits by acpi_hw_validate_register() and
* bit_offset/bit_width is less than access_width here.
*/
if (bit_offset) {
new_value32 &= ACPI_MASK_BITS_BELOW(bit_offset);
}
if (bit_width < access_width) {
new_value32 &= ACPI_MASK_BITS_ABOVE(bit_width);
}
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) { if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
status = acpi_os_write_memory((acpi_physical_address) if (bit_offset || bit_width < access_width) {
address, (u64)value, /*
reg->bit_width); * Read old values in order not to modify the bits that
* are beyond the register bit_width/bit_offset setting.
*/
status =
acpi_os_read_memory((acpi_physical_address)
address +
index *
ACPI_DIV_8
(access_width),
&value64,
access_width);
old_value32 = (u32)value64;
/*
* Use offset style bit masks because access_width is
* ensured to be less than 32-bits by
* acpi_hw_validate_register() and bit_offset/bit_width is
* less than access_width here.
*/
if (bit_offset) {
old_value32 &=
ACPI_MASK_BITS_ABOVE
(bit_offset);
bit_offset = 0;
}
if (bit_width < access_width) {
old_value32 &=
ACPI_MASK_BITS_BELOW
(bit_width);
}
new_value32 |= old_value32;
}
value64 = (u64)new_value32;
status =
acpi_os_write_memory((acpi_physical_address)
address +
index *
ACPI_DIV_8
(access_width),
value64, access_width);
} else { /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */ } else { /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
if (bit_offset || bit_width < access_width) {
/*
* Read old values in order not to modify the bits that
* are beyond the register bit_width/bit_offset setting.
*/
status =
acpi_hw_read_port((acpi_io_address)
address +
index *
ACPI_DIV_8
(access_width),
&old_value32,
access_width);
/*
* Use offset style bit masks because access_width is
* ensured to be less than 32-bits by
* acpi_hw_validate_register() and bit_offset/bit_width is
* less than access_width here.
*/
if (bit_offset) {
old_value32 &=
ACPI_MASK_BITS_ABOVE
(bit_offset);
bit_offset = 0;
}
if (bit_width < access_width) {
old_value32 &=
ACPI_MASK_BITS_BELOW
(bit_width);
}
new_value32 |= old_value32;
}
status = acpi_hw_write_port((acpi_io_address) status = acpi_hw_write_port((acpi_io_address)
address, value, reg->bit_width); address +
index *
ACPI_DIV_8
(access_width),
new_value32,
access_width);
}
}
/*
* Index * access_width is ensured to be less than 32-bits by
* acpi_hw_validate_register().
*/
bit_width -=
bit_width > access_width ? access_width : bit_width;
index++;
} }
ACPI_DEBUG_PRINT((ACPI_DB_IO, ACPI_DEBUG_PRINT((ACPI_DB_IO,
"Wrote: %8.8X width %2d to %8.8X%8.8X (%s)\n", "Wrote: %8.8X width %2d to %8.8X%8.8X (%s)\n",
value, reg->bit_width, ACPI_FORMAT_UINT64(address), value, access_width, ACPI_FORMAT_UINT64(address),
acpi_ut_get_region_name(reg->space_id))); acpi_ut_get_region_name(reg->space_id)));
return (status); return (status);

View File

@ -91,8 +91,7 @@ acpi_status acpi_reset(void)
* compatibility with other ACPI implementations that have allowed * compatibility with other ACPI implementations that have allowed
* BIOS code with bad register width values to go unnoticed. * BIOS code with bad register width values to go unnoticed.
*/ */
status = status = acpi_os_write_port((acpi_io_address)reset_reg->address,
acpi_os_write_port((acpi_io_address) reset_reg->address,
acpi_gbl_FADT.reset_value, acpi_gbl_FADT.reset_value,
ACPI_RESET_REGISTER_WIDTH); ACPI_RESET_REGISTER_WIDTH);
} else { } else {
@ -504,9 +503,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)) {

View File

@ -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",

View File

@ -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);
} }
@ -317,7 +318,7 @@ acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ns_convert_to_unicode(struct acpi_namespace_node * scope, acpi_ns_convert_to_unicode(struct acpi_namespace_node *scope,
union acpi_operand_object *original_object, union acpi_operand_object *original_object,
union acpi_operand_object **return_object) union acpi_operand_object **return_object)
{ {
@ -384,7 +385,7 @@ acpi_ns_convert_to_unicode(struct acpi_namespace_node * scope,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ns_convert_to_resource(struct acpi_namespace_node * scope, acpi_ns_convert_to_resource(struct acpi_namespace_node *scope,
union acpi_operand_object *original_object, union acpi_operand_object *original_object,
union acpi_operand_object **return_object) union acpi_operand_object **return_object)
{ {
@ -463,7 +464,7 @@ acpi_ns_convert_to_resource(struct acpi_namespace_node * scope,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ns_convert_to_reference(struct acpi_namespace_node * scope, acpi_ns_convert_to_reference(struct acpi_namespace_node *scope,
union acpi_operand_object *original_object, union acpi_operand_object *original_object,
union acpi_operand_object **return_object) union acpi_operand_object **return_object)
{ {

View File

@ -81,7 +81,7 @@ acpi_ns_get_max_depth(acpi_handle obj_handle,
* *
******************************************************************************/ ******************************************************************************/
void acpi_ns_print_pathname(u32 num_segments, char *pathname) void acpi_ns_print_pathname(u32 num_segments, const char *pathname)
{ {
u32 i; u32 i;
@ -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)
******************************************************************************/ ******************************************************************************/
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)
acpi_os_printf("\n"); acpi_os_printf("\n");
return_VOID; return_VOID;
} }
#endif
/******************************************************************************* /*******************************************************************************
* *

View File

@ -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)
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)
* 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,8 +620,11 @@ 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.
*/ */
if (!ACPI_COMPARE_NAME(device_node->name.ascii, "_SB_") ||
device_node->parent != acpi_gbl_root_node) {
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
(ACPI_TYPE_METHOD, device_node, METHOD_NAME__INI)); (ACPI_TYPE_METHOD, device_node,
METHOD_NAME__INI));
memset(info, 0, sizeof(struct acpi_evaluate_info)); memset(info, 0, sizeof(struct acpi_evaluate_info));
info->prefix_node = device_node; info->prefix_node = device_node;
@ -602,7 +633,6 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
info->flags = ACPI_IGNORE_RETURN_VALUE; info->flags = ACPI_IGNORE_RETURN_VALUE;
status = acpi_ns_evaluate(info); status = acpi_ns_evaluate(info);
if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) {
walk_info->num_INI++; walk_info->num_INI++;
} }
@ -614,11 +644,13 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
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,
"during %s._INI execution",
scope_name)); scope_name));
ACPI_FREE(scope_name); ACPI_FREE(scope_name);
} }
#endif #endif
}
/* Ignore errors from above */ /* Ignore errors from above */

View File

@ -123,8 +123,8 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); (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);
} }

View File

@ -113,7 +113,7 @@ acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node)
acpi_status acpi_status
acpi_ns_handle_to_pathname(acpi_handle target_handle, acpi_ns_handle_to_pathname(acpi_handle target_handle,
struct acpi_buffer * buffer, u8 no_trailing) struct acpi_buffer *buffer, u8 no_trailing)
{ {
acpi_status status; acpi_status status;
struct acpi_namespace_node *node; struct acpi_namespace_node *node;

View File

@ -399,7 +399,7 @@ acpi_ns_attach_data(struct acpi_namespace_node *node,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ns_detach_data(struct acpi_namespace_node * node, acpi_ns_detach_data(struct acpi_namespace_node *node,
acpi_object_handler handler) acpi_object_handler handler)
{ {
union acpi_operand_object *obj_desc; union acpi_operand_object *obj_desc;
@ -444,7 +444,7 @@ acpi_ns_detach_data(struct acpi_namespace_node * node,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ns_get_attached_data(struct acpi_namespace_node * node, acpi_ns_get_attached_data(struct acpi_namespace_node *node,
acpi_object_handler handler, void **data) acpi_object_handler handler, void **data)
{ {
union acpi_operand_object *obj_desc; union acpi_operand_object *obj_desc;

View File

@ -62,6 +62,10 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info,
u32 count1, u32 count1,
u8 type2, u32 count2, u32 start_index); u8 type2, u32 count2, u32 start_index);
static acpi_status
acpi_ns_custom_package(struct acpi_evaluate_info *info,
union acpi_operand_object **elements, u32 count);
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_ns_check_package * FUNCTION: acpi_ns_check_package
@ -135,6 +139,11 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
* PTYPE2 packages contain subpackages * PTYPE2 packages contain subpackages
*/ */
switch (package->ret_info.type) { switch (package->ret_info.type) {
case ACPI_PTYPE_CUSTOM:
status = acpi_ns_custom_package(info, elements, count);
break;
case ACPI_PTYPE1_FIXED: case ACPI_PTYPE1_FIXED:
/* /*
* The package count is fixed and there are no subpackages * The package count is fixed and there are no subpackages
@ -179,6 +188,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 +235,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
return (status); return (status);
} }
} }
elements++; elements++;
} }
break; break;
@ -569,11 +580,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
@ -620,6 +633,83 @@ package_too_small:
return (AE_AML_OPERAND_VALUE); return (AE_AML_OPERAND_VALUE);
} }
/*******************************************************************************
*
* FUNCTION: acpi_ns_custom_package
*
* PARAMETERS: info - Method execution information block
* elements - Pointer to the package elements array
* count - Element count for the package
*
* RETURN: Status
*
* DESCRIPTION: Check a returned package object for the correct count and
* correct type of all sub-objects.
*
* NOTE: Currently used for the _BIX method only. When needed for two or more
* methods, probably a detect/dispatch mechanism will be required.
*
******************************************************************************/
static acpi_status
acpi_ns_custom_package(struct acpi_evaluate_info *info,
union acpi_operand_object **elements, u32 count)
{
u32 expected_count;
u32 version;
acpi_status status = AE_OK;
ACPI_FUNCTION_NAME(ns_custom_package);
/* Get version number, must be Integer */
if ((*elements)->common.type != ACPI_TYPE_INTEGER) {
ACPI_WARN_PREDEFINED((AE_INFO, info->full_pathname,
info->node_flags,
"Return Package has invalid object type for version number"));
return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
}
version = (u32)(*elements)->integer.value;
expected_count = 21; /* Version 1 */
if (version == 0) {
expected_count = 20; /* Version 0 */
}
if (count < expected_count) {
ACPI_WARN_PREDEFINED((AE_INFO, info->full_pathname,
info->node_flags,
"Return Package is too small - found %u elements, expected %u",
count, expected_count));
return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
} else if (count > expected_count) {
ACPI_DEBUG_PRINT((ACPI_DB_REPAIR,
"%s: Return Package is larger than needed - "
"found %u, expected %u\n",
info->full_pathname, count, expected_count));
}
/* Validate all elements of the returned package */
status = acpi_ns_check_package_elements(info, elements,
ACPI_RTYPE_INTEGER, 16,
ACPI_RTYPE_STRING, 4, 0);
if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status);
}
/* Version 1 has a single trailing integer */
if (version > 0) {
status = acpi_ns_check_package_elements(info, elements + 20,
ACPI_RTYPE_INTEGER, 1,
0, 0, 20);
}
return_ACPI_STATUS(status);
}
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_ns_check_package_elements * FUNCTION: acpi_ns_check_package_elements
@ -661,6 +751,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 +762,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++;
} }

View File

@ -399,7 +399,7 @@ static const struct acpi_simple_repair_info *acpi_ns_match_simple_repair(struct
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ns_repair_null_element(struct acpi_evaluate_info * info, acpi_ns_repair_null_element(struct acpi_evaluate_info *info,
u32 expected_btypes, u32 expected_btypes,
u32 package_index, u32 package_index,
union acpi_operand_object **return_object_ptr) union acpi_operand_object **return_object_ptr)

View File

@ -54,9 +54,9 @@ ACPI_MODULE_NAME("nsrepair2")
* be repaired on a per-name basis. * be repaired on a per-name basis.
*/ */
typedef typedef
acpi_status(*acpi_repair_function) (struct acpi_evaluate_info * info, acpi_status (*acpi_repair_function) (struct acpi_evaluate_info * info,
union acpi_operand_object union acpi_operand_object **
**return_object_ptr); return_object_ptr);
typedef struct acpi_repair_info { typedef struct acpi_repair_info {
char name[ACPI_NAME_SIZE]; char name[ACPI_NAME_SIZE];

View File

@ -272,11 +272,11 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
result = &internal_name[i]; result = &internal_name[i];
} else if (num_segments == 2) { } else if (num_segments == 2) {
internal_name[i] = AML_DUAL_NAME_PREFIX; internal_name[i] = AML_DUAL_NAME_PREFIX;
result = &internal_name[(acpi_size) i + 1]; result = &internal_name[(acpi_size)i + 1];
} else { } else {
internal_name[i] = AML_MULTI_NAME_PREFIX_OP; internal_name[i] = AML_MULTI_NAME_PREFIX_OP;
internal_name[(acpi_size) i + 1] = (char)num_segments; internal_name[(acpi_size)i + 1] = (char)num_segments;
result = &internal_name[(acpi_size) i + 2]; result = &internal_name[(acpi_size)i + 2];
} }
} }
@ -456,7 +456,7 @@ acpi_ns_externalize_name(u32 internal_name_length,
names_index = prefix_length + 2; names_index = prefix_length + 2;
num_segments = (u8) num_segments = (u8)
internal_name[(acpi_size) prefix_length + 1]; internal_name[(acpi_size)prefix_length + 1];
break; break;
case AML_DUAL_NAME_PREFIX: case AML_DUAL_NAME_PREFIX:

View File

@ -256,7 +256,7 @@ acpi_evaluate_object(acpi_handle handle,
* Allocate a new parameter block for the internal objects * Allocate a new parameter block for the internal objects
* Add 1 to count to allow for null terminated internal list * Add 1 to count to allow for null terminated internal list
*/ */
info->parameters = ACPI_ALLOCATE_ZEROED(((acpi_size) info-> info->parameters = ACPI_ALLOCATE_ZEROED(((acpi_size)info->
param_count + param_count +
1) * sizeof(void *)); 1) * sizeof(void *));
if (!info->parameters) { if (!info->parameters) {
@ -280,13 +280,12 @@ acpi_evaluate_object(acpi_handle handle,
info->parameters[info->param_count] = NULL; info->parameters[info->param_count] = NULL;
} }
#if 0 #ifdef _FUTURE_FEATURE
/* /*
* Begin incoming argument count analysis. Check for too few args * Begin incoming argument count analysis. Check for too few args
* and too many args. * and too many args.
*/ */
switch (acpi_ns_get_type(info->node)) { switch (acpi_ns_get_type(info->node)) {
case ACPI_TYPE_METHOD: case ACPI_TYPE_METHOD:
@ -370,10 +369,15 @@ acpi_evaluate_object(acpi_handle handle,
* If we are expecting a return value, and all went well above, * If we are expecting a return value, and all went well above,
* copy the return value to an external object. * copy the return value to an external object.
*/ */
if (return_buffer) { if (!return_buffer) {
goto cleanup_return_object;
}
if (!info->return_object) { if (!info->return_object) {
return_buffer->length = 0; return_buffer->length = 0;
} else { goto cleanup;
}
if (ACPI_GET_DESCRIPTOR_TYPE(info->return_object) == if (ACPI_GET_DESCRIPTOR_TYPE(info->return_object) ==
ACPI_DESC_TYPE_NAMED) { ACPI_DESC_TYPE_NAMED) {
/* /*
@ -389,7 +393,9 @@ acpi_evaluate_object(acpi_handle handle,
return_buffer->length = 0; return_buffer->length = 0;
} }
if (ACPI_SUCCESS(status)) { if (ACPI_FAILURE(status)) {
goto cleanup_return_object;
}
/* Dereference Index and ref_of references */ /* Dereference Index and ref_of references */
@ -397,16 +403,13 @@ acpi_evaluate_object(acpi_handle handle,
/* Get the size of the returned object */ /* Get the size of the returned object */
status = status = acpi_ut_get_object_size(info->return_object,
acpi_ut_get_object_size(info->return_object,
&buffer_space_needed); &buffer_space_needed);
if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) {
/* Validate/Allocate/Clear caller buffer */ /* Validate/Allocate/Clear caller buffer */
status = status = acpi_ut_initialize_buffer(return_buffer,
acpi_ut_initialize_buffer
(return_buffer,
buffer_space_needed); buffer_space_needed);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
/* /*
@ -415,22 +418,18 @@ acpi_evaluate_object(acpi_handle handle,
*/ */
ACPI_DEBUG_PRINT((ACPI_DB_INFO, ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"Needed buffer size %X, %s\n", "Needed buffer size %X, %s\n",
(u32) (u32)buffer_space_needed,
buffer_space_needed, acpi_format_exception(status)));
acpi_format_exception
(status)));
} else { } else {
/* We have enough space for the object, build it */ /* We have enough space for the object, build it */
status = status =
acpi_ut_copy_iobject_to_eobject acpi_ut_copy_iobject_to_eobject(info->return_object,
(info->return_object,
return_buffer); return_buffer);
} }
} }
}
} cleanup_return_object:
}
if (info->return_object) { if (info->return_object) {
/* /*

View File

@ -78,7 +78,7 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest,
acpi_status acpi_status
acpi_get_handle(acpi_handle parent, acpi_get_handle(acpi_handle parent,
acpi_string pathname, acpi_handle * ret_handle) acpi_string pathname, acpi_handle *ret_handle)
{ {
acpi_status status; acpi_status status;
struct acpi_namespace_node *node = NULL; struct acpi_namespace_node *node = NULL;
@ -155,7 +155,7 @@ ACPI_EXPORT_SYMBOL(acpi_get_handle)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer) acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer *buffer)
{ {
acpi_status status; acpi_status status;
struct acpi_namespace_node *node; struct acpi_namespace_node *node;
@ -448,7 +448,7 @@ acpi_get_object_info(acpi_handle handle,
/* Point past the CID PNP_DEVICE_ID array */ /* Point past the CID PNP_DEVICE_ID array */
next_id_string += next_id_string +=
((acpi_size) cid_list->count * ((acpi_size)cid_list->count *
sizeof(struct acpi_pnp_device_id)); sizeof(struct acpi_pnp_device_id));
} }

View File

@ -63,7 +63,7 @@ ACPI_MODULE_NAME("nsxfobj")
* DESCRIPTION: This routine returns the type associatd with a particular handle * DESCRIPTION: This routine returns the type associatd with a particular handle
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_get_type(acpi_handle handle, acpi_object_type * ret_type) acpi_status acpi_get_type(acpi_handle handle, acpi_object_type *ret_type)
{ {
struct acpi_namespace_node *node; struct acpi_namespace_node *node;
acpi_status status; acpi_status status;
@ -115,7 +115,7 @@ ACPI_EXPORT_SYMBOL(acpi_get_type)
* Handle. * Handle.
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_get_parent(acpi_handle handle, acpi_handle * ret_handle) acpi_status acpi_get_parent(acpi_handle handle, acpi_handle *ret_handle)
{ {
struct acpi_namespace_node *node; struct acpi_namespace_node *node;
struct acpi_namespace_node *parent_node; struct acpi_namespace_node *parent_node;
@ -183,7 +183,7 @@ ACPI_EXPORT_SYMBOL(acpi_get_parent)
acpi_status acpi_status
acpi_get_next_object(acpi_object_type type, acpi_get_next_object(acpi_object_type type,
acpi_handle parent, acpi_handle parent,
acpi_handle child, acpi_handle * ret_handle) acpi_handle child, acpi_handle *ret_handle)
{ {
acpi_status status; acpi_status status;
struct acpi_namespace_node *node; struct acpi_namespace_node *node;

View File

@ -87,7 +87,7 @@ acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state)
* used to encode the package length, either 0,1,2, or 3 * used to encode the package length, either 0,1,2, or 3
*/ */
byte_count = (aml[0] >> 6); byte_count = (aml[0] >> 6);
parser_state->aml += ((acpi_size) byte_count + 1); parser_state->aml += ((acpi_size)byte_count + 1);
/* Get bytes 3, 2, 1 as needed */ /* Get bytes 3, 2, 1 as needed */

View File

@ -158,7 +158,7 @@ const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
* *
******************************************************************************/ ******************************************************************************/
char *acpi_ps_get_opcode_name(u16 opcode) const char *acpi_ps_get_opcode_name(u16 opcode)
{ {
#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT) #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)

View File

@ -130,8 +130,8 @@ u16 acpi_ps_peek_opcode(struct acpi_parse_state * parser_state)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ps_complete_this_op(struct acpi_walk_state * walk_state, acpi_ps_complete_this_op(struct acpi_walk_state *walk_state,
union acpi_parse_object * op) union acpi_parse_object *op)
{ {
union acpi_parse_object *prev; union acpi_parse_object *prev;
union acpi_parse_object *next; union acpi_parse_object *next;

View File

@ -128,7 +128,7 @@ union acpi_parse_object *acpi_ps_alloc_op(u16 opcode, u8 *aml)
if (op_info->flags & AML_DEFER) { if (op_info->flags & AML_DEFER) {
flags = ACPI_PARSEOP_DEFERRED; flags = ACPI_PARSEOP_DEFERRED;
} else if (op_info->flags & AML_NAMED) { } else if (op_info->flags & AML_NAMED) {
flags = ACPI_PARSEOP_NAMED; flags = ACPI_PARSEOP_NAMED_OBJECT;
} else if (opcode == AML_INT_BYTELIST_OP) { } else if (opcode == AML_INT_BYTELIST_OP) {
flags = ACPI_PARSEOP_BYTELIST; flags = ACPI_PARSEOP_BYTELIST;
} }

View File

@ -115,7 +115,7 @@ acpi_debug_trace(const char *name, u32 debug_level, u32 debug_layer, u32 flags)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_ps_execute_method(struct acpi_evaluate_info * info) acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
{ {
acpi_status status; acpi_status status;
union acpi_parse_object *op; union acpi_parse_object *op;

View File

@ -112,7 +112,7 @@ acpi_rs_struct_option_length(struct acpi_resource_source *resource_source)
* resource_source_index (1). * resource_source_index (1).
*/ */
if (resource_source->string_ptr) { if (resource_source->string_ptr) {
return ((acpi_rs_length) (resource_source->string_length + 1)); return ((acpi_rs_length)(resource_source->string_length + 1));
} }
return (0); return (0);
@ -188,7 +188,7 @@ acpi_rs_stream_option_length(u32 resource_length,
acpi_status acpi_status
acpi_rs_get_aml_length(struct acpi_resource *resource, acpi_rs_get_aml_length(struct acpi_resource *resource,
acpi_size resource_list_size, acpi_size * size_needed) acpi_size resource_list_size, acpi_size *size_needed)
{ {
acpi_size aml_size_needed = 0; acpi_size aml_size_needed = 0;
struct acpi_resource *resource_end; struct acpi_resource *resource_end;
@ -278,7 +278,7 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
* 16-Bit Address Resource: * 16-Bit Address Resource:
* Add the size of the optional resource_source info * Add the size of the optional resource_source info
*/ */
total_size = (acpi_rs_length) (total_size + total_size = (acpi_rs_length)(total_size +
acpi_rs_struct_option_length acpi_rs_struct_option_length
(&resource->data. (&resource->data.
address16. address16.
@ -290,7 +290,7 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
* 32-Bit Address Resource: * 32-Bit Address Resource:
* Add the size of the optional resource_source info * Add the size of the optional resource_source info
*/ */
total_size = (acpi_rs_length) (total_size + total_size = (acpi_rs_length)(total_size +
acpi_rs_struct_option_length acpi_rs_struct_option_length
(&resource->data. (&resource->data.
address32. address32.
@ -302,7 +302,7 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
* 64-Bit Address Resource: * 64-Bit Address Resource:
* Add the size of the optional resource_source info * Add the size of the optional resource_source info
*/ */
total_size = (acpi_rs_length) (total_size + total_size = (acpi_rs_length)(total_size +
acpi_rs_struct_option_length acpi_rs_struct_option_length
(&resource->data. (&resource->data.
address64. address64.
@ -315,7 +315,7 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
* Add the size of each additional optional interrupt beyond the * Add the size of each additional optional interrupt beyond the
* required 1 (4 bytes for each u32 interrupt number) * required 1 (4 bytes for each u32 interrupt number)
*/ */
total_size = (acpi_rs_length) (total_size + total_size = (acpi_rs_length)(total_size +
((resource->data. ((resource->data.
extended_irq. extended_irq.
interrupt_count - interrupt_count -
@ -329,7 +329,7 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
case ACPI_RESOURCE_TYPE_GPIO: case ACPI_RESOURCE_TYPE_GPIO:
total_size = (acpi_rs_length) (total_size + total_size = (acpi_rs_length)(total_size +
(resource->data.gpio. (resource->data.gpio.
pin_table_length * 2) + pin_table_length * 2) +
resource->data.gpio. resource->data.gpio.
@ -348,7 +348,7 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
common_serial_bus. common_serial_bus.
type]; type];
total_size = (acpi_rs_length) (total_size + total_size = (acpi_rs_length)(total_size +
resource->data. resource->data.
i2c_serial_bus. i2c_serial_bus.
resource_source. resource_source.
@ -397,8 +397,8 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_rs_get_list_length(u8 * aml_buffer, acpi_rs_get_list_length(u8 *aml_buffer,
u32 aml_buffer_length, acpi_size * size_needed) u32 aml_buffer_length, acpi_size *size_needed)
{ {
acpi_status status; acpi_status status;
u8 *end_aml; u8 *end_aml;
@ -610,7 +610,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
acpi_status acpi_status
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object, acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
acpi_size * buffer_size_needed) acpi_size *buffer_size_needed)
{ {
u32 number_of_elements; u32 number_of_elements;
acpi_size temp_size_needed = 0; acpi_size temp_size_needed = 0;

View File

@ -347,7 +347,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
(u8 *) output_buffer->pointer); (u8 *) output_buffer->pointer);
path_buffer.pointer = user_prt->source; path_buffer.pointer = user_prt->source;
status = acpi_ns_handle_to_pathname((acpi_handle) node, &path_buffer, FALSE); status = acpi_ns_handle_to_pathname((acpi_handle)node, &path_buffer, FALSE);
/* +1 to include null terminator */ /* +1 to include null terminator */

View File

@ -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)
{ {
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)
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)
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)
* *
******************************************************************************/ ******************************************************************************/
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)
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);

View File

@ -330,19 +330,20 @@ struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4] = {
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.type), "Type", acpi_gbl_sbt_decode}, \ {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.type), "Type", acpi_gbl_sbt_decode}, \
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.producer_consumer), "ProducerConsumer", acpi_gbl_consume_decode}, \ {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.producer_consumer), "ProducerConsumer", acpi_gbl_consume_decode}, \
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.slave_mode), "SlaveMode", acpi_gbl_sm_decode}, \ {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.slave_mode), "SlaveMode", acpi_gbl_sm_decode}, \
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.connection_sharing),"ConnectionSharing", acpi_gbl_shr_decode}, \
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.type_revision_id), "TypeRevisionId", NULL}, \ {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.type_revision_id), "TypeRevisionId", NULL}, \
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (common_serial_bus.type_data_length), "TypeDataLength", NULL}, \ {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (common_serial_bus.type_data_length), "TypeDataLength", NULL}, \
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (common_serial_bus.resource_source), "ResourceSource", NULL}, \ {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (common_serial_bus.resource_source), "ResourceSource", NULL}, \
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (common_serial_bus.vendor_length), "VendorLength", NULL}, \ {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (common_serial_bus.vendor_length), "VendorLength", NULL}, \
{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (common_serial_bus.vendor_data), "VendorData", NULL}, {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (common_serial_bus.vendor_data), "VendorData", NULL},
struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[10] = { struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[11] = {
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_common_serial_bus), {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_common_serial_bus),
"Common Serial Bus", NULL}, "Common Serial Bus", NULL},
ACPI_RS_DUMP_COMMON_SERIAL_BUS ACPI_RS_DUMP_COMMON_SERIAL_BUS
}; };
struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[13] = { struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[14] = {
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_i2c_serial_bus), {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_i2c_serial_bus),
"I2C Serial Bus", NULL}, "I2C Serial Bus", NULL},
ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG, ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG,
@ -355,7 +356,7 @@ struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[13] = {
"SlaveAddress", NULL}, "SlaveAddress", NULL},
}; };
struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[17] = { struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[18] = {
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_spi_serial_bus), {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_spi_serial_bus),
"Spi Serial Bus", NULL}, "Spi Serial Bus", NULL},
ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG, ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG,
@ -376,7 +377,7 @@ struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[17] = {
"ConnectionSpeed", NULL}, "ConnectionSpeed", NULL},
}; };
struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[19] = { struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[20] = {
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_uart_serial_bus), {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_uart_serial_bus),
"Uart Serial Bus", NULL}, "Uart Serial Bus", NULL},
ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_2BITFLAG, ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_2BITFLAG,

View File

@ -87,7 +87,7 @@ acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
return_ACPI_STATUS(AE_BAD_PARAMETER); return_ACPI_STATUS(AE_BAD_PARAMETER);
} }
if (((acpi_size) resource) & 0x3) { if (((acpi_size)resource) & 0x3) {
/* Each internal resource struct is expected to be 32-bit aligned */ /* Each internal resource struct is expected to be 32-bit aligned */

View File

@ -151,7 +151,7 @@ struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
* *
******************************************************************************/ ******************************************************************************/
struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[16] = { struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[17] = {
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus), ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus),
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)}, ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)},
@ -177,6 +177,11 @@ struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[16] = {
AML_OFFSET(common_serial_bus.flags), AML_OFFSET(common_serial_bus.flags),
1}, 1},
{ACPI_RSC_1BITFLAG,
ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
AML_OFFSET(common_serial_bus.flags),
2},
{ACPI_RSC_MOVE8, {ACPI_RSC_MOVE8,
ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
AML_OFFSET(common_serial_bus.type_revision_id), AML_OFFSET(common_serial_bus.type_revision_id),
@ -237,7 +242,7 @@ struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[16] = {
* *
******************************************************************************/ ******************************************************************************/
struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[20] = { struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = {
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
ACPI_RS_SIZE(struct acpi_resource_spi_serialbus), ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)}, ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)},
@ -263,6 +268,11 @@ struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[20] = {
AML_OFFSET(common_serial_bus.flags), AML_OFFSET(common_serial_bus.flags),
1}, 1},
{ACPI_RSC_1BITFLAG,
ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
AML_OFFSET(common_serial_bus.flags),
2},
{ACPI_RSC_MOVE8, {ACPI_RSC_MOVE8,
ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
AML_OFFSET(common_serial_bus.type_revision_id), AML_OFFSET(common_serial_bus.type_revision_id),
@ -339,7 +349,7 @@ struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[20] = {
* *
******************************************************************************/ ******************************************************************************/
struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[22] = { struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS, {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
ACPI_RS_SIZE(struct acpi_resource_uart_serialbus), ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)}, ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)},
@ -365,6 +375,11 @@ struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[22] = {
AML_OFFSET(common_serial_bus.flags), AML_OFFSET(common_serial_bus.flags),
1}, 1},
{ACPI_RSC_1BITFLAG,
ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
AML_OFFSET(common_serial_bus.flags),
2},
{ACPI_RSC_MOVE8, {ACPI_RSC_MOVE8,
ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id), ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
AML_OFFSET(common_serial_bus.type_revision_id), AML_OFFSET(common_serial_bus.type_revision_id),

View File

@ -338,7 +338,7 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
* Note: Some resource descriptors will have an additional null, so * Note: Some resource descriptors will have an additional null, so
* we add 1 to the minimum length. * we add 1 to the minimum length.
*/ */
if (total_length > (acpi_rsdesc_size) (minimum_length + 1)) { if (total_length > (acpi_rsdesc_size)(minimum_length + 1)) {
/* Get the resource_source_index */ /* Get the resource_source_index */
@ -377,7 +377,7 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
ACPI_CAST_PTR(char, ACPI_CAST_PTR(char,
&aml_resource_source[1])); &aml_resource_source[1]));
return ((acpi_rs_length) total_length); return ((acpi_rs_length)total_length);
} }
/* resource_source is not present */ /* resource_source is not present */
@ -406,9 +406,9 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
******************************************************************************/ ******************************************************************************/
acpi_rsdesc_size acpi_rsdesc_size
acpi_rs_set_resource_source(union aml_resource * aml, acpi_rs_set_resource_source(union aml_resource *aml,
acpi_rs_length minimum_length, acpi_rs_length minimum_length,
struct acpi_resource_source * resource_source) struct acpi_resource_source *resource_source)
{ {
u8 *aml_resource_source; u8 *aml_resource_source;
acpi_rsdesc_size descriptor_length; acpi_rsdesc_size descriptor_length;
@ -466,8 +466,8 @@ acpi_rs_set_resource_source(union aml_resource * aml,
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_rs_get_prt_method_data(struct acpi_namespace_node * node, acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
struct acpi_buffer * ret_buffer) struct acpi_buffer *ret_buffer)
{ {
union acpi_operand_object *obj_desc; union acpi_operand_object *obj_desc;
acpi_status status; acpi_status status;
@ -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;

View File

@ -433,8 +433,8 @@ ACPI_EXPORT_SYMBOL(acpi_resource_to_address64)
acpi_status acpi_status
acpi_get_vendor_resource(acpi_handle device_handle, acpi_get_vendor_resource(acpi_handle device_handle,
char *name, char *name,
struct acpi_vendor_uuid * uuid, struct acpi_vendor_uuid *uuid,
struct acpi_buffer * ret_buffer) struct acpi_buffer *ret_buffer)
{ {
struct acpi_vendor_walk_info info; struct acpi_vendor_walk_info info;
acpi_status status; acpi_status status;
@ -539,7 +539,7 @@ acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_walk_resource_buffer(struct acpi_buffer * buffer, acpi_walk_resource_buffer(struct acpi_buffer *buffer,
acpi_walk_resource_callback user_function, acpi_walk_resource_callback user_function,
void *context) void *context)
{ {

View File

@ -368,7 +368,7 @@ acpi_status acpi_tb_validate_temp_table(struct acpi_table_desc *table_desc)
*****************************************************************************/ *****************************************************************************/
acpi_status acpi_status
acpi_tb_verify_temp_table(struct acpi_table_desc * table_desc, char *signature) acpi_tb_verify_temp_table(struct acpi_table_desc *table_desc, char *signature)
{ {
acpi_status status = AE_OK; acpi_status status = AE_OK;
@ -401,7 +401,7 @@ acpi_tb_verify_temp_table(struct acpi_table_desc * table_desc, char *signature)
ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY, ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY,
"%4.4s 0x%8.8X%8.8X" "%4.4s 0x%8.8X%8.8X"
" Attempted table install failed", " Attempted table install failed",
acpi_ut_valid_acpi_name(table_desc-> acpi_ut_valid_nameseg(table_desc->
signature. signature.
ascii) ? ascii) ?
table_desc->signature.ascii : "????", table_desc->signature.ascii : "????",
@ -454,7 +454,7 @@ acpi_status acpi_tb_resize_root_table_list(void)
table_count = acpi_gbl_root_table_list.current_table_count; table_count = acpi_gbl_root_table_list.current_table_count;
} }
tables = ACPI_ALLOCATE_ZEROED(((acpi_size) table_count + tables = ACPI_ALLOCATE_ZEROED(((acpi_size)table_count +
ACPI_ROOT_TABLE_SIZE_INCREMENT) * ACPI_ROOT_TABLE_SIZE_INCREMENT) *
sizeof(struct acpi_table_desc)); sizeof(struct acpi_table_desc));
if (!tables) { if (!tables) {
@ -467,8 +467,7 @@ acpi_status acpi_tb_resize_root_table_list(void)
if (acpi_gbl_root_table_list.tables) { if (acpi_gbl_root_table_list.tables) {
memcpy(tables, acpi_gbl_root_table_list.tables, memcpy(tables, acpi_gbl_root_table_list.tables,
(acpi_size) table_count * (acpi_size)table_count * sizeof(struct acpi_table_desc));
sizeof(struct acpi_table_desc));
if (acpi_gbl_root_table_list.flags & ACPI_ROOT_ORIGIN_ALLOCATED) { if (acpi_gbl_root_table_list.flags & ACPI_ROOT_ORIGIN_ALLOCATED) {
ACPI_FREE(acpi_gbl_root_table_list.tables); ACPI_FREE(acpi_gbl_root_table_list.tables);
@ -701,7 +700,7 @@ acpi_status acpi_tb_release_owner_id(u32 table_index)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_tb_get_owner_id(u32 table_index, acpi_owner_id * owner_id) acpi_status acpi_tb_get_owner_id(u32 table_index, acpi_owner_id *owner_id)
{ {
acpi_status status = AE_BAD_PARAMETER; acpi_status status = AE_BAD_PARAMETER;

View File

@ -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);
/* 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
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;
@ -344,7 +344,7 @@ void acpi_tb_parse_fadt(void)
/* Obtain the DSDT and FACS tables via their addresses within the FADT */ /* Obtain the DSDT and FACS tables via their addresses within the FADT */
acpi_tb_install_fixed_table((acpi_physical_address) acpi_gbl_FADT.Xdsdt, acpi_tb_install_fixed_table((acpi_physical_address)acpi_gbl_FADT.Xdsdt,
ACPI_SIG_DSDT, &acpi_gbl_dsdt_index); ACPI_SIG_DSDT, &acpi_gbl_dsdt_index);
/* If Hardware Reduced flag is set, there is no FACS */ /* If Hardware Reduced flag is set, there is no FACS */
@ -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)
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)
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));

View File

@ -76,7 +76,7 @@ acpi_tb_find_table(char *signature,
/* Validate the input table signature */ /* Validate the input table signature */
if (!acpi_is_valid_signature(signature)) { if (!acpi_ut_valid_nameseg(signature)) {
return_ACPI_STATUS(AE_BAD_SIGNATURE); return_ACPI_STATUS(AE_BAD_SIGNATURE);
} }

View File

@ -299,7 +299,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,
ACPI_BIOS_ERROR((AE_INFO, ACPI_BIOS_ERROR((AE_INFO,
"Table has invalid signature [%4.4s] (0x%8.8X), " "Table has invalid signature [%4.4s] (0x%8.8X), "
"must be SSDT or OEMx", "must be SSDT or OEMx",
acpi_ut_valid_acpi_name(new_table_desc. acpi_ut_valid_nameseg(new_table_desc.
signature. signature.
ascii) ? ascii) ?
new_table_desc.signature. new_table_desc.signature.

View File

@ -231,7 +231,7 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)
ACPI_FORMAT_UINT64(address64))); ACPI_FORMAT_UINT64(address64)));
} }
#endif #endif
return ((acpi_physical_address) (address64)); return ((acpi_physical_address)(address64));
} }
} }
@ -287,12 +287,12 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
* the XSDT if the revision is > 1 and the XSDT pointer is present, * the XSDT if the revision is > 1 and the XSDT pointer is present,
* as per the ACPI specification. * as per the ACPI specification.
*/ */
address = (acpi_physical_address) rsdp->xsdt_physical_address; address = (acpi_physical_address)rsdp->xsdt_physical_address;
table_entry_size = ACPI_XSDT_ENTRY_SIZE; table_entry_size = ACPI_XSDT_ENTRY_SIZE;
} else { } else {
/* Root table is an RSDT (32-bit physical addresses) */ /* Root table is an RSDT (32-bit physical addresses) */
address = (acpi_physical_address) rsdp->rsdt_physical_address; address = (acpi_physical_address)rsdp->rsdt_physical_address;
table_entry_size = ACPI_RSDT_ENTRY_SIZE; table_entry_size = ACPI_RSDT_ENTRY_SIZE;
} }
@ -380,30 +380,3 @@ next_table:
acpi_os_unmap_memory(table, length); acpi_os_unmap_memory(table, length);
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }
/*******************************************************************************
*
* FUNCTION: acpi_is_valid_signature
*
* PARAMETERS: signature - Sig string to be validated
*
* RETURN: TRUE if signature is has 4 valid ACPI characters
*
* DESCRIPTION: Validate an ACPI table signature.
*
******************************************************************************/
u8 acpi_is_valid_signature(char *signature)
{
u32 i;
/* Validate each character in the signature */
for (i = 0; i < ACPI_NAME_SIZE; i++) {
if (!acpi_ut_valid_acpi_char(signature[i], i)) {
return (FALSE);
}
}
return (TRUE);
}

View File

@ -99,7 +99,7 @@ acpi_status acpi_allocate_root_table(u32 initial_table_count)
******************************************************************************/ ******************************************************************************/
acpi_status __init acpi_status __init
acpi_initialize_tables(struct acpi_table_desc * initial_table_array, acpi_initialize_tables(struct acpi_table_desc *initial_table_array,
u32 initial_table_count, u8 allow_resize) u32 initial_table_count, u8 allow_resize)
{ {
acpi_physical_address rsdp_address; acpi_physical_address rsdp_address;
@ -120,7 +120,7 @@ acpi_initialize_tables(struct acpi_table_desc * initial_table_array,
/* Root Table Array has been statically allocated by the host */ /* Root Table Array has been statically allocated by the host */
memset(initial_table_array, 0, memset(initial_table_array, 0,
(acpi_size) initial_table_count * (acpi_size)initial_table_count *
sizeof(struct acpi_table_desc)); sizeof(struct acpi_table_desc));
acpi_gbl_root_table_list.tables = initial_table_array; acpi_gbl_root_table_list.tables = initial_table_array;
@ -352,7 +352,7 @@ ACPI_EXPORT_SYMBOL(acpi_get_table)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_get_table_by_index(u32 table_index, struct acpi_table_header ** table) acpi_get_table_by_index(u32 table_index, struct acpi_table_header **table)
{ {
acpi_status status; acpi_status status;

View File

@ -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);

View File

@ -90,7 +90,7 @@ u32 acpi_tb_get_rsdp_length(struct acpi_table_rsdp *rsdp)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp * rsdp) acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp *rsdp)
{ {
/* /*
@ -142,7 +142,7 @@ acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp * rsdp)
* *
******************************************************************************/ ******************************************************************************/
acpi_status __init acpi_find_root_pointer(acpi_physical_address * table_address) acpi_status __init acpi_find_root_pointer(acpi_physical_address *table_address)
{ {
u8 *table_ptr; u8 *table_ptr;
u8 *mem_rover; u8 *mem_rover;
@ -201,7 +201,7 @@ acpi_status __init acpi_find_root_pointer(acpi_physical_address * table_address)
(u32) ACPI_PTR_DIFF(mem_rover, table_ptr); (u32) ACPI_PTR_DIFF(mem_rover, table_ptr);
*table_address = *table_address =
(acpi_physical_address) physical_address; (acpi_physical_address)physical_address;
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }
} }
@ -234,7 +234,7 @@ acpi_status __init acpi_find_root_pointer(acpi_physical_address * table_address)
(ACPI_HI_RSDP_WINDOW_BASE + (ACPI_HI_RSDP_WINDOW_BASE +
ACPI_PTR_DIFF(mem_rover, table_ptr)); ACPI_PTR_DIFF(mem_rover, table_ptr));
*table_address = (acpi_physical_address) physical_address; *table_address = (acpi_physical_address)physical_address;
return_ACPI_STATUS(AE_OK); return_ACPI_STATUS(AE_OK);
} }

View File

@ -231,7 +231,7 @@ acpi_status acpi_ut_delete_caches(void)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_ut_validate_buffer(struct acpi_buffer * buffer) acpi_status acpi_ut_validate_buffer(struct acpi_buffer *buffer)
{ {
/* Obviously, the structure pointer must be valid */ /* Obviously, the structure pointer must be valid */
@ -272,8 +272,7 @@ acpi_status acpi_ut_validate_buffer(struct acpi_buffer * buffer)
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status
acpi_ut_initialize_buffer(struct acpi_buffer * buffer, acpi_ut_initialize_buffer(struct acpi_buffer *buffer, acpi_size required_length)
acpi_size required_length)
{ {
acpi_size input_buffer_length; acpi_size input_buffer_length;

View File

@ -0,0 +1,140 @@
/******************************************************************************
*
* Module Name: utascii - Utility ascii functions
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2016, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#include <acpi/acpi.h>
#include "accommon.h"
/*******************************************************************************
*
* FUNCTION: acpi_ut_valid_nameseg
*
* PARAMETERS: name - The name or table signature to be examined.
* Four characters, does not have to be a
* NULL terminated string.
*
* RETURN: TRUE if signature is has 4 valid ACPI characters
*
* DESCRIPTION: Validate an ACPI table signature.
*
******************************************************************************/
u8 acpi_ut_valid_nameseg(char *name)
{
u32 i;
/* Validate each character in the signature */
for (i = 0; i < ACPI_NAME_SIZE; i++) {
if (!acpi_ut_valid_name_char(name[i], i)) {
return (FALSE);
}
}
return (TRUE);
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_valid_name_char
*
* PARAMETERS: char - The character to be examined
* position - Byte position (0-3)
*
* RETURN: TRUE if the character is valid, FALSE otherwise
*
* DESCRIPTION: Check for a valid ACPI character. Must be one of:
* 1) Upper case alpha
* 2) numeric
* 3) underscore
*
* We allow a '!' as the last character because of the ASF! table
*
******************************************************************************/
u8 acpi_ut_valid_name_char(char character, u32 position)
{
if (!((character >= 'A' && character <= 'Z') ||
(character >= '0' && character <= '9') || (character == '_'))) {
/* Allow a '!' in the last position */
if (character == '!' && position == 3) {
return (TRUE);
}
return (FALSE);
}
return (TRUE);
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_check_and_repair_ascii
*
* PARAMETERS: name - Ascii string
* count - Number of characters to check
*
* RETURN: None
*
* DESCRIPTION: Ensure that the requested number of characters are printable
* Ascii characters. Sets non-printable and null chars to <space>.
*
******************************************************************************/
void acpi_ut_check_and_repair_ascii(u8 *name, char *repaired_name, u32 count)
{
u32 i;
for (i = 0; i < count; i++) {
repaired_name[i] = (char)name[i];
if (!name[i]) {
return;
}
if (!isprint(name[i])) {
repaired_name[i] = ' ';
}
}
}

View File

@ -106,31 +106,31 @@ void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)
default: /* Default is BYTE display */ default: /* Default is BYTE display */
acpi_os_printf("%02X ", acpi_os_printf("%02X ",
buffer[(acpi_size) i + j]); buffer[(acpi_size)i + j]);
break; break;
case DB_WORD_DISPLAY: case DB_WORD_DISPLAY:
ACPI_MOVE_16_TO_32(&temp32, ACPI_MOVE_16_TO_32(&temp32,
&buffer[(acpi_size) i + j]); &buffer[(acpi_size)i + j]);
acpi_os_printf("%04X ", temp32); acpi_os_printf("%04X ", temp32);
break; break;
case DB_DWORD_DISPLAY: case DB_DWORD_DISPLAY:
ACPI_MOVE_32_TO_32(&temp32, ACPI_MOVE_32_TO_32(&temp32,
&buffer[(acpi_size) i + j]); &buffer[(acpi_size)i + j]);
acpi_os_printf("%08X ", temp32); acpi_os_printf("%08X ", temp32);
break; break;
case DB_QWORD_DISPLAY: case DB_QWORD_DISPLAY:
ACPI_MOVE_32_TO_32(&temp32, ACPI_MOVE_32_TO_32(&temp32,
&buffer[(acpi_size) i + j]); &buffer[(acpi_size)i + j]);
acpi_os_printf("%08X", temp32); acpi_os_printf("%08X", temp32);
ACPI_MOVE_32_TO_32(&temp32, ACPI_MOVE_32_TO_32(&temp32,
&buffer[(acpi_size) i + j + &buffer[(acpi_size)i + j +
4]); 4]);
acpi_os_printf("%08X ", temp32); acpi_os_printf("%08X ", temp32);
break; break;
@ -158,7 +158,7 @@ void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)
acpi_os_printf("// "); acpi_os_printf("// ");
} }
buf_char = buffer[(acpi_size) i + j]; buf_char = buffer[(acpi_size)i + j];
if (isprint(buf_char)) { if (isprint(buf_char)) {
acpi_os_printf("%c", buf_char); acpi_os_printf("%c", buf_char);
} else { } else {
@ -274,31 +274,31 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
default: /* Default is BYTE display */ default: /* Default is BYTE display */
acpi_ut_file_printf(file, "%02X ", acpi_ut_file_printf(file, "%02X ",
buffer[(acpi_size) i + j]); buffer[(acpi_size)i + j]);
break; break;
case DB_WORD_DISPLAY: case DB_WORD_DISPLAY:
ACPI_MOVE_16_TO_32(&temp32, ACPI_MOVE_16_TO_32(&temp32,
&buffer[(acpi_size) i + j]); &buffer[(acpi_size)i + j]);
acpi_ut_file_printf(file, "%04X ", temp32); acpi_ut_file_printf(file, "%04X ", temp32);
break; break;
case DB_DWORD_DISPLAY: case DB_DWORD_DISPLAY:
ACPI_MOVE_32_TO_32(&temp32, ACPI_MOVE_32_TO_32(&temp32,
&buffer[(acpi_size) i + j]); &buffer[(acpi_size)i + j]);
acpi_ut_file_printf(file, "%08X ", temp32); acpi_ut_file_printf(file, "%08X ", temp32);
break; break;
case DB_QWORD_DISPLAY: case DB_QWORD_DISPLAY:
ACPI_MOVE_32_TO_32(&temp32, ACPI_MOVE_32_TO_32(&temp32,
&buffer[(acpi_size) i + j]); &buffer[(acpi_size)i + j]);
acpi_ut_file_printf(file, "%08X", temp32); acpi_ut_file_printf(file, "%08X", temp32);
ACPI_MOVE_32_TO_32(&temp32, ACPI_MOVE_32_TO_32(&temp32,
&buffer[(acpi_size) i + j + &buffer[(acpi_size)i + j +
4]); 4]);
acpi_ut_file_printf(file, "%08X ", temp32); acpi_ut_file_printf(file, "%08X ", temp32);
break; break;
@ -318,7 +318,7 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
return; return;
} }
buf_char = buffer[(acpi_size) i + j]; buf_char = buffer[(acpi_size)i + j];
if (isprint(buf_char)) { if (isprint(buf_char)) {
acpi_ut_file_printf(file, "%c", buf_char); acpi_ut_file_printf(file, "%c", buf_char);
} else { } else {

View File

@ -105,7 +105,7 @@ acpi_os_create_cache(char *cache_name,
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache) acpi_status acpi_os_purge_cache(struct acpi_memory_list *cache)
{ {
void *next; void *next;
acpi_status status; acpi_status status;
@ -151,7 +151,7 @@ acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_os_delete_cache(struct acpi_memory_list * cache) acpi_status acpi_os_delete_cache(struct acpi_memory_list *cache)
{ {
acpi_status status; acpi_status status;
@ -184,8 +184,7 @@ acpi_status acpi_os_delete_cache(struct acpi_memory_list * cache)
* *
******************************************************************************/ ******************************************************************************/
acpi_status acpi_status acpi_os_release_object(struct acpi_memory_list *cache, void *object)
acpi_os_release_object(struct acpi_memory_list * cache, void *object)
{ {
acpi_status status; acpi_status status;

View File

@ -53,7 +53,7 @@ ACPI_MODULE_NAME("utcopy")
static acpi_status static acpi_status
acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object, acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
union acpi_object *external_object, union acpi_object *external_object,
u8 * data_space, acpi_size * buffer_space_used); u8 *data_space, acpi_size *buffer_space_used);
static acpi_status static acpi_status
acpi_ut_copy_ielement_to_ielement(u8 object_type, acpi_ut_copy_ielement_to_ielement(u8 object_type,
@ -63,7 +63,7 @@ acpi_ut_copy_ielement_to_ielement(u8 object_type,
static acpi_status static acpi_status
acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object, acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object,
u8 * buffer, acpi_size * space_used); u8 *buffer, acpi_size *space_used);
static acpi_status static acpi_status
acpi_ut_copy_esimple_to_isimple(union acpi_object *user_obj, acpi_ut_copy_esimple_to_isimple(union acpi_object *user_obj,
@ -111,7 +111,7 @@ acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj,
static acpi_status static acpi_status
acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object, acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
union acpi_object *external_object, union acpi_object *external_object,
u8 * data_space, acpi_size * buffer_space_used) u8 *data_space, acpi_size *buffer_space_used)
{ {
acpi_status status = AE_OK; acpi_status status = AE_OK;
@ -151,7 +151,7 @@ acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
memcpy((void *)data_space, memcpy((void *)data_space,
(void *)internal_object->string.pointer, (void *)internal_object->string.pointer,
(acpi_size) internal_object->string.length + 1); (acpi_size)internal_object->string.length + 1);
break; break;
case ACPI_TYPE_BUFFER: case ACPI_TYPE_BUFFER:
@ -331,7 +331,7 @@ acpi_ut_copy_ielement_to_eelement(u8 object_type,
static acpi_status static acpi_status
acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object, acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object,
u8 * buffer, acpi_size * space_used) u8 *buffer, acpi_size *space_used)
{ {
union acpi_object *external_object; union acpi_object *external_object;
acpi_status status; acpi_status status;
@ -362,7 +362,7 @@ acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object,
* Leave room for an array of ACPI_OBJECTS in the buffer * Leave room for an array of ACPI_OBJECTS in the buffer
* and move the free space past it * and move the free space past it
*/ */
info.length += (acpi_size) external_object->package.count * info.length += (acpi_size)external_object->package.count *
ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object)); ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object));
info.free_space += external_object->package.count * info.free_space += external_object->package.count *
ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object)); ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object));
@ -738,7 +738,7 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
*/ */
if (source_desc->string.pointer) { if (source_desc->string.pointer) {
dest_desc->string.pointer = dest_desc->string.pointer =
ACPI_ALLOCATE((acpi_size) source_desc->string. ACPI_ALLOCATE((acpi_size)source_desc->string.
length + 1); length + 1);
if (!dest_desc->string.pointer) { if (!dest_desc->string.pointer) {
return (AE_NO_MEMORY); return (AE_NO_MEMORY);
@ -748,7 +748,7 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
memcpy(dest_desc->string.pointer, memcpy(dest_desc->string.pointer,
source_desc->string.pointer, source_desc->string.pointer,
(acpi_size) source_desc->string.length + 1); (acpi_size)source_desc->string.length + 1);
} }
break; break;

View File

@ -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,
* 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,
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)
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,
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,
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,
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,
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,
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,
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,
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,
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) {

View File

@ -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",
@ -460,48 +460,52 @@ static const char *acpi_gbl_generic_notify[ACPI_NOTIFY_MAX + 1] = {
/* 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:

View File

@ -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 @@ cleanup:
******************************************************************************/ ******************************************************************************/
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)
{ {

View File

@ -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] =
}; };
#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)

Some files were not shown because too many files have changed in this diff Show More