diff options
Diffstat (limited to 'source/components/hardware')
| -rw-r--r-- | source/components/hardware/hwacpi.c | 2 | ||||
| -rw-r--r-- | source/components/hardware/hwesleep.c | 2 | ||||
| -rw-r--r-- | source/components/hardware/hwgpe.c | 4 | ||||
| -rw-r--r-- | source/components/hardware/hwpci.c | 2 | ||||
| -rw-r--r-- | source/components/hardware/hwregs.c | 2 | ||||
| -rw-r--r-- | source/components/hardware/hwsleep.c | 2 | ||||
| -rw-r--r-- | source/components/hardware/hwtimer.c | 2 | ||||
| -rw-r--r-- | source/components/hardware/hwvalid.c | 2 | ||||
| -rw-r--r-- | source/components/hardware/hwxface.c | 130 | ||||
| -rw-r--r-- | source/components/hardware/hwxfsleep.c | 2 | 
10 files changed, 87 insertions, 63 deletions
| diff --git a/source/components/hardware/hwacpi.c b/source/components/hardware/hwacpi.c index 72e287abcc13..d63c36480299 100644 --- a/source/components/hardware/hwacpi.c +++ b/source/components/hardware/hwacpi.c @@ -5,7 +5,7 @@   *****************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without diff --git a/source/components/hardware/hwesleep.c b/source/components/hardware/hwesleep.c index 353d5a92974e..5ea8e262257a 100644 --- a/source/components/hardware/hwesleep.c +++ b/source/components/hardware/hwesleep.c @@ -6,7 +6,7 @@   *****************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without diff --git a/source/components/hardware/hwgpe.c b/source/components/hardware/hwgpe.c index 8203916da501..efeba2b5e721 100644 --- a/source/components/hardware/hwgpe.c +++ b/source/components/hardware/hwgpe.c @@ -5,7 +5,7 @@   *****************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -150,7 +150,7 @@ AcpiHwLowSetGpe (          break;      default: -        ACPI_ERROR ((AE_INFO, "Invalid GPE Action, %u\n", Action)); +        ACPI_ERROR ((AE_INFO, "Invalid GPE Action, %u", Action));          return (AE_BAD_PARAMETER);      } diff --git a/source/components/hardware/hwpci.c b/source/components/hardware/hwpci.c index 1c42f3a7dd29..c5b2dfc013ed 100644 --- a/source/components/hardware/hwpci.c +++ b/source/components/hardware/hwpci.c @@ -5,7 +5,7 @@   ******************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without diff --git a/source/components/hardware/hwregs.c b/source/components/hardware/hwregs.c index a89e97cd8c40..ca2f48bd6f18 100644 --- a/source/components/hardware/hwregs.c +++ b/source/components/hardware/hwregs.c @@ -6,7 +6,7 @@   ******************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without diff --git a/source/components/hardware/hwsleep.c b/source/components/hardware/hwsleep.c index 4d47ef8a33a2..e3631b54b226 100644 --- a/source/components/hardware/hwsleep.c +++ b/source/components/hardware/hwsleep.c @@ -6,7 +6,7 @@   *****************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without diff --git a/source/components/hardware/hwtimer.c b/source/components/hardware/hwtimer.c index 79caa70a5241..7e4177afd6d5 100644 --- a/source/components/hardware/hwtimer.c +++ b/source/components/hardware/hwtimer.c @@ -5,7 +5,7 @@   *****************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without diff --git a/source/components/hardware/hwvalid.c b/source/components/hardware/hwvalid.c index 535cdbbd1a98..832ca4acd926 100644 --- a/source/components/hardware/hwvalid.c +++ b/source/components/hardware/hwvalid.c @@ -5,7 +5,7 @@   *****************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without diff --git a/source/components/hardware/hwxface.c b/source/components/hardware/hwxface.c index 1a1322be6292..9d02640f0583 100644 --- a/source/components/hardware/hwxface.c +++ b/source/components/hardware/hwxface.c @@ -5,7 +5,7 @@   *****************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -492,10 +492,33 @@ ACPI_EXPORT_SYMBOL (AcpiWriteBitRegister)   *              *SleepTypeA         - Where SLP_TYPa is returned   *              *SleepTypeB         - Where SLP_TYPb is returned   * - * RETURN:      Status - ACPI status + * RETURN:      Status + * + * DESCRIPTION: Obtain the SLP_TYPa and SLP_TYPb values for the requested + *              sleep state via the appropriate \_Sx object. + * + *  The sleep state package returned from the corresponding \_Sx_ object + *  must contain at least one integer. + * + *  March 2005: + *  Added support for a package that contains two integers. This + *  goes against the ACPI specification which defines this object as a + *  package with one encoded DWORD integer. However, existing practice + *  by many BIOS vendors is to return a package with 2 or more integer + *  elements, at least one per sleep type (A/B). + * + *  January 2013: + *  Therefore, we must be prepared to accept a package with either a + *  single integer or multiple integers.   * - * DESCRIPTION: Obtain the SLP_TYPa and SLP_TYPb values for the requested sleep - *              state. + *  The single integer DWORD format is as follows: + *      BYTE 0 - Value for the PM1A SLP_TYP register + *      BYTE 1 - Value for the PM1B SLP_TYP register + *      BYTE 2-3 - Reserved + * + *  The dual integer format is as follows: + *      Integer 0 - Value for the PM1A SLP_TYP register + *      Integer 1 - Value for the PM1A SLP_TYP register   *   ******************************************************************************/ @@ -505,8 +528,9 @@ AcpiGetSleepTypeData (      UINT8                   *SleepTypeA,      UINT8                   *SleepTypeB)  { -    ACPI_STATUS             Status = AE_OK; +    ACPI_STATUS             Status;      ACPI_EVALUATE_INFO      *Info; +    ACPI_OPERAND_OBJECT     **Elements;      ACPI_FUNCTION_TRACE (AcpiGetSleepTypeData); @@ -515,8 +539,7 @@ AcpiGetSleepTypeData (      /* Validate parameters */      if ((SleepState > ACPI_S_STATES_MAX) || -        !SleepTypeA || -        !SleepTypeB) +        !SleepTypeA || !SleepTypeB)      {          return_ACPI_STATUS (AE_BAD_PARAMETER);      } @@ -529,17 +552,14 @@ AcpiGetSleepTypeData (          return_ACPI_STATUS (AE_NO_MEMORY);      } +    /* +     * Evaluate the \_Sx namespace object containing the register values +     * for this state +     */      Info->Pathname = ACPI_CAST_PTR (char, AcpiGbl_SleepStateNames[SleepState]); - -    /* Evaluate the namespace object containing the values for this state */ -      Status = AcpiNsEvaluate (Info);      if (ACPI_FAILURE (Status))      { -        ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, -            "%s while evaluating SleepState [%s]\n", -            AcpiFormatException (Status), Info->Pathname)); -          goto Cleanup;      } @@ -549,66 +569,70 @@ AcpiGetSleepTypeData (      {          ACPI_ERROR ((AE_INFO, "No Sleep State object returned from [%s]",              Info->Pathname)); -        Status = AE_NOT_EXIST; +        Status = AE_AML_NO_RETURN_VALUE; +        goto Cleanup;      } -    /* It must be of type Package */ +    /* Return object must be of type Package */ -    else if (Info->ReturnObject->Common.Type != ACPI_TYPE_PACKAGE) +    if (Info->ReturnObject->Common.Type != ACPI_TYPE_PACKAGE)      {          ACPI_ERROR ((AE_INFO, "Sleep State return object is not a Package"));          Status = AE_AML_OPERAND_TYPE; +        goto Cleanup1;      }      /* -     * The package must have at least two elements. NOTE (March 2005): This -     * goes against the current ACPI spec which defines this object as a -     * package with one encoded DWORD element. However, existing practice -     * by BIOS vendors seems to be to have 2 or more elements, at least -     * one per sleep type (A/B). +     * Any warnings about the package length or the object types have +     * already been issued by the predefined name module -- there is no +     * need to repeat them here.       */ -    else if (Info->ReturnObject->Package.Count < 2) +    Elements = Info->ReturnObject->Package.Elements; +    switch (Info->ReturnObject->Package.Count)      { -        ACPI_ERROR ((AE_INFO, -            "Sleep State return package does not have at least two elements")); -        Status = AE_AML_NO_OPERAND; -    } +    case 0: +        Status = AE_AML_PACKAGE_LIMIT; +        break; -    /* The first two elements must both be of type Integer */ +    case 1: +        if (Elements[0]->Common.Type != ACPI_TYPE_INTEGER) +        { +            Status = AE_AML_OPERAND_TYPE; +            break; +        } -    else if (((Info->ReturnObject->Package.Elements[0])->Common.Type -                != ACPI_TYPE_INTEGER) || -             ((Info->ReturnObject->Package.Elements[1])->Common.Type -                != ACPI_TYPE_INTEGER)) -    { -        ACPI_ERROR ((AE_INFO, -            "Sleep State return package elements are not both Integers " -            "(%s, %s)", -            AcpiUtGetObjectTypeName (Info->ReturnObject->Package.Elements[0]), -            AcpiUtGetObjectTypeName (Info->ReturnObject->Package.Elements[1]))); -        Status = AE_AML_OPERAND_TYPE; -    } -    else -    { -        /* Valid _Sx_ package size, type, and value */ +        /* A valid _Sx_ package with one integer */ + +        *SleepTypeA = (UINT8) Elements[0]->Integer.Value; +        *SleepTypeB = (UINT8) (Elements[0]->Integer.Value >> 8); +        break; + +    case 2: +    default: +        if ((Elements[0]->Common.Type != ACPI_TYPE_INTEGER) || +            (Elements[1]->Common.Type != ACPI_TYPE_INTEGER)) +        { +            Status = AE_AML_OPERAND_TYPE; +            break; +        } + +        /* A valid _Sx_ package with two integers */ -        *SleepTypeA = (UINT8) -            (Info->ReturnObject->Package.Elements[0])->Integer.Value; -        *SleepTypeB = (UINT8) -            (Info->ReturnObject->Package.Elements[1])->Integer.Value; +        *SleepTypeA = (UINT8) Elements[0]->Integer.Value; +        *SleepTypeB = (UINT8) Elements[1]->Integer.Value; +        break;      } +Cleanup1: +    AcpiUtRemoveReference (Info->ReturnObject); + +Cleanup:      if (ACPI_FAILURE (Status))      {          ACPI_EXCEPTION ((AE_INFO, Status, -            "While evaluating SleepState [%s], bad Sleep object %p type %s", -            Info->Pathname, Info->ReturnObject, -            AcpiUtGetObjectTypeName (Info->ReturnObject))); +            "While evaluating Sleep State [%s]", Info->Pathname));      } -    AcpiUtRemoveReference (Info->ReturnObject); - -Cleanup:      ACPI_FREE (Info);      return_ACPI_STATUS (Status);  } diff --git a/source/components/hardware/hwxfsleep.c b/source/components/hardware/hwxfsleep.c index affa8d35f5ea..42f054386cb6 100644 --- a/source/components/hardware/hwxfsleep.c +++ b/source/components/hardware/hwxfsleep.c @@ -5,7 +5,7 @@   *****************************************************************************/  /* - * Copyright (C) 2000 - 2012, Intel Corp. + * Copyright (C) 2000 - 2013, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without | 
