// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 /****************************************************************************** * * Module Name: utobject - ACPI object create/delete/size/cache routines * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #include <acpi/acpi.h> #include <linux/kmemleak.h> #include "accommon.h" #include "acnamesp.h" #define _COMPONENT … ACPI_MODULE_NAME("utobject") /* Local prototypes */ static acpi_status acpi_ut_get_simple_object_size(union acpi_operand_object *obj, acpi_size *obj_length); static acpi_status acpi_ut_get_package_object_size(union acpi_operand_object *obj, acpi_size *obj_length); static acpi_status acpi_ut_get_element_length(u8 object_type, union acpi_operand_object *source_object, union acpi_generic_state *state, void *context); /******************************************************************************* * * FUNCTION: acpi_ut_create_internal_object_dbg * * PARAMETERS: module_name - Source file name of caller * line_number - Line number of caller * component_id - Component type of caller * type - ACPI Type of the new object * * RETURN: A new internal object, null on failure * * DESCRIPTION: Create and initialize a new internal object. * * NOTE: We always allocate the worst-case object descriptor because * these objects are cached, and we want them to be * one-size-satisfies-any-request. This in itself may not be * the most memory efficient, but the efficiency of the object * cache should more than make up for this! * ******************************************************************************/ union acpi_operand_object *acpi_ut_create_internal_object_dbg(const char *module_name, u32 line_number, u32 component_id, acpi_object_type type) { … } /******************************************************************************* * * FUNCTION: acpi_ut_create_package_object * * PARAMETERS: count - Number of package elements * * RETURN: Pointer to a new Package object, null on failure * * DESCRIPTION: Create a fully initialized package object * ******************************************************************************/ union acpi_operand_object *acpi_ut_create_package_object(u32 count) { … } /******************************************************************************* * * FUNCTION: acpi_ut_create_integer_object * * PARAMETERS: initial_value - Initial value for the integer * * RETURN: Pointer to a new Integer object, null on failure * * DESCRIPTION: Create an initialized integer object * ******************************************************************************/ union acpi_operand_object *acpi_ut_create_integer_object(u64 initial_value) { … } /******************************************************************************* * * FUNCTION: acpi_ut_create_buffer_object * * PARAMETERS: buffer_size - Size of buffer to be created * * RETURN: Pointer to a new Buffer object, null on failure * * DESCRIPTION: Create a fully initialized buffer object * ******************************************************************************/ union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size) { … } /******************************************************************************* * * FUNCTION: acpi_ut_create_string_object * * PARAMETERS: string_size - Size of string to be created. Does not * include NULL terminator, this is added * automatically. * * RETURN: Pointer to a new String object * * DESCRIPTION: Create a fully initialized string object * ******************************************************************************/ union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size) { … } /******************************************************************************* * * FUNCTION: acpi_ut_valid_internal_object * * PARAMETERS: object - Object to be validated * * RETURN: TRUE if object is valid, FALSE otherwise * * DESCRIPTION: Validate a pointer to be of type union acpi_operand_object * ******************************************************************************/ u8 acpi_ut_valid_internal_object(void *object) { … } /******************************************************************************* * * FUNCTION: acpi_ut_allocate_object_desc_dbg * * PARAMETERS: module_name - Caller's module name (for error output) * line_number - Caller's line number (for error output) * component_id - Caller's component ID (for error output) * * RETURN: Pointer to newly allocated object descriptor. Null on error * * DESCRIPTION: Allocate a new object descriptor. Gracefully handle * error conditions. * ******************************************************************************/ void *acpi_ut_allocate_object_desc_dbg(const char *module_name, u32 line_number, u32 component_id) { … } /******************************************************************************* * * FUNCTION: acpi_ut_delete_object_desc * * PARAMETERS: object - An Acpi internal object to be deleted * * RETURN: None. * * DESCRIPTION: Free an ACPI object descriptor or add it to the object cache * ******************************************************************************/ void acpi_ut_delete_object_desc(union acpi_operand_object *object) { … } /******************************************************************************* * * FUNCTION: acpi_ut_get_simple_object_size * * PARAMETERS: internal_object - An ACPI operand object * obj_length - Where the length is returned * * RETURN: Status * * DESCRIPTION: This function is called to determine the space required to * contain a simple object for return to an external user. * * The length includes the object structure plus any additional * needed space. * ******************************************************************************/ static acpi_status acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object, acpi_size *obj_length) { … } /******************************************************************************* * * FUNCTION: acpi_ut_get_element_length * * PARAMETERS: acpi_pkg_callback * * RETURN: Status * * DESCRIPTION: Get the length of one package element. * ******************************************************************************/ static acpi_status acpi_ut_get_element_length(u8 object_type, union acpi_operand_object *source_object, union acpi_generic_state *state, void *context) { … } /******************************************************************************* * * FUNCTION: acpi_ut_get_package_object_size * * PARAMETERS: internal_object - An ACPI internal object * obj_length - Where the length is returned * * RETURN: Status * * DESCRIPTION: This function is called to determine the space required to * contain a package object for return to an external user. * * This is moderately complex since a package contains other * objects including packages. * ******************************************************************************/ static acpi_status acpi_ut_get_package_object_size(union acpi_operand_object *internal_object, acpi_size *obj_length) { … } /******************************************************************************* * * FUNCTION: acpi_ut_get_object_size * * PARAMETERS: internal_object - An ACPI internal object * obj_length - Where the length will be returned * * RETURN: Status * * DESCRIPTION: This function is called to determine the space required to * contain an object for return to an API user. * ******************************************************************************/ acpi_status acpi_ut_get_object_size(union acpi_operand_object *internal_object, acpi_size *obj_length) { … }