git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11009 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			223 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The data hub protocol is used both by agents wishing to log
 | |
|   data and those wishing to be made aware of all information that
 | |
|   has been logged.  This protocol may only be called <= TPL_NOTIFY.
 | |
| 
 | |
| Copyright (c) 2007 - 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 that 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.
 | |
| 
 | |
|   @par Revision Reference:
 | |
|   The Data Hub Protocol is defined in Framework for EFI Data Hub Specification
 | |
|   Version 0.9.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __DATA_HUB_H__
 | |
| #define __DATA_HUB_H__
 | |
| 
 | |
| #define EFI_DATA_HUB_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0xae80d021, 0x618e, 0x11d4, {0xbc, 0xd7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } \
 | |
|   }
 | |
| 
 | |
| //
 | |
| // EFI generic Data Hub Header
 | |
| //
 | |
| // A Data Record is an EFI_DATA_RECORD_HEADER followed by RecordSize bytes of
 | |
| //  data. The format of the data is defined by the DataRecordGuid.
 | |
| //
 | |
| // If EFI_DATA_RECORD_HEADER is extended in the future, the Version number and HeaderSize must
 | |
| //  change. 
 | |
| //
 | |
| // The logger is responcible for initializing:
 | |
| //  Version, HeaderSize, RecordSize, DataRecordGuid, DataRecordClass
 | |
| //
 | |
| // The Data Hub driver is responcible for initializing:
 | |
| //   LogTime and LogMonotonicCount.
 | |
| //
 | |
| #define EFI_DATA_RECORD_HEADER_VERSION  0x0100
 | |
| typedef struct {
 | |
|   UINT16    Version;
 | |
|   UINT16    HeaderSize;
 | |
|   UINT32    RecordSize;
 | |
|   EFI_GUID  DataRecordGuid;
 | |
|   EFI_GUID  ProducerName;
 | |
|   UINT64    DataRecordClass;
 | |
|   EFI_TIME  LogTime;
 | |
|   UINT64    LogMonotonicCount;
 | |
| } EFI_DATA_RECORD_HEADER;
 | |
| 
 | |
| //
 | |
| // Definition of DataRecordClass. These are used to filter out class types
 | |
| // at a very high level. The DataRecordGuid still defines the format of
 | |
| // the data. See the Data Hub Specification for rules on what can and can not be a
 | |
| // new DataRecordClass
 | |
| //
 | |
| #define EFI_DATA_RECORD_CLASS_DEBUG         0x0000000000000001
 | |
| #define EFI_DATA_RECORD_CLASS_ERROR         0x0000000000000002
 | |
| #define EFI_DATA_RECORD_CLASS_DATA          0x0000000000000004
 | |
| #define EFI_DATA_RECORD_CLASS_PROGRESS_CODE 0x0000000000000008
 | |
| 
 | |
| //
 | |
| // Forward reference for pure ANSI compatability
 | |
| //
 | |
| typedef struct _EFI_DATA_HUB_PROTOCOL EFI_DATA_HUB_PROTOCOL;
 | |
| 
 | |
