diff options
author | jyao1 <jyao1@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-04-27 07:35:20 +0000 |
---|---|---|
committer | jyao1 <jyao1@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-04-27 07:35:20 +0000 |
commit | 54e4b37e367fe30765de11da424099b481c2e93a (patch) | |
tree | 2d18bfca217ea7781e4047f92bab1b07b6f17368 /EdkCompatibilityPkg | |
parent | 452f020794fe6381a3394a96f1b8b8c4fc3309ff (diff) | |
download | edk2-platforms-54e4b37e367fe30765de11da424099b481c2e93a.tar.xz |
Fix 2 BootScript thunk issue on MEM_POLL.
1) MEM_POLL stall time is incorrect.
Framework version: Duration is used for Stall(), which is Microseconds.
Total time is: Duration(Microseconds) * LoopTimes.
PI version: Duration is always 100ns. Delay is LoopTimes.
Total time is: 100ns * Delay.
So Delay = Duration(Microseconds) * LoopTimes / 100ns
= Duration * 1000ns * LoopTimes / 100ns
= Duration * 10 * LoopTimes
2) MEM_POLL BitMask/BitValue order is incorrect.
Framework version: First BitMask, then BitValue
PI version: First Data, then DataMask
So we revert their order in function call
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11595 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkCompatibilityPkg')
-rw-r--r-- | EdkCompatibilityPkg/Compatibility/BootScriptSaveOnS3SaveStateThunk/ScriptSave.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/EdkCompatibilityPkg/Compatibility/BootScriptSaveOnS3SaveStateThunk/ScriptSave.c b/EdkCompatibilityPkg/Compatibility/BootScriptSaveOnS3SaveStateThunk/ScriptSave.c index 3a3b8c8be5..eb8de8ce6d 100644 --- a/EdkCompatibilityPkg/Compatibility/BootScriptSaveOnS3SaveStateThunk/ScriptSave.c +++ b/EdkCompatibilityPkg/Compatibility/BootScriptSaveOnS3SaveStateThunk/ScriptSave.c @@ -514,15 +514,29 @@ BootScriptMemPoll ( BitValue = VA_ARG (Marker, UINT8 *);
Duration = (UINT64)VA_ARG (Marker, UINT64);
LoopTimes = (UINT64)VA_ARG (Marker, UINT64);
- Delay = MultU64x64 (DivU64x32(Duration, 100), LoopTimes);
+ //
+ // Framework version: Duration is used for Stall(), which is Microseconds.
+ // Total time is: Duration(Microseconds) * LoopTimes.
+ // PI version: Duration is always 100ns. Delay is LoopTimes.
+ // Total time is: 100ns * Delay.
+ // So Delay = Duration(Microseconds) * LoopTimes / 100ns
+ // = Duration * 1000ns * LoopTimes / 100ns
+ // = Duration * 10 * LoopTimes
+ //
+ Delay = MultU64x64 (MultU64x32 (Duration, 10), LoopTimes);
+ //
+ // Framework version: First BitMask, then BitValue
+ // PI version: First Data, then DataMask
+ // So we revert their order in function call
+ //
return mS3SaveState->Write (
mS3SaveState,
EFI_BOOT_SCRIPT_MEM_POLL_OPCODE,
- Width,
- Address,
- BitMask,
- BitValue,
+ Width,
+ Address,
+ BitValue,
+ BitMask,
Delay
);
}
|