When CSM uses EFI_SEGMENT and EFI_OFFSET to call CSM16 function, some CSM16 use es:[offset + 0xabcd] to get data passed from CSM32, offset + 0xabcd could exceed 0xFFFF which is invalid in real mode. So added NORMALIZE_EFI_SEGMENT and NORMALIZE_EFI_OFFSET to keep offset as small as possible to avoid this issue during CSM16 function call.

Signed-off-by: li-elvin
Reviewed-by: rsun3


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13074 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
li-elvin
2012-03-01 11:16:42 +00:00
parent 916666c009
commit 81c0d6e9a7
3 changed files with 15 additions and 7 deletions

View File

@ -1,6 +1,6 @@
/** @file
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
@ -1160,8 +1160,8 @@ GenericLegacyBoot (
//
// Pass in handoff data
//
Regs.X.ES = EFI_SEGMENT ((UINTN)EfiToLegacy16BootTable);
Regs.X.BX = EFI_OFFSET ((UINTN)EfiToLegacy16BootTable);
Regs.X.ES = NORMALIZE_EFI_SEGMENT ((UINTN)EfiToLegacy16BootTable);
Regs.X.BX = NORMALIZE_EFI_OFFSET ((UINTN)EfiToLegacy16BootTable);
Private->LegacyBios.FarCall86 (
This,