git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9708 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			213 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			8.8 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.
 | 
						|
 | 
						|
  Copyright (c) 2007 - 2010, 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.
 | 
						|
 | 
						|
  @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
 |