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
This commit is contained in:
jyao1 2011-04-27 07:35:20 +00:00
parent 452f020794
commit 54e4b37e36
1 changed files with 19 additions and 5 deletions

View File

@ -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
);
}