X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EmbeddedPkg%2FMetronomeDxe%2FMetronome.c;h=13db25168fac76d9f02ad6ab5bde773efd2f50a6;hp=8388c4d1989caa4db8e901a82c7e7aaf6f57b9aa;hb=HEAD;hpb=990976abff3994a59ad9d3aabb72175068d19e06
diff --git a/EmbeddedPkg/MetronomeDxe/Metronome.c b/EmbeddedPkg/MetronomeDxe/Metronome.c
index 8388c4d198..63db6d5139 100644
--- a/EmbeddedPkg/MetronomeDxe/Metronome.c
+++ b/EmbeddedPkg/MetronomeDxe/Metronome.c
@@ -1,15 +1,9 @@
/** @file
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
- Copyright (c) 2012, ARM Ltd. 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
+ Copyright (c) 2013, ARM Ltd. All rights reserved.
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -25,78 +19,79 @@
#include
-
-
-/**
- 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.
-
-**/
EFI_STATUS
EFIAPI
WaitForTick (
IN EFI_METRONOME_ARCH_PROTOCOL *This,
IN UINT32 TickNumber
- )
-{
- //
- // Fill me in
- //
- MicroSecondDelay (10 * TickNumber);
- return EFI_UNSUPPORTED;
-}
-
-
+ );
/**
Interface structure for the Metronome Architectural Protocol.
@par Protocol Description:
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.
+ core. The core uses this known time source to produce core services that
+ require calibrated delays.
@param WaitForTick
- Waits for a specified number of ticks from a known time source
- in the platform. 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
+ Waits for a specified number of ticks from a known time source
+ in the platform. 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.
@param TickPeriod
- 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.
+ The period of platform's known time source in 100 nS units.
+ This value on any platform 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.
**/
-EFI_METRONOME_ARCH_PROTOCOL gMetronome = {
+EFI_METRONOME_ARCH_PROTOCOL gMetronome = {
WaitForTick,
FixedPcdGet32 (PcdMetronomeTickPeriod)
};
+/**
+ 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.
-EFI_HANDLE gMetronomeHandle = NULL;
+ @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.
+**/
+EFI_STATUS
+EFIAPI
+WaitForTick (
+ IN EFI_METRONOME_ARCH_PROTOCOL *This,
+ IN UINT32 TickNumber
+ )
+{
+ //
+ // Compute how long to stall the CPU.
+ // gMetronome.TickPeriod is in 100 ns units so it needs to be divided by 10
+ // to get it in microseconds units.
+ //
+ MicroSecondDelay (TickNumber * gMetronome.TickPeriod / 10);
+ return EFI_SUCCESS;
+}
+EFI_HANDLE gMetronomeHandle = NULL;
/**
Initialize the state information for the CPU Architectural Protocol
@@ -110,24 +105,25 @@ EFI_HANDLE gMetronomeHandle = NULL;
**/
EFI_STATUS
+EFIAPI
MetronomeInitialize (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
-
+
//
// Do any hardware init required to make WaitForTick () to work here.
//
Status = gBS->InstallMultipleProtocolInterfaces (
&gMetronomeHandle,
- &gEfiMetronomeArchProtocolGuid, &gMetronome,
+ &gEfiMetronomeArchProtocolGuid,
+ &gMetronome,
NULL
);
ASSERT_EFI_ERROR (Status);
return Status;
}
-