cregit-Linux how code gets into the kernel

Release 4.11 drivers/acpi/acpica/nsnames.c

/*******************************************************************************
 *
 * Module Name: nsnames - Name manipulation and search
 *
 ******************************************************************************/

/*
 * Copyright (C) 2000 - 2017, 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 "amlcode.h"
#include "acnamesp.h"


#define _COMPONENT          ACPI_NAMESPACE
ACPI_MODULE_NAME("nsnames")

/*******************************************************************************
 *
 * FUNCTION:    acpi_ns_get_external_pathname
 *
 * PARAMETERS:  node            - Namespace node whose pathname is needed
 *
 * RETURN:      Pointer to storage containing the fully qualified name of
 *              the node, In external format (name segments separated by path
 *              separators.)
 *
 * DESCRIPTION: Used to obtain the full pathname to a namespace node, usually
 *              for error and debug statements.
 *
 ******************************************************************************/

char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node) { char *name_buffer; ACPI_FUNCTION_TRACE_PTR(ns_get_external_pathname, node); name_buffer = acpi_ns_get_normalized_pathname(node, FALSE); return_PTR(name_buffer); }

Contributors

PersonTokensPropCommitsCommitProp
Lv Zheng1644.44%116.67%
Linus Torvalds (pre-git)1233.33%233.33%
Andy Grover719.44%233.33%
Linus Torvalds12.78%116.67%
Total36100.00%6100.00%

/******************************************************************************* * * FUNCTION: acpi_ns_get_pathname_length * * PARAMETERS: node - Namespace node * * RETURN: Length of path, including prefix * * DESCRIPTION: Get the length of the pathname string for this node * ******************************************************************************/
acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node) { acpi_size size; ACPI_FUNCTION_ENTRY(); size = acpi_ns_build_normalized_path(node, NULL, 0, FALSE); return (size); }

Contributors

PersonTokensPropCommitsCommitProp
Lv Zheng2470.59%125.00%
Linus Torvalds411.76%125.00%
Robert Moore411.76%125.00%
Andy Grover25.88%125.00%
Total34100.00%4100.00%

/******************************************************************************* * * FUNCTION: acpi_ns_handle_to_name * * PARAMETERS: target_handle - Handle of named object whose name is * to be found * buffer - Where the name is returned * * RETURN: Status, Buffer is filled with name if status is AE_OK * * DESCRIPTION: Build and return a full namespace name * ******************************************************************************/
acpi_status acpi_ns_handle_to_name(acpi_handle target_handle, struct acpi_buffer *buffer) { acpi_status status; struct acpi_namespace_node *node; const char *node_name; ACPI_FUNCTION_TRACE_PTR(ns_handle_to_name, target_handle); node = acpi_ns_validate_handle(target_handle); if (!node) { return_ACPI_STATUS(AE_BAD_PARAMETER); } /* Validate/Allocate/Clear caller buffer */ status = acpi_ut_initialize_buffer(buffer, ACPI_PATH_SEGMENT_LENGTH); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } /* Just copy the ACPI name from the Node and zero terminate it */ node_name = acpi_ut_get_node_name(node); ACPI_MOVE_NAME(buffer->pointer, node_name); ((char *)buffer->pointer)[ACPI_NAME_SIZE] = 0; ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%4.4s\n", (char *)buffer->pointer)); return_ACPI_STATUS(AE_OK); }

Contributors

PersonTokensPropCommitsCommitProp
Lv Zheng130100.00%1100.00%
Total130100.00%1100.00%

/******************************************************************************* * * FUNCTION: acpi_ns_handle_to_pathname * * PARAMETERS: target_handle - Handle of named object whose name is * to be found * buffer - Where the pathname is returned * no_trailing - Remove trailing '_' for each name * segment * * RETURN: Status, Buffer is filled with pathname if status is AE_OK * * DESCRIPTION: Build and return a full namespace pathname * ******************************************************************************/
acpi_status acpi_ns_handle_to_pathname(acpi_handle target_handle, struct acpi_buffer *buffer, u8 no_trailing) { acpi_status status; struct acpi_namespace_node *node; acpi_size required_size; ACPI_FUNCTION_TRACE_PTR(ns_handle_to_pathname, target_handle); node = acpi_ns_validate_handle(target_handle); if (!node) { return_ACPI_STATUS(AE_BAD_PARAMETER); } /* Determine size required for the caller buffer */ required_size = acpi_ns_build_normalized_path(node, NULL, 0, no_trailing); if (!required_size) { return_ACPI_STATUS(AE_BAD_PARAMETER); } /* Validate/Allocate/Clear caller buffer */ status = acpi_ut_initialize_buffer(buffer, required_size); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } /* Build the path in the caller buffer */ (void)acpi_ns_build_normalized_path(node, buffer->pointer, required_size, no_trailing); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%s [%X]\n", (char *)buffer->pointer, (u32) required_size)); return_ACPI_STATUS(AE_OK); }

Contributors

