public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Leif Lindholm <leif.lindholm@linaro.org>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: edk2-devel@lists.01.org, ruiyu.ni@intel.com, mw@semihalf.com,
	liming.gao@intel.com, feng.tian@intel.com
Subject: Re: [PATCH v5 5/5] Omap35xxPkg/PciEmulation: port to new non-discoverable device infrastructure
Date: Mon, 5 Dec 2016 16:23:39 +0000	[thread overview]
Message-ID: <20161205162339.GN27069@bivouac.eciton.net> (raw)
In-Reply-To: <1480952122-27937-6-git-send-email-ard.biesheuvel@linaro.org>

On Mon, Dec 05, 2016 at 03:35:22PM +0000, Ard Biesheuvel wrote:
> Move to the new non-discoverable device protocols for wiring the PCI based
> EHCI controller driver to the non-discoverable EHCI controller found on the
> OMAP 3530.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

The diff looks a bit funky in places, but actually in ways that make
'git blame' more, not less clear.

Only comment I have is that you _could_ bump/add copyright to:
- BeagleBoardPkg/BeagleBoardPkg.dsc
- BeagleBoardPkg/BeagleBoardPkg.fdf
- Omap35xxPkg/Omap35xxPkg.dsc
- Omap35xxPkg/PciEmulation/PciEmulation.inf

But I'll leave that up to you - I don't need another look.
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

Regards,

Leif

> ---
>  BeagleBoardPkg/BeagleBoardPkg.dsc          |   2 +
>  BeagleBoardPkg/BeagleBoardPkg.fdf          |   1 +
>  Omap35xxPkg/Omap35xxPkg.dsc                |   2 +-
>  Omap35xxPkg/PciEmulation/PciEmulation.c    | 578 +-------------------
>  Omap35xxPkg/PciEmulation/PciEmulation.h    | 292 ----------
>  Omap35xxPkg/PciEmulation/PciEmulation.inf  |  16 +-
>  Omap35xxPkg/PciEmulation/PciRootBridgeIo.c | 306 -----------
>  7 files changed, 36 insertions(+), 1161 deletions(-)
> 
> diff --git a/BeagleBoardPkg/BeagleBoardPkg.dsc b/BeagleBoardPkg/BeagleBoardPkg.dsc
> index f40095ac456b..2b0136ec3eec 100644
> --- a/BeagleBoardPkg/BeagleBoardPkg.dsc
> +++ b/BeagleBoardPkg/BeagleBoardPkg.dsc
> @@ -184,6 +184,7 @@ [LibraryClasses.common.DXE_DRIVER]
>    DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
>    SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
>    PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
> +  NonDiscoverableDeviceRegistrationLib|MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf
>  
>  [LibraryClasses.common.UEFI_APPLICATION]
>    ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
> @@ -443,6 +444,7 @@ [Components.common]
>    # USB
>    #
>    Omap35xxPkg/PciEmulation/PciEmulation.inf
> +  MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf
>  
>    MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf {
>      <PcdsFixedAtBuild>
> diff --git a/BeagleBoardPkg/BeagleBoardPkg.fdf b/BeagleBoardPkg/BeagleBoardPkg.fdf
> index 42e097f64118..3d00355fff84 100644
> --- a/BeagleBoardPkg/BeagleBoardPkg.fdf
> +++ b/BeagleBoardPkg/BeagleBoardPkg.fdf
> @@ -167,6 +167,7 @@ [FV.FvMain]
>    #
>  
>    INF Omap35xxPkg/PciEmulation/PciEmulation.inf
> +  INF MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf
>  
>    INF MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
>    INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
> diff --git a/Omap35xxPkg/Omap35xxPkg.dsc b/Omap35xxPkg/Omap35xxPkg.dsc
> index 4a3317f255f6..89a407049f31 100644
> --- a/Omap35xxPkg/Omap35xxPkg.dsc
> +++ b/Omap35xxPkg/Omap35xxPkg.dsc
> @@ -79,7 +79,7 @@ [LibraryClasses.common]
>  
>  [LibraryClasses.common.DXE_DRIVER]
>    DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> -
> +  NonDiscoverableDeviceRegistrationLib|MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf
>  
>  [LibraryClasses.ARM]
>    NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
> diff --git a/Omap35xxPkg/PciEmulation/PciEmulation.c b/Omap35xxPkg/PciEmulation/PciEmulation.c
> index 17ea03ccf486..d17646a9ed58 100644
> --- a/Omap35xxPkg/PciEmulation/PciEmulation.c
> +++ b/Omap35xxPkg/PciEmulation/PciEmulation.c
> @@ -1,6 +1,7 @@
>  /** @file
>  
>    Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> +  Copyright (c) 2016, Linaro, 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
> @@ -12,49 +13,27 @@
>  
>  **/
>  
> -#include "PciEmulation.h"
> +#include <PiDxe.h>
>  
> -EMBEDDED_EXTERNAL_DEVICE   *gTPS65950;
> -
> -#define HOST_CONTROLLER_OPERATION_REG_SIZE  0x44
> +#include <Library/BaseLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/IoLib.h>
> +#include <Library/NonDiscoverableDeviceRegistrationLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
>  
> -typedef struct {
> -  ACPI_HID_DEVICE_PATH      AcpiDevicePath;
> -  PCI_DEVICE_PATH           PciDevicePath;
> -  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
> -} EFI_PCI_IO_DEVICE_PATH;
> +#include <Protocol/EmbeddedExternalDevice.h>
>  
> -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;
> +#include <TPS65950.h>
> +#include <Omap3530/Omap3530.h>
>  
> -#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)
> +EMBEDDED_EXTERNAL_DEVICE   *gTPS65950;
>  
> -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} }
> -};
> +#define HOST_CONTROLLER_OPERATION_REG_SIZE  0x44
>  
>  STATIC
> -VOID
> +EFI_STATUS
>  ConfigureUSBHost (
> -  VOID
> +  NON_DISCOVERABLE_DEVICE   *Device
>    )
>  {
>    EFI_STATUS Status;
> @@ -103,454 +82,10 @@ ConfigureUSBHost (
>  
>    Status = gTPS65950->Write (gTPS65950, EXTERNAL_DEVICE_REGISTER(I2C_ADDR_GRP_ID3, LEDEN), 1, &Data);
>    ASSERT_EFI_ERROR (Status);
> -}
> -
> -
> -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,
> -                                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,
> -                                 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),
> -                               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
>  EFIAPI
>  PciEmulationEntryPoint (
> @@ -558,76 +93,21 @@ PciEmulationEntryPoint (
>    IN EFI_SYSTEM_TABLE *SystemTable
>    )
>  {
> -  EFI_STATUS              Status;
> -  EFI_HANDLE              Handle;
> -  EFI_PCI_IO_PRIVATE_DATA *Private;
>    UINT8                   CapabilityLength;
>    UINT8                   PhysicalPorts;
> -  UINTN                   Count;
> -
> -
> -  //Configure USB host for OMAP3530.
> -  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 = USB_EHCI_HCCAPBASE;                 // Get the USB capability register base
> -  Private->Segment                = 0;                                  // Default to segment zero
> -
> -  // Find out the capability register length and number of physical ports.
> -  CapabilityLength = MmioRead8(Private->RootBridge.MemoryStart);
> -  PhysicalPorts    = (MmioRead32 (Private->RootBridge.MemoryStart + 0x4)) & 0x0000000F;
> -
> -  // Calculate the total size of the USB registers.
> -  Private->RootBridge.MemorySize = CapabilityLength + (HOST_CONTROLLER_OPERATION_REG_SIZE + ((4 * PhysicalPorts) - 1));
> -
> -  // Enable Port Power bit in Port status and control registers in EHCI register space.
> -  // Port Power Control (PPC) bit in the HCSPARAMS register is already set which indicates
> -  // host controller implementation includes port power control.
> -  for (Count = 0; Count < PhysicalPorts; Count++) {
> -    MmioOr32 ((Private->RootBridge.MemoryStart + CapabilityLength + HOST_CONTROLLER_OPERATION_REG_SIZE + 4*Count), 0x00001000);
> -  }
> -
> -  // Create fake PCI config space.
> -  Private->ConfigSpace = AllocateZeroPool(sizeof(PCI_TYPE00));
> -  if (Private->ConfigSpace == NULL) {
> -    Status = EFI_OUT_OF_RESOURCES;
> -    FreePool(Private);
> -    return Status;
> -  }
> -
> -  // Configure PCI config space
> -  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] = 0x20;
> -  Private->ConfigSpace->Hdr.ClassCode[1] = 0x03;
> -  Private->ConfigSpace->Hdr.ClassCode[2] = 0x0C;
> -  Private->ConfigSpace->Device.Bar[0] = Private->RootBridge.MemoryStart;
> -
> -  Handle = NULL;
> -
> -  // Unique device path.
> -  CopyMem(&Private->DevicePath, &PciIoDevicePathTemplate, sizeof(PciIoDevicePathTemplate));
> -  Private->DevicePath.AcpiDevicePath.UID = 0;
> -
> -  // 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;
> +  UINTN                   MemorySize;
> +
> +  CapabilityLength = MmioRead8 (USB_EHCI_HCCAPBASE);
> +  PhysicalPorts    = MmioRead32 (USB_EHCI_HCCAPBASE + 0x4) & 0x0000000F;
> +  MemorySize       = CapabilityLength + HOST_CONTROLLER_OPERATION_REG_SIZE +
> +                     4 * PhysicalPorts - 1;
> +
> +  return RegisterNonDiscoverableMmioDevice (
> +           NonDiscoverableDeviceTypeEhci,
> +           NonDiscoverableDeviceDmaTypeNonCoherent,
> +           ConfigureUSBHost,
> +           NULL,
> +           1,
> +           USB_EHCI_HCCAPBASE, MemorySize
> +           );
>  }
> -
> diff --git a/Omap35xxPkg/PciEmulation/PciEmulation.h b/Omap35xxPkg/PciEmulation/PciEmulation.h
> deleted file mode 100644
> index d5ee04318939..000000000000
> --- a/Omap35xxPkg/PciEmulation/PciEmulation.h
> +++ /dev/null
> @@ -1,292 +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.
> -
> -**/
> -
> -#ifndef _PCI_ROOT_BRIDGE_H_
> -#define _PCI_ROOT_BRIDGE_H_
> -
> -#include <PiDxe.h>
> -
> -#include <TPS65950.h>
> -
> -#include <Library/BaseLib.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/DxeServicesTableLib.h>
> -#include <Library/IoLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/PciLib.h>
> -#include <Library/UefiLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -#include <Library/OmapDmaLib.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/Pci22.h>
> -#include <IndustryStandard/Acpi.h>
> -
> -#include <Omap3530/Omap3530.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  *buf;
> -  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/Omap35xxPkg/PciEmulation/PciEmulation.inf b/Omap35xxPkg/PciEmulation/PciEmulation.inf
> index 2180bb49898d..4df9c505e8cd 100644
> --- a/Omap35xxPkg/PciEmulation/PciEmulation.inf
> +++ b/Omap35xxPkg/PciEmulation/PciEmulation.inf
> @@ -22,33 +22,23 @@ [Defines]
>    ENTRY_POINT                     = PciEmulationEntryPoint
>  
>  [Sources.common]
> -  PciRootBridgeIo.c
>    PciEmulation.c
>  
>  [Packages]
>    MdePkg/MdePkg.dec
>    MdeModulePkg/MdeModulePkg.dec
> -  IntelFrameworkPkg/IntelFrameworkPkg.dec
> -  ArmPkg/ArmPkg.dec
>    EmbeddedPkg/EmbeddedPkg.dec
>    Omap35xxPkg/Omap35xxPkg.dec
>  
>  [LibraryClasses]
>    BaseLib
> -  DxeServicesTableLib
> -  UefiLib
> +  DebugLib
> +  IoLib
> +  NonDiscoverableDeviceRegistrationLib
>    UefiBootServicesTableLib
>    UefiDriverEntryPoint
> -  UefiRuntimeServicesTableLib
> -  IoLib
> -  OmapDmaLib
> -  DmaLib
>  
>  [Protocols]
> -  gEfiPciRootBridgeIoProtocolGuid
> -  gEfiDevicePathProtocolGuid
> -  gEfiPciHostBridgeResourceAllocationProtocolGuid
> -  gEfiPciIoProtocolGuid
>    gEmbeddedExternalDeviceProtocolGuid
>  
>  [Depex]
> diff --git a/Omap35xxPkg/PciEmulation/PciRootBridgeIo.c b/Omap35xxPkg/PciEmulation/PciRootBridgeIo.c
> deleted file mode 100644
> index e8635ed88d91..000000000000
> --- a/Omap35xxPkg/PciEmulation/PciRootBridgeIo.c
> +++ /dev/null
> @@ -1,306 +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.buf += InStride, Out.buf += OutStride) {
> -      *In.ui8 = *Out.ui8;
> -    }
> -    break;
> -  case EfiPciWidthUint16:
> -    for (;Count > 0; Count--, In.buf += InStride, Out.buf += OutStride) {
> -      *In.ui16 = *Out.ui16;
> -    }
> -    break;
> -  case EfiPciWidthUint32:
> -    for (;Count > 0; Count--, In.buf += InStride, Out.buf += 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.buf  = Buffer;
> -  Out.buf = (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.buf  = (VOID *)(UINTN) Address;
> -  Out.buf = 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.7.4
> 


  reply	other threads:[~2016-12-05 16:23 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-05 15:35 [PATCH v5 0/5] MdeModulePkg: add support for non-discoverable devices Ard Biesheuvel
2016-12-05 15:35 ` [PATCH v5 1/5] MdeModulePkg: introduce non-discoverable device protocol Ard Biesheuvel
2016-12-05 15:35 ` [PATCH v5 2/5] MdeModulePkg: introduce helper library to register non-discoverable devices Ard Biesheuvel
2016-12-05 15:35 ` [PATCH v5 3/5] MdeModulePkg: implement generic PCI I/O driver for " Ard Biesheuvel
2016-12-05 15:35 ` [PATCH v5 4/5] MdeModulePkg/NonDiscoverablePciDeviceDxe: add support for non-coherent DMA Ard Biesheuvel
2016-12-05 15:35 ` [PATCH v5 5/5] Omap35xxPkg/PciEmulation: port to new non-discoverable device infrastructure Ard Biesheuvel
2016-12-05 16:23   ` Leif Lindholm [this message]
2016-12-05 18:57 ` [PATCH v5 0/5] MdeModulePkg: add support for non-discoverable devices Marcin Wojtas
2016-12-07  9:43 ` 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=20161205162339.GN27069@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