36 IN EFI_GUID *DataRecordGuid,
37 IN EFI_GUID *ProducerName,
38 IN UINT64 DataRecordClass,
69 ZeroMem (&LogTime,
sizeof (LogTime));
70 if (EfiGetCurrentTpl () <= TPL_CALLBACK) {
71 gRT->GetTime (&LogTime, NULL);
79 Status = EfiAcquireLockOrFail (&Private->
DataLock);
80 if (EFI_ERROR (Status)) {
87 LogEntry = AllocatePool (TotalSize);
89 if (LogEntry == NULL) {
91 return EFI_OUT_OF_RESOURCES;
97 Raw = (VOID *)(Record + 1);
120 LogEntry->
Record = Record;
124 CopyMem (Raw, RawData, RawDataSize);
126 EfiReleaseLock (&Private->
DataLock);
133 for (Link = GetFirstNode (
Head); Link !=
Head; Link = GetNextNode (
Head, Link)) {
135 if (((FilterEntry->
ClassFilter & DataRecordClass) != 0) &&
139 gBS->SignalEvent (FilterEntry->
Event);
163 IN UINT64 ClassFilter,
164 IN OUT UINT64 *PtrCurrentMTC
170 BOOLEAN ReturnFirstEntry;
177 ReturnFirstEntry = (BOOLEAN)(*PtrCurrentMTC == 0);
180 for (Link = GetFirstNode (
Head); Link !=
Head; Link = GetNextNode (
Head, Link)) {
193 Record = LogEntry->
Record;
200 for (Link = GetNextNode (
Head, Link); Link !=
Head; Link = GetNextNode (
Head, Link)) {
241 for (Link = GetFirstNode (
Head); Link !=
Head; Link = GetNextNode (
Head, Link)) {
243 if (FilterEntry->
Event == Event) {
284 IN OUT UINT64 *MonotonicCount,
285 IN EFI_EVENT *FilterDriverEvent, OPTIONAL
304 if (FilterDriverEvent == NULL) {
306 if (*Record == NULL) {
307 return EFI_NOT_FOUND;
322 if (FilterDriver == NULL) {
323 return EFI_INVALID_PARAMETER;
336 if (*Record == NULL) {
337 return EFI_NOT_FOUND;
340 if (*MonotonicCount != 0) {
366 if (*Record == NULL) {
367 return EFI_NOT_FOUND;
370 if (*MonotonicCount != 0) {
380 if (*Record == NULL) {
381 return EFI_NOT_FOUND;
421 IN EFI_EVENT FilterEvent,
422 IN EFI_TPL FilterTpl,
423 IN UINT64 FilterClass,
424 IN EFI_GUID *FilterDataRecordGuid OPTIONAL
434 if (FilterDriver == NULL) {
435 return EFI_OUT_OF_RESOURCES;
442 FilterDriver->
Event = FilterEvent;
443 FilterDriver->
Tpl = FilterTpl;
445 if (FilterClass == 0) {
454 if (FilterDataRecordGuid != NULL) {
462 FreePool (FilterDriver);
463 return EFI_ALREADY_STARTED;
469 EfiAcquireLock (&Private->
DataLock);
471 EfiReleaseLock (&Private->
DataLock);
479 gBS->SignalEvent (FilterEvent);
500 IN EFI_EVENT FilterEvent
515 if (FilterDriver == NULL) {
516 return EFI_NOT_FOUND;
522 EfiAcquireLock (&Private->
DataLock);
523 RemoveEntryList (&FilterDriver->
Link);
524 EfiReleaseLock (&Private->
DataLock);
543 UINT32 HighMontonicCount;
563 Status =
gRT->GetNextHighMonotonicCount (&HighMontonicCount);
564 if (EFI_ERROR (Status)) {
577 Status =
gBS->InstallProtocolInterface (
580 EFI_NATIVE_INTERFACE,
586 if (EFI_ERROR (Status)) {
EFI_STATUS EFIAPI DataHubLogData(IN EFI_DATA_HUB_PROTOCOL *This, IN EFI_GUID *DataRecordGuid, IN EFI_GUID *ProducerName, IN UINT64 DataRecordClass, IN VOID *RawData, IN UINT32 RawDataSize)
EFI_DATA_RECORD_HEADER * GetNextDataRecord(IN LIST_ENTRY *Head, IN UINT64 ClassFilter, IN OUT UINT64 *PtrCurrentMTC)
EFI_STATUS EFIAPI DataHubUnregisterFilterDriver(IN EFI_DATA_HUB_PROTOCOL *This, IN EFI_EVENT FilterEvent)
DATA_HUB_INSTANCE mPrivateData
EFI_DATA_HUB_PROTOCOL * DataHubInstall(VOID)
EFI_STATUS EFIAPI DataHubRegisterFilterDriver(IN EFI_DATA_HUB_PROTOCOL *This, IN EFI_EVENT FilterEvent, IN EFI_TPL FilterTpl, IN UINT64 FilterClass, IN EFI_GUID *FilterDataRecordGuid OPTIONAL)
DATA_HUB_FILTER_DRIVER * FindFilterDriverByEvent(IN LIST_ENTRY *Head, IN EFI_EVENT Event)
EFI_STATUS EFIAPI DataHubGetNextRecord(IN EFI_DATA_HUB_PROTOCOL *This, IN OUT UINT64 *MonotonicCount, IN EFI_EVENT *FilterDriverEvent, OPTIONAL OUT EFI_DATA_RECORD_HEADER **Record)
#define EFI_DATA_RECORD_CLASS_DATA
#define EFI_DATA_RECORD_CLASS_DEBUG
#define EFI_DATA_RECORD_CLASS_PROGRESS_CODE
#define EFI_DATA_RECORD_CLASS_ERROR
#define EFI_DATA_RECORD_HEADER_VERSION
EFI_GUID gEfiDataHubProtocolGuid
#define DATA_HUB_INSTANCE_SIGNATURE
#define FILTER_ENTRY_FROM_LINK(link)
#define DATA_ENTRY_FROM_LINK(link)
#define DATA_HUB_INSTANCE_FROM_THIS(this)
#define EFI_DATA_ENTRY_SIGNATURE
#define EFI_DATA_HUB_FILTER_DRIVER_SIGNATURE
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
BOOLEAN EFIAPI IsZeroGuid(IN CONST GUID *Guid)
EFI_RUNTIME_SERVICES * gRT
UINT64 EFIAPI LShiftU64(IN UINT64 Operand, IN UINTN Count)
EFI_DATA_HUB_UNREGISTER_FILTER_DRIVER UnregisterFilterDriver
EFI_DATA_HUB_GET_NEXT_RECORD GetNextRecord
EFI_DATA_HUB_LOG_DATA LogData
EFI_DATA_HUB_REGISTER_FILTER_DRIVER RegisterFilterDriver
EFI_GUID FilterDataRecordGuid
UINT64 GetNextMonotonicCount
EFI_DATA_HUB_PROTOCOL DataHub
UINT64 GlobalMonotonicCount
LIST_ENTRY FilterDriverListHead
EFI_DATA_RECORD_HEADER * Record