// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 /****************************************************************************** * * Module Name: dsfield - Dispatcher field routines * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #include <acpi/acpi.h> #include "accommon.h" #include "amlcode.h" #include "acdispat.h" #include "acinterp.h" #include "acnamesp.h" #include "acparser.h" #ifdef ACPI_EXEC_APP #include "aecommon.h" #endif #define _COMPONENT … ACPI_MODULE_NAME("dsfield") /* Local prototypes */ #ifdef ACPI_ASL_COMPILER #include "acdisasm.h" static acpi_status acpi_ds_create_external_region(acpi_status lookup_status, union acpi_parse_object *op, char *path, struct acpi_walk_state *walk_state, struct acpi_namespace_node **node); #endif static acpi_status acpi_ds_get_field_names(struct acpi_create_field_info *info, struct acpi_walk_state *walk_state, union acpi_parse_object *arg); #ifdef ACPI_ASL_COMPILER /******************************************************************************* * * FUNCTION: acpi_ds_create_external_region (iASL Disassembler only) * * PARAMETERS: lookup_status - Status from ns_lookup operation * op - Op containing the Field definition and args * path - Pathname of the region * ` walk_state - Current method state * node - Where the new region node is returned * * RETURN: Status * * DESCRIPTION: Add region to the external list if NOT_FOUND. Create a new * region node/object. * ******************************************************************************/ static acpi_status acpi_ds_create_external_region(acpi_status lookup_status, union acpi_parse_object *op, char *path, struct acpi_walk_state *walk_state, struct acpi_namespace_node **node) { acpi_status status; union acpi_operand_object *obj_desc; if (lookup_status != AE_NOT_FOUND) { return (lookup_status); } /* * Table disassembly: * operation_region not found. Generate an External for it, and * insert the name into the namespace. */ acpi_dm_add_op_to_external_list(op, path, ACPI_TYPE_REGION, 0, 0); status = acpi_ns_lookup(walk_state->scope_info, path, ACPI_TYPE_REGION, ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT, walk_state, node); if (ACPI_FAILURE(status)) { return (status); } /* Must create and install a region object for the new node */ obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_REGION); if (!obj_desc) { return (AE_NO_MEMORY); } obj_desc->region.node = *node; status = acpi_ns_attach_object(*node, obj_desc, ACPI_TYPE_REGION); return (status); } #endif /******************************************************************************* * * FUNCTION: acpi_ds_create_buffer_field * * PARAMETERS: op - Current parse op (create_XXField) * walk_state - Current state * * RETURN: Status * * DESCRIPTION: Execute the create_field operators: * create_bit_field_op, * create_byte_field_op, * create_word_field_op, * create_dword_field_op, * create_qword_field_op, * create_field_op (all of which define a field in a buffer) * ******************************************************************************/ acpi_status acpi_ds_create_buffer_field(union acpi_parse_object *op, struct acpi_walk_state *walk_state) { … } /******************************************************************************* * * FUNCTION: acpi_ds_get_field_names * * PARAMETERS: info - create_field info structure * walk_state - Current method state * arg - First parser arg for the field name list * * RETURN: Status * * DESCRIPTION: Process all named fields in a field declaration. Names are * entered into the namespace. * ******************************************************************************/ static acpi_status acpi_ds_get_field_names(struct acpi_create_field_info *info, struct acpi_walk_state *walk_state, union acpi_parse_object *arg) { … } /******************************************************************************* * * FUNCTION: acpi_ds_create_field * * PARAMETERS: op - Op containing the Field definition and args * region_node - Object for the containing Operation Region * ` walk_state - Current method state * * RETURN: Status * * DESCRIPTION: Create a new field in the specified operation region * ******************************************************************************/ acpi_status acpi_ds_create_field(union acpi_parse_object *op, struct acpi_namespace_node *region_node, struct acpi_walk_state *walk_state) { … } /******************************************************************************* * * FUNCTION: acpi_ds_init_field_objects * * PARAMETERS: op - Op containing the Field definition and args * ` walk_state - Current method state * * RETURN: Status * * DESCRIPTION: For each "Field Unit" name in the argument list that is * part of the field declaration, enter the name into the * namespace. * ******************************************************************************/ acpi_status acpi_ds_init_field_objects(union acpi_parse_object *op, struct acpi_walk_state *walk_state) { … } /******************************************************************************* * * FUNCTION: acpi_ds_create_bank_field * * PARAMETERS: op - Op containing the Field definition and args * region_node - Object for the containing Operation Region * walk_state - Current method state * * RETURN: Status * * DESCRIPTION: Create a new bank field in the specified operation region * ******************************************************************************/ acpi_status acpi_ds_create_bank_field(union acpi_parse_object *op, struct acpi_namespace_node *region_node, struct acpi_walk_state *walk_state) { … } /******************************************************************************* * * FUNCTION: acpi_ds_create_index_field * * PARAMETERS: op - Op containing the Field definition and args * region_node - Object for the containing Operation Region * ` walk_state - Current method state * * RETURN: Status * * DESCRIPTION: Create a new index field in the specified operation region * ******************************************************************************/ acpi_status acpi_ds_create_index_field(union acpi_parse_object *op, struct acpi_namespace_node *region_node, struct acpi_walk_state *walk_state) { … }