Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /******************************************************************************
  2.  *
  3.  * Name: acinterp.h - Interpreter subcomponent prototypes and defines
  4.  *
  5.  *****************************************************************************/
  6.  
  7. /*
  8.  * Copyright (C) 2000 - 2015, Intel Corp.
  9.  * All rights reserved.
  10.  *
  11.  * Redistribution and use in source and binary forms, with or without
  12.  * modification, are permitted provided that the following conditions
  13.  * are met:
  14.  * 1. Redistributions of source code must retain the above copyright
  15.  *    notice, this list of conditions, and the following disclaimer,
  16.  *    without modification.
  17.  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  18.  *    substantially similar to the "NO WARRANTY" disclaimer below
  19.  *    ("Disclaimer") and any redistribution must be conditioned upon
  20.  *    including a substantially similar Disclaimer requirement for further
  21.  *    binary redistribution.
  22.  * 3. Neither the names of the above-listed copyright holders nor the names
  23.  *    of any contributors may be used to endorse or promote products derived
  24.  *    from this software without specific prior written permission.
  25.  *
  26.  * Alternatively, this software may be distributed under the terms of the
  27.  * GNU General Public License ("GPL") version 2 as published by the Free
  28.  * Software Foundation.
  29.  *
  30.  * NO WARRANTY
  31.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  32.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  33.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  34.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  35.  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  36.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  37.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  38.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  39.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  40.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  41.  * POSSIBILITY OF SUCH DAMAGES.
  42.  */
  43.  
  44. #ifndef __ACINTERP_H__
  45. #define __ACINTERP_H__
  46.  
  47. #define ACPI_WALK_OPERANDS          (&(walk_state->operands [walk_state->num_operands -1]))
  48.  
  49. /* Macros for tables used for debug output */
  50.  
  51. #define ACPI_EXD_OFFSET(f)          (u8) ACPI_OFFSET (union acpi_operand_object,f)
  52. #define ACPI_EXD_NSOFFSET(f)        (u8) ACPI_OFFSET (struct acpi_namespace_node,f)
  53. #define ACPI_EXD_TABLE_SIZE(name)   (sizeof(name) / sizeof (struct acpi_exdump_info))
  54.  
  55. /*
  56.  * If possible, pack the following structures to byte alignment, since we
  57.  * don't care about performance for debug output. Two cases where we cannot
  58.  * pack the structures:
  59.  *
  60.  * 1) Hardware does not support misaligned memory transfers
  61.  * 2) Compiler does not support pointers within packed structures
  62.  */
  63. #if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
  64. #pragma pack(1)
  65. #endif
  66.  
  67. typedef const struct acpi_exdump_info {
  68.         u8 opcode;
  69.         u8 offset;
  70.         char *name;
  71.  
  72. } acpi_exdump_info;
  73.  
  74. /* Values for the Opcode field above */
  75.  
  76. #define ACPI_EXD_INIT                   0
  77. #define ACPI_EXD_TYPE                   1
  78. #define ACPI_EXD_UINT8                  2
  79. #define ACPI_EXD_UINT16                 3
  80. #define ACPI_EXD_UINT32                 4
  81. #define ACPI_EXD_UINT64                 5
  82. #define ACPI_EXD_LITERAL                6
  83. #define ACPI_EXD_POINTER                7
  84. #define ACPI_EXD_ADDRESS                8
  85. #define ACPI_EXD_STRING                 9
  86. #define ACPI_EXD_BUFFER                 10
  87. #define ACPI_EXD_PACKAGE                11
  88. #define ACPI_EXD_FIELD                  12
  89. #define ACPI_EXD_REFERENCE              13
  90. #define ACPI_EXD_LIST                   14      /* Operand object list */
  91. #define ACPI_EXD_HDLR_LIST              15      /* Address Handler list */
  92. #define ACPI_EXD_RGN_LIST               16      /* Region list */
  93. #define ACPI_EXD_NODE                   17      /* Namespace Node */
  94.  
  95. /* restore default alignment */
  96.  
  97. #pragma pack()
  98.  
  99. /*
  100.  * exconvrt - object conversion
  101.  */
  102. acpi_status
  103. acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
  104.                            union acpi_operand_object **result_desc, u32 flags);
  105.  
  106. acpi_status
  107. acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
  108.                           union acpi_operand_object **result_desc);
  109.  
  110. acpi_status
  111. acpi_ex_convert_to_string(union acpi_operand_object *obj_desc,
  112.                           union acpi_operand_object **result_desc, u32 type);
  113.  
  114. /* Types for ->String conversion */
  115.  
  116. #define ACPI_EXPLICIT_BYTE_COPY         0x00000000
  117. #define ACPI_EXPLICIT_CONVERT_HEX       0x00000001
  118. #define ACPI_IMPLICIT_CONVERT_HEX       0x00000002
  119. #define ACPI_EXPLICIT_CONVERT_DECIMAL   0x00000003
  120.  
  121. acpi_status
  122. acpi_ex_convert_to_target_type(acpi_object_type destination_type,
  123.                                union acpi_operand_object *source_desc,
  124.                                union acpi_operand_object **result_desc,
  125.                                struct acpi_walk_state *walk_state);
  126.  
  127. /*
  128.  * exdebug - AML debug object
  129.  */
  130. void
  131. acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
  132.                         u32 level, u32 index);
  133.  
  134. void
  135. acpi_ex_start_trace_method(struct acpi_namespace_node *method_node,
  136.                            union acpi_operand_object *obj_desc,
  137.                            struct acpi_walk_state *walk_state);
  138.  
  139. void
  140. acpi_ex_stop_trace_method(struct acpi_namespace_node *method_node,
  141.                           union acpi_operand_object *obj_desc,
  142.                           struct acpi_walk_state *walk_state);
  143.  
  144. void
  145. acpi_ex_start_trace_opcode(union acpi_parse_object *op,
  146.                            struct acpi_walk_state *walk_state);
  147.  
  148. void
  149. acpi_ex_stop_trace_opcode(union acpi_parse_object *op,
  150.                           struct acpi_walk_state *walk_state);
  151.  
  152. void
  153. acpi_ex_trace_point(acpi_trace_event_type type,
  154.                     u8 begin, u8 *aml, char *pathname);
  155.  
  156. /*
  157.  * exfield - ACPI AML (p-code) execution - field manipulation
  158.  */
  159. acpi_status
  160. acpi_ex_common_buffer_setup(union acpi_operand_object *obj_desc,
  161.                             u32 buffer_length, u32 * datum_count);
  162.  
  163. acpi_status
  164. acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
  165.                                u64 mask,
  166.                                u64 field_value, u32 field_datum_byte_offset);
  167.  
  168. void
  169. acpi_ex_get_buffer_datum(u64 *datum,
  170.                          void *buffer,
  171.                          u32 buffer_length,
  172.                          u32 byte_granularity, u32 buffer_offset);
  173.  
  174. void
  175. acpi_ex_set_buffer_datum(u64 merged_datum,
  176.                          void *buffer,
  177.                          u32 buffer_length,
  178.                          u32 byte_granularity, u32 buffer_offset);
  179.  
  180. acpi_status
  181. acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
  182.                              union acpi_operand_object *obj_desc,
  183.                              union acpi_operand_object **ret_buffer_desc);
  184.  
  185. acpi_status
  186. acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
  187.                             union acpi_operand_object *obj_desc,
  188.                             union acpi_operand_object **result_desc);
  189.  
  190. /*
  191.  * exfldio - low level field I/O
  192.  */
  193. acpi_status
  194. acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
  195.                            void *buffer, u32 buffer_length);
  196.  
  197. acpi_status
  198. acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
  199.                           void *buffer, u32 buffer_length);
  200.  
  201. acpi_status
  202. acpi_ex_access_region(union acpi_operand_object *obj_desc,
  203.                       u32 field_datum_byte_offset, u64 *value, u32 read_write);
  204.  
  205. /*
  206.  * exmisc - misc support routines
  207.  */
  208. acpi_status
  209. acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
  210.                              union acpi_operand_object **return_desc,
  211.                              struct acpi_walk_state *walk_state);
  212.  
  213. acpi_status
  214. acpi_ex_concat_template(union acpi_operand_object *obj_desc,
  215.                         union acpi_operand_object *obj_desc2,
  216.                         union acpi_operand_object **actual_return_desc,
  217.                         struct acpi_walk_state *walk_state);
  218.  
  219. acpi_status
  220. acpi_ex_do_concatenate(union acpi_operand_object *obj_desc,
  221.                        union acpi_operand_object *obj_desc2,
  222.                        union acpi_operand_object **actual_return_desc,
  223.                        struct acpi_walk_state *walk_state);
  224.  
  225. acpi_status
  226. acpi_ex_do_logical_numeric_op(u16 opcode,
  227.                               u64 integer0, u64 integer1, u8 *logical_result);
  228.  
  229. acpi_status
  230. acpi_ex_do_logical_op(u16 opcode,
  231.                       union acpi_operand_object *operand0,
  232.                       union acpi_operand_object *operand1, u8 *logical_result);
  233.  
  234. u64 acpi_ex_do_math_op(u16 opcode, u64 operand0, u64 operand1);
  235.  
  236. acpi_status acpi_ex_create_mutex(struct acpi_walk_state *walk_state);
  237.  
  238. acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state);
  239.  
  240. acpi_status acpi_ex_create_power_resource(struct acpi_walk_state *walk_state);
  241.  
  242. acpi_status
  243. acpi_ex_create_region(u8 * aml_start,
  244.                       u32 aml_length,
  245.                       u8 region_space, struct acpi_walk_state *walk_state);
  246.  
  247. acpi_status acpi_ex_create_event(struct acpi_walk_state *walk_state);
  248.  
  249. acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state);
  250.  
  251. acpi_status
  252. acpi_ex_create_method(u8 * aml_start,
  253.                       u32 aml_length, struct acpi_walk_state *walk_state);
  254.  
  255. /*
  256.  * exconfig - dynamic table load/unload
  257.  */
  258. acpi_status
  259. acpi_ex_load_op(union acpi_operand_object *obj_desc,
  260.                 union acpi_operand_object *target,
  261.                 struct acpi_walk_state *walk_state);
  262.  
  263. acpi_status
  264. acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
  265.                       union acpi_operand_object **return_desc);
  266.  
  267. acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle);
  268.  
  269. /*
  270.  * exmutex - mutex support
  271.  */
  272. acpi_status
  273. acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
  274.                       union acpi_operand_object *obj_desc,
  275.                       struct acpi_walk_state *walk_state);
  276.  
  277. acpi_status
  278. acpi_ex_acquire_mutex_object(u16 timeout,
  279.                              union acpi_operand_object *obj_desc,
  280.                              acpi_thread_id thread_id);
  281.  
  282. acpi_status
  283. acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
  284.                       struct acpi_walk_state *walk_state);
  285.  
  286. acpi_status acpi_ex_release_mutex_object(union acpi_operand_object *obj_desc);
  287.  
  288. void acpi_ex_release_all_mutexes(struct acpi_thread_state *thread);
  289.  
  290. void acpi_ex_unlink_mutex(union acpi_operand_object *obj_desc);
  291.  
  292. /*
  293.  * exprep - ACPI AML execution - prep utilities
  294.  */
  295. acpi_status
  296. acpi_ex_prep_common_field_object(union acpi_operand_object *obj_desc,
  297.                                  u8 field_flags,
  298.                                  u8 field_attribute,
  299.                                  u32 field_bit_position, u32 field_bit_length);
  300.  
  301. acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info);
  302.  
  303. /*
  304.  * exsystem - Interface to OS services
  305.  */
  306. acpi_status
  307. acpi_ex_system_do_notify_op(union acpi_operand_object *value,
  308.                             union acpi_operand_object *obj_desc);
  309.  
  310. acpi_status acpi_ex_system_do_sleep(u64 time);
  311.  
  312. acpi_status acpi_ex_system_do_stall(u32 time);
  313.  
  314. acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc);
  315.  
  316. acpi_status
  317. acpi_ex_system_wait_event(union acpi_operand_object *time,
  318.                           union acpi_operand_object *obj_desc);
  319.  
  320. acpi_status acpi_ex_system_reset_event(union acpi_operand_object *obj_desc);
  321.  
  322. acpi_status
  323. acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout);
  324.  
  325. acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout);
  326.  
  327. /*
  328.  * exoparg1 - ACPI AML execution, 1 operand
  329.  */
  330. acpi_status acpi_ex_opcode_0A_0T_1R(struct acpi_walk_state *walk_state);
  331.  
  332. acpi_status acpi_ex_opcode_1A_0T_0R(struct acpi_walk_state *walk_state);
  333.  
  334. acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state);
  335.  
  336. acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state);
  337.  
  338. acpi_status acpi_ex_opcode_1A_1T_0R(struct acpi_walk_state *walk_state);
  339.  
  340. /*
  341.  * exoparg2 - ACPI AML execution, 2 operands
  342.  */
  343. acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state);
  344.  
  345. acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state);
  346.  
  347. acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state);
  348.  
  349. acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state);
  350.  
  351. /*
  352.  * exoparg3 - ACPI AML execution, 3 operands
  353.  */
  354. acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state);
  355.  
  356. acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state);
  357.  
  358. /*
  359.  * exoparg6 - ACPI AML execution, 6 operands
  360.  */
  361. acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state *walk_state);
  362.  
  363. /*
  364.  * exresolv - Object resolution and get value functions
  365.  */
  366. acpi_status
  367. acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
  368.                          struct acpi_walk_state *walk_state);
  369.  
  370. acpi_status
  371. acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
  372.                          union acpi_operand_object *operand,
  373.                          acpi_object_type * return_type,
  374.                          union acpi_operand_object **return_desc);
  375.  
  376. /*
  377.  * exresnte - resolve namespace node
  378.  */
  379. acpi_status
  380. acpi_ex_resolve_node_to_value(struct acpi_namespace_node **stack_ptr,
  381.                               struct acpi_walk_state *walk_state);
  382.  
  383. /*
  384.  * exresop - resolve operand to value
  385.  */
  386. acpi_status
  387. acpi_ex_resolve_operands(u16 opcode,
  388.                          union acpi_operand_object **stack_ptr,
  389.                          struct acpi_walk_state *walk_state);
  390.  
  391. /*
  392.  * exdump - Interpreter debug output routines
  393.  */
  394. void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth);
  395.  
  396. void
  397. acpi_ex_dump_operands(union acpi_operand_object **operands,
  398.                       const char *opcode_name, u32 num_opcodes);
  399.  
  400. void
  401. acpi_ex_dump_object_descriptor(union acpi_operand_object *object, u32 flags);
  402.  
  403. void acpi_ex_dump_namespace_node(struct acpi_namespace_node *node, u32 flags);
  404.  
  405. /*
  406.  * exnames - AML namestring support
  407.  */
  408. acpi_status
  409. acpi_ex_get_name_string(acpi_object_type data_type,
  410.                         u8 * in_aml_address,
  411.                         char **out_name_string, u32 * out_name_length);
  412.  
  413. /*
  414.  * exstore - Object store support
  415.  */
  416. acpi_status
  417. acpi_ex_store(union acpi_operand_object *val_desc,
  418.               union acpi_operand_object *dest_desc,
  419.               struct acpi_walk_state *walk_state);
  420.  
  421. acpi_status
  422. acpi_ex_store_object_to_node(union acpi_operand_object *source_desc,
  423.                              struct acpi_namespace_node *node,
  424.                              struct acpi_walk_state *walk_state,
  425.                              u8 implicit_conversion);
  426.  
  427. #define ACPI_IMPLICIT_CONVERSION        TRUE
  428. #define ACPI_NO_IMPLICIT_CONVERSION     FALSE
  429.  
  430. /*
  431.  * exstoren - resolve/store object
  432.  */
  433. acpi_status
  434. acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
  435.                        acpi_object_type target_type,
  436.                        struct acpi_walk_state *walk_state);
  437.  
  438. acpi_status
  439. acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,
  440.                                union acpi_operand_object *dest_desc,
  441.                                union acpi_operand_object **new_desc,
  442.                                struct acpi_walk_state *walk_state);
  443.  
  444. /*
  445.  * exstorob - store object - buffer/string
  446.  */
  447. acpi_status
  448. acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
  449.                                union acpi_operand_object *target_desc);
  450.  
  451. acpi_status
  452. acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
  453.                                union acpi_operand_object *target_desc);
  454.  
  455. /*
  456.  * excopy - object copy
  457.  */
  458. acpi_status
  459. acpi_ex_copy_integer_to_index_field(union acpi_operand_object *source_desc,
  460.                                     union acpi_operand_object *target_desc);
  461.  
  462. acpi_status
  463. acpi_ex_copy_integer_to_bank_field(union acpi_operand_object *source_desc,
  464.                                    union acpi_operand_object *target_desc);
  465.  
  466. acpi_status
  467. acpi_ex_copy_data_to_named_field(union acpi_operand_object *source_desc,
  468.                                  struct acpi_namespace_node *node);
  469.  
  470. acpi_status
  471. acpi_ex_copy_integer_to_buffer_field(union acpi_operand_object *source_desc,
  472.                                      union acpi_operand_object *target_desc);
  473.  
  474. /*
  475.  * exutils - interpreter/scanner utilities
  476.  */
  477. void acpi_ex_enter_interpreter(void);
  478.  
  479. void acpi_ex_exit_interpreter(void);
  480.  
  481. u8 acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc);
  482.  
  483. void acpi_ex_acquire_global_lock(u32 rule);
  484.  
  485. void acpi_ex_release_global_lock(u32 rule);
  486.  
  487. void acpi_ex_eisa_id_to_string(char *dest, u64 compressed_id);
  488.  
  489. void acpi_ex_integer_to_string(char *dest, u64 value);
  490.  
  491. void acpi_ex_pci_cls_to_string(char *dest, u8 class_code[3]);
  492.  
  493. u8 acpi_is_valid_space_id(u8 space_id);
  494.  
  495. /*
  496.  * exregion - default op_region handlers
  497.  */
  498. acpi_status
  499. acpi_ex_system_memory_space_handler(u32 function,
  500.                                     acpi_physical_address address,
  501.                                     u32 bit_width,
  502.                                     u64 *value,
  503.                                     void *handler_context,
  504.                                     void *region_context);
  505.  
  506. acpi_status
  507. acpi_ex_system_io_space_handler(u32 function,
  508.                                 acpi_physical_address address,
  509.                                 u32 bit_width,
  510.                                 u64 *value,
  511.                                 void *handler_context, void *region_context);
  512.  
  513. acpi_status
  514. acpi_ex_pci_config_space_handler(u32 function,
  515.                                  acpi_physical_address address,
  516.                                  u32 bit_width,
  517.                                  u64 *value,
  518.                                  void *handler_context, void *region_context);
  519.  
  520. acpi_status
  521. acpi_ex_cmos_space_handler(u32 function,
  522.                            acpi_physical_address address,
  523.                            u32 bit_width,
  524.                            u64 *value,
  525.                            void *handler_context, void *region_context);
  526.  
  527. acpi_status
  528. acpi_ex_pci_bar_space_handler(u32 function,
  529.                               acpi_physical_address address,
  530.                               u32 bit_width,
  531.                               u64 *value,
  532.                               void *handler_context, void *region_context);
  533.  
  534. acpi_status
  535. acpi_ex_embedded_controller_space_handler(u32 function,
  536.                                           acpi_physical_address address,
  537.                                           u32 bit_width,
  538.                                           u64 *value,
  539.                                           void *handler_context,
  540.                                           void *region_context);
  541.  
  542. acpi_status
  543. acpi_ex_sm_bus_space_handler(u32 function,
  544.                              acpi_physical_address address,
  545.                              u32 bit_width,
  546.                              u64 *value,
  547.                              void *handler_context, void *region_context);
  548.  
  549. acpi_status
  550. acpi_ex_data_table_space_handler(u32 function,
  551.                                  acpi_physical_address address,
  552.                                  u32 bit_width,
  553.                                  u64 *value,
  554.                                  void *handler_context, void *region_context);
  555.  
  556. #endif                          /* __INTERP_H__ */
  557.