未验证 提交 8cdab5b4 编写于 作者: S Shaneee 提交者: GitHub

OcAppleKernelLib: Fix TSC/FSB for AMD CPUs in ProvideCurrentCpuInfo (#396)

上级 13356ae4
...@@ -1418,6 +1418,19 @@ PatchProvideCurrentCpuInfo ( ...@@ -1418,6 +1418,19 @@ PatchProvideCurrentCpuInfo (
// //
// Perform TSC and FSB calculations. This is traditionally done in tsc.c in XNU. // Perform TSC and FSB calculations. This is traditionally done in tsc.c in XNU.
// //
// For AMD Processors
if ((CpuInfo->Family == 0xF) && ((CpuInfo->ExtFamily == 0x8) || (CpuInfo->ExtFamily == 0xA))) {
DEBUG ((DEBUG_INFO, "OCAK: Setting FSB and TSC for Family 0x%x and ExtFamily 0x%x\n", (UINT16)CpuInfo->Family, (UINT16)CpuInfo->ExtFamily));
busFreqValue = CpuInfo->FSBFrequency;
busFCvtt2nValue = DivU64x64Remainder ((1000000000ULL << 32), busFreqValue, NULL);
busFCvtn2tValue = DivU64x64Remainder ((1000000000ULL << 32), busFCvtt2nValue, NULL);
tscFreqValue = CpuInfo->CPUFrequency;
tscFCvtt2nValue = DivU64x64Remainder ((1000000000ULL << 32), tscFreqValue, NULL);
tscFCvtn2tValue = DivU64x64Remainder ((1000000000ULL << 32), tscFCvtt2nValue, NULL);
}
// For all other processors
else {
busFreqValue = CpuInfo->FSBFrequency; busFreqValue = CpuInfo->FSBFrequency;
busFCvtt2nValue = DivU64x64Remainder ((1000000000ULL << 32), busFreqValue, NULL); busFCvtt2nValue = DivU64x64Remainder ((1000000000ULL << 32), busFreqValue, NULL);
busFCvtn2tValue = DivU64x64Remainder (0xFFFFFFFFFFFFFFFFULL, busFCvtt2nValue, NULL); busFCvtn2tValue = DivU64x64Remainder (0xFFFFFFFFFFFFFFFFULL, busFCvtt2nValue, NULL);
...@@ -1425,6 +1438,7 @@ PatchProvideCurrentCpuInfo ( ...@@ -1425,6 +1438,7 @@ PatchProvideCurrentCpuInfo (
tscFreqValue = CpuInfo->CPUFrequency; tscFreqValue = CpuInfo->CPUFrequency;
tscFCvtt2nValue = DivU64x64Remainder ((1000000000ULL << 32), tscFreqValue, NULL); tscFCvtt2nValue = DivU64x64Remainder ((1000000000ULL << 32), tscFreqValue, NULL);
tscFCvtn2tValue = DivU64x64Remainder (0xFFFFFFFFFFFFFFFFULL, tscFCvtt2nValue, NULL); tscFCvtn2tValue = DivU64x64Remainder (0xFFFFFFFFFFFFFFFFULL, tscFCvtt2nValue, NULL);
}
tscGranularityValue = DivU64x64Remainder (tscFreqValue, busFreqValue, NULL); tscGranularityValue = DivU64x64Remainder (tscFreqValue, busFreqValue, NULL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册