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