rsdump.c 14.1 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7
/*******************************************************************************
 *
 * Module Name: rsdump - Functions to display the resource structures.
 *
 ******************************************************************************/

/*
8
 * Copyright (C) 2000 - 2013, Intel Corp.
L
Linus Torvalds 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 *    substantially similar to the "NO WARRANTY" disclaimer below
 *    ("Disclaimer") and any redistribution must be conditioned upon
 *    including a substantially similar Disclaimer requirement for further
 *    binary redistribution.
 * 3. Neither the names of the above-listed copyright holders nor the names
 *    of any contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * NO WARRANTY
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 */

#include <acpi/acpi.h>
L
Len Brown 已提交
45 46
#include "accommon.h"
#include "acresrc.h"
L
Linus Torvalds 已提交
47 48

#define _COMPONENT          ACPI_RESOURCES
L
Len Brown 已提交
49
ACPI_MODULE_NAME("rsdump")
50
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
R
Robert Moore 已提交
51
/* Local prototypes */
R
Robert Moore 已提交
52 53 54 55 56 57 58 59 60 61 62 63
static void acpi_rs_out_string(char *title, char *value);

static void acpi_rs_out_integer8(char *title, u8 value);

static void acpi_rs_out_integer16(char *title, u16 value);

static void acpi_rs_out_integer32(char *title, u32 value);

static void acpi_rs_out_integer64(char *title, u64 value);

static void acpi_rs_out_title(char *title);

64
static void acpi_rs_dump_byte_list(u16 length, u8 *data);
R
Robert Moore 已提交
65

66
static void acpi_rs_dump_word_list(u16 length, u16 *data);
R
Robert Moore 已提交
67

68 69 70
static void acpi_rs_dump_dword_list(u8 length, u32 *data);

static void acpi_rs_dump_short_byte_list(u8 length, u8 *data);
R
Robert Moore 已提交
71 72 73 74 75 76

static void
acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source);

static void acpi_rs_dump_address_common(union acpi_resource_data *resource);

B
Bob Moore 已提交
77 78 79
static void
acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table);

R
Robert Moore 已提交
80 81
/*******************************************************************************
 *
B
Bob Moore 已提交
82
 * FUNCTION:    acpi_rs_dump_descriptor
R
Robert Moore 已提交
83
 *
84 85
 * PARAMETERS:  resource            - Buffer containing the resource
 *              table               - Table entry to decode the resource
R
Robert Moore 已提交
86 87 88
 *
 * RETURN:      None
 *
89
 * DESCRIPTION: Dump a resource descriptor based on a dump table entry.
R
Robert Moore 已提交
90 91 92
 *
 ******************************************************************************/

