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