| /** @file | |
| This code supports a the private implementation | |
| of the Data Hub protocol | |
| Copyright (c) 2006 - 2015, 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 | |
| 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_ | |
| #include <FrameworkDxe.h> | |
| #include <Protocol/DataHub.h> | |
| #include <Guid/ZeroGuid.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/UefiDriverEntryPoint.h> | |
| #include <Library/UefiLib.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/UefiRuntimeServicesTableLib.h> | |
| #define DATA_HUB_INSTANCE_SIGNATURE SIGNATURE_32 ('D', 'H', 'u', 'b') | |
| typedef struct { | |
| UINT32 Signature; | |
| EFI_HANDLE Handle; | |
| // | |
| // Produced protocol(s) | |
| // | |
| EFI_DATA_HUB_PROTOCOL DataHub; | |
| // | |
| // Private Data | |
| // | |
| // | |
| // Updates to GlobalMonotonicCount, LogListHead, and FilterDriverListHead | |
| // must be locked. | |
| // | |
| EFI_LOCK DataLock; | |
| // | |
| // Runing Monotonic Count to use for each error record. | |
| // Increment AFTER use in an error record. | |
| // | |
| UINT64 GlobalMonotonicCount; | |
| // | |
| // List of EFI_DATA_ENTRY structures. This is the data log! The list | |
| // must be in assending order of LogMonotonicCount. | |
| // | |
| LIST_ENTRY DataListHead; | |
| // | |
| // List of EFI_DATA_HUB_FILTER_DRIVER structures. Represents all | |
| // the registered filter drivers. | |
| // | |
| LIST_ENTRY FilterDriverListHead; | |
| } DATA_HUB_INSTANCE; | |
| #define DATA_HUB_INSTANCE_FROM_THIS(this) CR (this, DATA_HUB_INSTANCE, DataHub, DATA_HUB_INSTANCE_SIGNATURE) | |
| // | |
| // Private data structure to contain the data log. One record per | |
| // structure. Head pointer to the list is the Log member of | |
| // EFI_DATA_ENTRY. Record is a copy of the data passed in. | |
| // | |
| #define EFI_DATA_ENTRY_SIGNATURE SIGNATURE_32 ('D', 'r', 'e', 'c') | |
| typedef struct { | |
| UINT32 Signature; | |
| LIST_ENTRY Link; | |
| EFI_DATA_RECORD_HEADER *Record; | |
| UINTN RecordSize; | |
| } EFI_DATA_ENTRY; | |
| #define DATA_ENTRY_FROM_LINK(link) CR (link, EFI_DATA_ENTRY, Link, EFI_DATA_ENTRY_SIGNATURE) | |
| // | |
| // Private data to contain the filter driver Event and it's | |
| // associated EFI_TPL. | |
| // | |
| #define EFI_DATA_HUB_FILTER_DRIVER_SIGNATURE SIGNATURE_32 ('D', 'h', 'F', 'd') | |
| typedef struct { | |
| UINT32 Signature; | |
| LIST_ENTRY Link; | |
| // | |
| // Store Filter Driver Event and Tpl level it can be Signaled at. | |
| // | |
| EFI_EVENT Event; | |
| EFI_TPL Tpl; | |
| // | |
| // Monotonic count on the get next operation for Event. | |
| // Zero indicates get next has not been called for this event yet. | |
| // | |
| UINT64 GetNextMonotonicCount; | |
| // | |
| // Filter driver will register what class filter should be used. | |
| // | |
| UINT64 ClassFilter; | |
| // | |
| // Filter driver will register what record guid filter should be used. | |
| // | |
| EFI_GUID FilterDataRecordGuid; | |
| } DATA_HUB_FILTER_DRIVER; | |
| #define FILTER_ENTRY_FROM_LINK(link) CR (link, DATA_HUB_FILTER_DRIVER, Link, EFI_DATA_HUB_FILTER_DRIVER_SIGNATURE) | |
| #endif |