B
Bob Moore 已提交
93 94
static void
acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
R
Robert Moore 已提交
95
{
B
Bob Moore 已提交
96 97
	u8 *target = NULL;
	u8 *previous_target;
B
Bob Moore 已提交
98 99 100 101 102 103 104 105 106
	char *name;
	u8 count;

	/* First table entry must contain the table length (# of table entries) */

	count = table->offset;

	while (count) {
		previous_target = target;
B
Bob Moore 已提交
107
		target = ACPI_ADD_PTR(u8, resource, table->offset);
B
Bob Moore 已提交
108 109 110 111 112 113 114 115 116 117 118
		name = table->name;

		switch (table->opcode) {
		case ACPI_RSD_TITLE:
			/*
			 * Optional resource title
			 */
			if (table->name) {
				acpi_os_printf("%s Resource\n", name);
			}
			break;
R
Robert Moore 已提交
119

B
Bob Moore 已提交
120
			/* Strings */
R
Robert Moore 已提交
121

B
Bob Moore 已提交
122
		case ACPI_RSD_LITERAL:
B
Bob Moore 已提交
123 124
			acpi_rs_out_string(name,
					   ACPI_CAST_PTR(char, table->pointer));
B
Bob Moore 已提交
125
			break;
R
Robert Moore 已提交
126

B
Bob Moore 已提交
127
		case ACPI_RSD_STRING:
B
Bob Moore 已提交
128
			acpi_rs_out_string(name, ACPI_CAST_PTR(char, target));
B
Bob Moore 已提交
129
			break;
R
Robert Moore 已提交
130

B
Bob Moore 已提交
131
			/* Data items, 8/16/32/64 bit */
R
Robert Moore 已提交
132

B
Bob Moore 已提交
133
		case ACPI_RSD_UINT8:
134 135 136 137 138 139 140 141
			if (table->pointer) {
				acpi_rs_out_string(name, ACPI_CAST_PTR(char,
								       table->
								       pointer
								       [*target]));
			} else {
				acpi_rs_out_integer8(name, ACPI_GET8(target));
			}
B
Bob Moore 已提交
142
			break;
R
Robert Moore 已提交
143

B
Bob Moore 已提交
144
		case ACPI_RSD_UINT16:
B
Bob Moore 已提交
145
			acpi_rs_out_integer16(name, ACPI_GET16(target));
B
Bob Moore 已提交
146 147 148
			break;

		case ACPI_RSD_UINT32:
B
Bob Moore 已提交
149
			acpi_rs_out_integer32(name, ACPI_GET32(target));
B
Bob Moore 已提交
150
			break;
B
Bob Moore 已提交
151

B
Bob Moore 已提交
152
		case ACPI_RSD_UINT64:
B
Bob Moore 已提交
153
			acpi_rs_out_integer64(name, ACPI_GET64(target));
B
Bob Moore 已提交
154 155 156 157 158
			break;

			/* Flags: 1-bit and 2-bit flags supported */

		case ACPI_RSD_1BITFLAG:
B
Bob Moore 已提交
159 160 161 162
			acpi_rs_out_string(name, ACPI_CAST_PTR(char,
							       table->
							       pointer[*target &
								       0x01]));
B
Bob Moore 已提交
163 164 165
			break;

		case ACPI_RSD_2BITFLAG:
B
Bob Moore 已提交
166 167 168 169
			acpi_rs_out_string(name, ACPI_CAST_PTR(char,
							       table->
							       pointer[*target &
								       0x03]));
B
Bob Moore 已提交
170 171
			break;

172 173 174 175 176 177 178
		case ACPI_RSD_3BITFLAG:
			acpi_rs_out_string(name, ACPI_CAST_PTR(char,
							       table->
							       pointer[*target &
								       0x07]));
			break;

B
Bob Moore 已提交
179 180 181 182 183 184 185
		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);
B
Bob Moore 已提交
186 187
				acpi_rs_dump_short_byte_list(*previous_target,
							     target);
B
Bob Moore 已提交
188 189 190
			}
			break;

191 192 193 194 195 196 197 198 199 200 201 202 203 204
		case ACPI_RSD_SHORTLISTX:
			/*
			 * Short byte list (single line output) for GPIO vendor data
			 * 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,
							     *
							     (ACPI_CAST_INDIRECT_PTR
							      (u8, target)));
			}
			break;

B
Bob Moore 已提交
205 206 207 208 209 210
		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) {
B
Bob Moore 已提交
211 212
				acpi_rs_dump_byte_list(ACPI_GET16
						       (previous_target),
B
Bob Moore 已提交
213
						       target);
B
Bob Moore 已提交
214 215 216 217 218 219 220 221 222
			}
			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) {
B
Bob Moore 已提交
223 224 225
				acpi_rs_dump_dword_list(*previous_target,
							ACPI_CAST_PTR(u32,
								      target));
B
Bob Moore 已提交
226 227 228
			}
			break;

229 230 231 232 233 234 235 236 237 238 239 240
		case ACPI_RSD_WORDLIST:
			/*
			 * Word list for GPIO Pin Table
			 * Note: The list length is obtained from the previous table entry
			 */
			if (previous_target) {
				acpi_rs_dump_word_list(*previous_target,
						       *(ACPI_CAST_INDIRECT_PTR
							 (u16, target)));
			}
			break;

B
Bob Moore 已提交
241 242 243 244
		case ACPI_RSD_ADDRESS:
			/*
			 * Common flags for all Address resources
			 */
B
Bob Moore 已提交
245 246 247
			acpi_rs_dump_address_common(ACPI_CAST_PTR
						    (union acpi_resource_data,
						     target));
B
Bob Moore 已提交
248 249 250 251 252 253
			break;

		case ACPI_RSD_SOURCE:
			/*
			 * Optional resource_source for Address resources
			 */
254 255
			acpi_rs_dump_resource_source(ACPI_CAST_PTR
						     (struct
L
Len Brown 已提交
256 257
								   acpi_resource_source,
								   target));
B
Bob Moore 已提交
258 259 260 261 262 263 264 265 266 267 268
			break;

		default:
			acpi_os_printf("**** Invalid table opcode [%X] ****\n",
				       table->opcode);
			return;
		}

		table++;
		count--;
	}
