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
 |