https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			212 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Header file for SMI handler profile definition.
 | 
						|
 | 
						|
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef  _SMI_HANDLER_PROFILE_H_
 | 
						|
#define  _SMI_HANDLER_PROFILE_H_
 | 
						|
 | 
						|
#include <PiSmm.h>
 | 
						|
#include <Protocol/SmmGpiDispatch2.h>
 | 
						|
#include <Protocol/SmmIoTrapDispatch2.h>
 | 
						|
#include <Protocol/SmmPeriodicTimerDispatch2.h>
 | 
						|
#include <Protocol/SmmPowerButtonDispatch2.h>
 | 
						|
#include <Protocol/SmmStandbyButtonDispatch2.h>
 | 
						|
#include <Protocol/SmmSwDispatch2.h>
 | 
						|
#include <Protocol/SmmSxDispatch2.h>
 | 
						|
#include <Protocol/SmmUsbDispatch2.h>
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32                       Signature;
 | 
						|
  UINT32                       Length;
 | 
						|
  UINT32                       Revision;
 | 
						|
  UINT8                        Reserved[4];
 | 
						|
} SMM_CORE_DATABASE_COMMON_HEADER;
 | 
						|
 | 
						|
#define SMM_CORE_IMAGE_DATABASE_SIGNATURE SIGNATURE_32 ('S','C','I','D')
 | 
						|
#define SMM_CORE_IMAGE_DATABASE_REVISION  0x0001
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMM_CORE_DATABASE_COMMON_HEADER     Header;
 | 
						|
  EFI_GUID                            FileGuid;
 | 
						|
  PHYSICAL_ADDRESS                    EntryPoint;
 | 
						|
  PHYSICAL_ADDRESS                    ImageBase;
 | 
						|
  UINT64                              ImageSize;
 | 
						|
  UINT32                              ImageRef;
 | 
						|
  UINT16                              PdbStringOffset;
 | 
						|
  UINT8                               Reserved[2];
 | 
						|
//CHAR8                               PdbString[];
 | 
						|
} SMM_CORE_IMAGE_DATABASE_STRUCTURE;
 | 
						|
 | 
						|
#define SMM_CORE_SMI_DATABASE_SIGNATURE SIGNATURE_32 ('S','C','S','D')
 | 
						|
#define SMM_CORE_SMI_DATABASE_REVISION  0x0001
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  SmmCoreSmiHandlerCategoryRootHandler,
 | 
						|
  SmmCoreSmiHandlerCategoryGuidHandler,
 | 
						|
  SmmCoreSmiHandlerCategoryHardwareHandler,
 | 
						|
} SMM_CORE_SMI_HANDLER_CATEGORY;
 | 
						|
 | 
						|
//
 | 
						|
// Context for SmmCoreSmiHandlerCategoryRootHandler:
 | 
						|
//   NULL
 | 
						|
// Context for SmmCoreSmiHandlerCategoryGuidHandler:
 | 
						|
//   NULL
 | 
						|
// Context for SmmCoreSmiHandlerCategoryHardwareHandler:
 | 
						|
//   (NOTE: The context field should NOT include any data pointer.)
 | 
						|
//   gEfiSmmSwDispatch2ProtocolGuid:            (EFI_SMM_SW_REGISTER_CONTEXT => SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT)
 | 
						|
//   gEfiSmmSxDispatch2ProtocolGuid:            EFI_SMM_SX_REGISTER_CONTEXT
 | 
						|
//   gEfiSmmPowerButtonDispatch2ProtocolGuid:   EFI_SMM_POWER_BUTTON_REGISTER_CONTEXT
 | 
						|
//   gEfiSmmStandbyButtonDispatch2ProtocolGuid: EFI_SMM_STANDBY_BUTTON_REGISTER_CONTEXT
 | 
						|
//   gEfiSmmPeriodicTimerDispatch2ProtocolGuid: EFI_SMM_PERIODIC_TIMER_CONTEXT
 | 
						|