B
Bob Moore 已提交
269 270
}

R
Robert Moore 已提交
271 272 273
/*******************************************************************************
 *
 * FUNCTION:    acpi_rs_dump_resource_source
L
Linus Torvalds 已提交
274
 *
R
Robert Moore 已提交
275
 * PARAMETERS:  resource_source     - Pointer to a Resource Source struct
L
Linus Torvalds 已提交
276 277 278
 *
 * RETURN:      None
 *
R
Robert Moore 已提交
279 280
 * DESCRIPTION: Common routine for dumping the optional resource_source and the
 *              corresponding resource_source_index.
L
Linus Torvalds 已提交
281 282 283
 *
 ******************************************************************************/

R
Robert Moore 已提交
284 285
static void
acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source)
L
Linus Torvalds 已提交
286
{
B
Bob Moore 已提交
287
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
288

R
Robert Moore 已提交
289 290 291 292
	if (resource_source->index == 0xFF) {
		return;
	}

B
Bob Moore 已提交
293
	acpi_rs_out_integer8("Resource Source Index", resource_source->index);
R
Robert Moore 已提交
294 295 296 297 298 299 300 301 302 303

	acpi_rs_out_string("Resource Source",
			   resource_source->string_ptr ?
			   resource_source->string_ptr : "[Not Specified]");
}

/*******************************************************************************
 *
 * FUNCTION:    acpi_rs_dump_address_common
 *
304
 * PARAMETERS:  resource        - Pointer to an internal resource descriptor
R
Robert Moore 已提交
305 306 307 308 309 310 311 312 313 314
 *
 * 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)
{
L
Len Brown 已提交
315
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
316

R
Robert Moore 已提交
317 318 319 320
	/* Decode the type-specific flags */

	switch (resource->address.resource_type) {
	case ACPI_MEMORY_RANGE:
L
Linus Torvalds 已提交
321

B
Bob Moore 已提交
322
		acpi_rs_dump_descriptor(resource, acpi_rs_dump_memory_flags);
R
Robert Moore 已提交
323 324 325 326
		break;

	case ACPI_IO_RANGE:

B
Bob Moore 已提交
327
		acpi_rs_dump_descriptor(resource, acpi_rs_dump_io_flags);
R
Robert Moore 已提交
328 329 330 331 332 333 334 335 336 337 338 339
		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;
L
Linus Torvalds 已提交
340 341
	}

R
Robert Moore 已提交
342 343
	/* Decode the general flags */

B
Bob Moore 已提交
344
	acpi_rs_dump_descriptor(resource, acpi_rs_dump_general_flags);
L
Linus Torvalds 已提交
345 346 347 348
}

/*******************************************************************************
 *
R
Robert Moore 已提交
349
 * FUNCTION:    acpi_rs_dump_resource_list
L
Linus Torvalds 已提交
350
 *
R
Robert Moore 已提交
351
 * PARAMETERS:  resource_list       - Pointer to a resource descriptor list
L
Linus Torvalds 已提交
352 353 354
 *
 * RETURN:      None
 *
R
Robert Moore 已提交
355
 * DESCRIPTION: Dispatches the structure to the correct dump routine.
L
Linus Torvalds 已提交
356 357 358
 *
 ******************************************************************************/

R
Robert Moore 已提交
359
void acpi_rs_dump_resource_list(struct acpi_resource *resource_list)
L
Linus Torvalds 已提交
360
{
R
Robert Moore 已提交
361
	u32 count = 0;
B
Bob Moore 已提交
362
	u32 type;
L
Linus Torvalds 已提交
363

L
Len Brown 已提交
364
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
365

366 367 368
	/* Check if debug output enabled */

	if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_RESOURCES, _COMPONENT)) {
R
Robert Moore 已提交
369 370 371
		return;
	}

B
Bob Moore 已提交
372
	/* Walk list and dump all resource descriptors (END_TAG terminates) */
