## @file
# This module produces the Metronome Architectural Protocol on top of Timer Library.
#
# This is a generic implementation of the Metronome Architectural Protocol that
# layers on top of an instance of the Timer Library.  The Timer Library provides
# functions for nanosecond and microsecond delays.  This generic implementation
# produces a fixed TickPeriod of 100ns unit, and when the WaitForTick() service
# is called, the number of ticks passed in is converted to either nanosecond or
# microsecond units.  If the number of ticks is small, then nanoseconds are used.
# If the number of ticks is large, then microseconds are used.  This prevents
# overflows that could occur for long delays if only nanoseconds were used and also
# provides the greatest accuracy for small delays. 
#
# Copyright (c) 2008 - 2014, 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.             
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = Metronome
  MODULE_UNI_FILE                = Metronome.uni
  FILE_GUID                      = C8339973-A563-4561-B858-D8476F9DEFC4
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = InstallMetronome

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Packages]
  MdePkg/MdePkg.dec

[LibraryClasses]
  UefiDriverEntryPoint
  UefiBootServicesTableLib
  TimerLib
  DebugLib

[Sources]
  Metronome.c
  Metronome.h

[Protocols]
  gEfiMetronomeArchProtocolGuid      ## PRODUCES

[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  MetronomeExtra.uni
