nsdump.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:18k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /******************************************************************************
  2.  *
  3.  * Module Name: nsdump - table dumping routines for debug
  4.  *              $Revision: 105 $
  5.  *
  6.  *****************************************************************************/
  7. /*
  8.  *  Copyright (C) 2000, 2001 R. Byron Moore
  9.  *
  10.  *  This program is free software; you can redistribute it and/or modify
  11.  *  it under the terms of the GNU General Public License as published by
  12.  *  the Free Software Foundation; either version 2 of the License, or
  13.  *  (at your option) any later version.
  14.  *
  15.  *  This program is distributed in the hope that it will be useful,
  16.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  *  GNU General Public License for more details.
  19.  *
  20.  *  You should have received a copy of the GNU General Public License
  21.  *  along with this program; if not, write to the Free Software
  22.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  23.  */
  24. #include "acpi.h"
  25. #include "acinterp.h"
  26. #include "acnamesp.h"
  27. #include "actables.h"
  28. #include "acparser.h"
  29. #define _COMPONENT          ACPI_NAMESPACE
  30.  MODULE_NAME         ("nsdump")
  31. #if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
  32. /*******************************************************************************
  33.  *
  34.  * FUNCTION:    Acpi_ns_dump_pathname
  35.  *
  36.  * PARAMETERS:  Handle              - Object
  37.  *              Msg                 - Prefix message
  38.  *              Level               - Desired debug level
  39.  *              Component           - Caller's component ID
  40.  *
  41.  * DESCRIPTION: Print an object's full namespace pathname
  42.  *              Manages allocation/freeing of a pathname buffer
  43.  *
  44.  ******************************************************************************/
  45. acpi_status
  46. acpi_ns_dump_pathname (
  47. acpi_handle             handle,
  48. NATIVE_CHAR             *msg,
  49. u32                     level,
  50. u32                     component)
  51. {
  52. NATIVE_CHAR             *buffer;
  53. u32                     length;
  54. FUNCTION_TRACE ("Ns_dump_pathname");
  55. /* Do this only if the requested debug level and component are enabled */
  56. if (!(acpi_dbg_level & level) || !(acpi_dbg_layer & component)) {
  57. return_ACPI_STATUS (AE_OK);
  58. }
  59. buffer = ACPI_MEM_ALLOCATE (PATHNAME_MAX);
  60. if (!buffer) {
  61. return_ACPI_STATUS (AE_NO_MEMORY);
  62. }
  63. /* Convert handle to a full pathname and print it (with supplied message) */
  64. length = PATHNAME_MAX;
  65. if (ACPI_SUCCESS (acpi_ns_handle_to_pathname (handle, &length, buffer))) {
  66. acpi_os_printf ("%s %s (%p)n", msg, buffer, handle);
  67. }
  68. ACPI_MEM_FREE (buffer);
  69. return_ACPI_STATUS (AE_OK);
  70. }
  71. /*******************************************************************************
  72.  *
  73.  * FUNCTION:    Acpi_ns_dump_one_object
  74.  *
  75.  * PARAMETERS:  Handle              - Node to be dumped
  76.  *              Level               - Nesting level of the handle
  77.  *              Context             - Passed into Walk_namespace
  78.  *
  79.  * DESCRIPTION: Dump a single Node
  80.  *              This procedure is a User_function called by Acpi_ns_walk_namespace.
  81.  *
  82.  ******************************************************************************/
  83. acpi_status
  84. acpi_ns_dump_one_object (
  85. acpi_handle             obj_handle,
  86. u32                     level,
  87. void                    *context,
  88. void                    **return_value)
  89. {
  90. acpi_walk_info          *info = (acpi_walk_info *) context;
  91. acpi_namespace_node     *this_node;
  92. acpi_operand_object     *obj_desc = NULL;
  93. acpi_object_type8       obj_type;
  94. acpi_object_type8       type;
  95. u32                     bytes_to_dump;
  96. u32                     downstream_sibling_mask = 0;
  97. u32                     level_tmp;
  98. u32                     which_bit;
  99. u32                     i;
  100. PROC_NAME ("Ns_dump_one_object");
  101. this_node = acpi_ns_map_handle_to_node (obj_handle);
  102. level_tmp   = level;
  103. type        = this_node->type;
  104. which_bit   = 1;
  105. if (!(acpi_dbg_level & info->debug_level)) {
  106. return (AE_OK);
  107. }
  108. if (!obj_handle) {
  109. ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handlen"));
  110. return (AE_OK);
  111. }
  112. /* Check if the owner matches */
  113. if ((info->owner_id != ACPI_UINT32_MAX) &&
  114. (info->owner_id != this_node->owner_id)) {
  115. return (AE_OK);
  116. }
  117. /* Indent the object according to the level */
  118. while (level_tmp--) {
  119. /* Print appropriate characters to form tree structure */
  120. if (level_tmp) {
  121. if (downstream_sibling_mask & which_bit) {
  122. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "|"));
  123. }
  124. else {
  125. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
  126. }
  127. which_bit <<= 1;
  128. }
  129. else {
  130. if (acpi_ns_exist_downstream_sibling (this_node + 1)) {
  131. downstream_sibling_mask |= (1 << (level - 1));
  132. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
  133. }
  134. else {
  135. downstream_sibling_mask &= ACPI_UINT32_MAX ^ (1 << (level - 1));
  136. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
  137. }
  138. if (this_node->child == NULL) {
  139. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "-"));
  140. }
  141. else if (acpi_ns_exist_downstream_sibling (this_node->child)) {
  142. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));
  143. }
  144. else {
  145. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "-"));
  146. }
  147. }
  148. }
  149. /* Check the integrity of our data */
  150. if (type > INTERNAL_TYPE_MAX) {
  151. type = INTERNAL_TYPE_DEF_ANY;                                /* prints as *ERROR* */
  152. }
  153. if (!acpi_ut_valid_acpi_name (this_node->name)) {
  154. REPORT_WARNING (("Invalid ACPI Name %08Xn", this_node->name));
  155. }
  156. /*
  157.  * Now we can print out the pertinent information
  158.  */
  159. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %4.4s %-12s %p",
  160. (char*)&this_node->name, acpi_ut_get_type_name (type), this_node));
  161. obj_desc = this_node->object;
  162. switch (info->display_type) {
  163. case ACPI_DISPLAY_SUMMARY:
  164. if (!obj_desc) {
  165. /* No attached object, we are done */
  166. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "n"));
  167. return (AE_OK);
  168. }
  169. switch (type) {
  170. case ACPI_TYPE_PROCESSOR:
  171. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ID %d Addr %.4X Len %.4Xn",
  172.  obj_desc->processor.proc_id,
  173.  obj_desc->processor.address,
  174.  (unsigned)obj_desc->processor.length));
  175. break;
  176. case ACPI_TYPE_DEVICE:
  177. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Notification object: %p", obj_desc));
  178. break;
  179. case ACPI_TYPE_METHOD:
  180. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Args %d Len %.4X Aml %p n",
  181.  obj_desc->method.param_count,
  182.  obj_desc->method.aml_length,
  183.  obj_desc->method.aml_start));
  184. break;
  185. case ACPI_TYPE_INTEGER:
  186. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " = %8.8X%8.8Xn",
  187.  HIDWORD (obj_desc->integer.value),
  188.  LODWORD (obj_desc->integer.value)));
  189. break;
  190. case ACPI_TYPE_PACKAGE:
  191. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Elements %.2Xn",
  192.  obj_desc->package.count));
  193. break;
  194. case ACPI_TYPE_BUFFER:
  195. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Len %.2X",
  196.  obj_desc->buffer.length));
  197. /* Dump some of the buffer */
  198. if (obj_desc->buffer.length > 0) {
  199. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ="));
  200. for (i = 0; (i < obj_desc->buffer.length && i < 12); i++) {
  201. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %.2X",
  202. obj_desc->buffer.pointer[i]));
  203. }
  204. }
  205. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "n"));
  206. break;
  207. case ACPI_TYPE_STRING:
  208. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Len %.2X",
  209.  obj_desc->string.length));
  210. if (obj_desc->string.length > 0) {
  211.  ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " = "%.32s"...",
  212.  obj_desc->string.pointer));
  213. }
  214. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "n"));
  215. break;
  216. case ACPI_TYPE_REGION:
  217. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [%s]",
  218.  acpi_ut_get_region_name (obj_desc->region.space_id)));
  219. if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
  220. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Addr %8.8X%8.8X Len %.4Xn",
  221.  HIDWORD(obj_desc->region.address),
  222.  LODWORD(obj_desc->region.address),
  223.  obj_desc->region.length));
  224. }
  225. else {
  226. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [Address/Length not evaluated]n"));
  227. }
  228. break;
  229. case INTERNAL_TYPE_REFERENCE:
  230. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [%s]n",
  231.  acpi_ps_get_opcode_name (obj_desc->reference.opcode)));
  232. break;
  233. case ACPI_TYPE_BUFFER_FIELD:
  234. /* TBD: print Buffer name when we can easily get it */
  235. break;
  236. case INTERNAL_TYPE_REGION_FIELD:
  237. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",
  238.  (char *) &obj_desc->common_field.region_obj->region.node->name));
  239. break;
  240. case INTERNAL_TYPE_BANK_FIELD:
  241. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",
  242.  (char *) &obj_desc->common_field.region_obj->region.node->name));
  243. break;
  244. case INTERNAL_TYPE_INDEX_FIELD:
  245. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",
  246.  (char *) &obj_desc->index_field.index_obj->common_field.region_obj->region.node->name));
  247. break;
  248. default:
  249. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Object %pn", obj_desc));
  250. break;
  251. }
  252. /* Common field handling */
  253. switch (type) {
  254. case ACPI_TYPE_BUFFER_FIELD:
  255. case INTERNAL_TYPE_REGION_FIELD:
  256. case INTERNAL_TYPE_BANK_FIELD:
  257. case INTERNAL_TYPE_INDEX_FIELD:
  258. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Off %.2X Len %.2X Acc %.2dn",
  259.  (obj_desc->common_field.base_byte_offset * 8) + obj_desc->common_field.start_field_bit_offset,
  260.  obj_desc->common_field.bit_length,
  261.  obj_desc->common_field.access_bit_width));
  262. break;
  263. }
  264. break;
  265. case ACPI_DISPLAY_OBJECTS:
  266. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "%p O:%p",
  267. this_node, obj_desc));
  268. if (!obj_desc) {
  269. /* No attached object, we are done */
  270. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "n"));
  271. return (AE_OK);
  272. }
  273. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(R%d)",
  274. obj_desc->common.reference_count));
  275. switch (type) {
  276. case ACPI_TYPE_METHOD:
  277. /* Name is a Method and its AML offset/length are set */
  278. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " M:%p-%Xn",
  279.  obj_desc->method.aml_start,
  280.  obj_desc->method.aml_length));
  281. break;
  282. case ACPI_TYPE_INTEGER:
  283. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " N:%X%Xn",
  284.  HIDWORD(obj_desc->integer.value),
  285.  LODWORD(obj_desc->integer.value)));
  286. break;
  287. case ACPI_TYPE_STRING:
  288. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " S:%p-%Xn",
  289.  obj_desc->string.pointer,
  290.  obj_desc->string.length));
  291. break;
  292. case ACPI_TYPE_BUFFER:
  293. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " B:%p-%Xn",
  294.  obj_desc->buffer.pointer,
  295.  obj_desc->buffer.length));
  296. break;
  297. default:
  298. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "n"));
  299. break;
  300. }
  301. break;
  302. }
  303. /* If debug turned off, done */
  304. if (!(acpi_dbg_level & ACPI_LV_VALUES)) {
  305. return (AE_OK);
  306. }
  307. /* If there is an attached object, display it */
  308. obj_desc = this_node->object;
  309. /* Dump attached objects */
  310. while (obj_desc) {
  311. obj_type = INTERNAL_TYPE_INVALID;
  312. /* Decode the type of attached object and dump the contents */
  313. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "        Attached Object %p: ", obj_desc));
  314. if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
  315. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to Node)n"));
  316. bytes_to_dump = sizeof (acpi_namespace_node);
  317. }
  318. else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) {
  319. obj_type = obj_desc->common.type;
  320. if (obj_type > INTERNAL_TYPE_MAX) {
  321. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %X [UNKNOWN])n", obj_type));
  322. bytes_to_dump = 32;
  323. }
  324. else {
  325. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(Ptr to ACPI Object type %2.2X [%s])n",
  326.    obj_type, acpi_ut_get_type_name (obj_type)));
  327. bytes_to_dump = sizeof (acpi_operand_object);
  328. }
  329. }
  330. else {
  331. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "(String or Buffer - not descriptor)n"));
  332. bytes_to_dump = 16;
  333. }
  334. DUMP_BUFFER (obj_desc, bytes_to_dump);
  335. /* If value is NOT an internal object, we are done */
  336. if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
  337. goto cleanup;
  338. }
  339. /*
  340.  * Valid object, get the pointer to next level, if any
  341.  */
  342. switch (obj_type) {
  343. case ACPI_TYPE_STRING:
  344. obj_desc = (acpi_operand_object *) obj_desc->string.pointer;
  345. break;
  346. case ACPI_TYPE_BUFFER:
  347. obj_desc = (acpi_operand_object *) obj_desc->buffer.pointer;
  348. break;
  349. case ACPI_TYPE_BUFFER_FIELD:
  350. obj_desc = (acpi_operand_object *) obj_desc->buffer_field.buffer_obj;
  351. break;
  352. case ACPI_TYPE_PACKAGE:
  353. obj_desc = (acpi_operand_object *) obj_desc->package.elements;
  354. break;
  355. case ACPI_TYPE_METHOD:
  356. obj_desc = (acpi_operand_object *) obj_desc->method.aml_start;
  357. break;
  358. case INTERNAL_TYPE_REGION_FIELD:
  359. obj_desc = (acpi_operand_object *) obj_desc->field.region_obj;
  360. break;
  361. case INTERNAL_TYPE_BANK_FIELD:
  362. obj_desc = (acpi_operand_object *) obj_desc->bank_field.region_obj;
  363. break;
  364. case INTERNAL_TYPE_INDEX_FIELD:
  365. obj_desc = (acpi_operand_object *) obj_desc->index_field.index_obj;
  366. break;
  367.    default:
  368. goto cleanup;
  369. }
  370. obj_type = INTERNAL_TYPE_INVALID;    /* Terminate loop after next pass */
  371. }
  372. cleanup:
  373. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "n"));
  374. return (AE_OK);
  375. }
  376. /*******************************************************************************
  377.  *
  378.  * FUNCTION:    Acpi_ns_dump_objects
  379.  *
  380.  * PARAMETERS:  Type                - Object type to be dumped
  381.  *              Max_depth           - Maximum depth of dump.  Use ACPI_UINT32_MAX
  382.  *                                    for an effectively unlimited depth.
  383.  *              Owner_id            - Dump only objects owned by this ID.  Use
  384.  *                                    ACPI_UINT32_MAX to match all owners.
  385.  *              Start_handle        - Where in namespace to start/end search
  386.  *
  387.  * DESCRIPTION: Dump typed objects within the loaded namespace.
  388.  *              Uses Acpi_ns_walk_namespace in conjunction with Acpi_ns_dump_one_object.
  389.  *
  390.  ******************************************************************************/
  391. void
  392. acpi_ns_dump_objects (
  393. acpi_object_type8       type,
  394. u8                      display_type,
  395. u32                     max_depth,
  396. u32                     owner_id,
  397. acpi_handle             start_handle)
  398. {
  399. acpi_walk_info          info;
  400. FUNCTION_ENTRY ();
  401. info.debug_level = ACPI_LV_TABLES;
  402. info.owner_id = owner_id;
  403. info.display_type = display_type;
  404. acpi_ns_walk_namespace (type, start_handle, max_depth, NS_WALK_NO_UNLOCK, acpi_ns_dump_one_object,
  405.    (void *) &info, NULL);
  406. }
  407. #ifndef _ACPI_ASL_COMPILER
  408. /*******************************************************************************
  409.  *
  410.  * FUNCTION:    Acpi_ns_dump_one_device
  411.  *
  412.  * PARAMETERS:  Handle              - Node to be dumped
  413.  *              Level               - Nesting level of the handle
  414.  *              Context             - Passed into Walk_namespace
  415.  *
  416.  * DESCRIPTION: Dump a single Node that represents a device
  417.  *              This procedure is a User_function called by Acpi_ns_walk_namespace.
  418.  *
  419.  ******************************************************************************/
  420. acpi_status
  421. acpi_ns_dump_one_device (
  422. acpi_handle             obj_handle,
  423. u32                     level,
  424. void                    *context,
  425. void                    **return_value)
  426. {
  427. acpi_device_info        info;
  428. acpi_status             status;
  429. u32                     i;
  430. PROC_NAME ("Ns_dump_one_device");
  431. status = acpi_ns_dump_one_object (obj_handle, level, context, return_value);
  432. status = acpi_get_object_info (obj_handle, &info);
  433. if (ACPI_SUCCESS (status)) {
  434. for (i = 0; i < level; i++) {
  435. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
  436. }
  437. ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "    HID: %s, ADR: %8.8X%8.8X, Status: %xn",
  438.   info.hardware_id, HIDWORD(info.address), LODWORD(info.address), info.current_status));
  439. }
  440. return (status);
  441. }
  442. /*******************************************************************************
  443.  *
  444.  * FUNCTION:    Acpi_ns_dump_root_devices
  445.  *
  446.  * PARAMETERS:  None
  447.  *
  448.  * DESCRIPTION: Dump all objects of type "device"
  449.  *
  450.  ******************************************************************************/
  451. void
  452. acpi_ns_dump_root_devices (void)
  453. {
  454. acpi_handle             sys_bus_handle;
  455. PROC_NAME ("Ns_dump_root_devices");
  456. /* Only dump the table if tracing is enabled */
  457. if (!(ACPI_LV_TABLES & acpi_dbg_level)) {
  458. return;
  459. }
  460. acpi_get_handle (0, NS_SYSTEM_BUS, &sys_bus_handle);
  461. ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Display of all devices in the namespace:n"));
  462. acpi_ns_walk_namespace (ACPI_TYPE_DEVICE, sys_bus_handle, ACPI_UINT32_MAX, NS_WALK_NO_UNLOCK,
  463.    acpi_ns_dump_one_device, NULL, NULL);
  464. }
  465. #endif
  466. /*******************************************************************************
  467.  *
  468.  * FUNCTION:    Acpi_ns_dump_tables
  469.  *
  470.  * PARAMETERS:  Search_base         - Root of subtree to be dumped, or
  471.  *                                    NS_ALL to dump the entire namespace
  472.  *              Max_depth           - Maximum depth of dump.  Use INT_MAX
  473.  *                                    for an effectively unlimited depth.
  474.  *
  475.  * DESCRIPTION: Dump the name space, or a portion of it.
  476.  *
  477.  ******************************************************************************/
  478. void
  479. acpi_ns_dump_tables (
  480. acpi_handle             search_base,
  481. u32                     max_depth)
  482. {
  483. acpi_handle             search_handle = search_base;
  484. FUNCTION_TRACE ("Ns_dump_tables");
  485. if (!acpi_gbl_root_node) {
  486. /*
  487.  * If the name space has not been initialized,
  488.  * there is nothing to dump.
  489.  */
  490. ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "name space not initialized!n"));
  491. return_VOID;
  492. }
  493. if (NS_ALL == search_base) {
  494. /*  entire namespace    */
  495. search_handle = acpi_gbl_root_node;
  496. ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\n"));
  497. }
  498. acpi_ns_dump_objects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, max_depth,
  499. ACPI_UINT32_MAX, search_handle);
  500. return_VOID;
  501. }
  502. /*******************************************************************************
  503.  *
  504.  * FUNCTION:    Acpi_ns_dump_entry
  505.  *
  506.  * PARAMETERS:  Handle              - Node to be dumped
  507.  *              Debug_level         - Output level
  508.  *
  509.  * DESCRIPTION: Dump a single Node
  510.  *
  511.  ******************************************************************************/
  512. void
  513. acpi_ns_dump_entry (
  514. acpi_handle             handle,
  515. u32                     debug_level)
  516. {
  517. acpi_walk_info          info;
  518. FUNCTION_ENTRY ();
  519. info.debug_level = debug_level;
  520. info.owner_id = ACPI_UINT32_MAX;
  521. acpi_ns_dump_one_object (handle, 1, &info, NULL);
  522. }
  523. #endif