mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 17:09:09 +00:00 
			
		
		
		
	 736e104fa3
			
		
	
	
		736e104fa3
		
	
	
	
	
		
			
			git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8639 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			209 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			8.1 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 is defined in Framework for EFI Data Hub Specification.
 | |
|   Version 0.9.
 | |
| 
 | |
| Copyright (c) 2007 - 2009, Intel Corporation
 | |
| All rights reserved. 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 __DATA_HUB_H__
 | |
| #define __DATA_HUB_H__
 | |
| 
 | |
| #include <PiDxe.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 must
 | |
| //  change and the HeaderSize will change if the definition of
 | |
| //  EFI_DATA_RECORD_HEADER is extended.
 | |
| //
 | |
| // 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 DateHub.doc 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.
 | |
|   @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.
 | |
| 
 | |
| **/
 | |
| 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.
 | |
| 
 | |
| **/
 | |
| 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.
 | |
| 
 | |
| **/
 | |
| 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
 |