/** @file Internal header file for TscTimerLib instances. Copyright (c) 2009 - 2011, 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 _TSC_TIMER_LIB_INTERNAL_H_ #define _TSC_TIMER_LIB_INTERNAL_H_ #include <Ich/GenericIch.h> #include <Library/TimerLib.h> #include <Library/BaseLib.h> #include <Library/IoLib.h> #include <Library/PciLib.h> #include <Library/PcdLib.h> /** Get TSC frequency. @return The number of TSC counts per second. **/ UINT64 InternalGetTscFrequency ( VOID ); /** Calculate TSC frequency. The TSC counting frequency is determined by comparing how far it counts during a 1ms period as determined by the ACPI timer. The ACPI timer is used because it counts at a known frequency. If ACPI I/O space not enabled, this function will enable it. Then the TSC is sampled, followed by waiting for 3579 clocks of the ACPI timer, or 1ms. The TSC is then sampled again. The difference multiplied by 1000 is the TSC frequency. There will be a small error because of the overhead of reading the ACPI timer. An attempt is made to determine and compensate for this error. @return The number of TSC counts per second. **/ UINT64 InternalCalculateTscFrequency ( VOID ); #endif