Fwiw I have prodded OpenBSD folks about their bug that we are effectively
working around, and given them an OVMF+CSM image to reproduce.
--
dwmw2
(Apologies for HTML and top-posting; Android mailer is broken.)
-------- Original message --------
From: Laszlo Ersek <[email protected]>
Date:
To: [email protected]
Cc: Paolo Bonzini <[email protected]>,Gleb Natapov <[email protected]>
Subject: Re: [edk2] [PATCH] OvmfPkg/AcpiPlatformDxe/Qemu.c: split S3/S4
package contents into bytes
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 <[email protected]>
> ---
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel