REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			240 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   EFI MM CPU Protocol as defined in the PI 1.5 specification.
 | |
| 
 | |
|   This protocol allows MM drivers to access architecture-standard registers from any of the CPU
 | |
|   save state areas. In some cases, difference processors provide the same information in the save state,
 | |
|   but not in the same format. These so-called pseudo-registers provide this information in a standard
 | |
|   format.
 | |
| 
 | |
|   Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _MM_CPU_H_
 | |
| #define _MM_CPU_H_
 | |
| 
 | |
| #define EFI_MM_CPU_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0xeb346b97, 0x975f, 0x4a9f, { 0x8b, 0x22, 0xf8, 0xe9, 0x2b, 0xb3, 0xd5, 0x69 } \
 | |
|   }
 | |
| 
 | |
| ///
 | |
| /// Save State register index
 | |
| ///
 | |
| typedef enum {
 | |
|   ///
 | |
|   /// x86/X64 standard registers
 | |
|   ///
 | |
|   EFI_MM_SAVE_STATE_REGISTER_GDTBASE    = 4,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_IDTBASE    = 5,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_LDTBASE    = 6,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_GDTLIMIT   = 7,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_IDTLIMIT   = 8,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_LDTLIMIT   = 9,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_LDTINFO    = 10,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_ES         = 20,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_CS         = 21,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_SS         = 22,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_DS         = 23,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_FS         = 24,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_GS         = 25,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_LDTR_SEL   = 26,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_TR_SEL     = 27,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_DR7        = 28,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_DR6        = 29,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_R8         = 30,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_R9         = 31,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_R10        = 32,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_R11        = 33,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_R12        = 34,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_R13        = 35,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_R14        = 36,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_R15        = 37,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RAX        = 38,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RBX        = 39,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RCX        = 40,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RDX        = 41,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RSP        = 42,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RBP        = 43,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RSI        = 44,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RDI        = 45,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RIP        = 46,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_RFLAGS     = 51,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_CR0        = 52,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_CR3        = 53,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_CR4        = 54,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_FCW        = 256,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_FSW        = 257,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_FTW        = 258,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_OPCODE     = 259,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_FP_EIP     = 260,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_FP_CS      = 261,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_DATAOFFSET = 262,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_FP_DS      = 263,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_MM0        = 264,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_MM1        = 265,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_MM2        = 266,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_MM3        = 267,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_MM4        = 268,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_MM5        = 269,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_MM6        = 270,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_MM7        = 271,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM0       = 272,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM1       = 273,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM2       = 274,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM3       = 275,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM4       = 276,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM5       = 277,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM6       = 278,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM7       = 279,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM8       = 280,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM9       = 281,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM10      = 282,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM11      = 283,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM12      = 284,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM13      = 285,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM14      = 286,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_XMM15      = 287,
 | |
|   ///
 | |
|   /// Pseudo-Registers
 | |
|   ///
 | |
|   EFI_MM_SAVE_STATE_REGISTER_IO           = 512,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_LMA          = 513,
 | |
|   EFI_MM_SAVE_STATE_REGISTER_PROCESSOR_ID = 514
 | |
| } EFI_MM_SAVE_STATE_REGISTER;
 | |
| 
 | |
| ///
 | |
| /// The EFI_MM_SAVE_STATE_REGISTER_LMA pseudo-register values
 | |
| /// If the processor acts in 32-bit mode at the time the MMI occurred, the pseudo register value
 | |
| /// EFI_MM_SAVE_STATE_REGISTER_LMA_32BIT is returned in Buffer. Otherwise,
 | |
| /// EFI_MM_SAVE_STATE_REGISTER_LMA_64BIT is returned in Buffer.
 | |
| ///
 | |
| #define EFI_MM_SAVE_STATE_REGISTER_LMA_32BIT  32
 | |
| #define EFI_MM_SAVE_STATE_REGISTER_LMA_64BIT  64
 | |
| 
 | |
| ///
 | |
| /// Size width of I/O instruction
 | |
| ///
 | |
| typedef enum {
 | |
|   EFI_MM_SAVE_STATE_IO_WIDTH_UINT8  = 0,
 | |
|   EFI_MM_SAVE_STATE_IO_WIDTH_UINT16 = 1,
 | |
|   EFI_MM_SAVE_STATE_IO_WIDTH_UINT32 = 2,
 | |
|   EFI_MM_SAVE_STATE_IO_WIDTH_UINT64 = 3
 | |
| } EFI_MM_SAVE_STATE_IO_WIDTH;
 | |
| 
 | |
| ///
 | |
| /// Types of I/O instruction
 | |
| ///
 | |
| typedef enum {
 | |
|   EFI_MM_SAVE_STATE_IO_TYPE_INPUT      = 1,
 | |
|   EFI_MM_SAVE_STATE_IO_TYPE_OUTPUT     = 2,
 | |
|   EFI_MM_SAVE_STATE_IO_TYPE_STRING     = 4,
 | |
|   EFI_MM_SAVE_STATE_IO_TYPE_REP_PREFIX = 8
 | |
| } EFI_MM_SAVE_STATE_IO_TYPE;
 | |
| 
 | |
| ///
 | |
| /// Structure of the data which is returned when ReadSaveState() is called with
 | |
