git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10404 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			176 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   This file declares the SMM CPU Save State protocol, which provides the processor
 | |
|   save-state information for IA-32 and Itanium processors.
 | |
| 
 | |
| Copyright (c) 2010, 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 that 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.
 | |
| 
 | |
|   @par Revision Reference:
 | |
|   This Protocol is defined in Framework of EFI SMM Core Interface Spec
 | |
|   Version 0.91.
 | |
| **/
 | |
| 
 | |
| #ifndef _SMM_CPU_SAVE_STATE_H_
 | |
| #define _SMM_CPU_SAVE_STATE_H_
 | |
| 
 | |
| #define EFI_SMM_CPU_SAVE_STATE_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x21f302ad, 0x6e94, 0x471b, {0x84, 0xbc, 0xb1, 0x48, 0x0, 0x40, 0x3a, 0x1d} \
 | |
|   }
 | |
| 
 | |
| typedef struct _EFI_SMM_CPU_SAVE_STATE_PROTOCOL  EFI_SMM_CPU_SAVE_STATE_PROTOCOL;
 | |
| 
 | |
| #define EFI_SMM_MIN_REV_ID_x64  0x30006
 | |
| 
 | |
| #pragma pack (1)
 | |
| 
 | |
| /// 
 | |
| /// CPU save-state strcuture for IA32 and X64.
 | |
| ///
 | |
| /// This struct declaration does not exctly match the Framework SMM CIS 0.91 because the
 | |
| /// union in the Framework SMM CIS 0.91 contains an unnamed union member that causes build
 | |
| /// breaks on many compilers with high warning levels.  Instead, the UINT8 Reserved[0x200] 
 | |
| /// field has been moved into EFI_SMM_CPU_STATE32.  This maintains binary compatibility for
 | |
| /// the layout and also maintains source comaptibility for access of all fields in this
 | |
| /// union.
 | |
| ///
 | |
| /// This struct declaration does not exctly match the Framework SMM CIS 0.91 because 
 | |
| /// the Framework SMM CIS 0.91 uses ASM_XXX for base types in this structure.  These
 | |
| /// have been changed to use the base types defined in the UEFI Specification. 
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT8   Reserved[0x200];
 | |
|   UINT8   Reserved1[0xf8];  // fe00h
 | |
|   UINT32  SMBASE;           // fef8h
 | |
|   UINT32  SMMRevId;         // fefch
 | |
|   UINT16  IORestart;        // ff00h
 | |
|   UINT16  AutoHALTRestart;  // ff02h
 | |
|   UINT32  IEDBASE;          // ff04h
 | |
|   UINT8   Reserved2[0x98];  // ff08h
 | |
|   UINT32  IOMemAddr;        // ffa0h
 | |
|   UINT32  IOMisc;           // ffa4h
 | |
|   UINT32  _ES;
 | |
|   UINT32  _CS;
 | |
|   UINT32  _SS;
 | |
|   UINT32  _DS;
 | |
|   UINT32  _FS;
 | |
|   UINT32  _GS;
 | |
|   UINT32  _LDTBase;
 | |
|   UINT32  _TR;
 | |
|   UINT32  _DR7;
 | |
|   UINT32  _DR6;
 | |
|   UINT32  _EAX;
 | |
|   UINT32  _ECX;
 | |
|   UINT32  _EDX;
 | |
|   UINT32  _EBX;
 | |
|   UINT32  _ESP;
 | |
|   UINT32  _EBP;
 | |
|   UINT32  _ESI;
 | |
|   UINT32  _EDI;
 | |
|   UINT32  _EIP;
 | |
|   UINT32  _EFLAGS;
 | |
|   UINT32  _CR3;
 | |
|   UINT32  _CR0;
 | |
| } EFI_SMM_CPU_STATE32;
 | |
| 
 | |
| ///
 | |
| /// This struct declaration does not exctly match the Framework SMM CIS 0.91 because 
 | |
| /// the Framework SMM CIS 0.91 uses ASM_XXX for base types in this structure.  These
 | |
| /// have been changed to use the base types defined in the UEFI Specification. 
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT8   Reserved1[0x1d0];  // fc00h
 | |
|   UINT32  GdtBaseHiDword;    // fdd0h
 | |
|   UINT32  LdtBaseHiDword;    // fdd4h
 | |
|   UINT32  IdtBaseHiDword;    // fdd8h
 | |
|   UINT8   Reserved2[0xc];    // fddch
 | |
|   UINT64  IO_EIP;            // fde8h
 | |
|   UINT8   Reserved3[0x50];   // fdf0h
 | |
|   UINT32  _CR4;              // fe40h
 | |
|   UINT8   Reserved4[0x48];   // fe44h
 | |
|   UINT32  GdtBaseLoDword;    // fe8ch
 | |
|   UINT32  GdtLimit;          // fe90h
 | |
|   UINT32  IdtBaseLoDword;    // fe94h
 | |
|   UINT32  IdtLimit;          // fe98h
 | |
|   UINT32  LdtBaseLoDword;    // fe9ch
 | |
|   UINT32  LdtLimit;          // fea0h
 | |
|   UINT32  LdtInfo;           // fea4h
 | |
|   UINT8   Reserved5[0x50];   // fea8h
 | |
|   UINT32  SMBASE;            // fef8h
 | |
|   UINT32  SMMRevId;          // fefch
 | |
|   UINT16  AutoHALTRestart;   // ff00h
 | |
|   UINT16  IORestart;         // ff02h
 | |
|   UINT32  IEDBASE;           // ff04h
 | |
|   UINT8   Reserved6[0x14];   // ff08h
 | |
|   UINT64  _R15;              // ff1ch
 | |
|   UINT64  _R14;
 | |
|   UINT64  _R13;
 | |
|   UINT64  _R12;
 | |
|   UINT64  _R11;
 | |
|   UINT64  _R10;
 | |
|   UINT64  _R9;
 | |
|   UINT64  _R8;
 | |
|   UINT64  _RAX;              // ff5ch
 | |
|   UINT64  _RCX;
 | |
|   UINT64  _RDX;
 | |
|   UINT64  _RBX;
 | |
|   UINT64  _RSP;
 | |
|   UINT64  _RBP;
 | |
|   UINT64  _RSI;
 | |
|   UINT64  _RDI;
 | |
|   UINT64  IOMemAddr;         // ff9ch
 | |
|   UINT32  IOMisc;            // ffa4h
 | |
|   UINT32  _ES;               // ffa8h
 | |
|   UINT32  _CS;
 | |
|   UINT32  _SS;
 | |
|   UINT32  _DS;
 | |
|   UINT32  _FS;
 | |
|   UINT32  _GS;
 | |
|   UINT32  _LDTR;             // ffc0h
 | |
|   UINT32  _TR;
 | |
|   UINT64  _DR7;              // ffc8h
 | |
|   UINT64  _DR6;
 | |
|   UINT64  _RIP;              // ffd8h
 | |
|   UINT64  IA32_EFER;         // ffe0h
 | |
|   UINT64  _RFLAGS;           // ffe8h
 | |
|   UINT64  _CR3;              // fff0h
 | |
|   UINT64  _CR0;              // fff8h
 | |
| } EFI_SMM_CPU_STATE64;
 | |
| 
 | |
| ///
 | |
| /// Union of CPU save-state strcutures for IA32 and X64.
 | |
| ///
 | |
| /// This union declaration does not exctly match the Framework SMM CIS 0.91 because the
 | |
| /// union in the Framework SMM CIS 0.91 contains an unnamed union member that causes build
 | |
| /// breaks on many compilers with high warning levels.  Instead, the UINT8 Reserved[0x200] 
 | |
| /// field has been moved into EFI_SMM_CPU_STATE32.  This maintains binary compatibility for
 | |
| /// the layout and also maintains source comaptibility for access of all fields in this
 | |
| /// union.
 | |
| ///
 | |
| typedef union  {
 | |
|   EFI_SMM_CPU_STATE32  x86;
 | |
|   EFI_SMM_CPU_STATE64  x64;
 | |
| } EFI_SMM_CPU_STATE;
 | |
| 
 | |
| #pragma pack ()
 | |
| 
 | |
| ///
 | |
| /// Provides a programatic means to access SMM save state.
 | |
| ///
 | |
| struct _EFI_SMM_CPU_SAVE_STATE_PROTOCOL {
 | |
|   ///
 | |
|   /// Reference to a list of save states.
 | |
|   ///
 | |
|   EFI_SMM_CPU_STATE  **CpuSaveState;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID gEfiSmmCpuSaveStateProtocolGuid;
 | |
| 
 | |
| #endif
 |