git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10403 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			208 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  MCA/PMI/INIT Protocol as defined in PI Specification VOLUME 4.
 | 
						|
 | 
						|
  This protocol provides services to handle Machine Checks (MCA),
 | 
						|
  Initialization (INIT) events, and Platform Management Interrupt (PMI) events
 | 
						|
  on an Intel Itanium Processor Family based system.
 | 
						|
 | 
						|
  Copyright (c) 2009 - 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         
 | 
						|
  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.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __MCA_INIT_PMI_PROTOCOL_H__
 | 
						|
#define __MCA_INIT_PMI_PROTOCOL_H__
 | 
						|
 | 
						|
///
 | 
						|
/// Global ID for the MCA/PMI/INIT Protocol.
 | 
						|
///
 | 
						|
#define EFI_SAL_MCA_INIT_PMI_PROTOCOL_GUID \
 | 
						|
  { 0xb60dc6e8, 0x3b6f, 0x11d5, {0xaf, 0x9, 0x0, 0xa0, 0xc9, 0x44, 0xa0, 0x5b} }
 | 
						|
 | 
						|
 | 
						|
///
 | 
						|
/// Declare forward reference for the Timer Architectural Protocol
 | 
						|
///
 | 
						|
typedef struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL  EFI_SAL_MCA_INIT_PMI_PROTOCOL;
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
///
 | 
						|
