From: "Nate DeSimone" <nathaniel.l.desimone@intel.com>
To: "Luo, Heng" <heng.luo@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Chaganty, Rangasai V" <rangasai.v.chaganty@intel.com>
Subject: Re: [PATCH 31/40] TigerlakeSiliconPkg/Library: Add package common library instances
Date: Thu, 4 Feb 2021 03:56:31 +0000 [thread overview]
Message-ID: <BN6PR1101MB2147F39E8534A2FE4BEB836DCDB39@BN6PR1101MB2147.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210201013657.1833-31-heng.luo@intel.com>
Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
> -----Original Message-----
> From: Luo, Heng <heng.luo@intel.com>
> Sent: Sunday, January 31, 2021 5:37 PM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Desimone,
> Nathaniel L <nathaniel.l.desimone@intel.com>
> Subject: [PATCH 31/40] TigerlakeSiliconPkg/Library: Add package common
> library instances
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3171
>
> Adds the following files:
> * Library/BasePciSegmentMultiSegLibPci
> * Library/BaseSiConfigBlockLib
> * Library/PeiDxeSmmMmPciLib
>
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Signed-off-by: Heng Luo <heng.luo@intel.com>
> ---
>
> Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Base
> PciSegmentMultiSegLibPci.inf | 38 +++++++++++++++++++++++++++
>
> Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Base
> PciSegmentMultiSegLibPci.uni | 14 ++++++++++
>
> Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/PciS
> egmentLib.c | 1280
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
>
> Silicon/Intel/TigerlakeSiliconPkg/Library/BaseSiConfigBlockLib/BaseSiConfigBl
> ockLib.c | 86
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++
>
> Silicon/Intel/TigerlakeSiliconPkg/Library/BaseSiConfigBlockLib/BaseSiConfigBl
> ockLib.inf | 33 +++++++++++++++++++++++
>
> Silicon/Intel/TigerlakeSiliconPkg/Library/PeiDxeSmmMmPciLib/PeiDxeSmm
> MmPciLib.c | 35 +++++++++++++++++++++++++
>
> Silicon/Intel/TigerlakeSiliconPkg/Library/PeiDxeSmmMmPciLib/PeiDxeSmm
> MmPciLib.inf | 43 ++++++++++++++++++++++++++++++
> 7 files changed, 1529 insertions(+)
>
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Ba
> sePciSegmentMultiSegLibPci.inf
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Ba
> sePciSegmentMultiSegLibPci.inf
> new file mode 100644
> index 0000000000..b04bce9cf0
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Ba
> sePciSegmentMultiSegLibPci.inf
> @@ -0,0 +1,38 @@
> +## @file
>
> +# Instance of PCI Segment Library based on PCI Library.
>
> +#
>
> +# PCI Segment Library that layers on top of the PCI Library which only
>
> +# supports segment 0 and segment 1 PCI configuration access.
>
> +#
>
> +# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +#
>
> +##
>
> +
>
> +[Defines]
>
> + INF_VERSION = 0x00010005
>
> + BASE_NAME = BasePciSegmentMultiSegLibPci
>
> + MODULE_UNI_FILE = BasePciSegmentMultiSegLibPci.uni
>
> + FILE_GUID = AC65B409-DF03-466e-8D2B-6FCE1079F0B2
>
> + MODULE_TYPE = BASE
>
> + VERSION_STRING = 1.0
>
> + LIBRARY_CLASS = PciSegmentLib
>
> +
>
> +#
>
> +# The following information is for reference only and not required by the
> build tools.
>
> +#
>
> +# VALID_ARCHITECTURES = IA32 X64 IPF EBC
>
> +#
>
> +
>
> +[Sources]
>
> + PciSegmentLib.c
>
> +
>
> +[Packages]
>
> + MdePkg/MdePkg.dec
>
> + TigerlakeSiliconPkg/SiPkg.dec
>
> +
>
> +[LibraryClasses]
>
> + BaseLib
>
> + PciLib
>
> + DebugLib
>
> + PcdLib
>
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Ba
> sePciSegmentMultiSegLibPci.uni
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Ba
> sePciSegmentMultiSegLibPci.uni
> new file mode 100644
> index 0000000000..09bd0f5cfc
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Ba
> sePciSegmentMultiSegLibPci.uni
> @@ -0,0 +1,14 @@
> +/** @file
>
> + Instance of PCI Segment Library based on PCI Library.
>
> +
>
> + PCI Segment Library that layers on top of the PCI Library which only
>
> + supports segment 0 and segment 1 PCI configuration access.
>
> +
>
> + Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +**/
>
> +
>
> +
>
> +#string STR_MODULE_ABSTRACT #language en-US "Instance of PCI
> Segment Library based on PCI Library."
>
> +
>
> +#string STR_MODULE_DESCRIPTION #language en-US "PCI Segment
> Library that layers on top of the PCI Library which only supports segment 0
> and segment 1 PCI configuration access."
>
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Pc
> iSegmentLib.c
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Pc
> iSegmentLib.c
> new file mode 100644
> index 0000000000..0d0c64be3f
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BasePciSegmentMultiSegLibPci/Pc
> iSegmentLib.c
> @@ -0,0 +1,1280 @@
> +/** @file
>
> + PCI Segment Library that layers on top of the PCI Library which only
>
> + supports segment 0 and segment 1 PCI configuration access.
>
> +
>
> + Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +**/
>
> +
>
> +#include <Base.h>
>
> +#include <Library/BaseLib.h>
>
> +#include <Library/DebugLib.h>
>
> +#include <Library/PciLib.h>
>
> +#include <Library/PciSegmentLib.h>
>
> +
>
> +/**
>
> + Assert the validity of a PCI Segment address.
>
> + A valid PCI Segment address should not contain 1's in bits 28..31 and 33..63
>
> + and the segment should be 0 or 1.
>
> +
>
> + @param A The address to validate.
>
> + @param M Additional bits to assert to be zero.
>
> +
>
> +**/
>
> +#define ASSERT_INVALID_PCI_SEGMENT_ADDRESS(A,M) \
>
> + ASSERT (((A) & (0xfffffffef0000000ULL | (M))) == 0)
>
> +
>
> +/**
>
> + Convert the PCI Segment library address to PCI library address.
>
> + From ICL generation support the multiple segment, and the segment
> number start from BIT28,
>
> + So we convert the Segment Number offset from BIT32 to BIT28
>
> +
>
> + @param A The address to convert.
>
> +**/
>
> +#define PCI_SEGMENT_TO_PCI_ADDRESS(A) ((UINTN) (UINT32) ((A) |
> ((RShiftU64 ((A) & BIT32, 4)))))
>
> +
>
> +/**
>
> + Register a PCI device so PCI configuration registers may be accessed after
>
> + SetVirtualAddressMap().
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Bus, Device, Function
> and
>
> + Register.
>
> +
>
> + @retval RETURN_SUCCESS The PCI device was registered for runtime
> access.
>
> + @retval RETURN_UNSUPPORTED An attempt was made to call this
> function
>
> + after ExitBootServices().
>
> + @retval RETURN_UNSUPPORTED The resources required to access the
> PCI device
>
> + at runtime could not be mapped.
>
> + @retval RETURN_OUT_OF_RESOURCES There are not enough resources
> available to
>
> + complete the registration.
>
> +
>
> +**/
>
> +RETURN_STATUS
>
> +EFIAPI
>
> +PciSegmentRegisterForRuntimeAccess (
>
> + IN UINTN Address
>
> + )
>
> +{
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (Address, 0);
>
> + return PciRegisterForRuntimeAccess (PCI_SEGMENT_TO_PCI_ADDRESS
> (Address));
>
> +}
>
> +
>
> +/**
>
> + Reads an 8-bit PCI configuration register.
>
> +
>
> + Reads and returns the 8-bit PCI configuration register specified by Address.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> +
>
> + @return The 8-bit PCI configuration register specified by Address.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentRead8 (
>
> + IN UINT64 Address
>
> + )
>
> +{
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (Address, 0);
>
> +
>
> + return PciRead8 (PCI_SEGMENT_TO_PCI_ADDRESS (Address));
>
> +}
>
> +
>
> +/**
>
> + Writes an 8-bit PCI configuration register.
>
> +
>
> + Writes the 8-bit PCI configuration register specified by Address with the
> value specified by Value.
>
> + Value is returned. This function must guarantee that all PCI read and write
> operations are serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param Value The value to write.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentWrite8 (
>
> + IN UINT64 Address,
>
> + IN UINT8 Value
>
> + )
>
> +{
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (Address, 0);
>
> +
>
> + return PciWrite8 (PCI_SEGMENT_TO_PCI_ADDRESS (Address), Value);
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise OR of an 8-bit PCI configuration register with an 8-bit
> value.
>
> +
>
> + Reads the 8-bit PCI configuration register specified by Address,
>
> + performs a bitwise OR between the read result and the value specified by
> OrData,
>
> + and writes the result to the 8-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentOr8 (
>
> + IN UINT64 Address,
>
> + IN UINT8 OrData
>
> + )
>
> +{
>
> + return PciWrite8 (PCI_SEGMENT_TO_PCI_ADDRESS (Address), (UINT8)
> (PciSegmentRead8 (Address) | OrData));
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise AND of an 8-bit PCI configuration register with an 8-bit
> value.
>
> +
>
> + Reads the 8-bit PCI configuration register specified by Address,
>
> + performs a bitwise AND between the read result and the value specified
> by AndData,
>
> + and writes the result to the 8-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> + If any reserved bits in Address are set, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentAnd8 (
>
> + IN UINT64 Address,
>
> + IN UINT8 AndData
>
> + )
>
> +{
>
> + return PciSegmentWrite8 (Address, (UINT8) (PciSegmentRead8 (Address)
> & AndData));
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise AND of an 8-bit PCI configuration register with an 8-bit
> value,
>
> + followed a bitwise OR with another 8-bit value.
>
> +
>
> + Reads the 8-bit PCI configuration register specified by Address,
>
> + performs a bitwise AND between the read result and the value specified
> by AndData,
>
> + performs a bitwise OR between the result of the AND operation and the
> value specified by OrData,
>
> + and writes the result to the 8-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentAndThenOr8 (
>
> + IN UINT64 Address,
>
> + IN UINT8 AndData,
>
> + IN UINT8 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite8 (Address, (UINT8) ((PciSegmentRead8 (Address)
> & AndData) | OrData));
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field of a PCI configuration register.
>
> +
>
> + Reads the bit field in an 8-bit PCI configuration register. The bit field is
>
> + specified by the StartBit and the EndBit. The value of the bit field is
>
> + returned.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If StartBit is greater than 7, then ASSERT().
>
> + If EndBit is greater than 7, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to read.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..7.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..7.
>
> +
>
> + @return The value of the bit field read from the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentBitFieldRead8 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit
>
> + )
>
> +{
>
> + return BitFieldRead8 (PciSegmentRead8 (Address), StartBit, EndBit);
>
> +}
>
> +
>
> +/**
>
> + Writes a bit field to a PCI configuration register.
>
> +
>
> + Writes Value to the bit field of the PCI configuration register. The bit
>
> + field is specified by the StartBit and the EndBit. All other bits in the
>
> + destination PCI configuration register are preserved. The new value of the
>
> + 8-bit register is returned.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If StartBit is greater than 7, then ASSERT().
>
> + If EndBit is greater than 7, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If Value is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..7.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..7.
>
> + @param Value The new value of the bit field.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentBitFieldWrite8 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT8 Value
>
> + )
>
> +{
>
> + return PciSegmentWrite8 (
>
> + Address,
>
> + BitFieldWrite8 (PciSegmentRead8 (Address), StartBit, EndBit, Value)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field in an 8-bit PCI configuration, performs a bitwise OR, and
>
> + writes the result back to the bit field in the 8-bit port.
>
> +
>
> + Reads the 8-bit PCI configuration register specified by Address, performs a
>
> + bitwise OR between the read result and the value specified by
>
> + OrData, and writes the result to the 8-bit PCI configuration register
>
> + specified by Address. The value written to the PCI configuration register is
>
> + returned. This function must guarantee that all PCI read and write
> operations
>
> + are serialized. Extra left bits in OrData are stripped.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If StartBit is greater than 7, then ASSERT().
>
> + If EndBit is greater than 7, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If OrData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..7.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..7.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentBitFieldOr8 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT8 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite8 (
>
> + Address,
>
> + BitFieldOr8 (PciSegmentRead8 (Address), StartBit, EndBit, OrData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field in an 8-bit PCI configuration register, performs a bitwise
>
> + AND, and writes the result back to the bit field in the 8-bit register.
>
> +
>
> + Reads the 8-bit PCI configuration register specified by Address, performs a
>
> + bitwise AND between the read result and the value specified by AndData,
> and
>
> + writes the result to the 8-bit PCI configuration register specified by
>
> + Address. The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
>
> + serialized. Extra left bits in AndData are stripped.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If StartBit is greater than 7, then ASSERT().
>
> + If EndBit is greater than 7, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If AndData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..7.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..7.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentBitFieldAnd8 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT8 AndData
>
> + )
>
> +{
>
> + return PciSegmentWrite8 (
>
> + Address,
>
> + BitFieldAnd8 (PciSegmentRead8 (Address), StartBit, EndBit, AndData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field in an 8-bit port, performs a bitwise AND followed by a
>
> + bitwise OR, and writes the result back to the bit field in the
>
> + 8-bit port.
>
> +
>
> + Reads the 8-bit PCI configuration register specified by Address, performs a
>
> + bitwise AND followed by a bitwise OR between the read result and
>
> + the value specified by AndData, and writes the result to the 8-bit PCI
>
> + configuration register specified by Address. The value written to the PCI
>
> + configuration register is returned. This function must guarantee that all PCI
>
> + read and write operations are serialized. Extra left bits in both AndData and
>
> + OrData are stripped.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If StartBit is greater than 7, then ASSERT().
>
> + If EndBit is greater than 7, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If AndData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> + If OrData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..7.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..7.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> + @param OrData The value to OR with the result of the AND operation.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT8
>
> +EFIAPI
>
> +PciSegmentBitFieldAndThenOr8 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT8 AndData,
>
> + IN UINT8 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite8 (
>
> + Address,
>
> + BitFieldAndThenOr8 (PciSegmentRead8 (Address), StartBit, EndBit,
> AndData, OrData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a 16-bit PCI configuration register.
>
> +
>
> + Reads and returns the 16-bit PCI configuration register specified by
> Address.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> +
>
> + @return The 16-bit PCI configuration register specified by Address.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentRead16 (
>
> + IN UINT64 Address
>
> + )
>
> +{
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (Address, 1);
>
> +
>
> + return PciRead16 (PCI_SEGMENT_TO_PCI_ADDRESS (Address));
>
> +}
>
> +
>
> +/**
>
> + Writes a 16-bit PCI configuration register.
>
> +
>
> + Writes the 16-bit PCI configuration register specified by Address with the
> value specified by Value.
>
> + Value is returned. This function must guarantee that all PCI read and write
> operations are serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param Value The value to write.
>
> +
>
> + @return The parameter of Value.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentWrite16 (
>
> + IN UINT64 Address,
>
> + IN UINT16 Value
>
> + )
>
> +{
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (Address, 1);
>
> +
>
> + return PciWrite16 (PCI_SEGMENT_TO_PCI_ADDRESS (Address), Value);
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise OR of a 16-bit PCI configuration register with
>
> + a 16-bit value.
>
> +
>
> + Reads the 16-bit PCI configuration register specified by Address, performs
> a
>
> + bitwise OR between the read result and the value specified by
>
> + OrData, and writes the result to the 16-bit PCI configuration register
>
> + specified by Address. The value written to the PCI configuration register is
>
> + returned. This function must guarantee that all PCI read and write
> operations
>
> + are serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus, Device,
> Function and
>
> + Register.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentOr16 (
>
> + IN UINT64 Address,
>
> + IN UINT16 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite16 (Address, (UINT16) (PciSegmentRead16
> (Address) | OrData));
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise AND of a 16-bit PCI configuration register with a 16-bit
> value.
>
> +
>
> + Reads the 16-bit PCI configuration register specified by Address,
>
> + performs a bitwise AND between the read result and the value specified
> by AndData,
>
> + and writes the result to the 16-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentAnd16 (
>
> + IN UINT64 Address,
>
> + IN UINT16 AndData
>
> + )
>
> +{
>
> + return PciSegmentWrite16 (Address, (UINT16) (PciSegmentRead16
> (Address) & AndData));
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise AND of a 16-bit PCI configuration register with a 16-bit
> value,
>
> + followed a bitwise OR with another 16-bit value.
>
> +
>
> + Reads the 16-bit PCI configuration register specified by Address,
>
> + performs a bitwise AND between the read result and the value specified
> by AndData,
>
> + performs a bitwise OR between the result of the AND operation and the
> value specified by OrData,
>
> + and writes the result to the 16-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentAndThenOr16 (
>
> + IN UINT64 Address,
>
> + IN UINT16 AndData,
>
> + IN UINT16 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite16 (Address, (UINT16) ((PciSegmentRead16
> (Address) & AndData) | OrData));
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field of a PCI configuration register.
>
> +
>
> + Reads the bit field in a 16-bit PCI configuration register. The bit field is
>
> + specified by the StartBit and the EndBit. The value of the bit field is
>
> + returned.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> + If StartBit is greater than 15, then ASSERT().
>
> + If EndBit is greater than 15, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to read.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..15.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..15.
>
> +
>
> + @return The value of the bit field read from the PCI configuration register.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentBitFieldRead16 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit
>
> + )
>
> +{
>
> + return BitFieldRead16 (PciSegmentRead16 (Address), StartBit, EndBit);
>
> +}
>
> +
>
> +/**
>
> + Writes a bit field to a PCI configuration register.
>
> +
>
> + Writes Value to the bit field of the PCI configuration register. The bit
>
> + field is specified by the StartBit and the EndBit. All other bits in the
>
> + destination PCI configuration register are preserved. The new value of the
>
> + 16-bit register is returned.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> + If StartBit is greater than 15, then ASSERT().
>
> + If EndBit is greater than 15, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If Value is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..15.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..15.
>
> + @param Value The new value of the bit field.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentBitFieldWrite16 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT16 Value
>
> + )
>
> +{
>
> + return PciSegmentWrite16 (
>
> + Address,
>
> + BitFieldWrite16 (PciSegmentRead16 (Address), StartBit, EndBit, Value)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads the 16-bit PCI configuration register specified by Address,
>
> + performs a bitwise OR between the read result and the value specified by
> OrData,
>
> + and writes the result to the 16-bit PCI configuration register specified by
> Address.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> + If StartBit is greater than 15, then ASSERT().
>
> + If EndBit is greater than 15, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If OrData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..15.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..15.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentBitFieldOr16 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT16 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite16 (
>
> + Address,
>
> + BitFieldOr16 (PciSegmentRead16 (Address), StartBit, EndBit, OrData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field in a 16-bit PCI configuration, performs a bitwise OR,
>
> + and writes the result back to the bit field in the 16-bit port.
>
> +
>
> + Reads the 16-bit PCI configuration register specified by Address,
>
> + performs a bitwise OR between the read result and the value specified by
> OrData,
>
> + and writes the result to the 16-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> + Extra left bits in OrData are stripped.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 16-bit boundary, then ASSERT().
>
> + If StartBit is greater than 7, then ASSERT().
>
> + If EndBit is greater than 7, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If AndData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + The ordinal of the least significant bit in a byte is bit 0.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + The ordinal of the most significant bit in a byte is bit 7.
>
> + @param AndData The value to AND with the read value from the PCI
> configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentBitFieldAnd16 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT16 AndData
>
> + )
>
> +{
>
> + return PciSegmentWrite16 (
>
> + Address,
>
> + BitFieldAnd16 (PciSegmentRead16 (Address), StartBit, EndBit,
> AndData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field in a 16-bit port, performs a bitwise AND followed by a
>
> + bitwise OR, and writes the result back to the bit field in the
>
> + 16-bit port.
>
> +
>
> + Reads the 16-bit PCI configuration register specified by Address, performs
> a
>
> + bitwise AND followed by a bitwise OR between the read result and
>
> + the value specified by AndData, and writes the result to the 16-bit PCI
>
> + configuration register specified by Address. The value written to the PCI
>
> + configuration register is returned. This function must guarantee that all PCI
>
> + read and write operations are serialized. Extra left bits in both AndData and
>
> + OrData are stripped.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If StartBit is greater than 15, then ASSERT().
>
> + If EndBit is greater than 15, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If AndData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> + If OrData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..15.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..15.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> + @param OrData The value to OR with the result of the AND operation.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +PciSegmentBitFieldAndThenOr16 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT16 AndData,
>
> + IN UINT16 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite16 (
>
> + Address,
>
> + BitFieldAndThenOr16 (PciSegmentRead16 (Address), StartBit, EndBit,
> AndData, OrData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a 32-bit PCI configuration register.
>
> +
>
> + Reads and returns the 32-bit PCI configuration register specified by
> Address.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 32-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> +
>
> + @return The 32-bit PCI configuration register specified by Address.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentRead32 (
>
> + IN UINT64 Address
>
> + )
>
> +{
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (Address, 3);
>
> +
>
> + return PciRead32 (PCI_SEGMENT_TO_PCI_ADDRESS (Address));
>
> +}
>
> +
>
> +/**
>
> + Writes a 32-bit PCI configuration register.
>
> +
>
> + Writes the 32-bit PCI configuration register specified by Address with the
> value specified by Value.
>
> + Value is returned. This function must guarantee that all PCI read and write
> operations are serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 32-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param Value The value to write.
>
> +
>
> + @return The parameter of Value.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentWrite32 (
>
> + IN UINT64 Address,
>
> + IN UINT32 Value
>
> + )
>
> +{
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (Address, 3);
>
> +
>
> + return PciWrite32 (PCI_SEGMENT_TO_PCI_ADDRESS (Address), Value);
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise OR of a 32-bit PCI configuration register with a 32-bit
> value.
>
> +
>
> + Reads the 32-bit PCI configuration register specified by Address,
>
> + performs a bitwise OR between the read result and the value specified by
> OrData,
>
> + and writes the result to the 32-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 32-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentOr32 (
>
> + IN UINT64 Address,
>
> + IN UINT32 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite32 (Address, PciSegmentRead32 (Address) |
> OrData);
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise AND of a 32-bit PCI configuration register with a 32-bit
> value.
>
> +
>
> + Reads the 32-bit PCI configuration register specified by Address,
>
> + performs a bitwise AND between the read result and the value specified
> by AndData,
>
> + and writes the result to the 32-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 32-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentAnd32 (
>
> + IN UINT64 Address,
>
> + IN UINT32 AndData
>
> + )
>
> +{
>
> + return PciSegmentWrite32 (Address, PciSegmentRead32 (Address) &
> AndData);
>
> +}
>
> +
>
> +/**
>
> + Performs a bitwise AND of a 32-bit PCI configuration register with a 32-bit
> value,
>
> + followed a bitwise OR with another 32-bit value.
>
> +
>
> + Reads the 32-bit PCI configuration register specified by Address,
>
> + performs a bitwise AND between the read result and the value specified
> by AndData,
>
> + performs a bitwise OR between the result of the AND operation and the
> value specified by OrData,
>
> + and writes the result to the 32-bit PCI configuration register specified by
> Address.
>
> + The value written to the PCI configuration register is returned.
>
> + This function must guarantee that all PCI read and write operations are
> serialized.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 32-bit boundary, then ASSERT().
>
> +
>
> + @param Address The address that encodes the PCI Segment, Bus,
> Device, Function, and Register.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentAndThenOr32 (
>
> + IN UINT64 Address,
>
> + IN UINT32 AndData,
>
> + IN UINT32 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite32 (Address, (PciSegmentRead32 (Address) &
> AndData) | OrData);
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field of a PCI configuration register.
>
> +
>
> + Reads the bit field in a 32-bit PCI configuration register. The bit field is
>
> + specified by the StartBit and the EndBit. The value of the bit field is
>
> + returned.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 32-bit boundary, then ASSERT().
>
> + If StartBit is greater than 31, then ASSERT().
>
> + If EndBit is greater than 31, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to read.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..31.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..31.
>
> +
>
> + @return The value of the bit field read from the PCI configuration register.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentBitFieldRead32 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit
>
> + )
>
> +{
>
> + return BitFieldRead32 (PciSegmentRead32 (Address), StartBit, EndBit);
>
> +}
>
> +
>
> +/**
>
> + Writes a bit field to a PCI configuration register.
>
> +
>
> + Writes Value to the bit field of the PCI configuration register. The bit
>
> + field is specified by the StartBit and the EndBit. All other bits in the
>
> + destination PCI configuration register are preserved. The new value of the
>
> + 32-bit register is returned.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 32-bit boundary, then ASSERT().
>
> + If StartBit is greater than 31, then ASSERT().
>
> + If EndBit is greater than 31, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If Value is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..31.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..31.
>
> + @param Value The new value of the bit field.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentBitFieldWrite32 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT32 Value
>
> + )
>
> +{
>
> + return PciSegmentWrite32 (
>
> + Address,
>
> + BitFieldWrite32 (PciSegmentRead32 (Address), StartBit, EndBit, Value)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field in a 32-bit PCI configuration, performs a bitwise OR, and
>
> + writes the result back to the bit field in the 32-bit port.
>
> +
>
> + Reads the 32-bit PCI configuration register specified by Address, performs
> a
>
> + bitwise OR between the read result and the value specified by
>
> + OrData, and writes the result to the 32-bit PCI configuration register
>
> + specified by Address. The value written to the PCI configuration register is
>
> + returned. This function must guarantee that all PCI read and write
> operations
>
> + are serialized. Extra left bits in OrData are stripped.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If StartBit is greater than 31, then ASSERT().
>
> + If EndBit is greater than 31, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If OrData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..31.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..31.
>
> + @param OrData The value to OR with the PCI configuration register.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentBitFieldOr32 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT32 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite32 (
>
> + Address,
>
> + BitFieldOr32 (PciSegmentRead32 (Address), StartBit, EndBit, OrData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field in a 32-bit PCI configuration register, performs a bitwise
>
> + AND, and writes the result back to the bit field in the 32-bit register.
>
> +
>
> +
>
> + Reads the 32-bit PCI configuration register specified by Address, performs
> a bitwise
>
> + AND between the read result and the value specified by AndData, and
> writes the result
>
> + to the 32-bit PCI configuration register specified by Address. The value
> written to
>
> + the PCI configuration register is returned. This function must guarantee
> that all PCI
>
> + read and write operations are serialized. Extra left bits in AndData are
> stripped.
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If Address is not aligned on a 32-bit boundary, then ASSERT().
>
> + If StartBit is greater than 31, then ASSERT().
>
> + If EndBit is greater than 31, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If AndData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..31.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..31.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentBitFieldAnd32 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT32 AndData
>
> + )
>
> +{
>
> + return PciSegmentWrite32 (
>
> + Address,
>
> + BitFieldAnd32 (PciSegmentRead32 (Address), StartBit, EndBit,
> AndData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a bit field in a 32-bit port, performs a bitwise AND followed by a
>
> + bitwise OR, and writes the result back to the bit field in the
>
> + 32-bit port.
>
> +
>
> + Reads the 32-bit PCI configuration register specified by Address, performs
> a
>
> + bitwise AND followed by a bitwise OR between the read result and
>
> + the value specified by AndData, and writes the result to the 32-bit PCI
>
> + configuration register specified by Address. The value written to the PCI
>
> + configuration register is returned. This function must guarantee that all PCI
>
> + read and write operations are serialized. Extra left bits in both AndData and
>
> + OrData are stripped.
>
> +
>
> + If any reserved bits in Address are set, then ASSERT().
>
> + If StartBit is greater than 31, then ASSERT().
>
> + If EndBit is greater than 31, then ASSERT().
>
> + If EndBit is less than StartBit, then ASSERT().
>
> + If AndData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> + If OrData is larger than the bitmask value range specified by StartBit and
> EndBit, then ASSERT().
>
> +
>
> + @param Address The PCI configuration register to write.
>
> + @param StartBit The ordinal of the least significant bit in the bit field.
>
> + Range 0..31.
>
> + @param EndBit The ordinal of the most significant bit in the bit field.
>
> + Range 0..31.
>
> + @param AndData The value to AND with the PCI configuration register.
>
> + @param OrData The value to OR with the result of the AND operation.
>
> +
>
> + @return The value written back to the PCI configuration register.
>
> +
>
> +**/
>
> +UINT32
>
> +EFIAPI
>
> +PciSegmentBitFieldAndThenOr32 (
>
> + IN UINT64 Address,
>
> + IN UINTN StartBit,
>
> + IN UINTN EndBit,
>
> + IN UINT32 AndData,
>
> + IN UINT32 OrData
>
> + )
>
> +{
>
> + return PciSegmentWrite32 (
>
> + Address,
>
> + BitFieldAndThenOr32 (PciSegmentRead32 (Address), StartBit, EndBit,
> AndData, OrData)
>
> + );
>
> +}
>
> +
>
> +/**
>
> + Reads a range of PCI configuration registers into a caller supplied buffer.
>
> +
>
> + Reads the range of PCI configuration registers specified by StartAddress
> and
>
> + Size into the buffer specified by Buffer. This function only allows the PCI
>
> + configuration registers from a single PCI function to be read. Size is
>
> + returned. When possible 32-bit PCI configuration read cycles are used to
> read
>
> + from StartAdress to StartAddress + Size. Due to alignment restrictions, 8-
> bit
>
> + and 16-bit PCI configuration read cycles may be used at the beginning and
> the
>
> + end of the range.
>
> +
>
> + If any reserved bits in StartAddress are set, then ASSERT().
>
> + If ((StartAddress & 0xFFF) + Size) > 0x1000, then ASSERT().
>
> + If Size > 0 and Buffer is NULL, then ASSERT().
>
> +
>
> + @param StartAddress The starting address that encodes the PCI
> Segment, Bus, Device,
>
> + Function and Register.
>
> + @param Size The size in bytes of the transfer.
>
> + @param Buffer The pointer to a buffer receiving the data read.
>
> +
>
> + @return Size
>
> +
>
> +**/
>
> +UINTN
>
> +EFIAPI
>
> +PciSegmentReadBuffer (
>
> + IN UINT64 StartAddress,
>
> + IN UINTN Size,
>
> + OUT VOID *Buffer
>
> + )
>
> +{
>
> + UINTN ReturnValue;
>
> +
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (StartAddress, 0);
>
> + ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000);
>
> +
>
> + if (Size == 0) {
>
> + return Size;
>
> + }
>
> +
>
> + ASSERT (Buffer != NULL);
>
> +
>
> + //
>
> + // Save Size for return
>
> + //
>
> + ReturnValue = Size;
>
> +
>
> + if ((StartAddress & BIT0) != 0) {
>
> + //
>
> + // Read a byte if StartAddress is byte aligned
>
> + //
>
> + *(volatile UINT8 *)Buffer = PciSegmentRead8 (StartAddress);
>
> + StartAddress += sizeof (UINT8);
>
> + Size -= sizeof (UINT8);
>
> + Buffer = (UINT8*)Buffer + 1;
>
> + }
>
> +
>
> + if (Size >= sizeof (UINT16) && (StartAddress & BIT1) != 0) {
>
> + //
>
> + // Read a word if StartAddress is word aligned
>
> + //
>
> + WriteUnaligned16 (Buffer, PciSegmentRead16 (StartAddress));
>
> + StartAddress += sizeof (UINT16);
>
> + Size -= sizeof (UINT16);
>
> + Buffer = (UINT16*)Buffer + 1;
>
> + }
>
> +
>
> + while (Size >= sizeof (UINT32)) {
>
> + //
>
> + // Read as many double words as possible
>
> + //
>
> + WriteUnaligned32 (Buffer, PciSegmentRead32 (StartAddress));
>
> + StartAddress += sizeof (UINT32);
>
> + Size -= sizeof (UINT32);
>
> + Buffer = (UINT32*)Buffer + 1;
>
> + }
>
> +
>
> + if (Size >= sizeof (UINT16)) {
>
> + //
>
> + // Read the last remaining word if exist
>
> + //
>
> + WriteUnaligned16 (Buffer, PciSegmentRead16 (StartAddress));
>
> + StartAddress += sizeof (UINT16);
>
> + Size -= sizeof (UINT16);
>
> + Buffer = (UINT16*)Buffer + 1;
>
> + }
>
> +
>
> + if (Size >= sizeof (UINT8)) {
>
> + //
>
> + // Read the last remaining byte if exist
>
> + //
>
> + *(volatile UINT8 *)Buffer = PciSegmentRead8 (StartAddress);
>
> + }
>
> +
>
> + return ReturnValue;
>
> +}
>
> +
>
> +/**
>
> + Copies the data in a caller supplied buffer to a specified range of PCI
>
> + configuration space.
>
> +
>
> + Writes the range of PCI configuration registers specified by StartAddress
> and
>
> + Size from the buffer specified by Buffer. This function only allows the PCI
>
> + configuration registers from a single PCI function to be written. Size is
>
> + returned. When possible 32-bit PCI configuration write cycles are used to
>
> + write from StartAdress to StartAddress + Size. Due to alignment
> restrictions,
>
> + 8-bit and 16-bit PCI configuration write cycles may be used at the beginning
>
> + and the end of the range.
>
> +
>
> + If any reserved bits in StartAddress are set, then ASSERT().
>
> + If ((StartAddress & 0xFFF) + Size) > 0x1000, then ASSERT().
>
> + If Size > 0 and Buffer is NULL, then ASSERT().
>
> +
>
> + @param StartAddress The starting address that encodes the PCI
> Segment, Bus, Device,
>
> + Function and Register.
>
> + @param Size The size in bytes of the transfer.
>
> + @param Buffer The pointer to a buffer containing the data to write.
>
> +
>
> + @return The parameter of Size.
>
> +
>
> +**/
>
> +UINTN
>
> +EFIAPI
>
> +PciSegmentWriteBuffer (
>
> + IN UINT64 StartAddress,
>
> + IN UINTN Size,
>
> + IN VOID *Buffer
>
> + )
>
> +{
>
> + UINTN ReturnValue;
>
> +
>
> + ASSERT_INVALID_PCI_SEGMENT_ADDRESS (StartAddress, 0);
>
> + ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000);
>
> +
>
> + if (Size == 0) {
>
> + return 0;
>
> + }
>
> +
>
> + ASSERT (Buffer != NULL);
>
> +
>
> + //
>
> + // Save Size for return
>
> + //
>
> + ReturnValue = Size;
>
> +
>
> + if ((StartAddress & BIT0) != 0) {
>
> + //
>
> + // Write a byte if StartAddress is byte aligned
>
> + //
>
> + PciSegmentWrite8 (StartAddress, *(UINT8*) Buffer);
>
> + StartAddress += sizeof (UINT8);
>
> + Size -= sizeof (UINT8);
>
> + Buffer = (UINT8*) Buffer + 1;
>
> + }
>
> +
>
> + if (Size >= sizeof (UINT16) && (StartAddress & BIT1) != 0) {
>
> + //
>
> + // Write a word if StartAddress is word aligned
>
> + //
>
> + PciSegmentWrite16 (StartAddress, ReadUnaligned16 (Buffer));
>
> + StartAddress += sizeof (UINT16);
>
> + Size -= sizeof (UINT16);
>
> + Buffer = (UINT16*) Buffer + 1;
>
> + }
>
> +
>
> + while (Size >= sizeof (UINT32)) {
>
> + //
>
> + // Write as many double words as possible
>
> + //
>
> + PciSegmentWrite32 (StartAddress, ReadUnaligned32 (Buffer));
>
> + StartAddress += sizeof (UINT32);
>
> + Size -= sizeof (UINT32);
>
> + Buffer = (UINT32*) Buffer + 1;
>
> + }
>
> +
>
> + if (Size >= sizeof (UINT16)) {
>
> + //
>
> + // Write the last remaining word if exist
>
> + //
>
> + PciSegmentWrite16 (StartAddress, ReadUnaligned16 (Buffer));
>
> + StartAddress += sizeof (UINT16);
>
> + Size -= sizeof (UINT16);
>
> + Buffer = (UINT16*) Buffer + 1;
>
> + }
>
> +
>
> + if (Size >= sizeof (UINT8)) {
>
> + //
>
> + // Write the last remaining byte if exist
>
> + //
>
> + PciSegmentWrite8 (StartAddress, *(UINT8*) Buffer);
>
> + }
>
> +
>
> + return ReturnValue;
>
> +}
>
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/Library/BaseSiConfigBlockLib/BaseSiConfig
> BlockLib.c
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BaseSiConfigBlockLib/BaseSiConfi
> gBlockLib.c
> new file mode 100644
> index 0000000000..4644de9b74
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BaseSiConfigBlockLib/BaseSiConfi
> gBlockLib.c
> @@ -0,0 +1,86 @@
> +/** @file
>
> + This file is BaseSiConfigBlockLib library is used to add config blocks
>
> + to config block header.
>
> +
>
> + Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +**/
>
> +#include <ConfigBlock.h>
>
> +#include <Library/DebugLib.h>
>
> +#include <Library/IoLib.h>
>
> +#include <Library/BaseMemoryLib.h>
>
> +#include <Library/ConfigBlockLib.h>
>
> +#include <Library/SiConfigBlockLib.h>
>
> +
>
> +
>
> +/**
>
> + GetComponentConfigBlockTotalSize get config block table total size.
>
> +
>
> + @param[in] ComponentBlocks Component blocks array
>
> + @param[in] TotalBlockCount Number of blocks
>
> +
>
> + @retval Size of config block table
>
> +**/
>
> +UINT16
>
> +EFIAPI
>
> +GetComponentConfigBlockTotalSize (
>
> + IN COMPONENT_BLOCK_ENTRY *ComponentBlocks,
>
> + IN UINT16 TotalBlockCount
>
> + )
>
> +{
>
> + UINT16 TotalBlockSize;
>
> + UINT16 BlockCount;
>
> +
>
> + TotalBlockSize = 0;
>
> + for (BlockCount = 0 ; BlockCount < TotalBlockCount; BlockCount++) {
>
> + TotalBlockSize += (UINT32) ComponentBlocks[BlockCount].Size;
>
> + DEBUG ((DEBUG_INFO, "TotalBlockSize after adding Block[0x%x]=
> 0x%x\n", BlockCount, TotalBlockSize));
>
> + }
>
> +
>
> + return TotalBlockSize;
>
> +}
>
> +
>
> +/**
>
> + AddComponentConfigBlocks add all config blocks.
>
> +
>
> + @param[in] ConfigBlockTableAddress The pointer to add config blocks
>
> + @param[in] ComponentBlocks Config blocks array
>
> + @param[in] TotalBlockCount Number of blocks
>
> +
>
> + @retval EFI_SUCCESS The policy default is initialized.
>
> + @retval EFI_OUT_OF_RESOURCES Insufficient resources to create
> buffer
>
> +**/
>
> +EFI_STATUS
>
> +EFIAPI
>
> +AddComponentConfigBlocks (
>
> + IN VOID *ConfigBlockTableAddress,
>
> + IN COMPONENT_BLOCK_ENTRY *ComponentBlocks,
>
> + IN UINT16 TotalBlockCount
>
> + )
>
> +{
>
> + UINT16 BlockCount;
>
> + VOID *ConfigBlockPointer;
>
> + CONFIG_BLOCK ConfigBlockBuf;
>
> + EFI_STATUS Status;
>
> +
>
> + Status = EFI_SUCCESS;
>
> +
>
> + //
>
> + // Initialize ConfigBlockPointer to NULL
>
> + //
>
> + ConfigBlockPointer = NULL;
>
> + //
>
> + // Loop to identify each config block from ComponentBlocks[] Table and
> add each of them
>
> + //
>
> + for (BlockCount = 0; BlockCount < TotalBlockCount; BlockCount++) {
>
> + ZeroMem (&ConfigBlockBuf, sizeof (CONFIG_BLOCK));
>
> + CopyMem (&(ConfigBlockBuf.Header.GuidHob.Name),
> ComponentBlocks[BlockCount].Guid, sizeof (EFI_GUID));
>
> + ConfigBlockBuf.Header.GuidHob.Header.HobLength =
> ComponentBlocks[BlockCount].Size;
>
> + ConfigBlockBuf.Header.Revision =
> ComponentBlocks[BlockCount].Revision;
>
> + ConfigBlockPointer = (VOID *)&ConfigBlockBuf;
>
> + Status = AddConfigBlock ((VOID *)ConfigBlockTableAddress, (VOID
> *)&ConfigBlockPointer);
>
> + ASSERT_EFI_ERROR (Status);
>
> + ComponentBlocks[BlockCount].LoadDefault (ConfigBlockPointer);
>
> + }
>
> + return Status;
>
> +}
>
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/Library/BaseSiConfigBlockLib/BaseSiConfig
> BlockLib.inf
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BaseSiConfigBlockLib/BaseSiConfi
> gBlockLib.inf
> new file mode 100644
> index 0000000000..e23b2d342f
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/BaseSiConfigBlockLib/BaseSiConfi
> gBlockLib.inf
> @@ -0,0 +1,33 @@
> +## @file
>
> +# Component description file for the BaseSiConfigBlockLib library.
>
> +#
>
> +# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +#
>
> +##
>
> +
>
> +
>
> +[Defines]
>
> +INF_VERSION = 0x00010017
>
> +BASE_NAME = BaseSiConfigBlockLib
>
> +FILE_GUID = 6C068D0F-F48E-48CB-B369-433E507AF4A2
>
> +VERSION_STRING = 1.0
>
> +MODULE_TYPE = BASE
>
> +LIBRARY_CLASS = SiConfigBlockLib
>
> +
>
> +
>
> +[LibraryClasses]
>
> +DebugLib
>
> +IoLib
>
> +ConfigBlockLib
>
> +
>
> +
>
> +[Packages]
>
> +MdePkg/MdePkg.dec
>
> +TigerlakeSiliconPkg/SiPkg.dec
>
> +
>
> +
>
> +[Sources]
>
> +BaseSiConfigBlockLib.c
>
> +
>
> +
>
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/Library/PeiDxeSmmMmPciLib/PeiDxeSm
> mMmPciLib.c
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/PeiDxeSmmMmPciLib/PeiDxeSm
> mMmPciLib.c
> new file mode 100644
> index 0000000000..48e14dc9ee
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/PeiDxeSmmMmPciLib/PeiDxeSm
> mMmPciLib.c
> @@ -0,0 +1,35 @@
> +/** @file
>
> + This file contains routines that get PCI Express Address
>
> +
>
> + Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +**/
>
> +#include <Library/BaseLib.h>
>
> +#include <Library/PcdLib.h>
>
> +#include <Library/DebugLib.h>
>
> +
>
> +/**
>
> + This procedure will get PCIE address
>
> +
>
> + @param[in] Bus Pci Bus Number
>
> + @param[in] Device Pci Device Number
>
> + @param[in] Function Pci Function Number
>
> +
>
> + @retval PCIE address
>
> +**/
>
> +UINTN
>
> +EFIAPI
>
> +MmPciBase (
>
> + IN UINT32 Bus,
>
> + IN UINT32 Device,
>
> + IN UINT32 Function
>
> + )
>
> +{
>
> + ASSERT ((Bus <= 0xFF) && (Device <= 0x1F) && (Function <= 0x7));
>
> +
>
> +#ifdef FSP_FLAG
>
> + return ((UINTN) PcdGet64 (PcdSiPciExpressBaseAddress) + (UINTN) (Bus
> << 20) + (UINTN) (Device << 15) + (UINTN) (Function << 12));
>
> +#else
>
> + return ((UINTN) PcdGet64 (PcdPciExpressBaseAddress) + (UINTN) (Bus
> << 20) + (UINTN) (Device << 15) + (UINTN) (Function << 12));
>
> +#endif
>
> +}
>
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/Library/PeiDxeSmmMmPciLib/PeiDxeSm
> mMmPciLib.inf
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/PeiDxeSmmMmPciLib/PeiDxeSm
> mMmPciLib.inf
> new file mode 100644
> index 0000000000..353b97f3f6
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/Library/PeiDxeSmmMmPciLib/PeiDxeSm
> mMmPciLib.inf
> @@ -0,0 +1,43 @@
> +## @file
>
> +# Component description file for the PeiDxeSmmMmPciLib
>
> +#
>
> +# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +#
>
> +##
>
> +
>
> +
>
> +[Defines]
>
> +INF_VERSION = 0x00010017
>
> +BASE_NAME = PeiDxeSmmMmPciLib
>
> +FILE_GUID = D03D6670-A032-11E2-9E96-0800200C9A66
>
> +VERSION_STRING = 1.0
>
> +MODULE_TYPE = BASE
>
> +LIBRARY_CLASS = MmPciLib
>
> +#
>
> +# The following information is for reference only and not required by the
> build tools.
>
> +#
>
> +# VALID_ARCHITECTURES = IA32 X64 IPF EBC
>
> +#
>
> +
>
> +
>
> +
>
> +[LibraryClasses]
>
> +BaseLib
>
> +PcdLib
>
> +DebugLib
>
> +
>
> +
>
> +[Packages]
>
> +MdePkg/MdePkg.dec
>
> +TigerlakeSiliconPkg/SiPkg.dec
>
> +
>
> +
>
> +[Pcd]
>
> +gSiPkgTokenSpaceGuid.PcdSiPciExpressBaseAddress
>
> +
>
> +[FixedPcd]
>
> +gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
>
> +
>
> +[Sources]
>
> +PeiDxeSmmMmPciLib.c
>
> --
> 2.24.0.windows.2
next prev parent reply other threads:[~2021-02-04 3:56 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-01 1:36 [PATCH 01/40] TigerlakeSiliconPkg: Add package and Include/ConfigBlock headers Heng Luo
2021-02-01 1:36 ` [PATCH 02/40] TigerlakeSiliconPkg/Include: Add Library, PPI and Protocol include headers Heng Luo
2021-02-04 3:51 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 03/40] TigerlakeSiliconPkg/Include: Add Pins, Register and other " Heng Luo
2021-02-04 3:52 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 04/40] TigerlakeSiliconPkg/Cpu: Add Include headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 05/40] TigerlakeSiliconPkg/Pch: Add include headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 06/40] TigerlakeSiliconPkg/Pch: Add IncludePrivate headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 07/40] TigerlakeSiliconPkg/SystemAgent: Add include headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 08/40] TigerlakeSiliconPkg/SystemAgent: Add IncludePrivate headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 09/40] TigerlakeSiliconPkg/Fru: Add TglCpu/Include headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 10/40] TigerlakeSiliconPkg/Fru: Add TglCpu/IncludePrivate headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 11/40] TigerlakeSiliconPkg/Fru: Add TglPch/Include headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 12/40] TigerlakeSiliconPkg/Fru: Add TglPch/IncludePrivate headers Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 13/40] TigerlakeSiliconPkg/IpBlock: Add Cnvi component Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 14/40] TigerlakeSiliconPkg/IpBlock: Add CpuPcieRp component Heng Luo
2021-02-04 3:53 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 15/40] TigerlakeSiliconPkg/IpBlock: Add Espi component Heng Luo
2021-02-04 3:54 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 16/40] TigerlakeSiliconPkg/IpBlock: Add Gbe component Heng Luo
2021-02-04 3:54 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 17/40] TigerlakeSiliconPkg/IpBlock: Add Gpio component Heng Luo
2021-02-04 3:54 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 18/40] TigerlakeSiliconPkg/IpBlock: Add Graphics component Heng Luo
2021-02-04 3:54 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 19/40] TigerlakeSiliconPkg/IpBlock: Add Hda component Heng Luo
2021-02-04 3:54 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 20/40] TigerlakeSiliconPkg/IpBlock: Add HostBridge component Heng Luo
2021-02-04 3:54 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 21/40] TigerlakeSiliconPkg/IpBlock: Add P2sb component Heng Luo
2021-02-04 3:54 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 22/40] TigerlakeSiliconPkg/IpBlock: Add PchDmi component Heng Luo
2021-02-04 3:54 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 23/40] TigerlakeSiliconPkg/IpBlock: Add PcieRp component Heng Luo
2021-02-04 3:55 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 24/40] TigerlakeSiliconPkg/IpBlock: Add Pmc component Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 25/40] TigerlakeSiliconPkg/IpBlock: Add Psf component Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 26/40] TigerlakeSiliconPkg/IpBlock: Add Sata component Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 27/40] TigerlakeSiliconPkg/IpBlock: Add SerialIo component Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 28/40] TigerlakeSiliconPkg/IpBlock: Add Smbus component Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 29/40] TigerlakeSiliconPkg/IpBlock: Add Spi component Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 30/40] TigerlakeSiliconPkg/IpBlock: Add Vtd component Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 31/40] TigerlakeSiliconPkg/Library: Add package common library instances Heng Luo
2021-02-04 3:56 ` Nate DeSimone [this message]
2021-02-01 1:36 ` [PATCH 32/40] TigerlakeSiliconPkg/Pch: Add Pch " Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 33/40] TigerlakeSiliconPkg/Pch: Add Pch private " Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 34/40] TigerlakeSiliconPkg/SystemAgent: Add Acpi Tables and " Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 35/40] TigerlakeSiliconPkg/Fru/TglCpu: Add CpuPcieRp and Vtd " Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 36/40] TigerlakeSiliconPkg/Pch: Add Pch modules Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 37/40] TigerlakeSiliconPkg/SystemAgent: Add SystemAgent modules Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 38/40] TigerlakeSiliconPkg/Fru: Add Fru DSC files Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 39/40] TigerlakeSiliconPkg: Add package " Heng Luo
2021-02-04 3:56 ` Nate DeSimone
2021-02-01 1:36 ` [PATCH 40/40] Maintainers.txt: Add TigerlakeSiliconPkg maintainers Heng Luo
2021-02-04 3:51 ` Nate DeSimone
2021-02-04 8:24 ` Heng Luo
2021-02-04 3:51 ` [PATCH 01/40] TigerlakeSiliconPkg: Add package and Include/ConfigBlock headers Nate DeSimone
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BN6PR1101MB2147F39E8534A2FE4BEB836DCDB39@BN6PR1101MB2147.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox