| /** @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 |