alder_lake_bios/Intel/AlderLake/AlderLakeChipsetPkg/UefiSetupUtilityDxe/Main/GetVbiosVersion.c

114 lines
3.1 KiB
C

/** @file
;******************************************************************************
;* Copyright (c) 2014, Insyde Software Corporation. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#include <PlatformInfo.h>
/**
To display VBIOS reversion:
@param OpCodeHandle
@param [in] MainHiiHandle
@param [in] AdvanceHiiHandle
@param [in] StringBuffer
@retval EFI_SUCCESS To display VBIOS OpRom ver. is successful.
**/
EFI_STATUS
GetVbiosVersion (
IN VOID *OpCodeHandle,
IN EFI_HII_HANDLE MainHiiHandle,
IN EFI_HII_HANDLE AdvanceHiiHandle,
IN CHAR16 *StringBuffer
)
{
EFI_STATUS Status;
EFI_STRING_ID VbiosVersionText;
EFI_STRING_ID VbiosVersionString;
EFI_IA32_REGISTER_SET RegisterSet;
EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
CHAR8* TempPtr;
LegacyBios = NULL;
TempPtr = NULL;
Status = gBS->LocateProtocol (
&gEfiLegacyBiosProtocolGuid,
NULL,
(VOID **)&LegacyBios
);
if (EFI_ERROR (Status)) {
return Status;
}
ZeroMem (&RegisterSet, sizeof (EFI_IA32_REGISTER_SET));
//
// Reference : #442269, Intel Graphics Media Accelerator Video BIOS
// Chpa 8.1, 5F01h - Get Video BIOS Information
//
RegisterSet.X.AX = GET_VIDEO_BIOS_INFORMATION;
LegacyBios->Int86 (LegacyBios, LEGACY_BIOS_INT_10, &RegisterSet);
//
// Return Registers:
// AX = Return Status (function not supported if AL != 5Fh):
// = 005Fh, Function supported and successful
// = 015Fh, Function supported but failed
//
if (RegisterSet.X.AX == 0x005F) {
//
// EBX = 4 bytes Video BIOS Build Number ASCII string
//
TempPtr = (CHAR8 *)&RegisterSet.E.EBX;
StringBuffer [0] = (CHAR16)TempPtr[3];
StringBuffer [1] = (CHAR16)TempPtr[2];
StringBuffer [2] = (CHAR16)TempPtr[1];
StringBuffer [3] = (CHAR16)TempPtr[0];
TempPtr = NULL;
//
// Update VBIOS Version String
//
VbiosVersionString = HiiSetString (MainHiiHandle, 0, StringBuffer, NULL);
} else {
//
// Update Default VBIOS Version String
//
Status = NewStringToHandle (
AdvanceHiiHandle,
STRING_TOKEN (STR_VBIOS_VERSION_STRING),
MainHiiHandle,
&VbiosVersionString
);
}
//
// Update VBIOS Item String
//
Status = NewStringToHandle (
AdvanceHiiHandle,
STRING_TOKEN (STR_VBIOS_VERSION_TXT),
MainHiiHandle,
&VbiosVersionText
);
if (!EFI_ERROR(Status)) {
HiiCreateTextOpCode (OpCodeHandle,VbiosVersionText, 0, VbiosVersionString );
}
return Status;
}