/** @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 |