R
Robert Moore 已提交
373

B
Bob Moore 已提交
374
	do {
R
Robert Moore 已提交
375
		acpi_os_printf("\n[%02X] ", count);
B
Bob Moore 已提交
376
		count++;
R
Robert Moore 已提交
377 378 379

		/* Validate Type before dispatch */

B
Bob Moore 已提交
380 381
		type = resource_list->type;
		if (type > ACPI_RESOURCE_TYPE_MAX) {
R
Robert Moore 已提交
382 383 384 385 386 387 388 389
			acpi_os_printf
			    ("Invalid descriptor type (%X) in resource list\n",
			     resource_list->type);
			return;
		}

		/* Dump the resource descriptor */

390 391 392 393 394 395 396 397 398 399
		if (type == ACPI_RESOURCE_TYPE_SERIAL_BUS) {
			acpi_rs_dump_descriptor(&resource_list->data,
						acpi_gbl_dump_serial_bus_dispatch
						[resource_list->data.
						 common_serial_bus.type]);
		} else {
			acpi_rs_dump_descriptor(&resource_list->data,
						acpi_gbl_dump_resource_dispatch
						[type]);
		}
R
Robert Moore 已提交
400

B
Bob Moore 已提交
401
		/* Point to the next resource structure */
R
Robert Moore 已提交
402

403
		resource_list = ACPI_NEXT_RESOURCE(resource_list);
R
Robert Moore 已提交
404

B
Bob Moore 已提交
405
		/* Exit when END_TAG descriptor is reached */
R
Robert Moore 已提交
406

B
Bob Moore 已提交
407
	} while (type != ACPI_RESOURCE_TYPE_END_TAG);
R
Robert Moore 已提交
408 409 410 411
}

/*******************************************************************************
 *
B
Bob Moore 已提交
412
 * FUNCTION:    acpi_rs_dump_irq_list
R
Robert Moore 已提交
413
 *
B
Bob Moore 已提交
414
 * PARAMETERS:  route_table     - Pointer to the routing table to dump.
R
Robert Moore 已提交
415 416 417
 *
 * RETURN:      None
 *
B
Bob Moore 已提交
418
 * DESCRIPTION: Print IRQ routing table
R
Robert Moore 已提交
419 420 421
 *
 ******************************************************************************/

B
Bob Moore 已提交
422
void acpi_rs_dump_irq_list(u8 * route_table)
R
Robert Moore 已提交
423
{
B
Bob Moore 已提交
424 425
	struct acpi_pci_routing_table *prt_element;
	u8 count;
L
Linus Torvalds 已提交
426

L
Len Brown 已提交
427
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
428

429 430 431
	/* Check if debug output enabled */

	if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_RESOURCES, _COMPONENT)) {
B
Bob Moore 已提交
432
		return;
L
Linus Torvalds 已提交
433 434
	}

B
Bob Moore 已提交
435
	prt_element = ACPI_CAST_PTR(struct acpi_pci_routing_table, route_table);
L
Linus Torvalds 已提交
436

B
Bob Moore 已提交
437
	/* Dump all table elements, Exit on zero length element */
L
Linus Torvalds 已提交
438

B
Bob Moore 已提交
439 440 441 442
	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);
L
Linus Torvalds 已提交
443

B
Bob Moore 已提交
444 445
		prt_element = ACPI_ADD_PTR(struct acpi_pci_routing_table,
					   prt_element, prt_element->length);
L
Linus Torvalds 已提交
446 447 448 449 450
	}
}

/*******************************************************************************
 *
B
Bob Moore 已提交
451
 * FUNCTION:    acpi_rs_out*
L
Linus Torvalds 已提交
452
 *
453 454
 * PARAMETERS:  title       - Name of the resource field
 *              value       - Value of the resource field
L
Linus Torvalds 已提交
455 456 457
 *
 * RETURN:      None
 *
B
Bob Moore 已提交
458 459
 * DESCRIPTION: Miscellaneous helper functions to consistently format the
 *              output of the resource dump routines
L
Linus Torvalds 已提交
460 461 462
 *
 ******************************************************************************/

