rscreate.c 15.7 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7
/*******************************************************************************
 *
 * Module Name: rscreate - Create resource lists/tables
 *
 ******************************************************************************/

/*
8
 * Copyright (C) 2000 - 2012, 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 47
#include "accommon.h"
#include "acresrc.h"
#include "acnamesp.h"
L
Linus Torvalds 已提交
48 49

#define _COMPONENT          ACPI_RESOURCES
L
Len Brown 已提交
50
ACPI_MODULE_NAME("rscreate")
L
Linus Torvalds 已提交
51

52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
/*******************************************************************************
 *
 * FUNCTION:    acpi_buffer_to_resource
 *
 * PARAMETERS:  aml_buffer          - Pointer to the resource byte stream
 *              aml_buffer_length   - Length of the aml_buffer
 *              resource_ptr        - Where the converted resource is returned
 *
 * RETURN:      Status
 *
 * DESCRIPTION: Convert a raw AML buffer to a resource list
 *
 ******************************************************************************/
acpi_status
acpi_buffer_to_resource(u8 *aml_buffer,
			u16 aml_buffer_length,
			struct acpi_resource **resource_ptr)
{
	acpi_status status;
	acpi_size list_size_needed;
	void *resource;
	void *current_resource_ptr;

	/*
	 * Note: we allow AE_AML_NO_RESOURCE_END_TAG, since an end tag
	 * is not required here.
	 */

	/* Get the required length for the converted resource */

	status = acpi_rs_get_list_length(aml_buffer, aml_buffer_length,
					 &list_size_needed);
	if (status == AE_AML_NO_RESOURCE_END_TAG) {
		status = AE_OK;
	}
	if (ACPI_FAILURE(status)) {
		return (status);
	}

	/* Allocate a buffer for the converted resource */

	resource = ACPI_ALLOCATE_ZEROED(list_size_needed);
	current_resource_ptr = resource;
	if (!resource) {
		return (AE_NO_MEMORY);
	}

	/* Perform the AML-to-Resource conversion */

101
	status = acpi_ut_walk_aml_resources(NULL, aml_buffer, aml_buffer_length,
102 103 104 105 106 107 108 109 110 111 112 113 114 115
					    acpi_rs_convert_aml_to_resources,
					    &current_resource_ptr);
	if (status == AE_AML_NO_RESOURCE_END_TAG) {
		status = AE_OK;
	}
	if (ACPI_FAILURE(status)) {
		ACPI_FREE(resource);
	} else {
		*resource_ptr = resource;
	}

	return (status);
}

L
Linus Torvalds 已提交
116 117 118 119
/*******************************************************************************
 *
 * FUNCTION:    acpi_rs_create_resource_list
 *
B
Bob Moore 已提交
120 121
 * PARAMETERS:  aml_buffer          - Pointer to the resource byte stream
 *              output_buffer       - Pointer to the user's buffer
L
Linus Torvalds 已提交
122
 *
B
Bob Moore 已提交
123
 * RETURN:      Status: AE_OK if okay, else a valid acpi_status code
L
Linus Torvalds 已提交
124 125 126 127 128 129 130 131 132
 *              If output_buffer is not large enough, output_buffer_length
 *              indicates how large output_buffer should be, else it
 *              indicates how may u8 elements of output_buffer are valid.
 *
 * DESCRIPTION: Takes the byte stream returned from a _CRS, _PRS control method
 *              execution and parses the stream to create a linked list
 *              of device resources.
 *
 ******************************************************************************/
133

L
Linus Torvalds 已提交
134
acpi_status
B
Bob Moore 已提交
135
acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
136
			     struct acpi_buffer * output_buffer)
