nspredef.c (249112) | nspredef.c (249663) |
---|---|
1/****************************************************************************** 2 * 3 * Module Name: nspredef - Validation of ACPI predefined methods and objects 4 * 5 *****************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2013, Intel Corp. --- 49 unchanged lines hidden (view full) --- 58 * This module validates predefined ACPI objects that appear in the namespace, 59 * at the time they are evaluated (via AcpiEvaluateObject). The purpose of this 60 * validation is to detect problems with BIOS-exposed predefined ACPI objects 61 * before the results are returned to the ACPI-related drivers. 62 * 63 * There are several areas that are validated: 64 * 65 * 1) The number of input arguments as defined by the method/object in the | 1/****************************************************************************** 2 * 3 * Module Name: nspredef - Validation of ACPI predefined methods and objects 4 * 5 *****************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2013, Intel Corp. --- 49 unchanged lines hidden (view full) --- 58 * This module validates predefined ACPI objects that appear in the namespace, 59 * at the time they are evaluated (via AcpiEvaluateObject). The purpose of this 60 * validation is to detect problems with BIOS-exposed predefined ACPI objects 61 * before the results are returned to the ACPI-related drivers. 62 * 63 * There are several areas that are validated: 64 * 65 * 1) The number of input arguments as defined by the method/object in the |
66 * ASL is validated against the ACPI specification. | 66 * ASL is validated against the ACPI specification. |
67 * 2) The type of the return object (if any) is validated against the ACPI | 67 * 2) The type of the return object (if any) is validated against the ACPI |
68 * specification. | 68 * specification. |
69 * 3) For returned package objects, the count of package elements is | 69 * 3) For returned package objects, the count of package elements is |
70 * validated, as well as the type of each package element. Nested 71 * packages are supported. | 70 * validated, as well as the type of each package element. Nested 71 * packages are supported. |
72 * 73 * For any problems found, a warning message is issued. 74 * 75 ******************************************************************************/ 76 77 78/* Local prototypes */ 79 80static ACPI_STATUS 81AcpiNsCheckReference ( | 72 * 73 * For any problems found, a warning message is issued. 74 * 75 ******************************************************************************/ 76 77 78/* Local prototypes */ 79 80static ACPI_STATUS 81AcpiNsCheckReference ( |
82 ACPI_PREDEFINED_DATA *Data, | 82 ACPI_EVALUATE_INFO *Info, |
83 ACPI_OPERAND_OBJECT *ReturnObject); 84 85static UINT32 86AcpiNsGetBitmappedType ( 87 ACPI_OPERAND_OBJECT *ReturnObject); 88 89 90/******************************************************************************* 91 * | 83 ACPI_OPERAND_OBJECT *ReturnObject); 84 85static UINT32 86AcpiNsGetBitmappedType ( 87 ACPI_OPERAND_OBJECT *ReturnObject); 88 89 90/******************************************************************************* 91 * |
92 * FUNCTION: AcpiNsCheckPredefinedNames | 92 * FUNCTION: AcpiNsCheckReturnValue |
93 * 94 * PARAMETERS: Node - Namespace node for the method/object | 93 * 94 * PARAMETERS: Node - Namespace node for the method/object |
95 * Info - Method execution information block |
|
95 * UserParamCount - Number of parameters actually passed 96 * ReturnStatus - Status from the object evaluation 97 * ReturnObjectPtr - Pointer to the object returned from the 98 * evaluation of a method or object 99 * 100 * RETURN: Status 101 * | 96 * UserParamCount - Number of parameters actually passed 97 * ReturnStatus - Status from the object evaluation 98 * ReturnObjectPtr - Pointer to the object returned from the 99 * evaluation of a method or object 100 * 101 * RETURN: Status 102 * |
102 * DESCRIPTION: Check an ACPI name for a match in the predefined name list. | 103 * DESCRIPTION: Check the value returned from a predefined name. |
103 * 104 ******************************************************************************/ 105 106ACPI_STATUS | 104 * 105 ******************************************************************************/ 106 107ACPI_STATUS |
107AcpiNsCheckPredefinedNames ( | 108AcpiNsCheckReturnValue ( |
108 ACPI_NAMESPACE_NODE *Node, | 109 ACPI_NAMESPACE_NODE *Node, |
110 ACPI_EVALUATE_INFO *Info, |
|
109 UINT32 UserParamCount, 110 ACPI_STATUS ReturnStatus, 111 ACPI_OPERAND_OBJECT **ReturnObjectPtr) 112{ | 111 UINT32 UserParamCount, 112 ACPI_STATUS ReturnStatus, 113 ACPI_OPERAND_OBJECT **ReturnObjectPtr) 114{ |
113 ACPI_STATUS Status = AE_OK; | 115 ACPI_STATUS Status; |
114 const ACPI_PREDEFINED_INFO *Predefined; | 116 const ACPI_PREDEFINED_INFO *Predefined; |
115 char *Pathname; 116 ACPI_PREDEFINED_DATA *Data; | |
117 118 | 117 118 |
119 /* Match the name for this method/object against the predefined list */ 120 121 Predefined = AcpiUtMatchPredefinedMethod (Node->Name.Ascii); 122 123 /* Get the full pathname to the object, for use in warning messages */ 124 125 Pathname = AcpiNsGetExternalPathname (Node); 126 if (!Pathname) 127 { 128 return (AE_OK); /* Could not get pathname, ignore */ 129 } 130 131 /* 132 * Check that the parameter count for this method matches the ASL 133 * definition. For predefined names, ensure that both the caller and 134 * the method itself are in accordance with the ACPI specification. 135 */ 136 AcpiNsCheckParameterCount (Pathname, Node, UserParamCount, Predefined); 137 | |
138 /* If not a predefined name, we cannot validate the return object */ 139 | 119 /* If not a predefined name, we cannot validate the return object */ 120 |
121 Predefined = Info->Predefined; |
|
140 if (!Predefined) 141 { | 122 if (!Predefined) 123 { |
142 goto Cleanup; | 124 return (AE_OK); |
143 } 144 145 /* 146 * If the method failed or did not actually return an object, we cannot 147 * validate the return object 148 */ | 125 } 126 127 /* 128 * If the method failed or did not actually return an object, we cannot 129 * validate the return object 130 */ |
149 if ((ReturnStatus != AE_OK) && (ReturnStatus != AE_CTRL_RETURN_VALUE)) | 131 if ((ReturnStatus != AE_OK) && 132 (ReturnStatus != AE_CTRL_RETURN_VALUE)) |
150 { | 133 { |
151 goto Cleanup; | 134 return (AE_OK); |
152 } 153 154 /* 155 * Return value validation and possible repair. 156 * 157 * 1) Don't perform return value validation/repair if this feature 158 * has been disabled via a global option. 159 * 160 * 2) We have a return value, but if one wasn't expected, just exit, 161 * this is not a problem. For example, if the "Implicit Return" 162 * feature is enabled, methods will always return a value. 163 * 164 * 3) If the return value can be of any type, then we cannot perform 165 * any validation, just exit. 166 */ 167 if (AcpiGbl_DisableAutoRepair || 168 (!Predefined->Info.ExpectedBtypes) || 169 (Predefined->Info.ExpectedBtypes == ACPI_RTYPE_ALL)) 170 { | 135 } 136 137 /* 138 * Return value validation and possible repair. 139 * 140 * 1) Don't perform return value validation/repair if this feature 141 * has been disabled via a global option. 142 * 143 * 2) We have a return value, but if one wasn't expected, just exit, 144 * this is not a problem. For example, if the "Implicit Return" 145 * feature is enabled, methods will always return a value. 146 * 147 * 3) If the return value can be of any type, then we cannot perform 148 * any validation, just exit. 149 */ 150 if (AcpiGbl_DisableAutoRepair || 151 (!Predefined->Info.ExpectedBtypes) || 152 (Predefined->Info.ExpectedBtypes == ACPI_RTYPE_ALL)) 153 { |
171 goto Cleanup; | 154 return (AE_OK); |
172 } 173 | 155 } 156 |
174 /* Create the parameter data block for object validation */ 175 176 Data = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PREDEFINED_DATA)); 177 if (!Data) 178 { 179 goto Cleanup; 180 } 181 Data->Predefined = Predefined; 182 Data->Node = Node; 183 Data->NodeFlags = Node->Flags; 184 Data->Pathname = Pathname; 185 | |
186 /* 187 * Check that the type of the main return object is what is expected 188 * for this predefined name 189 */ | 157 /* 158 * Check that the type of the main return object is what is expected 159 * for this predefined name 160 */ |
190 Status = AcpiNsCheckObjectType (Data, ReturnObjectPtr, 191 Predefined->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); | 161 Status = AcpiNsCheckObjectType (Info, ReturnObjectPtr, 162 Predefined->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); |
192 if (ACPI_FAILURE (Status)) 193 { 194 goto Exit; 195 } 196 197 /* 198 * For returned Package objects, check the type of all sub-objects. 199 * Note: Package may have been newly created by call above. 200 */ 201 if ((*ReturnObjectPtr)->Common.Type == ACPI_TYPE_PACKAGE) 202 { | 163 if (ACPI_FAILURE (Status)) 164 { 165 goto Exit; 166 } 167 168 /* 169 * For returned Package objects, check the type of all sub-objects. 170 * Note: Package may have been newly created by call above. 171 */ 172 if ((*ReturnObjectPtr)->Common.Type == ACPI_TYPE_PACKAGE) 173 { |
203 Data->ParentPackage = *ReturnObjectPtr; 204 Status = AcpiNsCheckPackage (Data, ReturnObjectPtr); | 174 Info->ParentPackage = *ReturnObjectPtr; 175 Status = AcpiNsCheckPackage (Info, ReturnObjectPtr); |
205 if (ACPI_FAILURE (Status)) 206 { 207 goto Exit; 208 } 209 } 210 211 /* 212 * The return object was OK, or it was successfully repaired above. 213 * Now make some additional checks such as verifying that package 214 * objects are sorted correctly (if required) or buffer objects have 215 * the correct data width (bytes vs. dwords). These repairs are 216 * performed on a per-name basis, i.e., the code is specific to 217 * particular predefined names. 218 */ | 176 if (ACPI_FAILURE (Status)) 177 { 178 goto Exit; 179 } 180 } 181 182 /* 183 * The return object was OK, or it was successfully repaired above. 184 * Now make some additional checks such as verifying that package 185 * objects are sorted correctly (if required) or buffer objects have 186 * the correct data width (bytes vs. dwords). These repairs are 187 * performed on a per-name basis, i.e., the code is specific to 188 * particular predefined names. 189 */ |
219 Status = AcpiNsComplexRepairs (Data, Node, Status, ReturnObjectPtr); | 190 Status = AcpiNsComplexRepairs (Info, Node, Status, ReturnObjectPtr); |
220 221Exit: 222 /* 223 * If the object validation failed or if we successfully repaired one 224 * or more objects, mark the parent node to suppress further warning 225 * messages during the next evaluation of the same method/object. 226 */ | 191 192Exit: 193 /* 194 * If the object validation failed or if we successfully repaired one 195 * or more objects, mark the parent node to suppress further warning 196 * messages during the next evaluation of the same method/object. 197 */ |
227 if (ACPI_FAILURE (Status) || (Data->Flags & ACPI_OBJECT_REPAIRED)) | 198 if (ACPI_FAILURE (Status) || 199 (Info->ReturnFlags & ACPI_OBJECT_REPAIRED)) |
228 { 229 Node->Flags |= ANOBJ_EVALUATED; 230 } | 200 { 201 Node->Flags |= ANOBJ_EVALUATED; 202 } |
231 ACPI_FREE (Data); | |
232 | 203 |
233Cleanup: 234 ACPI_FREE (Pathname); | |
235 return (Status); 236} 237 238 239/******************************************************************************* 240 * | 204 return (Status); 205} 206 207 208/******************************************************************************* 209 * |
241 * FUNCTION: AcpiNsCheckParameterCount 242 * 243 * PARAMETERS: Pathname - Full pathname to the node (for error msgs) 244 * Node - Namespace node for the method/object 245 * UserParamCount - Number of args passed in by the caller 246 * Predefined - Pointer to entry in predefined name table 247 * 248 * RETURN: None 249 * 250 * DESCRIPTION: Check that the declared (in ASL/AML) parameter count for a 251 * predefined name is what is expected (i.e., what is defined in 252 * the ACPI specification for this predefined name.) 253 * 254 ******************************************************************************/ 255 256void 257AcpiNsCheckParameterCount ( 258 char *Pathname, 259 ACPI_NAMESPACE_NODE *Node, 260 UINT32 UserParamCount, 261 const ACPI_PREDEFINED_INFO *Predefined) 262{ 263 UINT32 ParamCount; 264 UINT32 RequiredParamsCurrent; 265 UINT32 RequiredParamsOld; 266 267 268 /* Methods have 0-7 parameters. All other types have zero. */ 269 270 ParamCount = 0; 271 if (Node->Type == ACPI_TYPE_METHOD) 272 { 273 ParamCount = Node->Object->Method.ParamCount; 274 } 275 276 if (!Predefined) 277 { 278 /* 279 * Check the parameter count for non-predefined methods/objects. 280 * 281 * Warning if too few or too many arguments have been passed by the 282 * caller. An incorrect number of arguments may not cause the method 283 * to fail. However, the method will fail if there are too few 284 * arguments and the method attempts to use one of the missing ones. 285 */ 286 if (UserParamCount < ParamCount) 287 { 288 ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, 289 "Insufficient arguments - needs %u, found %u", 290 ParamCount, UserParamCount)); 291 } 292 else if (UserParamCount > ParamCount) 293 { 294 ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, 295 "Excess arguments - needs %u, found %u", 296 ParamCount, UserParamCount)); 297 } 298 return; 299 } 300 301 /* 302 * Validate the user-supplied parameter count. 303 * Allow two different legal argument counts (_SCP, etc.) 304 */ 305 RequiredParamsCurrent = Predefined->Info.ArgumentList & METHOD_ARG_MASK; 306 RequiredParamsOld = Predefined->Info.ArgumentList >> METHOD_ARG_BIT_WIDTH; 307 308 if (UserParamCount != ACPI_UINT32_MAX) 309 { 310 if ((UserParamCount != RequiredParamsCurrent) && 311 (UserParamCount != RequiredParamsOld)) 312 { 313 ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, ACPI_WARN_ALWAYS, 314 "Parameter count mismatch - " 315 "caller passed %u, ACPI requires %u", 316 UserParamCount, RequiredParamsCurrent)); 317 } 318 } 319 320 /* 321 * Check that the ASL-defined parameter count is what is expected for 322 * this predefined name (parameter count as defined by the ACPI 323 * specification) 324 */ 325 if ((ParamCount != RequiredParamsCurrent) && 326 (ParamCount != RequiredParamsOld)) 327 { 328 ACPI_WARN_PREDEFINED ((AE_INFO, Pathname, Node->Flags, 329 "Parameter count mismatch - ASL declared %u, ACPI requires %u", 330 ParamCount, RequiredParamsCurrent)); 331 } 332} 333 334 335/******************************************************************************* 336 * | |
337 * FUNCTION: AcpiNsCheckObjectType 338 * | 210 * FUNCTION: AcpiNsCheckObjectType 211 * |
339 * PARAMETERS: Data - Pointer to validation data structure | 212 * PARAMETERS: Info - Method execution information block |
340 * ReturnObjectPtr - Pointer to the object returned from the 341 * evaluation of a method or object 342 * ExpectedBtypes - Bitmap of expected return type(s) 343 * PackageIndex - Index of object within parent package (if 344 * applicable - ACPI_NOT_PACKAGE_ELEMENT 345 * otherwise) 346 * 347 * RETURN: Status 348 * 349 * DESCRIPTION: Check the type of the return object against the expected object 350 * type(s). Use of Btype allows multiple expected object types. 351 * 352 ******************************************************************************/ 353 354ACPI_STATUS 355AcpiNsCheckObjectType ( | 213 * ReturnObjectPtr - Pointer to the object returned from the 214 * evaluation of a method or object 215 * ExpectedBtypes - Bitmap of expected return type(s) 216 * PackageIndex - Index of object within parent package (if 217 * applicable - ACPI_NOT_PACKAGE_ELEMENT 218 * otherwise) 219 * 220 * RETURN: Status 221 * 222 * DESCRIPTION: Check the type of the return object against the expected object 223 * type(s). Use of Btype allows multiple expected object types. 224 * 225 ******************************************************************************/ 226 227ACPI_STATUS 228AcpiNsCheckObjectType ( |
356 ACPI_PREDEFINED_DATA *Data, | 229 ACPI_EVALUATE_INFO *Info, |
357 ACPI_OPERAND_OBJECT **ReturnObjectPtr, 358 UINT32 ExpectedBtypes, 359 UINT32 PackageIndex) 360{ 361 ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; 362 ACPI_STATUS Status = AE_OK; 363 char TypeBuffer[48]; /* Room for 5 types */ 364 365 366 /* A Namespace node should not get here, but make sure */ 367 368 if (ReturnObject && 369 ACPI_GET_DESCRIPTOR_TYPE (ReturnObject) == ACPI_DESC_TYPE_NAMED) 370 { | 230 ACPI_OPERAND_OBJECT **ReturnObjectPtr, 231 UINT32 ExpectedBtypes, 232 UINT32 PackageIndex) 233{ 234 ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; 235 ACPI_STATUS Status = AE_OK; 236 char TypeBuffer[48]; /* Room for 5 types */ 237 238 239 /* A Namespace node should not get here, but make sure */ 240 241 if (ReturnObject && 242 ACPI_GET_DESCRIPTOR_TYPE (ReturnObject) == ACPI_DESC_TYPE_NAMED) 243 { |
371 ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, | 244 ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, |
372 "Invalid return type - Found a Namespace node [%4.4s] type %s", 373 ReturnObject->Node.Name.Ascii, 374 AcpiUtGetTypeName (ReturnObject->Node.Type))); 375 return (AE_AML_OPERAND_TYPE); 376 } 377 378 /* 379 * Convert the object type (ACPI_TYPE_xxx) to a bitmapped object type. 380 * The bitmapped type allows multiple possible return types. 381 * 382 * Note, the cases below must handle all of the possible types returned 383 * from all of the predefined names (including elements of returned 384 * packages) 385 */ | 245 "Invalid return type - Found a Namespace node [%4.4s] type %s", 246 ReturnObject->Node.Name.Ascii, 247 AcpiUtGetTypeName (ReturnObject->Node.Type))); 248 return (AE_AML_OPERAND_TYPE); 249 } 250 251 /* 252 * Convert the object type (ACPI_TYPE_xxx) to a bitmapped object type. 253 * The bitmapped type allows multiple possible return types. 254 * 255 * Note, the cases below must handle all of the possible types returned 256 * from all of the predefined names (including elements of returned 257 * packages) 258 */ |
386 Data->ReturnBtype = AcpiNsGetBitmappedType (ReturnObject); 387 if (Data->ReturnBtype == ACPI_RTYPE_ANY) | 259 Info->ReturnBtype = AcpiNsGetBitmappedType (ReturnObject); 260 if (Info->ReturnBtype == ACPI_RTYPE_ANY) |
388 { 389 /* Not one of the supported objects, must be incorrect */ 390 goto TypeErrorExit; 391 } 392 393 /* For reference objects, check that the reference type is correct */ 394 | 261 { 262 /* Not one of the supported objects, must be incorrect */ 263 goto TypeErrorExit; 264 } 265 266 /* For reference objects, check that the reference type is correct */ 267 |
395 if ((Data->ReturnBtype & ExpectedBtypes) == ACPI_RTYPE_REFERENCE) | 268 if ((Info->ReturnBtype & ExpectedBtypes) == ACPI_RTYPE_REFERENCE) |
396 { | 269 { |
397 Status = AcpiNsCheckReference (Data, ReturnObject); | 270 Status = AcpiNsCheckReference (Info, ReturnObject); |
398 return (Status); 399 } 400 401 /* Attempt simple repair of the returned object if necessary */ 402 | 271 return (Status); 272 } 273 274 /* Attempt simple repair of the returned object if necessary */ 275 |
403 Status = AcpiNsSimpleRepair (Data, ExpectedBtypes, 404 PackageIndex, ReturnObjectPtr); 405 return (Status); | 276 Status = AcpiNsSimpleRepair (Info, ExpectedBtypes, 277 PackageIndex, ReturnObjectPtr); 278 if (ACPI_SUCCESS (Status)) 279 { 280 return (AE_OK); /* Successful repair */ 281 } |
406 407 408TypeErrorExit: 409 410 /* Create a string with all expected types for this predefined object */ 411 412 AcpiUtGetExpectedReturnTypes (TypeBuffer, ExpectedBtypes); 413 414 if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) 415 { | 282 283 284TypeErrorExit: 285 286 /* Create a string with all expected types for this predefined object */ 287 288 AcpiUtGetExpectedReturnTypes (TypeBuffer, ExpectedBtypes); 289 290 if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) 291 { |
416 ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, | 292 ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, |
417 "Return type mismatch - found %s, expected %s", 418 AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); 419 } 420 else 421 { | 293 "Return type mismatch - found %s, expected %s", 294 AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); 295 } 296 else 297 { |
422 ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, | 298 ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, |
423 "Return Package type mismatch at index %u - " 424 "found %s, expected %s", PackageIndex, 425 AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); 426 } 427 428 return (AE_AML_OPERAND_TYPE); 429} 430 431 432/******************************************************************************* 433 * 434 * FUNCTION: AcpiNsCheckReference 435 * | 299 "Return Package type mismatch at index %u - " 300 "found %s, expected %s", PackageIndex, 301 AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer)); 302 } 303 304 return (AE_AML_OPERAND_TYPE); 305} 306 307 308/******************************************************************************* 309 * 310 * FUNCTION: AcpiNsCheckReference 311 * |
436 * PARAMETERS: Data - Pointer to validation data structure | 312 * PARAMETERS: Info - Method execution information block |
437 * ReturnObject - Object returned from the evaluation of a 438 * method or object 439 * 440 * RETURN: Status 441 * 442 * DESCRIPTION: Check a returned reference object for the correct reference 443 * type. The only reference type that can be returned from a 444 * predefined method is a named reference. All others are invalid. 445 * 446 ******************************************************************************/ 447 448static ACPI_STATUS 449AcpiNsCheckReference ( | 313 * ReturnObject - Object returned from the evaluation of a 314 * method or object 315 * 316 * RETURN: Status 317 * 318 * DESCRIPTION: Check a returned reference object for the correct reference 319 * type. The only reference type that can be returned from a 320 * predefined method is a named reference. All others are invalid. 321 * 322 ******************************************************************************/ 323 324static ACPI_STATUS 325AcpiNsCheckReference ( |
450 ACPI_PREDEFINED_DATA *Data, | 326 ACPI_EVALUATE_INFO *Info, |
451 ACPI_OPERAND_OBJECT *ReturnObject) 452{ 453 454 /* 455 * Check the reference object for the correct reference type (opcode). 456 * The only type of reference that can be converted to an ACPI_OBJECT is 457 * a reference to a named object (reference class: NAME) 458 */ 459 if (ReturnObject->Reference.Class == ACPI_REFCLASS_NAME) 460 { 461 return (AE_OK); 462 } 463 | 327 ACPI_OPERAND_OBJECT *ReturnObject) 328{ 329 330 /* 331 * Check the reference object for the correct reference type (opcode). 332 * The only type of reference that can be converted to an ACPI_OBJECT is 333 * a reference to a named object (reference class: NAME) 334 */ 335 if (ReturnObject->Reference.Class == ACPI_REFCLASS_NAME) 336 { 337 return (AE_OK); 338 } 339 |
464 ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, | 340 ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags, |
465 "Return type mismatch - unexpected reference object type [%s] %2.2X", 466 AcpiUtGetReferenceName (ReturnObject), 467 ReturnObject->Reference.Class)); 468 469 return (AE_AML_OPERAND_TYPE); 470} 471 472 --- 59 unchanged lines hidden --- | 341 "Return type mismatch - unexpected reference object type [%s] %2.2X", 342 AcpiUtGetReferenceName (ReturnObject), 343 ReturnObject->Reference.Class)); 344 345 return (AE_AML_OPERAND_TYPE); 346} 347 348 --- 59 unchanged lines hidden --- |