PersonTokensPropCommitsCommitProp
Lv Zheng9659.63%111.11%
Andy Grover3521.74%333.33%
Robert Moore2012.42%222.22%
Ingo Molnar63.73%111.11%
Linus Torvalds31.86%111.11%
Linus Torvalds (pre-git)10.62%111.11%
Total161100.00%9100.00%

/******************************************************************************* * * FUNCTION: acpi_ns_build_normalized_path * * PARAMETERS: node - Namespace node * full_path - Where the path name is returned * path_size - Size of returned path name buffer * no_trailing - Remove trailing '_' from each name segment * * RETURN: Return 1 if the AML path is empty, otherwise returning (length * of pathname + 1) which means the 'FullPath' contains a trailing * null. * * DESCRIPTION: Build and return a full namespace pathname. * Note that if the size of 'FullPath' isn't large enough to * contain the namespace node's path name, the actual required * buffer length is returned, and it should be greater than * 'PathSize'. So callers are able to check the returning value * to determine the buffer size of 'FullPath'. * ******************************************************************************/
u32 acpi_ns_build_normalized_path(struct acpi_namespace_node *node, char *full_path, u32 path_size, u8 no_trailing) { u32 length = 0, i; char name[ACPI_NAME_SIZE]; u8 do_no_trailing; char c, *left, *right; struct acpi_namespace_node *next_node; ACPI_FUNCTION_TRACE_PTR(ns_build_normalized_path, node); #define ACPI_PATH_PUT8(path, size, byte, length) \ do { \ if ((length) < (size)) \ { \ (path)[(length)] = (byte); \ } \ (length)++; \ } while (0) /* * Make sure the path_size is correct, so that we don't need to * validate both full_path and path_size. */ if (!full_path) { path_size = 0; } if (!node) { goto build_trailing_null; } next_node = node; while (next_node && next_node != acpi_gbl_root_node) { if (next_node != node) { ACPI_PATH_PUT8(full_path, path_size, AML_DUAL_NAME_PREFIX, length); } ACPI_MOVE_32_TO_32(name, &next_node->name); do_no_trailing = no_trailing; for (i = 0; i < 4; i++) { c = name[4 - i - 1]; if (do_no_trailing && c != '_') { do_no_trailing = FALSE; } if (!do_no_trailing) { ACPI_PATH_PUT8(full_path, path_size, c, length); } } next_node = next_node->parent; } ACPI_PATH_PUT8(full_path, path_size, AML_ROOT_PREFIX, length); /* Reverse the path string */ if (length <= path_size) { left = full_path; right = full_path + length - 1; while (left < right) { c = *left; *left++ = *right; *right-- = c; } } /* Append the trailing null */ build_trailing_null: ACPI_PATH_PUT8(full_path, path_size, '\0', length); #undef ACPI_PATH_PUT8 return_UINT32(length); }

Contributors

PersonTokensPropCommitsCommitProp
Lv Zheng22478.87%111.11%
Linus Torvalds279.51%222.22%
Andy Grover134.58%333.33%
Robert Moore124.23%111.11%
Len Brown62.11%111.11%
Alexey Y. Starikovskiy20.70%111.11%
Total284100.00%9100.00%

/******************************************************************************* * * FUNCTION: acpi_ns_get_normalized_pathname * * PARAMETERS: node - Namespace node whose pathname is needed * no_trailing - Remove trailing '_' from each name segment * * RETURN: Pointer to storage containing the fully qualified name of * the node, In external format (name segments separated by path * separators.) * * DESCRIPTION: Used to obtain the full pathname to a namespace node, usually * for error and debug statements. All trailing '_' will be * removed from the full pathname if 'NoTrailing' is specified.. * ******************************************************************************/
char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node, u8 no_trailing) { char *name_buffer; acpi_size size; ACPI_FUNCTION_TRACE_PTR(ns_get_normalized_pathname, node); /* Calculate required buffer size based on depth below root */ size = acpi_ns_build_normalized_path(node, NULL, 0, no_trailing); if (!size) { return_PTR(NULL); } /* Allocate a buffer to be returned to caller */ name_buffer = ACPI_ALLOCATE_ZEROED(size); if (!name_buffer) { ACPI_ERROR((AE_INFO, "Could not allocate %u bytes", (u32)size)); return_PTR(NULL); } /* Build the path in the allocated buffer */ (void)acpi_ns_build_normalized_path(node, name_buffer, size, no_trailing); return_PTR(name_buffer); }

Contributors

PersonTokensPropCommitsCommitProp
Lv Zheng5550.93%111.11%
Linus Torvalds (pre-git)2926.85%222.22%
Linus Torvalds1312.04%222.22%
Andy Grover65.56%333.33%
Ingo Molnar54.63%111.11%
Total108100.00%9100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Lv Zheng55170.55%29.52%
Andy Grover658.32%419.05%
Linus Torvalds (pre-git)546.91%29.52%
Linus Torvalds496.27%314.29%
Robert Moore394.99%523.81%
Ingo Molnar111.41%14.76%
Len Brown91.15%29.52%
Alexey Y. Starikovskiy20.26%14.76%
Patrick Mochel10.13%14.76%
Total781100.00%21100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.