From: Leif Lindholm <leif.lindholm@linaro.org>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: edk2-devel@lists.01.org, ryan.harkin@linaro.org
Subject: Re: [PATCH v3 3/6] ArmPlatformPkg/ArmJunoDxe: use the generic non-discoverable device support
Date: Wed, 5 Apr 2017 14:20:38 +0100 [thread overview]
Message-ID: <20170405132038.GH25239@bivouac.eciton.net> (raw)
In-Reply-To: <20170404123010.11722-4-ard.biesheuvel@linaro.org>
On Tue, Apr 04, 2017 at 01:30:07PM +0100, Ard Biesheuvel wrote:
> Replace the open coded reimplementation of 'PCI emulation' with a pair
> of calls into NonDiscoverableDeviceRegistrationLib to register the OHCI
> and EHCI controllers. These will be picked up by the generic driver instead.
>
That is a *sweet* diffstat.
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
> ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c | 30 +-
> ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.inf | 3 +-
> ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxeInternal.h | 5 -
> ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.c | 596 --------------------
> ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.h | 284 ----------
> ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciRootBridgeIo.c | 299 ----------
> 6 files changed, 27 insertions(+), 1190 deletions(-)
>
> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c
> index f13c49559bb4..14ff189a3078 100644
> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c
> +++ b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c
> @@ -28,6 +28,7 @@
> #include <Library/BaseMemoryLib.h>
> #include <Library/DevicePathLib.h>
> #include <Library/MemoryAllocationLib.h>
> +#include <Library/NonDiscoverableDeviceRegistrationLib.h>
> #include <Library/UefiRuntimeServicesTableLib.h>
> #include <Library/IoLib.h>
> #include <Library/PrintLib.h>
> @@ -447,10 +448,31 @@ ArmJunoEntryPoint (
> UINT32 JunoRevision;
> EFI_EVENT EndOfDxeEvent;
>
> - Status = PciEmulationEntryPoint ();
> - if (EFI_ERROR (Status)) {
> - return Status;
> - }
> + //
> + // Register the OHCI and EHCI controllers as non-coherent
> + // non-discoverable devices.
> + //
> + Status = RegisterNonDiscoverableMmioDevice (
> + NonDiscoverableDeviceTypeOhci,
> + NonDiscoverableDeviceDmaTypeNonCoherent,
> + NULL,
> + NULL,
> + 1,
> + FixedPcdGet32 (PcdSynopsysUsbOhciBaseAddress),
> + SIZE_64KB
> + );
> + ASSERT_EFI_ERROR (Status);
> +
> + Status = RegisterNonDiscoverableMmioDevice (
> + NonDiscoverableDeviceTypeEhci,
> + NonDiscoverableDeviceDmaTypeNonCoherent,
> + NULL,
> + NULL,
> + 1,
> + FixedPcdGet32 (PcdSynopsysUsbEhciBaseAddress),
> + SIZE_64KB
> + );
> + ASSERT_EFI_ERROR (Status);
>
> //
> // If a hypervisor has been declared then we need to make sure its region is protected at runtime
> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.inf b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.inf
> index 168070c6add4..6719d0adcc87 100644
> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.inf
> +++ b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.inf
> @@ -21,8 +21,6 @@ [Defines]
> [Sources.common]
> AcpiTables.c
> ArmJunoDxe.c
> - PciEmulation.c
> - PciRootBridgeIo.c
>
> [Packages]
> ArmPkg/ArmPkg.dec
> @@ -42,6 +40,7 @@ [LibraryClasses]
> DmaLib
> DxeServicesTableLib
> IoLib
> + NonDiscoverableDeviceRegistrationLib
> PcdLib
> PrintLib
> SerialPortLib
> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxeInternal.h b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxeInternal.h
> index df0277067e34..5d2b68fabd12 100644
> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxeInternal.h
> +++ b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxeInternal.h
> @@ -42,11 +42,6 @@
> #define R_TST_CTRL_1 0x0158 /* Test Control Register 1 */
>
>
> -EFI_STATUS
> -PciEmulationEntryPoint (
> - VOID
> - );
> -
> /**
> * Callback called when ACPI Protocol is installed
> */
> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.c
> deleted file mode 100644
> index 2ddebf606e3d..000000000000
> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.c
> +++ /dev/null
> @@ -1,596 +0,0 @@
> -/** @file
> -
> - Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - Copyright (c) 2013 - 2014, ARM Ltd. All rights reserved.<BR>
> -
> - 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 "PciEmulation.h"
> -
> -#define HOST_CONTROLLER_OPERATION_REG_SIZE 0x44
> -
> -typedef struct {
> - ACPI_HID_DEVICE_PATH AcpiDevicePath;
> - PCI_DEVICE_PATH PciDevicePath;
> - EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
> -} EFI_PCI_IO_DEVICE_PATH;
> -
> -typedef struct {
> - UINT32 Signature;
> - EFI_PCI_IO_DEVICE_PATH DevicePath;
> - EFI_PCI_IO_PROTOCOL PciIoProtocol;
> - PCI_TYPE00 *ConfigSpace;
> - PCI_ROOT_BRIDGE RootBridge;
> - UINTN Segment;
> -} EFI_PCI_IO_PRIVATE_DATA;
> -
> -#define EFI_PCI_IO_PRIVATE_DATA_SIGNATURE SIGNATURE_32('p', 'c', 'i', 'o')
> -#define EFI_PCI_IO_PRIVATE_DATA_FROM_THIS(a) CR (a, EFI_PCI_IO_PRIVATE_DATA, PciIoProtocol, EFI_PCI_IO_PRIVATE_DATA_SIGNATURE)
> -
> -EFI_PCI_IO_DEVICE_PATH PciIoDevicePathTemplate =
> -{
> - {
> - { ACPI_DEVICE_PATH, ACPI_DP, { sizeof (ACPI_HID_DEVICE_PATH), 0 } },
> - EISA_PNP_ID(0x0A03), // HID
> - 0 // UID
> - },
> - {
> - { HARDWARE_DEVICE_PATH, HW_PCI_DP, { sizeof (PCI_DEVICE_PATH), 0 } },
> - 0,
> - 0
> - },
> - { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0} }
> -};
> -
> -STATIC
> -VOID
> -ConfigureUSBHost (
> - VOID
> - )
> -{
> -}
> -
> -
> -EFI_STATUS
> -PciIoPollMem (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT8 BarIndex,
> - IN UINT64 Offset,
> - IN UINT64 Mask,
> - IN UINT64 Value,
> - IN UINT64 Delay,
> - OUT UINT64 *Result
> - )
> -{
> - ASSERT (FALSE);
> - return EFI_UNSUPPORTED;
> -}
> -
> -EFI_STATUS
> -PciIoPollIo (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT8 BarIndex,
> - IN UINT64 Offset,
> - IN UINT64 Mask,
> - IN UINT64 Value,
> - IN UINT64 Delay,
> - OUT UINT64 *Result
> - )
> -{
> - ASSERT (FALSE);
> - return EFI_UNSUPPORTED;
> -}
> -
> -EFI_STATUS
> -PciIoMemRead (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT8 BarIndex,
> - IN UINT64 Offset,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - EFI_PCI_IO_PRIVATE_DATA *Private = EFI_PCI_IO_PRIVATE_DATA_FROM_THIS (This);
> -
> - return PciRootBridgeIoMemRead (&Private->RootBridge.Io,
> - (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,
> - Private->ConfigSpace->Device.Bar[BarIndex] + Offset, //Fix me ConfigSpace
> - Count,
> - Buffer
> - );
> -}
> -
> -EFI_STATUS
> -PciIoMemWrite (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT8 BarIndex,
> - IN UINT64 Offset,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - EFI_PCI_IO_PRIVATE_DATA *Private = EFI_PCI_IO_PRIVATE_DATA_FROM_THIS (This);
> -
> - return PciRootBridgeIoMemWrite (&Private->RootBridge.Io,
> - (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,
> - Private->ConfigSpace->Device.Bar[BarIndex] + Offset, //Fix me ConfigSpace
> - Count,
> - Buffer
> - );
> -}
> -
> -EFI_STATUS
> -PciIoIoRead (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT8 BarIndex,
> - IN UINT64 Offset,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - ASSERT (FALSE);
> - return EFI_UNSUPPORTED;
> -}
> -
> -EFI_STATUS
> -PciIoIoWrite (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT8 BarIndex,
> - IN UINT64 Offset,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - ASSERT (FALSE);
> - return EFI_UNSUPPORTED;
> -}
> -
> -/**
> - Enable a PCI driver to read PCI controller registers in PCI configuration space.
> -
> - @param[in] This A pointer to the EFI_PCI_IO_PROTOCOL instance.
> - @param[in] Width Signifies the width of the memory operations.
> - @param[in] Offset The offset within the PCI configuration space for
> - the PCI controller.
> - @param[in] Count The number of PCI configuration operations to
> - perform. Bytes moved is Width size * Count,
> - starting at Offset.
> -
> - @param[in out] Buffer The destination buffer to store the results.
> -
> - @retval EFI_SUCCESS The data was read from the PCI controller.
> - @retval EFI_INVALID_PARAMETER "Width" is invalid.
> - @retval EFI_INVALID_PARAMETER "Buffer" is NULL.
> -
> -**/
> -EFI_STATUS
> -PciIoPciRead (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT32 Offset,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - EFI_PCI_IO_PRIVATE_DATA *Private = EFI_PCI_IO_PRIVATE_DATA_FROM_THIS (This);
> - EFI_STATUS Status;
> -
> - if ((Width < 0) || (Width >= EfiPciIoWidthMaximum) || (Buffer == NULL)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - Status = PciRootBridgeIoMemRW (
> - (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH)Width,
> - Count,
> - TRUE,
> - (PTR)(UINTN)Buffer,
> - TRUE,
> - (PTR)(UINTN)(((UINT8 *)Private->ConfigSpace) + Offset) //Fix me ConfigSpace
> - );
> -
> - return Status;
> -}
> -
> -/**
> - Enable a PCI driver to write PCI controller registers in PCI configuration space.
> -
> - @param[in] This A pointer to the EFI_PCI_IO_PROTOCOL instance.
> - @param[in] Width Signifies the width of the memory operations.
> - @param[in] Offset The offset within the PCI configuration space for
> - the PCI controller.
> - @param[in] Count The number of PCI configuration operations to
> - perform. Bytes moved is Width size * Count,
> - starting at Offset.
> -
> - @param[in out] Buffer The source buffer to write data from.
> -
> - @retval EFI_SUCCESS The data was read from the PCI controller.
> - @retval EFI_INVALID_PARAMETER "Width" is invalid.
> - @retval EFI_INVALID_PARAMETER "Buffer" is NULL.
> -
> -**/
> -EFI_STATUS
> -PciIoPciWrite (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT32 Offset,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - EFI_PCI_IO_PRIVATE_DATA *Private = EFI_PCI_IO_PRIVATE_DATA_FROM_THIS (This);
> -
> - if ((Width < 0) || (Width >= EfiPciIoWidthMaximum) || (Buffer == NULL)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - return PciRootBridgeIoMemRW ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) Width,
> - Count,
> - TRUE,
> - (PTR)(UINTN)(((UINT8 *)Private->ConfigSpace) + Offset), //Fix me ConfigSpace
> - TRUE,
> - (PTR)(UINTN)Buffer
> - );
> -}
> -
> -EFI_STATUS
> -PciIoCopyMem (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
> - IN UINT8 DestBarIndex,
> - IN UINT64 DestOffset,
> - IN UINT8 SrcBarIndex,
> - IN UINT64 SrcOffset,
> - IN UINTN Count
> - )
> -{
> - ASSERT (FALSE);
> - return EFI_UNSUPPORTED;
> -}
> -
> -EFI_STATUS
> -PciIoMap (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_OPERATION Operation,
> - IN VOID *HostAddress,
> - IN OUT UINTN *NumberOfBytes,
> - OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
> - OUT VOID **Mapping
> - )
> -{
> - DMA_MAP_OPERATION DmaOperation;
> -
> - if (Operation == EfiPciIoOperationBusMasterRead) {
> - DmaOperation = MapOperationBusMasterRead;
> - } else if (Operation == EfiPciIoOperationBusMasterWrite) {
> - DmaOperation = MapOperationBusMasterWrite;
> - } else if (Operation == EfiPciIoOperationBusMasterCommonBuffer) {
> - DmaOperation = MapOperationBusMasterCommonBuffer;
> - } else {
> - return EFI_INVALID_PARAMETER;
> - }
> - return DmaMap (DmaOperation, HostAddress, NumberOfBytes, DeviceAddress, Mapping);
> -}
> -
> -EFI_STATUS
> -PciIoUnmap (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN VOID *Mapping
> - )
> -{
> - return DmaUnmap (Mapping);
> -}
> -
> -/**
> - Allocate pages that are suitable for an EfiPciIoOperationBusMasterCommonBuffer
> - mapping.
> -
> - @param[in] This A pointer to the EFI_PCI_IO_PROTOCOL instance.
> - @param[in] Type This parameter is not used and must be ignored.
> - @param[in] MemoryType The type of memory to allocate, EfiBootServicesData or
> - EfiRuntimeServicesData.
> - @param[in] Pages The number of pages to allocate.
> - @param[out] HostAddress A pointer to store the base system memory address of
> - the allocated range.
> - @param[in] Attributes The requested bit mask of attributes for the allocated
> - range. Only the attributes,
> - EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE and
> - EFI_PCI_ATTRIBUTE_MEMORY_CACHED may be used with this
> - function. If any other bits are set, then EFI_UNSUPPORTED
> - is returned. This function ignores this bit mask.
> -
> - @retval EFI_SUCCESS The requested memory pages were allocated.
> - @retval EFI_INVALID_PARAMETER HostAddress is NULL.
> - @retval EFI_INVALID_PARAMETER MemoryType is invalid.
> - @retval EFI_UNSUPPORTED Attributes is unsupported.
> - @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
> -
> -**/
> -EFI_STATUS
> -PciIoAllocateBuffer (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_ALLOCATE_TYPE Type,
> - IN EFI_MEMORY_TYPE MemoryType,
> - IN UINTN Pages,
> - OUT VOID **HostAddress,
> - IN UINT64 Attributes
> - )
> -{
> - if (Attributes &
> - (~(EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE |
> - EFI_PCI_ATTRIBUTE_MEMORY_CACHED ))) {
> - return EFI_UNSUPPORTED;
> - }
> -
> - return DmaAllocateBuffer (MemoryType, Pages, HostAddress);
> -}
> -
> -
> -EFI_STATUS
> -PciIoFreeBuffer (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN UINTN Pages,
> - IN VOID *HostAddress
> - )
> -{
> - return DmaFreeBuffer (Pages, HostAddress);
> -}
> -
> -
> -EFI_STATUS
> -PciIoFlush (
> - IN EFI_PCI_IO_PROTOCOL *This
> - )
> -{
> - return EFI_SUCCESS;
> -}
> -
> -/**
> - Retrieves this PCI controller's current PCI bus number, device number, and function number.
> -
> - @param[in] This A pointer to the EFI_PCI_IO_PROTOCOL instance.
> - @param[out] SegmentNumber The PCI controller's current PCI segment number.
> - @param[out] BusNumber The PCI controller's current PCI bus number.
> - @param[out] DeviceNumber The PCI controller's current PCI device number.
> - @param[out] FunctionNumber The PCI controller's current PCI function number.
> -
> - @retval EFI_SUCCESS The PCI controller location was returned.
> - @retval EFI_INVALID_PARAMETER At least one out of the four output parameters is
> - a NULL pointer.
> -**/
> -EFI_STATUS
> -PciIoGetLocation (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - OUT UINTN *SegmentNumber,
> - OUT UINTN *BusNumber,
> - OUT UINTN *DeviceNumber,
> - OUT UINTN *FunctionNumber
> - )
> -{
> - EFI_PCI_IO_PRIVATE_DATA *Private = EFI_PCI_IO_PRIVATE_DATA_FROM_THIS (This);
> -
> - if ((SegmentNumber == NULL) || (BusNumber == NULL) ||
> - (DeviceNumber == NULL) || (FunctionNumber == NULL) ) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - *SegmentNumber = Private->Segment;
> - *BusNumber = 0xff;
> - *DeviceNumber = 0;
> - *FunctionNumber = 0;
> -
> - return EFI_SUCCESS;
> -}
> -
> -/**
> - Performs an operation on the attributes that this PCI controller supports.
> -
> - The operations include getting the set of supported attributes, retrieving
> - the current attributes, setting the current attributes, enabling attributes,
> - and disabling attributes.
> -
> - @param[in] This A pointer to the EFI_PCI_IO_PROTOCOL instance.
> - @param[in] Operation The operation to perform on the attributes for this
> - PCI controller.
> - @param[in] Attributes The mask of attributes that are used for Set,
> - Enable and Disable operations.
> - @param[out] Result A pointer to the result mask of attributes that are
> - returned for the Get and Supported operations. This
> - is an optional parameter that may be NULL for the
> - Set, Enable, and Disable operations.
> -
> - @retval EFI_SUCCESS The operation on the PCI controller's
> - attributes was completed. If the operation
> - was Get or Supported, then the attribute mask
> - is returned in Result.
> - @retval EFI_INVALID_PARAMETER Operation is greater than or equal to
> - EfiPciIoAttributeOperationMaximum.
> - @retval EFI_INVALID_PARAMETER Operation is Get and Result is NULL.
> - @retval EFI_INVALID_PARAMETER Operation is Supported and Result is NULL.
> -
> -**/
> -EFI_STATUS
> -PciIoAttributes (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION Operation,
> - IN UINT64 Attributes,
> - OUT UINT64 *Result OPTIONAL
> - )
> -{
> - switch (Operation) {
> - case EfiPciIoAttributeOperationGet:
> - case EfiPciIoAttributeOperationSupported:
> - if (Result == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> - //
> - // We are not a real PCI device so just say things we kind of do
> - //
> - *Result = EFI_PCI_DEVICE_ENABLE;
> - break;
> -
> - case EfiPciIoAttributeOperationSet:
> - case EfiPciIoAttributeOperationEnable:
> - case EfiPciIoAttributeOperationDisable:
> - if (Attributes & (~EFI_PCI_DEVICE_ENABLE)) {
> - return EFI_UNSUPPORTED;
> - }
> - // Since we are not a real PCI device no enable/set or disable operations exist.
> - return EFI_SUCCESS;
> -
> - default:
> - return EFI_INVALID_PARAMETER;
> - };
> - return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -PciIoGetBarAttributes (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN UINT8 BarIndex,
> - OUT UINT64 *Supports, OPTIONAL
> - OUT VOID **Resources OPTIONAL
> - )
> -{
> - ASSERT (FALSE);
> - return EFI_UNSUPPORTED;
> -}
> -
> -EFI_STATUS
> -PciIoSetBarAttributes (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN UINT64 Attributes,
> - IN UINT8 BarIndex,
> - IN OUT UINT64 *Offset,
> - IN OUT UINT64 *Length
> - )
> -{
> - ASSERT (FALSE);
> - return EFI_UNSUPPORTED;
> -}
> -
> -EFI_PCI_IO_PROTOCOL PciIoTemplate =
> -{
> - PciIoPollMem,
> - PciIoPollIo,
> - { PciIoMemRead, PciIoMemWrite },
> - { PciIoIoRead, PciIoIoWrite },
> - { PciIoPciRead, PciIoPciWrite },
> - PciIoCopyMem,
> - PciIoMap,
> - PciIoUnmap,
> - PciIoAllocateBuffer,
> - PciIoFreeBuffer,
> - PciIoFlush,
> - PciIoGetLocation,
> - PciIoAttributes,
> - PciIoGetBarAttributes,
> - PciIoSetBarAttributes,
> - 0,
> - 0
> -};
> -
> -EFI_STATUS
> -PciInstallDevice (
> - IN UINTN DeviceId,
> - IN PHYSICAL_ADDRESS MemoryStart,
> - IN UINT64 MemorySize,
> - IN UINTN ClassCode1,
> - IN UINTN ClassCode2,
> - IN UINTN ClassCode3
> - )
> -{
> - EFI_STATUS Status;
> - EFI_HANDLE Handle;
> - EFI_PCI_IO_PRIVATE_DATA *Private;
> -
> - // Configure USB host
> - ConfigureUSBHost ();
> -
> - // Create a private structure
> - Private = AllocatePool (sizeof (EFI_PCI_IO_PRIVATE_DATA));
> - if (Private == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - return Status;
> - }
> -
> - Private->Signature = EFI_PCI_IO_PRIVATE_DATA_SIGNATURE; // Fill in signature
> - Private->RootBridge.Signature = PCI_ROOT_BRIDGE_SIGNATURE; // Fake Root Bridge structure needs a signature too
> - Private->RootBridge.MemoryStart = MemoryStart; // Get the USB capability register base
> - Private->Segment = 0; // Default to segment zero
> -
> - // Calculate the total size of the USB controller (OHCI + EHCI).
> - Private->RootBridge.MemorySize = MemorySize; //CapabilityLength + (HOST_CONTROLLER_OPERATION_REG_SIZE + ((4 * PhysicalPorts) - 1));
> -
> - // Create fake PCI config space: OHCI + EHCI
> - Private->ConfigSpace = AllocateZeroPool (sizeof (PCI_TYPE00));
> - if (Private->ConfigSpace == NULL) {
> - Status = EFI_OUT_OF_RESOURCES;
> - FreePool (Private);
> - return Status;
> - }
> -
> - //
> - // Configure PCI config space: OHCI + EHCI
> - //
> - Private->ConfigSpace->Hdr.VendorId = 0xFFFF; // Invalid vendor Id as it is not an actual device.
> - Private->ConfigSpace->Hdr.DeviceId = 0x0000; // Not relevant as the vendor id is not valid.
> - Private->ConfigSpace->Hdr.ClassCode[0] = ClassCode1;
> - Private->ConfigSpace->Hdr.ClassCode[1] = ClassCode2;
> - Private->ConfigSpace->Hdr.ClassCode[2] = ClassCode3;
> - Private->ConfigSpace->Device.Bar[0] = MemoryStart;
> -
> - Handle = NULL;
> -
> - // Unique device path.
> - CopyMem (&Private->DevicePath, &PciIoDevicePathTemplate, sizeof (PciIoDevicePathTemplate));
> - Private->DevicePath.AcpiDevicePath.UID = 1; // Use '1' to differentiate from PLDA root complex
> - Private->DevicePath.PciDevicePath.Device = DeviceId;
> -
> - // Copy protocol structure
> - CopyMem (&Private->PciIoProtocol, &PciIoTemplate, sizeof (PciIoTemplate));
> -
> - Status = gBS->InstallMultipleProtocolInterfaces (&Handle,
> - &gEfiPciIoProtocolGuid, &Private->PciIoProtocol,
> - &gEfiDevicePathProtocolGuid, &Private->DevicePath,
> - NULL);
> - if (EFI_ERROR (Status)) {
> - DEBUG ((EFI_D_ERROR, "PciEmulationEntryPoint InstallMultipleProtocolInterfaces () failed.\n"));
> - }
> -
> - return Status;
> -}
> -
> -EFI_STATUS
> -PciEmulationEntryPoint (
> - VOID
> - )
> -{
> - EFI_STATUS Status;
> -
> - Status = PciInstallDevice (0, FixedPcdGet32 (PcdSynopsysUsbOhciBaseAddress), SIZE_64KB, PCI_IF_OHCI, PCI_CLASS_SERIAL_USB, PCI_CLASS_SERIAL);
> - if (EFI_ERROR (Status)) {
> - DEBUG ((EFI_D_ERROR, "PciEmulation: failed to install OHCI device.\n"));
> - }
> -
> - Status = PciInstallDevice (1, FixedPcdGet32 (PcdSynopsysUsbEhciBaseAddress), SIZE_64KB, PCI_IF_EHCI, PCI_CLASS_SERIAL_USB, PCI_CLASS_SERIAL);
> - if (EFI_ERROR (Status)) {
> - DEBUG ((EFI_D_ERROR, "PciEmulation: failed to install EHCI device.\n"));
> - }
> -
> - return Status;
> -}
> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.h b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.h
> deleted file mode 100644
> index de2855d01d6b..000000000000
> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciEmulation.h
> +++ /dev/null
> @@ -1,284 +0,0 @@
> -/** @file
> -
> - Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> - Copyright (c) 2013 - 2014, ARM Ltd. All rights reserved.<BR>
> -
> - 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 _PCI_ROOT_BRIDGE_H_
> -#define _PCI_ROOT_BRIDGE_H_
> -
> -#include <PiDxe.h>
> -
> -#include <Library/BaseLib.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/DxeServicesTableLib.h>
> -#include <Library/IoLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/PciLib.h>
> -#include <Library/UefiLib.h>
> -#include <Library/DmaLib.h>
> -
> -#include <Protocol/EmbeddedExternalDevice.h>
> -#include <Protocol/DevicePath.h>
> -#include <Protocol/PciIo.h>
> -#include <Protocol/PciRootBridgeIo.h>
> -#include <Protocol/PciHostBridgeResourceAllocation.h>
> -
> -#include <IndustryStandard/Pci23.h>
> -
> -#include "ArmJunoDxeInternal.h"
> -
> -#define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL
> -#define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL
> -#define EFI_RESOURCE_SATISFIED 0x0000000000000000ULL
> -
> -
> -typedef struct {
> - ACPI_HID_DEVICE_PATH AcpiDevicePath;
> - EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
> -} EFI_PCI_ROOT_BRIDGE_DEVICE_PATH;
> -
> -
> -#define ACPI_CONFIG_IO 0
> -#define ACPI_CONFIG_MMIO 1
> -#define ACPI_CONFIG_BUS 2
> -
> -typedef struct {
> - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Desc[3];
> - EFI_ACPI_END_TAG_DESCRIPTOR EndDesc;
> -} ACPI_CONFIG_INFO;
> -
> -
> -#define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('P', 'c', 'i', 'F')
> -
> -typedef struct {
> - UINT32 Signature;
> - EFI_HANDLE Handle;
> - EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io;
> - EFI_PCI_ROOT_BRIDGE_DEVICE_PATH DevicePath;
> -
> - UINT8 StartBus;
> - UINT8 EndBus;
> - UINT16 Type;
> - UINT32 MemoryStart;
> - UINT32 MemorySize;
> - UINTN IoOffset;
> - UINT32 IoStart;
> - UINT32 IoSize;
> - UINT64 PciAttributes;
> -
> - ACPI_CONFIG_INFO *Config;
> -
> -} PCI_ROOT_BRIDGE;
> -
> -
> -#define INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) CR (a, PCI_ROOT_BRIDGE, Io, PCI_ROOT_BRIDGE_SIGNATURE)
> -
> -
> -typedef union {
> - UINT8 volatile *Buffer;
> - UINT8 volatile *Ui8;
> - UINT16 volatile *Ui16;
> - UINT32 volatile *Ui32;
> - UINT64 volatile *Ui64;
> - UINTN volatile Ui;
> -} PTR;
> -
> -
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoPollMem (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINT64 Mask,
> - IN UINT64 Value,
> - IN UINT64 Delay,
> - OUT UINT64 *Result
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoPollIo (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINT64 Mask,
> - IN UINT64 Value,
> - IN UINT64 Delay,
> - OUT UINT64 *Result
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoMemRead (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoMemWrite (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoIoRead (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 UserAddress,
> - IN UINTN Count,
> - IN OUT VOID *UserBuffer
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoIoWrite (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 UserAddress,
> - IN UINTN Count,
> - IN OUT VOID *UserBuffer
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoCopyMem (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 DestAddress,
> - IN UINT64 SrcAddress,
> - IN UINTN Count
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoPciRead (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoPciWrite (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoMap (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation,
> - IN VOID *HostAddress,
> - IN OUT UINTN *NumberOfBytes,
> - OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
> - OUT VOID **Mapping
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoUnmap (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN VOID *Mapping
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoAllocateBuffer (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_ALLOCATE_TYPE Type,
> - IN EFI_MEMORY_TYPE MemoryType,
> - IN UINTN Pages,
> - OUT VOID **HostAddress,
> - IN UINT64 Attributes
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoFreeBuffer (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN UINTN Pages,
> - OUT VOID *HostAddress
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoFlush (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoGetAttributes (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - OUT UINT64 *Supported,
> - OUT UINT64 *Attributes
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoSetAttributes (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN UINT64 Attributes,
> - IN OUT UINT64 *ResourceBase,
> - IN OUT UINT64 *ResourceLength
> - );
> -
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoConfiguration (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - OUT VOID **Resources
> - );
> -
> -//
> -// Private Function Prototypes
> -//
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoMemRW (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINTN Count,
> - IN BOOLEAN InStrideFlag,
> - IN PTR In,
> - IN BOOLEAN OutStrideFlag,
> - OUT PTR Out
> - );
> -
> -BOOLEAN
> -PciIoMemAddressValid (
> - IN EFI_PCI_IO_PROTOCOL *This,
> - IN UINT64 Address
> - );
> -
> -EFI_STATUS
> -EmulatePciIoForEhci (
> - INTN MvPciIfMaxIf
> - );
> -
> -#endif
> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciRootBridgeIo.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciRootBridgeIo.c
> deleted file mode 100644
> index f1eaceff28d8..000000000000
> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/PciRootBridgeIo.c
> +++ /dev/null
> @@ -1,299 +0,0 @@
> -/** @file
> -
> - Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> -
> - 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 "PciEmulation.h"
> -
> -BOOLEAN
> -PciRootBridgeMemAddressValid (
> - IN PCI_ROOT_BRIDGE *Private,
> - IN UINT64 Address
> - )
> -{
> - if ((Address >= Private->MemoryStart) && (Address < (Private->MemoryStart + Private->MemorySize))) {
> - return TRUE;
> - }
> -
> - return FALSE;
> -}
> -
> -
> -EFI_STATUS
> -PciRootBridgeIoMemRW (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINTN Count,
> - IN BOOLEAN InStrideFlag,
> - IN PTR In,
> - IN BOOLEAN OutStrideFlag,
> - OUT PTR Out
> - )
> -{
> - UINTN Stride;
> - UINTN InStride;
> - UINTN OutStride;
> -
> - Width = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH) (Width & 0x03);
> - Stride = (UINTN)1 << Width;
> - InStride = InStrideFlag ? Stride : 0;
> - OutStride = OutStrideFlag ? Stride : 0;
> -
> - //
> - // Loop for each iteration and move the data
> - //
> - switch (Width) {
> - case EfiPciWidthUint8:
> - for (;Count > 0; Count--, In.Buffer += InStride, Out.Buffer += OutStride) {
> - *In.Ui8 = *Out.Ui8;
> - }
> - break;
> - case EfiPciWidthUint16:
> - for (;Count > 0; Count--, In.Buffer += InStride, Out.Buffer += OutStride) {
> - *In.Ui16 = *Out.Ui16;
> - }
> - break;
> - case EfiPciWidthUint32:
> - for (;Count > 0; Count--, In.Buffer += InStride, Out.Buffer += OutStride) {
> - *In.Ui32 = *Out.Ui32;
> - }
> - break;
> - default:
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -PciRootBridgeIoPciRW (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN BOOLEAN Write,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 UserAddress,
> - IN UINTN Count,
> - IN OUT VOID *UserBuffer
> - )
> -{
> - return EFI_SUCCESS;
> -}
> -
> -/**
> - Enables a PCI driver to access PCI controller registers in the PCI root bridge memory space.
> -
> - @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
> - @param Width Signifies the width of the memory operations.
> - @param Address The base address of the memory operations.
> - @param Count The number of memory operations to perform.
> - @param Buffer For read operations, the destination buffer to store the results. For write
> - operations, the source buffer to write data from.
> -
> - @retval EFI_SUCCESS The data was read from or written to the PCI root bridge.
> - @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
> - @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoMemRead (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - PCI_ROOT_BRIDGE *Private;
> - UINTN AlignMask;
> - PTR In;
> - PTR Out;
> -
> - if ( Buffer == NULL ) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - Private = INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS (This);
> -
> - if (!PciRootBridgeMemAddressValid (Private, Address)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - AlignMask = (1 << (Width & 0x03)) - 1;
> - if (Address & AlignMask) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - In.Buffer = Buffer;
> - Out.Buffer = (VOID *)(UINTN) Address;
> -
> - switch (Width) {
> - case EfiPciWidthUint8:
> - case EfiPciWidthUint16:
> - case EfiPciWidthUint32:
> - case EfiPciWidthUint64:
> - return PciRootBridgeIoMemRW (Width, Count, TRUE, In, TRUE, Out);
> -
> - case EfiPciWidthFifoUint8:
> - case EfiPciWidthFifoUint16:
> - case EfiPciWidthFifoUint32:
> - case EfiPciWidthFifoUint64:
> - return PciRootBridgeIoMemRW (Width, Count, TRUE, In, FALSE, Out);
> -
> - case EfiPciWidthFillUint8:
> - case EfiPciWidthFillUint16:
> - case EfiPciWidthFillUint32:
> - case EfiPciWidthFillUint64:
> - return PciRootBridgeIoMemRW (Width, Count, FALSE, In, TRUE, Out);
> -
> - default:
> - break;
> - }
> -
> - return EFI_INVALID_PARAMETER;
> -}
> -
> -/**
> - Enables a PCI driver to access PCI controller registers in the PCI root bridge memory space.
> -
> - @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
> - @param Width Signifies the width of the memory operations.
> - @param Address The base address of the memory operations.
> - @param Count The number of memory operations to perform.
> - @param Buffer For read operations, the destination buffer to store the results. For write
> - operations, the source buffer to write data from.
> -
> - @retval EFI_SUCCESS The data was read from or written to the PCI root bridge.
> - @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
> - @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoMemWrite (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - PCI_ROOT_BRIDGE *Private;
> - UINTN AlignMask;
> - PTR In;
> - PTR Out;
> -
> - if ( Buffer == NULL ) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - Private = INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS (This);
> -
> - if (!PciRootBridgeMemAddressValid (Private, Address)) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - AlignMask = (1 << (Width & 0x03)) - 1;
> - if (Address & AlignMask) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - In.Buffer = (VOID *)(UINTN) Address;
> - Out.Buffer = Buffer;
> -
> - switch (Width) {
> - case EfiPciWidthUint8:
> - case EfiPciWidthUint16:
> - case EfiPciWidthUint32:
> - case EfiPciWidthUint64:
> - return PciRootBridgeIoMemRW (Width, Count, TRUE, In, TRUE, Out);
> -
> - case EfiPciWidthFifoUint8:
> - case EfiPciWidthFifoUint16:
> - case EfiPciWidthFifoUint32:
> - case EfiPciWidthFifoUint64:
> - return PciRootBridgeIoMemRW (Width, Count, FALSE, In, TRUE, Out);
> -
> - case EfiPciWidthFillUint8:
> - case EfiPciWidthFillUint16:
> - case EfiPciWidthFillUint32:
> - case EfiPciWidthFillUint64:
> - return PciRootBridgeIoMemRW (Width, Count, TRUE, In, FALSE, Out);
> -
> - default:
> - break;
> - }
> -
> - return EFI_INVALID_PARAMETER;
> -}
> -
> -/**
> - Enables a PCI driver to access PCI controller registers in the PCI root bridge memory space.
> -
> - @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
> - @param Width Signifies the width of the memory operations.
> - @param Address The base address of the memory operations.
> - @param Count The number of memory operations to perform.
> - @param Buffer For read operations, the destination buffer to store the results. For write
> - operations, the source buffer to write data from.
> -
> - @retval EFI_SUCCESS The data was read from or written to the PCI root bridge.
> - @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
> - @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoPciRead (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - if (Buffer == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - return PciRootBridgeIoPciRW (This, FALSE, Width, Address, Count, Buffer);
> -}
> -
> -/**
> - Enables a PCI driver to access PCI controller registers in the PCI root bridge memory space.
> -
> - @param This A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
> - @param Width Signifies the width of the memory operations.
> - @param Address The base address of the memory operations.
> - @param Count The number of memory operations to perform.
> - @param Buffer For read operations, the destination buffer to store the results. For write
> - operations, the source buffer to write data from.
> -
> - @retval EFI_SUCCESS The data was read from or written to the PCI root bridge.
> - @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
> - @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -PciRootBridgeIoPciWrite (
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
> - IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
> - IN UINT64 Address,
> - IN UINTN Count,
> - IN OUT VOID *Buffer
> - )
> -{
> - if (Buffer == NULL) {
> - return EFI_INVALID_PARAMETER;
> - }
> -
> - return PciRootBridgeIoPciRW (This, TRUE, Width, Address, Count, Buffer);
> -}
> --
> 2.9.3
>
next prev parent reply other threads:[~2017-04-05 13:20 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-04 12:30 [PATCH v3 0/6] Juno cleanup -- EDK2 edition Ard Biesheuvel
2017-04-04 12:30 ` [PATCH v3 1/6] ArmPlatformPkg/ArmShellCmdRunAxf: remove BdsLib dependency Ard Biesheuvel
2017-04-05 13:09 ` Leif Lindholm
2017-04-05 13:11 ` Ard Biesheuvel
2017-04-05 13:15 ` Ard Biesheuvel
2017-04-05 14:56 ` Leif Lindholm
2017-04-04 12:30 ` [PATCH v3 2/6] ArmPlatformPkg/ArmJunoDxe: " Ard Biesheuvel
2017-04-05 13:19 ` Leif Lindholm
2017-04-04 12:30 ` [PATCH v3 3/6] ArmPlatformPkg/ArmJunoDxe: use the generic non-discoverable device support Ard Biesheuvel
2017-04-05 13:20 ` Leif Lindholm [this message]
2017-04-04 12:30 ` [PATCH v3 4/6] ArmPlatformPkg/ArmJunoDxe: don't register OnEndOfDxe event on rev R0 Ard Biesheuvel
2017-04-05 13:17 ` Leif Lindholm
2017-04-04 12:30 ` [PATCH v3 5/6] ArmPlatformPkg/ArmJunoPkg: remove PCI host bridge driver Ard Biesheuvel
2017-04-05 13:18 ` Leif Lindholm
2017-04-05 13:20 ` Ard Biesheuvel
2017-04-04 12:30 ` [PATCH v3 6/6] ArmPlatformPkg/ArmJunoDxe: simplify ACPI table installation Ard Biesheuvel
2017-04-05 13:19 ` Leif Lindholm
2017-04-04 15:47 ` [PATCH v3 0/6] Juno cleanup -- EDK2 edition Ryan Harkin
2017-04-04 15:48 ` Ryan Harkin
2017-04-04 15:49 ` Ard Biesheuvel
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=20170405132038.GH25239@bivouac.eciton.net \
--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