On Thu, Jan 24, 2013 at 4:32 AM, Laszlo Ersek <ler...@redhat.com> wrote:
> Such packages should be more compatible with AML parsers in practice:
>
>   /*
>    * Intel ACPI Component Architecture
>    * AML Disassembler version 20090123
>    *
>    * Disassembly of SSDT.aml, Thu Jan 24 13:23:26 2013
>    *
>    *
>    * Original Table Header:
>    *     Signature        "SSDT"
>    *     Length           0x00000057 (87)
>    *     Revision         0x01
>    *     Checksum         0x9D
>    *     OEM ID           "REDHAT"
>    *     OEM Table ID     "OVMF    "
>    *     OEM Revision     0x00000001 (1)
>    *     Compiler ID      "INTL"
>    *     Compiler Version 0x20090123 (537461027)
>    */
>   DefinitionBlock ("SSDT.aml", "SSDT", 1, "REDHAT", "OVMF    ", 0x00000001)
>   {
>       OperationRegion (FWDT, SystemMemory, 0xDFB66F98, 0x00000030)
>       Name (\_S3, Package (0x04)
>       {
>           0x01,
>           0x00,
>           0x00,
>           0x00
>       })
>       Name (\_S4, Package (0x04)
>       {
>           0x02,
>           0x00,
>           0x00,
>           0x00
>       })
>   }
>
> Testing:
> - Checked dmesg in an F18 guest, then selected hibernate and verified the
>   requested suspend type with a qemu debug patch. The above AML
>   disassembly also originates from the F18 guest (acpidump + iasld -d).
> - Hibernated a Windows 8 Consumer Preview (Build 8250) guest, confirmed
>   requested suspend type with the same qemu debug patch.

The motivation for this change doesn't seem clear to me from the commit message.

Cleanup? Fixes hibernate for a few or all operating systems?

-Jordan