L
Linus Torvalds 已提交
137 138
{

L
Len Brown 已提交
139
	acpi_status status;
B
Bob Moore 已提交
140
	u8 *aml_start;
L
Len Brown 已提交
141
	acpi_size list_size_needed = 0;
B
Bob Moore 已提交
142
	u32 aml_buffer_length;
B
Bob Moore 已提交
143
	void *resource;
L
Linus Torvalds 已提交
144

B
Bob Moore 已提交
145
	ACPI_FUNCTION_TRACE(rs_create_resource_list);
L
Linus Torvalds 已提交
146

B
Bob Moore 已提交
147
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AmlBuffer = %p\n", aml_buffer));
L
Linus Torvalds 已提交
148

R
Robert Moore 已提交
149 150
	/* Params already validated, so we don't re-validate here */

B
Bob Moore 已提交
151 152
	aml_buffer_length = aml_buffer->buffer.length;
	aml_start = aml_buffer->buffer.pointer;
L
Linus Torvalds 已提交
153 154

	/*
B
Bob Moore 已提交
155
	 * Pass the aml_buffer into a module that can calculate
L
Linus Torvalds 已提交
156 157
	 * the buffer size needed for the linked list
	 */
B
Bob Moore 已提交
158 159
	status = acpi_rs_get_list_length(aml_start, aml_buffer_length,
					 &list_size_needed);
L
Len Brown 已提交
160

B
Bob Moore 已提交
161
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Status=%X ListSizeNeeded=%X\n",
L
Len Brown 已提交
162 163 164
			  status, (u32) list_size_needed));
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
L
Linus Torvalds 已提交
165 166 167 168
	}

	/* Validate/Allocate/Clear caller buffer */

L
Len Brown 已提交
169 170 171
	status = acpi_ut_initialize_buffer(output_buffer, list_size_needed);
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
L
Linus Torvalds 已提交
172 173 174 175
	}

	/* Do the conversion */

B
Bob Moore 已提交
176
	resource = output_buffer->pointer;
177
	status = acpi_ut_walk_aml_resources(NULL, aml_start, aml_buffer_length,
B
Bob Moore 已提交
178 179
					    acpi_rs_convert_aml_to_resources,
					    &resource);
L
Len Brown 已提交
180 181
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
L
Linus Torvalds 已提交
182 183
	}

B
Bob Moore 已提交
184
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
L
Len Brown 已提交
185 186
			  output_buffer->pointer, (u32) output_buffer->length));
	return_ACPI_STATUS(AE_OK);
L
Linus Torvalds 已提交
187 188 189 190 191 192
}

/*******************************************************************************
 *
 * FUNCTION:    acpi_rs_create_pci_routing_table
 *
B
Bob Moore 已提交
193 194
 * PARAMETERS:  package_object          - Pointer to a package containing one
 *                                        of more ACPI_OPERAND_OBJECTs
L
Linus Torvalds 已提交
195 196 197 198 199 200 201
 *              output_buffer           - Pointer to the user's buffer
 *
 * RETURN:      Status  AE_OK if okay, else a valid acpi_status code.
 *              If the output_buffer is too small, the error will be
 *              AE_BUFFER_OVERFLOW and output_buffer->Length will point
 *              to the size buffer needed.
 *
B
Bob Moore 已提交
202
 * DESCRIPTION: Takes the union acpi_operand_object package and creates a
L
Linus Torvalds 已提交
203 204 205 206 207 208 209 210
 *              linked list of PCI interrupt descriptions
 *
 * NOTE: It is the caller's responsibility to ensure that the start of the
 * output buffer is aligned properly (if necessary).
 *
 ******************************************************************************/

acpi_status
L
Len Brown 已提交
211 212
acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
				 struct acpi_buffer *output_buffer)
L
Linus Torvalds 已提交
213
{
L
Len Brown 已提交
214 215 216 217 218 219 220 221 222 223 224 225
	u8 *buffer;
	union acpi_operand_object **top_object_list;
	union acpi_operand_object **sub_object_list;
	union acpi_operand_object *obj_desc;
	acpi_size buffer_size_needed = 0;
	u32 number_of_elements;
	u32 index;
	struct acpi_pci_routing_table *user_prt;
	struct acpi_namespace_node *node;
	acpi_status status;
	struct acpi_buffer path_buffer;

B
Bob Moore 已提交
226
	ACPI_FUNCTION_TRACE(rs_create_pci_routing_table);
L
Linus Torvalds 已提交
227 228 229

	/* Params already validated, so we don't re-validate here */

R
Robert Moore 已提交
230 231
	/* Get the required buffer length */

L
Len Brown 已提交
232 233 234 235
	status = acpi_rs_get_pci_routing_table_length(package_object,
						      &buffer_size_needed);
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
L
Linus Torvalds 已提交
236 237
	}

B
Bob Moore 已提交
238
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "BufferSizeNeeded = %X\n",
L
Len Brown 已提交
239
			  (u32) buffer_size_needed));
L
Linus Torvalds 已提交
240 241 242

	/* Validate/Allocate/Clear caller buffer */

L
Len Brown 已提交
243 244 245
	status = acpi_ut_initialize_buffer(output_buffer, buffer_size_needed);
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
L
Linus Torvalds 已提交
246 247 248
	}

	/*
B
Bob Moore 已提交
249
	 * Loop through the ACPI_INTERNAL_OBJECTS - Each object should be a
250
	 * package that in turn contains an u64 Address, a u8 Pin,
B
Bob Moore 已提交
251
	 * a Name, and a u8 source_index.
L
Linus Torvalds 已提交
252
	 */
L
Len Brown 已提交
253
	top_object_list = package_object->package.elements;
L
Linus Torvalds 已提交
254
	number_of_elements = package_object->package.count;
L
Len Brown 已提交
255 256
	buffer = output_buffer->pointer;
	user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer);
L
Linus Torvalds 已提交
257 258

	for (index = 0; index < number_of_elements; index++) {
259

L
Linus Torvalds 已提交
260 261 262 263 264 265 266
		/*
		 * Point user_prt past this current structure
		 *
		 * NOTE: On the first iteration, user_prt->Length will
		 * be zero because we cleared the return buffer earlier
		 */
		buffer += user_prt->length;
L
Len Brown 已提交
267
		user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer);
L
Linus Torvalds 已提交
268 269 270 271 272 273

		/*
		 * Fill in the Length field with the information we have at this point.
		 * The minus four is to subtract the size of the u8 Source[4] member
		 * because it is added below.
		 */
L
Len Brown 已提交
274
		user_prt->length = (sizeof(struct acpi_pci_routing_table) - 4);
L
Linus Torvalds 已提交
275

R
Robert Moore 已提交
276 277
		/* Each element of the top-level package must also be a package */

278
		if ((*top_object_list)->common.type != ACPI_TYPE_PACKAGE) {
B
Bob Moore 已提交
279
			ACPI_ERROR((AE_INFO,
280
				    "(PRT[%u]) Need sub-package, found %s",
B
Bob Moore 已提交
281 282 283
				    index,
				    acpi_ut_get_object_type_name
				    (*top_object_list)));
L
Len Brown 已提交
284
			return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
L
Linus Torvalds 已提交
285 286 287 288 289
		}

		/* Each sub-package must be of length 4 */

		if ((*top_object_list)->package.count != 4) {
B
Bob Moore 已提交
290
			ACPI_ERROR((AE_INFO,
291
				    "(PRT[%u]) Need package of length 4, found length %u",
B
Bob Moore 已提交
292
				    index, (*top_object_list)->package.count));
L
Len Brown 已提交
293
			return_ACPI_STATUS(AE_AML_PACKAGE_LIMIT);
L
Linus Torvalds 已提交
294 295 296 297 298 299 300 301 302
		}

		/*
		 * Dereference the sub-package.
		 * The sub_object_list will now point to an array of the four IRQ
		 * elements: [Address, Pin, Source, source_index]
		 */
		sub_object_list = (*top_object_list)->package.elements;

R
Robert Moore 已提交
303 304
		/* 1) First subobject: Dereference the PRT.Address */

L
Linus Torvalds 已提交
305
		obj_desc = sub_object_list[0];
306
		if (obj_desc->common.type != ACPI_TYPE_INTEGER) {
B
Bob Moore 已提交
307
			ACPI_ERROR((AE_INFO,
308
				    "(PRT[%u].Address) Need Integer, found %s",
B
Bob Moore 已提交
309 310
				    index,
				    acpi_ut_get_object_type_name(obj_desc)));
L
Len Brown 已提交
311
			return_ACPI_STATUS(AE_BAD_DATA);
L
Linus Torvalds 已提交
312 313
		}

B
Bob Moore 已提交
314 315
		user_prt->address = obj_desc->integer.value;

R
Robert Moore 已提交
316 317
		/* 2) Second subobject: Dereference the PRT.Pin */

