/** @file
  AMD SMRAM Save State Map Definitions.

  SMRAM Save State Map definitions based on contents of the
    AMD64 Architecture Programmer Manual:
    Volume 2, System Programming, Section 10.2 SMM Resources

  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved .<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef AMD_SMRAM_SAVE_STATE_MAP_H_
#define AMD_SMRAM_SAVE_STATE_MAP_H_

///
/// Default SMBASE address
///
#define SMM_DEFAULT_SMBASE  0x30000

///
/// Offset of SMM handler from SMBASE
///
#define SMM_HANDLER_OFFSET  0x8000

// SMM-Revision Identifier for AMD64 Architecture.
#define AMD_SMM_MIN_REV_ID_X64  0x30064

#pragma pack (1)

///
/// 32-bit SMRAM Save State Map
///
typedef struct {
  // Padded an extra 0x200 bytes to match Intel/EDK2
  UINT8     Reserved[0x200]; // fc00h
  // AMD Save State area starts @ 0xfe00
  UINT8     Reserved1[0xf8]; // fe00h
  UINT32    SMBASE;          // fef8h
  UINT32    SMMRevId;        // fefch
  UINT16    IORestart;       // ff00h
  UINT16    AutoHALTRestart; // ff02h
  UINT8     Reserved2[0x84]; // ff04h
  UINT32    GDTBase;         // ff88h
  UINT64    Reserved3;       // ff8ch
  UINT32    IDTBase;         // ff94h
  UINT8     Reserved4[0x10]; // ff98h
  UINT32    _ES;             // ffa8h
  UINT32    _CS;             // ffach
  UINT32    _SS;             // ffb0h
  UINT32    _DS;             // ffb4h
  UINT32    _FS;             // ffb8h
  UINT32    _GS;             // ffbch
  UINT32    LDTBase;         // ffc0h
  UINT32    _TR;             // ffc4h
  UINT32    _DR7;            // ffc8h
  UINT32    _DR6;            // ffcch
  UINT32    _EAX;            // ffd0h
  UINT32    _ECX;            // ffd4h
  UINT32    _EDX;            // ffd8h
  UINT32    _EBX;            // ffdch
  UINT32    _ESP;            // ffe0h
  UINT32    _EBP;            // ffe4h
  UINT32    _ESI;            // ffe8h
  UINT32    _EDI;            // ffech
  UINT32    _EIP;            // fff0h
  UINT32    _EFLAGS;         // fff4h
  UINT32    _CR3;            // fff8h
  UINT32    _CR0;            // fffch
} AMD_SMRAM_SAVE_STATE_MAP32;

///
/// 64-bit SMRAM Save State Map
///
typedef struct {
  // Padded an extra 0x200 bytes to match Intel/EDK2
  UINT8     Reserved[0x200]; // fc00h
  // AMD Save State area starts @ 0xfe00
  UINT16    _ES;              // fe00h
  UINT16    _ESAttributes;    // fe02h
  UINT32    _ESLimit;         // fe04h
  UINT64    _ESBase;          // fe08h

  UINT16    _CS;              // fe10h
  UINT16    _CSAttributes;    // fe12h
  UINT32    _CSLimit;         // fe14h
  UINT64    _CSBase;          // fe18h

  UINT16    _SS;              // fe20h
  UINT16    _SSAttributes;    // fe22h
  UINT32    _SSLimit;         // fe24h
  UINT64    _SSBase;          // fe28h

  UINT16    _DS;              // fe30h
  UINT16    _DSAttributes;    // fe32h
  UINT32    _DSLimit;         // fe34h
  UINT64    _DSBase;          // fe38h

  UINT16    _FS;              // fe40h
  UINT16    _FSAttributes;    // fe42h
  UINT32    _FSLimit;         // fe44h
  UINT64    _FSBase;          // fe48h

  UINT16    _GS;              // fe50h
  UINT16    _GSAttributes;    // fe52h
  UINT32    _GSLimit;         // fe54h
  UINT64    _GSBase;          // fe58h

  UINT32    _GDTRReserved1;   // fe60h
  UINT16    _GDTRLimit;       // fe64h
  UINT16    _GDTRReserved2;   // fe66h
  // UINT64  _GDTRBase;        // fe68h
  UINT32    _GDTRBaseLoDword;
  UINT32    _GDTRBaseHiDword;

  UINT16    _LDTR;            // fe70h
  UINT16    _LDTRAttributes;  // fe72h
  UINT32    _LDTRLimit;       // fe74h
  // UINT64  _LDTRBase;        // fe78h
  UINT32    _LDTRBaseLoDword;
  UINT32    _LDTRBaseHiDword;

  UINT32    _IDTRReserved1;   // fe80h
  UINT16    _IDTRLimit;       // fe84h
  UINT16    _IDTRReserved2;   // fe86h
  // UINT64  _IDTRBase;        // fe88h
  UINT32    _IDTRBaseLoDword;
  UINT32    _IDTRBaseHiDword;

  UINT16    _TR;              // fe90h
  UINT16    _TRAttributes;    // fe92h
  UINT32    _TRLimit;         // fe94h
  UINT64    _TRBase;          // fe98h

  UINT64    IO_RIP;           // fea0h
  UINT64    IO_RCX;           // fea8h
  UINT64    IO_RSI;           // feb0h
  UINT64    IO_RDI;           // feb8h
  UINT32    IO_DWord;         // fec0h
  UINT8     Reserved1[0x04];  // fec4h
  UINT8     IORestart;        // fec8h
  UINT8     AutoHALTRestart;  // fec9h
  UINT8     Reserved2[0x06];  // fecah
  UINT64    EFER;             // fed0h
  UINT64    SVM_Guest;        // fed8h
  UINT64    SVM_GuestVMCB;    // fee0h
  UINT64    SVM_GuestVIntr;   // fee8h
  UINT8     Reserved3[0x0c];  // fef0h
  UINT32    SMMRevId;         // fefch
  UINT32    SMBASE;           // ff00h
  UINT8     Reserved4[0x14];  // ff04h
  UINT64    SSP;              // ff18h
  UINT64    SVM_GuestPAT;     // ff20h
  UINT64    SVM_HostEFER;     // ff28h
  UINT64    SVM_HostCR4;      // ff30h
  UINT64    SVM_HostCR3;      // ff38h
  UINT64    SVM_HostCR0;      // ff40h
  UINT64    _CR4;             // ff48h
  UINT64    _CR3;             // ff50h
  UINT64    _CR0;             // ff58h
  UINT64    _DR7;             // ff60h
  UINT64    _DR6;             // ff68h
  UINT64    _RFLAGS;          // ff70h
  UINT64    _RIP;             // ff78h
  UINT64    _R15;             // ff80h
  UINT64    _R14;             // ff88h
  UINT64    _R13;             // ff90h
  UINT64    _R12;             // ff98h
  UINT64    _R11;             // ffa0h
  UINT64    _R10;             // ffa8h
  UINT64    _R9;              // ffb0h
  UINT64    _R8;              // ffb8h
  UINT64    _RDI;             // ffc0h
  UINT64    _RSI;             // ffc8h
  UINT64    _RBP;             // ffd0h
  UINT64    _RSP;             // ffd8h
  UINT64    _RBX;             // ffe0h
  UINT64    _RDX;             // ffe8h
  UINT64    _RCX;             // fff0h
  UINT64    _RAX;             // fff8h
} AMD_SMRAM_SAVE_STATE_MAP64;

///
/// Union of 32-bit and 64-bit SMRAM Save State Maps
///
typedef union  {
  AMD_SMRAM_SAVE_STATE_MAP32    x86;
  AMD_SMRAM_SAVE_STATE_MAP64    x64;
} AMD_SMRAM_SAVE_STATE_MAP;

#pragma pack ()

#endif
