acdispat.h 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
  2. /******************************************************************************
  3. *
  4. * Name: acdispat.h - dispatcher (parser to interpreter interface)
  5. *
  6. * Copyright (C) 2000 - 2022, Intel Corp.
  7. *
  8. *****************************************************************************/
  9. #ifndef _ACDISPAT_H_
  10. #define _ACDISPAT_H_
  11. #define NAMEOF_LOCAL_NTE "__L0"
  12. #define NAMEOF_ARG_NTE "__A0"
  13. /*
  14. * dsargs - execution of dynamic arguments for static objects
  15. */
  16. acpi_status
  17. acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc);
  18. acpi_status
  19. acpi_ds_get_bank_field_arguments(union acpi_operand_object *obj_desc);
  20. acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *rgn_desc);
  21. acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc);
  22. acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc);
  23. /*
  24. * dscontrol - support for execution control opcodes
  25. */
  26. acpi_status
  27. acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
  28. union acpi_parse_object *op);
  29. acpi_status
  30. acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state,
  31. union acpi_parse_object *op);
  32. /*
  33. * dsopcode - support for late operand evaluation
  34. */
  35. acpi_status
  36. acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
  37. union acpi_parse_object *op);
  38. acpi_status
  39. acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
  40. union acpi_parse_object *op);
  41. acpi_status
  42. acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,
  43. union acpi_parse_object *op);
  44. acpi_status
  45. acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,
  46. union acpi_parse_object *op,
  47. union acpi_operand_object *obj_desc);
  48. acpi_status
  49. acpi_ds_eval_bank_field_operands(struct acpi_walk_state *walk_state,
  50. union acpi_parse_object *op);
  51. acpi_status acpi_ds_initialize_region(acpi_handle obj_handle);
  52. /*
  53. * dsexec - Parser/Interpreter interface, method execution callbacks
  54. */
  55. acpi_status
  56. acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
  57. union acpi_operand_object *result_obj);
  58. acpi_status
  59. acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
  60. union acpi_parse_object **out_op);
  61. acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *state);
  62. /*
  63. * dsfield - Parser/Interpreter interface for AML fields
  64. */
  65. acpi_status
  66. acpi_ds_create_field(union acpi_parse_object *op,
  67. struct acpi_namespace_node *region_node,
  68. struct acpi_walk_state *walk_state);
  69. acpi_status
  70. acpi_ds_create_bank_field(union acpi_parse_object *op,
  71. struct acpi_namespace_node *region_node,
  72. struct acpi_walk_state *walk_state);
  73. acpi_status
  74. acpi_ds_create_index_field(union acpi_parse_object *op,
  75. struct acpi_namespace_node *region_node,
  76. struct acpi_walk_state *walk_state);
  77. acpi_status
  78. acpi_ds_create_buffer_field(union acpi_parse_object *op,
  79. struct acpi_walk_state *walk_state);
  80. acpi_status
  81. acpi_ds_init_field_objects(union acpi_parse_object *op,
  82. struct acpi_walk_state *walk_state);
  83. /*
  84. * dsload - Parser/Interpreter interface
  85. */
  86. acpi_status
  87. acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number);
  88. /* dsload - pass 1 namespace load callbacks */
  89. acpi_status
  90. acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
  91. union acpi_parse_object **out_op);
  92. acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state);
  93. /* dsload - pass 2 namespace load callbacks */
  94. acpi_status
  95. acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
  96. union acpi_parse_object **out_op);
  97. acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state);
  98. /*
  99. * dsmthdat - method data (locals/args)
  100. */
  101. acpi_status
  102. acpi_ds_store_object_to_local(u8 type,
  103. u32 index,
  104. union acpi_operand_object *src_desc,
  105. struct acpi_walk_state *walk_state);
  106. acpi_status
  107. acpi_ds_method_data_get_entry(u16 opcode,
  108. u32 index,
  109. struct acpi_walk_state *walk_state,
  110. union acpi_operand_object ***node);
  111. void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state);
  112. u8 acpi_ds_is_method_value(union acpi_operand_object *obj_desc);
  113. acpi_status
  114. acpi_ds_method_data_get_value(u8 type,
  115. u32 index,
  116. struct acpi_walk_state *walk_state,
  117. union acpi_operand_object **dest_desc);
  118. acpi_status
  119. acpi_ds_method_data_init_args(union acpi_operand_object **params,
  120. u32 max_param_count,
  121. struct acpi_walk_state *walk_state);
  122. acpi_status
  123. acpi_ds_method_data_get_node(u8 type,
  124. u32 index,
  125. struct acpi_walk_state *walk_state,
  126. struct acpi_namespace_node **node);
  127. void acpi_ds_method_data_init(struct acpi_walk_state *walk_state);
  128. /*
  129. * dsmethod - Parser/Interpreter interface - control method parsing
  130. */
  131. acpi_status
  132. acpi_ds_auto_serialize_method(struct acpi_namespace_node *node,
  133. union acpi_operand_object *obj_desc);
  134. acpi_status
  135. acpi_ds_call_control_method(struct acpi_thread_state *thread,
  136. struct acpi_walk_state *walk_state,
  137. union acpi_parse_object *op);
  138. acpi_status
  139. acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
  140. union acpi_operand_object *return_desc);
  141. void
  142. acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
  143. struct acpi_walk_state *walk_state);
  144. acpi_status
  145. acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
  146. union acpi_operand_object *obj_desc,
  147. struct acpi_walk_state *walk_state);
  148. acpi_status
  149. acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state);
  150. /*
  151. * dsinit
  152. */
  153. acpi_status
  154. acpi_ds_initialize_objects(u32 table_index,
  155. struct acpi_namespace_node *start_node);
  156. /*
  157. * dsobject - Parser/Interpreter interface - object initialization and conversion
  158. */
  159. acpi_status
  160. acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
  161. union acpi_parse_object *op,
  162. union acpi_operand_object **obj_desc_ptr);
  163. acpi_status
  164. acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
  165. union acpi_parse_object *op,
  166. u32 buffer_length,
  167. union acpi_operand_object **obj_desc_ptr);
  168. acpi_status
  169. acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
  170. union acpi_parse_object *op,
  171. u32 package_length,
  172. union acpi_operand_object **obj_desc);
  173. acpi_status
  174. acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
  175. union acpi_parse_object *op,
  176. u16 opcode, union acpi_operand_object **obj_desc);
  177. acpi_status
  178. acpi_ds_create_node(struct acpi_walk_state *walk_state,
  179. struct acpi_namespace_node *node,
  180. union acpi_parse_object *op);
  181. /*
  182. * dspkginit - Package object initialization
  183. */
  184. acpi_status
  185. acpi_ds_init_package_element(u8 object_type,
  186. union acpi_operand_object *source_object,
  187. union acpi_generic_state *state, void *context);
  188. /*
  189. * dsutils - Parser/Interpreter interface utility routines
  190. */
  191. void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state);
  192. u8
  193. acpi_ds_do_implicit_return(union acpi_operand_object *return_desc,
  194. struct acpi_walk_state *walk_state,
  195. u8 add_reference);
  196. u8
  197. acpi_ds_is_result_used(union acpi_parse_object *op,
  198. struct acpi_walk_state *walk_state);
  199. void
  200. acpi_ds_delete_result_if_not_used(union acpi_parse_object *op,
  201. union acpi_operand_object *result_obj,
  202. struct acpi_walk_state *walk_state);
  203. acpi_status
  204. acpi_ds_create_operand(struct acpi_walk_state *walk_state,
  205. union acpi_parse_object *arg, u32 args_remaining);
  206. acpi_status
  207. acpi_ds_create_operands(struct acpi_walk_state *walk_state,
  208. union acpi_parse_object *first_arg);
  209. acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state);
  210. void acpi_ds_clear_operands(struct acpi_walk_state *walk_state);
  211. acpi_status acpi_ds_evaluate_name_path(struct acpi_walk_state *walk_state);
  212. /*
  213. * dswscope - Scope Stack manipulation
  214. */
  215. acpi_status
  216. acpi_ds_scope_stack_push(struct acpi_namespace_node *node,
  217. acpi_object_type type,
  218. struct acpi_walk_state *walk_state);
  219. acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state);
  220. void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state);
  221. /*
  222. * dswstate - parser WALK_STATE management routines
  223. */
  224. acpi_status
  225. acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state);
  226. acpi_status
  227. acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state);
  228. struct acpi_walk_state * acpi_ds_create_walk_state(acpi_owner_id owner_id,
  229. union acpi_parse_object
  230. *origin,
  231. union acpi_operand_object
  232. *mth_desc,
  233. struct acpi_thread_state
  234. *thread);
  235. acpi_status
  236. acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
  237. union acpi_parse_object *op,
  238. struct acpi_namespace_node *method_node,
  239. u8 * aml_start,
  240. u32 aml_length,
  241. struct acpi_evaluate_info *info, u8 pass_number);
  242. void
  243. acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
  244. struct acpi_walk_state *walk_state);
  245. void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state);
  246. struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state
  247. *thread);
  248. void
  249. acpi_ds_push_walk_state(struct acpi_walk_state *walk_state,
  250. struct acpi_thread_state *thread);
  251. acpi_status acpi_ds_result_stack_clear(struct acpi_walk_state *walk_state);
  252. struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state
  253. *thread);
  254. acpi_status
  255. acpi_ds_result_pop(union acpi_operand_object **object,
  256. struct acpi_walk_state *walk_state);
  257. acpi_status
  258. acpi_ds_result_push(union acpi_operand_object *object,
  259. struct acpi_walk_state *walk_state);
  260. /*
  261. * dsdebug - parser debugging routines
  262. */
  263. void
  264. acpi_ds_dump_method_stack(acpi_status status,
  265. struct acpi_walk_state *walk_state,
  266. union acpi_parse_object *op);
  267. #endif /* _ACDISPAT_H_ */