| /**
 | |
|   Logs a data record to the system event log.
 | |
| 
 | |
|   @param  This                  The EFI_DATA_HUB_PROTOCOL instance.
 | |
|   @param  DataRecordGuid        A GUID that indicates the format of the data passed into RawData.
 | |
|   @param  ProducerName          A GUID that indicates the identity of the caller to this API.
 | |
|   @param  DataRecordClass       This class indicates the generic type of the data record.
 | |
|   @param  RawData               The DataRecordGuid-defined data to be logged.
 | |
|   @param  RawDataSize           The size in bytes of RawData.
 | |
| 
 | |
|   @retval EFI_SUCCESS           Data was logged.
 | |
|   @retval EFI_OUT_OF_RESOURCES  Data was not logged due to lack of system resources.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_DATA_HUB_LOG_DATA)(
 | |
|   IN  EFI_DATA_HUB_PROTOCOL   *This,
 | |
|   IN  EFI_GUID                *DataRecordGuid,
 | |
|   IN  EFI_GUID                *ProducerName,
 | |
|   IN  UINT64                  DataRecordClass,
 | |
|   IN  VOID                    *RawData,
 | |
|   IN  UINT32                  RawDataSize
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Allows the system data log to be searched.
 | |
| 
 | |
|   @param  This                  The EFI_DATA_HUB_PROTOCOL instance.
 | |
|   @param  MonotonicCount        On input, it specifies the Record to return.
 | |
|                                 An input of zero means to return the first record, 
 | |
|                                 as does an input of one.
 | |
|   @param  FilterDriver          If FilterDriver is not passed in a MonotonicCount
 | |
|                                 of zero, it means to return the first data record. 
 | |
|                                 If FilterDriver is passed in, then a MonotonicCount 
 | |
|                                 of zero means to return the first data not yet read
 | |
|                                 by FilterDriver.
 | |
|   @param  Record                Returns a dynamically allocated memory buffer with 
 | |
|                                 a data record that matches MonotonicCount.
 | |
| 
 | |
|   @retval EFI_SUCCESS           Data was returned in Record.
 | |
|   @retval EFI_INVALID_PARAMETER FilterDriver was passed in but does not exist.
 | |
|   @retval EFI_NOT_FOUND         MonotonicCount does not match any data record
 | |
|                                 in the system. If a MonotonicCount of zero was 
 | |
|                                 passed in, then no data records exist in the system.
 | |
|   @retval EFI_OUT_OF_RESOURCES  Record was not returned due to lack
 | |
|                                 of system resources.
 | |
|   @note  Inconsistent with specification here: 
 | |
|          In Framework for EFI Data Hub Specification, Version 0.9, This definition 
 | |
|          is named as EFI_DATA_HUB_GET_NEXT_DATA_RECORD. The inconsistency is 
 | |
|          maintained for backward compatibility. 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_DATA_HUB_GET_NEXT_RECORD)(
 | |
|   IN EFI_DATA_HUB_PROTOCOL    *This,
 | |
|   IN OUT  UINT64              *MonotonicCount,
 | |
|   IN  EFI_EVENT               *FilterDriver OPTIONAL,
 | |
|   OUT EFI_DATA_RECORD_HEADER  **Record
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Registers an event to be signaled every time a data record is logged in the system.
 | |
| 
 | |
|   @param  This                  The EFI_DATA_HUB_PROTOCOL instance.
 | |
|   @param  FilterEvent           The EFI_EVENT to signal whenever data that matches
 | |
|                                 FilterClass is logged in the system.
 | |
|   @param  FilterTpl             The maximum EFI_TPL at which FilterEvent can be 
 | |
|                                 signaled. It is strongly recommended that you use  
 | |
|                                 the lowest EFI_TPL possible. 
 | |
|   @param  FilterClass           FilterEvent will be signaled whenever a bit
 | |
|                                 in EFI_DATA_RECORD_HEADER.DataRecordClass is also 
 | |
|                                 set in FilterClass. If FilterClass is zero, no 
 | |
|                                 class-based filtering will be performed.
 | |
|   @param  FilterDataRecordGuid  FilterEvent will be signaled whenever
 | |
|                                 FilterDataRecordGuid matches 
 | |
|                                 EFI_DATA_RECORD_HEADER.DataRecordGuid. 
 | |
|                                 If FilterDataRecordGuid is NULL, then no GUID-based 
 | |
|                                 filtering will be performed.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The filter driver event was registered
 | |
|   @retval EFI_ALREADY_STARTED   FilterEvent was previously registered and cannot 
 | |
|                                 be registered again.
 | |
|   @retval EFI_OUT_OF_RESOURCES  The filter driver event was not registered
 | |
|                                 due to lack of system resources.
 | |
|   @note  Inconsistent with specification here: 
 | |
|          In Framework for EFI Data Hub Specification, Version 0.9, This definition 
 | |
|          is named as EFI_DATA_HUB_REGISTER_DATA_FILTER_DRIVER. The inconsistency 
 | |
|          is maintained for backward compatibility. 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_DATA_HUB_REGISTER_FILTER_DRIVER)(
 | |
|   IN EFI_DATA_HUB_PROTOCOL    *This,
 | |
|   IN EFI_EVENT                FilterEvent,
 | |
|   IN EFI_TPL                  FilterTpl,
 | |
|   IN UINT64                   FilterClass,
 | |
|   IN EFI_GUID                 *FilterDataRecordGuid OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Stops a filter driver from being notified when data records are logged.
 | |
| 
 | |
|   @param  This                  The EFI_DATA_HUB_PROTOCOL instance.
 | |
|   @param  FilterEvent           The EFI_EVENT to remove from the list of events to be
 | |
|                                 signaled every time errors are logged.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The filter driver represented by FilterEvent was shut off.
 | |
|   @retval EFI_NOT_FOUND         FilterEvent did not exist.
 | |
|   @note  Inconsistent with specification here: 
 | |
|          In Framework for EFI Data Hub Specification, Version 0.9, This definition 
 | |
|          is named as EFI_DATA_HUB_UNREGISTER_DATA_FILTER_DRIVER. The inconsistency 
 | |
|          is maintained for backward compatibility.  
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_DATA_HUB_UNREGISTER_FILTER_DRIVER)(
 | |
|   IN EFI_DATA_HUB_PROTOCOL    *This,
 | |
|   IN EFI_EVENT                FilterEvent
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This protocol is used to log information and register filter drivers
 | |
|   to receive data records.
 | |
| **/
 | |
| struct _EFI_DATA_HUB_PROTOCOL {
 | |
|   ///
 | |
|   /// Logs a data record.
 | |
|   ///
 | |
|   EFI_DATA_HUB_LOG_DATA                 LogData; 
 | |
|   
 | |
|   ///
 | |
|   /// Gets a data record. Used both to view the memory-based log and to
 | |
|   /// get information about which data records have been consumed by a filter driver.
 | |
|   ///
 | |
|   EFI_DATA_HUB_GET_NEXT_RECORD          GetNextRecord;
 | |
|   
 | |
|   ///
 | |
|   /// Allows the registration of an EFI event to act as a filter driver for all data records that are logged.
 | |
|   ///
 | |
|   EFI_DATA_HUB_REGISTER_FILTER_DRIVER   RegisterFilterDriver;
 | |
|   
 | |
|   ///
 | |
|   /// Used to remove a filter driver that was added with RegisterFilterDriver().
 | |
|   ///
 | |
|   EFI_DATA_HUB_UNREGISTER_FILTER_DRIVER UnregisterFilterDriver;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID gEfiDataHubProtocolGuid;
 | |
| 
 | |
| #endif
 |