git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10435 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			159 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
Copyright (c) 2005, Intel Corporation. All rights reserved.<BR>
 | 
						|
This program and the accompanying materials
 | 
						|
are licensed and made available under the terms and conditions of the BSD License
 | 
						|
which accompanies this distribution.  The full text of the license may be found at
 | 
						|
http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
 | 
						|
Module Name:
 | 
						|
 | 
						|
  CpuSaveState.h
 | 
						|
 | 
						|
Abstract:
 | 
						|
 | 
						|
  Define data structures used by EFI_SMM_CPU_SAVE_STATE protocol.
 | 
						|
 | 
						|
Revision History
 | 
						|
 | 
						|
++*/
 | 
						|
 | 
						|
#ifndef _CPUSAVESTATE_H_
 | 
						|
#define _CPUSAVESTATE_H_
 | 
						|
 | 
						|
typedef unsigned char               ASM_UINT8;
 | 
						|
typedef ASM_UINT8                   ASM_BOOL;
 | 
						|
typedef unsigned short              ASM_UINT16;
 | 
						|
typedef unsigned long               ASM_UINT32;
 | 
						|
 | 
						|
#ifdef _H2INC
 | 
						|
typedef double                      ASM_UINT64;
 | 
						|
#else
 | 
						|
typedef UINT64                      ASM_UINT64;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __GNUC__
 | 
						|
#pragma pack (push)
 | 
						|
#pragma pack (1)
 | 
						|
#endif
 | 
						|
 | 
						|
typedef struct _EFI_SMM_CPU_STATE32 {
 | 
						|
  ASM_UINT8                         Reserved1[0xf8];        // fe00h
 | 
						|
  ASM_UINT32                        SMBASE;                 // fef8h
 | 
						|
  ASM_UINT32                        SMMRevId;               // fefch
 | 
						|
  ASM_UINT16                        IORestart;              // ff00h
 | 
						|
  ASM_UINT16                        AutoHALTRestart;        // ff02h
 | 
						|
  ASM_UINT32                        IEDBASE;                // ff04h
 | 
						|
  ASM_UINT8                         Reserved2[0x98];        // ff08h
 | 
						|
  ASM_UINT32                        IOMemAddr;              // ffa0h
 | 
						|
  ASM_UINT32                        IOMisc;                 // ffa4h
 | 
						|
  ASM_UINT32                        _ES;
 | 
						|
  ASM_UINT32                        _CS;
 | 
						|
  ASM_UINT32                        _SS;
 | 
						|
  ASM_UINT32                        _DS;
 | 
						|
  ASM_UINT32                        _FS;
 | 
						|
  ASM_UINT32                        _GS;
 | 
						|
  ASM_UINT32                        _LDTBase;
 | 
						|
  ASM_UINT32                        _TR;
 | 
						|
  ASM_UINT32                        _DR7;
 | 
						|
  ASM_UINT32                        _DR6;
 | 
						|
  ASM_UINT32                        _EAX;
 | 
						|
  ASM_UINT32                        _ECX;
 | 
						|
  ASM_UINT32                        _EDX;
 | 
						|
  ASM_UINT32                        _EBX;
 | 
						|
  ASM_UINT32                        _ESP;
 | 
						|
  ASM_UINT32                        _EBP;
 | 
						|
  ASM_UINT32                        _ESI;
 | 
						|
  ASM_UINT32                        _EDI;
 | 
						|
  ASM_UINT32                        _EIP;
 | 
						|
  ASM_UINT32                        _EFLAGS;
 | 
						|
  ASM_UINT32                        _CR3;
 | 
						|
  ASM_UINT32                        _CR0;
 | 
						|
} EFI_SMM_CPU_STATE32;
 | 
						|
 | 
						|
