exdump.c

来自「linux2.6.16版本」· C语言 代码 · 共 1,069 行 · 第 1/2 页

C
1,069
字号
				acpi_os_printf(" value is [%8.8X%8.8x]",					       ACPI_FORMAT_UINT64(obj_desc->								  integer.								  value));			}			acpi_os_printf("\n");			break;		case AML_LOCAL_OP:			acpi_os_printf("Reference: Local%d",				       obj_desc->reference.offset);			if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {				/* Value is an Integer */				acpi_os_printf(" value is [%8.8X%8.8x]",					       ACPI_FORMAT_UINT64(obj_desc->								  integer.								  value));			}			acpi_os_printf("\n");			break;		case AML_INT_NAMEPATH_OP:			acpi_os_printf("Reference.Node->Name %X\n",				       obj_desc->reference.node->name.integer);			break;		default:			/* Unknown opcode */			acpi_os_printf("Unknown Reference opcode=%X\n",				       obj_desc->reference.opcode);			break;		}		break;	case ACPI_TYPE_BUFFER:		acpi_os_printf("Buffer len %X @ %p\n",			       obj_desc->buffer.length,			       obj_desc->buffer.pointer);		length = obj_desc->buffer.length;		if (length > 64) {			length = 64;		}		/* Debug only -- dump the buffer contents */		if (obj_desc->buffer.pointer) {			acpi_os_printf("Buffer Contents: ");			for (index = 0; index < length; index++) {				acpi_os_printf(" %02x",					       obj_desc->buffer.pointer[index]);			}			acpi_os_printf("\n");		}		break;	case ACPI_TYPE_INTEGER:		acpi_os_printf("Integer %8.8X%8.8X\n",			       ACPI_FORMAT_UINT64(obj_desc->integer.value));		break;	case ACPI_TYPE_PACKAGE:		acpi_os_printf("Package [Len %X] element_array %p\n",			       obj_desc->package.count,			       obj_desc->package.elements);		/*		 * If elements exist, package element pointer is valid,		 * and debug_level exceeds 1, dump package's elements.		 */		if (obj_desc->package.count &&		    obj_desc->package.elements && acpi_dbg_level > 1) {			for (index = 0; index < obj_desc->package.count;			     index++) {				acpi_ex_dump_operand(obj_desc->package.						     elements[index],						     depth + 1);			}		}		break;	case ACPI_TYPE_REGION:		acpi_os_printf("Region %s (%X)",			       acpi_ut_get_region_name(obj_desc->region.						       space_id),			       obj_desc->region.space_id);		/*		 * If the address and length have not been evaluated,		 * don't print them.		 */		if (!(obj_desc->region.flags & AOPOBJ_DATA_VALID)) {			acpi_os_printf("\n");		} else {			acpi_os_printf(" base %8.8X%8.8X Length %X\n",				       ACPI_FORMAT_UINT64(obj_desc->region.							  address),				       obj_desc->region.length);		}		break;	case ACPI_TYPE_STRING:		acpi_os_printf("String length %X @ %p ",			       obj_desc->string.length,			       obj_desc->string.pointer);		acpi_ut_print_string(obj_desc->string.pointer, ACPI_UINT8_MAX);		acpi_os_printf("\n");		break;	case ACPI_TYPE_LOCAL_BANK_FIELD:		acpi_os_printf("bank_field\n");		break;	case ACPI_TYPE_LOCAL_REGION_FIELD:		acpi_os_printf		    ("region_field: Bits=%X acc_width=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",		     obj_desc->field.bit_length,		     obj_desc->field.access_byte_width,		     obj_desc->field.field_flags & AML_FIELD_LOCK_RULE_MASK,		     obj_desc->field.field_flags & AML_FIELD_UPDATE_RULE_MASK,		     obj_desc->field.base_byte_offset,		     obj_desc->field.start_field_bit_offset);		acpi_ex_dump_operand(obj_desc->field.region_obj, depth + 1);		break;	case ACPI_TYPE_LOCAL_INDEX_FIELD:		acpi_os_printf("index_field\n");		break;	case ACPI_TYPE_BUFFER_FIELD:		acpi_os_printf("buffer_field: %X bits at byte %X bit %X of\n",			       obj_desc->buffer_field.bit_length,			       obj_desc->buffer_field.base_byte_offset,			       obj_desc->buffer_field.start_field_bit_offset);		if (!obj_desc->buffer_field.buffer_obj) {			ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "*NULL*\n"));		} else		    if (ACPI_GET_OBJECT_TYPE(obj_desc->buffer_field.buffer_obj)			!= ACPI_TYPE_BUFFER) {			acpi_os_printf("*not a Buffer*\n");		} else {			acpi_ex_dump_operand(obj_desc->buffer_field.buffer_obj,					     depth + 1);		}		break;	case ACPI_TYPE_EVENT:		acpi_os_printf("Event\n");		break;	case ACPI_TYPE_METHOD:		acpi_os_printf("Method(%X) @ %p:%X\n",			       obj_desc->method.param_count,			       obj_desc->method.aml_start,			       obj_desc->method.aml_length);		break;	case ACPI_TYPE_MUTEX:		acpi_os_printf("Mutex\n");		break;	case ACPI_TYPE_DEVICE:		acpi_os_printf("Device\n");		break;	case ACPI_TYPE_POWER:		acpi_os_printf("Power\n");		break;	case ACPI_TYPE_PROCESSOR:		acpi_os_printf("Processor\n");		break;	case ACPI_TYPE_THERMAL:		acpi_os_printf("Thermal\n");		break;	default:		/* Unknown Type */		acpi_os_printf("Unknown Type %X\n",			       ACPI_GET_OBJECT_TYPE(obj_desc));		break;	}	return;}/******************************************************************************* * * FUNCTION:    acpi_ex_dump_operands * * PARAMETERS:  Operands            - Operand list *              interpreter_mode    - Load or Exec *              Ident               - Identification *              num_levels          - # of stack entries to dump above line *              Note                - Output notation *              module_name         - Caller's module name *              line_number         - Caller's invocation line number * * DESCRIPTION: Dump the object stack * ******************************************************************************/voidacpi_ex_dump_operands(union acpi_operand_object **operands,		      acpi_interpreter_mode interpreter_mode,		      char *ident,		      u32 num_levels,		      char *note, char *module_name, u32 line_number){	acpi_native_uint i;	ACPI_FUNCTION_NAME("ex_dump_operands");	if (!ident) {		ident = "?";	}	if (!note) {		note = "?";	}	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,			  "************* Operand Stack Contents (Opcode [%s], %d Operands)\n",			  ident, num_levels));	if (num_levels == 0) {		num_levels = 1;	}	/* Dump the operand stack starting at the top */	for (i = 0; num_levels > 0; i--, num_levels--) {		acpi_ex_dump_operand(operands[i], 0);	}	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,			  "************* Operand Stack dump from %s(%d), %s\n",			  module_name, line_number, note));	return;}/******************************************************************************* * * FUNCTION:    acpi_ex_out* functions * * PARAMETERS:  Title               - Descriptive text *              Value               - Value to be displayed * * DESCRIPTION: Object dump output formatting functions.  These functions *              reduce the number of format strings required and keeps them *              all in one place for easy modification. * ******************************************************************************/static void acpi_ex_out_string(char *title, char *value){	acpi_os_printf("%20s : %s\n", title, value);}static void acpi_ex_out_pointer(char *title, void *value){	acpi_os_printf("%20s : %p\n", title, value);}static void acpi_ex_out_address(char *title, acpi_physical_address value){#if ACPI_MACHINE_WIDTH == 16	acpi_os_printf("%20s : %p\n", title, value);#else	acpi_os_printf("%20s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value));#endif}/******************************************************************************* * * FUNCTION:    acpi_ex_dump_namespace_node * * PARAMETERS:  Node                - Descriptor to dump *              Flags               - Force display if TRUE * * DESCRIPTION: Dumps the members of the given.Node * ******************************************************************************/void acpi_ex_dump_namespace_node(struct acpi_namespace_node *node, u32 flags){	ACPI_FUNCTION_ENTRY();	if (!flags) {		if (!		    ((ACPI_LV_OBJECTS & acpi_dbg_level)		     && (_COMPONENT & acpi_dbg_layer))) {			return;		}	}	acpi_os_printf("%20s : %4.4s\n", "Name", acpi_ut_get_node_name(node));	acpi_ex_out_string("Type", acpi_ut_get_type_name(node->type));	acpi_ex_out_pointer("Attached Object",			    acpi_ns_get_attached_object(node));	acpi_ex_out_pointer("Parent", acpi_ns_get_parent_node(node));	acpi_ex_dump_object(ACPI_CAST_PTR(union acpi_operand_object, node),			    acpi_ex_dump_node);}/******************************************************************************* * * FUNCTION:    acpi_ex_dump_reference_obj * * PARAMETERS:  Object              - Descriptor to dump * * DESCRIPTION: Dumps a reference object * ******************************************************************************/static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc){	struct acpi_buffer ret_buf;	acpi_status status;	ret_buf.length = ACPI_ALLOCATE_LOCAL_BUFFER;	if (obj_desc->reference.opcode == AML_INT_NAMEPATH_OP) {		acpi_os_printf("Named Object %p ", obj_desc->reference.node);		status =		    acpi_ns_handle_to_pathname(obj_desc->reference.node,					       &ret_buf);		if (ACPI_FAILURE(status)) {			acpi_os_printf("Could not convert name to pathname\n");		} else {			acpi_os_printf("%s\n", (char *)ret_buf.pointer);			ACPI_MEM_FREE(ret_buf.pointer);		}	} else if (obj_desc->reference.object) {		acpi_os_printf("\nReferenced Object: %p\n",			       obj_desc->reference.object);	}}/******************************************************************************* * * FUNCTION:    acpi_ex_dump_package_obj * * PARAMETERS:  obj_desc            - Descriptor to dump *              Level               - Indentation Level *              Index               - Package index for this object * * DESCRIPTION: Dumps the elements of the package * ******************************************************************************/static voidacpi_ex_dump_package_obj(union acpi_operand_object *obj_desc,			 u32 level, u32 index){	u32 i;	/* Indentation and index output */	if (level > 0) {		for (i = 0; i < level; i++) {			acpi_os_printf(" ");		}		acpi_os_printf("[%.2d] ", index);	}	acpi_os_printf("%p ", obj_desc);	/* Null package elements are allowed */	if (!obj_desc) {		acpi_os_printf("[Null Object]\n");		return;	}	/* Packages may only contain a few object types */	switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {	case ACPI_TYPE_INTEGER:		acpi_os_printf("[Integer] = %8.8X%8.8X\n",			       ACPI_FORMAT_UINT64(obj_desc->integer.value));		break;	case ACPI_TYPE_STRING:		acpi_os_printf("[String] Value: ");		for (i = 0; i < obj_desc->string.length; i++) {			acpi_os_printf("%c", obj_desc->string.pointer[i]);		}		acpi_os_printf("\n");		break;	case ACPI_TYPE_BUFFER:		acpi_os_printf("[Buffer] Length %.2X = ",			       obj_desc->buffer.length);		if (obj_desc->buffer.length) {			acpi_ut_dump_buffer(ACPI_CAST_PTR					    (u8, obj_desc->buffer.pointer),					    obj_desc->buffer.length,					    DB_DWORD_DISPLAY, _COMPONENT);		} else {			acpi_os_printf("\n");		}		break;	case ACPI_TYPE_PACKAGE:		acpi_os_printf("[Package] Contains %d Elements:\n",			       obj_desc->package.count);		for (i = 0; i < obj_desc->package.count; i++) {			acpi_ex_dump_package_obj(obj_desc->package.elements[i],						 level + 1, i);		}		break;	case ACPI_TYPE_LOCAL_REFERENCE:		acpi_os_printf("[Object Reference] ");		acpi_ex_dump_reference_obj(obj_desc);		break;	default:		acpi_os_printf("[Unknown Type] %X\n",			       ACPI_GET_OBJECT_TYPE(obj_desc));		break;	}}/******************************************************************************* * * FUNCTION:    acpi_ex_dump_object_descriptor * * PARAMETERS:  obj_desc            - Descriptor to dump *              Flags               - Force display if TRUE * * DESCRIPTION: Dumps the members of the object descriptor given. * ******************************************************************************/voidacpi_ex_dump_object_descriptor(union acpi_operand_object *obj_desc, u32 flags){	ACPI_FUNCTION_TRACE("ex_dump_object_descriptor");	if (!obj_desc) {		return_VOID;	}	if (!flags) {		if (!		    ((ACPI_LV_OBJECTS & acpi_dbg_level)		     && (_COMPONENT & acpi_dbg_layer))) {			return_VOID;		}	}	if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) == ACPI_DESC_TYPE_NAMED) {		acpi_ex_dump_namespace_node((struct acpi_namespace_node *)					    obj_desc, flags);		acpi_os_printf("\nAttached Object (%p):\n",			       ((struct acpi_namespace_node *)obj_desc)->			       object);		acpi_ex_dump_object_descriptor(((struct acpi_namespace_node *)						obj_desc)->object, flags);		return_VOID;	}	if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) {		acpi_os_printf		    ("ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]\n",		     obj_desc, acpi_ut_get_descriptor_name(obj_desc));		return_VOID;	}	if (obj_desc->common.type > ACPI_TYPE_NS_NODE_MAX) {		return_VOID;	}	/* Common Fields */	acpi_ex_dump_object(obj_desc, acpi_ex_dump_common);	/* Object-specific fields */	acpi_ex_dump_object(obj_desc, acpi_ex_dump_info[obj_desc->common.type]);	return_VOID;}#endif

⌨️ 快捷键说明

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