//   gEfiSmmGpiDispatch2ProtocolGuid:           EFI_SMM_GPI_REGISTER_CONTEXT
 | 
						|
//   gEfiSmmIoTrapDispatch2ProtocolGuid:        EFI_SMM_IO_TRAP_REGISTER_CONTEXT
 | 
						|
//   gEfiSmmUsbDispatch2ProtocolGuid:           (EFI_SMM_USB_REGISTER_CONTEXT => SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT)
 | 
						|
//   Other:                                     GUID specific
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  EFI_USB_SMI_TYPE          Type;
 | 
						|
  UINT32                    DevicePathSize;
 | 
						|
//UINT8                     DevicePath[DevicePathSize];
 | 
						|
} SMI_HANDLER_PROFILE_USB_REGISTER_CONTEXT;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT64                    SwSmiInputValue;
 | 
						|
} SMI_HANDLER_PROFILE_SW_REGISTER_CONTEXT;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32                Length;
 | 
						|
  UINT32                ImageRef;
 | 
						|
  PHYSICAL_ADDRESS      CallerAddr;
 | 
						|
  PHYSICAL_ADDRESS      Handler;
 | 
						|
  UINT16                ContextBufferOffset;
 | 
						|
  UINT8                 Reserved[2];
 | 
						|
  UINT32                ContextBufferSize;
 | 
						|
//UINT8                 ContextBuffer[];
 | 
						|
} SMM_CORE_SMI_HANDLER_STRUCTURE;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMM_CORE_DATABASE_COMMON_HEADER     Header;
 | 
						|
  EFI_GUID                            HandlerType;
 | 
						|
  UINT32                              HandlerCategory;
 | 
						|
  UINT32                              HandlerCount;
 | 
						|
//SMM_CORE_SMI_HANDLER_STRUCTURE      Handler[HandlerCount];
 | 
						|
} SMM_CORE_SMI_DATABASE_STRUCTURE;
 | 
						|
 | 
						|
//
 | 
						|
// Layout:
 | 
						|
// +-------------------------------------+
 | 
						|
// | SMM_CORE_IMAGE_DATABASE_STRUCTURE   |
 | 
						|
// +-------------------------------------+
 | 
						|
// | SMM_CORE_SMI_DATABASE_STRUCTURE     |
 | 
						|
// +-------------------------------------+
 | 
						|
//
 | 
						|
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// SMM_CORE dump command
 | 
						|
//
 | 
						|
#define SMI_HANDLER_PROFILE_COMMAND_GET_INFO           0x1
 | 
						|
#define SMI_HANDLER_PROFILE_COMMAND_GET_DATA_BY_OFFSET 0x2
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32                            Command;
 | 
						|
  UINT32                            DataLength;
 | 
						|
  UINT64                            ReturnStatus;
 | 
						|
} SMI_HANDLER_PROFILE_PARAMETER_HEADER;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMI_HANDLER_PROFILE_PARAMETER_HEADER    Header;
 | 
						|
  UINT64                                  DataSize;
 | 
						|
} SMI_HANDLER_PROFILE_PARAMETER_GET_INFO;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMI_HANDLER_PROFILE_PARAMETER_HEADER    Header;
 | 
						|
  //
 | 
						|
  // On input, data buffer size.
 | 
						|
  // On output, actual data buffer size copied.
 | 
						|
  //
 | 
						|
  UINT64                                  DataSize;
 | 
						|
  PHYSICAL_ADDRESS                        DataBuffer;
 | 
						|
  //
 | 
						|
  // On input, data buffer offset to copy.
 | 
						|
  // On output, next time data buffer offset to copy.
 | 
						|
  //
 | 
						|
  UINT64                                  DataOffset;
 | 
						|
} SMI_HANDLER_PROFILE_PARAMETER_GET_DATA_BY_OFFSET;
 | 
						|
 | 
						|
