diff --git a/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec b/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec index 1123af3e46..1b346989be 100644 --- a/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +++ b/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec @@ -138,9 +138,6 @@ gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdIsaBusOnlySupportSlaveDma|FALSE|BOOLEAN|0x00010041 gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdIsaBusSupportIsaMemory|TRUE|BOOLEAN|0x00010042 - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPciCfgDisable|FALSE|BOOLEAN|0x00010043 - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPciCfg2Disable|FALSE|BOOLEAN|0x00010044 - [PcdsFixedAtBuild] gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPciIncompatibleDeviceSupportMask|0|UINT8|0x0001003f diff --git a/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc b/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc index 31e97a3262..dfbe380c91 100644 --- a/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc +++ b/IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc @@ -148,9 +148,6 @@ gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdIsaBusSupportDma|TRUE gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdIsaBusOnlySupportSlaveDma|FALSE gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdIsaBusSupportIsaMemory|TRUE - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPciCfgDisable|TRUE - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPciCfg2Disable|TRUE - [PcdsFixedAtBuild.common] gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000 @@ -228,8 +225,6 @@ IntelFrameworkModulePkg/Universal/DataHubStdErrDxe/DataHubStdErrDxe.inf IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf - IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PcatSingleSegmentPciCfgPei.inf - IntelFrameworkModulePkg/Universal/VariablePei/VariablePei.inf IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf diff --git a/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PcatSingleSegmentPciCfgPei.inf b/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PcatSingleSegmentPciCfgPei.inf deleted file mode 100644 index d8b04edeb4..0000000000 --- a/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PcatSingleSegmentPciCfgPei.inf +++ /dev/null @@ -1,58 +0,0 @@ -#/** @file -# Single Segment Pci Configuration PPI -# -# This file declares PciCfg PPI used to access PCI configuration space in PEI -# Copyright (c) 2006 - 2009, Intel Corporation -# -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# -#**/ - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = PcatSingleSegmentPciCfgPei - FILE_GUID = 27A5159D-5E61-4809-919A-422E887101EF - MODULE_TYPE = PEIM - VERSION_STRING = 1.0 - EFI_SPECIFICATION_VERSION = 0x00020000 - ENTRY_POINT = PeimInitializePciCfg - -# -# VALID_ARCHITECTURES = IA32 X64 IPF EBC -# - -[Sources.common] - PciCfg.c - PciCfg2.c - PciCfgInternal.h - -[Packages] - MdePkg/MdePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec - - -[LibraryClasses] - PeimEntryPoint - PciLib - BaseLib - DebugLib - - -[Ppis] - gEfiPciCfg2PpiGuid # PPI ALWAYS_PRODUCED - gEfiPciCfgPpiInServiceTableGuid # PPI ALWAYS_PRODUCED - -[FeaturePcd.common] - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPciCfgDisable - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPciCfg2Disable - -[Depex] - TRUE - diff --git a/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfg.c b/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfg.c deleted file mode 100644 index aaabfbb58a..0000000000 --- a/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfg.c +++ /dev/null @@ -1,249 +0,0 @@ -/** @file - - Copyright (c) 2006 - 2007, Intel Corporation - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - - - -Module Name: - - PciCfg.c - -Abstract: - - Single Segment Pci Configuration PPI - -Revision History - -**/ - -#include "PciCfgInternal.h" - - -/** - PCI read operation. - - @param PeiServices An indirect pointer to the PEI Services Table - published by the PEI Foundation. - @param This Pointer to local data for the interface. - @param Width The width of the access. Enumerated in bytes. - @param Address The physical address of the access. - @param Buffer A pointer to the buffer of data. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_INVALID_PARAMETER Unsupported width - enumeration. - -**/ -EFI_STATUS -EFIAPI -PciCfgRead ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_PCI_CFG_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN OUT VOID *Buffer - ) -{ - UINTN PciLibAddress; - - PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address); - - if (Width == EfiPeiPciCfgWidthUint8) { - *((UINT8 *) Buffer) = PciRead8 (PciLibAddress); - } else if (Width == EfiPeiPciCfgWidthUint16) { - if ((PciLibAddress & 0x01) == 0) { - // - // Aligned Pci address access - // - WriteUnaligned16 (((UINT16 *) Buffer), PciRead16 (PciLibAddress)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - *((UINT8 *) Buffer) = PciRead8 (PciLibAddress); - *((UINT8 *) Buffer + 1) = PciRead8 (PciLibAddress + 1); - } - } else if (Width == EfiPeiPciCfgWidthUint32) { - if ((PciLibAddress & 0x03) == 0) { - // - // Aligned Pci address access - // - WriteUnaligned32 (((UINT32 *) Buffer), PciRead32 (PciLibAddress)); - } else if ((PciLibAddress & 0x01) == 0) { - // - // Unaligned Pci address access, break up the request into word by word. - // - WriteUnaligned16 (((UINT16 *) Buffer), PciRead16 (PciLibAddress)); - WriteUnaligned16 (((UINT16 *) Buffer + 1), PciRead16 (PciLibAddress + 2)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - *((UINT8 *) Buffer) = PciRead8 (PciLibAddress); - *((UINT8 *) Buffer + 1) = PciRead8 (PciLibAddress + 1); - *((UINT8 *) Buffer + 2) = PciRead8 (PciLibAddress + 2); - *((UINT8 *) Buffer + 3) = PciRead8 (PciLibAddress + 3); - } - } else { - return EFI_INVALID_PARAMETER; - } - - return EFI_SUCCESS; -} - - -/** - PCI write operation. - - @param PeiServices An indirect pointer to the PEI Services Table - published by the PEI Foundation. - @param This Pointer to local data for the interface. - @param Width The width of the access. Enumerated in bytes. - @param Address The physical address of the access. - @param Buffer A pointer to the buffer of data. - - @retval EFI_SUCCESS The function completed successfully. - - - @retval EFI_INVALID_PARAMETER Unsupported width - enumeration. - -**/ -EFI_STATUS -EFIAPI -PciCfgWrite ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_PCI_CFG_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN OUT VOID *Buffer - ) -{ - UINTN PciLibAddress; - - PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address); - - if (Width == EfiPeiPciCfgWidthUint8) { - PciWrite8 (PciLibAddress, *((UINT8 *) Buffer)); - } else if (Width == EfiPeiPciCfgWidthUint16) { - if ((PciLibAddress & 0x01) == 0) { - // - // Aligned Pci address access - // - PciWrite16 (PciLibAddress, ReadUnaligned16 ((UINT16 *) Buffer)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - PciWrite8 (PciLibAddress, *((UINT8 *) Buffer)); - PciWrite8 (PciLibAddress + 1, *((UINT8 *) Buffer + 1)); - } - } else if (Width == EfiPeiPciCfgWidthUint32) { - if ((PciLibAddress & 0x03) == 0) { - // - // Aligned Pci address access - // - PciWrite32 (PciLibAddress, ReadUnaligned32 ((UINT32 *) Buffer)); - } else if ((PciLibAddress & 0x01) == 0) { - // - // Unaligned Pci address access, break up the request into word by word. - // - PciWrite16 (PciLibAddress, ReadUnaligned16 ((UINT16 *) Buffer)); - PciWrite16 (PciLibAddress + 2, ReadUnaligned16 ((UINT16 *) Buffer + 1)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - PciWrite8 (PciLibAddress, *((UINT8 *) Buffer)); - PciWrite8 (PciLibAddress + 1, *((UINT8 *) Buffer + 1)); - PciWrite8 (PciLibAddress + 2, *((UINT8 *) Buffer + 2)); - PciWrite8 (PciLibAddress + 3, *((UINT8 *) Buffer + 3)); - } - } else { - return EFI_INVALID_PARAMETER; - } - - return EFI_SUCCESS; -} - - -/** - PCI read-modify-write operation. - - @param PeiServices An indirect pointer to the PEI Services Table - published by the PEI Foundation. - @param This Pointer to local data for the interface. - @param Width The width of the access. Enumerated in bytes. - @param Address The physical address of the access. - @param SetBits Value of the bits to set. - @param ClearBits Value of the bits to clear. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_INVALID_PARAMETER Unsupported width - enumeration. - -**/ -EFI_STATUS -EFIAPI -PciCfgModify ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_PCI_CFG_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN UINTN SetBits, - IN UINTN ClearBits - ) -{ - UINTN PciLibAddress; - - PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address); - if (Width == EfiPeiPciCfgWidthUint8) { - PciAndThenOr8 (PciLibAddress, (UINT8)~ClearBits, (UINT8)SetBits); - } else if (Width == EfiPeiPciCfgWidthUint16) { - if ((PciLibAddress & 0x01) == 0) { - // - // Aligned Pci address access - // - PciAndThenOr16 (PciLibAddress, (UINT16)~ClearBits, (UINT16)SetBits); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - PciAndThenOr8 (PciLibAddress, (UINT8)~ClearBits, (UINT8)SetBits); - PciAndThenOr8 (PciLibAddress + 1, (UINT8)~(ClearBits >> 8), (UINT8)(SetBits >> 8)); - } - } else if (Width == EfiPeiPciCfgWidthUint32) { - if ((PciLibAddress & 0x03) == 0) { - // - // Aligned Pci address access - // - PciAndThenOr32 (PciLibAddress, (UINT32)~ClearBits, (UINT32)SetBits); - } else if ((PciLibAddress & 0x01) == 0) { - // - // Unaligned Pci address access, break up the request into word by word. - // - PciAndThenOr16 (PciLibAddress, (UINT16)~ClearBits, (UINT16)SetBits); - PciAndThenOr16 (PciLibAddress + 2, (UINT16)~(ClearBits >> 16), (UINT16)(SetBits >> 16)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - PciAndThenOr8 (PciLibAddress, (UINT8)~ClearBits, (UINT8)SetBits); - PciAndThenOr8 (PciLibAddress + 1, (UINT8)~(ClearBits >> 8), (UINT8)(SetBits >> 8)); - PciAndThenOr8 (PciLibAddress + 2, (UINT8)~(ClearBits >> 16), (UINT8)(SetBits >> 16)); - PciAndThenOr8 (PciLibAddress + 3, (UINT8)~(ClearBits >> 24), (UINT8)(SetBits >> 24)); - } - } else { - return EFI_INVALID_PARAMETER; - } - - return EFI_SUCCESS; -} - diff --git a/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfg2.c b/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfg2.c deleted file mode 100644 index 852476ddd0..0000000000 --- a/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfg2.c +++ /dev/null @@ -1,405 +0,0 @@ -/** - - Copyright (c) 2006 - 2007, Intel Corporation - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include "PciCfgInternal.h" - -/** - @par Ppi Description: - The EFI_PEI_PCI_CFG2_PPI interfaces are used to abstract - accesses to PCI controllers behind a PCI root bridge - controller. - - @param Read PCI read services. See the Read() function description. - - @param Write PCI write services. See the Write() function description. - - @param Modify PCI read-modify-write services. See the Modify() function description. - - @param Segment The PCI bus segment which the specified functions will access. - -**/ -GLOBAL_REMOVE_IF_UNREFERENCED -EFI_PEI_PCI_CFG2_PPI gPciCfg2Ppi = { - PciCfg2Read, - PciCfg2Write, - PciCfg2Modify -}; - -GLOBAL_REMOVE_IF_UNREFERENCED -EFI_PEI_PPI_DESCRIPTOR gPciCfg2PpiList = { - (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), - &gEfiPciCfg2PpiGuid, - &gPciCfg2Ppi -}; - - -/** - @par Ppi Description: - The EFI_PEI_PCI_CFG_PPI interfaces are used to abstract accesses to PCI - controllers behind a PCI root bridge controller. - - @param Read PCI read services. See the Read() function description. - - @param Write PCI write services. See the Write() function description. - - @param Modify PCI read-modify-write services. See the Modify() function description. - - @param Segment The PCI bus segment which the specified functions will access. - -**/ -GLOBAL_REMOVE_IF_UNREFERENCED -EFI_PEI_PCI_CFG_PPI gPciCfgPpi = { - PciCfgRead, - PciCfgWrite, - PciCfgModify -}; - -GLOBAL_REMOVE_IF_UNREFERENCED -EFI_PEI_PPI_DESCRIPTOR gPciCfgPpiList = { - (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), - &gEfiPciCfgPpiInServiceTableGuid, - &gPciCfgPpi -}; - - -/** - Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS. - - @param Address PCI address with - EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS format. - - @return The PCI address with PCI_LIB_ADDRESS format. - -**/ -UINTN -PciCfgAddressConvert ( - EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *Address - ) -{ - if (Address->ExtendedRegister == 0) { - return PCI_LIB_ADDRESS (Address->Bus, Address->Device, Address->Function, Address->Register); - } - - return PCI_LIB_ADDRESS (Address->Bus, Address->Device, Address->Function, Address->ExtendedRegister); -} - -/** - Reads from a given location in the PCI configuration space. - - @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation. - - @param This Pointer to local data for the interface. - - @param Width The width of the access. Enumerated in bytes. - See EFI_PEI_PCI_CFG_PPI_WIDTH above. - - @param Address The physical address of the access. The format of - the address is described by EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS. - - @param Buffer A pointer to the buffer of data.. - - - @retval EFI_SUCCESS The function completed successfully. - - @retval EFI_DEVICE_ERROR There was a problem with the transaction. - - @retval EFI_DEVICE_NOT_READY The device is not capable of supporting the operation at this - time. - -**/ -EFI_STATUS -EFIAPI -PciCfg2Read ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN CONST EFI_PEI_PCI_CFG2_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN OUT VOID *Buffer -) -{ - UINTN PciLibAddress; - - PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address); - - if (Width == EfiPeiPciCfgWidthUint8) { - *((UINT8 *) Buffer) = PciRead8 (PciLibAddress); - } else if (Width == EfiPeiPciCfgWidthUint16) { - if ((PciLibAddress & 0x01) == 0) { - // - // Aligned Pci address access - // - WriteUnaligned16 (((UINT16 *) Buffer), PciRead16 (PciLibAddress)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - *((UINT8 *) Buffer) = PciRead8 (PciLibAddress); - *((UINT8 *) Buffer + 1) = PciRead8 (PciLibAddress + 1); - } - } else if (Width == EfiPeiPciCfgWidthUint32) { - if ((PciLibAddress & 0x03) == 0) { - // - // Aligned Pci address access - // - WriteUnaligned32 (((UINT32 *) Buffer), PciRead32 (PciLibAddress)); - } else if ((PciLibAddress & 0x01) == 0) { - // - // Unaligned Pci address access, break up the request into word by word. - // - WriteUnaligned16 (((UINT16 *) Buffer), PciRead16 (PciLibAddress)); - WriteUnaligned16 (((UINT16 *) Buffer + 1), PciRead16 (PciLibAddress + 2)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - *((UINT8 *) Buffer) = PciRead8 (PciLibAddress); - *((UINT8 *) Buffer + 1) = PciRead8 (PciLibAddress + 1); - *((UINT8 *) Buffer + 2) = PciRead8 (PciLibAddress + 2); - *((UINT8 *) Buffer + 3) = PciRead8 (PciLibAddress + 3); - } - } else { - return EFI_INVALID_PARAMETER; - } - - return EFI_SUCCESS; -} - -/** - Write to a given location in the PCI configuration space. - - @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation. - - @param This Pointer to local data for the interface. - - @param Width The width of the access. Enumerated in bytes. - See EFI_PEI_PCI_CFG_PPI_WIDTH above. - - @param Address The physical address of the access. The format of - the address is described by EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS. - - @param Buffer A pointer to the buffer of data.. - - - @retval EFI_SUCCESS The function completed successfully. - - @retval EFI_DEVICE_ERROR There was a problem with the transaction. - - @retval EFI_DEVICE_NOT_READY The device is not capable of supporting the operation at this - time. - -**/ -EFI_STATUS -EFIAPI -PciCfg2Write ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN CONST EFI_PEI_PCI_CFG2_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN OUT VOID *Buffer -) -{ - UINTN PciLibAddress; - - PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address); - - if (Width == EfiPeiPciCfgWidthUint8) { - PciWrite8 (PciLibAddress, *((UINT8 *) Buffer)); - } else if (Width == EfiPeiPciCfgWidthUint16) { - if ((PciLibAddress & 0x01) == 0) { - // - // Aligned Pci address access - // - PciWrite16 (PciLibAddress, ReadUnaligned16 ((UINT16 *) Buffer)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - PciWrite8 (PciLibAddress, *((UINT8 *) Buffer)); - PciWrite8 (PciLibAddress + 1, *((UINT8 *) Buffer + 1)); - } - } else if (Width == EfiPeiPciCfgWidthUint32) { - if ((PciLibAddress & 0x03) == 0) { - // - // Aligned Pci address access - // - PciWrite32 (PciLibAddress, ReadUnaligned32 ((UINT32 *) Buffer)); - } else if ((PciLibAddress & 0x01) == 0) { - // - // Unaligned Pci address access, break up the request into word by word. - // - PciWrite16 (PciLibAddress, ReadUnaligned16 ((UINT16 *) Buffer)); - PciWrite16 (PciLibAddress + 2, ReadUnaligned16 ((UINT16 *) Buffer + 1)); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - PciWrite8 (PciLibAddress, *((UINT8 *) Buffer)); - PciWrite8 (PciLibAddress + 1, *((UINT8 *) Buffer + 1)); - PciWrite8 (PciLibAddress + 2, *((UINT8 *) Buffer + 2)); - PciWrite8 (PciLibAddress + 3, *((UINT8 *) Buffer + 3)); - } - } else { - return EFI_INVALID_PARAMETER; - } - - return EFI_SUCCESS; -} - - -/** - PCI read-modify-write operation. - - @param PeiServices An indirect pointer to the PEI Services Table - published by the PEI Foundation. - - @param This Pointer to local data for the interface. - - @param Width The width of the access. Enumerated in bytes. Type - EFI_PEI_PCI_CFG_PPI_WIDTH is defined in Read(). - - @param Address The physical address of the access. - - @param SetBits Points to value to bitwise-OR with the read configuration value. - - The size of the value is determined by Width. - - @param ClearBits Points to the value to negate and bitwise-AND with the read configuration value. - The size of the value is determined by Width. - - - @retval EFI_SUCCESS The function completed successfully. - - @retval EFI_DEVICE_ERROR There was a problem with the transaction. - - @retval EFI_DEVICE_NOT_READY The device is not capable of supporting - the operation at this time. - -**/ -EFI_STATUS -EFIAPI -PciCfg2Modify ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN CONST EFI_PEI_PCI_CFG2_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN VOID *SetBits, - IN VOID *ClearBits -) -{ - UINTN PciLibAddress; - UINT16 ClearValue16; - UINT16 SetValue16; - UINT32 ClearValue32; - UINT32 SetValue32; - - PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address); - - if (Width == EfiPeiPciCfgWidthUint8) { - PciAndThenOr8 (PciLibAddress, (UINT8) (~(*(UINT8 *) ClearBits)), *((UINT8 *) SetBits)); - } else if (Width == EfiPeiPciCfgWidthUint16) { - if ((PciLibAddress & 0x01) == 0) { - // - // Aligned Pci address access - // - ClearValue16 = (UINT16) (~ReadUnaligned16 ((UINT16 *) ClearBits)); - SetValue16 = ReadUnaligned16 ((UINT16 *) SetBits); - PciAndThenOr16 (PciLibAddress, ClearValue16, SetValue16); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - PciAndThenOr8 (PciLibAddress, (UINT8) (~(*(UINT8 *) ClearBits)), *((UINT8 *) SetBits)); - PciAndThenOr8 (PciLibAddress + 1, (UINT8) (~(*((UINT8 *) ClearBits + 1))), *((UINT8 *) SetBits + 1)); - } - } else if (Width == EfiPeiPciCfgWidthUint32) { - if ((PciLibAddress & 0x03) == 0) { - // - // Aligned Pci address access - // - ClearValue32 = (UINT32) (~ReadUnaligned32 ((UINT32 *) ClearBits)); - SetValue32 = ReadUnaligned32 ((UINT32 *) SetBits); - PciAndThenOr32 (PciLibAddress, ClearValue32, SetValue32); - } else if ((PciLibAddress & 0x01) == 0) { - // - // Unaligned Pci address access, break up the request into word by word. - // - ClearValue16 = (UINT16) (~ReadUnaligned16 ((UINT16 *) ClearBits)); - SetValue16 = ReadUnaligned16 ((UINT16 *) SetBits); - PciAndThenOr16 (PciLibAddress, ClearValue16, SetValue16); - - ClearValue16 = (UINT16) (~ReadUnaligned16 ((UINT16 *) ClearBits + 1)); - SetValue16 = ReadUnaligned16 ((UINT16 *) SetBits + 1); - PciAndThenOr16 (PciLibAddress + 2, ClearValue16, SetValue16); - } else { - // - // Unaligned Pci address access, break up the request into byte by byte. - // - PciAndThenOr8 (PciLibAddress, (UINT8) (~(*(UINT8 *) ClearBits)), *((UINT8 *) SetBits)); - PciAndThenOr8 (PciLibAddress + 1, (UINT8) (~(*((UINT8 *) ClearBits + 1))), *((UINT8 *) SetBits + 1)); - PciAndThenOr8 (PciLibAddress + 2, (UINT8) (~(*((UINT8 *) ClearBits + 2))), *((UINT8 *) SetBits + 2)); - PciAndThenOr8 (PciLibAddress + 3, (UINT8) (~(*((UINT8 *) ClearBits + 3))), *((UINT8 *) SetBits + 3)); - } - } else { - return EFI_INVALID_PARAMETER; - } - return EFI_SUCCESS; -} - -/** - Module's entry function. - This routine will install EFI_PEI_PCI_CFG2_PPI or EFI_PEI_PCI_CFG_PPI - according to PeiServices's version. - - @param FileHandle Handle of the file being invoked. - @param PeiServices Describes the list of possible PEI Services. - - @return Whether success to install service -**/ -EFI_STATUS -EFIAPI -PeimInitializePciCfg ( - IN EFI_PEI_FILE_HANDLE FileHandle, - IN CONST EFI_PEI_SERVICES **PeiServices - ) -{ - EFI_STATUS Status; - - Status = EFI_SUCCESS; - - if ((**PeiServices).Hdr.Revision < PEI_SERVICES_REVISION) { - // - // BugBug: Curently, the FrameworkPkg does not define - // FRAMEWORK_PEI_SERVICES. So, In order to install - // the PeiServices.PciCfg(), we casttype - // EFI_PEI_PCI_CFG_PPI to EFI_PEI_PCI_CFG2_PPI. - // After defining the FRAMEWORK_PEI_SERVICES. this should - // be updated as: - // - // FrameworkPeiServices = (FRAMEWORK_PEI_SERVICES **) PeiServices; - // (**FrameworkPeiServices).PciCfg = &mPciCfgPpi; - // - (**(EFI_PEI_SERVICES**)PeiServices).PciCfg = (EFI_PEI_PCI_CFG2_PPI *) &gPciCfgPpi; - } else { - (**(EFI_PEI_SERVICES**)PeiServices).PciCfg = &gPciCfg2Ppi; - } - - if (!FeaturePcdGet (PcdPciCfgDisable)) { - Status = (**PeiServices).InstallPpi (PeiServices, &gPciCfgPpiList); - } - if (!FeaturePcdGet (PcdPciCfg2Disable)) { - Status = (**PeiServices).InstallPpi (PeiServices, &gPciCfg2PpiList); - } - - return Status; -} - diff --git a/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfgInternal.h b/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfgInternal.h deleted file mode 100644 index 8aa6289b1f..0000000000 --- a/IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfgInternal.h +++ /dev/null @@ -1,237 +0,0 @@ -/** - - Copyright (c) 2006 - 2007, Intel Corporation - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#ifndef __PCICFGPPI_INTERLNAL_H_ -#define __PCICFGPPI_INTERLNAL_H_ - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include - -#include - - -// -// Global Variables -// -extern EFI_PEI_PCI_CFG_PPI gPciCfgPpi; -extern EFI_PEI_PPI_DESCRIPTOR gPciCfgPpiList; - -/** - Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS. - - @param Address PCI address with - EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS format. - - @return The PCI address with PCI_LIB_ADDRESS format. - -**/ -UINTN -PciCfgAddressConvert ( - EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *Address - ); - - -/** - Reads from a given location in the PCI configuration space. - - @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation. - - @param This Pointer to local data for the interface. - - @param Width The width of the access. Enumerated in bytes. - See EFI_PEI_PCI_CFG_PPI_WIDTH above. - - @param Address The physical address of the access. The format of - the address is described by EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS. - - @param Buffer A pointer to the buffer of data.. - - - @retval EFI_SUCCESS The function completed successfully. - - @retval EFI_DEVICE_ERROR There was a problem with the transaction. - - @retval EFI_DEVICE_NOT_READY The device is not capable of supporting the operation at this - time. - -**/ -EFI_STATUS -EFIAPI -PciCfg2Read ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN CONST EFI_PEI_PCI_CFG2_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN OUT VOID *Buffer -); - -/** - Write to a given location in the PCI configuration space. - - @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation. - - @param This Pointer to local data for the interface. - - @param Width The width of the access. Enumerated in bytes. - See EFI_PEI_PCI_CFG_PPI_WIDTH above. - - @param Address The physical address of the access. The format of - the address is described by EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS. - - @param Buffer A pointer to the buffer of data.. - - - @retval EFI_SUCCESS The function completed successfully. - - @retval EFI_DEVICE_ERROR There was a problem with the transaction. - - @retval EFI_DEVICE_NOT_READY The device is not capable of supporting the operation at this - time. - -**/ -EFI_STATUS -EFIAPI -PciCfg2Write ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN CONST EFI_PEI_PCI_CFG2_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN OUT VOID *Buffer -); - - -/** - PCI read-modify-write operation. - - @param PeiServices An indirect pointer to the PEI Services Table - published by the PEI Foundation. - - @param This Pointer to local data for the interface. - - @param Width The width of the access. Enumerated in bytes. Type - EFI_PEI_PCI_CFG_PPI_WIDTH is defined in Read(). - - @param Address The physical address of the access. - - @param SetBits Points to value to bitwise-OR with the read configuration value. - - The size of the value is determined by Width. - - @param ClearBits Points to the value to negate and bitwise-AND with the read configuration value. - The size of the value is determined by Width. - - - @retval EFI_SUCCESS The function completed successfully. - - @retval EFI_DEVICE_ERROR There was a problem with the transaction. - - @retval EFI_DEVICE_NOT_READY The device is not capable of supporting - the operation at this time. - -**/ -EFI_STATUS -EFIAPI -PciCfg2Modify ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN CONST EFI_PEI_PCI_CFG2_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN VOID *SetBits, - IN VOID *ClearBits -); - - - -/** - PCI read operation. - - @param PeiServices An indirect pointer to the PEI Services Table - published by the PEI Foundation. - @param This Pointer to local data for the interface. - @param Width The width of the access. Enumerated in bytes. - @param Address The physical address of the access. - @param Buffer A pointer to the buffer of data. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_NOT_YET_AVAILABLE The service has not been installed. - -**/ -EFI_STATUS -EFIAPI -PciCfgRead ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_PCI_CFG_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN OUT VOID *Buffer - ); - -/** - PCI write operation. - - @param PeiServices An indirect pointer to the PEI Services Table - published by the PEI Foundation. - @param This Pointer to local data for the interface. - @param Width The width of the access. Enumerated in bytes. - @param Address The physical address of the access. - @param Buffer A pointer to the buffer of data. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_NOT_YET_AVAILABLE The service has not been installed. - -**/ -EFI_STATUS -EFIAPI -PciCfgWrite ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_PCI_CFG_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN OUT VOID *Buffer - ); - -/** - PCI read-modify-write operation. - - @param PeiServices An indirect pointer to the PEI Services Table - published by the PEI Foundation. - @param This Pointer to local data for the interface. - @param Width The width of the access. Enumerated in bytes. - @param Address The physical address of the access. - @param SetBits Value of the bits to set. - @param ClearBits Value of the bits to clear. - - @retval EFI_SUCCESS The function completed successfully. - -**/ -EFI_STATUS -EFIAPI -PciCfgModify ( - IN EFI_PEI_SERVICES **PeiServices, - IN EFI_PEI_PCI_CFG_PPI *This, - IN EFI_PEI_PCI_CFG_PPI_WIDTH Width, - IN UINT64 Address, - IN UINTN SetBits, - IN UINTN ClearBits - ); - -#endif diff --git a/IntelFrameworkModulePkg/Universal/VariablePei/Ipf/VariableWorker.c b/IntelFrameworkModulePkg/Universal/VariablePei/Ipf/VariableWorker.c deleted file mode 100644 index 0a4ee95774..0000000000 --- a/IntelFrameworkModulePkg/Universal/VariablePei/Ipf/VariableWorker.c +++ /dev/null @@ -1,57 +0,0 @@ -/** @file - Variable worker functions. - - Copyright (c) 2006, Intel Corporation
- All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include - - -/** - Get one variable by the index count. - - @param IndexTable The pointer to variable index table. - @param Count The index count of variable in index table. - - @return The pointer to variable header indexed by count. - -**/ -VARIABLE_HEADER * -GetVariableByIndex ( - IN VARIABLE_INDEX_TABLE *IndexTable, - IN UINT32 Count - ) -{ - return (VARIABLE_HEADER *) (UINTN) ((((UINT32)IndexTable->Index[Count]) << 2) + ((UINT32)(UINTN)IndexTable->StartPtr & 0xFFFC0000) ); -} - -/** - Record Variable in VariableIndex HOB. - - Record Variable in VariableIndex HOB and update the length of variable index table. - - @param IndexTable The pointer to variable index table. - @param Variable The pointer to the variable that will be recorded. - - @retval VOID - -**/ -VOID -VariableIndexTableUpdate ( - IN OUT VARIABLE_INDEX_TABLE *IndexTable, - IN VARIABLE_HEADER *Variable - ) -{ - IndexTable->Index[IndexTable->Length++] = (UINT16) (((UINT32)(UINTN) Variable) >> 2); - - return; -} - diff --git a/IntelFrameworkModulePkg/Universal/VariablePei/Variable.c b/IntelFrameworkModulePkg/Universal/VariablePei/Variable.c deleted file mode 100644 index 3a747846b3..0000000000 --- a/IntelFrameworkModulePkg/Universal/VariablePei/Variable.c +++ /dev/null @@ -1,733 +0,0 @@ -/** @file - Framework PEIM to provide the Variable functionality - -Copyright (c) 2006 - 2009 Intel Corporation.
-All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -Module Name: - -**/ - - -#include "Variable.h" - -// -// Module globals -// -EFI_PEI_READ_ONLY_VARIABLE_PPI mVariablePpi = { - PeiGetVariable, - PeiGetNextVariableName -}; - -EFI_PEI_READ_ONLY_VARIABLE2_PPI mVariable2Ppi = { - PeiGetVariable2, - PeiGetNextVariableName2 -}; - -EFI_PEI_PPI_DESCRIPTOR mPpiListVariable[] = { - { - (EFI_PEI_PPI_DESCRIPTOR_PPI), - &gEfiPeiReadOnlyVariable2PpiGuid, - &mVariable2Ppi - }, - { - (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), - &gEfiPeiReadOnlyVariablePpiGuid, - &mVariablePpi - } -}; - -EFI_GUID mEfiVariableIndexTableGuid = EFI_VARIABLE_INDEX_TABLE_GUID; - -/** - Provide the functionality of the variable services. - - @param FileHandle Handle of the file being invoked. - @param PeiServices Describes the list of possible PEI Services. - - @return EFI_SUCCESS If the interface could be successfully installed. - @return EFI_UNSUPPORTED If current boot path is in recovery mode, then does not - install this interface. - -**/ -EFI_STATUS -EFIAPI -PeimInitializeVariableServices ( - IN EFI_PEI_FILE_HANDLE FileHandle, - IN CONST EFI_PEI_SERVICES **PeiServices - ) -{ - EFI_BOOT_MODE BootMode; - EFI_STATUS Status; - - // - // Check if this is recovery boot path. If no, publish the variable access capability - // to other modules. If yes, the content of variable area is not reliable. Therefore, - // in this case we should not provide variable service to other pei modules. - // - Status = (*PeiServices)->GetBootMode (PeiServices, &BootMode); - ASSERT_EFI_ERROR (Status); - - if (BootMode == BOOT_IN_RECOVERY_MODE) { - return EFI_UNSUPPORTED; - } - - return (**PeiServices).InstallPpi (PeiServices, &mPpiListVariable[0]); - -} - -/** - This code gets the pointer to the first variable memory pointer byte - - @param VarStoreHeader Pointer to the Variable Store Header. - - @return VARIABLE_HEADER* Pointer to last unavailable Variable Header - -**/ -VARIABLE_HEADER * -GetStartPointer ( - IN VARIABLE_STORE_HEADER *VarStoreHeader - ) -{ - // - // The end of variable store - // - return (VARIABLE_HEADER *) HEADER_ALIGN (VarStoreHeader + 1); -} - -/** - This code gets the pointer to the last variable memory pointer byte - - @param VarStoreHeader Pointer to the Variable Store Header. - - @return VARIABLE_HEADER* Pointer to last unavailable Variable Header - -**/ -VARIABLE_HEADER * -GetEndPointer ( - IN VARIABLE_STORE_HEADER *VarStoreHeader - ) - -{ - // - // The end of variable store - // - return (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) VarStoreHeader + VarStoreHeader->Size); -} - -/** - - This code checks if variable header is valid or not. - - @param Variable Pointer to the Variable Header. - - @retval TRUE Variable header is valid. - @retval FALSE Variable header is not valid. - -**/ -BOOLEAN -EFIAPI -IsValidVariableHeader ( - IN VARIABLE_HEADER *Variable - ) -{ - if (Variable == NULL || Variable->StartId != VARIABLE_DATA ) { - return FALSE; - } - - return TRUE; -} - -/** - This code gets the size of name of variable. - - @param Variable Pointer to the Variable Header. - - @return UINTN Size of variable in bytes - -**/ -UINTN -NameSizeOfVariable ( - IN VARIABLE_HEADER *Variable - ) -{ - if (Variable->State == (UINT8) (-1) || - Variable->DataSize == (UINT32) -1 || - Variable->NameSize == (UINT32) -1 || - Variable->Attributes == (UINT32) -1) { - return 0; - } - return (UINTN) Variable->NameSize; -} - -/** - This code gets the size of name of variable. - - @param Variable Pointer to the Variable Header. - - @return UINTN Size of variable in bytes - -**/ -UINTN -DataSizeOfVariable ( - IN VARIABLE_HEADER *Variable - ) -{ - if (Variable->State == (UINT8) -1 || - Variable->DataSize == (UINT32) -1 || - Variable->NameSize == (UINT32) -1 || - Variable->Attributes == (UINT32) -1) { - return 0; - } - return (UINTN) Variable->DataSize; -} - -/** - This code gets the pointer to the variable name. - - @param Variable Pointer to the Variable Header. - - @return CHAR16* Pointer to Variable Name - -**/ -CHAR16 * -GetVariableNamePtr ( - IN VARIABLE_HEADER *Variable - ) - -{ - - return (CHAR16 *) (Variable + 1); -} - -/** - This code gets the pointer to the variable data. - - @param Variable Pointer to the Variable Header. - - @return UINT8* Pointer to Variable Data - -**/ -UINT8 * -GetVariableDataPtr ( - IN VARIABLE_HEADER *Variable - ) -{ - UINTN Value; - - // - // Be careful about pad size for alignment - // - Value = (UINTN) GetVariableNamePtr (Variable); - Value += NameSizeOfVariable (Variable); - Value += GET_PAD_SIZE (NameSizeOfVariable (Variable)); - - return (UINT8 *) Value; -} - -/** - This code gets the pointer to the next variable header. - - @param Variable Pointer to the Variable Header. - - @return VARIABLE_HEADER* Pointer to next variable header. - -**/ -VARIABLE_HEADER * -GetNextVariablePtr ( - IN VARIABLE_HEADER *Variable - ) - -{ - UINTN Value; - - if (!IsValidVariableHeader (Variable)) { - return NULL; - } - - Value = (UINTN) GetVariableDataPtr (Variable); - Value += DataSizeOfVariable (Variable); - Value += GET_PAD_SIZE (DataSizeOfVariable (Variable)); - - // - // Be careful about pad size for alignment - // - return (VARIABLE_HEADER *) HEADER_ALIGN (Value); -} - -/** - This code gets the pointer to the variable name. - - @param VarStoreHeader Pointer to the Variable Store Header. - - @retval EfiRaw Variable store is raw - @retval EfiValid Variable store is valid - @retval EfiInvalid Variable store is invalid - -**/ -VARIABLE_STORE_STATUS -EFIAPI -GetVariableStoreStatus ( - IN VARIABLE_STORE_HEADER *VarStoreHeader - ) - -{ - - if (CompareGuid (&VarStoreHeader->Signature, &gEfiVariableGuid) && - VarStoreHeader->Format == VARIABLE_STORE_FORMATTED && - VarStoreHeader->State == VARIABLE_STORE_HEALTHY - ) { - - return EfiValid; - } - - if (((UINT32 *)(&VarStoreHeader->Signature))[0] == 0xffffffff && - ((UINT32 *)(&VarStoreHeader->Signature))[1] == 0xffffffff && - ((UINT32 *)(&VarStoreHeader->Signature))[2] == 0xffffffff && - ((UINT32 *)(&VarStoreHeader->Signature))[3] == 0xffffffff && - VarStoreHeader->Size == 0xffffffff && - VarStoreHeader->Format == 0xff && - VarStoreHeader->State == 0xff - ) { - - return EfiRaw; - } else { - return EfiInvalid; - } -} - -/** - This function compares a variable with variable entries in database - - @param Variable - Pointer to the variable in our database - @param VariableName - Name of the variable to compare to 'Variable' - @param VendorGuid - GUID of the variable to compare to 'Variable' - @param PtrTrack - Variable Track Pointer structure that contains - Variable Information. - - @retval EFI_SUCCESS - Found match variable - @retval EFI_NOT_FOUND - Variable not found - -**/ -EFI_STATUS -CompareWithValidVariable ( - IN VARIABLE_HEADER *Variable, - IN CONST CHAR16 *VariableName, - IN CONST EFI_GUID *VendorGuid, - OUT VARIABLE_POINTER_TRACK *PtrTrack - ) - -{ - VOID *Point; - - if (VariableName[0] == 0) { - PtrTrack->CurrPtr = Variable; - return EFI_SUCCESS; - } else { - // - // Don't use CompareGuid function here for performance reasons. - // Instead we compare the GUID a UINT32 at a time and branch - // on the first failed comparison. - // - if ((((INT32 *) VendorGuid)[0] == ((INT32 *) &Variable->VendorGuid)[0]) && - (((INT32 *) VendorGuid)[1] == ((INT32 *) &Variable->VendorGuid)[1]) && - (((INT32 *) VendorGuid)[2] == ((INT32 *) &Variable->VendorGuid)[2]) && - (((INT32 *) VendorGuid)[3] == ((INT32 *) &Variable->VendorGuid)[3]) - ) { - ASSERT (NameSizeOfVariable (Variable) != 0); - Point = (VOID *) GetVariableNamePtr (Variable); - if (!CompareMem (VariableName, Point, NameSizeOfVariable (Variable))) { - PtrTrack->CurrPtr = Variable; - return EFI_SUCCESS; - } - } - } - - return EFI_NOT_FOUND; -} - -/** - This code finds variable in storage blocks (Non-Volatile) - - @param PeiServices - General purpose services available to every PEIM. - @param VariableName - Name of the variable to be found - @param VendorGuid - Vendor GUID to be found. - @param PtrTrack - Variable Track Pointer structure that contains - Variable Information. - - @retval EFI_SUCCESS - Variable found successfully - @retval EFI_NOT_FOUND - Variable not found - @retval EFI_INVALID_PARAMETER - Invalid variable name - -**/ -EFI_STATUS -EFIAPI -FindVariable ( - IN EFI_PEI_SERVICES **PeiServices, - IN CONST CHAR16 *VariableName, - IN CONST EFI_GUID *VendorGuid, - OUT VARIABLE_POINTER_TRACK *PtrTrack - ) - -{ - EFI_HOB_GUID_TYPE *GuidHob; - VARIABLE_STORE_HEADER *VariableStoreHeader; - VARIABLE_HEADER *Variable; - VARIABLE_HEADER *MaxIndex; - VARIABLE_INDEX_TABLE *IndexTable; - UINT32 Count; - UINT8 *VariableBase; - - if (VariableName[0] != 0 && VendorGuid == NULL) { - return EFI_INVALID_PARAMETER; - } - // - // No Variable Address equals zero, so 0 as initial value is safe. - // - MaxIndex = 0; - - GuidHob = GetFirstGuidHob (&mEfiVariableIndexTableGuid); - if (GuidHob == NULL) { - IndexTable = BuildGuidHob (&mEfiVariableIndexTableGuid, sizeof (VARIABLE_INDEX_TABLE)); - IndexTable->Length = 0; - IndexTable->StartPtr = NULL; - IndexTable->EndPtr = NULL; - IndexTable->GoneThrough = 0; - } else { - IndexTable = GET_GUID_HOB_DATA (GuidHob); - for (Count = 0; Count < IndexTable->Length; Count++) - { - MaxIndex = GetVariableByIndex (IndexTable, Count); - - if (CompareWithValidVariable (MaxIndex, VariableName, VendorGuid, PtrTrack) == EFI_SUCCESS) { - PtrTrack->StartPtr = IndexTable->StartPtr; - PtrTrack->EndPtr = IndexTable->EndPtr; - - return EFI_SUCCESS; - } - } - - if (IndexTable->GoneThrough) { - return EFI_NOT_FOUND; - } - } - // - // If not found in HOB, then let's start from the MaxIndex we've found. - // - if (MaxIndex != NULL) { - Variable = GetNextVariablePtr (MaxIndex); - } else { - if (IndexTable->StartPtr || IndexTable->EndPtr) { - Variable = IndexTable->StartPtr; - } else { - VariableBase = (UINT8 *) (UINTN) PcdGet32 (PcdFlashNvStorageVariableBase); - - // - // Check if FV header is valid. - // - if (((EFI_FIRMWARE_VOLUME_HEADER *) VariableBase)->Signature != EFI_FVH_SIGNATURE) { - return EFI_UNSUPPORTED; - } - - VariableStoreHeader = (VARIABLE_STORE_HEADER *) (VariableBase + \ - ((EFI_FIRMWARE_VOLUME_HEADER *) (VariableBase)) -> HeaderLength); - - if (GetVariableStoreStatus (VariableStoreHeader) != EfiValid) { - return EFI_UNSUPPORTED; - } - - if (~VariableStoreHeader->Size == 0) { - return EFI_NOT_FOUND; - } - // - // Find the variable by walk through non-volatile variable store - // - IndexTable->StartPtr = GetStartPointer (VariableStoreHeader); - IndexTable->EndPtr = GetEndPointer (VariableStoreHeader); - - // - // Start Pointers for the variable. - // Actual Data Pointer where data can be written. - // - Variable = IndexTable->StartPtr; - } - } - // - // Find the variable by walk through non-volatile variable store - // - PtrTrack->StartPtr = IndexTable->StartPtr; - PtrTrack->EndPtr = IndexTable->EndPtr; - - while ((Variable < IndexTable->EndPtr) && IsValidVariableHeader (Variable)) { - if (Variable->State == VAR_ADDED) { - // - // Record Variable in VariableIndex HOB - // - if (IndexTable->Length < VARIABLE_INDEX_TABLE_VOLUME) - { - VariableIndexTableUpdate (IndexTable, Variable); - } - - if (CompareWithValidVariable (Variable, VariableName, VendorGuid, PtrTrack) == EFI_SUCCESS) { - return EFI_SUCCESS; - } - } - - Variable = GetNextVariablePtr (Variable); - } - // - // If gone through the VariableStore, that means we never find in Firmware any more. - // - if (IndexTable->Length < VARIABLE_INDEX_TABLE_VOLUME) { - IndexTable->GoneThrough = 1; - } - - PtrTrack->CurrPtr = NULL; - - return EFI_NOT_FOUND; -} - -/** - Provide the read variable functionality of the variable services. - - @param PeiServices - General purpose services available to every PEIM. - - @param VariableName - The variable name - - @param VendorGuid - The vendor's GUID - - @param Attributes - Pointer to the attribute - - @param DataSize - Size of data - - @param Data - Pointer to data - - @retval EFI_SUCCESS - The interface could be successfully installed - - @retval EFI_NOT_FOUND - The variable could not be discovered - - @retval EFI_BUFFER_TOO_SMALL - The caller buffer is not large enough - -**/ -EFI_STATUS -EFIAPI -PeiGetVariable ( - IN EFI_PEI_SERVICES **PeiServices, - IN CHAR16 *VariableName, - IN EFI_GUID * VendorGuid, - OUT UINT32 *Attributes OPTIONAL, - IN OUT UINTN *DataSize, - OUT VOID *Data - ) - -{ - VARIABLE_POINTER_TRACK Variable; - UINTN VarDataSize; - EFI_STATUS Status; - - if (VariableName == NULL || VendorGuid == NULL || DataSize == NULL) { - return EFI_INVALID_PARAMETER; - } - // - // Find existing variable - // - Status = FindVariable (PeiServices, VariableName, VendorGuid, &Variable); - - if (Variable.CurrPtr == NULL || Status != EFI_SUCCESS) { - return Status; - } - // - // Get data size - // - VarDataSize = DataSizeOfVariable (Variable.CurrPtr); - if (*DataSize >= VarDataSize) { - // - // PO-TKW: Address one checking in this place - // - if (Data == NULL) { - return EFI_INVALID_PARAMETER; - } - - (*PeiServices)->CopyMem (Data, GetVariableDataPtr (Variable.CurrPtr), VarDataSize); - - if (Attributes != NULL) { - *Attributes = Variable.CurrPtr->Attributes; - } - - *DataSize = VarDataSize; - return EFI_SUCCESS; - } else { - *DataSize = VarDataSize; - return EFI_BUFFER_TOO_SMALL; - } -} - -/** - Provide the read variable functionality of the variable services. - - @param PeiServices - General purpose services available to every PEIM. - - @param VariableName - The variable name - - @param VendorGuid - The vendor's GUID - - @param Attributes - Pointer to the attribute - - @param DataSize - Size of data - - @param Data - Pointer to data - - @retval EFI_SUCCESS - The interface could be successfully installed - - @retval EFI_NOT_FOUND - The variable could not be discovered - - @retval EFI_BUFFER_TOO_SMALL - The caller buffer is not large enough - -**/ -EFI_STATUS -EFIAPI -PeiGetVariable2 ( - IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This, - IN CONST CHAR16 *VariableName, - IN CONST EFI_GUID *VariableGuid, - OUT UINT32 *Attributes, - IN OUT UINTN *DataSize, - OUT VOID *Data - ) - -{ - return PeiGetVariable ( - (EFI_PEI_SERVICES **) GetPeiServicesTablePointer (), - (CHAR16*)VariableName, - (EFI_GUID*)VariableGuid, - Attributes, - DataSize, - Data - ); -} - -/** - Provide the get next variable functionality of the variable services. - - @param PeiServices - General purpose services available to every PEIM. - @param VariabvleNameSize - The variable name's size. - @param VariableName - A pointer to the variable's name. - @param VendorGuid - A pointer to the EFI_GUID structure. - - @param VariableNameSize - Size of the variable name - - @param VariableName - The variable name - - @param VendorGuid - The vendor's GUID - - @retval EFI_SUCCESS - The interface could be successfully installed - - @retval EFI_NOT_FOUND - The variable could not be discovered - -**/ -EFI_STATUS -EFIAPI -PeiGetNextVariableName ( - IN EFI_PEI_SERVICES **PeiServices, - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VendorGuid - ) - -{ - VARIABLE_POINTER_TRACK Variable; - UINTN VarNameSize; - EFI_STATUS Status; - - if (VariableNameSize == NULL || VariableName == NULL || VendorGuid == NULL) { - return EFI_INVALID_PARAMETER; - } - - Status = FindVariable (PeiServices, VariableName, VendorGuid, &Variable); - - if (Variable.CurrPtr == NULL || Status != EFI_SUCCESS) { - return Status; - } - - if (VariableName[0] != 0) { - // - // If variable name is not NULL, get next variable - // - Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr); - } - - while (!(Variable.CurrPtr >= Variable.EndPtr || Variable.CurrPtr == NULL)) { - if (IsValidVariableHeader (Variable.CurrPtr)) { - if (Variable.CurrPtr->State == VAR_ADDED) { - ASSERT (NameSizeOfVariable (Variable.CurrPtr) != 0); - - VarNameSize = (UINTN) NameSizeOfVariable (Variable.CurrPtr); - if (VarNameSize <= *VariableNameSize) { - (*PeiServices)->CopyMem (VariableName, GetVariableNamePtr (Variable.CurrPtr), VarNameSize); - - (*PeiServices)->CopyMem (VendorGuid, &Variable.CurrPtr->VendorGuid, sizeof (EFI_GUID)); - - Status = EFI_SUCCESS; - } else { - Status = EFI_BUFFER_TOO_SMALL; - } - - *VariableNameSize = VarNameSize; - return Status; - // - // Variable is found - // - } else { - Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr); - } - } else { - break; - } - } - - return EFI_NOT_FOUND; -} - -/** - Provide the get next variable functionality of the variable services. - - @param PeiServices - General purpose services available to every PEIM. - @param VariabvleNameSize - The variable name's size. - @param VariableName - A pointer to the variable's name. - @param VariableGuid - A pointer to the EFI_GUID structure. - - @param VariableNameSize - Size of the variable name - - @param VariableName - The variable name - - @param VendorGuid - The vendor's GUID - - - @retval EFI_SUCCESS - The interface could be successfully installed - - @retval EFI_NOT_FOUND - The variable could not be discovered - -**/ -EFI_STATUS -EFIAPI -PeiGetNextVariableName2 ( - IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This, - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VariableGuid - ) - -{ - return PeiGetNextVariableName ( - (EFI_PEI_SERVICES **) GetPeiServicesTablePointer (), - VariableNameSize, - VariableName, - VariableGuid - ); -} - diff --git a/IntelFrameworkModulePkg/Universal/VariablePei/Variable.h b/IntelFrameworkModulePkg/Universal/VariablePei/Variable.h deleted file mode 100644 index 31c855d27b..0000000000 --- a/IntelFrameworkModulePkg/Universal/VariablePei/Variable.h +++ /dev/null @@ -1,123 +0,0 @@ -/** @file - -Copyright (c) 2006 - 2007, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#ifndef _PEI_VARIABLE_H -#define _PEI_VARIABLE_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef struct { - VARIABLE_HEADER *CurrPtr; - VARIABLE_HEADER *EndPtr; - VARIABLE_HEADER *StartPtr; -} VARIABLE_POINTER_TRACK; - -#define VARIABLE_INDEX_TABLE_VOLUME 122 - -#define EFI_VARIABLE_INDEX_TABLE_GUID \ - { 0x8cfdb8c8, 0xd6b2, 0x40f3, { 0x8e, 0x97, 0x02, 0x30, 0x7c, 0xc9, 0x8b, 0x7c } } - -typedef struct { - UINT16 Length; - UINT16 GoneThrough; - VARIABLE_HEADER *EndPtr; - VARIABLE_HEADER *StartPtr; - UINT16 Index[VARIABLE_INDEX_TABLE_VOLUME]; -} VARIABLE_INDEX_TABLE; - -// -// Functions -// - -EFI_STATUS -EFIAPI -PeiGetVariable ( - IN EFI_PEI_SERVICES **PeiServices, - IN CHAR16 *VariableName, - IN EFI_GUID * VendorGuid, - OUT UINT32 *Attributes OPTIONAL, - IN OUT UINTN *DataSize, - OUT VOID *Data - ); - -EFI_STATUS -EFIAPI -PeiGetVariable2 ( - IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This, - IN CONST CHAR16 *VariableName, - IN CONST EFI_GUID *VariableGuid, - OUT UINT32 *Attributes, - IN OUT UINTN *DataSize, - OUT VOID *Data - ); - -EFI_STATUS -EFIAPI -PeiGetNextVariableName2 ( - IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This, - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VariableGuid - ); - -EFI_STATUS -EFIAPI -PeiGetNextVariableName ( - IN EFI_PEI_SERVICES **PeiServices, - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VendorGuid - ); - -/** - Get one variable by the index count. - - @param IndexTable The pointer to variable index table. - @param Count The index count of variable in index table. - - @return The pointer to variable header indexed by count. - -**/ -VARIABLE_HEADER * -GetVariableByIndex ( - IN VARIABLE_INDEX_TABLE *IndexTable, - IN UINT32 Count - ); - -/** - Record Variable in VariableIndex HOB. - - Record Variable in VariableIndex HOB and update the length of variable index table. - - @param IndexTable The pointer to variable index table. - @param Variable The pointer to the variable that will be recorded. - - @retval VOID - -**/ -VOID -VariableIndexTableUpdate ( - IN OUT VARIABLE_INDEX_TABLE *IndexTable, - IN VARIABLE_HEADER *Variable - ); - -#endif // _PEI_VARIABLE_H diff --git a/IntelFrameworkModulePkg/Universal/VariablePei/VariablePei.inf b/IntelFrameworkModulePkg/Universal/VariablePei/VariablePei.inf deleted file mode 100644 index d4ced59c7d..0000000000 --- a/IntelFrameworkModulePkg/Universal/VariablePei/VariablePei.inf +++ /dev/null @@ -1,114 +0,0 @@ -#/** @file -# Component description file for PeiVariable module. -# -# This module will produce EFI_PEI_READ_ONLY_VARIABLE_PPI and EFI_PEI_READ_ONLY_VARIABLE2_PPI -# Framework PEIM to provide the Variable functionality. -# Copyright (c) 2006 - 2009, Intel Corporation -# -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# -#**/ - -################################################################################ -# -# Defines Section - statements that will be processed to create a Makefile. -# -################################################################################ -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = PeiVariable - FILE_GUID = 34C8C28F-B61C-45a2-8F2E-89E46BECC63B - MODULE_TYPE = PEIM - VERSION_STRING = 1.0 - EFI_SPECIFICATION_VERSION = 0x00020000 - ENTRY_POINT = PeimInitializeVariableServices - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 IPF EBC -# - -################################################################################ -# -# Sources Section - list of files that are required for the build to succeed. -# -################################################################################ - -[Sources.common] - Variable.c - Variable.h - -[Sources.Ia32] - VariableWorker.c - -[Sources.X64] - VariableWorker.c - -[Sources.IPF] - Ipf/VariableWorker.c - -[Sources.EBC] - VariableWorker.c - - -################################################################################ -# -# Package Dependency Section - list of Package files that are required for -# this module. -# -################################################################################ - -[Packages] - MdeModulePkg/MdeModulePkg.dec - MdePkg/MdePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - - -################################################################################ -# -# Library Class Section - list of Library Classes that are required for -# this module. -# -################################################################################ - -[LibraryClasses] - BaseMemoryLib - PcdLib - HobLib - PeimEntryPoint - DebugLib - - -################################################################################ -# -# PPI C Name Section - list of PPI and PPI Notify C Names that this module -# uses or produces. -# -################################################################################ - -[Ppis] - gEfiPeiReadOnlyVariablePpiGuid # PPI ALWAYS_PRODUCED - gEfiPeiReadOnlyVariable2PpiGuid # PPI ALWAYS_PRODUCED - -[Guids] - gEfiVariableGuid - -################################################################################ -# -# Pcd DYNAMIC - list of PCDs that this module is coded for. -# -################################################################################ - -[Pcd.common] - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase - gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize - -[depex] - TRUE diff --git a/IntelFrameworkModulePkg/Universal/VariablePei/VariableWorker.c b/IntelFrameworkModulePkg/Universal/VariablePei/VariableWorker.c deleted file mode 100644 index 6d620112ae..0000000000 --- a/IntelFrameworkModulePkg/Universal/VariablePei/VariableWorker.c +++ /dev/null @@ -1,63 +0,0 @@ -/** @file - -Copyright (c) 2007, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - VariableWorker.c - -Abstract: - - Framework PEIM to provide the Variable functionality - -**/ - -#include - -/** - Get one variable by the index count. - - @param IndexTable The pointer to variable index table. - @param Count The index count of variable in index table. - - @return The pointer to variable header indexed by count. - -**/ -VARIABLE_HEADER * -GetVariableByIndex ( - IN VARIABLE_INDEX_TABLE *IndexTable, - IN UINT32 Count - ) -{ - return (VARIABLE_HEADER *) (UINTN) (IndexTable->Index[Count] + ((UINTN) IndexTable->StartPtr & 0xFFFF0000)); -} - -/** - Record Variable in VariableIndex HOB. - - Record Variable in VariableIndex HOB and update the length of variable index table. - - @param IndexTable The pointer to variable index table. - @param Variable The pointer to the variable that will be recorded. - - @retval VOID - -**/ -VOID -VariableIndexTableUpdate ( - IN OUT VARIABLE_INDEX_TABLE *IndexTable, - IN VARIABLE_HEADER *Variable - ) -{ - IndexTable->Index[IndexTable->Length++] = (UINT16) (UINTN) Variable; - - return; -} -