diff options
Diffstat (limited to 'EDK/MiniSetup/TseAdvanced/ipcx.c')
-rw-r--r-- | EDK/MiniSetup/TseAdvanced/ipcx.c | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/EDK/MiniSetup/TseAdvanced/ipcx.c b/EDK/MiniSetup/TseAdvanced/ipcx.c new file mode 100644 index 0000000..ddc222c --- /dev/null +++ b/EDK/MiniSetup/TseAdvanced/ipcx.c @@ -0,0 +1,188 @@ +//*****************************************************************// +//*****************************************************************// +//*****************************************************************// +//** **// +//** (C)Copyright 2010, American Megatrends, Inc. **// +//** **// +//** All Rights Reserved. **// +//** **// +//** 5555 Oakbrook Pkwy, Building 200,Norcross, Georgia 30093 **// +//** **// +//** Phone (770)-246-8600 **// +//** **// +//*****************************************************************// +//*****************************************************************// +//*****************************************************************// +// $Archive: /Alaska/SOURCE/Modules/AMITSE2_0/AMITSE/TseAdvanced/ipcx.c $ +// +// $Author: Arunsb $ +// +// $Revision: 7 $ +// +// $Date: 10/18/12 5:53a $ +// +//*****************************************************************// +//*****************************************************************// +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/AMITSE2_0/AMITSE/TseAdvanced/ipcx.c $ +// +// 7 10/18/12 5:53a Arunsb +// Updated for 2.16.1235 QA submission +// +// 10 10/10/12 12:35p Arunsb +// Synched the source for v2.16.1232, backup with Aptio +// +// 6 2/19/10 1:02p Madhans +// Updated for TSE 2.01. Refer Changelog.log for File change history. +// +// 8 2/19/10 8:11a Mallikarjunanv +// updated year in copyright message +// +// 7 1/09/10 4:44a Mallikarjunanv +// Updated TSE2.01 Release sources with coding standards +// +// 6 9/02/09 7:39p Madhans +// To Realy fix the Logo Security issue +// +// 5 8/13/09 12:16p Blaines +// Move Image support to binary module +// +// 4 6/24/09 6:10p Madhans +// Made TSE_USE_EDK_LIBRARY=OFF to not to refer EDK module. +// +// 3 6/23/09 7:09p Blaines +// Coding standard update, +// Remove spaces from file header to allow proper chm function list +// creation. +// +// 2 6/12/09 7:43p Presannar +// Initial implementation of coding standards for AMITSE2.0 +// +// 1 6/04/09 8:05p Madhans +// +// 1 4/28/09 11:16p Madhans +// Tse 2.0 Code complete Checkin. +// +// 1 4/28/09 10:27p Madhans +// Tse 2.0 Code complete Checkin. +// +// 2 7/06/06 6:41p Arunkumars +// include minisetup.h +// include tiano.h instead of efi.h +// +// 1 6/30/06 4:22p Madhans +// PCX image support in C. +// +// 2 6/26/06 8:41a Shirinmd +// Modifications based on design change suggested by Madhan +// +// 1 6/16/06 8:15a Shirinmd +// Added PCX Support in C for Minisetup +// +//*****************************************************************// + +//<AMI_FHDR_START> +//---------------------------------------------------------------------------- +// +// Name: ipcx.c +// +// Description: This file contains code related to pcx image handling +// +//---------------------------------------------------------------------------- +//<AMI_FHDR_END> + +#include "minisetup.h" + +#include "MyDefs.h" + + +BOOL DecodePCX(BYTE * pbyPCXInputData, BYTE * pbyPCXOutputData, DWORD dwPCXImageSize); //Function implemented in PCX_ADV.c +BOOL GetPCXDimensions( BYTE * pbyPCXImageData, UINT32 * pun32Width, UINT32 * pun32Height); //Function implemented in PCX_ADV.c + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: ConvertPCXToUgaBlt +// +// Description: Decode the PCX Image and store the output in UGA Format +// +// Input: VOID *PCXImage - Pointer to the memory that has the PCX +// Image that need to be decoded. +// UINT32 PCXImageSize - Size of the PCX Image +// OUT VOID **UgaBlt - Two cases +// Case 1: Memory is expected to be allocated by the callee. +// Address provided as input should be NULL. +// pointer that will receive the address of the UGA buffer. +// The buffer is allocated by callee. +// This buffer need to be freed by the caller. +// Case 2: Memory is allocated by the caller +// OUT UINT32 *UgaBltSize - Pointer that stores Size of UgaBlt in bytes. +// This will be treated as an input. This should have value ZERO for Case 2 above. +// UINT32 *PixelHeight - Height of UgaBlt/PCX Image in pixels +// UINT32 *PixelWidth - Width of UgaBlt/PCX Image in pixels +// +// Output: EFI_STATUS +// +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +EFI_STATUS ConvertPCXToUgaBlt ( IN VOID *PCXImage, IN UINT32 PCXImageSize, IN OUT VOID **UgaBlt, IN OUT UINT32 *UgaBltSize, OUT UINT32 *PixelHeight, OUT UINT32 *PixelWidth){ + BOOL bStatus = FALSE; + EFI_STATUS Status = EFI_UNSUPPORTED; + UINT64 unBltBufferSize = 0; + bStatus = GetPCXDimensions(PCXImage, PixelWidth, PixelHeight); + if(bStatus) + { + // Make sure to do x64 Mul + unBltBufferSize = MultU64x32((UINT64)(*PixelWidth), (*PixelHeight)); + + /// Check whether the Size exceeds the limit... + // 4GB/PIXEL_SIZE becoz we need Resolution*PIXEL_SIZE for bltbuffer + if ( unBltBufferSize >= (FOUR_GB_LIMIT/sizeof (EFI_UGA_PIXEL))) { + // The buffer size extends the limitation + return EFI_UNSUPPORTED; + } + + unBltBufferSize = MultU64x32( unBltBufferSize ,sizeof (EFI_UGA_PIXEL)); + + if(NULL!=*UgaBlt) + { + if(*UgaBltSize<(UINT32)unBltBufferSize) + { + *UgaBltSize = (UINT32)unBltBufferSize; + Status = EFI_BUFFER_TOO_SMALL; + bStatus = FALSE; + } + } + else + { + *UgaBltSize = (UINT32)unBltBufferSize; + *UgaBlt = EfiLibAllocatePool((UINT32)unBltBufferSize); + if(NULL == *UgaBlt) + { + Status = EFI_OUT_OF_RESOURCES; + bStatus = FALSE; + } + } + if(bStatus) + { + MemSet(*UgaBlt,*UgaBltSize,0); + bStatus = DecodePCX(PCXImage, *UgaBlt, PCXImageSize); + if(bStatus) + Status = EFI_SUCCESS; + } + } + return Status; +} +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Pkwy, Building 200,Norcross, Georgia 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** |