/** @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.

  For more information please look at Intel Platform Innovation 
  Framework for EFI Data Hub Specification.

  Copyright (c) 2006, 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.             

  Module Name:  DataHub.h

  @par Revision Reference:
  This 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 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  description
  
  @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
  );

/**
  @par Protocol Description:
  This protocol is used to log information and register filter drivers 
  to receive data records.

  @param LogData
  Logs a data record. 

  @param GetNextDataRecord
  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.

  @param RegisterFilterDriver
  Allows the registration of an EFI event to act as a filter driver for all data records that are logged. 

  @param UnregisterFilterDriver
  Used to remove a filter driver that was added with RegisterFilterDriver(). 

**/
struct _EFI_DATA_HUB_PROTOCOL {
  EFI_DATA_HUB_LOG_DATA                 LogData;
  EFI_DATA_HUB_GET_NEXT_RECORD          GetNextRecord;
  EFI_DATA_HUB_REGISTER_FILTER_DRIVER   RegisterFilterDriver;
  EFI_DATA_HUB_UNREGISTER_FILTER_DRIVER UnregisterFilterDriver;
};

extern EFI_GUID gEfiDataHubProtocolGuid;

#endif
