Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
0002 /******************************************************************************
0003  *
0004  * Name: acstruct.h - Internal structs
0005  *
0006  * Copyright (C) 2000 - 2022, Intel Corp.
0007  *
0008  *****************************************************************************/
0009 
0010 #ifndef __ACSTRUCT_H__
0011 #define __ACSTRUCT_H__
0012 
0013 /* acpisrc:struct_defs -- for acpisrc conversion */
0014 
0015 /*****************************************************************************
0016  *
0017  * Tree walking typedefs and structs
0018  *
0019  ****************************************************************************/
0020 
0021 /*
0022  * Walk state - current state of a parse tree walk. Used for both a leisurely
0023  * stroll through the tree (for whatever reason), and for control method
0024  * execution.
0025  */
0026 #define ACPI_NEXT_OP_DOWNWARD       1
0027 #define ACPI_NEXT_OP_UPWARD         2
0028 
0029 /*
0030  * Groups of definitions for walk_type used for different implementations of
0031  * walkers (never simultaneously) - flags for interpreter:
0032  */
0033 #define ACPI_WALK_NON_METHOD        0
0034 #define ACPI_WALK_METHOD            0x01
0035 #define ACPI_WALK_METHOD_RESTART    0x02
0036 
0037 struct acpi_walk_state {
0038     struct acpi_walk_state *next;   /* Next walk_state in list */
0039     u8 descriptor_type; /* To differentiate various internal objs */
0040     u8 walk_type;
0041     u16 opcode;     /* Current AML opcode */
0042     u8 next_op_info;    /* Info about next_op */
0043     u8 num_operands;    /* Stack pointer for Operands[] array */
0044     u8 operand_index;   /* Index into operand stack, to be used by acpi_ds_obj_stack_push */
0045     acpi_owner_id owner_id; /* Owner of objects created during the walk */
0046     u8 last_predicate;  /* Result of last predicate */
0047     u8 current_result;
0048     u8 return_used;
0049     u8 scope_depth;
0050     u8 pass_number;     /* Parse pass during table load */
0051     u8 namespace_override;  /* Override existing objects */
0052     u8 result_size;     /* Total elements for the result stack */
0053     u8 result_count;    /* Current number of occupied elements of result stack */
0054     u8 *aml;
0055     u32 arg_types;
0056     u32 method_breakpoint;  /* For single stepping */
0057     u32 user_breakpoint;    /* User AML breakpoint */
0058     u32 parse_flags;
0059 
0060     struct acpi_parse_state parser_state;   /* Current state of parser */
0061     u32 prev_arg_types;
0062     u32 arg_count;      /* push for fixed or var args */
0063     u16 method_nesting_depth;
0064     u8 method_is_nested;
0065 
0066     struct acpi_namespace_node arguments[ACPI_METHOD_NUM_ARGS]; /* Control method arguments */
0067     struct acpi_namespace_node local_variables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */
0068     union acpi_operand_object *operands[ACPI_OBJ_NUM_OPERANDS + 1]; /* Operands passed to the interpreter (+1 for NULL terminator) */
0069     union acpi_operand_object **params;
0070 
0071     u8 *aml_last_while;
0072     union acpi_operand_object **caller_return_desc;
0073     union acpi_generic_state *control_state;    /* List of control states (nested IFs) */
0074     struct acpi_namespace_node *deferred_node;  /* Used when executing deferred opcodes */
0075     union acpi_operand_object *implicit_return_obj;
0076     struct acpi_namespace_node *method_call_node;   /* Called method Node */
0077     union acpi_parse_object *method_call_op;    /* method_call Op if running a method */
0078     union acpi_operand_object *method_desc; /* Method descriptor if running a method */
0079     struct acpi_namespace_node *method_node;    /* Method node if running a method */
0080     char *method_pathname;  /* Full pathname of running method */
0081     union acpi_parse_object *op;    /* Current parser op */
0082     const struct acpi_opcode_info *op_info; /* Info on current opcode */
0083     union acpi_parse_object *origin;    /* Start of walk [Obsolete] */
0084     union acpi_operand_object *result_obj;
0085     union acpi_generic_state *results;  /* Stack of accumulated results */
0086     union acpi_operand_object *return_desc; /* Return object, if any */
0087     union acpi_generic_state *scope_info;   /* Stack of nested scopes */
0088     union acpi_parse_object *prev_op;   /* Last op that was processed */
0089     union acpi_parse_object *next_op;   /* next op to be processed */
0090     struct acpi_thread_state *thread;
0091     acpi_parse_downwards descending_callback;
0092     acpi_parse_upwards ascending_callback;
0093 };
0094 
0095 /* Info used by acpi_ns_initialize_objects and acpi_ds_initialize_objects */
0096 
0097 struct acpi_init_walk_info {
0098     u32 table_index;
0099     u32 object_count;
0100     u32 method_count;
0101     u32 serial_method_count;
0102     u32 non_serial_method_count;
0103     u32 serialized_method_count;
0104     u32 device_count;
0105     u32 op_region_count;
0106     u32 field_count;
0107     u32 buffer_count;
0108     u32 package_count;
0109     u32 op_region_init;
0110     u32 field_init;
0111     u32 buffer_init;
0112     u32 package_init;
0113     acpi_owner_id owner_id;
0114 };
0115 
0116 struct acpi_get_devices_info {
0117     acpi_walk_callback user_function;
0118     void *context;
0119     const char *hid;
0120 };
0121 
0122 union acpi_aml_operands {
0123     union acpi_operand_object *operands[7];
0124 
0125     struct {
0126         struct acpi_object_integer *type;
0127         struct acpi_object_integer *code;
0128         struct acpi_object_integer *argument;
0129 
0130     } fatal;
0131 
0132     struct {
0133         union acpi_operand_object *source;
0134         struct acpi_object_integer *index;
0135         union acpi_operand_object *target;
0136 
0137     } index;
0138 
0139     struct {
0140         union acpi_operand_object *source;
0141         struct acpi_object_integer *index;
0142         struct acpi_object_integer *length;
0143         union acpi_operand_object *target;
0144 
0145     } mid;
0146 };
0147 
0148 /*
0149  * Structure used to pass object evaluation information and parameters.
0150  * Purpose is to reduce CPU stack use.
0151  */
0152 struct acpi_evaluate_info {
0153     /* The first 3 elements are passed by the caller to acpi_ns_evaluate */
0154 
0155     struct acpi_namespace_node *prefix_node;    /* Input: starting node */
0156     const char *relative_pathname;  /* Input: path relative to prefix_node */
0157     union acpi_operand_object **parameters; /* Input: argument list */
0158 
0159     struct acpi_namespace_node *node;   /* Resolved node (prefix_node:relative_pathname) */
0160     union acpi_operand_object *obj_desc;    /* Object attached to the resolved node */
0161     char *full_pathname;    /* Full pathname of the resolved node */
0162 
0163     const union acpi_predefined_info *predefined;   /* Used if Node is a predefined name */
0164     union acpi_operand_object *return_object;   /* Object returned from the evaluation */
0165     union acpi_operand_object *parent_package;  /* Used if return object is a Package */
0166 
0167     u32 return_flags;   /* Used for return value analysis */
0168     u32 return_btype;   /* Bitmapped type of the returned object */
0169     u16 param_count;    /* Count of the input argument list */
0170     u16 node_flags;     /* Same as Node->Flags */
0171     u8 pass_number;     /* Parser pass number */
0172     u8 return_object_type;  /* Object type of the returned object */
0173     u8 flags;       /* General flags */
0174 };
0175 
0176 /* Values for Flags above */
0177 
0178 #define ACPI_IGNORE_RETURN_VALUE    1
0179 
0180 /* Defines for return_flags field above */
0181 
0182 #define ACPI_OBJECT_REPAIRED        1
0183 #define ACPI_OBJECT_WRAPPED         2
0184 
0185 /* Info used by acpi_ns_initialize_devices */
0186 
0187 struct acpi_device_walk_info {
0188     struct acpi_table_desc *table_desc;
0189     struct acpi_evaluate_info *evaluate_info;
0190     u32 device_count;
0191     u32 num_STA;
0192     u32 num_INI;
0193 };
0194 
0195 /* Info used by Acpi  acpi_db_display_fields */
0196 
0197 struct acpi_region_walk_info {
0198     u32 debug_level;
0199     u32 count;
0200     acpi_owner_id owner_id;
0201     u8 display_type;
0202     u32 address_space_id;
0203 };
0204 
0205 /* TBD: [Restructure] Merge with struct above */
0206 
0207 struct acpi_walk_info {
0208     u32 debug_level;
0209     u32 count;
0210     acpi_owner_id owner_id;
0211     u8 display_type;
0212 };
0213 
0214 /* Display Types */
0215 
0216 #define ACPI_DISPLAY_SUMMARY        (u8) 0
0217 #define ACPI_DISPLAY_OBJECTS        (u8) 1
0218 #define ACPI_DISPLAY_MASK           (u8) 1
0219 
0220 #define ACPI_DISPLAY_SHORT          (u8) 2
0221 
0222 #endif