acdispat.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. /******************************************************************************
  2. *
  3. * Name: acdispat.h - dispatcher (parser to interpreter interface)
  4. *
  5. *****************************************************************************/
  6. /*
  7. * Copyright (C) 2000 - 2015, Intel Corp.
  8. * All rights reserved.
  9. *
  10. * Redistribution and use in source and binary forms, with or without
  11. * modification, are permitted provided that the following conditions
  12. * are met:
  13. * 1. Redistributions of source code must retain the above copyright
  14. * notice, this list of conditions, and the following disclaimer,
  15. * without modification.
  16. * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  17. * substantially similar to the "NO WARRANTY" disclaimer below
  18. * ("Disclaimer") and any redistribution must be conditioned upon
  19. * including a substantially similar Disclaimer requirement for further
  20. * binary redistribution.
  21. * 3. Neither the names of the above-listed copyright holders nor the names
  22. * of any contributors may be used to endorse or promote products derived
  23. * from this software without specific prior written permission.
  24. *
  25. * Alternatively, this software may be distributed under the terms of the
  26. * GNU General Public License ("GPL") version 2 as published by the Free
  27. * Software Foundation.
  28. *
  29. * NO WARRANTY
  30. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  31. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  32. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  33. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  34. * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  35. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  36. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  37. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  38. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  39. * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  40. * POSSIBILITY OF SUCH DAMAGES.
  41. */
  42. #ifndef _ACDISPAT_H_
  43. #define _ACDISPAT_H_
  44. #define NAMEOF_LOCAL_NTE "__L0"
  45. #define NAMEOF_ARG_NTE "__A0"
  46. /*
  47. * dsargs - execution of dynamic arguments for static objects
  48. */
  49. ACPI_STATUS
  50. AcpiDsGetBufferFieldArguments (
  51. ACPI_OPERAND_OBJECT *ObjDesc);
  52. ACPI_STATUS
  53. AcpiDsGetBankFieldArguments (
  54. ACPI_OPERAND_OBJECT *ObjDesc);
  55. ACPI_STATUS
  56. AcpiDsGetRegionArguments (
  57. ACPI_OPERAND_OBJECT *RgnDesc);
  58. ACPI_STATUS
  59. AcpiDsGetBufferArguments (
  60. ACPI_OPERAND_OBJECT *ObjDesc);
  61. ACPI_STATUS
  62. AcpiDsGetPackageArguments (
  63. ACPI_OPERAND_OBJECT *ObjDesc);
  64. /*
  65. * dscontrol - support for execution control opcodes
  66. */
  67. ACPI_STATUS
  68. AcpiDsExecBeginControlOp (
  69. ACPI_WALK_STATE *WalkState,
  70. ACPI_PARSE_OBJECT *Op);
  71. ACPI_STATUS
  72. AcpiDsExecEndControlOp (
  73. ACPI_WALK_STATE *WalkState,
  74. ACPI_PARSE_OBJECT *Op);
  75. /*
  76. * dsopcode - support for late operand evaluation
  77. */
  78. ACPI_STATUS
  79. AcpiDsEvalBufferFieldOperands (
  80. ACPI_WALK_STATE *WalkState,
  81. ACPI_PARSE_OBJECT *Op);
  82. ACPI_STATUS
  83. AcpiDsEvalRegionOperands (
  84. ACPI_WALK_STATE *WalkState,
  85. ACPI_PARSE_OBJECT *Op);
  86. ACPI_STATUS
  87. AcpiDsEvalTableRegionOperands (
  88. ACPI_WALK_STATE *WalkState,
  89. ACPI_PARSE_OBJECT *Op);
  90. ACPI_STATUS
  91. AcpiDsEvalDataObjectOperands (
  92. ACPI_WALK_STATE *WalkState,
  93. ACPI_PARSE_OBJECT *Op,
  94. ACPI_OPERAND_OBJECT *ObjDesc);
  95. ACPI_STATUS
  96. AcpiDsEvalBankFieldOperands (
  97. ACPI_WALK_STATE *WalkState,
  98. ACPI_PARSE_OBJECT *Op);
  99. ACPI_STATUS
  100. AcpiDsInitializeRegion (
  101. ACPI_HANDLE ObjHandle);
  102. /*
  103. * dsexec - Parser/Interpreter interface, method execution callbacks
  104. */
  105. ACPI_STATUS
  106. AcpiDsGetPredicateValue (
  107. ACPI_WALK_STATE *WalkState,
  108. ACPI_OPERAND_OBJECT *ResultObj);
  109. ACPI_STATUS
  110. AcpiDsExecBeginOp (
  111. ACPI_WALK_STATE *WalkState,
  112. ACPI_PARSE_OBJECT **OutOp);
  113. ACPI_STATUS
  114. AcpiDsExecEndOp (
  115. ACPI_WALK_STATE *State);
  116. /*
  117. * dsfield - Parser/Interpreter interface for AML fields
  118. */
  119. ACPI_STATUS
  120. AcpiDsCreateField (
  121. ACPI_PARSE_OBJECT *Op,
  122. ACPI_NAMESPACE_NODE *RegionNode,
  123. ACPI_WALK_STATE *WalkState);
  124. ACPI_STATUS
  125. AcpiDsCreateBankField (
  126. ACPI_PARSE_OBJECT *Op,
  127. ACPI_NAMESPACE_NODE *RegionNode,
  128. ACPI_WALK_STATE *WalkState);
  129. ACPI_STATUS
  130. AcpiDsCreateIndexField (
  131. ACPI_PARSE_OBJECT *Op,
  132. ACPI_NAMESPACE_NODE *RegionNode,
  133. ACPI_WALK_STATE *WalkState);
  134. ACPI_STATUS
  135. AcpiDsCreateBufferField (
  136. ACPI_PARSE_OBJECT *Op,
  137. ACPI_WALK_STATE *WalkState);
  138. ACPI_STATUS
  139. AcpiDsInitFieldObjects (
  140. ACPI_PARSE_OBJECT *Op,
  141. ACPI_WALK_STATE *WalkState);
  142. /*
  143. * dsload - Parser/Interpreter interface
  144. */
  145. ACPI_STATUS
  146. AcpiDsInitCallbacks (
  147. ACPI_WALK_STATE *WalkState,
  148. UINT32 PassNumber);
  149. /* dsload - pass 1 namespace load callbacks */
  150. ACPI_STATUS
  151. AcpiDsLoad1BeginOp (
  152. ACPI_WALK_STATE *WalkState,
  153. ACPI_PARSE_OBJECT **OutOp);
  154. ACPI_STATUS
  155. AcpiDsLoad1EndOp (
  156. ACPI_WALK_STATE *WalkState);
  157. /* dsload - pass 2 namespace load callbacks */
  158. ACPI_STATUS
  159. AcpiDsLoad2BeginOp (
  160. ACPI_WALK_STATE *WalkState,
  161. ACPI_PARSE_OBJECT **OutOp);
  162. ACPI_STATUS
  163. AcpiDsLoad2EndOp (
  164. ACPI_WALK_STATE *WalkState);
  165. /*
  166. * dsmthdat - method data (locals/args)
  167. */
  168. ACPI_STATUS
  169. AcpiDsStoreObjectToLocal (
  170. UINT8 Type,
  171. UINT32 Index,
  172. ACPI_OPERAND_OBJECT *SrcDesc,
  173. ACPI_WALK_STATE *WalkState);
  174. ACPI_STATUS
  175. AcpiDsMethodDataGetEntry (
  176. UINT16 Opcode,
  177. UINT32 Index,
  178. ACPI_WALK_STATE *WalkState,
  179. ACPI_OPERAND_OBJECT ***Node);
  180. void
  181. AcpiDsMethodDataDeleteAll (
  182. ACPI_WALK_STATE *WalkState);
  183. BOOLEAN
  184. AcpiDsIsMethodValue (
  185. ACPI_OPERAND_OBJECT *ObjDesc);
  186. ACPI_STATUS
  187. AcpiDsMethodDataGetValue (
  188. UINT8 Type,
  189. UINT32 Index,
  190. ACPI_WALK_STATE *WalkState,
  191. ACPI_OPERAND_OBJECT **DestDesc);
  192. ACPI_STATUS
  193. AcpiDsMethodDataInitArgs (
  194. ACPI_OPERAND_OBJECT **Params,
  195. UINT32 MaxParamCount,
  196. ACPI_WALK_STATE *WalkState);
  197. ACPI_STATUS
  198. AcpiDsMethodDataGetNode (
  199. UINT8 Type,
  200. UINT32 Index,
  201. ACPI_WALK_STATE *WalkState,
  202. ACPI_NAMESPACE_NODE **Node);
  203. void
  204. AcpiDsMethodDataInit (
  205. ACPI_WALK_STATE *WalkState);
  206. /*
  207. * dsmethod - Parser/Interpreter interface - control method parsing
  208. */
  209. ACPI_STATUS
  210. AcpiDsAutoSerializeMethod (
  211. ACPI_NAMESPACE_NODE *Node,
  212. ACPI_OPERAND_OBJECT *ObjDesc);
  213. ACPI_STATUS
  214. AcpiDsCallControlMethod (
  215. ACPI_THREAD_STATE *Thread,
  216. ACPI_WALK_STATE *WalkState,
  217. ACPI_PARSE_OBJECT *Op);
  218. ACPI_STATUS
  219. AcpiDsRestartControlMethod (
  220. ACPI_WALK_STATE *WalkState,
  221. ACPI_OPERAND_OBJECT *ReturnDesc);
  222. void
  223. AcpiDsTerminateControlMethod (
  224. ACPI_OPERAND_OBJECT *MethodDesc,
  225. ACPI_WALK_STATE *WalkState);
  226. ACPI_STATUS
  227. AcpiDsBeginMethodExecution (
  228. ACPI_NAMESPACE_NODE *MethodNode,
  229. ACPI_OPERAND_OBJECT *ObjDesc,
  230. ACPI_WALK_STATE *WalkState);
  231. ACPI_STATUS
  232. AcpiDsMethodError (
  233. ACPI_STATUS Status,
  234. ACPI_WALK_STATE *WalkState);
  235. /*
  236. * dsinit
  237. */
  238. ACPI_STATUS
  239. AcpiDsInitializeObjects (
  240. UINT32 TableIndex,
  241. ACPI_NAMESPACE_NODE *StartNode);
  242. /*
  243. * dsobject - Parser/Interpreter interface - object initialization and conversion
  244. */
  245. ACPI_STATUS
  246. AcpiDsBuildInternalBufferObj (
  247. ACPI_WALK_STATE *WalkState,
  248. ACPI_PARSE_OBJECT *Op,
  249. UINT32 BufferLength,
  250. ACPI_OPERAND_OBJECT **ObjDescPtr);
  251. ACPI_STATUS
  252. AcpiDsBuildInternalPackageObj (
  253. ACPI_WALK_STATE *WalkState,
  254. ACPI_PARSE_OBJECT *op,
  255. UINT32 PackageLength,
  256. ACPI_OPERAND_OBJECT **ObjDesc);
  257. ACPI_STATUS
  258. AcpiDsInitObjectFromOp (
  259. ACPI_WALK_STATE *WalkState,
  260. ACPI_PARSE_OBJECT *Op,
  261. UINT16 Opcode,
  262. ACPI_OPERAND_OBJECT **ObjDesc);
  263. ACPI_STATUS
  264. AcpiDsCreateNode (
  265. ACPI_WALK_STATE *WalkState,
  266. ACPI_NAMESPACE_NODE *Node,
  267. ACPI_PARSE_OBJECT *Op);
  268. /*
  269. * dsutils - Parser/Interpreter interface utility routines
  270. */
  271. void
  272. AcpiDsClearImplicitReturn (
  273. ACPI_WALK_STATE *WalkState);
  274. BOOLEAN
  275. AcpiDsDoImplicitReturn (
  276. ACPI_OPERAND_OBJECT *ReturnDesc,
  277. ACPI_WALK_STATE *WalkState,
  278. BOOLEAN AddReference);
  279. BOOLEAN
  280. AcpiDsIsResultUsed (
  281. ACPI_PARSE_OBJECT *Op,
  282. ACPI_WALK_STATE *WalkState);
  283. void
  284. AcpiDsDeleteResultIfNotUsed (
  285. ACPI_PARSE_OBJECT *Op,
  286. ACPI_OPERAND_OBJECT *ResultObj,
  287. ACPI_WALK_STATE *WalkState);
  288. ACPI_STATUS
  289. AcpiDsCreateOperand (
  290. ACPI_WALK_STATE *WalkState,
  291. ACPI_PARSE_OBJECT *Arg,
  292. UINT32 ArgsRemaining);
  293. ACPI_STATUS
  294. AcpiDsCreateOperands (
  295. ACPI_WALK_STATE *WalkState,
  296. ACPI_PARSE_OBJECT *FirstArg);
  297. ACPI_STATUS
  298. AcpiDsResolveOperands (
  299. ACPI_WALK_STATE *WalkState);
  300. void
  301. AcpiDsClearOperands (
  302. ACPI_WALK_STATE *WalkState);
  303. ACPI_STATUS
  304. AcpiDsEvaluateNamePath (
  305. ACPI_WALK_STATE *WalkState);
  306. /*
  307. * dswscope - Scope Stack manipulation
  308. */
  309. ACPI_STATUS
  310. AcpiDsScopeStackPush (
  311. ACPI_NAMESPACE_NODE *Node,
  312. ACPI_OBJECT_TYPE Type,
  313. ACPI_WALK_STATE *WalkState);
  314. ACPI_STATUS
  315. AcpiDsScopeStackPop (
  316. ACPI_WALK_STATE *WalkState);
  317. void
  318. AcpiDsScopeStackClear (
  319. ACPI_WALK_STATE *WalkState);
  320. /*
  321. * dswstate - parser WALK_STATE management routines
  322. */
  323. ACPI_STATUS
  324. AcpiDsObjStackPush (
  325. void *Object,
  326. ACPI_WALK_STATE *WalkState);
  327. ACPI_STATUS
  328. AcpiDsObjStackPop (
  329. UINT32 PopCount,
  330. ACPI_WALK_STATE *WalkState);
  331. ACPI_WALK_STATE *
  332. AcpiDsCreateWalkState (
  333. ACPI_OWNER_ID OwnerId,
  334. ACPI_PARSE_OBJECT *Origin,
  335. ACPI_OPERAND_OBJECT *MthDesc,
  336. ACPI_THREAD_STATE *Thread);
  337. ACPI_STATUS
  338. AcpiDsInitAmlWalk (
  339. ACPI_WALK_STATE *WalkState,
  340. ACPI_PARSE_OBJECT *Op,
  341. ACPI_NAMESPACE_NODE *MethodNode,
  342. UINT8 *AmlStart,
  343. UINT32 AmlLength,
  344. ACPI_EVALUATE_INFO *Info,
  345. UINT8 PassNumber);
  346. void
  347. AcpiDsObjStackPopAndDelete (
  348. UINT32 PopCount,
  349. ACPI_WALK_STATE *WalkState);
  350. void
  351. AcpiDsDeleteWalkState (
  352. ACPI_WALK_STATE *WalkState);
  353. ACPI_WALK_STATE *
  354. AcpiDsPopWalkState (
  355. ACPI_THREAD_STATE *Thread);
  356. void
  357. AcpiDsPushWalkState (
  358. ACPI_WALK_STATE *WalkState,
  359. ACPI_THREAD_STATE *Thread);
  360. ACPI_STATUS
  361. AcpiDsResultStackClear (
  362. ACPI_WALK_STATE *WalkState);
  363. ACPI_WALK_STATE *
  364. AcpiDsGetCurrentWalkState (
  365. ACPI_THREAD_STATE *Thread);
  366. ACPI_STATUS
  367. AcpiDsResultPop (
  368. ACPI_OPERAND_OBJECT **Object,
  369. ACPI_WALK_STATE *WalkState);
  370. ACPI_STATUS
  371. AcpiDsResultPush (
  372. ACPI_OPERAND_OBJECT *Object,
  373. ACPI_WALK_STATE *WalkState);
  374. /*
  375. * dsdebug - parser debugging routines
  376. */
  377. void
  378. AcpiDsDumpMethodStack (
  379. ACPI_STATUS Status,
  380. ACPI_WALK_STATE *WalkState,
  381. ACPI_PARSE_OBJECT *Op);
  382. #endif /* _ACDISPAT_H_ */