rsdump.c

来自「LINUX 2.6.17.4的源码」· C语言 代码 · 共 769 行 · 第 1/2 页

C
769
字号
		name = table->name;		switch (table->opcode) {		case ACPI_RSD_TITLE:			/*			 * Optional resource title			 */			if (table->name) {				acpi_os_printf("%s Resource\n", name);			}			break;			/* Strings */		case ACPI_RSD_LITERAL:			acpi_rs_out_string(name,					   ACPI_CAST_PTR(char, table->pointer));			break;		case ACPI_RSD_STRING:			acpi_rs_out_string(name, ACPI_CAST_PTR(char, target));			break;			/* Data items, 8/16/32/64 bit */		case ACPI_RSD_UINT8:			acpi_rs_out_integer8(name, ACPI_GET8(target));			break;		case ACPI_RSD_UINT16:			acpi_rs_out_integer16(name, ACPI_GET16(target));			break;		case ACPI_RSD_UINT32:			acpi_rs_out_integer32(name, ACPI_GET32(target));			break;		case ACPI_RSD_UINT64:			acpi_rs_out_integer64(name, ACPI_GET64(target));			break;			/* Flags: 1-bit and 2-bit flags supported */		case ACPI_RSD_1BITFLAG:			acpi_rs_out_string(name, ACPI_CAST_PTR(char,							       table->							       pointer[*target &								       0x01]));			break;		case ACPI_RSD_2BITFLAG:			acpi_rs_out_string(name, ACPI_CAST_PTR(char,							       table->							       pointer[*target &								       0x03]));			break;		case ACPI_RSD_SHORTLIST:			/*			 * Short byte list (single line output) for DMA and IRQ resources			 * Note: The list length is obtained from the previous table entry			 */			if (previous_target) {				acpi_rs_out_title(name);				acpi_rs_dump_short_byte_list(*previous_target,							     target);			}			break;		case ACPI_RSD_LONGLIST:			/*			 * Long byte list for Vendor resource data			 * Note: The list length is obtained from the previous table entry			 */			if (previous_target) {				acpi_rs_dump_byte_list(ACPI_GET16						       (previous_target),						       target);			}			break;		case ACPI_RSD_DWORDLIST:			/*			 * Dword list for Extended Interrupt resources			 * Note: The list length is obtained from the previous table entry			 */			if (previous_target) {				acpi_rs_dump_dword_list(*previous_target,							ACPI_CAST_PTR(u32,								      target));			}			break;		case ACPI_RSD_ADDRESS:			/*			 * Common flags for all Address resources			 */			acpi_rs_dump_address_common(ACPI_CAST_PTR						    (union acpi_resource_data,						     target));			break;		case ACPI_RSD_SOURCE:			/*			 * Optional resource_source for Address resources			 */			acpi_rs_dump_resource_source(ACPI_CAST_PTR						     (struct						      acpi_resource_source,						      target));			break;		default:			acpi_os_printf("**** Invalid table opcode [%X] ****\n",				       table->opcode);			return;		}		table++;		count--;	}}/******************************************************************************* * * FUNCTION:    acpi_rs_dump_resource_source * * PARAMETERS:  resource_source     - Pointer to a Resource Source struct * * RETURN:      None * * DESCRIPTION: Common routine for dumping the optional resource_source and the *              corresponding resource_source_index. * ******************************************************************************/static voidacpi_rs_dump_resource_source(struct acpi_resource_source *resource_source){	ACPI_FUNCTION_ENTRY();	if (resource_source->index == 0xFF) {		return;	}	acpi_rs_out_integer8("Resource Source Index", resource_source->index);	acpi_rs_out_string("Resource Source",			   resource_source->string_ptr ?			   resource_source->string_ptr : "[Not Specified]");}/******************************************************************************* * * FUNCTION:    acpi_rs_dump_address_common * * PARAMETERS:  Resource        - Pointer to an internal resource descriptor * * RETURN:      None * * DESCRIPTION: Dump the fields that are common to all Address resource *              descriptors * ******************************************************************************/static void acpi_rs_dump_address_common(union acpi_resource_data *resource){	ACPI_FUNCTION_ENTRY();	/* Decode the type-specific flags */	switch (resource->address.resource_type) {	case ACPI_MEMORY_RANGE:		acpi_rs_dump_descriptor(resource, acpi_rs_dump_memory_flags);		break;	case ACPI_IO_RANGE:		acpi_rs_dump_descriptor(resource, acpi_rs_dump_io_flags);		break;	case ACPI_BUS_NUMBER_RANGE:		acpi_rs_out_string("Resource Type", "Bus Number Range");		break;	default:		acpi_rs_out_integer8("Resource Type",				     (u8) resource->address.resource_type);		break;	}	/* Decode the general flags */	acpi_rs_dump_descriptor(resource, acpi_rs_dump_general_flags);}/******************************************************************************* * * FUNCTION:    acpi_rs_dump_resource_list * * PARAMETERS:  resource_list       - Pointer to a resource descriptor list * * RETURN:      None * * DESCRIPTION: Dispatches the structure to the correct dump routine. * ******************************************************************************/void acpi_rs_dump_resource_list(struct acpi_resource *resource_list){	u32 count = 0;	u32 type;	ACPI_FUNCTION_ENTRY();	if (!(acpi_dbg_level & ACPI_LV_RESOURCES)	    || !(_COMPONENT & acpi_dbg_layer)) {		return;	}	/* Walk list and dump all resource descriptors (END_TAG terminates) */	do {		acpi_os_printf("\n[%02X] ", count);		count++;		/* Validate Type before dispatch */		type = resource_list->type;		if (type > ACPI_RESOURCE_TYPE_MAX) {			acpi_os_printf			    ("Invalid descriptor type (%X) in resource list\n",			     resource_list->type);			return;		}		/* Dump the resource descriptor */		acpi_rs_dump_descriptor(&resource_list->data,					acpi_gbl_dump_resource_dispatch[type]);		/* Point to the next resource structure */		resource_list =		    ACPI_ADD_PTR(struct acpi_resource, resource_list,				 resource_list->length);		/* Exit when END_TAG descriptor is reached */	} while (type != ACPI_RESOURCE_TYPE_END_TAG);}/******************************************************************************* * * FUNCTION:    acpi_rs_dump_irq_list * * PARAMETERS:  route_table     - Pointer to the routing table to dump. * * RETURN:      None * * DESCRIPTION: Print IRQ routing table * ******************************************************************************/void acpi_rs_dump_irq_list(u8 * route_table){	struct acpi_pci_routing_table *prt_element;	u8 count;	ACPI_FUNCTION_ENTRY();	if (!(acpi_dbg_level & ACPI_LV_RESOURCES)	    || !(_COMPONENT & acpi_dbg_layer)) {		return;	}	prt_element = ACPI_CAST_PTR(struct acpi_pci_routing_table, route_table);	/* Dump all table elements, Exit on zero length element */	for (count = 0; prt_element->length; count++) {		acpi_os_printf("\n[%02X] PCI IRQ Routing Table Package\n",			       count);		acpi_rs_dump_descriptor(prt_element, acpi_rs_dump_prt);		prt_element = ACPI_ADD_PTR(struct acpi_pci_routing_table,					   prt_element, prt_element->length);	}}/******************************************************************************* * * FUNCTION:    acpi_rs_out* * * PARAMETERS:  Title       - Name of the resource field *              Value       - Value of the resource field * * RETURN:      None * * DESCRIPTION: Miscellaneous helper functions to consistently format the *              output of the resource dump routines * ******************************************************************************/static void acpi_rs_out_string(char *title, char *value){	acpi_os_printf("%27s : %s", title, value);	if (!*value) {		acpi_os_printf("[NULL NAMESTRING]");	}	acpi_os_printf("\n");}static void acpi_rs_out_integer8(char *title, u8 value){	acpi_os_printf("%27s : %2.2X\n", title, value);}static void acpi_rs_out_integer16(char *title, u16 value){	acpi_os_printf("%27s : %4.4X\n", title, value);}static void acpi_rs_out_integer32(char *title, u32 value){	acpi_os_printf("%27s : %8.8X\n", title, value);}static void acpi_rs_out_integer64(char *title, u64 value){	acpi_os_printf("%27s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value));}static void acpi_rs_out_title(char *title){	acpi_os_printf("%27s : ", title);}/******************************************************************************* * * FUNCTION:    acpi_rs_dump*List * * PARAMETERS:  Length      - Number of elements in the list *              Data        - Start of the list * * RETURN:      None * * DESCRIPTION: Miscellaneous functions to dump lists of raw data * ******************************************************************************/static void acpi_rs_dump_byte_list(u16 length, u8 * data){	u8 i;	for (i = 0; i < length; i++) {		acpi_os_printf("%25s%2.2X : %2.2X\n", "Byte", i, data[i]);	}}static void acpi_rs_dump_short_byte_list(u8 length, u8 * data){	u8 i;	for (i = 0; i < length; i++) {		acpi_os_printf("%X ", data[i]);	}	acpi_os_printf("\n");}static void acpi_rs_dump_dword_list(u8 length, u32 * data){	u8 i;	for (i = 0; i < length; i++) {		acpi_os_printf("%25s%2.2X : %8.8X\n", "Dword", i, data[i]);	}}#endif

⌨️ 快捷键说明

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