#define SMI_HANDLER_PROFILE_GUID {0x49174342, 0x7108, 0x409b, {0x8b, 0xbe, 0x65, 0xfd, 0xa8, 0x53, 0x89, 0xf5}}
 | 
						|
 | 
						|
extern EFI_GUID gSmiHandlerProfileGuid;
 | 
						|
 | 
						|
typedef struct _SMI_HANDLER_PROFILE_PROTOCOL  SMI_HANDLER_PROFILE_PROTOCOL;
 | 
						|
 | 
						|
/**
 | 
						|
  This function is called by SmmChildDispatcher module to report
 | 
						|
  a new SMI handler is registered, to SmmCore.
 | 
						|
 | 
						|
  @param This            The protocol instance
 | 
						|
  @param HandlerGuid     The GUID to identify the type of the handler.
 | 
						|
                         For the SmmChildDispatch protocol, the HandlerGuid
 | 
						|
                         must be the GUID of SmmChildDispatch protocol.
 | 
						|
  @param Handler         The SMI handler.
 | 
						|
  @param CallerAddress   The address of the module who registers the SMI handler.
 | 
						|
  @param Context         The context of the SMI handler.
 | 
						|
                         For the SmmChildDispatch protocol, the Context
 | 
						|
                         must match the one defined for SmmChildDispatch protocol.
 | 
						|
  @param ContextSize     The size of the context in bytes.
 | 
						|
                         For the SmmChildDispatch protocol, the Context
 | 
						|
                         must match the one defined for SmmChildDispatch protocol.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The information is recorded.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  There is no enough resource to record the information.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI  *SMI_HANDLER_PROFILE_REGISTER_HANDLER) (
 | 
						|
  IN SMI_HANDLER_PROFILE_PROTOCOL   *This,
 | 
						|
  IN EFI_GUID                       *HandlerGuid,
 | 
						|
  IN EFI_SMM_HANDLER_ENTRY_POINT2   Handler,
 | 
						|
  IN PHYSICAL_ADDRESS               CallerAddress,
 | 
						|
  IN VOID                           *Context, OPTIONAL
 | 
						|
  IN UINTN                          ContextSize OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is called by SmmChildDispatcher module to report
 | 
						|
  an existing SMI handler is unregistered, to SmmCore.
 | 
						|
 | 
						|
  @param This            The protocol instance
 | 
						|
  @param HandlerGuid     The GUID to identify the type of the handler.
 | 
						|
                         For the SmmChildDispatch protocol, the HandlerGuid
 | 
						|
                         must be the GUID of SmmChildDispatch protocol.
 | 
						|
  @param Handler         The SMI handler.
 | 
						|
  @param Context         The context of the SMI handler.
 | 
						|
                         If it is NOT NULL, it will be used to check what is registered.
 | 
						|
  @param ContextSize     The size of the context in bytes.
 | 
						|
                         If Context is NOT NULL, it will be used to check what is registered.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The original record is removed.
 | 
						|
  @retval EFI_NOT_FOUND         There is no record for the HandlerGuid and handler.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI  *SMI_HANDLER_PROFILE_UNREGISTER_HANDLER) (
 | 
						|
  IN SMI_HANDLER_PROFILE_PROTOCOL   *This,
 | 
						|
  IN EFI_GUID                       *HandlerGuid,
 | 
						|
  IN EFI_SMM_HANDLER_ENTRY_POINT2   Handler,
 | 
						|
  IN VOID                           *Context, OPTIONAL
 | 
						|
  IN UINTN                          ContextSize OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
struct _SMI_HANDLER_PROFILE_PROTOCOL {
 | 
						|
  SMI_HANDLER_PROFILE_REGISTER_HANDLER     RegisterHandler;
 | 
						|
  SMI_HANDLER_PROFILE_UNREGISTER_HANDLER   UnregisterHandler;
 | 
						|
};
 | 
						|
 | 
						|
#endif
 |