Anyone feeling like reviewing this? :) It replaces:
- package with 1 dword (= prefix + data) elements
with
- package with 4 byte  (= prefix + data) elements

Thanks
Laszlo

On 01/24/13 13:32, Laszlo Ersek 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.
> 
> 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"));


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to