mirror of https://github.com/acidanthera/audk.git
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.
|
|
|
|
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__
|
|
|
|
#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.
|
|
@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 inconsistance is remained 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 inconsistance is remained 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 inconsistance is remained 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
|