[edk2-devel] [PATCH 1/1] OvmfPkg/Include: remove QemuSmramSaveStateMap.h

Ard Biesheuvel ardb at kernel.org
Thu Sep 7 13:55:02 UTC 2023


On Tue, 4 Jul 2023 at 11:52, Gerd Hoffmann <kraxel at redhat.com> wrote:
>
> The qemu/kvm SMM emulation uses the AMD SaveState layout.
>
> So, now that we have AMD SaveState support merged we can just use
> Amd/SmramSaveStateMap.h, QemuSmramSaveStateMap.h is not needed any more.
>
> Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>

Acked-by: Ard Biesheuvel <ardb at kernel.org>

I'll queue this one up as well.

> ---
>  .../Include/Register/QemuSmramSaveStateMap.h  | 178 ------------------
>  .../PeiDxeMemEncryptSevLibInternal.c          |   4 +-
>  .../SmmCpuFeaturesLib/SmmCpuFeaturesLib.c     |  21 +--
>  3 files changed, 12 insertions(+), 191 deletions(-)
>  delete mode 100644 OvmfPkg/Include/Register/QemuSmramSaveStateMap.h
>
> diff --git a/OvmfPkg/Include/Register/QemuSmramSaveStateMap.h b/OvmfPkg/Include/Register/QemuSmramSaveStateMap.h
> deleted file mode 100644
> index 8ffde0548c4c..000000000000
> --- a/OvmfPkg/Include/Register/QemuSmramSaveStateMap.h
> +++ /dev/null
> @@ -1,178 +0,0 @@
> -/** @file
> -SMRAM Save State Map Definitions.
> -
> -SMRAM Save State Map definitions based on contents of the
> -Intel(R) 64 and IA-32 Architectures Software Developer's Manual
> -  Volume 3C, Section 34.4 SMRAM
> -  Volume 3C, Section 34.5 SMI Handler Execution Environment
> -  Volume 3C, Section 34.7 Managing Synchronous and Asynchronous SMIs
> -
> -and the AMD64 Architecture Programmer's Manual
> -  Volume 2, Section 10.2 SMM Resources
> -
> -Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> -Copyright (c) 2015, Red Hat, Inc.<BR>
> -SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -**/
> -
> -#ifndef __QEMU_SMRAM_SAVE_STATE_MAP_H__
> -#define __QEMU_SMRAM_SAVE_STATE_MAP_H__
> -
> -#pragma pack (1)
> -
> -///
> -/// 32-bit SMRAM Save State Map
> -///
> -typedef struct {
> -  UINT8     Reserved0[0x200]; // 7c00h
> -  UINT8     Reserved1[0xf8];  // 7e00h
> -  UINT32    SMBASE;           // 7ef8h
> -  UINT32    SMMRevId;         // 7efch
> -  UINT16    IORestart;        // 7f00h
> -  UINT16    AutoHALTRestart;  // 7f02h
> -  UINT8     Reserved2[0x9C];  // 7f08h
> -  UINT32    IOMemAddr;        // 7fa0h
> -  UINT32    IOMisc;           // 7fa4h
> -  UINT32    _ES;              // 7fa8h
> -  UINT32    _CS;              // 7fach
> -  UINT32    _SS;              // 7fb0h
> -  UINT32    _DS;              // 7fb4h
> -  UINT32    _FS;              // 7fb8h
> -  UINT32    _GS;              // 7fbch
> -  UINT32    Reserved3;        // 7fc0h
> -  UINT32    _TR;              // 7fc4h
> -  UINT32    _DR7;             // 7fc8h
> -  UINT32    _DR6;             // 7fcch
> -  UINT32    _EAX;             // 7fd0h
> -  UINT32    _ECX;             // 7fd4h
> -  UINT32    _EDX;             // 7fd8h
> -  UINT32    _EBX;             // 7fdch
> -  UINT32    _ESP;             // 7fe0h
> -  UINT32    _EBP;             // 7fe4h
> -  UINT32    _ESI;             // 7fe8h
> -  UINT32    _EDI;             // 7fech
> -  UINT32    _EIP;             // 7ff0h
> -  UINT32    _EFLAGS;          // 7ff4h
> -  UINT32    _CR3;             // 7ff8h
> -  UINT32    _CR0;             // 7ffch
> -} QEMU_SMRAM_SAVE_STATE_MAP32;
> -
> -///
> -/// 64-bit SMRAM Save State Map
> -///
> -typedef struct {
> -  UINT8     Reserved0[0x200]; // 7c00h
> -
> -  UINT16    _ES;             // 7e00h
> -  UINT16    _ESAccessRights; // 7e02h
> -  UINT32    _ESLimit;        // 7e04h
> -  UINT64    _ESBase;         // 7e08h
> -
> -  UINT16    _CS;             // 7e10h
> -  UINT16    _CSAccessRights; // 7e12h
> -  UINT32    _CSLimit;        // 7e14h
> -  UINT64    _CSBase;         // 7e18h
> -
> -  UINT16    _SS;             // 7e20h
> -  UINT16    _SSAccessRights; // 7e22h
> -  UINT32    _SSLimit;        // 7e24h
> -  UINT64    _SSBase;         // 7e28h
> -
> -  UINT16    _DS;             // 7e30h
> -  UINT16    _DSAccessRights; // 7e32h
> -  UINT32    _DSLimit;        // 7e34h
> -  UINT64    _DSBase;         // 7e38h
> -
> -  UINT16    _FS;             // 7e40h
> -  UINT16    _FSAccessRights; // 7e42h
> -  UINT32    _FSLimit;        // 7e44h
> -  UINT64    _FSBase;         // 7e48h
> -
> -  UINT16    _GS;             // 7e50h
> -  UINT16    _GSAccessRights; // 7e52h
> -  UINT32    _GSLimit;        // 7e54h
> -  UINT64    _GSBase;         // 7e58h
> -
> -  UINT32    _GDTRReserved1;  // 7e60h
> -  UINT16    _GDTRLimit;      // 7e64h
> -  UINT16    _GDTRReserved2;  // 7e66h
> -  UINT64    _GDTRBase;       // 7e68h
> -
> -  UINT16    _LDTR;             // 7e70h
> -  UINT16    _LDTRAccessRights; // 7e72h
> -  UINT32    _LDTRLimit;        // 7e74h
> -  UINT64    _LDTRBase;         // 7e78h
> -
> -  UINT32    _IDTRReserved1;  // 7e80h
> -  UINT16    _IDTRLimit;      // 7e84h
> -  UINT16    _IDTRReserved2;  // 7e86h
> -  UINT64    _IDTRBase;       // 7e88h
> -
> -  UINT16    _TR;             // 7e90h
> -  UINT16    _TRAccessRights; // 7e92h
> -  UINT32    _TRLimit;        // 7e94h
> -  UINT64    _TRBase;         // 7e98h
> -
> -  UINT64    IO_RIP;          // 7ea0h
> -  UINT64    IO_RCX;          // 7ea8h
> -  UINT64    IO_RSI;          // 7eb0h
> -  UINT64    IO_RDI;          // 7eb8h
> -  UINT32    IO_DWord;        // 7ec0h
> -  UINT8     Reserved1[0x04]; // 7ec4h
> -  UINT8     IORestart;       // 7ec8h
> -  UINT8     AutoHALTRestart; // 7ec9h
> -  UINT8     Reserved2[0x06]; // 7ecah
> -
> -  UINT64    IA32_EFER;       // 7ed0h
> -  UINT64    SVM_Guest;       // 7ed8h
> -  UINT64    SVM_GuestVMCB;   // 7ee0h
> -  UINT64    SVM_GuestVIntr;  // 7ee8h
> -  UINT8     Reserved3[0x0c]; // 7ef0h
> -
> -  UINT32    SMMRevId;        // 7efch
> -  UINT32    SMBASE;          // 7f00h
> -
> -  UINT8     Reserved4[0x1c];   // 7f04h
> -  UINT64    SVM_GuestPAT;      // 7f20h
> -  UINT64    SVM_HostIA32_EFER; // 7f28h
> -  UINT64    SVM_HostCR4;       // 7f30h
> -  UINT64    SVM_HostCR3;       // 7f38h
> -  UINT64    SVM_HostCR0;       // 7f40h
> -
> -  UINT64    _CR4;            // 7f48h
> -  UINT64    _CR3;            // 7f50h
> -  UINT64    _CR0;            // 7f58h
> -  UINT64    _DR7;            // 7f60h
> -  UINT64    _DR6;            // 7f68h
> -  UINT64    _RFLAGS;         // 7f70h
> -  UINT64    _RIP;            // 7f78h
> -  UINT64    _R15;            // 7f80h
> -  UINT64    _R14;            // 7f88h
> -  UINT64    _R13;            // 7f90h
> -  UINT64    _R12;            // 7f98h
> -  UINT64    _R11;            // 7fa0h
> -  UINT64    _R10;            // 7fa8h
> -  UINT64    _R9;             // 7fb0h
> -  UINT64    _R8;             // 7fb8h
> -  UINT64    _RDI;            // 7fc0h
> -  UINT64    _RSI;            // 7fc8h
> -  UINT64    _RBP;            // 7fd0h
> -  UINT64    _RSP;            // 7fd8h
> -  UINT64    _RBX;            // 7fe0h
> -  UINT64    _RDX;            // 7fe8h
> -  UINT64    _RCX;            // 7ff0h
> -  UINT64    _RAX;            // 7ff8h
> -} QEMU_SMRAM_SAVE_STATE_MAP64;
> -
> -///
> -/// Union of 32-bit and 64-bit SMRAM Save State Maps
> -///
> -typedef union  {
> -  QEMU_SMRAM_SAVE_STATE_MAP32    x86;
> -  QEMU_SMRAM_SAVE_STATE_MAP64    x64;
> -} QEMU_SMRAM_SAVE_STATE_MAP;
> -
> -#pragma pack ()
> -
> -#endif
> diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/PeiDxeMemEncryptSevLibInternal.c b/OvmfPkg/Library/BaseMemEncryptSevLib/PeiDxeMemEncryptSevLibInternal.c
> index 78ea16ae06ff..43a2a3e3b7e3 100644
> --- a/OvmfPkg/Library/BaseMemEncryptSevLib/PeiDxeMemEncryptSevLibInternal.c
> +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/PeiDxeMemEncryptSevLibInternal.c
> @@ -12,7 +12,7 @@
>  #include <Library/DebugLib.h>
>  #include <Library/MemEncryptSevLib.h>
>  #include <Library/PcdLib.h>
> -#include <Register/QemuSmramSaveStateMap.h>
> +#include <Register/Amd/SmramSaveStateMap.h>
>  #include <Register/SmramSaveStateMap.h>
>  #include <Uefi/UefiBaseType.h>
>
> @@ -49,7 +49,7 @@ MemEncryptSevLocateInitialSmramSaveStateMapPages (
>    }
>
>    MapStart      = SMM_DEFAULT_SMBASE + SMRAM_SAVE_STATE_MAP_OFFSET;
> -  MapEnd        = MapStart + sizeof (QEMU_SMRAM_SAVE_STATE_MAP);
> +  MapEnd        = MapStart + sizeof (AMD_SMRAM_SAVE_STATE_MAP);
>    MapPagesStart = MapStart & ~(UINTN)EFI_PAGE_MASK;
>    MapPagesEnd   = ALIGN_VALUE (MapEnd, EFI_PAGE_SIZE);
>    MapPagesSize  = MapPagesEnd - MapPagesStart;
> diff --git a/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c b/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> index 4c354bafe42f..63822b126e3d 100644
> --- a/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> +++ b/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c
> @@ -20,8 +20,7 @@
>  #include <Library/HobLib.h>
>  #include <Pcd/CpuHotEjectData.h>
>  #include <PiSmm.h>
> -#include <Register/Intel/SmramSaveStateMap.h>
> -#include <Register/QemuSmramSaveStateMap.h>
> +#include <Register/Amd/SmramSaveStateMap.h>
>  #include <Guid/SmmBaseHob.h>
>
>  //
> @@ -90,15 +89,15 @@ SmmCpuFeaturesInitializeProcessor (
>    IN CPU_HOT_PLUG_DATA          *CpuHotPlugData
>    )
>  {
> -  QEMU_SMRAM_SAVE_STATE_MAP  *CpuState;
> +  AMD_SMRAM_SAVE_STATE_MAP  *CpuState;
>
>    //
>    // Configure SMBASE.
>    //
> -  CpuState = (QEMU_SMRAM_SAVE_STATE_MAP *)(UINTN)(
> -                                                  SMM_DEFAULT_SMBASE +
> -                                                  SMRAM_SAVE_STATE_MAP_OFFSET
> -                                                  );
> +  CpuState = (AMD_SMRAM_SAVE_STATE_MAP *)(UINTN)(
> +                                                 SMM_DEFAULT_SMBASE +
> +                                                 SMRAM_SAVE_STATE_MAP_OFFSET
> +                                                 );
>    if ((CpuState->x86.SMMRevId & 0xFFFF) == 0) {
>      CpuState->x86.SMBASE = (UINT32)CpuHotPlugData->SmBase[CpuIndex];
>    } else {
> @@ -150,10 +149,10 @@ SmmCpuFeaturesHookReturnFromSmm (
>    IN UINT64                NewInstructionPointer
>    )
>  {
> -  UINT64                     OriginalInstructionPointer;
> -  QEMU_SMRAM_SAVE_STATE_MAP  *CpuSaveState;
> +  UINT64                    OriginalInstructionPointer;
> +  AMD_SMRAM_SAVE_STATE_MAP  *CpuSaveState;
>
> -  CpuSaveState = (QEMU_SMRAM_SAVE_STATE_MAP *)CpuState;
> +  CpuSaveState = (AMD_SMRAM_SAVE_STATE_MAP *)CpuState;
>    if ((CpuSaveState->x86.SMMRevId & 0xFFFF) == 0) {
>      OriginalInstructionPointer = (UINT64)CpuSaveState->x86._EIP;
>      CpuSaveState->x86._EIP     = (UINT32)NewInstructionPointer;
> @@ -166,7 +165,7 @@ SmmCpuFeaturesHookReturnFromSmm (
>      }
>    } else {
>      OriginalInstructionPointer = CpuSaveState->x64._RIP;
> -    if ((CpuSaveState->x64.IA32_EFER & LMA) == 0) {
> +    if ((CpuSaveState->x64.EFER & LMA) == 0) {
>        CpuSaveState->x64._RIP = (UINT32)NewInstructionPointer32;
>      } else {
>        CpuSaveState->x64._RIP = (UINT32)NewInstructionPointer;
> --
> 2.41.0
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#108391): https://edk2.groups.io/g/devel/message/108391
Mute This Topic: https://groups.io/mt/99943529/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list