> Contributed-under: TianoCore Contribution Agreement 1.0
>
> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
> ---
>  OvmfPkg/AcpiPlatformDxe/Qemu.c |   58 +++++++++++++++++++++++----------------
>  1 files changed, 34 insertions(+), 24 deletions(-)
>
> diff --git a/OvmfPkg/AcpiPlatformDxe/Qemu.c b/OvmfPkg/AcpiPlatformDxe/Qemu.c
> index 35d667f..8a6ecf7 100644
> --- a/OvmfPkg/AcpiPlatformDxe/Qemu.c
> +++ b/OvmfPkg/AcpiPlatformDxe/Qemu.c
> @@ -200,16 +200,20 @@ typedef struct {
>  } FIRMWARE_DATA;
>
>  typedef struct {
> -  UINT8 NameOp;
> -  UINT8 RootChar;
> -  UINT8 NameChar[4];
> -  UINT8 PackageOp;
> -  UINT8 PkgLength;
> -  UINT8 NumElements;
> -  UINT8 DWordPrefix;
> -  UINT8 Pm1aCntSlpTyp;
> -  UINT8 Pm1bCntSlpTyp;
> -  UINT8 Reserved[2];
> +  UINT8 BytePrefix;
> +  UINT8 ByteValue;
> +} AML_BYTE;
> +
> +typedef struct {
> +  UINT8    NameOp;
> +  UINT8    RootChar;
> +  UINT8    NameChar[4];
> +  UINT8    PackageOp;
> +  UINT8    PkgLength;
> +  UINT8    NumElements;
> +  AML_BYTE Pm1aCntSlpTyp;
> +  AML_BYTE Pm1bCntSlpTyp;
> +  AML_BYTE Reserved[2];
>  } SYSTEM_STATE_PACKAGE;
>
>  #pragma pack()
> @@ -326,12 +330,14 @@ GetSuspendStates (
>      '\\',                   // RootChar
>      { '_', 'S', 'x', '_' }, // NameChar[4]
>      0x12,                   // PackageOp
> -    0x07,                   // PkgLength
> -    0x01,                   // NumElements
> -    0x0c,                   // DWordPrefix
> -    0x00,                   // Pm1aCntSlpTyp
> -    0x00,                   // Pm1bCntSlpTyp -- we don't support it
> -    { 0x00, 0x00 }          // Reserved
> +    0x0A,                   // PkgLength
> +    0x04,                   // NumElements
> +    { 0x0A, 0x00 },         // Pm1aCntSlpTyp
> +    { 0x0A, 0x00 },         // Pm1bCntSlpTyp -- we don't support it
> +    {                       // Reserved[2]
> +      { 0x0A, 0x00 },
> +      { 0x0A, 0x00 }
> +    }
>    };
>    RETURN_STATUS                     Status;
>    FIRMWARE_CONFIG_ITEM              FwCfgItem;
> @@ -343,13 +349,13 @@ GetSuspendStates (
>    //
>    *SuspendToRamSize = sizeof Template;
>    CopyMem (SuspendToRam, &Template, sizeof Template);
> -  SuspendToRam->NameChar[2]   = '3'; // S3
> -  SuspendToRam->Pm1aCntSlpTyp = 1;   // PIIX4: STR
> +  SuspendToRam->NameChar[2]             = '3'; // S3
> +  SuspendToRam->Pm1aCntSlpTyp.ByteValue = 1;   // PIIX4: STR
>
>    *SuspendToDiskSize = sizeof Template;
>    CopyMem (SuspendToDisk, &Template, sizeof Template);
> -  SuspendToDisk->NameChar[2]   = '4'; // S4
> -  SuspendToDisk->Pm1aCntSlpTyp = 2;   // PIIX4: POSCL
> +  SuspendToDisk->NameChar[2]             = '4'; // S4
> +  SuspendToDisk->Pm1aCntSlpTyp.ByteValue = 2;   // PIIX4: POSCL
>
>    //
>    // check for overrides
> @@ -368,16 +374,20 @@ GetSuspendStates (
>    // value to be written to the PM control register's SUS_TYP bits.
>    //
>    if (SystemStates[3] & BIT7) {
> -    SuspendToRam->Pm1aCntSlpTyp = SystemStates[3] & (BIT2 | BIT1 | BIT0);
> -    DEBUG ((DEBUG_INFO, "ACPI S3 value: %d\n", SuspendToRam->Pm1aCntSlpTyp));
> +    SuspendToRam->Pm1aCntSlpTyp.ByteValue =
> +        SystemStates[3] & (BIT2 | BIT1 | BIT0);
> +    DEBUG ((DEBUG_INFO, "ACPI S3 value: %d\n",
> +            SuspendToRam->Pm1aCntSlpTyp.ByteValue));
>    } else {
>      *SuspendToRamSize = 0;
>      DEBUG ((DEBUG_INFO, "ACPI S3 disabled\n"));
>    }
>
>    if (SystemStates[4] & BIT7) {
> -    SuspendToDisk->Pm1aCntSlpTyp = SystemStates[4] & (BIT2 | BIT1 | BIT0);
> -    DEBUG ((DEBUG_INFO, "ACPI S4 value: %d\n", 
> SuspendToDisk->Pm1aCntSlpTyp));
> +    SuspendToDisk->Pm1aCntSlpTyp.ByteValue =
> +        SystemStates[4] & (BIT2 | BIT1 | BIT0);
> +    DEBUG ((DEBUG_INFO, "ACPI S4 value: %d\n",
> +            SuspendToDisk->Pm1aCntSlpTyp.ByteValue));
>    } else {
>      *SuspendToDiskSize = 0;
>      DEBUG ((DEBUG_INFO, "ACPI S4 disabled\n"));
> --
> 1.7.1
>
>
> ------------------------------------------------------------------------------
> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
> MVPs and experts. ON SALE this month only -- learn more at:
> http://p.sf.net/sfu/learnnow-d2d
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to