B
Bob Moore 已提交
463
static void acpi_rs_out_string(char *title, char *value)
L
Linus Torvalds 已提交
464
{
B
Bob Moore 已提交
465 466 467 468 469
	acpi_os_printf("%27s : %s", title, value);
	if (!*value) {
		acpi_os_printf("[NULL NAMESTRING]");
	}
	acpi_os_printf("\n");
L
Linus Torvalds 已提交
470 471
}

B
Bob Moore 已提交
472
static void acpi_rs_out_integer8(char *title, u8 value)
L
Linus Torvalds 已提交
473
{
B
Bob Moore 已提交
474
	acpi_os_printf("%27s : %2.2X\n", title, value);
L
Linus Torvalds 已提交
475 476
}

B
Bob Moore 已提交
477
static void acpi_rs_out_integer16(char *title, u16 value)
L
Linus Torvalds 已提交
478
{
B
Bob Moore 已提交
479
	acpi_os_printf("%27s : %4.4X\n", title, value);
L
Linus Torvalds 已提交
480 481
}

B
Bob Moore 已提交
482
static void acpi_rs_out_integer32(char *title, u32 value)
B
Bob Moore 已提交
483
{
B
Bob Moore 已提交
484
	acpi_os_printf("%27s : %8.8X\n", title, value);
B
Bob Moore 已提交
485 486
}

B
Bob Moore 已提交
487
static void acpi_rs_out_integer64(char *title, u64 value)
L
Linus Torvalds 已提交
488
{
B
Bob Moore 已提交
489
	acpi_os_printf("%27s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value));
L
Linus Torvalds 已提交
490 491
}

B
Bob Moore 已提交
492
static void acpi_rs_out_title(char *title)
L
Linus Torvalds 已提交
493
{
B
Bob Moore 已提交
494
	acpi_os_printf("%27s : ", title);
R
Robert Moore 已提交
495
}
L
Linus Torvalds 已提交
496

R
Robert Moore 已提交
497 498
/*******************************************************************************
 *
B
Bob Moore 已提交
499
 * FUNCTION:    acpi_rs_dump*List
R
Robert Moore 已提交
500
 *
501 502
 * PARAMETERS:  length      - Number of elements in the list
 *              data        - Start of the list
R
Robert Moore 已提交
503 504 505
 *
 * RETURN:      None
 *
B
Bob Moore 已提交
506
 * DESCRIPTION: Miscellaneous functions to dump lists of raw data
R
Robert Moore 已提交
507 508
 *
 ******************************************************************************/
L
Linus Torvalds 已提交
509

B
Bob Moore 已提交
510
static void acpi_rs_dump_byte_list(u16 length, u8 * data)
R
Robert Moore 已提交
511
{
B
Bob Moore 已提交
512
	u8 i;
L
Linus Torvalds 已提交
513

B
Bob Moore 已提交
514 515 516
	for (i = 0; i < length; i++) {
		acpi_os_printf("%25s%2.2X : %2.2X\n", "Byte", i, data[i]);
	}
R
Robert Moore 已提交
517
}
L
Linus Torvalds 已提交
518

B
Bob Moore 已提交
519
static void acpi_rs_dump_short_byte_list(u8 length, u8 * data)
R
Robert Moore 已提交
520
{
B
Bob Moore 已提交
521
	u8 i;
L
Linus Torvalds 已提交
522

B
Bob Moore 已提交
523 524 525 526
	for (i = 0; i < length; i++) {
		acpi_os_printf("%X ", data[i]);
	}
	acpi_os_printf("\n");
L
Linus Torvalds 已提交
527 528
}

B
Bob Moore 已提交
529
static void acpi_rs_dump_dword_list(u8 length, u32 * data)
L
Linus Torvalds 已提交
530
{
B
Bob Moore 已提交
531
	u8 i;
L
Linus Torvalds 已提交
532

B
Bob Moore 已提交
533 534
	for (i = 0; i < length; i++) {
		acpi_os_printf("%25s%2.2X : %8.8X\n", "Dword", i, data[i]);
L
Linus Torvalds 已提交
535 536 537
	}
}

538 539 540 541 542 543 544 545 546
static void acpi_rs_dump_word_list(u16 length, u16 *data)
{
	u16 i;

	for (i = 0; i < length; i++) {
		acpi_os_printf("%25s%2.2X : %4.4X\n", "Word", i, data[i]);
	}
}

L
Linus Torvalds 已提交
547
#endif