⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nsdump.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** * * Module Name: nsdump - table dumping routines for debug *              $Revision: 105 $ * *****************************************************************************//* *  Copyright (C) 2000, 2001 R. Byron Moore * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "acpi.h"#include "acinterp.h"#include "acnamesp.h"#include "actables.h"#include "acparser.h"#define _COMPONENT          ACPI_NAMESPACE	 MODULE_NAME         ("nsdump")#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)/******************************************************************************* * * FUNCTION:    Acpi_ns_dump_pathname * * PARAMETERS:  Handle              - Object *              Msg                 - Prefix message *              Level               - Desired debug level *              Component           - Caller's component ID * * DESCRIPTION: Print an object's full namespace pathname *              Manages allocation/freeing of a pathname buffer * ******************************************************************************/acpi_statusacpi_ns_dump_pathname (	acpi_handle             handle,	NATIVE_CHAR             *msg,	u32                     level,	u32                     component){	NATIVE_CHAR             *buffer;	u32                     length;	FUNCTION_TRACE ("Ns_dump_pathname");	/* Do this only if the requested debug level and component are enabled */	if (!(acpi_dbg_level & level) || !(acpi_dbg_layer & component)) {		return_ACPI_STATUS (AE_OK);	}	buffer = ACPI_MEM_ALLOCATE (PATHNAME_MAX);	if (!buffer) {		return_ACPI_STATUS (AE_NO_MEMORY);	}	/* Convert handle to a full pathname and print it (with supplied message) */	length = PATHNAME_MAX;	if (ACPI_SUCCESS (acpi_ns_handle_to_pathname (handle, &length, buffer))) {		acpi_os_printf ("%s %s (%p)\n", msg, buffer, handle);	}	ACPI_MEM_FREE (buffer);	return_ACPI_STATUS (AE_OK);}/******************************************************************************* * * FUNCTION:    Acpi_ns_dump_one_object * * PARAMETERS:  Handle              - Node to be dumped *              Level               - Nesting level of the handle *              Context             - Passed into Walk_namespace * * DESCRIPTION: Dump a single Node *              This procedure is a User_function called by Acpi_ns_walk_namespace. * ******************************************************************************/acpi_statusacpi_ns_dump_one_object (	acpi_handle             obj_handle,	u32                     level,	void                    *context,	void                    **return_value){	acpi_walk_info          *info = (acpi_walk_info *) context;	acpi_namespace_node     *this_node;	acpi_operand_object     *obj_desc = NULL;	acpi_object_type8       obj_type;	acpi_object_type8       type;	u32                     bytes_to_dump;	u32                     downstream_sibling_mask = 0;	u32                     level_tmp;	u32                     which_bit;	u32                     i;	PROC_NAME ("Ns_dump_one_object");	this_node = acpi_ns_map_handle_to_node (obj_handle);	level_tmp   = level;	type        = this_node->type;	which_bit   = 1;	if (!(acpi_dbg_level & info->debug_level)) {		return (AE_OK);	}	if (!obj_handle) {		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n"));		return (AE_OK);	}	/* Check if the owner matches */	if ((info->owner_id != ACPI_UINT32_MAX) &&		(info->owner_id != this_node->owner_id)) {		return (AE_OK);	}	/* Indent the object according to the level */	while (level_tmp--) {		/* Print appropriate characters to form tree structure */		if (level_tmp) {			if (downstream_sibling_mask & which_bit) {				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "|"));			}			else {				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));			}			which_bit <<= 1;		}		else {			if (acpi_ns_exist_downstream_sibling (this_node + 1)) {				downstream_sibling_mask |= (1 << (level - 1));				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));			}			else {				downstream_sibling_mask &= ACPI_UINT32_MAX ^ (1 << (level - 1));				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));			}			if (this_node->child == NULL) {				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "-"));			}			else if (acpi_ns_exist_downstream_sibling (this_node->child)) {				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "+"));			}			else {				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "-"));			}		}	}	/* Check the integrity of our data */	if (type > INTERNAL_TYPE_MAX) {		type = INTERNAL_TYPE_DEF_ANY;                                /* prints as *ERROR* */	}	if (!acpi_ut_valid_acpi_name (this_node->name)) {		REPORT_WARNING (("Invalid ACPI Name %08X\n", this_node->name));	}	/*	 * Now we can print out the pertinent information	 */	ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %4.4s %-12s %p",			(char*)&this_node->name, acpi_ut_get_type_name (type), this_node));	obj_desc = this_node->object;	switch (info->display_type) {	case ACPI_DISPLAY_SUMMARY:		if (!obj_desc) {			/* No attached object, we are done */			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));			return (AE_OK);		}		switch (type) {		case ACPI_TYPE_PROCESSOR:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ID %d Addr %.4X Len %.4X\n",					 obj_desc->processor.proc_id,					 obj_desc->processor.address,					 obj_desc->processor.length));			break;		case ACPI_TYPE_DEVICE:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Notification object: %p", obj_desc));			break;		case ACPI_TYPE_METHOD:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Args %d Len %.4X Aml %p \n",					 obj_desc->method.param_count,					 obj_desc->method.aml_length,					 obj_desc->method.aml_start));			break;		case ACPI_TYPE_INTEGER:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " = %8.8X%8.8X\n",					 HIDWORD (obj_desc->integer.value),					 LODWORD (obj_desc->integer.value)));			break;		case ACPI_TYPE_PACKAGE:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Elements %.2X\n",					 obj_desc->package.count));			break;		case ACPI_TYPE_BUFFER:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Len %.2X",					 obj_desc->buffer.length));			/* Dump some of the buffer */			if (obj_desc->buffer.length > 0) {				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " ="));				for (i = 0; (i < obj_desc->buffer.length && i < 12); i++) {					ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " %.2X",							obj_desc->buffer.pointer[i]));				}			}			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));			break;		case ACPI_TYPE_STRING:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Len %.2X",					 obj_desc->string.length));			if (obj_desc->string.length > 0) {				 ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " = \"%.32s\"...",						 obj_desc->string.pointer));			}			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));			break;		case ACPI_TYPE_REGION:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [%s]",					 acpi_ut_get_region_name (obj_desc->region.space_id)));			if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Addr %8.8X%8.8X Len %.4X\n",						 HIDWORD(obj_desc->region.address),						 LODWORD(obj_desc->region.address),						 obj_desc->region.length));			}			else {				ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [Address/Length not evaluated]\n"));			}			break;		case INTERNAL_TYPE_REFERENCE:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " [%s]\n",					 acpi_ps_get_opcode_name (obj_desc->reference.opcode)));			break;		case ACPI_TYPE_BUFFER_FIELD:			/* TBD: print Buffer name when we can easily get it */			break;		case INTERNAL_TYPE_REGION_FIELD:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",					 (char *) &obj_desc->common_field.region_obj->region.node->name));			break;		case INTERNAL_TYPE_BANK_FIELD:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",					 (char *) &obj_desc->common_field.region_obj->region.node->name));			break;		case INTERNAL_TYPE_INDEX_FIELD:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Rgn [%4.4s]",					 (char *) &obj_desc->index_field.index_obj->common_field.region_obj->region.node->name));			break;		default:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Object %p\n", obj_desc));			break;		}		/* Common field handling */		switch (type) {		case ACPI_TYPE_BUFFER_FIELD:		case INTERNAL_TYPE_REGION_FIELD:		case INTERNAL_TYPE_BANK_FIELD:		case INTERNAL_TYPE_INDEX_FIELD:			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " Off %.2X Len %.2X Acc %.2d\n",					 (obj_desc->common_field.base_byte_offset * 8) + obj_desc->common_field.start_field_bit_offset,					 obj_desc->common_field.bit_length,					 obj_desc->common_field.access_bit_width));			break;		}		break;	case ACPI_DISPLAY_OBJECTS:		ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "%p O:%p",				this_node, obj_desc));		if (!obj_desc) {			/* No attached object, we are done */			ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, "\n"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -