4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI SMM CPU Protocol as defined in the PI 1.2 specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This protocol allows SMM drivers to access architecture-standard registers from any of the CPU
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync save state areas. In some cases, difference processors provide the same information in the save state,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync but not in the same format. These so-called pseudo-registers provide this information in a standard
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _SMM_CPU_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _SMM_CPU_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_SMM_CPU_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0xeb346b97, 0x975f, 0x4a9f, { 0x8b, 0x22, 0xf8, 0xe9, 0x2b, 0xb3, 0xd5, 0x69 } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Save State register index
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// x86/X64 standard registers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_GDTBASE = 4,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_IDTBASE = 5,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_LDTBASE = 6,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_GDTLIMIT = 7,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_IDTLIMIT = 8,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_LDTLIMIT = 9,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_LDTINFO = 10,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_ES = 20,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_CS = 21,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_SS = 22,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_DS = 23,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_FS = 24,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_GS = 25,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_LDTR_SEL = 26,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_TR_SEL = 27,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_DR7 = 28,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_DR6 = 29,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_R8 = 30,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_R9 = 31,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_R10 = 32,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_R11 = 33,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_R12 = 34,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_R13 = 35,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_R14 = 36,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_R15 = 37,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RAX = 38,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RBX = 39,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RCX = 40,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RDX = 41,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RSP = 42,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RBP = 43,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RSI = 44,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RDI = 45,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RIP = 46,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_RFLAGS = 51,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_CR0 = 52,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_CR3 = 53,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_CR4 = 54,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_FCW = 256,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_FSW = 257,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_FTW = 258,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_OPCODE = 259,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_FP_EIP = 260,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_FP_CS = 261,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_DATAOFFSET = 262,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_FP_DS = 263,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_MM0 = 264,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_MM1 = 265,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_MM2 = 266,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_MM3 = 267,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_MM4 = 268,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_MM5 = 269,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_MM6 = 270,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_MM7 = 271,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM0 = 272,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM1 = 273,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM2 = 274,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM3 = 275,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM4 = 276,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM5 = 277,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM6 = 278,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM7 = 279,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM8 = 280,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM9 = 281,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM10 = 282,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM11 = 283,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM12 = 284,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM13 = 285,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM14 = 286,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_XMM15 = 287,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Pseudo-Registers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_IO = 512,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_REGISTER_LMA = 513
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_SMM_SAVE_STATE_REGISTER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI_SMM_SAVE_STATE_REGISTER_LMA pseudo-register values
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// If the processor acts in 32-bit mode at the time the SMI occurred, the pseudo register value
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI_SMM_SAVE_STATE_REGISTER_LMA_32BIT is returned in Buffer. Otherwise,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI_SMM_SAVE_STATE_REGISTER_LMA_64BIT is returned in Buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_SMM_SAVE_STATE_REGISTER_LMA_32BIT 32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_SMM_SAVE_STATE_REGISTER_LMA_64BIT 64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Size width of I/O instruction
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_WIDTH_UINT8 = 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_WIDTH_UINT16 = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_WIDTH_UINT32 = 2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_WIDTH_UINT64 = 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_SMM_SAVE_STATE_IO_WIDTH;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Types of I/O instruction
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_TYPE_INPUT = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_TYPE_OUTPUT = 2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_TYPE_STRING = 4,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_TYPE_REP_PREFIX = 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_SMM_SAVE_STATE_IO_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Structure of the data which is returned when ReadSaveState() is called with
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI_SMM_SAVE_STATE_REGISTER_IO. If there was no I/O then ReadSaveState() will
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// return EFI_NOT_FOUND.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// This structure describes the I/O operation which was in process when the SMI was generated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_SMM_SAVE_STATE_IO_INFO {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// For input instruction (IN, INS), this is data read before the SMI occurred. For output
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// instructions (OUT, OUTS) this is data that was written before the SMI occurred. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// width of the data is specified by IoWidth.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 IoData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The I/O port that was being accessed when the SMI was triggered.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 IoPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Defines the size width (UINT8, UINT16, UINT32, UINT64) for IoData.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_WIDTH IoWidth;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Defines type of I/O instruction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_SAVE_STATE_IO_TYPE IoType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_SMM_SAVE_STATE_IO_INFO;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_SMM_CPU_PROTOCOL EFI_SMM_CPU_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read data from the CPU save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is used to read the specified number of bytes of the specified register from the CPU
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync save state of the specified CPU and place the value into the buffer. If the CPU does not support the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified register Register, then EFI_NOT_FOUND should be returned. If the CPU does not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync support the specified register width Width, then EFI_INVALID_PARAMETER is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This The EFI_SMM_CPU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Width The number of bytes to read from the CPU save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Register Specifies the CPU register to read form the save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] CpuIndex Specifies the zero-based index of the CPU save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Buffer Upon return, this holds the CPU register value read from the save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The register was read from Save State.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND The register is not defined for the Save State of Processor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Input parameters are not valid, for example, Processor No or register width
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is not correct.This or Buffer is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_READ_SAVE_STATE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_SMM_CPU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Width,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SMM_SAVE_STATE_REGISTER Register,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN CpuIndex,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID *Buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Write data to the CPU save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is used to write the specified number of bytes of the specified register to the CPU save
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync state of the specified CPU and place the value into the buffer. If the CPU does not support the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified register Register, then EFI_UNSUPPORTED should be returned. If the CPU does not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync support the specified register width Width, then EFI_INVALID_PARAMETER is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This The EFI_SMM_CPU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Width The number of bytes to write to the CPU save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Register Specifies the CPU register to write to the save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] CpuIndex Specifies the zero-based index of the CPU save state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Buffer Upon entry, this holds the new CPU register value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The register was written to Save State.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND The register is not defined for the Save State of Processor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Input parameters are not valid. For example:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProcessorIndex or Width is not correct.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_WRITE_SAVE_STATE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_SMM_CPU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Width,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SMM_SAVE_STATE_REGISTER Register,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN CpuIndex,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST VOID *Buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// EFI SMM CPU Protocol provides access to CPU-related information while in SMM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// This protocol allows SMM drivers to access architecture-standard registers from any of the CPU
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// save state areas. In some cases, difference processors provide the same information in the save state,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// but not in the same format. These so-called pseudo-registers provide this information in a standard
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_SMM_CPU_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_READ_SAVE_STATE ReadSaveState;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_WRITE_SAVE_STATE WriteSaveState;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiSmmCpuProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync