Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.28-rc6 715 lines 21 kB view raw
1 2/****************************************************************************** 3 * 4 * Module Name: exstore - AML Interpreter object store support 5 * 6 *****************************************************************************/ 7 8/* 9 * Copyright (C) 2000 - 2008, Intel Corp. 10 * All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions, and the following disclaimer, 17 * without modification. 18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 19 * substantially similar to the "NO WARRANTY" disclaimer below 20 * ("Disclaimer") and any redistribution must be conditioned upon 21 * including a substantially similar Disclaimer requirement for further 22 * binary redistribution. 23 * 3. Neither the names of the above-listed copyright holders nor the names 24 * of any contributors may be used to endorse or promote products derived 25 * from this software without specific prior written permission. 26 * 27 * Alternatively, this software may be distributed under the terms of the 28 * GNU General Public License ("GPL") version 2 as published by the Free 29 * Software Foundation. 30 * 31 * NO WARRANTY 32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 42 * POSSIBILITY OF SUCH DAMAGES. 43 */ 44 45#include <acpi/acpi.h> 46#include <acpi/acdispat.h> 47#include <acpi/acinterp.h> 48#include <acpi/amlcode.h> 49#include <acpi/acnamesp.h> 50 51#define _COMPONENT ACPI_EXECUTER 52ACPI_MODULE_NAME("exstore") 53 54/* Local prototypes */ 55static void 56acpi_ex_do_debug_object(union acpi_operand_object *source_desc, 57 u32 level, u32 index); 58 59static acpi_status 60acpi_ex_store_object_to_index(union acpi_operand_object *val_desc, 61 union acpi_operand_object *dest_desc, 62 struct acpi_walk_state *walk_state); 63 64/******************************************************************************* 65 * 66 * FUNCTION: acpi_ex_do_debug_object 67 * 68 * PARAMETERS: source_desc - Value to be stored 69 * Level - Indentation level (used for packages) 70 * Index - Current package element, zero if not pkg 71 * 72 * RETURN: None 73 * 74 * DESCRIPTION: Handles stores to the Debug Object. 75 * 76 ******************************************************************************/ 77 78static void 79acpi_ex_do_debug_object(union acpi_operand_object *source_desc, 80 u32 level, u32 index) 81{ 82 u32 i; 83 84 ACPI_FUNCTION_TRACE_PTR(ex_do_debug_object, source_desc); 85 86 /* Print line header as long as we are not in the middle of an object display */ 87 88 if (!((level > 0) && index == 0)) { 89 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %*s", 90 level, " ")); 91 } 92 93 /* Display index for package output only */ 94 95 if (index > 0) { 96 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, 97 "(%.2u) ", index - 1)); 98 } 99 100 if (!source_desc) { 101 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[Null Object]\n")); 102 return_VOID; 103 } 104 105 if (ACPI_GET_DESCRIPTOR_TYPE(source_desc) == ACPI_DESC_TYPE_OPERAND) { 106 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "%s ", 107 acpi_ut_get_object_type_name 108 (source_desc))); 109 110 if (!acpi_ut_valid_internal_object(source_desc)) { 111 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, 112 "%p, Invalid Internal Object!\n", 113 source_desc)); 114 return_VOID; 115 } 116 } else if (ACPI_GET_DESCRIPTOR_TYPE(source_desc) == 117 ACPI_DESC_TYPE_NAMED) { 118 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "%s: %p\n", 119 acpi_ut_get_type_name(((struct 120 acpi_namespace_node 121 *)source_desc)-> 122 type), 123 source_desc)); 124 return_VOID; 125 } else { 126 return_VOID; 127 } 128 129 /* source_desc is of type ACPI_DESC_TYPE_OPERAND */ 130 131 switch (ACPI_GET_OBJECT_TYPE(source_desc)) { 132 case ACPI_TYPE_INTEGER: 133 134 /* Output correct integer width */ 135 136 if (acpi_gbl_integer_byte_width == 4) { 137 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "0x%8.8X\n", 138 (u32) source_desc->integer. 139 value)); 140 } else { 141 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, 142 "0x%8.8X%8.8X\n", 143 ACPI_FORMAT_UINT64(source_desc-> 144 integer. 145 value))); 146 } 147 break; 148 149 case ACPI_TYPE_BUFFER: 150 151 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[0x%.2X]\n", 152 (u32) source_desc->buffer.length)); 153 ACPI_DUMP_BUFFER(source_desc->buffer.pointer, 154 (source_desc->buffer.length < 155 256) ? source_desc->buffer.length : 256); 156 break; 157 158 case ACPI_TYPE_STRING: 159 160 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[0x%.2X] \"%s\"\n", 161 source_desc->string.length, 162 source_desc->string.pointer)); 163 break; 164 165 case ACPI_TYPE_PACKAGE: 166 167 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, 168 "[Contains 0x%.2X Elements]\n", 169 source_desc->package.count)); 170 171 /* Output the entire contents of the package */ 172 173 for (i = 0; i < source_desc->package.count; i++) { 174 acpi_ex_do_debug_object(source_desc->package. 175 elements[i], level + 4, i + 1); 176 } 177 break; 178 179 case ACPI_TYPE_LOCAL_REFERENCE: 180 181 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[%s] ", 182 acpi_ut_get_reference_name(source_desc))); 183 184 /* Decode the reference */ 185 186 switch (source_desc->reference.class) { 187 case ACPI_REFCLASS_INDEX: 188 189 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "0x%X\n", 190 source_desc->reference.value)); 191 break; 192 193 case ACPI_REFCLASS_TABLE: 194 195 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, 196 "Table Index 0x%X\n", 197 source_desc->reference.value)); 198 break; 199 200 default: 201 break; 202 } 203 204 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, " ")); 205 206 /* Check for valid node first, then valid object */ 207 208 if (source_desc->reference.node) { 209 if (ACPI_GET_DESCRIPTOR_TYPE 210 (source_desc->reference.node) != 211 ACPI_DESC_TYPE_NAMED) { 212 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, 213 " %p - Not a valid namespace node\n", 214 source_desc->reference. 215 node)); 216 } else { 217 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, 218 "Node %p [%4.4s] ", 219 source_desc->reference. 220 node, 221 (source_desc->reference. 222 node)->name.ascii)); 223 224 switch ((source_desc->reference.node)->type) { 225 226 /* These types have no attached object */ 227 228 case ACPI_TYPE_DEVICE: 229 acpi_os_printf("Device\n"); 230 break; 231 232 case ACPI_TYPE_THERMAL: 233 acpi_os_printf("Thermal Zone\n"); 234 break; 235 236 default: 237 acpi_ex_do_debug_object((source_desc-> 238 reference. 239 node)->object, 240 level + 4, 0); 241 break; 242 } 243 } 244 } else if (source_desc->reference.object) { 245 if (ACPI_GET_DESCRIPTOR_TYPE 246 (source_desc->reference.object) == 247 ACPI_DESC_TYPE_NAMED) { 248 acpi_ex_do_debug_object(((struct 249 acpi_namespace_node *) 250 source_desc->reference. 251 object)->object, 252 level + 4, 0); 253 } else { 254 acpi_ex_do_debug_object(source_desc->reference. 255 object, level + 4, 0); 256 } 257 } 258 break; 259 260 default: 261 262 ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "%p\n", 263 source_desc)); 264 break; 265 } 266 267 ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "\n")); 268 return_VOID; 269} 270 271/******************************************************************************* 272 * 273 * FUNCTION: acpi_ex_store 274 * 275 * PARAMETERS: *source_desc - Value to be stored 276 * *dest_desc - Where to store it. Must be an NS node 277 * or an union acpi_operand_object of type 278 * Reference; 279 * walk_state - Current walk state 280 * 281 * RETURN: Status 282 * 283 * DESCRIPTION: Store the value described by source_desc into the location 284 * described by dest_desc. Called by various interpreter 285 * functions to store the result of an operation into 286 * the destination operand -- not just simply the actual "Store" 287 * ASL operator. 288 * 289 ******************************************************************************/ 290 291acpi_status 292acpi_ex_store(union acpi_operand_object *source_desc, 293 union acpi_operand_object *dest_desc, 294 struct acpi_walk_state *walk_state) 295{ 296 acpi_status status = AE_OK; 297 union acpi_operand_object *ref_desc = dest_desc; 298 299 ACPI_FUNCTION_TRACE_PTR(ex_store, dest_desc); 300 301 /* Validate parameters */ 302 303 if (!source_desc || !dest_desc) { 304 ACPI_ERROR((AE_INFO, "Null parameter")); 305 return_ACPI_STATUS(AE_AML_NO_OPERAND); 306 } 307 308 /* dest_desc can be either a namespace node or an ACPI object */ 309 310 if (ACPI_GET_DESCRIPTOR_TYPE(dest_desc) == ACPI_DESC_TYPE_NAMED) { 311 /* 312 * Dest is a namespace node, 313 * Storing an object into a Named node. 314 */ 315 status = acpi_ex_store_object_to_node(source_desc, 316 (struct 317 acpi_namespace_node *) 318 dest_desc, walk_state, 319 ACPI_IMPLICIT_CONVERSION); 320 321 return_ACPI_STATUS(status); 322 } 323 324 /* Destination object must be a Reference or a Constant object */ 325 326 switch (ACPI_GET_OBJECT_TYPE(dest_desc)) { 327 case ACPI_TYPE_LOCAL_REFERENCE: 328 break; 329 330 case ACPI_TYPE_INTEGER: 331 332 /* Allow stores to Constants -- a Noop as per ACPI spec */ 333 334 if (dest_desc->common.flags & AOPOBJ_AML_CONSTANT) { 335 return_ACPI_STATUS(AE_OK); 336 } 337 338 /*lint -fallthrough */ 339 340 default: 341 342 /* Destination is not a Reference object */ 343 344 ACPI_ERROR((AE_INFO, 345 "Target is not a Reference or Constant object - %s [%p]", 346 acpi_ut_get_object_type_name(dest_desc), 347 dest_desc)); 348 349 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 350 } 351 352 /* 353 * Examine the Reference class. These cases are handled: 354 * 355 * 1) Store to Name (Change the object associated with a name) 356 * 2) Store to an indexed area of a Buffer or Package 357 * 3) Store to a Method Local or Arg 358 * 4) Store to the debug object 359 */ 360 switch (ref_desc->reference.class) { 361 case ACPI_REFCLASS_REFOF: 362 363 /* Storing an object into a Name "container" */ 364 365 status = acpi_ex_store_object_to_node(source_desc, 366 ref_desc->reference. 367 object, walk_state, 368 ACPI_IMPLICIT_CONVERSION); 369 break; 370 371 case ACPI_REFCLASS_INDEX: 372 373 /* Storing to an Index (pointer into a packager or buffer) */ 374 375 status = 376 acpi_ex_store_object_to_index(source_desc, ref_desc, 377 walk_state); 378 break; 379 380 case ACPI_REFCLASS_LOCAL: 381 case ACPI_REFCLASS_ARG: 382 383 /* Store to a method local/arg */ 384 385 status = 386 acpi_ds_store_object_to_local(ref_desc->reference.class, 387 ref_desc->reference.value, 388 source_desc, walk_state); 389 break; 390 391 case ACPI_REFCLASS_DEBUG: 392 393 /* 394 * Storing to the Debug object causes the value stored to be 395 * displayed and otherwise has no effect -- see ACPI Specification 396 */ 397 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 398 "**** Write to Debug Object: Object %p %s ****:\n\n", 399 source_desc, 400 acpi_ut_get_object_type_name(source_desc))); 401 402 acpi_ex_do_debug_object(source_desc, 0, 0); 403 break; 404 405 default: 406 407 ACPI_ERROR((AE_INFO, "Unknown Reference Class %2.2X", 408 ref_desc->reference.class)); 409 ACPI_DUMP_ENTRY(ref_desc, ACPI_LV_INFO); 410 411 status = AE_AML_INTERNAL; 412 break; 413 } 414 415 return_ACPI_STATUS(status); 416} 417 418/******************************************************************************* 419 * 420 * FUNCTION: acpi_ex_store_object_to_index 421 * 422 * PARAMETERS: *source_desc - Value to be stored 423 * *dest_desc - Named object to receive the value 424 * walk_state - Current walk state 425 * 426 * RETURN: Status 427 * 428 * DESCRIPTION: Store the object to indexed Buffer or Package element 429 * 430 ******************************************************************************/ 431 432static acpi_status 433acpi_ex_store_object_to_index(union acpi_operand_object *source_desc, 434 union acpi_operand_object *index_desc, 435 struct acpi_walk_state *walk_state) 436{ 437 acpi_status status = AE_OK; 438 union acpi_operand_object *obj_desc; 439 union acpi_operand_object *new_desc; 440 u8 value = 0; 441 u32 i; 442 443 ACPI_FUNCTION_TRACE(ex_store_object_to_index); 444 445 /* 446 * Destination must be a reference pointer, and 447 * must point to either a buffer or a package 448 */ 449 switch (index_desc->reference.target_type) { 450 case ACPI_TYPE_PACKAGE: 451 /* 452 * Storing to a package element. Copy the object and replace 453 * any existing object with the new object. No implicit 454 * conversion is performed. 455 * 456 * The object at *(index_desc->Reference.Where) is the 457 * element within the package that is to be modified. 458 * The parent package object is at index_desc->Reference.Object 459 */ 460 obj_desc = *(index_desc->reference.where); 461 462 if (ACPI_GET_OBJECT_TYPE(source_desc) == 463 ACPI_TYPE_LOCAL_REFERENCE 464 && source_desc->reference.class == ACPI_REFCLASS_TABLE) { 465 466 /* This is a DDBHandle, just add a reference to it */ 467 468 acpi_ut_add_reference(source_desc); 469 new_desc = source_desc; 470 } else { 471 /* Normal object, copy it */ 472 473 status = 474 acpi_ut_copy_iobject_to_iobject(source_desc, 475 &new_desc, 476 walk_state); 477 if (ACPI_FAILURE(status)) { 478 return_ACPI_STATUS(status); 479 } 480 } 481 482 if (obj_desc) { 483 484 /* Decrement reference count by the ref count of the parent package */ 485 486 for (i = 0; i < ((union acpi_operand_object *) 487 index_desc->reference.object)->common. 488 reference_count; i++) { 489 acpi_ut_remove_reference(obj_desc); 490 } 491 } 492 493 *(index_desc->reference.where) = new_desc; 494 495 /* Increment ref count by the ref count of the parent package-1 */ 496 497 for (i = 1; i < ((union acpi_operand_object *) 498 index_desc->reference.object)->common. 499 reference_count; i++) { 500 acpi_ut_add_reference(new_desc); 501 } 502 503 break; 504 505 case ACPI_TYPE_BUFFER_FIELD: 506 507 /* 508 * Store into a Buffer or String (not actually a real buffer_field) 509 * at a location defined by an Index. 510 * 511 * The first 8-bit element of the source object is written to the 512 * 8-bit Buffer location defined by the Index destination object, 513 * according to the ACPI 2.0 specification. 514 */ 515 516 /* 517 * Make sure the target is a Buffer or String. An error should 518 * not happen here, since the reference_object was constructed 519 * by the INDEX_OP code. 520 */ 521 obj_desc = index_desc->reference.object; 522 if ((ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_BUFFER) && 523 (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_STRING)) { 524 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 525 } 526 527 /* 528 * The assignment of the individual elements will be slightly 529 * different for each source type. 530 */ 531 switch (ACPI_GET_OBJECT_TYPE(source_desc)) { 532 case ACPI_TYPE_INTEGER: 533 534 /* Use the least-significant byte of the integer */ 535 536 value = (u8) (source_desc->integer.value); 537 break; 538 539 case ACPI_TYPE_BUFFER: 540 case ACPI_TYPE_STRING: 541 542 /* Note: Takes advantage of common string/buffer fields */ 543 544 value = source_desc->buffer.pointer[0]; 545 break; 546 547 default: 548 549 /* All other types are invalid */ 550 551 ACPI_ERROR((AE_INFO, 552 "Source must be Integer/Buffer/String type, not %s", 553 acpi_ut_get_object_type_name(source_desc))); 554 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 555 } 556 557 /* Store the source value into the target buffer byte */ 558 559 obj_desc->buffer.pointer[index_desc->reference.value] = value; 560 break; 561 562 default: 563 ACPI_ERROR((AE_INFO, "Target is not a Package or BufferField")); 564 status = AE_AML_OPERAND_TYPE; 565 break; 566 } 567 568 return_ACPI_STATUS(status); 569} 570 571/******************************************************************************* 572 * 573 * FUNCTION: acpi_ex_store_object_to_node 574 * 575 * PARAMETERS: source_desc - Value to be stored 576 * Node - Named object to receive the value 577 * walk_state - Current walk state 578 * implicit_conversion - Perform implicit conversion (yes/no) 579 * 580 * RETURN: Status 581 * 582 * DESCRIPTION: Store the object to the named object. 583 * 584 * The Assignment of an object to a named object is handled here 585 * The value passed in will replace the current value (if any) 586 * with the input value. 587 * 588 * When storing into an object the data is converted to the 589 * target object type then stored in the object. This means 590 * that the target object type (for an initialized target) will 591 * not be changed by a store operation. 592 * 593 * Assumes parameters are already validated. 594 * 595 ******************************************************************************/ 596 597acpi_status 598acpi_ex_store_object_to_node(union acpi_operand_object *source_desc, 599 struct acpi_namespace_node *node, 600 struct acpi_walk_state *walk_state, 601 u8 implicit_conversion) 602{ 603 acpi_status status = AE_OK; 604 union acpi_operand_object *target_desc; 605 union acpi_operand_object *new_desc; 606 acpi_object_type target_type; 607 608 ACPI_FUNCTION_TRACE_PTR(ex_store_object_to_node, source_desc); 609 610 /* Get current type of the node, and object attached to Node */ 611 612 target_type = acpi_ns_get_type(node); 613 target_desc = acpi_ns_get_attached_object(node); 614 615 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Storing %p(%s) into node %p(%s)\n", 616 source_desc, 617 acpi_ut_get_object_type_name(source_desc), node, 618 acpi_ut_get_type_name(target_type))); 619 620 /* 621 * Resolve the source object to an actual value 622 * (If it is a reference object) 623 */ 624 status = acpi_ex_resolve_object(&source_desc, target_type, walk_state); 625 if (ACPI_FAILURE(status)) { 626 return_ACPI_STATUS(status); 627 } 628 629 /* If no implicit conversion, drop into the default case below */ 630 631 if ((!implicit_conversion) || 632 ((walk_state->opcode == AML_COPY_OP) && 633 (target_type != ACPI_TYPE_LOCAL_REGION_FIELD) && 634 (target_type != ACPI_TYPE_LOCAL_BANK_FIELD) && 635 (target_type != ACPI_TYPE_LOCAL_INDEX_FIELD))) { 636 /* 637 * Force execution of default (no implicit conversion). Note: 638 * copy_object does not perform an implicit conversion, as per the ACPI 639 * spec -- except in case of region/bank/index fields -- because these 640 * objects must retain their original type permanently. 641 */ 642 target_type = ACPI_TYPE_ANY; 643 } 644 645 /* Do the actual store operation */ 646 647 switch (target_type) { 648 case ACPI_TYPE_BUFFER_FIELD: 649 case ACPI_TYPE_LOCAL_REGION_FIELD: 650 case ACPI_TYPE_LOCAL_BANK_FIELD: 651 case ACPI_TYPE_LOCAL_INDEX_FIELD: 652 653 /* For fields, copy the source data to the target field. */ 654 655 status = acpi_ex_write_data_to_field(source_desc, target_desc, 656 &walk_state->result_obj); 657 break; 658 659 case ACPI_TYPE_INTEGER: 660 case ACPI_TYPE_STRING: 661 case ACPI_TYPE_BUFFER: 662 663 /* 664 * These target types are all of type Integer/String/Buffer, and 665 * therefore support implicit conversion before the store. 666 * 667 * Copy and/or convert the source object to a new target object 668 */ 669 status = 670 acpi_ex_store_object_to_object(source_desc, target_desc, 671 &new_desc, walk_state); 672 if (ACPI_FAILURE(status)) { 673 return_ACPI_STATUS(status); 674 } 675 676 if (new_desc != target_desc) { 677 /* 678 * Store the new new_desc as the new value of the Name, and set 679 * the Name's type to that of the value being stored in it. 680 * source_desc reference count is incremented by attach_object. 681 * 682 * Note: This may change the type of the node if an explicit store 683 * has been performed such that the node/object type has been 684 * changed. 685 */ 686 status = 687 acpi_ns_attach_object(node, new_desc, 688 new_desc->common.type); 689 690 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 691 "Store %s into %s via Convert/Attach\n", 692 acpi_ut_get_object_type_name 693 (source_desc), 694 acpi_ut_get_object_type_name 695 (new_desc))); 696 } 697 break; 698 699 default: 700 701 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 702 "Storing %s (%p) directly into node (%p) with no implicit conversion\n", 703 acpi_ut_get_object_type_name(source_desc), 704 source_desc, node)); 705 706 /* No conversions for all other types. Just attach the source object */ 707 708 status = acpi_ns_attach_object(node, source_desc, 709 ACPI_GET_OBJECT_TYPE 710 (source_desc)); 711 break; 712 } 713 714 return_ACPI_STATUS(status); 715}