| /** @file | |
| Metronome Architectural Protocol as defined in PI SPEC VOLUME 2 DXE | |
| This code abstracts the DXE core to provide delay services. | |
| Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __ARCH_PROTOCOL_METRONOME_H__ | |
| #define __ARCH_PROTOCOL_METRONOME_H__ | |
| /// | |
| /// Global ID for the Metronome Architectural Protocol | |
| /// | |
| #define EFI_METRONOME_ARCH_PROTOCOL_GUID \ | |
| { 0x26baccb2, 0x6f42, 0x11d4, {0xbc, 0xe7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } } | |
| /// | |
| /// Declare forward reference for the Metronome Architectural Protocol | |
| /// | |
| typedef struct _EFI_METRONOME_ARCH_PROTOCOL EFI_METRONOME_ARCH_PROTOCOL; | |
| /** | |
| The WaitForTick() function waits for the number of ticks specified by | |
| TickNumber from a known time source in the platform. If TickNumber of | |
| ticks are detected, then EFI_SUCCESS is returned. The actual time passed | |
| between entry of this function and the first tick is between 0 and | |
| TickPeriod 100 nS units. If you want to guarantee that at least TickPeriod | |
| time has elapsed, wait for two ticks. This function waits for a hardware | |
| event to determine when a tick occurs. It is possible for interrupt | |
| processing, or exception processing to interrupt the execution of the | |
| WaitForTick() function. Depending on the hardware source for the ticks, it | |
| is possible for a tick to be missed. This function cannot guarantee that | |
| ticks will not be missed. If a timeout occurs waiting for the specified | |
| number of ticks, then EFI_TIMEOUT is returned. | |
| @param This The EFI_METRONOME_ARCH_PROTOCOL instance. | |
| @param TickNumber Number of ticks to wait. | |
| @retval EFI_SUCCESS The wait for the number of ticks specified by TickNumber | |
| succeeded. | |
| @retval EFI_TIMEOUT A timeout occurred waiting for the specified number of ticks. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_METRONOME_WAIT_FOR_TICK)( | |
| IN EFI_METRONOME_ARCH_PROTOCOL *This, | |
| IN UINT32 TickNumber | |
| ); | |
| /// | |
| /// This protocol provides access to a known time source in the platform to the | |
| /// core. The core uses this known time source to produce core services that | |
| /// require calibrated delays. | |
| /// | |
| struct _EFI_METRONOME_ARCH_PROTOCOL { | |
| EFI_METRONOME_WAIT_FOR_TICK WaitForTick; | |
| /// | |
| /// The period of platform's known time source in 100 nS units. | |
| /// This value on any platform must be at least 10 uS, and must not | |
| /// exceed 200 uS. The value in this field is a constant that must | |
| /// not be modified after the Metronome architectural protocol is | |
| /// installed. All consumers must treat this as a read-only field. | |
| /// | |
| UINT32 TickPeriod; | |
| }; | |
| extern EFI_GUID gEfiMetronomeArchProtocolGuid; | |
| #endif |