BayTrail/BayTrailPkg/CrbSmiFlashHook/CrbSmiFlashHook.c
2018-06-21 15:06:56 +08:00

96 lines
3.9 KiB
C

//****************************************************************************
//****************************************************************************
//** **
//** (C)Copyright 1985-2015, American Megatrends, Inc. **
//** **
//** All Rights Reserved. **
//** **
//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
//** **
//** Phone (770)-246-8600 **
//** **
//****************************************************************************
//****************************************************************************
//*****************************************************************************
// $Header: $
//
// $Revision: $
//
// $Date: $
//*****************************************************************************
/** @file CrbSmiFlashHook.c
**/
//*****************************************************************************
#include <AmiDxeLib.h>
#include <AmiSmm.h>
#include <Protocol/SmiFlash.h>
#define CRB_FLASH_DEVICE_BASE_ADDRESS (0xFFFFFFFF-FLASH_SIZE+1)
#define CRB_PRE_BB_BASE (FV_PRE_BB_BASE-CRB_FLASH_DEVICE_BASE_ADDRESS)
#define CRB_PRE_BB_END (CRB_PRE_BB_BASE+FV_PRE_BB_SIZE)
#if VERIFY_BOOT_SUPPORT
#undef CRB_PRE_BB_BASE
#undef CRB_PRE_BB_END
#define CRB_PRE_BB_BASE ((FV_PRE_BB_BASE-0x1000)-CRB_FLASH_DEVICE_BASE_ADDRESS)
#define CRB_PRE_BB_END (CRB_PRE_BB_BASE+FV_PRE_BB_SIZE)
#endif
#define CRB_MICROCODE_BASE (MICROCODE_ADDRESS-CRB_FLASH_DEVICE_BASE_ADDRESS)
#define CRB_MICROCODE_END (CRB_MICROCODE_BASE+MICROCODE_SIZE)
/**
This function is SW SMI hook that sets Flash Block Description
type for AMI AFU utility.
@param
SwSmiNum - SW SMI value number
Buffer - Flash descriptor address
@retval VOID
**/
VOID CrbUpdateBlockTypeId (
IN UINT8 SwSmiNum,
IN UINT64 Buffer )
{
BLOCK_DESC *BlockDesc;
UINTN i;
// return if SW SMI value is not "Get Flash Info"
if (SwSmiNum != SMIFLASH_GET_FLASH_INFO)
return;
BlockDesc = (BLOCK_DESC*)&((INFO_BLOCK*)Buffer)->Blocks;
for (i = 0; i < ((INFO_BLOCK*)Buffer)->TotalBlocks; i++)
{
if ((BlockDesc[i].StartAddress >= CRB_PRE_BB_BASE) && (BlockDesc[i].StartAddress < CRB_PRE_BB_END))
BlockDesc[i].Type = BOOT_BLOCK;;
if ((BlockDesc[i].StartAddress >= CRB_MICROCODE_BASE) && (BlockDesc[i].StartAddress < CRB_MICROCODE_END))
BlockDesc[i].Type = MAIN_BLOCK;;
}
}
//****************************************************************************
//****************************************************************************
//** **
//** (C)Copyright 1985-2015, American Megatrends, Inc. **
//** **
//** All Rights Reserved. **
//** **
//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
//** **
//** Phone (770)-246-8600 **
//** **
//****************************************************************************
//****************************************************************************