summaryrefslogtreecommitdiff
path: root/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib
diff options
context:
space:
mode:
Diffstat (limited to 'ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib')
-rw-r--r--ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/CreateFviLibrary.c225
-rw-r--r--ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.cif12
-rw-r--r--ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.inf67
-rw-r--r--ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.mak69
-rw-r--r--ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.sdl73
-rw-r--r--ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviLib.h49
6 files changed, 495 insertions, 0 deletions
diff --git a/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/CreateFviLibrary.c b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/CreateFviLibrary.c
new file mode 100644
index 0000000..e97d65b
--- /dev/null
+++ b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/CreateFviLibrary.c
@@ -0,0 +1,225 @@
+/** @file
+ Firmware Version Info Interface Lib implementation.
+
+@copyright
+ Copyright (c) 2011 - 2012 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.
+
+ This file contains an 'Intel Peripheral Driver' and uniquely
+ identified as "Intel Reference Module" and is
+ licensed for Intel CPUs and chipsets under the terms of your
+ license agreement with Intel or your vendor. This file may
+ be modified by the user, subject to additional terms of the
+ license agreement
+**/
+#include "RcFviLib.h"
+
+EFI_DATA_HUB_PROTOCOL *mDataHub = NULL;
+
+/**
+ Initialize callback context for Firmware Version Info (FVI) Interface Spec v0.7
+ implementation.
+
+ @param[in] String The pointer to the string for calculating length
+
+ @retval None
+**/
+UINT32
+GetStringLen (
+ IN UINT8 *String
+ )
+{
+ UINT8 Length;
+
+ for (Length = 0; *String != 0; String++, Length++) {
+ if (Length >= SMBIOS_STRING_MAX_LENGTH) {
+ break;
+ }
+ }
+
+ return (UINT32) (Length + 1);
+}
+
+/**
+ Initialize callback context for Firmware Version Info (FVI) Interface Spec v0.7
+ implementation.
+
+ @param[in] Type Value is defined in SMBIOS Type 14 - Group Associaction structure - item type.
+ @param[in] Count Number of elements included by this SMBIOS table
+ @param[in] FviContext Context of FVI elements for data hub log
+
+ @retval None
+**/
+VOID
+InitFviDataHubCbContext (
+ IN UINT8 Type,
+ IN UINT8 Count,
+ IN FVI_DATA_HUB_CALLBACK_CONTEXT *FviContext
+ )
+{
+ ///
+ /// Locate the Data hub protocol
+ ///
+ if (mDataHub == NULL) {
+ gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID **)&mDataHub);
+ }
+
+ if (FviContext != NULL) {
+ FviContext->FviHeader.FviHdr.Header.Type = Type;
+ FviContext->FviHeader.FviHdr.Count = Count;
+ FviContext->FviHeader.FviHdr.Header.Length = sizeof (FVI_HEADER) + FVI_ELEMENTS_SIZE_NOSTRING * Count;
+ } else {
+ ASSERT (FALSE);
+ }
+
+ return ;
+}
+
+/**
+ Create the Reference code version info as per Firmware Version Info (FVI) Interface Spec v0.7
+ to Data Hub.
+
+ @param[in] FviContext Pointer to the notification functions context, which is context of FVI
+ elements for data hub log
+
+ @retval None
+**/
+VOID
+CreateRcFviDatahub (
+ IN FVI_DATA_HUB_CALLBACK_CONTEXT *FviContext
+ )
+{
+ VOID *Registration;
+
+ if (mDataHub == NULL) {
+ EfiCreateProtocolNotifyEvent (
+ &gEfiDataHubProtocolGuid,
+ EFI_TPL_CALLBACK,
+ DataHubCallback,
+ (VOID *) FviContext,
+ &Registration
+ );
+ } else {
+ DataHubCallback ((EFI_EVENT) NULL, (VOID *) FviContext);
+ }
+}
+
+/**
+ Publish the Reference code version info as per Firmware Version Info (FVI) Interface Spec v0.7
+ using MiscSubClass Data Hub.
+
+ @param[in] Event Event whose notification function is being invoked.
+ @param[in] Context Pointer to the notification functions context, which is implementation dependent.
+
+ @retval None
+**/
+VOID
+EFIAPI
+DataHubCallback (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+ FVI_DATA_HUB_CALLBACK_CONTEXT *FviContext;
+ UINT8 Index;
+ UINT8 StrIndex;
+ UINT8 *Record;
+ UINT8 *LastRecord;
+ UINT8 *String;
+ UINT8 Count;
+ UINT32 Length;
+ FVI_ELEMENT_AND_FUNCTION *NewElement;
+
+ Status = EFI_SUCCESS;
+ if (mDataHub == NULL) {
+ Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID **)&mDataHub);
+ }
+
+ if ((mDataHub != NULL) && (Context != NULL)) {
+
+ if (Event != NULL) {
+ gBS->CloseEvent (Event);
+ }
+
+ FviContext = (FVI_DATA_HUB_CALLBACK_CONTEXT *) Context;
+ Count = FviContext->FviHeader.FviHdr.Count;
+
+ ///
+ /// Allocate a buffer to record data sorted later
+ ///
+ Length = sizeof (MISC_SUBCLASS_FVI_HEADER) + (sizeof (FVI_ELEMENTS) * Count);
+
+ Status = EFI_OUT_OF_RESOURCES;
+ Record = (UINT8 *) AllocateZeroPool (Length);
+ if (Record != NULL) {
+ LastRecord = Record;
+
+ ///
+ /// Copy the headers including Data Hub and SMBIOS FviSmbios OEM type
+ ///
+ CopyMem (LastRecord, &(FviContext->FviHeader), sizeof (MISC_SUBCLASS_FVI_HEADER));
+ LastRecord += sizeof (MISC_SUBCLASS_FVI_HEADER);
+ String = LastRecord + FVI_ELEMENTS_SIZE_NOSTRING * Count;
+
+ NewElement = FviContext->Elements;
+
+ ///
+ /// Copy elements including strings
+ ///
+ for (Index = 0, StrIndex = 1; Index < Count; Index++) {
+ if (NewElement->Function != NULL) {
+ NewElement->Function (&(NewElement->Element));
+ }
+
+ ///
+ /// If string is implemented for ComponentName or VersionString, and then string
+ /// index of ComponentName or VersionString can't be zero. The string index of
+ /// ComponentName and VersionString will be updated and calculated while analyse
+ /// all elements here.String index must be non-zero if implemented.
+ ///
+ if (NewElement->Element.ComponentName != 0) {
+ NewElement->Element.ComponentName = StrIndex;
+ Length = GetStringLen (NewElement->Element.NameString);
+ CopyMem (String, &(NewElement->Element.NameString), Length);
+ String += Length;
+ StrIndex++;
+ }
+
+ if (NewElement->Element.VersionString != 0) {
+ NewElement->Element.VersionString = StrIndex;
+ Length = GetStringLen (NewElement->Element.VerString);
+ CopyMem (String, &(NewElement->Element.VerString), Length);
+ String += Length;
+ StrIndex++;
+ }
+
+ CopyMem (LastRecord, &(NewElement->Element), FVI_ELEMENTS_SIZE_NOSTRING);
+ LastRecord += FVI_ELEMENTS_SIZE_NOSTRING;
+
+ NewElement++;
+ }
+
+ Length = (UINT32) (String - Record) + 1;
+ Status = mDataHub->LogData (
+ mDataHub,
+ &gMiscSubClassName,
+ &gMiscProducerGuid,
+ EFI_DATA_RECORD_CLASS_DATA,
+ (VOID *) Record,
+ Length
+ );
+ }
+
+ ASSERT (!EFI_ERROR (Status));
+ if (Record != NULL) {
+ FreePool (Record);
+ }
+ }
+}
diff --git a/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.cif b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.cif
new file mode 100644
index 0000000..57f9263
--- /dev/null
+++ b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.cif
@@ -0,0 +1,12 @@
+<component>
+ name = "RcFviDxeLib"
+ category = ModulePart
+ LocalRoot = "ReferenceCode\Chipset\LynxPoint\Library\RcFviDxeLib"
+ RefName = "RcFviDxeLib"
+[files]
+"RcFviDxeLib.sdl"
+"RcFviDxeLib.mak"
+"CreateFviLibrary.c"
+"RcFviLib.h"
+"RcFviDxeLib.inf"
+<endComponent>
diff --git a/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.inf b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.inf
new file mode 100644
index 0000000..ad9f04c
--- /dev/null
+++ b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.inf
@@ -0,0 +1,67 @@
+## @file
+# Component description file for the PchRcFviDxeLib
+#
+#@copyright
+# Copyright (c) 2011 - 2012 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.
+#
+# This file contains a 'Sample Driver' and is licensed as such
+# under the terms of your license agreement with Intel or your
+# vendor. This file may be modified by the user, subject to
+# the additional terms of the license agreement
+#
+
+[defines]
+BASE_NAME = RcFviDxeLib
+COMPONENT_TYPE = LIBRARY
+
+[sources.common]
+ CreateFviLibrary.c
+
+[sources.ia32]
+
+
+[sources.x64]
+
+
+[sources.ipf]
+
+
+[sources.ebc]
+
+
+[includes.common]
+ .
+ $(EFI_SOURCE)/$(PROJECT_PCH_ROOT)
+ $(EFI_SOURCE)/$(PROJECT_PCH_ROOT)/Include
+ $(EFI_SOURCE)/$(PROJECT_PCH_ROOT)/Include/Library
+ $(EDK_SOURCE)/Foundation
+ $(EDK_SOURCE)/Foundation/Framework
+ $(EDK_SOURCE)/Foundation/Efi
+ $(EDK_SOURCE)/Foundation/Include
+ $(EDK_SOURCE)/Foundation/Efi/Include
+ $(EDK_SOURCE)/Foundation/Framework/Include
+ $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+ $(EDK_SOURCE)/Foundation/Core/Dxe
+ $(EDK_SOURCE)/Foundation/Library/Dxe/Include
+ $(EDK_SOURCE)/Foundation/Cpu/Pentium/Include
+ $(EDK_SOURCE)/Foundation/Library/EdkIIGlueLib/Include
+
+[libraries.common]
+ EdkIIGlueUefiBootServicesTableLib
+ EdkIIGlueDxeServicesTableLib
+ EdkIIGlueDxeMemoryAllocationLib
+ EdkFrameworkProtocolLib
+[libraries.ia32]
+
+
+[libraries.x64]
+
+
+[nmake.common] \ No newline at end of file
diff --git a/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.mak b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.mak
new file mode 100644
index 0000000..4e8a698
--- /dev/null
+++ b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.mak
@@ -0,0 +1,69 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+#*************************************************************************
+# $Header: /Alaska/BIN/Chipset/Intel/SouthBridge/LynxPoint/Intel Pch SB Refcode/PchLib/RcFviDxeLib/RcFviDxeLib.mak 1 2/08/12 8:50a Yurenlai $
+#
+# $Revision: 1 $
+#
+# $Date: 2/08/12 8:50a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/BIN/Chipset/Intel/SouthBridge/LynxPoint/Intel Pch SB Refcode/PchLib/RcFviDxeLib/RcFviDxeLib.mak $
+#
+# 1 2/08/12 8:50a Yurenlai
+# Intel Lynx Point/SB eChipset initially releases.
+#
+#
+#*************************************************************************
+all : RcFviDxeLib
+
+$(RcFviDxeLib_LIB) : RcFviDxeLib
+
+RcFviDxeLib : $(BUILD_DIR)\RcFviDxeLib.mak RcFviDxeLibBin
+
+$(BUILD_DIR)\RcFviDxeLib.mak : $(RcFviDxeLib_DIR)\$(@B).cif $(RcFviDxeLib_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(RcFviDxeLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+RcFviDxeLib_INCLUDES=\
+ $(EDK_INCLUDES)\
+ $(EdkIIGlueLib_INCLUDES)\
+ $(INTEL_PCH_INCLUDES)\
+
+RcFviDxeLib_LIB_LINKS =\
+ $(EdkIIGlueUefiBootServicesTableLib_LIB)\
+ $(EdkIIGlueDxeServicesTableLib_LIB)\
+ $(EdkIIGlueDxeMemoryAllocationLib_LIB)\
+ $(EDKFRAMEWORKPROTOCOLLIB)\
+
+RcFviDxeLibBin:
+ $(MAKE) /$(MAKEFLAGS) $(EDKIIGLUE_DEFAULTS)\
+ /f $(BUILD_DIR)\RcFviDxeLib.mak all \
+ "MY_INCLUDES=$(RcFviDxeLib_INCLUDES)" \
+ TYPE=LIBRARY \
+ LIBRARY_NAME=$(RcFviDxeLib_LIB)
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.sdl b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.sdl
new file mode 100644
index 0000000..15c1fd4
--- /dev/null
+++ b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviDxeLib.sdl
@@ -0,0 +1,73 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+#*************************************************************************
+# $Header: /Alaska/BIN/Chipset/Intel/SouthBridge/LynxPoint/Intel Pch SB Refcode/PchLib/RcFviDxeLib/RcFviDxeLib.sdl 1 2/08/12 8:50a Yurenlai $
+#
+# $Revision: 1 $
+#
+# $Date: 2/08/12 8:50a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/BIN/Chipset/Intel/SouthBridge/LynxPoint/Intel Pch SB Refcode/PchLib/RcFviDxeLib/RcFviDxeLib.sdl $
+#
+# 1 2/08/12 8:50a Yurenlai
+# Intel Lynx Point/SB eChipset initially releases.
+#
+#
+#*************************************************************************
+TOKEN
+ Name = "RcFviDxeLib_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable RcFviDxeLib support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "RcFviDxeLib_DIR"
+End
+
+MODULE
+ File = "RcFviDxeLib.mak"
+ Help = "Includes RcFviDxeLib.mak to Project"
+End
+
+ELINK
+ Name = "RcFviDxeLib_LIB"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\RcFviDxeLib_Lib.lib"
+ Parent = "RcFviDxeLib_LIB"
+ InvokeOrder = AfterParent
+End
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviLib.h b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviLib.h
new file mode 100644
index 0000000..70a5556
--- /dev/null
+++ b/ReferenceCode/Chipset/LynxPoint/Library/RcFviDxeLib/RcFviLib.h
@@ -0,0 +1,49 @@
+/** @file
+ Header file for Reference code Firmware Version Info Interface Lib implementation.
+
+@copyright
+ Copyright (c) 2011 - 2012 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.
+
+ This file contains a 'Sample Driver' and is licensed as such
+ under the terms of your license agreement with Intel or your
+ vendor. This file may be modified by the user, subject to
+ the additional terms of the license agreement
+**/
+#ifndef _RC_FVI_LIBRARY_IMPLEMENTATION_H_
+#define _RC_FVI_LIBRARY_IMPLEMENTATION_H_
+
+#if !defined(EDK_RELEASE_VERSION) || (EDK_RELEASE_VERSION < 0x00020000)
+#include "EdkIIGlueBase.h"
+#include "EdkIIGlueDxe.h"
+#include "Library/EdkIIGlueMemoryAllocationLib.h"
+
+#include EFI_GUID_DEFINITION (DataHubRecords)
+#include EFI_PROTOCOL_CONSUMER (DataHub)
+
+#include "RcFviDxeLib.h"
+
+#endif
+
+/**
+ Publish the Reference code version info as per Firmware Version Info (FVI) Interface Spec v0.7
+ using MiscSubClass Data Hub.
+
+ @param[in] Event Event whose notification function is being invoked.
+ @param[in] Context Pointer to the notification functions context, which is implementation dependent.
+
+ @retval None
+**/
+VOID
+EFIAPI
+DataHubCallback (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ );
+#endif