Skip to content

Commit

Permalink
ACPICA: Eliminate some small unnecessary pathname functions.
Browse files Browse the repository at this point in the history
Removed several small pathname functions to increase efficiency.
Essentially, they replace a function call with a single compare.

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Bob Moore authored and Rafael J. Wysocki committed Jan 10, 2013
1 parent 528a412 commit 04a81dc
Show file tree
Hide file tree
Showing 8 changed files with 22 additions and 65 deletions.
6 changes: 6 additions & 0 deletions drivers/acpi/acpica/acmacros.h
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,12 @@
#define ACPI_EXTRACT_3BIT_FLAG(field, position) (ACPI_GET_3BIT_FLAG ((field) >> position))
#define ACPI_EXTRACT_4BIT_FLAG(field, position) (ACPI_GET_4BIT_FLAG ((field) >> position))

/* ACPI Pathname helpers */

#define ACPI_IS_ROOT_PREFIX(c) ((c) == (u8) 0x5C) /* Backslash */
#define ACPI_IS_PARENT_PREFIX(c) ((c) == (u8) 0x5E) /* Carat */
#define ACPI_IS_PATH_SEPARATOR(c) ((c) == (u8) 0x2E) /* Period (dot) */

/*
* An object of type struct acpi_namespace_node can appear in some contexts
* where a pointer to an object of type union acpi_operand_object can also
Expand Down
2 changes: 0 additions & 2 deletions drivers/acpi/acpica/acnamesp.h
Original file line number Diff line number Diff line change
Expand Up @@ -333,8 +333,6 @@ acpi_ns_install_node(struct acpi_walk_state *walk_state,
/*
* nsutils - Utility functions
*/
u8 acpi_ns_valid_root_prefix(char prefix);

acpi_object_type acpi_ns_get_type(struct acpi_namespace_node *node);

u32 acpi_ns_local(acpi_object_type type);
Expand Down
2 changes: 0 additions & 2 deletions drivers/acpi/acpica/acparser.h
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,6 @@ void acpi_ps_free_op(union acpi_parse_object *op);

u8 acpi_ps_is_leading_char(u32 c);

u8 acpi_ps_is_prefix_char(u32 c);

#ifdef ACPI_FUTURE_USAGE
u32 acpi_ps_get_name(union acpi_parse_object *op);
#endif /* ACPI_FUTURE_USAGE */
Expand Down
60 changes: 11 additions & 49 deletions drivers/acpi/acpica/nsutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@
ACPI_MODULE_NAME("nsutils")

/* Local prototypes */
static u8 acpi_ns_valid_path_separator(char sep);

#ifdef ACPI_OBSOLETE_FUNCTIONS
acpi_name acpi_ns_find_parent_name(struct acpi_namespace_node *node_to_search);
#endif
Expand Down Expand Up @@ -96,42 +94,6 @@ acpi_ns_print_node_pathname(struct acpi_namespace_node *node,
}
}

/*******************************************************************************
*
* FUNCTION: acpi_ns_valid_root_prefix
*
* PARAMETERS: prefix - Character to be checked
*
* RETURN: TRUE if a valid prefix
*
* DESCRIPTION: Check if a character is a valid ACPI Root prefix
*
******************************************************************************/

u8 acpi_ns_valid_root_prefix(char prefix)
{

return ((u8)(prefix == '\\'));
}

/*******************************************************************************
*
* FUNCTION: acpi_ns_valid_path_separator
*
* PARAMETERS: sep - Character to be checked
*
* RETURN: TRUE if a valid path separator
*
* DESCRIPTION: Check if a character is a valid ACPI path separator
*
******************************************************************************/

static u8 acpi_ns_valid_path_separator(char sep)
{

return ((u8)(sep == '.'));
}