/// MCA Records Structure
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  UINT64  First : 1;
 | 
						|
  UINT64  Last : 1;
 | 
						|
  UINT64  EntryCount : 16;
 | 
						|
  UINT64  DispatchedCount : 16;
 | 
						|
  UINT64  Reserved : 30;
 | 
						|
} SAL_MCA_COUNT_STRUCTURE;
 | 
						|
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
/**
 | 
						|
  Prototype of MCA handler.
 | 
						|
 | 
						|
  @param  ModuleGlobal                The context of MCA Handler
 | 
						|
  @param  ProcessorStateParameters    The processor state parameters (PSP)
 | 
						|
  @param  MinstateBase                Base address of the min-state
 | 
						|
  @param  RendezvouseStateInformation Rendezvous state information to be passed to
 | 
						|
                                      the OS on OS MCA entry
 | 
						|
  @param  CpuIndex                    Index of the logical processor
 | 
						|
  @param  McaCountStructure           Pointer to the MCA records structure
 | 
						|
  @param  CorrectedMachineCheck       This flag is set to TRUE is the MCA has been
 | 
						|
                                      corrected by the handler or by a previous handler
 | 
						|
 | 
						|
  @retval EFI_SUCCESS                 Handler successfully returned
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SAL_MCA_HANDLER)(
 | 
						|
  IN  VOID                    *ModuleGlobal,
 | 
						|
  IN  UINT64                  ProcessorStateParameters,
 | 
						|
  IN  EFI_PHYSICAL_ADDRESS    MinstateBase,
 | 
						|
  IN  UINT64                  RendezvouseStateInformation,
 | 
						|
  IN  UINT64                  CpuIndex,
 | 
						|
  IN  SAL_MCA_COUNT_STRUCTURE *McaCountStructure,
 | 
						|
  OUT BOOLEAN                 *CorrectedMachineCheck
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Prototype of INIT handler.
 | 
						|
 | 
						|
  @param  ModuleGlobal                The context of INIT Handler
 | 
						|
  @param  ProcessorStateParameters    The processor state parameters (PSP)
 | 
						|
  @param  MinstateBase                Base address of the min-state
 | 
						|
  @param  McaInProgress               This flag indicates if an MCA is in progress
 | 
						|
  @param  CpuIndex                    Index of the logical processor
 | 
						|
  @param  McaCountStructure           Pointer to the MCA records structure
 | 
						|
  @param  DumpSwitchPressed           This flag indicates the crash dump switch has been pressed
 | 
						|
 | 
						|
  @retval EFI_SUCCESS                 Handler successfully returned
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SAL_INIT_HANDLER)(
 | 
						|
  IN  VOID                     *ModuleGlobal,
 | 
						|
  IN  UINT64                   ProcessorStateParameters,
 | 
						|
  IN  EFI_PHYSICAL_ADDRESS     MinstateBase,
 | 
						|
  IN  BOOLEAN                  McaInProgress,
 | 
						|
  IN  UINT64                   CpuIndex,
 | 
						|
  IN  SAL_MCA_COUNT_STRUCTURE  *McaCountStructure,
 | 
						|
  OUT BOOLEAN                  *DumpSwitchPressed
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Prototype of PMI handler
 | 
						|
 | 
						|
  @param  ModuleGlobal                The context of PMI Handler
 | 
						|
  @param  CpuIndex                    Index of the logical processor
 | 
						|
  @param  PmiVector                   The PMI vector number as received from the PALE_PMI exit state (GR24)
 | 
						|
 | 
						|
  @retval EFI_SUCCESS                 Handler successfully returned
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SAL_PMI_HANDLER)(
 | 
						|
  IN VOID          *ModuleGlobal,
 | 
						|
  IN UINT64        CpuIndex,
 | 
						|
  IN UINT64        PmiVector
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Register a MCA handler with the MCA dispatcher.
 | 
						|
 | 
						|
  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
 | 
						|
  @param  McaHandler                  The MCA handler to register
 | 
						|
  @param  ModuleGlobal                The context of MCA Handler
 | 
						|
  @param  MakeFirst                   This flag specifies the handler should be made first in the list
 | 
						|
  @param  MakeLast                    This flag specifies the handler should be made last in the list
 | 
						|
 | 
						|
  @retval EFI_SUCCESS                 MCA Handle was registered
 | 
						|
  @retval EFI_OUT_OF_RESOURCES        No more resources to register an MCA handler
 | 
						|
  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SAL_REGISTER_MCA_HANDLER)(
 | 
						|
  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,
 | 
						|
  IN  EFI_SAL_MCA_HANDLER                   McaHandler,
 | 
						|
  IN  VOID                                  *ModuleGlobal,
 | 
						|
  IN  BOOLEAN                               MakeFirst,
 | 
						|
  IN  BOOLEAN                               MakeLast
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Register an INIT handler with the INIT dispatcher.
 | 
						|
 | 
						|
  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
 | 
						|
  @param  InitHandler                 The INIT handler to register
 | 
						|
  @param  ModuleGlobal                The context of INIT Handler
 | 
						|
  @param  MakeFirst                   This flag specifies the handler should be made first in the list
 | 
						|
  @param  MakeLast                    This flag specifies the handler should be made last in the list
 | 
						|
 | 
						|
  @retval EFI_SUCCESS                 INIT Handle was registered
 | 
						|
  @retval EFI_OUT_OF_RESOURCES        No more resources to register an INIT handler
 | 
						|
  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SAL_REGISTER_INIT_HANDLER)(
 | 
						|
  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,
 | 
						|
  IN  EFI_SAL_INIT_HANDLER                  InitHandler,
 | 
						|
  IN  VOID                                  *ModuleGlobal,
 | 
						|
  IN  BOOLEAN                               MakeFirst,
 | 
						|
  IN  BOOLEAN                               MakeLast
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Register a PMI handler with the PMI dispatcher.
 | 
						|
 | 
						|
  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
 | 
						|
  @param  PmiHandler                  The PMI handler to register
 | 
						|
  @param  ModuleGlobal                The context of PMI Handler
 | 
						|
  @param  MakeFirst                   This flag specifies the handler should be made first in the list
 | 
						|
  @param  MakeLast                    This flag specifies the handler should be made last in the list
 | 
						|
 | 
						|
  @retval EFI_SUCCESS                 PMI Handle was registered
 | 
						|
  @retval EFI_OUT_OF_RESOURCES        No more resources to register an PMI handler
 | 
						|
  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SAL_REGISTER_PMI_HANDLER)(
 | 
						|
  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,
 | 
						|
  IN  EFI_SAL_PMI_HANDLER                   PmiHandler,
 | 
						|
  IN  VOID                                  *ModuleGlobal,
 | 
						|
  IN  BOOLEAN                               MakeFirst,
 | 
						|
  IN  BOOLEAN                               MakeLast
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// This protocol is used to register MCA, INIT and PMI handlers with their respective dispatcher
 | 
						|
///
 | 
						|
struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL {
 | 
						|
  EFI_SAL_REGISTER_MCA_HANDLER  RegisterMcaHandler;
 | 
						|
  EFI_SAL_REGISTER_INIT_HANDLER RegisterInitHandler;
 | 
						|
  EFI_SAL_REGISTER_PMI_HANDLER  RegisterPmiHandler;
 | 
						|
  BOOLEAN                       McaInProgress;       ///< Whether MCA handler is in progress
 | 
						|
  BOOLEAN                       InitInProgress;      ///< Whether Init handler is in progress
 | 
						|
  BOOLEAN                       PmiInProgress;       ///< Whether Pmi handler is in progress
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiSalMcaInitPmiProtocolGuid;
 | 
						|
 | 
						|
#endif
 | 
						|
 |