L
Linus Torvalds 已提交
318
		obj_desc = sub_object_list[1];
319
		if (obj_desc->common.type != ACPI_TYPE_INTEGER) {
B
Bob Moore 已提交
320
			ACPI_ERROR((AE_INFO,
321
				    "(PRT[%u].Pin) Need Integer, found %s",
B
Bob Moore 已提交
322 323
				    index,
				    acpi_ut_get_object_type_name(obj_desc)));
L
Len Brown 已提交
324
			return_ACPI_STATUS(AE_BAD_DATA);
L
Linus Torvalds 已提交
325 326
		}

B
Bob Moore 已提交
327 328
		user_prt->pin = (u32) obj_desc->integer.value;

329 330 331 332 333 334 335
		/*
		 * If the BIOS has erroneously reversed the _PRT source_name (index 2)
		 * and the source_index (index 3), fix it. _PRT is important enough to
		 * workaround this BIOS error. This also provides compatibility with
		 * other ACPI implementations.
		 */
		obj_desc = sub_object_list[3];
336
		if (!obj_desc || (obj_desc->common.type != ACPI_TYPE_INTEGER)) {
337 338 339 340 341 342 343 344
			sub_object_list[3] = sub_object_list[2];
			sub_object_list[2] = obj_desc;

			ACPI_WARNING((AE_INFO,
				      "(PRT[%X].Source) SourceName and SourceIndex are reversed, fixed",
				      index));
		}

B
Bob Moore 已提交
345 346 347 348
		/*
		 * 3) Third subobject: Dereference the PRT.source_name
		 * The name may be unresolved (slack mode), so allow a null object
		 */
349
		obj_desc = sub_object_list[2];
B
Bob Moore 已提交
350
		if (obj_desc) {
351
			switch (obj_desc->common.type) {
B
Bob Moore 已提交
352 353
			case ACPI_TYPE_LOCAL_REFERENCE:

354 355
				if (obj_desc->reference.class !=
				    ACPI_REFCLASS_NAME) {
B
Bob Moore 已提交
356
					ACPI_ERROR((AE_INFO,
357
						    "(PRT[%u].Source) Need name, found Reference Class 0x%X",
B
Bob Moore 已提交
358
						    index,
359
						    obj_desc->reference.class));
B
Bob Moore 已提交
360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407
					return_ACPI_STATUS(AE_BAD_DATA);
				}

				node = obj_desc->reference.node;

				/* Use *remaining* length of the buffer as max for pathname */

				path_buffer.length = output_buffer->length -
				    (u32) ((u8 *) user_prt->source -
					   (u8 *) output_buffer->pointer);
				path_buffer.pointer = user_prt->source;

				status =
				    acpi_ns_handle_to_pathname((acpi_handle)
							       node,
							       &path_buffer);

				/* +1 to include null terminator */

				user_prt->length +=
				    (u32) ACPI_STRLEN(user_prt->source) + 1;
				break;

			case ACPI_TYPE_STRING:

				ACPI_STRCPY(user_prt->source,
					    obj_desc->string.pointer);

				/*
				 * Add to the Length field the length of the string
				 * (add 1 for terminator)
				 */
				user_prt->length += obj_desc->string.length + 1;
				break;

			case ACPI_TYPE_INTEGER:
				/*
				 * If this is a number, then the Source Name is NULL, since the
				 * entire buffer was zeroed out, we can leave this alone.
				 *
				 * Add to the Length field the length of the u32 NULL
				 */
				user_prt->length += sizeof(u32);
				break;

			default:

				ACPI_ERROR((AE_INFO,
408
					    "(PRT[%u].Source) Need Ref/String/Integer, found %s",
B
Bob Moore 已提交
409 410 411
					    index,
					    acpi_ut_get_object_type_name
					    (obj_desc)));
L
Len Brown 已提交
412
				return_ACPI_STATUS(AE_BAD_DATA);
L
Linus Torvalds 已提交
413 414 415 416 417
			}
		}

		/* Now align the current length */

L
Len Brown 已提交
418
		user_prt->length =
B
Bob Moore 已提交
419
		    (u32) ACPI_ROUND_UP_TO_64BIT(user_prt->length);
L
Linus Torvalds 已提交
420

R
Robert Moore 已提交
421 422
		/* 4) Fourth subobject: Dereference the PRT.source_index */

423
		obj_desc = sub_object_list[3];
424
		if (obj_desc->common.type != ACPI_TYPE_INTEGER) {
B
Bob Moore 已提交
425
			ACPI_ERROR((AE_INFO,
426
				    "(PRT[%u].SourceIndex) Need Integer, found %s",
B
Bob Moore 已提交
427 428
				    index,
				    acpi_ut_get_object_type_name(obj_desc)));
L
Len Brown 已提交
429
			return_ACPI_STATUS(AE_BAD_DATA);
L
Linus Torvalds 已提交
430 431
		}

B
Bob Moore 已提交
432 433
		user_prt->source_index = (u32) obj_desc->integer.value;

L
Linus Torvalds 已提交
434 435 436 437 438
		/* Point to the next union acpi_operand_object in the top level package */

		top_object_list++;
	}

B
Bob Moore 已提交
439
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
L
Len Brown 已提交
440 441
			  output_buffer->pointer, (u32) output_buffer->length));
	return_ACPI_STATUS(AE_OK);
L
Linus Torvalds 已提交
442 443 444 445
}

/*******************************************************************************
 *
B
Bob Moore 已提交
446
 * FUNCTION:    acpi_rs_create_aml_resources
L
Linus Torvalds 已提交
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462
 *
 * PARAMETERS:  linked_list_buffer      - Pointer to the resource linked list
 *              output_buffer           - Pointer to the user's buffer
 *
 * RETURN:      Status  AE_OK if okay, else a valid acpi_status code.
 *              If the output_buffer is too small, the error will be
 *              AE_BUFFER_OVERFLOW and output_buffer->Length will point
 *              to the size buffer needed.
 *
 * DESCRIPTION: Takes the linked list of device resources and
 *              creates a bytestream to be used as input for the
 *              _SRS control method.
 *
 ******************************************************************************/

acpi_status
B
Bob Moore 已提交
463 464
acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
			     struct acpi_buffer *output_buffer)
L
Linus Torvalds 已提交
465
{
L
Len Brown 已提交
466
	acpi_status status;
B
Bob Moore 已提交
467
	acpi_size aml_size_needed = 0;
L
Linus Torvalds 已提交
468

B
Bob Moore 已提交
469
	ACPI_FUNCTION_TRACE(rs_create_aml_resources);
L
Linus Torvalds 已提交
470

B
Bob Moore 已提交
471
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "LinkedListBuffer = %p\n",
L
Len Brown 已提交
472
			  linked_list_buffer));
L
Linus Torvalds 已提交
473 474 475 476 477 478 479

	/*
	 * Params already validated, so we don't re-validate here
	 *
	 * Pass the linked_list_buffer into a module that calculates
	 * the buffer size needed for the byte stream.
	 */
B
Bob Moore 已提交
480
	status = acpi_rs_get_aml_length(linked_list_buffer, &aml_size_needed);
L
Len Brown 已提交
481

B
Bob Moore 已提交
482
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AmlSizeNeeded=%X, %s\n",
483
			  (u32)aml_size_needed, acpi_format_exception(status)));
L
Len Brown 已提交
484 485
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
L
Linus Torvalds 已提交
486 487 488 489
	}

	/* Validate/Allocate/Clear caller buffer */

B
Bob Moore 已提交
490
	status = acpi_ut_initialize_buffer(output_buffer, aml_size_needed);
L
Len Brown 已提交
491 492
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
L
Linus Torvalds 已提交
493 494 495 496
	}

	/* Do the conversion */

L
Len Brown 已提交
497
	status =
B
Bob Moore 已提交
498 499 500
	    acpi_rs_convert_resources_to_aml(linked_list_buffer,
					     aml_size_needed,
					     output_buffer->pointer);
L
Len Brown 已提交
501 502
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
L
Linus Torvalds 已提交
503 504
	}

B
Bob Moore 已提交
505
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n",
L
Len Brown 已提交
506 507
			  output_buffer->pointer, (u32) output_buffer->length));
	return_ACPI_STATUS(AE_OK);
L
Linus Torvalds 已提交
508
}