typedef struct _EFI_SMM_CPU_STATE64 {
 | 
						|
  ASM_UINT8                         Reserved1[0x1d0];       // fc00h
 | 
						|
  ASM_UINT32                        GdtBaseHiDword;         // fdd0h
 | 
						|
  ASM_UINT32                        LdtBaseHiDword;         // fdd4h
 | 
						|
  ASM_UINT32                        IdtBaseHiDword;         // fdd8h
 | 
						|
  ASM_UINT8                         Reserved2[0xc];         // fddch
 | 
						|
  ASM_UINT64                        IO_EIP;                 // fde8h
 | 
						|
  ASM_UINT8                         Reserved3[0x50];        // fdf0h
 | 
						|
  ASM_UINT32                        _CR4;                   // fe40h
 | 
						|
  ASM_UINT8                         Reserved4[0x48];        // fe44h
 | 
						|
  ASM_UINT32                        GdtBaseLoDword;         // fe8ch
 | 
						|
  ASM_UINT32                        GdtLimit;               // fe90h
 | 
						|
  ASM_UINT32                        IdtBaseLoDword;         // fe94h
 | 
						|
  ASM_UINT32                        IdtLimit;               // fe98h
 | 
						|
  ASM_UINT32                        LdtBaseLoDword;         // fe9ch
 | 
						|
  ASM_UINT32                        LdtLimit;               // fea0h
 | 
						|
  ASM_UINT32                        LdtInfo;                // fea4h
 | 
						|
  ASM_UINT8                         Reserved5[0x50];        // fea8h
 | 
						|
  ASM_UINT32                        SMBASE;                 // fef8h
 | 
						|
  ASM_UINT32                        SMMRevId;               // fefch
 | 
						|
  ASM_UINT16                        IORestart;              // ff00h
 | 
						|
  ASM_UINT16                        AutoHALTRestart;        // ff02h
 | 
						|
  ASM_UINT32                        IEDBASE;                // ff04h
 | 
						|
  ASM_UINT8                         Reserved6[0x14];        // ff08h
 | 
						|
  ASM_UINT64                        _R15;                   // ff1ch
 | 
						|
  ASM_UINT64                        _R14;
 | 
						|
  ASM_UINT64                        _R13;
 | 
						|
  ASM_UINT64                        _R12;
 | 
						|
  ASM_UINT64                        _R11;
 | 
						|
  ASM_UINT64                        _R10;
 | 
						|
  ASM_UINT64                        _R9;
 | 
						|
  ASM_UINT64                        _R8;
 | 
						|
  ASM_UINT64                        _RAX;                   // ff5ch
 | 
						|
  ASM_UINT64                        _RCX;
 | 
						|
  ASM_UINT64                        _RDX;
 | 
						|
  ASM_UINT64                        _RBX;
 | 
						|
  ASM_UINT64                        _RSP;
 | 
						|
  ASM_UINT64                        _RBP;
 | 
						|
  ASM_UINT64                        _RSI;
 | 
						|
  ASM_UINT64                        _RDI;
 | 
						|
  ASM_UINT64                        IOMemAddr;              // ff9ch
 | 
						|
  ASM_UINT32                        IOMisc;                 // ffa4h
 | 
						|
  ASM_UINT32                        _ES;                    // ffa8h
 | 
						|
  ASM_UINT32                        _CS;
 | 
						|
  ASM_UINT32                        _SS;
 | 
						|
  ASM_UINT32                        _DS;
 | 
						|
  ASM_UINT32                        _FS;
 | 
						|
  ASM_UINT32                        _GS;
 | 
						|
  ASM_UINT32                        _LDTR;                  // ffc0h
 | 
						|
  ASM_UINT32                        _TR;
 | 
						|
  ASM_UINT64                        _DR7;                   // ffc8h
 | 
						|
  ASM_UINT64                        _DR6;
 | 
						|
  ASM_UINT64                        _RIP;                   // ffd8h
 | 
						|
  ASM_UINT64                        IA32_EFER;              // ffe0h
 | 
						|
  ASM_UINT64                        _RFLAGS;                // ffe8h
 | 
						|
  ASM_UINT64                        _CR3;                   // fff0h
 | 
						|
  ASM_UINT64                        _CR0;                   // fff8h
 | 
						|
} EFI_SMM_CPU_STATE64;
 | 
						|
 | 
						|
#ifndef __GNUC__
 | 
						|
#pragma warning (push)
 | 
						|
#pragma warning (disable: 4201)
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
typedef union _EFI_SMM_CPU_STATE {
 | 
						|
  struct {
 | 
						|
    ASM_UINT8                       Reserved[0x200];
 | 
						|
    EFI_SMM_CPU_STATE32             x86;
 | 
						|
  };
 | 
						|
  EFI_SMM_CPU_STATE64               x64;
 | 
						|
} EFI_SMM_CPU_STATE;
 | 
						|
 | 
						|
#ifndef __GNUC__
 | 
						|
#pragma warning (pop)
 | 
						|
#pragma pack (pop)
 | 
						|
#endif
 | 
						|
 | 
						|
#define EFI_SMM_MIN_REV_ID_x64      0x30006
 | 
						|
 | 
						|
#endif
 |