1*11225SDana.Myers@Sun.COM /****************************************************************************** 2*11225SDana.Myers@Sun.COM * 3*11225SDana.Myers@Sun.COM * Module Name: nsrepair2 - Repair for objects returned by specific 4*11225SDana.Myers@Sun.COM * predefined methods 5*11225SDana.Myers@Sun.COM * 6*11225SDana.Myers@Sun.COM *****************************************************************************/ 7*11225SDana.Myers@Sun.COM 8*11225SDana.Myers@Sun.COM /****************************************************************************** 9*11225SDana.Myers@Sun.COM * 10*11225SDana.Myers@Sun.COM * 1. Copyright Notice 11*11225SDana.Myers@Sun.COM * 12*11225SDana.Myers@Sun.COM * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. 13*11225SDana.Myers@Sun.COM * All rights reserved. 14*11225SDana.Myers@Sun.COM * 15*11225SDana.Myers@Sun.COM * 2. License 16*11225SDana.Myers@Sun.COM * 17*11225SDana.Myers@Sun.COM * 2.1. This is your license from Intel Corp. under its intellectual property 18*11225SDana.Myers@Sun.COM * rights. You may have additional license terms from the party that provided 19*11225SDana.Myers@Sun.COM * you this software, covering your right to use that party's intellectual 20*11225SDana.Myers@Sun.COM * property rights. 21*11225SDana.Myers@Sun.COM * 22*11225SDana.Myers@Sun.COM * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 23*11225SDana.Myers@Sun.COM * copy of the source code appearing in this file ("Covered Code") an 24*11225SDana.Myers@Sun.COM * irrevocable, perpetual, worldwide license under Intel's copyrights in the 25*11225SDana.Myers@Sun.COM * base code distributed originally by Intel ("Original Intel Code") to copy, 26*11225SDana.Myers@Sun.COM * make derivatives, distribute, use and display any portion of the Covered 27*11225SDana.Myers@Sun.COM * Code in any form, with the right to sublicense such rights; and 28*11225SDana.Myers@Sun.COM * 29*11225SDana.Myers@Sun.COM * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 30*11225SDana.Myers@Sun.COM * license (with the right to sublicense), under only those claims of Intel 31*11225SDana.Myers@Sun.COM * patents that are infringed by the Original Intel Code, to make, use, sell, 32*11225SDana.Myers@Sun.COM * offer to sell, and import the Covered Code and derivative works thereof 33*11225SDana.Myers@Sun.COM * solely to the minimum extent necessary to exercise the above copyright 34*11225SDana.Myers@Sun.COM * license, and in no event shall the patent license extend to any additions 35*11225SDana.Myers@Sun.COM * to or modifications of the Original Intel Code. No other license or right 36*11225SDana.Myers@Sun.COM * is granted directly or by implication, estoppel or otherwise; 37*11225SDana.Myers@Sun.COM * 38*11225SDana.Myers@Sun.COM * The above copyright and patent license is granted only if the following 39*11225SDana.Myers@Sun.COM * conditions are met: 40*11225SDana.Myers@Sun.COM * 41*11225SDana.Myers@Sun.COM * 3. Conditions 42*11225SDana.Myers@Sun.COM * 43*11225SDana.Myers@Sun.COM * 3.1. Redistribution of Source with Rights to Further Distribute Source. 44*11225SDana.Myers@Sun.COM * Redistribution of source code of any substantial portion of the Covered 45*11225SDana.Myers@Sun.COM * Code or modification with rights to further distribute source must include 46*11225SDana.Myers@Sun.COM * the above Copyright Notice, the above License, this list of Conditions, 47*11225SDana.Myers@Sun.COM * and the following Disclaimer and Export Compliance provision. In addition, 48*11225SDana.Myers@Sun.COM * Licensee must cause all Covered Code to which Licensee contributes to 49*11225SDana.Myers@Sun.COM * contain a file documenting the changes Licensee made to create that Covered 50*11225SDana.Myers@Sun.COM * Code and the date of any change. Licensee must include in that file the 51*11225SDana.Myers@Sun.COM * documentation of any changes made by any predecessor Licensee. Licensee 52*11225SDana.Myers@Sun.COM * must include a prominent statement that the modification is derived, 53*11225SDana.Myers@Sun.COM * directly or indirectly, from Original Intel Code. 54*11225SDana.Myers@Sun.COM * 55*11225SDana.Myers@Sun.COM * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 56*11225SDana.Myers@Sun.COM * Redistribution of source code of any substantial portion of the Covered 57*11225SDana.Myers@Sun.COM * Code or modification without rights to further distribute source must 58*11225SDana.Myers@Sun.COM * include the following Disclaimer and Export Compliance provision in the 59*11225SDana.Myers@Sun.COM * documentation and/or other materials provided with distribution. In 60*11225SDana.Myers@Sun.COM * addition, Licensee may not authorize further sublicense of source of any 61*11225SDana.Myers@Sun.COM * portion of the Covered Code, and must include terms to the effect that the 62*11225SDana.Myers@Sun.COM * license from Licensee to its licensee is limited to the intellectual 63*11225SDana.Myers@Sun.COM * property embodied in the software Licensee provides to its licensee, and 64*11225SDana.Myers@Sun.COM * not to intellectual property embodied in modifications its licensee may 65*11225SDana.Myers@Sun.COM * make. 66*11225SDana.Myers@Sun.COM * 67*11225SDana.Myers@Sun.COM * 3.3. Redistribution of Executable. Redistribution in executable form of any 68*11225SDana.Myers@Sun.COM * substantial portion of the Covered Code or modification must reproduce the 69*11225SDana.Myers@Sun.COM * above Copyright Notice, and the following Disclaimer and Export Compliance 70*11225SDana.Myers@Sun.COM * provision in the documentation and/or other materials provided with the 71*11225SDana.Myers@Sun.COM * distribution. 72*11225SDana.Myers@Sun.COM * 73*11225SDana.Myers@Sun.COM * 3.4. Intel retains all right, title, and interest in and to the Original 74*11225SDana.Myers@Sun.COM * Intel Code. 75*11225SDana.Myers@Sun.COM * 76*11225SDana.Myers@Sun.COM * 3.5. Neither the name Intel nor any other trademark owned or controlled by 77*11225SDana.Myers@Sun.COM * Intel shall be used in advertising or otherwise to promote the sale, use or 78*11225SDana.Myers@Sun.COM * other dealings in products derived from or relating to the Covered Code 79*11225SDana.Myers@Sun.COM * without prior written authorization from Intel. 80*11225SDana.Myers@Sun.COM * 81*11225SDana.Myers@Sun.COM * 4. Disclaimer and Export Compliance 82*11225SDana.Myers@Sun.COM * 83*11225SDana.Myers@Sun.COM * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 84*11225SDana.Myers@Sun.COM * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 85*11225SDana.Myers@Sun.COM * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 86*11225SDana.Myers@Sun.COM * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 87*11225SDana.Myers@Sun.COM * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 88*11225SDana.Myers@Sun.COM * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 89*11225SDana.Myers@Sun.COM * PARTICULAR PURPOSE. 90*11225SDana.Myers@Sun.COM * 91*11225SDana.Myers@Sun.COM * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 92*11225SDana.Myers@Sun.COM * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 93*11225SDana.Myers@Sun.COM * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 94*11225SDana.Myers@Sun.COM * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 95*11225SDana.Myers@Sun.COM * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 96*11225SDana.Myers@Sun.COM * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 97*11225SDana.Myers@Sun.COM * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 98*11225SDana.Myers@Sun.COM * LIMITED REMEDY. 99*11225SDana.Myers@Sun.COM * 100*11225SDana.Myers@Sun.COM * 4.3. Licensee shall not export, either directly or indirectly, any of this 101*11225SDana.Myers@Sun.COM * software or system incorporating such software without first obtaining any 102*11225SDana.Myers@Sun.COM * required license or other approval from the U. S. Department of Commerce or 103*11225SDana.Myers@Sun.COM * any other agency or department of the United States Government. In the 104*11225SDana.Myers@Sun.COM * event Licensee exports any such software from the United States or 105*11225SDana.Myers@Sun.COM * re-exports any such software from a foreign destination, Licensee shall 106*11225SDana.Myers@Sun.COM * ensure that the distribution and export/re-export of the software is in 107*11225SDana.Myers@Sun.COM * compliance with all laws, regulations, orders, or other restrictions of the 108*11225SDana.Myers@Sun.COM * U.S. Export Administration Regulations. Licensee agrees that neither it nor 109*11225SDana.Myers@Sun.COM * any of its subsidiaries will export/re-export any technical data, process, 110*11225SDana.Myers@Sun.COM * software, or service, directly or indirectly, to any country for which the 111*11225SDana.Myers@Sun.COM * United States government or any agency thereof requires an export license, 112*11225SDana.Myers@Sun.COM * other governmental approval, or letter of assurance, without first obtaining 113*11225SDana.Myers@Sun.COM * such license, approval or letter. 114*11225SDana.Myers@Sun.COM * 115*11225SDana.Myers@Sun.COM *****************************************************************************/ 116*11225SDana.Myers@Sun.COM 117*11225SDana.Myers@Sun.COM #define __NSREPAIR2_C__ 118*11225SDana.Myers@Sun.COM 119*11225SDana.Myers@Sun.COM #include "acpi.h" 120*11225SDana.Myers@Sun.COM #include "accommon.h" 121*11225SDana.Myers@Sun.COM #include "acnamesp.h" 122*11225SDana.Myers@Sun.COM 123*11225SDana.Myers@Sun.COM #define _COMPONENT ACPI_NAMESPACE 124*11225SDana.Myers@Sun.COM ACPI_MODULE_NAME ("nsrepair2") 125*11225SDana.Myers@Sun.COM 126*11225SDana.Myers@Sun.COM 127*11225SDana.Myers@Sun.COM /* 128*11225SDana.Myers@Sun.COM * Information structure and handler for ACPI predefined names that can 129*11225SDana.Myers@Sun.COM * be repaired on a per-name basis. 130*11225SDana.Myers@Sun.COM */ 131*11225SDana.Myers@Sun.COM typedef 132*11225SDana.Myers@Sun.COM ACPI_STATUS (*ACPI_REPAIR_FUNCTION) ( 133*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 134*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **ReturnObjectPtr); 135*11225SDana.Myers@Sun.COM 136*11225SDana.Myers@Sun.COM typedef struct acpi_repair_info 137*11225SDana.Myers@Sun.COM { 138*11225SDana.Myers@Sun.COM char Name[ACPI_NAME_SIZE]; 139*11225SDana.Myers@Sun.COM ACPI_REPAIR_FUNCTION RepairFunction; 140*11225SDana.Myers@Sun.COM 141*11225SDana.Myers@Sun.COM } ACPI_REPAIR_INFO; 142*11225SDana.Myers@Sun.COM 143*11225SDana.Myers@Sun.COM 144*11225SDana.Myers@Sun.COM /* Local prototypes */ 145*11225SDana.Myers@Sun.COM 146*11225SDana.Myers@Sun.COM static const ACPI_REPAIR_INFO * 147*11225SDana.Myers@Sun.COM AcpiNsMatchRepairableName ( 148*11225SDana.Myers@Sun.COM ACPI_NAMESPACE_NODE *Node); 149*11225SDana.Myers@Sun.COM 150*11225SDana.Myers@Sun.COM static ACPI_STATUS 151*11225SDana.Myers@Sun.COM AcpiNsRepair_ALR ( 152*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 153*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **ReturnObjectPtr); 154*11225SDana.Myers@Sun.COM 155*11225SDana.Myers@Sun.COM static ACPI_STATUS 156*11225SDana.Myers@Sun.COM AcpiNsRepair_PSS ( 157*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 158*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **ReturnObjectPtr); 159*11225SDana.Myers@Sun.COM 160*11225SDana.Myers@Sun.COM static ACPI_STATUS 161*11225SDana.Myers@Sun.COM AcpiNsRepair_TSS ( 162*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 163*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **ReturnObjectPtr); 164*11225SDana.Myers@Sun.COM 165*11225SDana.Myers@Sun.COM static ACPI_STATUS 166*11225SDana.Myers@Sun.COM AcpiNsCheckSortedList ( 167*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 168*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ReturnObject, 169*11225SDana.Myers@Sun.COM UINT32 ExpectedCount, 170*11225SDana.Myers@Sun.COM UINT32 SortIndex, 171*11225SDana.Myers@Sun.COM UINT8 SortDirection, 172*11225SDana.Myers@Sun.COM char *SortKeyName); 173*11225SDana.Myers@Sun.COM 174*11225SDana.Myers@Sun.COM static ACPI_STATUS 175*11225SDana.Myers@Sun.COM AcpiNsRemoveNullElements ( 176*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *Package); 177*11225SDana.Myers@Sun.COM 178*11225SDana.Myers@Sun.COM static ACPI_STATUS 179*11225SDana.Myers@Sun.COM AcpiNsSortList ( 180*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **Elements, 181*11225SDana.Myers@Sun.COM UINT32 Count, 182*11225SDana.Myers@Sun.COM UINT32 Index, 183*11225SDana.Myers@Sun.COM UINT8 SortDirection); 184*11225SDana.Myers@Sun.COM 185*11225SDana.Myers@Sun.COM /* Values for SortDirection above */ 186*11225SDana.Myers@Sun.COM 187*11225SDana.Myers@Sun.COM #define ACPI_SORT_ASCENDING 0 188*11225SDana.Myers@Sun.COM #define ACPI_SORT_DESCENDING 1 189*11225SDana.Myers@Sun.COM 190*11225SDana.Myers@Sun.COM 191*11225SDana.Myers@Sun.COM /* 192*11225SDana.Myers@Sun.COM * This table contains the names of the predefined methods for which we can 193*11225SDana.Myers@Sun.COM * perform more complex repairs. 194*11225SDana.Myers@Sun.COM * 195*11225SDana.Myers@Sun.COM * _ALR: Sort the list ascending by AmbientIlluminance if necessary 196*11225SDana.Myers@Sun.COM * _PSS: Sort the list descending by Power if necessary 197*11225SDana.Myers@Sun.COM * _TSS: Sort the list descending by Power if necessary 198*11225SDana.Myers@Sun.COM */ 199*11225SDana.Myers@Sun.COM static const ACPI_REPAIR_INFO AcpiNsRepairableNames[] = 200*11225SDana.Myers@Sun.COM { 201*11225SDana.Myers@Sun.COM {"_ALR", AcpiNsRepair_ALR}, 202*11225SDana.Myers@Sun.COM {"_PSS", AcpiNsRepair_PSS}, 203*11225SDana.Myers@Sun.COM {"_TSS", AcpiNsRepair_TSS}, 204*11225SDana.Myers@Sun.COM {{0,0,0,0}, NULL} /* Table terminator */ 205*11225SDana.Myers@Sun.COM }; 206*11225SDana.Myers@Sun.COM 207*11225SDana.Myers@Sun.COM 208*11225SDana.Myers@Sun.COM /****************************************************************************** 209*11225SDana.Myers@Sun.COM * 210*11225SDana.Myers@Sun.COM * FUNCTION: AcpiNsComplexRepairs 211*11225SDana.Myers@Sun.COM * 212*11225SDana.Myers@Sun.COM * PARAMETERS: Data - Pointer to validation data structure 213*11225SDana.Myers@Sun.COM * Node - Namespace node for the method/object 214*11225SDana.Myers@Sun.COM * ValidateStatus - Original status of earlier validation 215*11225SDana.Myers@Sun.COM * ReturnObjectPtr - Pointer to the object returned from the 216*11225SDana.Myers@Sun.COM * evaluation of a method or object 217*11225SDana.Myers@Sun.COM * 218*11225SDana.Myers@Sun.COM * RETURN: Status. AE_OK if repair was successful. If name is not 219*11225SDana.Myers@Sun.COM * matched, ValidateStatus is returned. 220*11225SDana.Myers@Sun.COM * 221*11225SDana.Myers@Sun.COM * DESCRIPTION: Attempt to repair/convert a return object of a type that was 222*11225SDana.Myers@Sun.COM * not expected. 223*11225SDana.Myers@Sun.COM * 224*11225SDana.Myers@Sun.COM *****************************************************************************/ 225*11225SDana.Myers@Sun.COM 226*11225SDana.Myers@Sun.COM ACPI_STATUS 227*11225SDana.Myers@Sun.COM AcpiNsComplexRepairs ( 228*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 229*11225SDana.Myers@Sun.COM ACPI_NAMESPACE_NODE *Node, 230*11225SDana.Myers@Sun.COM ACPI_STATUS ValidateStatus, 231*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **ReturnObjectPtr) 232*11225SDana.Myers@Sun.COM { 233*11225SDana.Myers@Sun.COM const ACPI_REPAIR_INFO *Predefined; 234*11225SDana.Myers@Sun.COM ACPI_STATUS Status; 235*11225SDana.Myers@Sun.COM 236*11225SDana.Myers@Sun.COM 237*11225SDana.Myers@Sun.COM /* Check if this name is in the list of repairable names */ 238*11225SDana.Myers@Sun.COM 239*11225SDana.Myers@Sun.COM Predefined = AcpiNsMatchRepairableName (Node); 240*11225SDana.Myers@Sun.COM if (!Predefined) 241*11225SDana.Myers@Sun.COM { 242*11225SDana.Myers@Sun.COM return (ValidateStatus); 243*11225SDana.Myers@Sun.COM } 244*11225SDana.Myers@Sun.COM 245*11225SDana.Myers@Sun.COM Status = Predefined->RepairFunction (Data, ReturnObjectPtr); 246*11225SDana.Myers@Sun.COM return (Status); 247*11225SDana.Myers@Sun.COM } 248*11225SDana.Myers@Sun.COM 249*11225SDana.Myers@Sun.COM 250*11225SDana.Myers@Sun.COM /****************************************************************************** 251*11225SDana.Myers@Sun.COM * 252*11225SDana.Myers@Sun.COM * FUNCTION: AcpiNsMatchRepairableName 253*11225SDana.Myers@Sun.COM * 254*11225SDana.Myers@Sun.COM * PARAMETERS: Node - Namespace node for the method/object 255*11225SDana.Myers@Sun.COM * 256*11225SDana.Myers@Sun.COM * RETURN: Pointer to entry in repair table. NULL indicates not found. 257*11225SDana.Myers@Sun.COM * 258*11225SDana.Myers@Sun.COM * DESCRIPTION: Check an object name against the repairable object list. 259*11225SDana.Myers@Sun.COM * 260*11225SDana.Myers@Sun.COM *****************************************************************************/ 261*11225SDana.Myers@Sun.COM 262*11225SDana.Myers@Sun.COM static const ACPI_REPAIR_INFO * 263*11225SDana.Myers@Sun.COM AcpiNsMatchRepairableName ( 264*11225SDana.Myers@Sun.COM ACPI_NAMESPACE_NODE *Node) 265*11225SDana.Myers@Sun.COM { 266*11225SDana.Myers@Sun.COM const ACPI_REPAIR_INFO *ThisName; 267*11225SDana.Myers@Sun.COM 268*11225SDana.Myers@Sun.COM 269*11225SDana.Myers@Sun.COM /* Search info table for a repairable predefined method/object name */ 270*11225SDana.Myers@Sun.COM 271*11225SDana.Myers@Sun.COM ThisName = AcpiNsRepairableNames; 272*11225SDana.Myers@Sun.COM while (ThisName->RepairFunction) 273*11225SDana.Myers@Sun.COM { 274*11225SDana.Myers@Sun.COM if (ACPI_COMPARE_NAME (Node->Name.Ascii, ThisName->Name)) 275*11225SDana.Myers@Sun.COM { 276*11225SDana.Myers@Sun.COM return (ThisName); 277*11225SDana.Myers@Sun.COM } 278*11225SDana.Myers@Sun.COM ThisName++; 279*11225SDana.Myers@Sun.COM } 280*11225SDana.Myers@Sun.COM 281*11225SDana.Myers@Sun.COM return (NULL); /* Not found */ 282*11225SDana.Myers@Sun.COM } 283*11225SDana.Myers@Sun.COM 284*11225SDana.Myers@Sun.COM 285*11225SDana.Myers@Sun.COM /****************************************************************************** 286*11225SDana.Myers@Sun.COM * 287*11225SDana.Myers@Sun.COM * FUNCTION: AcpiNsRepair_ALR 288*11225SDana.Myers@Sun.COM * 289*11225SDana.Myers@Sun.COM * PARAMETERS: Data - Pointer to validation data structure 290*11225SDana.Myers@Sun.COM * ReturnObjectPtr - Pointer to the object returned from the 291*11225SDana.Myers@Sun.COM * evaluation of a method or object 292*11225SDana.Myers@Sun.COM * 293*11225SDana.Myers@Sun.COM * RETURN: Status. AE_OK if object is OK or was repaired successfully 294*11225SDana.Myers@Sun.COM * 295*11225SDana.Myers@Sun.COM * DESCRIPTION: Repair for the _ALR object. If necessary, sort the object list 296*11225SDana.Myers@Sun.COM * ascending by the ambient illuminance values. 297*11225SDana.Myers@Sun.COM * 298*11225SDana.Myers@Sun.COM *****************************************************************************/ 299*11225SDana.Myers@Sun.COM 300*11225SDana.Myers@Sun.COM static ACPI_STATUS 301*11225SDana.Myers@Sun.COM AcpiNsRepair_ALR ( 302*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 303*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **ReturnObjectPtr) 304*11225SDana.Myers@Sun.COM { 305*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; 306*11225SDana.Myers@Sun.COM ACPI_STATUS Status; 307*11225SDana.Myers@Sun.COM 308*11225SDana.Myers@Sun.COM 309*11225SDana.Myers@Sun.COM Status = AcpiNsCheckSortedList (Data, ReturnObject, 2, 1, 310*11225SDana.Myers@Sun.COM ACPI_SORT_ASCENDING, "AmbientIlluminance"); 311*11225SDana.Myers@Sun.COM 312*11225SDana.Myers@Sun.COM return (Status); 313*11225SDana.Myers@Sun.COM } 314*11225SDana.Myers@Sun.COM 315*11225SDana.Myers@Sun.COM 316*11225SDana.Myers@Sun.COM /****************************************************************************** 317*11225SDana.Myers@Sun.COM * 318*11225SDana.Myers@Sun.COM * FUNCTION: AcpiNsRepair_TSS 319*11225SDana.Myers@Sun.COM * 320*11225SDana.Myers@Sun.COM * PARAMETERS: Data - Pointer to validation data structure 321*11225SDana.Myers@Sun.COM * ReturnObjectPtr - Pointer to the object returned from the 322*11225SDana.Myers@Sun.COM * evaluation of a method or object 323*11225SDana.Myers@Sun.COM * 324*11225SDana.Myers@Sun.COM * RETURN: Status. AE_OK if object is OK or was repaired successfully 325*11225SDana.Myers@Sun.COM * 326*11225SDana.Myers@Sun.COM * DESCRIPTION: Repair for the _TSS object. If necessary, sort the object list 327*11225SDana.Myers@Sun.COM * descending by the power dissipation values. 328*11225SDana.Myers@Sun.COM * 329*11225SDana.Myers@Sun.COM *****************************************************************************/ 330*11225SDana.Myers@Sun.COM 331*11225SDana.Myers@Sun.COM static ACPI_STATUS 332*11225SDana.Myers@Sun.COM AcpiNsRepair_TSS ( 333*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 334*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **ReturnObjectPtr) 335*11225SDana.Myers@Sun.COM { 336*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; 337*11225SDana.Myers@Sun.COM ACPI_STATUS Status; 338*11225SDana.Myers@Sun.COM 339*11225SDana.Myers@Sun.COM 340*11225SDana.Myers@Sun.COM Status = AcpiNsCheckSortedList (Data, ReturnObject, 5, 1, 341*11225SDana.Myers@Sun.COM ACPI_SORT_DESCENDING, "PowerDissipation"); 342*11225SDana.Myers@Sun.COM 343*11225SDana.Myers@Sun.COM return (Status); 344*11225SDana.Myers@Sun.COM } 345*11225SDana.Myers@Sun.COM 346*11225SDana.Myers@Sun.COM 347*11225SDana.Myers@Sun.COM /****************************************************************************** 348*11225SDana.Myers@Sun.COM * 349*11225SDana.Myers@Sun.COM * FUNCTION: AcpiNsRepair_PSS 350*11225SDana.Myers@Sun.COM * 351*11225SDana.Myers@Sun.COM * PARAMETERS: Data - Pointer to validation data structure 352*11225SDana.Myers@Sun.COM * ReturnObjectPtr - Pointer to the object returned from the 353*11225SDana.Myers@Sun.COM * evaluation of a method or object 354*11225SDana.Myers@Sun.COM * 355*11225SDana.Myers@Sun.COM * RETURN: Status. AE_OK if object is OK or was repaired successfully 356*11225SDana.Myers@Sun.COM * 357*11225SDana.Myers@Sun.COM * DESCRIPTION: Repair for the _PSS object. If necessary, sort the object list 358*11225SDana.Myers@Sun.COM * by the CPU frequencies. Check that the power dissipation values 359*11225SDana.Myers@Sun.COM * are all proportional to CPU frequency (i.e., sorting by 360*11225SDana.Myers@Sun.COM * frequency should be the same as sorting by power.) 361*11225SDana.Myers@Sun.COM * 362*11225SDana.Myers@Sun.COM *****************************************************************************/ 363*11225SDana.Myers@Sun.COM 364*11225SDana.Myers@Sun.COM static ACPI_STATUS 365*11225SDana.Myers@Sun.COM AcpiNsRepair_PSS ( 366*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 367*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **ReturnObjectPtr) 368*11225SDana.Myers@Sun.COM { 369*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; 370*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **OuterElements; 371*11225SDana.Myers@Sun.COM UINT32 OuterElementCount; 372*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **Elements; 373*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ObjDesc; 374*11225SDana.Myers@Sun.COM UINT32 PreviousValue; 375*11225SDana.Myers@Sun.COM ACPI_STATUS Status; 376*11225SDana.Myers@Sun.COM UINT32 i; 377*11225SDana.Myers@Sun.COM 378*11225SDana.Myers@Sun.COM 379*11225SDana.Myers@Sun.COM /* 380*11225SDana.Myers@Sun.COM * Entries (sub-packages) in the _PSS Package must be sorted by power 381*11225SDana.Myers@Sun.COM * dissipation, in descending order. If it appears that the list is 382*11225SDana.Myers@Sun.COM * incorrectly sorted, sort it. We sort by CpuFrequency, since this 383*11225SDana.Myers@Sun.COM * should be proportional to the power. 384*11225SDana.Myers@Sun.COM */ 385*11225SDana.Myers@Sun.COM Status =AcpiNsCheckSortedList (Data, ReturnObject, 6, 0, 386*11225SDana.Myers@Sun.COM ACPI_SORT_DESCENDING, "CpuFrequency"); 387*11225SDana.Myers@Sun.COM if (ACPI_FAILURE (Status)) 388*11225SDana.Myers@Sun.COM { 389*11225SDana.Myers@Sun.COM return (Status); 390*11225SDana.Myers@Sun.COM } 391*11225SDana.Myers@Sun.COM 392*11225SDana.Myers@Sun.COM /* 393*11225SDana.Myers@Sun.COM * We now know the list is correctly sorted by CPU frequency. Check if 394*11225SDana.Myers@Sun.COM * the power dissipation values are proportional. 395*11225SDana.Myers@Sun.COM */ 396*11225SDana.Myers@Sun.COM PreviousValue = ACPI_UINT32_MAX; 397*11225SDana.Myers@Sun.COM OuterElements = ReturnObject->Package.Elements; 398*11225SDana.Myers@Sun.COM OuterElementCount = ReturnObject->Package.Count; 399*11225SDana.Myers@Sun.COM 400*11225SDana.Myers@Sun.COM for (i = 0; i < OuterElementCount; i++) 401*11225SDana.Myers@Sun.COM { 402*11225SDana.Myers@Sun.COM Elements = (*OuterElements)->Package.Elements; 403*11225SDana.Myers@Sun.COM ObjDesc = Elements[1]; /* Index1 = PowerDissipation */ 404*11225SDana.Myers@Sun.COM 405*11225SDana.Myers@Sun.COM if ((UINT32) ObjDesc->Integer.Value > PreviousValue) 406*11225SDana.Myers@Sun.COM { 407*11225SDana.Myers@Sun.COM ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, 408*11225SDana.Myers@Sun.COM "SubPackage[%u,%u] - suspicious power dissipation values", 409*11225SDana.Myers@Sun.COM i-1, i)); 410*11225SDana.Myers@Sun.COM } 411*11225SDana.Myers@Sun.COM 412*11225SDana.Myers@Sun.COM PreviousValue = (UINT32) ObjDesc->Integer.Value; 413*11225SDana.Myers@Sun.COM OuterElements++; 414*11225SDana.Myers@Sun.COM } 415*11225SDana.Myers@Sun.COM 416*11225SDana.Myers@Sun.COM return (AE_OK); 417*11225SDana.Myers@Sun.COM } 418*11225SDana.Myers@Sun.COM 419*11225SDana.Myers@Sun.COM 420*11225SDana.Myers@Sun.COM /****************************************************************************** 421*11225SDana.Myers@Sun.COM * 422*11225SDana.Myers@Sun.COM * FUNCTION: AcpiNsCheckSortedList 423*11225SDana.Myers@Sun.COM * 424*11225SDana.Myers@Sun.COM * PARAMETERS: Data - Pointer to validation data structure 425*11225SDana.Myers@Sun.COM * ReturnObject - Pointer to the top-level returned object 426*11225SDana.Myers@Sun.COM * ExpectedCount - Minimum length of each sub-package 427*11225SDana.Myers@Sun.COM * SortIndex - Sub-package entry to sort on 428*11225SDana.Myers@Sun.COM * SortDirection - Ascending or descending 429*11225SDana.Myers@Sun.COM * SortKeyName - Name of the SortIndex field 430*11225SDana.Myers@Sun.COM * 431*11225SDana.Myers@Sun.COM * RETURN: Status. AE_OK if the list is valid and is sorted correctly or 432*11225SDana.Myers@Sun.COM * has been repaired by sorting the list. 433*11225SDana.Myers@Sun.COM * 434*11225SDana.Myers@Sun.COM * DESCRIPTION: Check if the package list is valid and sorted correctly by the 435*11225SDana.Myers@Sun.COM * SortIndex. If not, then sort the list. 436*11225SDana.Myers@Sun.COM * 437*11225SDana.Myers@Sun.COM *****************************************************************************/ 438*11225SDana.Myers@Sun.COM 439*11225SDana.Myers@Sun.COM static ACPI_STATUS 440*11225SDana.Myers@Sun.COM AcpiNsCheckSortedList ( 441*11225SDana.Myers@Sun.COM ACPI_PREDEFINED_DATA *Data, 442*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ReturnObject, 443*11225SDana.Myers@Sun.COM UINT32 ExpectedCount, 444*11225SDana.Myers@Sun.COM UINT32 SortIndex, 445*11225SDana.Myers@Sun.COM UINT8 SortDirection, 446*11225SDana.Myers@Sun.COM char *SortKeyName) 447*11225SDana.Myers@Sun.COM { 448*11225SDana.Myers@Sun.COM UINT32 OuterElementCount; 449*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **OuterElements; 450*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **Elements; 451*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ObjDesc; 452*11225SDana.Myers@Sun.COM UINT32 i; 453*11225SDana.Myers@Sun.COM UINT32 PreviousValue; 454*11225SDana.Myers@Sun.COM ACPI_STATUS Status; 455*11225SDana.Myers@Sun.COM 456*11225SDana.Myers@Sun.COM 457*11225SDana.Myers@Sun.COM /* The top-level object must be a package */ 458*11225SDana.Myers@Sun.COM 459*11225SDana.Myers@Sun.COM if (ReturnObject->Common.Type != ACPI_TYPE_PACKAGE) 460*11225SDana.Myers@Sun.COM { 461*11225SDana.Myers@Sun.COM return (AE_AML_OPERAND_TYPE); 462*11225SDana.Myers@Sun.COM } 463*11225SDana.Myers@Sun.COM 464*11225SDana.Myers@Sun.COM /* 465*11225SDana.Myers@Sun.COM * Detect any NULL package elements and remove them from the 466*11225SDana.Myers@Sun.COM * package. 467*11225SDana.Myers@Sun.COM * 468*11225SDana.Myers@Sun.COM * TBD: We may want to do this for all predefined names that 469*11225SDana.Myers@Sun.COM * return a variable-length package of packages. 470*11225SDana.Myers@Sun.COM */ 471*11225SDana.Myers@Sun.COM Status = AcpiNsRemoveNullElements (ReturnObject); 472*11225SDana.Myers@Sun.COM if (Status == AE_NULL_ENTRY) 473*11225SDana.Myers@Sun.COM { 474*11225SDana.Myers@Sun.COM ACPI_INFO_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, 475*11225SDana.Myers@Sun.COM "NULL elements removed from package")); 476*11225SDana.Myers@Sun.COM 477*11225SDana.Myers@Sun.COM /* Exit if package is now zero length */ 478*11225SDana.Myers@Sun.COM 479*11225SDana.Myers@Sun.COM if (!ReturnObject->Package.Count) 480*11225SDana.Myers@Sun.COM { 481*11225SDana.Myers@Sun.COM return (AE_NULL_ENTRY); 482*11225SDana.Myers@Sun.COM } 483*11225SDana.Myers@Sun.COM } 484*11225SDana.Myers@Sun.COM 485*11225SDana.Myers@Sun.COM OuterElements = ReturnObject->Package.Elements; 486*11225SDana.Myers@Sun.COM OuterElementCount = ReturnObject->Package.Count; 487*11225SDana.Myers@Sun.COM if (!OuterElementCount) 488*11225SDana.Myers@Sun.COM { 489*11225SDana.Myers@Sun.COM return (AE_AML_PACKAGE_LIMIT); 490*11225SDana.Myers@Sun.COM } 491*11225SDana.Myers@Sun.COM 492*11225SDana.Myers@Sun.COM PreviousValue = 0; 493*11225SDana.Myers@Sun.COM if (SortDirection == ACPI_SORT_DESCENDING) 494*11225SDana.Myers@Sun.COM { 495*11225SDana.Myers@Sun.COM PreviousValue = ACPI_UINT32_MAX; 496*11225SDana.Myers@Sun.COM } 497*11225SDana.Myers@Sun.COM 498*11225SDana.Myers@Sun.COM /* Examine each subpackage */ 499*11225SDana.Myers@Sun.COM 500*11225SDana.Myers@Sun.COM for (i = 0; i < OuterElementCount; i++) 501*11225SDana.Myers@Sun.COM { 502*11225SDana.Myers@Sun.COM /* Each element of the top-level package must also be a package */ 503*11225SDana.Myers@Sun.COM 504*11225SDana.Myers@Sun.COM if ((*OuterElements)->Common.Type != ACPI_TYPE_PACKAGE) 505*11225SDana.Myers@Sun.COM { 506*11225SDana.Myers@Sun.COM return (AE_AML_OPERAND_TYPE); 507*11225SDana.Myers@Sun.COM } 508*11225SDana.Myers@Sun.COM 509*11225SDana.Myers@Sun.COM /* Each sub-package must have the minimum length */ 510*11225SDana.Myers@Sun.COM 511*11225SDana.Myers@Sun.COM if ((*OuterElements)->Package.Count < ExpectedCount) 512*11225SDana.Myers@Sun.COM { 513*11225SDana.Myers@Sun.COM return (AE_AML_PACKAGE_LIMIT); 514*11225SDana.Myers@Sun.COM } 515*11225SDana.Myers@Sun.COM 516*11225SDana.Myers@Sun.COM Elements = (*OuterElements)->Package.Elements; 517*11225SDana.Myers@Sun.COM ObjDesc = Elements[SortIndex]; 518*11225SDana.Myers@Sun.COM 519*11225SDana.Myers@Sun.COM if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER) 520*11225SDana.Myers@Sun.COM { 521*11225SDana.Myers@Sun.COM return (AE_AML_OPERAND_TYPE); 522*11225SDana.Myers@Sun.COM } 523*11225SDana.Myers@Sun.COM 524*11225SDana.Myers@Sun.COM /* 525*11225SDana.Myers@Sun.COM * The list must be sorted in the specified order. If we detect a 526*11225SDana.Myers@Sun.COM * discrepancy, issue a warning and sort the entire list 527*11225SDana.Myers@Sun.COM */ 528*11225SDana.Myers@Sun.COM if (((SortDirection == ACPI_SORT_ASCENDING) && 529*11225SDana.Myers@Sun.COM (ObjDesc->Integer.Value < PreviousValue)) || 530*11225SDana.Myers@Sun.COM ((SortDirection == ACPI_SORT_DESCENDING) && 531*11225SDana.Myers@Sun.COM (ObjDesc->Integer.Value > PreviousValue))) 532*11225SDana.Myers@Sun.COM { 533*11225SDana.Myers@Sun.COM Status = AcpiNsSortList (ReturnObject->Package.Elements, 534*11225SDana.Myers@Sun.COM OuterElementCount, SortIndex, SortDirection); 535*11225SDana.Myers@Sun.COM if (ACPI_FAILURE (Status)) 536*11225SDana.Myers@Sun.COM { 537*11225SDana.Myers@Sun.COM return (Status); 538*11225SDana.Myers@Sun.COM } 539*11225SDana.Myers@Sun.COM 540*11225SDana.Myers@Sun.COM Data->Flags |= ACPI_OBJECT_REPAIRED; 541*11225SDana.Myers@Sun.COM 542*11225SDana.Myers@Sun.COM ACPI_INFO_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, 543*11225SDana.Myers@Sun.COM "Repaired unsorted list - now sorted by %s", SortKeyName)); 544*11225SDana.Myers@Sun.COM return (AE_OK); 545*11225SDana.Myers@Sun.COM } 546*11225SDana.Myers@Sun.COM 547*11225SDana.Myers@Sun.COM PreviousValue = (UINT32) ObjDesc->Integer.Value; 548*11225SDana.Myers@Sun.COM OuterElements++; 549*11225SDana.Myers@Sun.COM } 550*11225SDana.Myers@Sun.COM 551*11225SDana.Myers@Sun.COM return (AE_OK); 552*11225SDana.Myers@Sun.COM } 553*11225SDana.Myers@Sun.COM 554*11225SDana.Myers@Sun.COM 555*11225SDana.Myers@Sun.COM /****************************************************************************** 556*11225SDana.Myers@Sun.COM * 557*11225SDana.Myers@Sun.COM * FUNCTION: AcpiNsRemoveNullElements 558*11225SDana.Myers@Sun.COM * 559*11225SDana.Myers@Sun.COM * PARAMETERS: ObjDesc - A Package object 560*11225SDana.Myers@Sun.COM * 561*11225SDana.Myers@Sun.COM * RETURN: Status. AE_NULL_ENTRY means that one or more elements were 562*11225SDana.Myers@Sun.COM * removed. 563*11225SDana.Myers@Sun.COM * 564*11225SDana.Myers@Sun.COM * DESCRIPTION: Remove all NULL package elements and update the package count. 565*11225SDana.Myers@Sun.COM * 566*11225SDana.Myers@Sun.COM *****************************************************************************/ 567*11225SDana.Myers@Sun.COM 568*11225SDana.Myers@Sun.COM static ACPI_STATUS 569*11225SDana.Myers@Sun.COM AcpiNsRemoveNullElements ( 570*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ObjDesc) 571*11225SDana.Myers@Sun.COM { 572*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **Source; 573*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **Dest; 574*11225SDana.Myers@Sun.COM ACPI_STATUS Status = AE_OK; 575*11225SDana.Myers@Sun.COM UINT32 Count; 576*11225SDana.Myers@Sun.COM UINT32 NewCount; 577*11225SDana.Myers@Sun.COM UINT32 i; 578*11225SDana.Myers@Sun.COM 579*11225SDana.Myers@Sun.COM 580*11225SDana.Myers@Sun.COM Count = ObjDesc->Package.Count; 581*11225SDana.Myers@Sun.COM NewCount = Count; 582*11225SDana.Myers@Sun.COM 583*11225SDana.Myers@Sun.COM Source = ObjDesc->Package.Elements; 584*11225SDana.Myers@Sun.COM Dest = Source; 585*11225SDana.Myers@Sun.COM 586*11225SDana.Myers@Sun.COM /* Examine all elements of the package object */ 587*11225SDana.Myers@Sun.COM 588*11225SDana.Myers@Sun.COM for (i = 0; i < Count; i++) 589*11225SDana.Myers@Sun.COM { 590*11225SDana.Myers@Sun.COM if (!*Source) 591*11225SDana.Myers@Sun.COM { 592*11225SDana.Myers@Sun.COM Status = AE_NULL_ENTRY; 593*11225SDana.Myers@Sun.COM NewCount--; 594*11225SDana.Myers@Sun.COM } 595*11225SDana.Myers@Sun.COM else 596*11225SDana.Myers@Sun.COM { 597*11225SDana.Myers@Sun.COM *Dest = *Source; 598*11225SDana.Myers@Sun.COM Dest++; 599*11225SDana.Myers@Sun.COM } 600*11225SDana.Myers@Sun.COM Source++; 601*11225SDana.Myers@Sun.COM } 602*11225SDana.Myers@Sun.COM 603*11225SDana.Myers@Sun.COM if (Status == AE_NULL_ENTRY) 604*11225SDana.Myers@Sun.COM { 605*11225SDana.Myers@Sun.COM /* NULL terminate list and update the package count */ 606*11225SDana.Myers@Sun.COM 607*11225SDana.Myers@Sun.COM *Dest = NULL; 608*11225SDana.Myers@Sun.COM ObjDesc->Package.Count = NewCount; 609*11225SDana.Myers@Sun.COM } 610*11225SDana.Myers@Sun.COM 611*11225SDana.Myers@Sun.COM return (Status); 612*11225SDana.Myers@Sun.COM } 613*11225SDana.Myers@Sun.COM 614*11225SDana.Myers@Sun.COM 615*11225SDana.Myers@Sun.COM /****************************************************************************** 616*11225SDana.Myers@Sun.COM * 617*11225SDana.Myers@Sun.COM * FUNCTION: AcpiNsSortList 618*11225SDana.Myers@Sun.COM * 619*11225SDana.Myers@Sun.COM * PARAMETERS: Elements - Package object element list 620*11225SDana.Myers@Sun.COM * Count - Element count for above 621*11225SDana.Myers@Sun.COM * Index - Sort by which package element 622*11225SDana.Myers@Sun.COM * SortDirection - Ascending or Descending sort 623*11225SDana.Myers@Sun.COM * 624*11225SDana.Myers@Sun.COM * RETURN: Status 625*11225SDana.Myers@Sun.COM * 626*11225SDana.Myers@Sun.COM * DESCRIPTION: Sort the objects that are in a package element list. 627*11225SDana.Myers@Sun.COM * 628*11225SDana.Myers@Sun.COM * NOTE: Assumes that all NULL elements have been removed from the package. 629*11225SDana.Myers@Sun.COM * 630*11225SDana.Myers@Sun.COM *****************************************************************************/ 631*11225SDana.Myers@Sun.COM 632*11225SDana.Myers@Sun.COM static ACPI_STATUS 633*11225SDana.Myers@Sun.COM AcpiNsSortList ( 634*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT **Elements, 635*11225SDana.Myers@Sun.COM UINT32 Count, 636*11225SDana.Myers@Sun.COM UINT32 Index, 637*11225SDana.Myers@Sun.COM UINT8 SortDirection) 638*11225SDana.Myers@Sun.COM { 639*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ObjDesc1; 640*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *ObjDesc2; 641*11225SDana.Myers@Sun.COM ACPI_OPERAND_OBJECT *TempObj; 642*11225SDana.Myers@Sun.COM UINT32 i; 643*11225SDana.Myers@Sun.COM UINT32 j; 644*11225SDana.Myers@Sun.COM 645*11225SDana.Myers@Sun.COM 646*11225SDana.Myers@Sun.COM /* Simple bubble sort */ 647*11225SDana.Myers@Sun.COM 648*11225SDana.Myers@Sun.COM for (i = 1; i < Count; i++) 649*11225SDana.Myers@Sun.COM { 650*11225SDana.Myers@Sun.COM for (j = (Count - 1); j >= i; j--) 651*11225SDana.Myers@Sun.COM { 652*11225SDana.Myers@Sun.COM ObjDesc1 = Elements[j-1]->Package.Elements[Index]; 653*11225SDana.Myers@Sun.COM ObjDesc2 = Elements[j]->Package.Elements[Index]; 654*11225SDana.Myers@Sun.COM 655*11225SDana.Myers@Sun.COM if (((SortDirection == ACPI_SORT_ASCENDING) && 656*11225SDana.Myers@Sun.COM (ObjDesc1->Integer.Value > ObjDesc2->Integer.Value)) || 657*11225SDana.Myers@Sun.COM 658*11225SDana.Myers@Sun.COM ((SortDirection == ACPI_SORT_DESCENDING) && 659*11225SDana.Myers@Sun.COM (ObjDesc1->Integer.Value < ObjDesc2->Integer.Value))) 660*11225SDana.Myers@Sun.COM { 661*11225SDana.Myers@Sun.COM TempObj = Elements[j-1]; 662*11225SDana.Myers@Sun.COM Elements[j-1] = Elements[j]; 663*11225SDana.Myers@Sun.COM Elements[j] = TempObj; 664*11225SDana.Myers@Sun.COM } 665*11225SDana.Myers@Sun.COM } 666*11225SDana.Myers@Sun.COM } 667*11225SDana.Myers@Sun.COM 668*11225SDana.Myers@Sun.COM return (AE_OK); 669*11225SDana.Myers@Sun.COM } 670