/*******************************************************************************
*
* FUNCTION: acpi_ns_get_type
Expand Down Expand Up @@ -217,19 +179,19 @@ void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info)
*
* strlen() + 1 covers the first name_seg, which has no path separator
*/
if (acpi_ns_valid_root_prefix(*next_external_char)) {
if (ACPI_IS_ROOT_PREFIX(*next_external_char)) {
info->fully_qualified = TRUE;
next_external_char++;

/* Skip redundant root_prefix, like \\_SB.PCI0.SBRG.EC0 */

while (acpi_ns_valid_root_prefix(*next_external_char)) {
while (ACPI_IS_ROOT_PREFIX(*next_external_char)) {
next_external_char++;
}
} else {
/* Handle Carat prefixes */

while (*next_external_char == '^') {
while (ACPI_IS_PARENT_PREFIX(*next_external_char)) {
info->num_carats++;
next_external_char++;
}
Expand All @@ -243,7 +205,7 @@ void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info)
if (*next_external_char) {
info->num_segments = 1;
for (i = 0; next_external_char[i]; i++) {
if (acpi_ns_valid_path_separator(next_external_char[i])) {
if (ACPI_IS_PATH_SEPARATOR(next_external_char[i])) {
info->num_segments++;
}
}
Expand Down Expand Up @@ -281,7 +243,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
/* Setup the correct prefixes, counts, and pointers */

if (info->fully_qualified) {
internal_name[0] = '\\';
internal_name[0] = AML_ROOT_PREFIX;

if (num_segments <= 1) {
result = &internal_name[1];
Expand All @@ -301,7 +263,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
i = 0;
if (info->num_carats) {
for (i = 0; i < info->num_carats; i++) {
internal_name[i] = '^';
internal_name[i] = AML_PARENT_PREFIX;
}
}

Expand All @@ -321,7 +283,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)

for (; num_segments; num_segments--) {
for (i = 0; i < ACPI_NAME_SIZE; i++) {
if (acpi_ns_valid_path_separator(*external_name) ||
if (ACPI_IS_PATH_SEPARATOR(*external_name) ||
(*external_name == 0)) {

/* Pad the segment with underscore(s) if segment is short */
Expand All @@ -338,7 +300,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)

/* Now we must have a path separator, or the pathname is bad */

if (!acpi_ns_valid_path_separator(*external_name) &&
if (!ACPI_IS_PATH_SEPARATOR(*external_name) &&
(*external_name != 0)) {
return_ACPI_STATUS(AE_BAD_PATHNAME);
}
Expand Down Expand Up @@ -456,13 +418,13 @@ acpi_ns_externalize_name(u32 internal_name_length,
/* Check for a prefix (one '\' | one or more '^') */

switch (internal_name[0]) {
case '\\':
case AML_ROOT_PREFIX:
prefix_length = 1;
break;

case '^':
case AML_PARENT_PREFIX:
for (i = 0; i < internal_name_length; i++) {
if (internal_name[i] == '^') {
if (ACPI_IS_PARENT_PREFIX(internal_name[i])) {
prefix_length = i + 1;
} else {
break;
Expand Down
2 changes: 1 addition & 1 deletion drivers/acpi/acpica/nsxfeval.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ acpi_evaluate_object(acpi_handle handle,
* 2) No handle, not fully qualified pathname (error)
* 3) Valid handle
*/
if ((pathname) && (acpi_ns_valid_root_prefix(pathname[0]))) {
if ((pathname) && (ACPI_IS_ROOT_PREFIX(pathname[0]))) {

/* The path is fully qualified, just evaluate by name */

Expand Down
2 changes: 1 addition & 1 deletion drivers/acpi/acpica/nsxfname.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ acpi_get_handle(acpi_handle parent,
*
* Error for <null Parent + relative path>
*/
if (acpi_ns_valid_root_prefix(pathname[0])) {
if (ACPI_IS_ROOT_PREFIX(pathname[0])) {

/* Pathname is fully qualified (starts with '\') */

Expand Down
5 changes: 3 additions & 2 deletions drivers/acpi/acpica/psargs.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state)

/* Point past any namestring prefix characters (backslash or carat) */

while (acpi_ps_is_prefix_char(*end)) {
while (ACPI_IS_ROOT_PREFIX(*end) || ACPI_IS_PARENT_PREFIX(*end)) {
end++;
}

Expand Down Expand Up @@ -798,7 +798,8 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
subop = acpi_ps_peek_opcode(parser_state);
if (subop == 0 ||
acpi_ps_is_leading_char(subop) ||
acpi_ps_is_prefix_char(subop)) {
ACPI_IS_ROOT_PREFIX(subop) ||
ACPI_IS_PARENT_PREFIX(subop)) {

/* null_name or name_string */

Expand Down
8 changes: 0 additions & 8 deletions drivers/acpi/acpica/psutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,14 +201,6 @@ u8 acpi_ps_is_leading_char(u32 c)
return ((u8) (c == '_' || (c >= 'A' && c <= 'Z')));
}

/*
* Is "c" a namestring prefix character?
*/
u8 acpi_ps_is_prefix_char(u32 c)
{
return ((u8)(c == '\\' || c == '^'));
}

/*
* Get op's name (4-byte name segment) or 0 if unnamed
*/
Expand Down

0 comments on commit 04a81dc

Please sign in to comment.