diff options
author | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
---|---|---|
committer | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
commit | b7c51c9cf4864df6aabb99a1ae843becd577237c (patch) | |
tree | eebe9b0d0ca03062955223097e57da84dd618b9a /Board/EM/Platform/SMBIOSUpdateData | |
download | zprj-master.tar.xz |
Diffstat (limited to 'Board/EM/Platform/SMBIOSUpdateData')
6 files changed, 993 insertions, 0 deletions
diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c new file mode 100644 index 0000000..65f67fc --- /dev/null +++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c @@ -0,0 +1,731 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* + +//************************************************************************* +// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c 1 2/09/12 12:35a Yurenlai $ +// +// $Revision: 1 $ +// +// $Date: 2/09/12 12:35a $ +//************************************************************************* +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c $ +// +// 1 2/09/12 12:35a Yurenlai +// Initial check in. +// +//************************************************************************* + + +#include "Tiano.h" +#include "EfiDriverLib.h" +#include <Protocol\SMBios.h> +#include <Protocol\SmbiosGetFlashDataProtocol.h> +#include "SmbiosUpdateDataProtocol.h" + +EFI_GUID gEfiSmbiosProtocolGuid = EFI_SMBIOS_PROTOCOL_GUID; +EFI_SMBIOS_PROTOCOL *gSmbiosProtocol; + +EFI_GUID gEfiSmbiosUpdateDataProtocolGuid = EFI_SMBIOS_UPDATE_DATA_PROTOCOL_GUID; + +EFI_SMBIOS_UPDATE_DATA_PROTOCOL SmbiosUpdateDataProtocol = {SMBIOS_GetFreeHandle, + SMBIOS_FindStructure, + SMBIOS_GetStructureBase, + SMBIOS_DeleteStructure, + SMBIOS_CopyStructure, + SMBIOS_InsertStructure}; + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: GetStructureLength +// +// Description: Returns the length of the structure pointed by BufferStart +// in bytes +// +// Input: UINT8 *BufferStart +// +// Output: Structure Size +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT16 +GetStructureLength( + IN UINT8 *BufferStart +) +{ + UINT8 *BufferEnd = BufferStart; + + BufferEnd += ((SMBIOS_STRUCTURE_HEADER*)BufferStart)->Length; + while (*(UINT16*)BufferEnd != 0) { + BufferEnd++; + } + return (UINT16)(BufferEnd + 2 - BufferStart); // +2 for double zero terminator +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: GetTotalStructureSize +// +// Description: Returns the total structure size +// +// Input: UINT8 *Buffer +// +// Output: Total structure size +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT16 +GetTotalStructureSize( + IN UINT8 *Buffer +) +{ + UINT16 Length = 0; + UINT16 BlockSize; + + while (((SMBIOS_STRUCTURE_HEADER*)Buffer)->Type != 127) { + BlockSize = GetStructureLength(Buffer); + Length = Length +BlockSize; + Buffer += BlockSize; + } + Length = Length+ GetStructureLength(Buffer); + return Length; +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: FindStructureByType +// +// Description: Find structure type starting from memory location pointed by +// Buffer +// +// Input: UINT8 **Buffer +// UINT8 **StructureFoundPtr +// UINT8 SearchType +// UINT8 Instance +// +// Output: If SearchType is found: +// UINT8 **Buffer - Points to the next structure +// UINT8 **StructureFoundPtr - Points to the structure +// that was found +// If SearchType is not found: +// UINT8 **Buffer - No change +// UINT8 **StructureFoundPtr = NULL +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +BOOLEAN +FindStructureByType( + IN OUT UINT8 **Buffer, + IN OUT UINT8 **StructureFoundPtr, + IN UINT8 SearchType, + IN UINT8 Instance // 1-based +) +{ + UINT8 *BufferPtr = *Buffer; + BOOLEAN FindStatus = FALSE; + + *StructureFoundPtr = NULL; + while (((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Type != 127) { + if (((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Type == SearchType) { + // If this instance, set the find status flag and update the Buffer pointer + if (--Instance == 0) { + FindStatus = TRUE; + *StructureFoundPtr = BufferPtr; + *Buffer = BufferPtr + GetStructureLength(BufferPtr); + break; + } + } + BufferPtr += GetStructureLength(BufferPtr); + } + if ((FindStatus == FALSE) && (SearchType == 127)) { + FindStatus = TRUE; + *StructureFoundPtr = BufferPtr; + *Buffer = BufferPtr + GetStructureLength(BufferPtr); + } + return FindStatus; +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: FindStructureByHandle +// +// Description: Find structure handle starting from memory location pointed +// by Buffer +// +// Input: UINT8 **Buffer +// UINT16 Handle +// +// Output: If SearchType is found: +// UINT8 **Buffer - Points to the structure that was found +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +BOOLEAN +FindStructureByHandle( + IN OUT UINT8 **Buffer, + IN UINT16 Handle +) +{ + while (((SMBIOS_STRUCTURE_HEADER*)*Buffer)->Handle != Handle) { + if (((SMBIOS_STRUCTURE_HEADER*)*Buffer)->Type == 127) { + return FALSE; + } + *Buffer += GetStructureLength(*Buffer); + } + return TRUE; +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: GetNumberOfStructures +// +// Description: Returns the number of structures starting from Buffer til +// (and including) type 127 structure. +// +// Input: UINT8 *Buffer +// +// Output: Number of structures +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT16 +GetNumberOfStructures( + IN UINT8 *Buffer +) +{ + UINT8 *BufferPtr = Buffer; + UINT16 SmbiosStrucCount = 1; + + while (((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Type != 127) { + ++SmbiosStrucCount; + BufferPtr += GetStructureLength(BufferPtr); + } + return SmbiosStrucCount; +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: GetLargestStructureSize +// +// Description: Returns the largest structure size +// +// Input: UINT8 *Buffer +// +// Output: Largest structure size +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT16 +GetLargestStructureSize( + IN UINT8 *Buffer +) +{ + UINT8 *BufferPtr = Buffer; + UINT8 *LastBufferPtr; + UINT16 LargestStructureSize = 0; + UINT16 CurrentStructureSize; + + while (((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Type != 127) { + LastBufferPtr = BufferPtr; + BufferPtr += ((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Length; + while (TRUE) { + if ((*(UINT16*)BufferPtr) == 0) { + BufferPtr += 2; + break; + } + BufferPtr++; + } + CurrentStructureSize = (UINT16)(BufferPtr - LastBufferPtr); + if (CurrentStructureSize > LargestStructureSize) { + LargestStructureSize = CurrentStructureSize; + } + } + return LargestStructureSize; +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SmbiosCheckSum +// +// Description: Returns the checksum of "length" bytes starting from the +// "*ChecksumSrc" +// +// Input: UINT8 *ChecksumSrc +// UINT8 length +// +// Output: Checksum value +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT8 +SmbiosCheckSum( + IN UINT8 *ChecksumSrc, + IN UINT8 length +) +{ + UINT8 Checksum = 0; + UINT8 i; + + for (i = 0; i < length; i++) { + Checksum = Checksum + *ChecksumSrc++; + } + return (0 - Checksum); +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: UpdateEPSHeader +// +// Description: Updates the SMBIOS Entry Point Header +// +// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +// +// Output: None +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +VOID +UpdateEPSHeader( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +) +{ + UINT8 *SmbiosDataTableAddr = NULL; + + // Get Smbios Data Table Address + SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress; + + // Updating EPS Header + // Update SMBIOS Data Structure Table length in EPS Header + pSmbiosTableEntryPoint->TableLength = GetTotalStructureSize(SmbiosDataTableAddr); + + // Find and update number of SMBios Structures in EPS Header + pSmbiosTableEntryPoint->NumberOfSmbiosStructures = GetNumberOfStructures(SmbiosDataTableAddr); + + // Find and update largest SMBios Structure in EPS Header + pSmbiosTableEntryPoint->MaxStructureSize = GetLargestStructureSize((UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress); + + // Update Checksums in EPS Header + pSmbiosTableEntryPoint->IntermediateChecksum = 0; + pSmbiosTableEntryPoint->IntermediateChecksum = SmbiosCheckSum((UINT8*)pSmbiosTableEntryPoint + 0x10, 15); + pSmbiosTableEntryPoint->EntryPointStructureChecksum = 0; + pSmbiosTableEntryPoint->EntryPointStructureChecksum = SmbiosCheckSum((UINT8*)pSmbiosTableEntryPoint, + pSmbiosTableEntryPoint->EntryPointLength); +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SMBIOS_GetFreeHandle +// +// Description: SMBIOSUpdateData protocol - Searches available handle +// of Smbios Data Table +// +// +// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +// +// Output: UINT16 Handle or -1(if not found) +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT16 +SMBIOS_GetFreeHandle( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +) +{ + EFI_STATUS FoundStatus; + + UINT16 Handle = 0; + UINT8 *StructurePtr = NULL; + UINT8 *SmbiosDataTableAddr = NULL; + + // Get Smbios Data Table Address + SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress; + + //Count Handle form 0 to 0xFFFF to find available Handle + for(Handle = 0; Handle < 0xFFFF; Handle++){ + StructurePtr = SmbiosDataTableAddr; + FoundStatus = FindStructureByHandle(&StructurePtr,Handle); + if(!FoundStatus){ + return Handle; + } + } + + return (UINT16)-1; // No available Handle to use; +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SMBIOS_FindStructure +// +// Description: SMBIOSUpdateData protocol - Searches handle of Smbios Table by Type +// +// +// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +// UINT8 Type +// UINT8 Index +// +// Output: UINT16 Handle or -1(if not found) +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT16 +SMBIOS_FindStructure( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT8 Type, + IN UINT8 Index +) +{ + EFI_STATUS FoundStatus; + + UINT16 Handle = 0; + UINT8 *StructurePtr = NULL; + UINT8 *SmbiosDataTableAddr = NULL; + + // Get Smbios Data Table Address + SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress; + + FoundStatus = FindStructureByType(&SmbiosDataTableAddr, &StructurePtr, Type, Index); + Handle = ((SMBIOS_STRUCTURE_HEADER*)StructurePtr)->Handle; + + // Return Handle of found structure + if(FoundStatus){ + return Handle; + } else{ + return (UINT16)-1; + } + +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SMBIOS_GetStructureBase +// +// Description: SMBIOSUpdateData protocol - Get structure address by Handle +// +// +// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +// UINT8 *StructureFoundPtr +// UINT16 Handle +// +// Output: UINT8 * or NULL - Points to the structure that was found +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT8 * +SMBIOS_GetStructureBase( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +) +{ + EFI_STATUS FoundStatus; + + UINT8 *FoundStructurePtr = NULL; + UINT8 *SmbiosDataTableAddr = NULL; + + // Get Smbios Data Table Address + SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress; + FoundStructurePtr = SmbiosDataTableAddr; + + FoundStatus = FindStructureByHandle(&FoundStructurePtr, Handle); + + if(FoundStatus){ + return FoundStructurePtr; + } else{ + return NULL; + } + +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SMBIOS_DeleteStructure +// +// Description: SMBIOSUpdateData protocol - Delete SMBIOS structure by handle +// +// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +// UINT16 Handle +// +// Output: EFI_STATUS +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +EFI_STATUS +SMBIOS_DeleteStructure( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +) +{ +/* + EFI_STATUS FoundStatus; + + UINT16 BufferSize = 0; + UINT8 *StructurePtr = NULL; + UINT8 *NextStructurePtr = NULL; + UINT8 *SmbiosDataTableAddr = NULL; + + // Get Smbios Data Table Address + SmbiosDataTableAddr = (UINT8*)pSmbiosTableEntryPoint->TableAddress; + StructurePtr = SmbiosDataTableAddr; + + FoundStatus = FindStructureByHandle(&StructurePtr, Handle); + + if (FoundStatus){ + // Calculate data size which we want to move + BufferSize = GetTotalStructureSize(StructurePtr) - GetStructureLength(StructurePtr); + + // Calculate next structure address + NextStructurePtr = StructurePtr + GetStructureLength(StructurePtr); + + // Copy Structure + gBS->CopyMem(StructurePtr, NextStructurePtr, BufferSize); + + UpdateEPSHeader(pSmbiosTableEntryPoint); + } + + return FoundStatus; +*/ + return gSmbiosProtocol->SmbiosDeleteStructure(Handle); +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SMBIOS_CopyStructure +// +// Description: SMBIOSUpdateData protocol - Copy SMBIOS structure by Handle +// to a new allocated memory +// +// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +// UINT16 Handle +// +// Output: UINT8 * or NULL - Points to the new structure address +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +UINT8 * +SMBIOS_CopyStructure( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +) +{ + EFI_STATUS FoundStatus; + + UINT16 BufferSize; + UINT8 *BufferPtrTemp; + UINT8 *FoundStructurePtr = NULL; + UINT8 *SmbiosDataTableAddr = NULL; + + // Get Smbios Data Table Address + SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress; + FoundStructurePtr = SmbiosDataTableAddr; + + // Check Handle of Structure if exit + FoundStatus = FindStructureByHandle(&FoundStructurePtr, Handle); + + if (FoundStatus){ + BufferSize = GetStructureLength(FoundStructurePtr); + + // Allocate Memory for structure copy + gBS->AllocatePool(EfiBootServicesData, BufferSize, &BufferPtrTemp); + + // Copy Structure to memory + gBS->CopyMem(BufferPtrTemp, FoundStructurePtr, BufferSize); + + return BufferPtrTemp; + + } else { + return NULL; + } + +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SMBIOS_InsertStructure +// +// Description: SMBIOSUpdateData protocol - Insert SMBIOS structure +// +// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +// UINT8 *SourceStructurePtr +// UINTN BufferSize +// +// Output: EFI_STATUS +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +EFI_STATUS +SMBIOS_InsertStructure( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT8 *StructurePtrTemp, + IN UINT16 BufferSize +) +{ +/* + EFI_STATUS FoundStatus; + + UINT16 Handle = 0; + UINT16 EOSBufferSize = 0; + UINT8 *EOSBufferPtrTemp = NULL; + UINT8 *FoundStructurePtr = NULL; + UINT8 *SmbiosDataTableAddr = NULL; + + // Get Smbios Data Table Address + SmbiosDataTableAddr = (UINT8*)pSmbiosTableEntryPoint->TableAddress; + EOSBufferPtrTemp = SmbiosDataTableAddr; + FoundStructurePtr = SmbiosDataTableAddr; + + // Check Handle of Structure if available + Handle = ((SMBIOS_STRUCTURE_HEADER*)StructurePtrTemp)->Handle; + FoundStatus = FindStructureByHandle(&FoundStructurePtr, Handle); + + if (!FoundStatus){ + // Move End-of-table Structure(Type 127) to allocate space for structure copy + FindStructureByHandle(&EOSBufferPtrTemp, 127); + EOSBufferSize = GetStructureLength(EOSBufferPtrTemp); + FoundStructurePtr = EOSBufferPtrTemp + BufferSize; + gBS->CopyMem(FoundStructurePtr, EOSBufferPtrTemp, EOSBufferSize); + + // Copy Source Structure form memory + gBS->CopyMem(EOSBufferPtrTemp, StructurePtrTemp, BufferSize); + + UpdateEPSHeader(pSmbiosTableEntryPoint); + } + + return !FoundStatus; +*/ + UINT16 Handle = 0; + + Handle = ((SMBIOS_STRUCTURE_HEADER*)StructurePtrTemp)->Handle; + return gSmbiosProtocol->SmbiosAddStrucByHandle(Handle, StructurePtrTemp, BufferSize); +} + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SMIBiosUpdateMemoryRecordDriverEntryPoint +// +// Description: Update memory record DXE driver for Intel Tiano SmBiosMemory Driver. +// +// Input: +// +// Output: EFI_STATUS +// +// Modified: +// +// Referrals: +// +// Notes: +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +EFI_STATUS SMBIOSUpdateDataDriverEntryPoint( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable +) +{ + EFI_STATUS Status; + + DxeInitializeDriverLib (ImageHandle, SystemTable); + + Status = gBS->LocateProtocol(&gEfiSmbiosProtocolGuid, NULL, &gSmbiosProtocol); + ASSERT_EFI_ERROR(Status); + + Status = gBS->InstallProtocolInterface(&ImageHandle, + &gEfiSmbiosUpdateDataProtocolGuid, + EFI_NATIVE_INTERFACE, + &SmbiosUpdateDataProtocol); + + return Status; +} + +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//*************************************************************************
\ No newline at end of file diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.cif b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.cif new file mode 100644 index 0000000..7e4aa0e --- /dev/null +++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.cif @@ -0,0 +1,12 @@ +<component> + name = "SMBIOSUpdateData" + category = ModulePart + LocalRoot = "Board\EM\Platform\SMBIOSUpdateData" + RefName = "SMBIOSUpdateData" +[files] +"SMBIOSUpdateData.sdl" +"SMBIOSUpdateData.mak" +"SMBIOSUpdateData.dxs" +"SMBIOSUpdateData.c" +"SmbiosUpdateDataProtocol.h" +<endComponent> diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs new file mode 100644 index 0000000..2b87536 --- /dev/null +++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs @@ -0,0 +1,49 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* + +//************************************************************************* +// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs 1 2/09/12 12:35a Yurenlai $ +// +// $Revision: 1 $ +// +// $Date: 2/09/12 12:35a $ +//************************************************************************* +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs $ +// +// 1 2/09/12 12:35a Yurenlai +// Initial check in. +// +//************************************************************************* +#include <Include\Protocol\Smbus.h> +#include <protocol\SmbiosGetFlashDataProtocol.h> + +DEPENDENCY_START + EFI_SMBIOS_PROTOCOL_GUID +DEPENDENCY_END + +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//*************************************************************************
\ No newline at end of file diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak new file mode 100644 index 0000000..40254b2 --- /dev/null +++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak @@ -0,0 +1,77 @@ +#************************************************************************* +#************************************************************************* +#** ** +#** (C)Copyright 1985-2011, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#************************************************************************* +#************************************************************************* + +#************************************************************************* +# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak 1 2/09/12 12:35a Yurenlai $ +# +# $Revision: 1 $ +# +# $Date: 2/09/12 12:35a $ +#************************************************************************* +# Revision History +# ---------------- +# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak $ +# +# 1 2/09/12 12:35a Yurenlai +# Initial check in. +# +#************************************************************************* +#<AMI_FHDR_START> +# +# Name: SMBIOSUpdateData.mak +# +# Description: This make file builds SMBIOSUpdateData module PEI & DXE +# components and link them to respective binary +# +#<AMI_FHDR_END> +#************************************************************************* + + +all : SMBIOSUpdateData + +SMBIOSUpdateData : $(BUILD_DIR)\SMBIOSUpdateData.mak SMBIOSUpdateDataBin + +$(BUILD_DIR)\SMBIOSUpdateData.mak : $(SMBIOSUpdateData_DIR)\SMBIOSUpdateData.CIF $(SMBIOSUpdateData_DIR)\$(@B).mak $(BUILD_RULES) + $(CIF2MAK) $(SMBIOSUpdateData_DIR)\SMBIOSUpdateData.CIF $(CIF2MAK_DEFAULTS) + +SMBIOSUpdateData_INCLUDES = \ + $(EDK_INCLUDES)\ + /I$(PROJECT_DIR)\ + /IInclude\ + +SMBIOSUpdateDataBin : $(EFIDRIVERLIB) + $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS)\ + /f $(BUILD_DIR)\SMBIOSUpdateData.mak all\ + NAME=SMBIOSUpdateData\ + "MY_INCLUDES=$(SMBIOSUpdateData_INCLUDES)"\ + GUID=B98999A4-E96F-475a-99FC-762126F50F5A\ + ENTRY_POINT=SMBIOSUpdateDataDriverEntryPoint\ + DEPEX1=$(SMBIOSUpdateData_DIR)\SMBIOSUpdateData.dxs \ + DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX \ + TYPE=BS_DRIVER\ + COMPRESS=1\ + +#************************************************************************* +#************************************************************************* +#** ** +#** (C)Copyright 1985-2011, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#************************************************************************* +#************************************************************************* diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.sdl b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.sdl new file mode 100644 index 0000000..e4b7448 --- /dev/null +++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.sdl @@ -0,0 +1,24 @@ +TOKEN + Name = "SMBIOSUpdateData_SUPPORT" + Value = "1" + TokenType = Boolean + TargetEQU = Yes + TargetMAK = Yes + Master = Yes + Help = "Main switch to enable SMBIOSUpdateData support in Project" +End + +MODULE + Help = "Includes SMBIOSUpdateData.mak to Project" + File = "SMBIOSUpdateData.mak" +End + +PATH + Name = "SMBIOSUpdateData_DIR" +End + +ELINK + Name = "$(BUILD_DIR)\SMBIOSUpdateData.ffs" + Parent = "FV_MAIN" + InvokeOrder = AfterParent +End diff --git a/Board/EM/Platform/SMBIOSUpdateData/SmbiosUpdateDataProtocol.h b/Board/EM/Platform/SMBIOSUpdateData/SmbiosUpdateDataProtocol.h new file mode 100644 index 0000000..991c091 --- /dev/null +++ b/Board/EM/Platform/SMBIOSUpdateData/SmbiosUpdateDataProtocol.h @@ -0,0 +1,100 @@ +/*++ +Copyright (c) 2009 Intel Corporation. All rights reserved. +This software and associated documentation (if any) is furnished +under a license and may only be used or copied in accordance +with the terms of the license. Except as permitted by such +license, no part of this software or documentation may be +reproduced, stored in a retrieval system, or transmitted in any +form or by any means without the express written consent of +Intel Corporation. +--*/ + +#ifndef _EFI_SMBOS_UPDATE_DATA_PROTOCOL_H_ +#define _EFI_SMBOS_UPDATE_DATA_PROTOCOL_H_ + +#include <Protocol\SMBios.h> +#include <Protocol\SmbiosGetFlashDataProtocol.h> + +#define EFI_SMBIOS_UPDATE_DATA_PROTOCOL_GUID \ + {0x67269263, 0xaf1, 0x45dd, 0x93, 0xc8, 0x29, 0x99, 0x21, 0xd0, 0xe1, 0xe9} + +typedef struct _EFI_SMBIOS_UPDATE_DATA_PROTOCOL EFI_SMBIOS_UPDATE_DATA_PROTOCOL; + +typedef UINT16 (EFIAPI *EFI_SMBIOS_UPDATE_DATA_GET_FREE_HANDLE) ( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +); + +typedef UINT16 (EFIAPI *EFI_SMBIOS_UPDATE_DATA_FIND_STRUCTURE) ( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT8 Type, + IN UINT8 Index +); + +typedef UINT8 * (EFIAPI *EFI_SMBIOS_UPDATE_DATA_GET_STRUCTURE_BASE) ( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +); + +typedef EFI_STATUS (EFIAPI *EFI_SMBIOS_UPDATE_DATA_DELETE_STRUCTURE) ( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +); + +typedef UINT8 * (EFIAPI *EFI_SMBIOS_UPDATE_DATA_COPY_STRUCTURE) ( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +); + +typedef EFI_STATUS (EFIAPI *EFI_SMBIOS_UPDATE_DATA_INSERT_STRUCTURE) ( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT8 *StructurePtrTemp, + IN UINT16 BufferSize +); + +typedef struct _EFI_SMBIOS_UPDATE_DATA_PROTOCOL { + EFI_SMBIOS_UPDATE_DATA_GET_FREE_HANDLE SMBIOS_GetFreeHandle; + EFI_SMBIOS_UPDATE_DATA_FIND_STRUCTURE SMBIOS_FindStructure; + EFI_SMBIOS_UPDATE_DATA_GET_STRUCTURE_BASE SMBIOS_GetStructureBase; + EFI_SMBIOS_UPDATE_DATA_DELETE_STRUCTURE SMBIOS_DeleteStructure; + EFI_SMBIOS_UPDATE_DATA_COPY_STRUCTURE SMBIOS_CopyStructure; + EFI_SMBIOS_UPDATE_DATA_INSERT_STRUCTURE SMBIOS_InsertStructure; +}; + +UINT16 +SMBIOS_GetFreeHandle( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint +); + +UINT16 +SMBIOS_FindStructure( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT8 Type, + IN UINT8 Index +); + +UINT8 * +SMBIOS_GetStructureBase( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +); + +EFI_STATUS +SMBIOS_DeleteStructure( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +); + +UINT8 * +SMBIOS_CopyStructure( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT16 Handle +); + +EFI_STATUS +SMBIOS_InsertStructure( + IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint, + IN UINT8 *StructurePtrTemp, + IN UINT16 BufferSize +); + +#endif |