| /// EFI_MM_SAVE_STATE_REGISTER_IO. If there was no I/O then ReadSaveState() will
 | |
| /// return EFI_NOT_FOUND.
 | |
| ///
 | |
| /// This structure describes the I/O operation which was in process when the MMI was generated.
 | |
| ///
 | |
| typedef struct _EFI_MM_SAVE_STATE_IO_INFO {
 | |
|   ///
 | |
|   /// For input instruction (IN, INS), this is data read before the MMI occurred. For output
 | |
|   /// instructions (OUT, OUTS) this is data that was written before the MMI occurred. The
 | |
|   /// width of the data is specified by IoWidth.
 | |
|   ///
 | |
|   UINT64                        IoData;
 | |
|   ///
 | |
|   /// The I/O port that was being accessed when the MMI was triggered.
 | |
|   ///
 | |
|   UINT16                        IoPort;
 | |
|   ///
 | |
|   /// Defines the size width (UINT8, UINT16, UINT32, UINT64) for IoData.
 | |
|   ///
 | |
|   EFI_MM_SAVE_STATE_IO_WIDTH    IoWidth;
 | |
|   ///
 | |
|   /// Defines type of I/O instruction.
 | |
|   ///
 | |
|   EFI_MM_SAVE_STATE_IO_TYPE     IoType;
 | |
| } EFI_MM_SAVE_STATE_IO_INFO;
 | |
| 
 | |
| typedef struct _EFI_MM_CPU_PROTOCOL EFI_MM_CPU_PROTOCOL;
 | |
| 
 | |
| /**
 | |
|   Read data from the CPU save state.
 | |
| 
 | |
|   This function is used to read the specified number of bytes of the specified register from the CPU
 | |
|   save state of the specified CPU and place the value into the buffer. If the CPU does not support the
 | |
|   specified register Register, then EFI_NOT_FOUND  should be returned. If the CPU does not
 | |
|   support the specified register width Width, then EFI_INVALID_PARAMETER is returned.
 | |
| 
 | |
|   @param[in]  This               The EFI_MM_CPU_PROTOCOL instance.
 | |
|   @param[in]  Width              The number of bytes to read from the CPU save state.
 | |
|   @param[in]  Register           Specifies the CPU register to read form the save state.
 | |
|   @param[in]  CpuIndex           Specifies the zero-based index of the CPU save state.
 | |
|   @param[out] Buffer             Upon return, this holds the CPU register value read from the save state.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The register was read from Save State.
 | |
|   @retval EFI_NOT_FOUND          The register is not defined for the Save State of Processor.
 | |
|   @retval EFI_INVALID_PARAMETER  Input parameters are not valid, for example, Processor No or register width
 | |
|                                  is not correct.This or Buffer is NULL.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_MM_READ_SAVE_STATE)(
 | |
|   IN CONST EFI_MM_CPU_PROTOCOL    *This,
 | |
|   IN UINTN                        Width,
 | |
|   IN EFI_MM_SAVE_STATE_REGISTER   Register,
 | |
|   IN UINTN                        CpuIndex,
 | |
|   OUT VOID                        *Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Write data to the CPU save state.
 | |
| 
 | |
|   This function is used to write the specified number of bytes of the specified register to the CPU save
 | |
|   state of the specified CPU and place the value into the buffer. If the CPU does not support the
 | |
|   specified register Register, then EFI_UNSUPPORTED should be returned. If the CPU does not
 | |
|   support the specified register width Width, then EFI_INVALID_PARAMETER is returned.
 | |
| 
 | |
|   @param[in]  This               The EFI_MM_CPU_PROTOCOL instance.
 | |
|   @param[in]  Width              The number of bytes to write to the CPU save state.
 | |
|   @param[in]  Register           Specifies the CPU register to write to the save state.
 | |
|   @param[in]  CpuIndex           Specifies the zero-based index of the CPU save state.
 | |
|   @param[in]  Buffer             Upon entry, this holds the new CPU register value.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The register was written to Save State.
 | |
|   @retval EFI_NOT_FOUND          The register is not defined for the Save State of Processor.
 | |
|   @retval EFI_INVALID_PARAMETER  Input parameters are not valid. For example:
 | |
|                                  ProcessorIndex or Width is not correct.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_MM_WRITE_SAVE_STATE)(
 | |
|   IN CONST EFI_MM_CPU_PROTOCOL    *This,
 | |
|   IN UINTN                        Width,
 | |
|   IN EFI_MM_SAVE_STATE_REGISTER   Register,
 | |
|   IN UINTN                        CpuIndex,
 | |
|   IN CONST VOID                   *Buffer
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// EFI MM CPU Protocol provides access to CPU-related information while in MM.
 | |
| ///
 | |
| /// This protocol allows MM drivers to access architecture-standard registers from any of the CPU
 | |
| /// save state areas. In some cases, difference processors provide the same information in the save state,
 | |
| /// but not in the same format. These so-called pseudo-registers provide this information in a standard
 | |
| /// format.
 | |
| ///
 | |
| struct _EFI_MM_CPU_PROTOCOL {
 | |
|   EFI_MM_READ_SAVE_STATE     ReadSaveState;
 | |
|   EFI_MM_WRITE_SAVE_STATE    WriteSaveState;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID  gEfiMmCpuProtocolGuid;
 | |
| 
 | |
| #endif
 |