diff mbox

[Linaro-uefi,8/8] Platforms/AMD/Styx: remove SataControllerDxe

Message ID 1478021115-22781-9-git-send-email-ard.biesheuvel@linaro.org
State Superseded
Headers show

Commit Message

Ard Biesheuvel Nov. 1, 2016, 5:25 p.m. UTC
This driver is no longer used, so remove it.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
 Platforms/AMD/Styx/Drivers/SataControllerDxe/ComponentName.c       |  178 ----
 Platforms/AMD/Styx/Drivers/SataControllerDxe/InitController.c      |  172 ----
 Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.c        |  442 ---------
 Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.h        |  289 ------
 Platforms/AMD/Styx/Drivers/SataControllerDxe/PciRootBridgeIo.c     |  307 ------
 Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.c      | 1027 --------------------
 Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.h      |  555 -----------
 Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf |   85 --
 Platforms/AMD/Styx/Drivers/SataControllerDxe/SataRegisters.h       |  180 ----
 9 files changed, 3235 deletions(-)

Comments

Leif Lindholm Nov. 2, 2016, 4:57 p.m. UTC | #1
On Tue, Nov 01, 2016 at 05:25:15PM +0000, Ard Biesheuvel wrote:
> This driver is no longer used, so remove it.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

> ---
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/ComponentName.c       |  178 ----
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/InitController.c      |  172 ----
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.c        |  442 ---------
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.h        |  289 ------
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/PciRootBridgeIo.c     |  307 ------
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.c      | 1027 --------------------
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.h      |  555 -----------
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf |   85 --
>  Platforms/AMD/Styx/Drivers/SataControllerDxe/SataRegisters.h       |  180 ----
>  9 files changed, 3235 deletions(-)
> 
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/ComponentName.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/ComponentName.c
> deleted file mode 100644
> index 943daac37a73..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/ComponentName.c
> +++ /dev/null
> @@ -1,178 +0,0 @@
> -/** @file
> -  UEFI Component Name(2) protocol implementation for Sata Controller driver.
> -
> -  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
> -  Copyright (c) 2014 - 2016, AMD 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 "SataController.h"
> -
> -//
> -/// EFI Component Name Protocol
> -///
> -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gSataControllerComponentName = {
> -  SataControllerComponentNameGetDriverName,
> -  SataControllerComponentNameGetControllerName,
> -  "eng"
> -};
> -
> -//
> -/// EFI Component Name 2 Protocol
> -///
> -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2 = {
> -  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SataControllerComponentNameGetDriverName,
> -  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SataControllerComponentNameGetControllerName,
> -  "en"
> -};
> -
> -//
> -/// Driver Name Strings
> -///
> -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerDriverNameTable[] = {
> -  {
> -    "eng;en",
> -    (CHAR16 *)L"Sata Controller Init Driver"
> -  },
> -  {
> -    NULL,
> -    NULL
> -  }
> -};
> -
> -///
> -/// Controller Name Strings
> -///
> -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerControllerNameTable[] = {
> -  {
> -    "eng;en",
> -    (CHAR16 *)L"Sata Controller"
> -  },
> -  {
> -    NULL,
> -    NULL
> -  }
> -};
> -
> -/**
> -  Retrieves a Unicode string that is the user readable name of the UEFI Driver.
> -
> -  @param This           A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
> -  @param Language       A pointer to a three character ISO 639-2 language identifier.
> -                        This is the language of the driver name that that the caller
> -                        is requesting, and it must match one of the languages specified
> -                        in SupportedLanguages.  The number of languages supported by a
> -                        driver is up to the driver writer.
> -  @param DriverName     A pointer to the Unicode string to return.  This Unicode string
> -                        is the name of the driver specified by This in the language
> -                        specified by Language.
> -
> -  @retval EFI_SUCCESS           The Unicode string for the Driver specified by This
> -                                and the language specified by Language was returned
> -                                in DriverName.
> -  @retval EFI_INVALID_PARAMETER Language is NULL.
> -  @retval EFI_INVALID_PARAMETER DriverName is NULL.
> -  @retval EFI_UNSUPPORTED       The driver specified by This does not support the
> -                                language specified by Language.
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerComponentNameGetDriverName (
> -  IN EFI_COMPONENT_NAME_PROTOCOL    *This,
> -  IN CHAR8                          *Language,
> -  OUT CHAR16                        **DriverName
> -  )
> -{
> -  return LookupUnicodeString2 (
> -           Language,
> -           This->SupportedLanguages,
> -           mSataControllerDriverNameTable,
> -           DriverName,
> -           (BOOLEAN)(This == &gSataControllerComponentName)
> -           );
> -}
> -
> -/**
> -  Retrieves a Unicode string that is the user readable name of the controller
> -  that is being managed by an UEFI Driver.
> -
> -  @param This                   A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
> -  @param ControllerHandle       The handle of a controller that the driver specified by
> -                                This is managing.  This handle specifies the controller
> -                                whose name is to be returned.
> -  @param ChildHandle OPTIONAL   The handle of the child controller to retrieve the name
> -                                of.  This is an optional parameter that may be NULL.  It
> -                                will be NULL for device drivers.  It will also be NULL
> -                                for a bus drivers that wish to retrieve the name of the
> -                                bus controller.  It will not be NULL for a bus driver
> -                                that wishes to retrieve the name of a child controller.
> -  @param Language               A pointer to a three character ISO 639-2 language
> -                                identifier.  This is the language of the controller name
> -                                that that the caller is requesting, and it must match one
> -                                of the languages specified in SupportedLanguages.  The
> -                                number of languages supported by a driver is up to the
> -                                driver writer.
> -  @param ControllerName         A pointer to the Unicode string to return.  This Unicode
> -                                string is the name of the controller specified by
> -                                ControllerHandle and ChildHandle in the language
> -                                specified by Language from the point of view of the
> -                                driver specified by This.
> -
> -  @retval EFI_SUCCESS           The Unicode string for the user readable name in the
> -                                language specified by Language for the driver
> -                                specified by This was returned in DriverName.
> -  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
> -  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
> -                                EFI_HANDLE.
> -  @retval EFI_INVALID_PARAMETER Language is NULL.
> -  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
> -  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
> -                                managing the controller specified by
> -                                ControllerHandle and ChildHandle.
> -  @retval EFI_UNSUPPORTED       The driver specified by This does not support the
> -                                language specified by Language.
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerComponentNameGetControllerName (
> -  IN EFI_COMPONENT_NAME_PROTOCOL    *This,
> -  IN EFI_HANDLE                     ControllerHandle,
> -  IN EFI_HANDLE                     ChildHandle OPTIONAL,
> -  IN CHAR8                          *Language,
> -  OUT CHAR16                        **ControllerName
> -  )
> -{
> -  EFI_STATUS    Status;
> -
> -  //
> -  // Make sure this driver is currently managing ControllHandle
> -  //
> -  Status = EfiTestManagedDevice (
> -             ControllerHandle,
> -             gSataControllerDriverBinding.DriverBindingHandle,
> -             &gEfiPciIoProtocolGuid
> -             );
> -  if (EFI_ERROR (Status)) {
> -    return Status;
> -  }
> -
> -  if (ChildHandle != NULL) {
> -    return EFI_UNSUPPORTED;
> -  }
> -
> -  return LookupUnicodeString2 (
> -          Language,
> -          This->SupportedLanguages,
> -          mSataControllerControllerNameTable,
> -          ControllerName,
> -          (BOOLEAN)(This == &gSataControllerComponentName)
> -          );
> -}
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/InitController.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/InitController.c
> deleted file mode 100644
> index f605bf7fd168..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/InitController.c
> +++ /dev/null
> @@ -1,172 +0,0 @@
> -/** @file
> -  Initialize SATA Phy, Serdes, and Controller.
> -
> -  Copyright (c) 2014 - 2016, AMD 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 "SataController.h"
> -#include <Library/IoLib.h>
> -#include "SataRegisters.h"
> -#include "PciEmulation.h"
> -#include <Library/AmdSataInitLib.h>
> -
> -VOID
> -ResetSataController (
> -  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
> -  )
> -{
> -  UINT32                  RegVal;
> -
> -  // Make a minimal global reset for HBA regiser
> -  RegVal = MmioRead32(AhciBaseAddr + EFI_AHCI_GHC_OFFSET);
> -  RegVal |= EFI_AHCI_GHC_RESET;
> -  MmioWrite32(AhciBaseAddr + EFI_AHCI_GHC_OFFSET, RegVal);
> -
> -  // Clear all interrupts
> -  MmioWrite32(AhciBaseAddr + EFI_AHCI_PORT_IS, EFI_AHCI_PORT_IS_CLEAR);
> -
> -  // Turn on interrupts and ensure that the HBA is working in AHCI mode
> -  RegVal = MmioRead32(AhciBaseAddr + EFI_AHCI_GHC_OFFSET);
> -  RegVal |= EFI_AHCI_GHC_IE | EFI_AHCI_GHC_ENABLE;
> -  MmioWrite32(AhciBaseAddr + EFI_AHCI_GHC_OFFSET, RegVal);
> -}
> -
> -
> -VOID
> -SetSataCapabilities (
> -  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
> -  )
> -{
> -  UINT32                  Capability;
> -
> -  Capability = MmioRead32(AhciBaseAddr + EFI_AHCI_CAPABILITY_OFFSET);
> -  if (PcdGetBool(PcdSataSssSupport)) // Staggered Spin-Up Support bit
> -    Capability |= EFI_AHCI_CAP_SSS;
> -  if (PcdGetBool(PcdSataSmpsSupport)) // Mechanical Presence Support bit
> -    Capability |= EFI_AHCI_CAP_SMPS;
> -  MmioWrite32(AhciBaseAddr + EFI_AHCI_CAPABILITY_OFFSET, Capability);
> -}
> -
> -
> -VOID
> -InitializeSataPorts (
> -  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
> -  )
> -{
> -  INTN                    PortNum;
> -  UINT32                  SataPi;
> -  BOOLEAN                 IsPortImplemented;
> -  BOOLEAN                 IsCpd;
> -  BOOLEAN                 IsMpsp;
> -  UINT32                  PortRegAddr;
> -  UINT32                  RegVal;
> -
> -  // Set Ports Implemented (PI)
> -  SataPi = PcdGet32(PcdSataPi);
> -  MmioWrite32(AhciBaseAddr + EFI_AHCI_PI_OFFSET, SataPi);
> -
> -  IsCpd = PcdGetBool(PcdSataPortCpd);
> -  IsMpsp = PcdGetBool(PcdSataPortMpsp);
> -  for (PortNum = 0; PortNum < EFI_AHCI_MAX_PORTS; PortNum++) {
> -    IsPortImplemented = (SataPi & (1 << PortNum)) ? 1 : 0;
> -    if (IsPortImplemented && (IsCpd || IsMpsp)) {
> -      PortRegAddr = EFI_AHCI_PORT_OFFSET(PortNum) + EFI_AHCI_PORT_CMD;
> -      RegVal = MmioRead32(AhciBaseAddr + PortRegAddr);
> -      if (IsCpd)
> -        RegVal |= EFI_AHCI_PORT_CMD_CPD;
> -      else
> -        RegVal &= ~EFI_AHCI_PORT_CMD_CPD;
> -      if (IsMpsp)
> -        RegVal |= EFI_AHCI_PORT_CMD_MPSP;
> -      else
> -        RegVal &= ~EFI_AHCI_PORT_CMD_MPSP;
> -      RegVal |= EFI_AHCI_PORT_CMD_HPCP;
> -      MmioWrite32(AhciBaseAddr + PortRegAddr, RegVal);
> -    }
> -  }
> -}
> -
> -
> -EFI_STATUS
> -InitializeSataController (
> -  VOID
> -  )
> -{
> -  EFI_PHYSICAL_ADDRESS    AhciBaseAddr;
> -  UINT8              SataPortCount;
> -  UINT8              SataChPerSerdes;
> -  UINT32             StartPort;
> -  UINT32             PortNum;
> -  UINT32             EvenPort;
> -  UINT32             OddPort;
> -  EFI_STATUS         Status;
> -
> -#ifdef BUILD_FOR_SATA1
> -  AhciBaseAddr = PcdGet32(PcdSata1CtrlAxiSlvPort);
> -  SataPortCount = PcdGet8(PcdSata1PortCount);
> -  StartPort = PcdGet8(PcdSataPortCount);
> -#else
> -  AhciBaseAddr = PcdGet32(PcdSataCtrlAxiSlvPort);
> -  SataPortCount = PcdGet8(PcdSataPortCount);
> -  StartPort = 0;
> -#endif
> -
> -  SataChPerSerdes = PcdGet8(PcdSataNumChPerSerdes);
> -
> -  //
> -  // Perform SATA workarounds
> -  //
> -  for (PortNum = 0; PortNum < SataPortCount; PortNum++) {
> -#ifdef BUILD_FOR_SATA1
> -      SetCwMinSata1(PortNum);
> -#else
> -      SetCwMinSata0(PortNum);
> -#endif
> -  }
> -
> -  for (PortNum = 0; PortNum < SataPortCount; PortNum += SataChPerSerdes) {
> -      EvenPort = (UINT32)(PcdGet16(PcdSataPortMode) >> (PortNum * 2)) & 3;
> -      OddPort = (UINT32)(PcdGet16(PcdSataPortMode) >> ((PortNum+1) * 2)) & 3;
> -      SataPhyInit((StartPort + PortNum)/SataChPerSerdes, EvenPort, OddPort);
> -  }
> -
> -  for (PortNum = 0; PortNum < SataPortCount; PortNum++) {
> -#ifdef BUILD_FOR_SATA1
> -      SetPrdSingleSata1(PortNum);
> -#else
> -      SetPrdSingleSata0(PortNum);
> -#endif
> -  }
> -
> -  //
> -  // Reset SATA controller
> -  //
> -  ResetSataController(AhciBaseAddr);
> -
> -  //
> -  // Set SATA capabilities
> -  //
> -  SetSataCapabilities(AhciBaseAddr);
> -
> -  //
> -  // Set and intialize the Sata ports
> -  //
> -  InitializeSataPorts(AhciBaseAddr);
> -
> -  //
> -  // Emulate a PCI configuration for this device
> -  //
> -  Status = PciEmulationEntryPoint(AhciBaseAddr);
> -  ASSERT_EFI_ERROR (Status);
> -
> -  return EFI_SUCCESS;
> -}
> -
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.c
> deleted file mode 100644
> index 137a4862226a..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.c
> +++ /dev/null
> @@ -1,442 +0,0 @@
> -/** @file
> -
> -  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> -  Copyright (c) 2014 - 2016, AMD 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"
> -#include "SataRegisters.h"
> -
> -
> -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} }
> -};
> -
> -
> -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;
> -}
> -
> -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);
> -
> -  return PciRootBridgeIoMemRW ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH)Width,
> -                               Count,
> -                               TRUE,
> -                               (PTR)(UINTN)Buffer,
> -                               TRUE,
> -                               (PTR)(UINTN)(((UINT8 *)Private->ConfigSpace) + Offset)
> -                              );
> -}
> -
> -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);
> -
> -  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
> -  )
> -{
> -  *DeviceAddress = (EFI_PHYSICAL_ADDRESS) HostAddress;
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -PciIoUnmap (
> -  IN EFI_PCI_IO_PROTOCOL           *This,
> -  IN  VOID                         *Mapping
> -  )
> -{
> -  return EFI_SUCCESS;
> -}
> -
> -
> -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
> -  )
> -{
> -  EFI_PHYSICAL_ADDRESS Memory;
> -  EFI_STATUS           Status;
> -
> -  if (Attributes & EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER) {
> -    // Check this
> -    return EFI_UNSUPPORTED;
> -  }
> -  Status = gBS->AllocatePages(AllocateAnyPages, MemoryType, Pages, &Memory);
> -  if (Status == EFI_SUCCESS)
> -    *HostAddress = (VOID *)Memory;
> -  return Status;
> -}
> -
> -
> -EFI_STATUS
> -PciIoFreeBuffer (
> -  IN EFI_PCI_IO_PROTOCOL           *This,
> -  IN  UINTN                        Pages,
> -  IN  VOID                         *HostAddress
> -  )
> -{
> -  return gBS->FreePages((EFI_PHYSICAL_ADDRESS)HostAddress, Pages);
> -}
> -
> -
> -EFI_STATUS
> -PciIoFlush (
> -  IN EFI_PCI_IO_PROTOCOL  *This
> -  )
> -{
> -  return EFI_SUCCESS;
> -}
> -
> -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) {
> -    *SegmentNumber = Private->Segment;
> -  }
> -
> -  if (BusNumber != NULL) {
> -    *BusNumber = 0xff;
> -  }
> -
> -  if (DeviceNumber != NULL) {
> -    *DeviceNumber = 0;
> -  }
> -
> -  if (FunctionNumber != NULL) {
> -    *FunctionNumber = 0;
> -  }
> -
> -  return EFI_SUCCESS;
> -}
> -
> -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_IO_ATTRIBUTE_MEMORY | EFI_PCI_IO_ATTRIBUTE_BUS_MASTER | EFI_PCI_DEVICE_ENABLE;
> -    break;
> -
> -  case EfiPciIoAttributeOperationSet:
> -  case EfiPciIoAttributeOperationEnable:
> -  case EfiPciIoAttributeOperationDisable:
> -    // Since we are not a real PCI device no enable/set or disable operations exist.
> -    return EFI_SUCCESS;
> -
> -  default:
> -  ASSERT (FALSE);
> -    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
> -PciEmulationEntryPoint (
> -  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
> -  )
> -{
> -  EFI_STATUS              Status;
> -  EFI_HANDLE              Handle;
> -  EFI_PCI_IO_PRIVATE_DATA *Private;
> -
> -  // 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 = AhciBaseAddr;                       // Get the SATA capability register base
> -  Private->Segment                = 0;                                  // Default to segment zero
> -
> -  // Total size of the SATA registers.
> -  Private->RootBridge.MemorySize = 1024;
> -
> -  // 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 = 0x3530;
> -  Private->ConfigSpace->Hdr.DeviceId = 0x3530;
> -  Private->ConfigSpace->Hdr.ClassCode[0] = PCI_IF_APIC_CONTROLLER2;
> -  Private->ConfigSpace->Hdr.ClassCode[1] = PCI_CLASS_MASS_STORAGE_SATADPA;
> -  Private->ConfigSpace->Hdr.ClassCode[2] = PCI_CLASS_MASS_STORAGE;
> -  Private->ConfigSpace->Device.Bar[EFI_AHCI_BAR_INDEX] = Private->RootBridge.MemoryStart;
> -
> -  Handle = NULL;
> -
> -  // Unique device path.
> -  CopyMem(&Private->DevicePath, &PciIoDevicePathTemplate, sizeof(PciIoDevicePathTemplate));
> -  Private->DevicePath.AcpiDevicePath.UID = 1;
> -
> -  // 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;
> -}
> -
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.h b/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.h
> deleted file mode 100644
> index 067aea21e33f..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.h
> +++ /dev/null
> @@ -1,289 +0,0 @@
> -/** @file
> -
> -  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> -  Copyright (c) 2014 - 2016, AMD 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 <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/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/Pci30.h>
> -#include <IndustryStandard/Acpi.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
> -PciEmulationEntryPoint (
> -  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
> -  );
> -
> -#endif
> -
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciRootBridgeIo.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciRootBridgeIo.c
> deleted file mode 100644
> index 9fcb402bc326..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciRootBridgeIo.c
> +++ /dev/null
> @@ -1,307 +0,0 @@
> -/** @file
> -
> -  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
> -  Copyright (c) 2014 - 2016, AMD 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);
> -}
> -
> -
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.c
> deleted file mode 100644
> index 93d940cff055..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.c
> +++ /dev/null
> @@ -1,1027 +0,0 @@
> -/** @file
> -  This driver module produces IDE_CONTROLLER_INIT protocol for Sata Controllers.
> -
> -  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
> -  Copyright (c) 2014 - 2016, AMD 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 "SataController.h"
> -
> -///
> -/// EFI_DRIVER_BINDING_PROTOCOL instance
> -///
> -EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding = {
> -  SataControllerSupported,
> -  SataControllerStart,
> -  SataControllerStop,
> -  0xa,
> -  NULL,
> -  NULL
> -};
> -
> -/**
> -  Read AHCI Operation register.
> -
> -  @param PciIo      The PCI IO protocol instance.
> -  @param Offset     The operation register offset.
> -
> -  @return The register content read.
> -
> -**/
> -UINT32
> -EFIAPI
> -AhciReadReg (
> -  IN EFI_PCI_IO_PROTOCOL    *PciIo,
> -  IN UINT32                 Offset
> -  )
> -{
> -  UINT32    Data;
> -
> -  ASSERT (PciIo != NULL);
> -
> -  Data = 0;
> -
> -  PciIo->Mem.Read (
> -               PciIo,
> -               EfiPciIoWidthUint32,
> -               AHCI_BAR_INDEX,
> -               (UINT64) Offset,
> -               1,
> -               &Data
> -               );
> -
> -  return Data;
> -}
> -
> -/**
> -  Write AHCI Operation register.
> -
> -  @param PciIo      The PCI IO protocol instance.
> -  @param Offset     The operation register offset.
> -  @param Data       The data used to write down.
> -
> -**/
> -VOID
> -EFIAPI
> -AhciWriteReg (
> -  IN EFI_PCI_IO_PROTOCOL    *PciIo,
> -  IN UINT32                 Offset,
> -  IN UINT32                 Data
> -  )
> -{
> -  ASSERT (PciIo != NULL);
> -
> -  PciIo->Mem.Write (
> -               PciIo,
> -               EfiPciIoWidthUint32,
> -               AHCI_BAR_INDEX,
> -               (UINT64) Offset,
> -               1,
> -               &Data
> -               );
> -
> -  return;
> -}
> -
> -/**
> -  This function is used to calculate the best PIO mode supported by specific IDE device
> -
> -  @param IdentifyData   The identify data of specific IDE device.
> -  @param DisPioMode     Disqualified PIO modes collection.
> -  @param SelectedMode   Available PIO modes collection.
> -
> -  @retval EFI_SUCCESS       Best PIO modes are returned.
> -  @retval EFI_UNSUPPORTED   The device doesn't support PIO mode,
> -                            or all supported modes have been disqualified.
> -**/
> -EFI_STATUS
> -CalculateBestPioMode (
> -  IN EFI_IDENTIFY_DATA  *IdentifyData,
> -  IN UINT16             *DisPioMode OPTIONAL,
> -  OUT UINT16            *SelectedMode
> -  )
> -{
> -  UINT16    PioMode;
> -  UINT16    AdvancedPioMode;
> -  UINT16    Temp;
> -  UINT16    Index;
> -  UINT16    MinimumPioCycleTime;
> -
> -  Temp = 0xff;
> -
> -DEBUG ((EFI_D_INFO, "CalculateBestPioMode()\n"));
> -
> -  PioMode = (UINT8) (((ATA5_IDENTIFY_DATA *) (&(IdentifyData->AtaData)))->pio_cycle_timing >> 8);
> -
> -  //
> -  // See whether Identify Data word 64 - 70 are valid
> -  //
> -  if ((IdentifyData->AtaData.field_validity & 0x02) == 0x02) {
> -
> -    AdvancedPioMode = IdentifyData->AtaData.advanced_pio_modes;
> -    DEBUG ((EFI_D_INFO, "CalculateBestPioMode: AdvancedPioMode = %x\n", AdvancedPioMode));
> -
> -    for (Index = 0; Index < 8; Index++) {
> -      if ((AdvancedPioMode & 0x01) != 0) {
> -        Temp = Index;
> -      }
> -
> -      AdvancedPioMode >>= 1;
> -    }
> -
> -    //
> -    // If Temp is modified, mean the advanced_pio_modes is not zero;
> -    // if Temp is not modified, mean there is no advanced PIO mode supported,
> -    // the best PIO Mode is the value in pio_cycle_timing.
> -    //
> -    if (Temp != 0xff) {
> -      AdvancedPioMode = (UINT16) (Temp + 3);
> -    } else {
> -      AdvancedPioMode = PioMode;
> -    }
> -
> -    //
> -    // Limit the PIO mode to at most PIO4.
> -    //
> -    PioMode = (UINT16) MIN (AdvancedPioMode, 4);
> -
> -    MinimumPioCycleTime = IdentifyData->AtaData.min_pio_cycle_time_with_flow_control;
> -
> -    if (MinimumPioCycleTime <= 120) {
> -      PioMode = (UINT16) MIN (4, PioMode);
> -    } else if (MinimumPioCycleTime <= 180) {
> -      PioMode = (UINT16) MIN (3, PioMode);
> -    } else if (MinimumPioCycleTime <= 240) {
> -      PioMode = (UINT16) MIN (2, PioMode);
> -    } else {
> -      PioMode = 0;
> -    }
> -
> -    //
> -    // Degrade the PIO mode if the mode has been disqualified
> -    //
> -    if (DisPioMode != NULL) {
> -      if (*DisPioMode < 2) {
> -        return EFI_UNSUPPORTED; // no mode below ATA_PIO_MODE_BELOW_2
> -      }
> -
> -      if (PioMode >= *DisPioMode) {
> -        PioMode = (UINT16) (*DisPioMode - 1);
> -      }
> -    }
> -
> -    if (PioMode < 2) {
> -      *SelectedMode = 1;        // ATA_PIO_MODE_BELOW_2;
> -    } else {
> -      *SelectedMode = PioMode;  // ATA_PIO_MODE_2 to ATA_PIO_MODE_4;
> -    }
> -
> -  } else {
> -    //
> -    // Identify Data word 64 - 70 are not valid
> -    // Degrade the PIO mode if the mode has been disqualified
> -    //
> -    if (DisPioMode != NULL) {
> -      if (*DisPioMode < 2) {
> -        return EFI_UNSUPPORTED; // no mode below ATA_PIO_MODE_BELOW_2
> -      }
> -
> -      if (PioMode == *DisPioMode) {
> -        PioMode--;
> -      }
> -    }
> -
> -    if (PioMode < 2) {
> -      *SelectedMode = 1;        // ATA_PIO_MODE_BELOW_2;
> -    } else {
> -      *SelectedMode = 2;        // ATA_PIO_MODE_2;
> -    }
> -
> -  }
> -
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  This function is used to calculate the best UDMA mode supported by specific IDE device
> -
> -  @param IdentifyData   The identify data of specific IDE device.
> -  @param DisUDmaMode     Disqualified UDMA modes collection.
> -  @param SelectedMode   Available UDMA modes collection.
> -
> -  @retval EFI_SUCCESS       Best UDMA modes are returned.
> -  @retval EFI_UNSUPPORTED   The device doesn't support UDMA mode,
> -                            or all supported modes have been disqualified.
> -**/
> -EFI_STATUS
> -CalculateBestUdmaMode (
> -  IN EFI_IDENTIFY_DATA  *IdentifyData,
> -  IN UINT16             *DisUDmaMode OPTIONAL,
> -  OUT UINT16            *SelectedMode
> -  )
> -{
> -  UINT16    TempMode;
> -  UINT16    DeviceUDmaMode;
> -
> -  DeviceUDmaMode = 0;
> -
> -DEBUG ((EFI_D_INFO, "CalculateBestUdmaMode()\n"));
> -  //
> -  // Check whether the WORD 88 (supported UltraDMA by drive) is valid
> -  //
> -  if ((IdentifyData->AtaData.field_validity & 0x04) == 0x00) {
> -    return EFI_UNSUPPORTED;
> -  }
> -
> -  DeviceUDmaMode = IdentifyData->AtaData.ultra_dma_mode;
> -  DEBUG ((EFI_D_INFO, "CalculateBestUdmaMode: DeviceUDmaMode = %x\n", DeviceUDmaMode));
> -  DeviceUDmaMode &= 0x3f;
> -  TempMode = 0;                 // initialize it to UDMA-0
> -
> -  while ((DeviceUDmaMode >>= 1) != 0) {
> -    TempMode++;
> -  }
> -
> -  //
> -  // Degrade the UDMA mode if the mode has been disqualified
> -  //
> -  if (DisUDmaMode != NULL) {
> -    if (*DisUDmaMode == 0) {
> -      *SelectedMode = 0;
> -      return EFI_UNSUPPORTED;   // no mode below ATA_UDMA_MODE_0
> -    }
> -
> -    if (TempMode >= *DisUDmaMode) {
> -      TempMode = (UINT16) (*DisUDmaMode - 1);
> -    }
> -  }
> -
> -  //
> -  // Possible returned mode is between ATA_UDMA_MODE_0 and ATA_UDMA_MODE_5
> -  //
> -  *SelectedMode = TempMode;
> -
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  The Entry Point of module. It follows the standard UEFI driver model.
> -
> -  @param[in] ImageHandle    The firmware allocated handle for the EFI image.
> -  @param[in] SystemTable    A pointer to the EFI System Table.
> -
> -  @retval EFI_SUCCESS   The entry point is executed successfully.
> -  @retval other         Some error occurs when executing this entry point.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -InitializeSataControllerDriver (
> -  IN EFI_HANDLE         ImageHandle,
> -  IN EFI_SYSTEM_TABLE   *SystemTable
> -  )
> -{
> -  EFI_STATUS    Status;
> -
> -DEBUG ((EFI_D_INFO, "InitializeSataControllerDriver()\n"));
> -  //
> -  // Initialize the SATA controller
> -  //
> -  Status = InitializeSataController();
> -  ASSERT_EFI_ERROR (Status);
> -
> -  //
> -  // Install driver model protocol(s).
> -  //
> -  Status = EfiLibInstallDriverBindingComponentName2 (
> -             ImageHandle,
> -             SystemTable,
> -             &gSataControllerDriverBinding,
> -             ImageHandle,
> -             &gSataControllerComponentName,
> -             &gSataControllerComponentName2
> -             );
> -  ASSERT_EFI_ERROR (Status);
> -
> -  return Status;
> -}
> -
> -/**
> -  Supported function of Driver Binding protocol for this driver.
> -  Test to see if this driver supports ControllerHandle.
> -
> -  @param This                   Protocol instance pointer.
> -  @param Controller             Handle of device to test.
> -  @param RemainingDevicePath    A pointer to the device path.
> -                                it should be ignored by device driver.
> -
> -  @retval EFI_SUCCESS           This driver supports this device.
> -  @retval EFI_ALREADY_STARTED   This driver is already running on this device.
> -  @retval other                 This driver does not support this device.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerSupported (
> -  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
> -  IN EFI_HANDLE                     Controller,
> -  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
> -  )
> -{
> -  EFI_STATUS            Status;
> -  EFI_PCI_IO_PROTOCOL   *PciIo;
> -  PCI_TYPE00            PciData;
> -
> -//DEBUG ((EFI_D_INFO, "SataControllerSupported()\n"));
> -  //
> -  // Attempt to open PCI I/O Protocol
> -  //
> -  Status = gBS->OpenProtocol (
> -                  Controller,
> -                  &gEfiPciIoProtocolGuid,
> -                  (VOID **) &PciIo,
> -                  This->DriverBindingHandle,
> -                  Controller,
> -                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> -                  );
> -  if (EFI_ERROR (Status)) {
> -    return Status;
> -  }
> -
> -  //
> -  // Now further check the PCI header: Base Class (offset 0x0B) and
> -  // Sub Class (offset 0x0A). This controller should be an SATA controller
> -  //
> -  Status = PciIo->Pci.Read (
> -                        PciIo,
> -                        EfiPciIoWidthUint8,
> -                        PCI_CLASSCODE_OFFSET,
> -                        sizeof (PciData.Hdr.ClassCode),
> -                        PciData.Hdr.ClassCode
> -                        );
> -  if (EFI_ERROR (Status)) {
> -    return EFI_UNSUPPORTED;
> -  }
> -
> -  if (IS_PCI_IDE (&PciData) || IS_PCI_SATADPA (&PciData)) {
> -    return EFI_SUCCESS;
> -  }
> -
> -  return EFI_UNSUPPORTED;
> -}
> -
> -/**
> -  This routine is called right after the .Supported() called and
> -  Start this driver on ControllerHandle.
> -
> -  @param This                   Protocol instance pointer.
> -  @param Controller             Handle of device to bind driver to.
> -  @param RemainingDevicePath    A pointer to the device path.
> -                                it should be ignored by device driver.
> -
> -  @retval EFI_SUCCESS           This driver is added to this device.
> -  @retval EFI_ALREADY_STARTED   This driver is already running on this device.
> -  @retval other                 Some error occurs when binding this driver to this device.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerStart (
> -  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
> -  IN EFI_HANDLE                     Controller,
> -  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
> -  )
> -{
> -  EFI_STATUS                        Status;
> -  EFI_PCI_IO_PROTOCOL               *PciIo;
> -  PCI_TYPE00                        PciData;
> -  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
> -  UINT32                            Data32;
> -  UINTN                             ChannelDeviceCount;
> -
> -  DEBUG ((EFI_D_INFO, "SataControllerStart START\n"));
> -
> -  SataPrivateData = NULL;
> -
> -  //
> -  // Now test and open PCI I/O Protocol
> -  //
> -  Status = gBS->OpenProtocol (
> -                  Controller,
> -                  &gEfiPciIoProtocolGuid,
> -                  (VOID **) &PciIo,
> -                  This->DriverBindingHandle,
> -                  Controller,
> -                  EFI_OPEN_PROTOCOL_BY_DRIVER
> -                  );
> -  if (EFI_ERROR (Status)) {
> -    DEBUG ((EFI_D_ERROR, "SataControllerStart error return status = %r\n", Status));
> -    return Status;
> -  }
> -
> -  //
> -  // Allocate Sata Private Data structure
> -  //
> -  SataPrivateData = AllocateZeroPool (sizeof (EFI_SATA_CONTROLLER_PRIVATE_DATA));
> -  if (SataPrivateData == NULL) {
> -    Status = EFI_OUT_OF_RESOURCES;
> -    goto Done;
> -  }
> -
> -  //
> -  // Initialize Sata Private Data
> -  //
> -  SataPrivateData->Signature = SATA_CONTROLLER_SIGNATURE;
> -  SataPrivateData->PciIo = PciIo;
> -  SataPrivateData->IdeInit.GetChannelInfo = IdeInitGetChannelInfo;
> -  SataPrivateData->IdeInit.NotifyPhase = IdeInitNotifyPhase;
> -  SataPrivateData->IdeInit.SubmitData = IdeInitSubmitData;
> -  SataPrivateData->IdeInit.DisqualifyMode = IdeInitDisqualifyMode;
> -  SataPrivateData->IdeInit.CalculateMode = IdeInitCalculateMode;
> -  SataPrivateData->IdeInit.SetTiming = IdeInitSetTiming;
> -  SataPrivateData->IdeInit.EnumAll = SATA_ENUMER_ALL;
> -
> -  Status = PciIo->Pci.Read (
> -                        PciIo,
> -                        EfiPciIoWidthUint8,
> -                        PCI_CLASSCODE_OFFSET,
> -                        sizeof (PciData.Hdr.ClassCode),
> -                        PciData.Hdr.ClassCode
> -                        );
> -  ASSERT_EFI_ERROR (Status);
> -
> -  if (IS_PCI_IDE (&PciData)) {
> -    SataPrivateData->IdeInit.ChannelCount = IDE_MAX_CHANNEL;
> -    SataPrivateData->DeviceCount = IDE_MAX_DEVICES;
> -  } else if (IS_PCI_SATADPA (&PciData)) {
> -    //
> -    // Read Host Capability Register(CAP) to get Number of Ports(NPS) and Supports Port Multiplier(SPM)
> -    //   NPS is 0's based value indicating the maximum number of ports supported by the HBA silicon.
> -    //   A maximum of 32 ports can be supported. A value of '0h', indicating one port, is the minimum requirement.
> -    //
> -    Data32 = AhciReadReg (PciIo, R_AHCI_CAP);
> -    SataPrivateData->IdeInit.ChannelCount = (UINT8) ((Data32 & B_AHCI_CAP_NPS) + 1);
> -    SataPrivateData->DeviceCount = AHCI_MAX_DEVICES;
> -    if ((Data32 & B_AHCI_CAP_SPM) == B_AHCI_CAP_SPM) {
> -      SataPrivateData->DeviceCount = AHCI_MULTI_MAX_DEVICES;
> -    }
> -  }
> -
> -  ChannelDeviceCount = (UINTN) (SataPrivateData->IdeInit.ChannelCount) * (UINTN) (SataPrivateData->DeviceCount);
> -  DEBUG ((EFI_D_INFO, "ChannelDeviceCount %d\n", ChannelDeviceCount));
> -  SataPrivateData->DisqulifiedModes = AllocateZeroPool ((sizeof (EFI_ATA_COLLECTIVE_MODE)) * ChannelDeviceCount);
> -  if (SataPrivateData->DisqulifiedModes == NULL) {
> -    Status = EFI_OUT_OF_RESOURCES;
> -    goto Done;
> -  }
> -
> -  SataPrivateData->IdentifyData = AllocateZeroPool ((sizeof (EFI_IDENTIFY_DATA)) * ChannelDeviceCount);
> -  if (SataPrivateData->IdentifyData == NULL) {
> -    Status = EFI_OUT_OF_RESOURCES;
> -    goto Done;
> -  }
> -
> -  SataPrivateData->IdentifyValid = AllocateZeroPool ((sizeof (BOOLEAN)) * ChannelDeviceCount);
> -  if (SataPrivateData->IdentifyValid == NULL) {
> -    Status = EFI_OUT_OF_RESOURCES;
> -    goto Done;
> -  }
> -
> -  //
> -  // Install IDE Controller Init Protocol to this instance
> -  //
> -  Status = gBS->InstallMultipleProtocolInterfaces (
> -                  &Controller,
> -                  &gEfiIdeControllerInitProtocolGuid,
> -                  &(SataPrivateData->IdeInit),
> -                  NULL
> -                  );
> -
> -Done:
> -  if (EFI_ERROR (Status)) {
> -
> -    gBS->CloseProtocol (
> -          Controller,
> -          &gEfiPciIoProtocolGuid,
> -          This->DriverBindingHandle,
> -          Controller
> -          );
> -    if (SataPrivateData != NULL) {
> -      if (SataPrivateData->DisqulifiedModes != NULL) {
> -        FreePool (SataPrivateData->DisqulifiedModes);
> -      }
> -      if (SataPrivateData->IdentifyData != NULL) {
> -        FreePool (SataPrivateData->IdentifyData);
> -      }
> -      if (SataPrivateData->IdentifyValid != NULL) {
> -        FreePool (SataPrivateData->IdentifyValid);
> -      }
> -      FreePool (SataPrivateData);
> -    }
> -  }
> -
> -  DEBUG ((EFI_D_INFO, "SataControllerStart END status = %r\n", Status));
> -
> -  return Status;
> -}
> -
> -/**
> -  Stop this driver on ControllerHandle.
> -
> -  @param This               Protocol instance pointer.
> -  @param Controller         Handle of device to stop driver on.
> -  @param NumberOfChildren   Not used.
> -  @param ChildHandleBuffer  Not used.
> -
> -  @retval EFI_SUCCESS   This driver is removed from this device.
> -  @retval other         Some error occurs when removing this driver from this device.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerStop (
> -  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
> -  IN EFI_HANDLE                     Controller,
> -  IN UINTN                          NumberOfChildren,
> -  IN EFI_HANDLE                     *ChildHandleBuffer
> -  )
> -{
> -  EFI_STATUS                        Status;
> -  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *IdeInit;
> -  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
> -
> -DEBUG ((EFI_D_INFO, "SataControllerStop()\n"));
> -  //
> -  // Open the produced protocol
> -  //
> -  Status = gBS->OpenProtocol (
> -                  Controller,
> -                  &gEfiIdeControllerInitProtocolGuid,
> -                  (VOID **) &IdeInit,
> -                  This->DriverBindingHandle,
> -                  Controller,
> -                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
> -                  );
> -  if (EFI_ERROR (Status)) {
> -    return EFI_UNSUPPORTED;
> -  }
> -
> -  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (IdeInit);
> -  ASSERT (SataPrivateData != NULL);
> -
> -  //
> -  // Uninstall the IDE Controller Init Protocol from this instance
> -  //
> -  Status = gBS->UninstallMultipleProtocolInterfaces (
> -                  Controller,
> -                  &gEfiIdeControllerInitProtocolGuid,
> -                  &(SataPrivateData->IdeInit),
> -                  NULL
> -                  );
> -  if (EFI_ERROR (Status)) {
> -    return Status;
> -  }
> -
> -  if (SataPrivateData != NULL) {
> -    if (SataPrivateData->DisqulifiedModes != NULL) {
> -      FreePool (SataPrivateData->DisqulifiedModes);
> -    }
> -    if (SataPrivateData->IdentifyData != NULL) {
> -      FreePool (SataPrivateData->IdentifyData);
> -    }
> -    if (SataPrivateData->IdentifyValid != NULL) {
> -      FreePool (SataPrivateData->IdentifyValid);
> -    }
> -    FreePool (SataPrivateData);
> -  }
> -
> -  //
> -  // Close protocols opened by Sata Controller driver
> -  //
> -  return gBS->CloseProtocol (
> -                Controller,
> -                &gEfiPciIoProtocolGuid,
> -                This->DriverBindingHandle,
> -                Controller
> -                );
> -}
> -
> -//
> -// Interface functions of IDE_CONTROLLER_INIT protocol
> -//
> -/**
> -  Returns the information about the specified IDE channel.
> -
> -  This function can be used to obtain information about a particular IDE channel.
> -  The driver entity uses this information during the enumeration process.
> -
> -  If Enabled is set to FALSE, the driver entity will not scan the channel. Note
> -  that it will not prevent an operating system driver from scanning the channel.
> -
> -  For most of today's controllers, MaxDevices will either be 1 or 2. For SATA
> -  controllers, this value will always be 1. SATA configurations can contain SATA
> -  port multipliers. SATA port multipliers behave like SATA bridges and can support
> -  up to 16 devices on the other side. If a SATA port out of the IDE controller
> -  is connected to a port multiplier, MaxDevices will be set to the number of SATA
> -  devices that the port multiplier supports. Because today's port multipliers
> -  support up to fifteen SATA devices, this number can be as large as fifteen. The IDE
> -  bus driver is required to scan for the presence of port multipliers behind an SATA
> -  controller and enumerate up to MaxDevices number of devices behind the port
> -  multiplier.
> -
> -  In this context, the devices behind a port multiplier constitute a channel.
> -
> -  @param[in]  This         The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in]  Channel      Zero-based channel number.
> -  @param[out] Enabled      TRUE if this channel is enabled.  Disabled channels
> -                           are not scanned to see if any devices are present.
> -  @param[out] MaxDevices   The maximum number of IDE devices that the bus driver
> -                           can expect on this channel.  For the ATA/ATAPI
> -                           specification, version 6, this number will either be
> -                           one or two. For Serial ATA (SATA) configurations with a
> -                           port multiplier, this number can be as large as fifteen.
> -
> -  @retval EFI_SUCCESS             Information was returned without any errors.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitGetChannelInfo (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  OUT BOOLEAN                           *Enabled,
> -  OUT UINT8                             *MaxDevices
> -  )
> -{
> -  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
> -  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);
> -  ASSERT (SataPrivateData != NULL);
> -
> -DEBUG ((EFI_D_INFO, "IdeInitGetChannelInfo()\n"));
> -  if (Channel < This->ChannelCount) {
> -    *Enabled = TRUE;
> -    *MaxDevices = SataPrivateData->DeviceCount;
> -    return EFI_SUCCESS;
> -  }
> -
> -  *Enabled = FALSE;
> -  return EFI_INVALID_PARAMETER;
> -}
> -
> -/**
> -  The notifications from the driver entity that it is about to enter a certain
> -  phase of the IDE channel enumeration process.
> -
> -  This function can be used to notify the IDE controller driver to perform
> -  specific actions, including any chipset-specific initialization, so that the
> -  chipset is ready to enter the next phase. Seven notification points are defined
> -  at this time.
> -
> -  More synchronization points may be added as required in the future.
> -
> -  @param[in] This      The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in] Phase     The phase during enumeration.
> -  @param[in] Channel   Zero-based channel number.
> -
> -  @retval EFI_SUCCESS             The notification was accepted without any errors.
> -  @retval EFI_UNSUPPORTED         Phase is not supported.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_NOT_READY           This phase cannot be entered at this time; for
> -                                  example, an attempt was made to enter a Phase
> -                                  without having entered one or more previous
> -                                  Phase.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitNotifyPhase (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN EFI_IDE_CONTROLLER_ENUM_PHASE      Phase,
> -  IN UINT8                              Channel
> -  )
> -{
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  Submits the device information to the IDE controller driver.
> -
> -  This function is used by the driver entity to pass detailed information about
> -  a particular device to the IDE controller driver. The driver entity obtains
> -  this information by issuing an ATA or ATAPI IDENTIFY_DEVICE command. IdentifyData
> -  is the pointer to the response data buffer. The IdentifyData buffer is owned
> -  by the driver entity, and the IDE controller driver must make a local copy
> -  of the entire buffer or parts of the buffer as needed. The original IdentifyData
> -  buffer pointer may not be valid when
> -
> -    - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() or
> -    - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() is called at a later point.
> -
> -  The IDE controller driver may consult various fields of EFI_IDENTIFY_DATA to
> -  compute the optimum mode for the device. These fields are not limited to the
> -  timing information. For example, an implementation of the IDE controller driver
> -  may examine the vendor and type/mode field to match known bad drives.
> -
> -  The driver entity may submit drive information in any order, as long as it
> -  submits information for all the devices belonging to the enumeration group
> -  before EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() is called for any device
> -  in that enumeration group. If a device is absent, EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
> -  should be called with IdentifyData set to NULL.  The IDE controller driver may
> -  not have any other mechanism to know whether a device is present or not. Therefore,
> -  setting IdentifyData to NULL does not constitute an error condition.
> -  EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() can be called only once for a
> -  given (Channel, Device) pair.
> -
> -  @param[in] This           A pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in] Channel        Zero-based channel number.
> -  @param[in] Device         Zero-based device number on the Channel.
> -  @param[in] IdentifyData   The device's response to the ATA IDENTIFY_DEVICE command.
> -
> -  @retval EFI_SUCCESS             The information was accepted without any errors.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_INVALID_PARAMETER   Device is invalid.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitSubmitData (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  IN UINT8                              Device,
> -  IN EFI_IDENTIFY_DATA                  *IdentifyData
> -  )
> -{
> -  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
> -  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);
> -  ASSERT (SataPrivateData != NULL);
> -
> -DEBUG ((EFI_D_INFO, "IdeInitSubmitData()\n"));
> -  if ((Channel >= This->ChannelCount) || (Device >= SataPrivateData->DeviceCount)) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  //
> -  // Make a local copy of device's IdentifyData and mark the valid flag
> -  //
> -  if (IdentifyData != NULL) {
> -    CopyMem (
> -      &(SataPrivateData->IdentifyData[Channel * Device]),
> -      IdentifyData,
> -      sizeof (EFI_IDENTIFY_DATA)
> -      );
> -
> -    SataPrivateData->IdentifyValid[Channel * Device] = TRUE;
> -  } else {
> -    SataPrivateData->IdentifyValid[Channel * Device] = FALSE;
> -  }
> -
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  Disqualifies specific modes for an IDE device.
> -
> -  This function allows the driver entity or other drivers (such as platform
> -  drivers) to reject certain timing modes and request the IDE controller driver
> -  to recalculate modes. This function allows the driver entity and the IDE
> -  controller driver to negotiate the timings on a per-device basis. This function
> -  is useful in the case of drives that lie about their capabilities. An example
> -  is when the IDE device fails to accept the timing modes that are calculated
> -  by the IDE controller driver based on the response to the Identify Drive command.
> -
> -  If the driver entity does not want to limit the ATA timing modes and leave that
> -  decision to the IDE controller driver, it can either not call this function for
> -  the given device or call this function and set the Valid flag to FALSE for all
> -  modes that are listed in EFI_ATA_COLLECTIVE_MODE.
> -
> -  The driver entity may disqualify modes for a device in any order and any number
> -  of times.
> -
> -  This function can be called multiple times to invalidate multiple modes of the
> -  same type (e.g., Programmed Input/Output [PIO] modes 3 and 4). See the ATA/ATAPI
> -  specification for more information on PIO modes.
> -
> -  For Serial ATA (SATA) controllers, this member function can be used to disqualify
> -  a higher transfer rate mode on a given channel. For example, a platform driver
> -  may inform the IDE controller driver to not use second-generation (Gen2) speeds
> -  for a certain SATA drive.
> -
> -  @param[in] This       The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in] Channel    The zero-based channel number.
> -  @param[in] Device     The zero-based device number on the Channel.
> -  @param[in] BadModes   The modes that the device does not support and that
> -                        should be disqualified.
> -
> -  @retval EFI_SUCCESS             The modes were accepted without any errors.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_INVALID_PARAMETER   Device is invalid.
> -  @retval EFI_INVALID_PARAMETER   IdentifyData is NULL.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitDisqualifyMode (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  IN UINT8                              Device,
> -  IN EFI_ATA_COLLECTIVE_MODE            *BadModes
> -  )
> -{
> -  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
> -  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);
> -  ASSERT (SataPrivateData != NULL);
> -
> -DEBUG ((EFI_D_INFO, "IdeInitDisqualifyMode()\n"));
> -
> -  if ((Channel >= This->ChannelCount) || (BadModes == NULL) || (Device >= SataPrivateData->DeviceCount)) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  //
> -  // Record the disqualified modes per channel per device. From ATA/ATAPI spec,
> -  // if a mode is not supported, the modes higher than it is also not supported.
> -  //
> -  CopyMem (
> -    &(SataPrivateData->DisqulifiedModes[Channel * Device]),
> -    BadModes,
> -    sizeof (EFI_ATA_COLLECTIVE_MODE)
> -    );
> -
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  Returns the information about the optimum modes for the specified IDE device.
> -
> -  This function is used by the driver entity to obtain the optimum ATA modes for
> -  a specific device.  The IDE controller driver takes into account the following
> -  while calculating the mode:
> -    - The IdentifyData inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
> -    - The BadModes inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode()
> -
> -  The driver entity is required to call EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
> -  for all the devices that belong to an enumeration group before calling
> -  EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() for any device in the same group.
> -
> -  The IDE controller driver will use controller- and possibly platform-specific
> -  algorithms to arrive at SupportedModes.  The IDE controller may base its
> -  decision on user preferences and other considerations as well. This function
> -  may be called multiple times because the driver entity may renegotiate the mode
> -  with the IDE controller driver using EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode().
> -
> -  The driver entity may collect timing information for various devices in any
> -  order. The driver entity is responsible for making sure that all the dependencies
> -  are satisfied. For example, the SupportedModes information for device A that
> -  was previously returned may become stale after a call to
> -  EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() for device B.
> -
> -  The buffer SupportedModes is allocated by the callee because the caller does
> -  not necessarily know the size of the buffer. The type EFI_ATA_COLLECTIVE_MODE
> -  is defined in a way that allows for future extensibility and can be of variable
> -  length. This memory pool should be deallocated by the caller when it is no
> -  longer necessary.
> -
> -  The IDE controller driver for a Serial ATA (SATA) controller can use this
> -  member function to force a lower speed (first-generation [Gen1] speeds on a
> -  second-generation [Gen2]-capable hardware).  The IDE controller driver can
> -  also allow the driver entity to stay with the speed that has been negotiated
> -  by the physical layer.
> -
> -  @param[in]  This             The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in]  Channel          A zero-based channel number.
> -  @param[in]  Device           A zero-based device number on the Channel.
> -  @param[out] SupportedModes   The optimum modes for the device.
> -
> -  @retval EFI_SUCCESS             SupportedModes was returned.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_INVALID_PARAMETER   Device is invalid.
> -  @retval EFI_INVALID_PARAMETER   SupportedModes is NULL.
> -  @retval EFI_NOT_READY           Modes cannot be calculated due to a lack of
> -                                  data.  This error may happen if
> -                                  EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
> -                                  and EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyData()
> -                                  were not called for at least one drive in the
> -                                  same enumeration group.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitCalculateMode (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  IN UINT8                              Device,
> -  OUT EFI_ATA_COLLECTIVE_MODE           **SupportedModes
> -  )
> -{
> -  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
> -  EFI_IDENTIFY_DATA                 *IdentifyData;
> -  BOOLEAN                           IdentifyValid;
> -  EFI_ATA_COLLECTIVE_MODE           *DisqulifiedModes;
> -  UINT16                            SelectedMode;
> -  EFI_STATUS                        Status;
> -
> -DEBUG ((EFI_D_INFO, "IdeInitCalculateMode()\n"));
> -  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);
> -  ASSERT (SataPrivateData != NULL);
> -
> -  if ((Channel >= This->ChannelCount) || (SupportedModes == NULL) || (Device >= SataPrivateData->DeviceCount)) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  *SupportedModes = AllocateZeroPool (sizeof (EFI_ATA_COLLECTIVE_MODE));
> -  if (*SupportedModes == NULL) {
> -    ASSERT (*SupportedModes != NULL);
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -
> -  IdentifyData = &(SataPrivateData->IdentifyData[Channel * Device]);
> -  IdentifyValid = SataPrivateData->IdentifyValid[Channel * Device];
> -  DisqulifiedModes = &(SataPrivateData->DisqulifiedModes[Channel * Device]);
> -
> -  //
> -  // Make sure we've got the valid identify data of the device from SubmitData()
> -  //
> -  if (!IdentifyValid) {
> -    FreePool (*SupportedModes);
> -    return EFI_NOT_READY;
> -  }
> -
> -  Status = CalculateBestPioMode (
> -            IdentifyData,
> -            (DisqulifiedModes->PioMode.Valid ? ((UINT16 *) &(DisqulifiedModes->PioMode.Mode)) : NULL),
> -            &SelectedMode
> -            );
> -  if (!EFI_ERROR (Status)) {
> -    (*SupportedModes)->PioMode.Valid = TRUE;
> -    (*SupportedModes)->PioMode.Mode = SelectedMode;
> -
> -  } else {
> -    (*SupportedModes)->PioMode.Valid = FALSE;
> -  }
> -  DEBUG ((EFI_D_INFO, "IdeInitCalculateMode: PioMode = %x\n", (*SupportedModes)->PioMode.Mode));
> -
> -  Status = CalculateBestUdmaMode (
> -            IdentifyData,
> -            (DisqulifiedModes->UdmaMode.Valid ? ((UINT16 *) &(DisqulifiedModes->UdmaMode.Mode)) : NULL),
> -            &SelectedMode
> -            );
> -
> -  if (!EFI_ERROR (Status)) {
> -    (*SupportedModes)->UdmaMode.Valid = TRUE;
> -    (*SupportedModes)->UdmaMode.Mode  = SelectedMode;
> -
> -  } else {
> -    (*SupportedModes)->UdmaMode.Valid = FALSE;
> -  }
> -  DEBUG ((EFI_D_INFO, "IdeInitCalculateMode: UdmaMode = %x\n", (*SupportedModes)->UdmaMode.Mode));
> -
> -  //
> -  // The modes other than PIO and UDMA are not supported
> -  //
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  Commands the IDE controller driver to program the IDE controller hardware
> -  so that the specified device can operate at the specified mode.
> -
> -  This function is used by the driver entity to instruct the IDE controller
> -  driver to program the IDE controller hardware to the specified modes. This
> -  function can be called only once for a particular device. For a Serial ATA
> -  (SATA) Advanced Host Controller Interface (AHCI) controller, no controller-
> -  specific programming may be required.
> -
> -  @param[in] This      Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in] Channel   Zero-based channel number.
> -  @param[in] Device    Zero-based device number on the Channel.
> -  @param[in] Modes     The modes to set.
> -
> -  @retval EFI_SUCCESS             The command was accepted without any errors.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_INVALID_PARAMETER   Device is invalid.
> -  @retval EFI_NOT_READY           Modes cannot be set at this time due to lack of data.
> -  @retval EFI_DEVICE_ERROR        Modes cannot be set due to hardware failure.
> -                                  The driver entity should not use this device.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitSetTiming (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  IN UINT8                              Device,
> -  IN EFI_ATA_COLLECTIVE_MODE            *Modes
> -  )
> -{
> -  return EFI_SUCCESS;
> -}
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.h b/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.h
> deleted file mode 100644
> index cb9b84be2d1b..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.h
> +++ /dev/null
> @@ -1,555 +0,0 @@
> -/** @file
> -  Header file for Sata Controller driver.
> -
> -  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
> -  Copyright (c) 2014 - 2016, AMD 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 _SATA_CONTROLLER_H_
> -#define _SATA_CONTROLLER_H_
> -
> -#include <Uefi.h>
> -#include <Protocol/ComponentName.h>
> -#include <Protocol/DriverBinding.h>
> -#include <Protocol/PciIo.h>
> -#include <Protocol/IdeControllerInit.h>
> -#include <Library/UefiDriverEntryPoint.h>
> -#include <Library/DebugLib.h>
> -#include <Library/UefiLib.h>
> -#include <Library/BaseLib.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/UefiBootServicesTableLib.h>
> -#include <IndustryStandard/Pci.h>
> -
> -//
> -// Global Variables definitions
> -//
> -extern EFI_DRIVER_BINDING_PROTOCOL  gSataControllerDriverBinding;
> -extern EFI_COMPONENT_NAME_PROTOCOL  gSataControllerComponentName;
> -extern EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2;
> -
> -#define AHCI_BAR_INDEX 0x05
> -#define R_AHCI_CAP 0x0
> -#define   B_AHCI_CAP_NPS (BIT4 | BIT3 | BIT2 | BIT1 | BIT0) // Number of Ports
> -#define   B_AHCI_CAP_SPM BIT17 // Supports Port Multiplier
> -
> -///
> -/// AHCI each channel can have up to 1 device
> -///
> -#define AHCI_MAX_DEVICES 0x01
> -
> -///
> -/// AHCI each channel can have 15 devices in the presence of a multiplier
> -///
> -#define AHCI_MULTI_MAX_DEVICES 0x0F
> -
> -///
> -/// IDE supports 2 channel max
> -///
> -#define IDE_MAX_CHANNEL 0x02
> -
> -///
> -/// IDE supports 2 devices max
> -///
> -#define IDE_MAX_DEVICES 0x02
> -
> -#define SATA_ENUMER_ALL FALSE
> -
> -//
> -// Sata Controller driver private data structure
> -//
> -
> -#define SATA_CONTROLLER_SIGNATURE SIGNATURE_32('S','A','T','A')
> -
> -typedef struct _EFI_SATA_CONTROLLER_PRIVATE_DATA {
> -  //
> -  // Standard signature used to identify Sata Controller private data
> -  //
> -  UINT32                            Signature;
> -
> -  //
> -  // Protocol instance of IDE_CONTROLLER_INIT produced by this driver
> -  //
> -  EFI_IDE_CONTROLLER_INIT_PROTOCOL  IdeInit;
> -
> -  //
> -  // Copy of protocol pointers used by this driver
> -  //
> -  EFI_PCI_IO_PROTOCOL               *PciIo;
> -
> -  //
> -  // The number of devices that are supported by this channel
> -  //
> -  UINT8                             DeviceCount;
> -
> -  //
> -  // The highest disqulified mode for each attached device,
> -  // From ATA/ATAPI spec, if a mode is not supported,
> -  // the modes higher than it is also not supported
> -  //
> -  EFI_ATA_COLLECTIVE_MODE           *DisqulifiedModes;
> -
> -  //
> -  // A copy of EFI_IDENTIFY_DATA data for each attached SATA device and its flag
> -  //
> -  EFI_IDENTIFY_DATA                 *IdentifyData;
> -  BOOLEAN                           *IdentifyValid;
> -} EFI_SATA_CONTROLLER_PRIVATE_DATA;
> -
> -#define SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS(a) CR(a, EFI_SATA_CONTROLLER_PRIVATE_DATA, IdeInit, SATA_CONTROLLER_SIGNATURE)
> -
> -/**
> -  Initialize the Sata controller hardware.
> -
> -  @retval EFI_SUCCESS   This driver is removed from this device.
> -  @retval other         Some error occurs when removing this driver from this device.
> -**/
> -EFI_STATUS
> -InitializeSataController (
> -  VOID
> -  );
> -
> -//
> -// Driver binding functions declaration
> -//
> -/**
> -  Supported function of Driver Binding protocol for this driver.
> -  Test to see if this driver supports ControllerHandle.
> -
> -  @param This                   Protocol instance pointer.
> -  @param Controller             Handle of device to test.
> -  @param RemainingDevicePath    A pointer to the device path. Should be ignored by
> -                                device driver.
> -
> -  @retval EFI_SUCCESS           This driver supports this device.
> -  @retval EFI_ALREADY_STARTED   This driver is already running on this device.
> -  @retval other                 This driver does not support this device.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerSupported (
> -  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
> -  IN EFI_HANDLE                     Controller,
> -  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
> -  )
> -;
> -
> -/**
> -  This routine is called right after the .Supported() called and
> -  Start this driver on ControllerHandle.
> -
> -  @param This                   Protocol instance pointer.
> -  @param Controller             Handle of device to bind driver to.
> -  @param RemainingDevicePath    A pointer to the device path. Should be ignored by
> -                                device driver.
> -
> -  @retval EFI_SUCCESS           This driver is added to this device.
> -  @retval EFI_ALREADY_STARTED   This driver is already running on this device.
> -  @retval other                 Some error occurs when binding this driver to this device.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerStart (
> -  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
> -  IN EFI_HANDLE                     Controller,
> -  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
> -  )
> -;
> -
> -/**
> -  Stop this driver on ControllerHandle.
> -
> -  @param This               Protocol instance pointer.
> -  @param Controller         Handle of device to stop driver on.
> -  @param NumberOfChildren   Not used.
> -  @param ChildHandleBuffer  Not used.
> -
> -  @retval EFI_SUCCESS   This driver is removed from this device.
> -  @retval other         Some error occurs when removing this driver from this device.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerStop (
> -  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
> -  IN EFI_HANDLE                     Controller,
> -  IN UINTN                          NumberOfChildren,
> -  IN EFI_HANDLE                     *ChildHandleBuffer
> -  )
> -;
> -
> -//
> -// IDE controller init functions declaration
> -//
> -/**
> -  Returns the information about the specified IDE channel.
> -
> -  This function can be used to obtain information about a particular IDE channel.
> -  The driver entity uses this information during the enumeration process.
> -
> -  If Enabled is set to FALSE, the driver entity will not scan the channel. Note
> -  that it will not prevent an operating system driver from scanning the channel.
> -
> -  For most of today's controllers, MaxDevices will either be 1 or 2. For SATA
> -  controllers, this value will always be 1. SATA configurations can contain SATA
> -  port multipliers. SATA port multipliers behave like SATA bridges and can support
> -  up to 16 devices on the other side. If a SATA port out of the IDE controller
> -  is connected to a port multiplier, MaxDevices will be set to the number of SATA
> -  devices that the port multiplier supports. Because today's port multipliers
> -  support up to fifteen SATA devices, this number can be as large as fifteen. The IDE
> -  bus driver is required to scan for the presence of port multipliers behind an SATA
> -  controller and enumerate up to MaxDevices number of devices behind the port
> -  multiplier.
> -
> -  In this context, the devices behind a port multiplier constitute a channel.
> -
> -  @param[in]  This         The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in]  Channel      Zero-based channel number.
> -  @param[out] Enabled      TRUE if this channel is enabled.  Disabled channels
> -                           are not scanned to see if any devices are present.
> -  @param[out] MaxDevices   The maximum number of IDE devices that the bus driver
> -                           can expect on this channel.  For the ATA/ATAPI
> -                           specification, version 6, this number will either be
> -                           one or two. For Serial ATA (SATA) configurations with a
> -                           port multiplier, this number can be as large as fifteen.
> -
> -  @retval EFI_SUCCESS             Information was returned without any errors.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitGetChannelInfo (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  OUT BOOLEAN                           *Enabled,
> -  OUT UINT8                             *MaxDevices
> -  )
> -;
> -
> -/**
> -  The notifications from the driver entity that it is about to enter a certain
> -  phase of the IDE channel enumeration process.
> -
> -  This function can be used to notify the IDE controller driver to perform
> -  specific actions, including any chipset-specific initialization, so that the
> -  chipset is ready to enter the next phase. Seven notification points are defined
> -  at this time.
> -
> -  More synchronization points may be added as required in the future.
> -
> -  @param[in] This      The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in] Phase     The phase during enumeration.
> -  @param[in] Channel   Zero-based channel number.
> -
> -  @retval EFI_SUCCESS             The notification was accepted without any errors.
> -  @retval EFI_UNSUPPORTED         Phase is not supported.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_NOT_READY           This phase cannot be entered at this time; for
> -                                  example, an attempt was made to enter a Phase
> -                                  without having entered one or more previous
> -                                  Phase.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitNotifyPhase (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN EFI_IDE_CONTROLLER_ENUM_PHASE      Phase,
> -  IN UINT8                              Channel
> -  )
> -;
> -
> -/**
> -  Submits the device information to the IDE controller driver.
> -
> -  This function is used by the driver entity to pass detailed information about
> -  a particular device to the IDE controller driver. The driver entity obtains
> -  this information by issuing an ATA or ATAPI IDENTIFY_DEVICE command. IdentifyData
> -  is the pointer to the response data buffer. The IdentifyData buffer is owned
> -  by the driver entity, and the IDE controller driver must make a local copy
> -  of the entire buffer or parts of the buffer as needed. The original IdentifyData
> -  buffer pointer may not be valid when
> -
> -    - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() or
> -    - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() is called at a later point.
> -
> -  The IDE controller driver may consult various fields of EFI_IDENTIFY_DATA to
> -  compute the optimum mode for the device. These fields are not limited to the
> -  timing information. For example, an implementation of the IDE controller driver
> -  may examine the vendor and type/mode field to match known bad drives.
> -
> -  The driver entity may submit drive information in any order, as long as it
> -  submits information for all the devices belonging to the enumeration group
> -  before EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() is called for any device
> -  in that enumeration group. If a device is absent, EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
> -  should be called with IdentifyData set to NULL.  The IDE controller driver may
> -  not have any other mechanism to know whether a device is present or not. Therefore,
> -  setting IdentifyData to NULL does not constitute an error condition.
> -  EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() can be called only once for a
> -  given (Channel, Device) pair.
> -
> -  @param[in] This           A pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in] Channel        Zero-based channel number.
> -  @param[in] Device         Zero-based device number on the Channel.
> -  @param[in] IdentifyData   The device's response to the ATA IDENTIFY_DEVICE command.
> -
> -  @retval EFI_SUCCESS             The information was accepted without any errors.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_INVALID_PARAMETER   Device is invalid.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitSubmitData (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  IN UINT8                              Device,
> -  IN EFI_IDENTIFY_DATA                  *IdentifyData
> -  )
> -;
> -
> -/**
> -  Disqualifies specific modes for an IDE device.
> -
> -  This function allows the driver entity or other drivers (such as platform
> -  drivers) to reject certain timing modes and request the IDE controller driver
> -  to recalculate modes. This function allows the driver entity and the IDE
> -  controller driver to negotiate the timings on a per-device basis. This function
> -  is useful in the case of drives that lie about their capabilities. An example
> -  is when the IDE device fails to accept the timing modes that are calculated
> -  by the IDE controller driver based on the response to the Identify Drive command.
> -
> -  If the driver entity does not want to limit the ATA timing modes and leave that
> -  decision to the IDE controller driver, it can either not call this function for
> -  the given device or call this function and set the Valid flag to FALSE for all
> -  modes that are listed in EFI_ATA_COLLECTIVE_MODE.
> -
> -  The driver entity may disqualify modes for a device in any order and any number
> -  of times.
> -
> -  This function can be called multiple times to invalidate multiple modes of the
> -  same type (e.g., Programmed Input/Output [PIO] modes 3 and 4). See the ATA/ATAPI
> -  specification for more information on PIO modes.
> -
> -  For Serial ATA (SATA) controllers, this member function can be used to disqualify
> -  a higher transfer rate mode on a given channel. For example, a platform driver
> -  may inform the IDE controller driver to not use second-generation (Gen2) speeds
> -  for a certain SATA drive.
> -
> -  @param[in] This       The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in] Channel    The zero-based channel number.
> -  @param[in] Device     The zero-based device number on the Channel.
> -  @param[in] BadModes   The modes that the device does not support and that
> -                        should be disqualified.
> -
> -  @retval EFI_SUCCESS             The modes were accepted without any errors.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_INVALID_PARAMETER   Device is invalid.
> -  @retval EFI_INVALID_PARAMETER   IdentifyData is NULL.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitDisqualifyMode (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  IN UINT8                              Device,
> -  IN EFI_ATA_COLLECTIVE_MODE            *BadModes
> -  )
> -;
> -
> -/**
> -  Returns the information about the optimum modes for the specified IDE device.
> -
> -  This function is used by the driver entity to obtain the optimum ATA modes for
> -  a specific device.  The IDE controller driver takes into account the following
> -  while calculating the mode:
> -    - The IdentifyData inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
> -    - The BadModes inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode()
> -
> -  The driver entity is required to call EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
> -  for all the devices that belong to an enumeration group before calling
> -  EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() for any device in the same group.
> -
> -  The IDE controller driver will use controller- and possibly platform-specific
> -  algorithms to arrive at SupportedModes.  The IDE controller may base its
> -  decision on user preferences and other considerations as well. This function
> -  may be called multiple times because the driver entity may renegotiate the mode
> -  with the IDE controller driver using EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode().
> -
> -  The driver entity may collect timing information for various devices in any
> -  order. The driver entity is responsible for making sure that all the dependencies
> -  are satisfied. For example, the SupportedModes information for device A that
> -  was previously returned may become stale after a call to
> -  EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() for device B.
> -
> -  The buffer SupportedModes is allocated by the callee because the caller does
> -  not necessarily know the size of the buffer. The type EFI_ATA_COLLECTIVE_MODE
> -  is defined in a way that allows for future extensibility and can be of variable
> -  length. This memory pool should be deallocated by the caller when it is no
> -  longer necessary.
> -
> -  The IDE controller driver for a Serial ATA (SATA) controller can use this
> -  member function to force a lower speed (first-generation [Gen1] speeds on a
> -  second-generation [Gen2]-capable hardware).  The IDE controller driver can
> -  also allow the driver entity to stay with the speed that has been negotiated
> -  by the physical layer.
> -
> -  @param[in]  This             The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in]  Channel          A zero-based channel number.
> -  @param[in]  Device           A zero-based device number on the Channel.
> -  @param[out] SupportedModes   The optimum modes for the device.
> -
> -  @retval EFI_SUCCESS             SupportedModes was returned.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_INVALID_PARAMETER   Device is invalid.
> -  @retval EFI_INVALID_PARAMETER   SupportedModes is NULL.
> -  @retval EFI_NOT_READY           Modes cannot be calculated due to a lack of
> -                                  data.  This error may happen if
> -                                  EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
> -                                  and EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyData()
> -                                  were not called for at least one drive in the
> -                                  same enumeration group.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitCalculateMode (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  IN UINT8                              Device,
> -  OUT EFI_ATA_COLLECTIVE_MODE           **SupportedModes
> -  )
> -;
> -
> -/**
> -  Commands the IDE controller driver to program the IDE controller hardware
> -  so that the specified device can operate at the specified mode.
> -
> -  This function is used by the driver entity to instruct the IDE controller
> -  driver to program the IDE controller hardware to the specified modes. This
> -  function can be called only once for a particular device. For a Serial ATA
> -  (SATA) Advanced Host Controller Interface (AHCI) controller, no controller-
> -  specific programming may be required.
> -
> -  @param[in] This      Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
> -  @param[in] Channel   Zero-based channel number.
> -  @param[in] Device    Zero-based device number on the Channel.
> -  @param[in] Modes     The modes to set.
> -
> -  @retval EFI_SUCCESS             The command was accepted without any errors.
> -  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
> -  @retval EFI_INVALID_PARAMETER   Device is invalid.
> -  @retval EFI_NOT_READY           Modes cannot be set at this time due to lack of data.
> -  @retval EFI_DEVICE_ERROR        Modes cannot be set due to hardware failure.
> -                                  The driver entity should not use this device.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -IdeInitSetTiming (
> -  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
> -  IN UINT8                              Channel,
> -  IN UINT8                              Device,
> -  IN EFI_ATA_COLLECTIVE_MODE            *Modes
> -  )
> -;
> -
> -//
> -// Forward reference declaration
> -//
> -/**
> -  Retrieves a Unicode string that is the user readable name of the UEFI Driver.
> -
> -  @param This           A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
> -  @param Language       A pointer to a three character ISO 639-2 language identifier.
> -                        This is the language of the driver name that that the caller
> -                        is requesting, and it must match one of the languages specified
> -                        in SupportedLanguages.  The number of languages supported by a
> -                        driver is up to the driver writer.
> -  @param DriverName     A pointer to the Unicode string to return.  This Unicode string
> -                        is the name of the driver specified by This in the language
> -                        specified by Language.
> -
> -  @retval EFI_SUCCESS           The Unicode string for the Driver specified by This
> -                                and the language specified by Language was returned
> -                                in DriverName.
> -  @retval EFI_INVALID_PARAMETER Language is NULL.
> -  @retval EFI_INVALID_PARAMETER DriverName is NULL.
> -  @retval EFI_UNSUPPORTED       The driver specified by This does not support the
> -                                language specified by Language.
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerComponentNameGetDriverName (
> -  IN EFI_COMPONENT_NAME_PROTOCOL    *This,
> -  IN CHAR8                          *Language,
> -  OUT CHAR16                        **DriverName
> -  )
> -;
> -
> -/**
> -  Retrieves a Unicode string that is the user readable name of the controller
> -  that is being managed by an UEFI Driver.
> -
> -  @param This                   A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
> -  @param ControllerHandle       The handle of a controller that the driver specified by
> -                                This is managing.  This handle specifies the controller
> -                                whose name is to be returned.
> -  @param OPTIONAL   ChildHandle The handle of the child controller to retrieve the name
> -                                of.  This is an optional parameter that may be NULL.  It
> -                                will be NULL for device drivers.  It will also be NULL
> -                                for a bus drivers that wish to retrieve the name of the
> -                                bus controller.  It will not be NULL for a bus driver
> -                                that wishes to retrieve the name of a child controller.
> -  @param Language               A pointer to a three character ISO 639-2 language
> -                                identifier.  This is the language of the controller name
> -                                that that the caller is requesting, and it must match one
> -                                of the languages specified in SupportedLanguages.  The
> -                                number of languages supported by a driver is up to the
> -                                driver writer.
> -  @param ControllerName         A pointer to the Unicode string to return.  This Unicode
> -                                string is the name of the controller specified by
> -                                ControllerHandle and ChildHandle in the language
> -                                specified by Language from the point of view of the
> -                                driver specified by This.
> -
> -  @retval EFI_SUCCESS           The Unicode string for the user readable name in the
> -                                language specified by Language for the driver
> -                                specified by This was returned in DriverName.
> -  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
> -  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
> -                                EFI_HANDLE.
> -  @retval EFI_INVALID_PARAMETER Language is NULL.
> -  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
> -  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
> -                                managing the controller specified by
> -                                ControllerHandle and ChildHandle.
> -  @retval EFI_UNSUPPORTED       The driver specified by This does not support the
> -                                language specified by Language.
> -**/
> -EFI_STATUS
> -EFIAPI
> -SataControllerComponentNameGetControllerName (
> -  IN EFI_COMPONENT_NAME_PROTOCOL    *This,
> -  IN EFI_HANDLE                     ControllerHandle,
> -  IN EFI_HANDLE                     ChildHandle OPTIONAL,
> -  IN CHAR8                          *Language,
> -  OUT CHAR16                        **ControllerName
> -  )
> -;
> -
> -#endif
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf b/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf
> deleted file mode 100644
> index 383ef90dc08c..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf
> +++ /dev/null
> @@ -1,85 +0,0 @@
> -## @file
> -#
> -#  Component description file for the Sata Controller driver.
> -#
> -#  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
> -#  Copyright (c) 2014 - 2016, AMD 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.
> -#
> -##
> -
> -[Defines]
> -  INF_VERSION                    = 0x00010005
> -  BASE_NAME                      = SataController
> -  FILE_GUID                      = 1c6d1ed1-22ec-4b16-9179-e5cdbf7ddf8d
> -  MODULE_TYPE                    = UEFI_DRIVER
> -  VERSION_STRING                 = 1.0
> -  ENTRY_POINT                    = InitializeSataControllerDriver
> -
> -#
> -# The following information is for reference only and not required by the build tools.
> -#
> -#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
> -#
> -
> -[Sources]
> -  ComponentName.c
> -  SataController.c
> -  SataController.h
> -  PciEmulation.c
> -  PciEmulation.h
> -  PciRootBridgeIo.c
> -  SataRegisters.h
> -  InitController.c
> -
> -[Packages]
> -  ArmPkg/ArmPkg.dec
> -  ArmPlatformPkg/ArmPlatformPkg.dec
> -  MdePkg/MdePkg.dec
> -  MdeModulePkg/MdeModulePkg.dec
> -  IntelFrameworkPkg/IntelFrameworkPkg.dec
> -  EmbeddedPkg/EmbeddedPkg.dec
> -  AmdModulePkg/AmdModulePkg.dec
> -  OpenPlatformPkg/Platforms/AMD/Styx/AmdStyx.dec
> -
> -[LibraryClasses]
> -  UefiDriverEntryPoint
> -  DebugLib
> -  UefiLib
> -  BaseLib
> -  BaseMemoryLib
> -  MemoryAllocationLib
> -  UefiBootServicesTableLib
> -  IoLib
> -  AmdSataInit
> -
> -[Protocols]
> -  gEfiPciIoProtocolGuid
> -  gEfiIdeControllerInitProtocolGuid
> -
> -[Pcd]
> -  gAmdModulePkgTokenSpaceGuid.PcdSataSerdesBase
> -  gAmdModulePkgTokenSpaceGuid.PcdSataSerdesOffset
> -  gAmdModulePkgTokenSpaceGuid.PcdSataNumChPerSerdes
> -
> -  gAmdStyxTokenSpaceGuid.PcdSataCtrlAxiSlvPort
> -  gAmdStyxTokenSpaceGuid.PcdSataPortCount
> -  gAmdStyxTokenSpaceGuid.PcdSataPi
> -  gAmdStyxTokenSpaceGuid.PcdSataPortMode
> -  gAmdStyxTokenSpaceGuid.PcdSataSmpsSupport
> -  gAmdStyxTokenSpaceGuid.PcdSataSssSupport
> -  gAmdStyxTokenSpaceGuid.PcdSataPortCpd
> -  gAmdStyxTokenSpaceGuid.PcdSataPortMpsp
> -  gAmdStyxTokenSpaceGuid.PcdSata1CtrlAxiSlvPort
> -  gAmdStyxTokenSpaceGuid.PcdSata1PortCount
> -
> -[Depex]
> -  TRUE
> -
> diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataRegisters.h b/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataRegisters.h
> deleted file mode 100644
> index ff78f4ac3c67..000000000000
> --- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataRegisters.h
> +++ /dev/null
> @@ -1,180 +0,0 @@
> -/** @file
> -  Header file for AHCI mode of ATA host controller.
> -
> -  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
> -  Copyright (c) 2014 - 2016, AMD 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 __SATA_REGISTERS_H__
> -#define __SATA_REGISTERS_H__
> -
> -#define EFI_AHCI_BAR_INDEX                     0x05
> -
> -#define EFI_AHCI_CAPABILITY_OFFSET             0x0000
> -#define   EFI_AHCI_CAP_SSS                     BIT27
> -#define   EFI_AHCI_CAP_SMPS                    BIT28
> -#define   EFI_AHCI_CAP_S64A                    BIT31
> -#define EFI_AHCI_GHC_OFFSET                    0x0004
> -#define   EFI_AHCI_GHC_RESET                   BIT0
> -#define   EFI_AHCI_GHC_IE                      BIT1
> -#define   EFI_AHCI_GHC_ENABLE                  BIT31
> -#define EFI_AHCI_IS_OFFSET                     0x0008
> -#define EFI_AHCI_PI_OFFSET                     0x000C
> -
> -#define EFI_AHCI_MAX_PORTS                     32
> -
> -//
> -// Refer SATA1.0a spec section 5.2, the Phy detection time should be less than 10ms.
> -//
> -#define  EFI_AHCI_BUS_PHY_DETECT_TIMEOUT       10
> -//
> -// Refer SATA1.0a spec, the FIS enable time should be less than 500ms.
> -//
> -#define  EFI_AHCI_PORT_CMD_FR_CLEAR_TIMEOUT    EFI_TIMER_PERIOD_MILLISECONDS(500)
> -//
> -// Refer SATA1.0a spec, the bus reset time should be less than 1s.
> -//
> -#define  EFI_AHCI_BUS_RESET_TIMEOUT            EFI_TIMER_PERIOD_SECONDS(1)
> -
> -#define  EFI_AHCI_ATAPI_DEVICE_SIG             0xEB140000
> -#define  EFI_AHCI_ATA_DEVICE_SIG               0x00000000
> -#define  EFI_AHCI_PORT_MULTIPLIER_SIG          0x96690000
> -#define  EFI_AHCI_ATAPI_SIG_MASK               0xFFFF0000
> -
> -//
> -// Each PRDT entry can point to a memory block up to 4M byte
> -//
> -#define EFI_AHCI_MAX_DATA_PER_PRDT             0x400000
> -
> -#define EFI_AHCI_FIS_REGISTER_H2D              0x27      //Register FIS - Host to Device
> -#define   EFI_AHCI_FIS_REGISTER_H2D_LENGTH     20
> -#define EFI_AHCI_FIS_REGISTER_D2H              0x34      //Register FIS - Device to Host
> -#define   EFI_AHCI_FIS_REGISTER_D2H_LENGTH     20
> -#define EFI_AHCI_FIS_DMA_ACTIVATE              0x39      //DMA Activate FIS - Device to Host
> -#define   EFI_AHCI_FIS_DMA_ACTIVATE_LENGTH     4
> -#define EFI_AHCI_FIS_DMA_SETUP                 0x41      //DMA Setup FIS - Bi-directional
> -#define   EFI_AHCI_FIS_DMA_SETUP_LENGTH        28
> -#define EFI_AHCI_FIS_DATA                      0x46      //Data FIS - Bi-directional
> -#define EFI_AHCI_FIS_BIST                      0x58      //BIST Activate FIS - Bi-directional
> -#define   EFI_AHCI_FIS_BIST_LENGTH             12
> -#define EFI_AHCI_FIS_PIO_SETUP                 0x5F      //PIO Setup FIS - Device to Host
> -#define   EFI_AHCI_FIS_PIO_SETUP_LENGTH        20
> -#define EFI_AHCI_FIS_SET_DEVICE                0xA1      //Set Device Bits FIS - Device to Host
> -#define   EFI_AHCI_FIS_SET_DEVICE_LENGTH       8
> -
> -#define EFI_AHCI_D2H_FIS_OFFSET                0x40
> -#define EFI_AHCI_DMA_FIS_OFFSET                0x00
> -#define EFI_AHCI_PIO_FIS_OFFSET                0x20
> -#define EFI_AHCI_SDB_FIS_OFFSET                0x58
> -#define EFI_AHCI_FIS_TYPE_MASK                 0xFF
> -#define EFI_AHCI_U_FIS_OFFSET                  0x60
> -
> -//
> -// Port register
> -//
> -#define EFI_AHCI_PORT_START                    0x0100
> -#define EFI_AHCI_PORT_REG_WIDTH                0x0080
> -#define EFI_AHCI_PORT_CLB                      0x0000
> -#define EFI_AHCI_PORT_CLBU                     0x0004
> -#define EFI_AHCI_PORT_FB                       0x0008
> -#define EFI_AHCI_PORT_FBU                      0x000C
> -#define EFI_AHCI_PORT_IS                       0x0010
> -#define   EFI_AHCI_PORT_IS_DHRS                BIT0
> -#define   EFI_AHCI_PORT_IS_PSS                 BIT1
> -#define   EFI_AHCI_PORT_IS_SSS                 BIT2
> -#define   EFI_AHCI_PORT_IS_SDBS                BIT3
> -#define   EFI_AHCI_PORT_IS_UFS                 BIT4
> -#define   EFI_AHCI_PORT_IS_DPS                 BIT5
> -#define   EFI_AHCI_PORT_IS_PCS                 BIT6
> -#define   EFI_AHCI_PORT_IS_DIS                 BIT7
> -#define   EFI_AHCI_PORT_IS_PRCS                BIT22
> -#define   EFI_AHCI_PORT_IS_IPMS                BIT23
> -#define   EFI_AHCI_PORT_IS_OFS                 BIT24
> -#define   EFI_AHCI_PORT_IS_INFS                BIT26
> -#define   EFI_AHCI_PORT_IS_IFS                 BIT27
> -#define   EFI_AHCI_PORT_IS_HBDS                BIT28
> -#define   EFI_AHCI_PORT_IS_HBFS                BIT29
> -#define   EFI_AHCI_PORT_IS_TFES                BIT30
> -#define   EFI_AHCI_PORT_IS_CPDS                BIT31
> -#define   EFI_AHCI_PORT_IS_CLEAR               0xFFFFFFFF
> -#define   EFI_AHCI_PORT_IS_FIS_CLEAR           0x0000000F
> -
> -#define EFI_AHCI_PORT_OFFSET(PortNum) \
> -        (EFI_AHCI_PORT_START + ((PortNum) * EFI_AHCI_PORT_REG_WIDTH))
> -
> -#define EFI_AHCI_PORT_IE                       0x0014
> -#define EFI_AHCI_PORT_CMD                      0x0018
> -#define   EFI_AHCI_PORT_CMD_ST_MASK            0xFFFFFFFE
> -#define   EFI_AHCI_PORT_CMD_ST                 BIT0
> -#define   EFI_AHCI_PORT_CMD_SUD                BIT1
> -#define   EFI_AHCI_PORT_CMD_POD                BIT2
> -#define   EFI_AHCI_PORT_CMD_CLO                BIT3
> -#define   EFI_AHCI_PORT_CMD_CR                 BIT15
> -#define   EFI_AHCI_PORT_CMD_FRE                BIT4
> -#define   EFI_AHCI_PORT_CMD_FR                 BIT14
> -#define   EFI_AHCI_PORT_CMD_MASK               ~(EFI_AHCI_PORT_CMD_ST | EFI_AHCI_PORT_CMD_FRE | EFI_AHCI_PORT_CMD_COL)
> -#define   EFI_AHCI_PORT_CMD_PMA                BIT17
> -#define   EFI_AHCI_PORT_CMD_HPCP               BIT18
> -#define   EFI_AHCI_PORT_CMD_MPSP               BIT19
> -#define   EFI_AHCI_PORT_CMD_CPD                BIT20
> -#define   EFI_AHCI_PORT_CMD_ESP                BIT21
> -#define   EFI_AHCI_PORT_CMD_ATAPI              BIT24
> -#define   EFI_AHCI_PORT_CMD_DLAE               BIT25
> -#define   EFI_AHCI_PORT_CMD_ALPE               BIT26
> -#define   EFI_AHCI_PORT_CMD_ASP                BIT27
> -#define   EFI_AHCI_PORT_CMD_ICC_MASK           (BIT28 | BIT29 | BIT30 | BIT31)
> -#define   EFI_AHCI_PORT_CMD_ACTIVE             (1 << 28 )
> -#define EFI_AHCI_PORT_TFD                      0x0020
> -#define   EFI_AHCI_PORT_TFD_MASK               (BIT7 | BIT3 | BIT0)
> -#define   EFI_AHCI_PORT_TFD_BSY                BIT7
> -#define   EFI_AHCI_PORT_TFD_DRQ                BIT3
> -#define   EFI_AHCI_PORT_TFD_ERR                BIT0
> -#define   EFI_AHCI_PORT_TFD_ERR_MASK           0x00FF00
> -#define EFI_AHCI_PORT_SIG                      0x0024
> -#define EFI_AHCI_PORT_SSTS                     0x0028
> -#define   EFI_AHCI_PORT_SSTS_DET_MASK          0x000F
> -#define   EFI_AHCI_PORT_SSTS_DET               0x0001
> -#define   EFI_AHCI_PORT_SSTS_DET_PCE           0x0003
> -#define   EFI_AHCI_PORT_SSTS_SPD_MASK          0x00F0
> -#define EFI_AHCI_PORT_SCTL                     0x002C
> -#define   EFI_AHCI_PORT_SCTL_DET_MASK          0x000F
> -#define   EFI_AHCI_PORT_SCTL_MASK              (~EFI_AHCI_PORT_SCTL_DET_MASK)
> -#define   EFI_AHCI_PORT_SCTL_DET_INIT          0x0001
> -#define   EFI_AHCI_PORT_SCTL_DET_PHYCOMM       0x0003
> -#define   EFI_AHCI_PORT_SCTL_SPD_MASK          0x00F0
> -#define   EFI_AHCI_PORT_SCTL_IPM_MASK          0x0F00
> -#define   EFI_AHCI_PORT_SCTL_IPM_INIT          0x0300
> -#define   EFI_AHCI_PORT_SCTL_IPM_PSD           0x0100
> -#define   EFI_AHCI_PORT_SCTL_IPM_SSD           0x0200
> -#define EFI_AHCI_PORT_SERR                     0x0030
> -#define   EFI_AHCI_PORT_SERR_RDIE              BIT0
> -#define   EFI_AHCI_PORT_SERR_RCE               BIT1
> -#define   EFI_AHCI_PORT_SERR_TDIE              BIT8
> -#define   EFI_AHCI_PORT_SERR_PCDIE             BIT9
> -#define   EFI_AHCI_PORT_SERR_PE                BIT10
> -#define   EFI_AHCI_PORT_SERR_IE                BIT11
> -#define   EFI_AHCI_PORT_SERR_PRC               BIT16
> -#define   EFI_AHCI_PORT_SERR_PIE               BIT17
> -#define   EFI_AHCI_PORT_SERR_CW                BIT18
> -#define   EFI_AHCI_PORT_SERR_BDE               BIT19
> -#define   EFI_AHCI_PORT_SERR_DE                BIT20
> -#define   EFI_AHCI_PORT_SERR_CRCE              BIT21
> -#define   EFI_AHCI_PORT_SERR_HE                BIT22
> -#define   EFI_AHCI_PORT_SERR_LSE               BIT23
> -#define   EFI_AHCI_PORT_SERR_TSTE              BIT24
> -#define   EFI_AHCI_PORT_SERR_UFT               BIT25
> -#define   EFI_AHCI_PORT_SERR_EX                BIT26
> -#define   EFI_AHCI_PORT_ERR_CLEAR              0xFFFFFFFF
> -#define EFI_AHCI_PORT_SACT                     0x0034
> -#define EFI_AHCI_PORT_CI                       0x0038
> -#define EFI_AHCI_PORT_SNTF                     0x003C
> -
> -#endif
> -- 
> 2.7.4
>
diff mbox

Patch

diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/ComponentName.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/ComponentName.c
deleted file mode 100644
index 943daac37a73..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/ComponentName.c
+++ /dev/null
@@ -1,178 +0,0 @@ 
-/** @file
-  UEFI Component Name(2) protocol implementation for Sata Controller driver.
-
-  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
-  Copyright (c) 2014 - 2016, AMD 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 "SataController.h"
-
-//
-/// EFI Component Name Protocol
-///
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gSataControllerComponentName = {
-  SataControllerComponentNameGetDriverName,
-  SataControllerComponentNameGetControllerName,
-  "eng"
-};
-
-//
-/// EFI Component Name 2 Protocol
-///
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2 = {
-  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SataControllerComponentNameGetDriverName,
-  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SataControllerComponentNameGetControllerName,
-  "en"
-};
-
-//
-/// Driver Name Strings
-///
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerDriverNameTable[] = {
-  {
-    "eng;en",
-    (CHAR16 *)L"Sata Controller Init Driver"
-  },
-  {
-    NULL,
-    NULL
-  }
-};
-
-///
-/// Controller Name Strings
-///
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerControllerNameTable[] = {
-  {
-    "eng;en",
-    (CHAR16 *)L"Sata Controller"
-  },
-  {
-    NULL,
-    NULL
-  }
-};
-
-/**
-  Retrieves a Unicode string that is the user readable name of the UEFI Driver.
-
-  @param This           A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
-  @param Language       A pointer to a three character ISO 639-2 language identifier.
-                        This is the language of the driver name that that the caller
-                        is requesting, and it must match one of the languages specified
-                        in SupportedLanguages.  The number of languages supported by a
-                        driver is up to the driver writer.
-  @param DriverName     A pointer to the Unicode string to return.  This Unicode string
-                        is the name of the driver specified by This in the language
-                        specified by Language.
-
-  @retval EFI_SUCCESS           The Unicode string for the Driver specified by This
-                                and the language specified by Language was returned
-                                in DriverName.
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-  @retval EFI_INVALID_PARAMETER DriverName is NULL.
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support the
-                                language specified by Language.
-**/
-EFI_STATUS
-EFIAPI
-SataControllerComponentNameGetDriverName (
-  IN EFI_COMPONENT_NAME_PROTOCOL    *This,
-  IN CHAR8                          *Language,
-  OUT CHAR16                        **DriverName
-  )
-{
-  return LookupUnicodeString2 (
-           Language,
-           This->SupportedLanguages,
-           mSataControllerDriverNameTable,
-           DriverName,
-           (BOOLEAN)(This == &gSataControllerComponentName)
-           );
-}
-
-/**
-  Retrieves a Unicode string that is the user readable name of the controller
-  that is being managed by an UEFI Driver.
-
-  @param This                   A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
-  @param ControllerHandle       The handle of a controller that the driver specified by
-                                This is managing.  This handle specifies the controller
-                                whose name is to be returned.
-  @param ChildHandle OPTIONAL   The handle of the child controller to retrieve the name
-                                of.  This is an optional parameter that may be NULL.  It
-                                will be NULL for device drivers.  It will also be NULL
-                                for a bus drivers that wish to retrieve the name of the
-                                bus controller.  It will not be NULL for a bus driver
-                                that wishes to retrieve the name of a child controller.
-  @param Language               A pointer to a three character ISO 639-2 language
-                                identifier.  This is the language of the controller name
-                                that that the caller is requesting, and it must match one
-                                of the languages specified in SupportedLanguages.  The
-                                number of languages supported by a driver is up to the
-                                driver writer.
-  @param ControllerName         A pointer to the Unicode string to return.  This Unicode
-                                string is the name of the controller specified by
-                                ControllerHandle and ChildHandle in the language
-                                specified by Language from the point of view of the
-                                driver specified by This.
-
-  @retval EFI_SUCCESS           The Unicode string for the user readable name in the
-                                language specified by Language for the driver
-                                specified by This was returned in DriverName.
-  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
-                                EFI_HANDLE.
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
-  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
-                                managing the controller specified by
-                                ControllerHandle and ChildHandle.
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support the
-                                language specified by Language.
-**/
-EFI_STATUS
-EFIAPI
-SataControllerComponentNameGetControllerName (
-  IN EFI_COMPONENT_NAME_PROTOCOL    *This,
-  IN EFI_HANDLE                     ControllerHandle,
-  IN EFI_HANDLE                     ChildHandle OPTIONAL,
-  IN CHAR8                          *Language,
-  OUT CHAR16                        **ControllerName
-  )
-{
-  EFI_STATUS    Status;
-
-  //
-  // Make sure this driver is currently managing ControllHandle
-  //
-  Status = EfiTestManagedDevice (
-             ControllerHandle,
-             gSataControllerDriverBinding.DriverBindingHandle,
-             &gEfiPciIoProtocolGuid
-             );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  if (ChildHandle != NULL) {
-    return EFI_UNSUPPORTED;
-  }
-
-  return LookupUnicodeString2 (
-          Language,
-          This->SupportedLanguages,
-          mSataControllerControllerNameTable,
-          ControllerName,
-          (BOOLEAN)(This == &gSataControllerComponentName)
-          );
-}
diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/InitController.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/InitController.c
deleted file mode 100644
index f605bf7fd168..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/InitController.c
+++ /dev/null
@@ -1,172 +0,0 @@ 
-/** @file
-  Initialize SATA Phy, Serdes, and Controller.
-
-  Copyright (c) 2014 - 2016, AMD 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 "SataController.h"
-#include <Library/IoLib.h>
-#include "SataRegisters.h"
-#include "PciEmulation.h"
-#include <Library/AmdSataInitLib.h>
-
-VOID
-ResetSataController (
-  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
-  )
-{
-  UINT32                  RegVal;
-
-  // Make a minimal global reset for HBA regiser
-  RegVal = MmioRead32(AhciBaseAddr + EFI_AHCI_GHC_OFFSET);
-  RegVal |= EFI_AHCI_GHC_RESET;
-  MmioWrite32(AhciBaseAddr + EFI_AHCI_GHC_OFFSET, RegVal);
-
-  // Clear all interrupts
-  MmioWrite32(AhciBaseAddr + EFI_AHCI_PORT_IS, EFI_AHCI_PORT_IS_CLEAR);
-
-  // Turn on interrupts and ensure that the HBA is working in AHCI mode
-  RegVal = MmioRead32(AhciBaseAddr + EFI_AHCI_GHC_OFFSET);
-  RegVal |= EFI_AHCI_GHC_IE | EFI_AHCI_GHC_ENABLE;
-  MmioWrite32(AhciBaseAddr + EFI_AHCI_GHC_OFFSET, RegVal);
-}
-
-
-VOID
-SetSataCapabilities (
-  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
-  )
-{
-  UINT32                  Capability;
-
-  Capability = MmioRead32(AhciBaseAddr + EFI_AHCI_CAPABILITY_OFFSET);
-  if (PcdGetBool(PcdSataSssSupport)) // Staggered Spin-Up Support bit
-    Capability |= EFI_AHCI_CAP_SSS;
-  if (PcdGetBool(PcdSataSmpsSupport)) // Mechanical Presence Support bit
-    Capability |= EFI_AHCI_CAP_SMPS;
-  MmioWrite32(AhciBaseAddr + EFI_AHCI_CAPABILITY_OFFSET, Capability);
-}
-
-
-VOID
-InitializeSataPorts (
-  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
-  )
-{
-  INTN                    PortNum;
-  UINT32                  SataPi;
-  BOOLEAN                 IsPortImplemented;
-  BOOLEAN                 IsCpd;
-  BOOLEAN                 IsMpsp;
-  UINT32                  PortRegAddr;
-  UINT32                  RegVal;
-
-  // Set Ports Implemented (PI)
-  SataPi = PcdGet32(PcdSataPi);
-  MmioWrite32(AhciBaseAddr + EFI_AHCI_PI_OFFSET, SataPi);
-
-  IsCpd = PcdGetBool(PcdSataPortCpd);
-  IsMpsp = PcdGetBool(PcdSataPortMpsp);
-  for (PortNum = 0; PortNum < EFI_AHCI_MAX_PORTS; PortNum++) {
-    IsPortImplemented = (SataPi & (1 << PortNum)) ? 1 : 0;
-    if (IsPortImplemented && (IsCpd || IsMpsp)) {
-      PortRegAddr = EFI_AHCI_PORT_OFFSET(PortNum) + EFI_AHCI_PORT_CMD;
-      RegVal = MmioRead32(AhciBaseAddr + PortRegAddr);
-      if (IsCpd)
-        RegVal |= EFI_AHCI_PORT_CMD_CPD;
-      else
-        RegVal &= ~EFI_AHCI_PORT_CMD_CPD;
-      if (IsMpsp)
-        RegVal |= EFI_AHCI_PORT_CMD_MPSP;
-      else
-        RegVal &= ~EFI_AHCI_PORT_CMD_MPSP;
-      RegVal |= EFI_AHCI_PORT_CMD_HPCP;
-      MmioWrite32(AhciBaseAddr + PortRegAddr, RegVal);
-    }
-  }
-}
-
-
-EFI_STATUS
-InitializeSataController (
-  VOID
-  )
-{
-  EFI_PHYSICAL_ADDRESS    AhciBaseAddr;
-  UINT8              SataPortCount;
-  UINT8              SataChPerSerdes;
-  UINT32             StartPort;
-  UINT32             PortNum;
-  UINT32             EvenPort;
-  UINT32             OddPort;
-  EFI_STATUS         Status;
-
-#ifdef BUILD_FOR_SATA1
-  AhciBaseAddr = PcdGet32(PcdSata1CtrlAxiSlvPort);
-  SataPortCount = PcdGet8(PcdSata1PortCount);
-  StartPort = PcdGet8(PcdSataPortCount);
-#else
-  AhciBaseAddr = PcdGet32(PcdSataCtrlAxiSlvPort);
-  SataPortCount = PcdGet8(PcdSataPortCount);
-  StartPort = 0;
-#endif
-
-  SataChPerSerdes = PcdGet8(PcdSataNumChPerSerdes);
-
-  //
-  // Perform SATA workarounds
-  //
-  for (PortNum = 0; PortNum < SataPortCount; PortNum++) {
-#ifdef BUILD_FOR_SATA1
-      SetCwMinSata1(PortNum);
-#else
-      SetCwMinSata0(PortNum);
-#endif
-  }
-
-  for (PortNum = 0; PortNum < SataPortCount; PortNum += SataChPerSerdes) {
-      EvenPort = (UINT32)(PcdGet16(PcdSataPortMode) >> (PortNum * 2)) & 3;
-      OddPort = (UINT32)(PcdGet16(PcdSataPortMode) >> ((PortNum+1) * 2)) & 3;
-      SataPhyInit((StartPort + PortNum)/SataChPerSerdes, EvenPort, OddPort);
-  }
-
-  for (PortNum = 0; PortNum < SataPortCount; PortNum++) {
-#ifdef BUILD_FOR_SATA1
-      SetPrdSingleSata1(PortNum);
-#else
-      SetPrdSingleSata0(PortNum);
-#endif
-  }
-
-  //
-  // Reset SATA controller
-  //
-  ResetSataController(AhciBaseAddr);
-
-  //
-  // Set SATA capabilities
-  //
-  SetSataCapabilities(AhciBaseAddr);
-
-  //
-  // Set and intialize the Sata ports
-  //
-  InitializeSataPorts(AhciBaseAddr);
-
-  //
-  // Emulate a PCI configuration for this device
-  //
-  Status = PciEmulationEntryPoint(AhciBaseAddr);
-  ASSERT_EFI_ERROR (Status);
-
-  return EFI_SUCCESS;
-}
-
diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.c
deleted file mode 100644
index 137a4862226a..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.c
+++ /dev/null
@@ -1,442 +0,0 @@ 
-/** @file
-
-  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
-  Copyright (c) 2014 - 2016, AMD 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"
-#include "SataRegisters.h"
-
-
-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} }
-};
-
-
-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;
-}
-
-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);
-
-  return PciRootBridgeIoMemRW ((EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH)Width,
-                               Count,
-                               TRUE,
-                               (PTR)(UINTN)Buffer,
-                               TRUE,
-                               (PTR)(UINTN)(((UINT8 *)Private->ConfigSpace) + Offset)
-                              );
-}
-
-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);
-
-  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
-  )
-{
-  *DeviceAddress = (EFI_PHYSICAL_ADDRESS) HostAddress;
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciIoUnmap (
-  IN EFI_PCI_IO_PROTOCOL           *This,
-  IN  VOID                         *Mapping
-  )
-{
-  return EFI_SUCCESS;
-}
-
-
-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
-  )
-{
-  EFI_PHYSICAL_ADDRESS Memory;
-  EFI_STATUS           Status;
-
-  if (Attributes & EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER) {
-    // Check this
-    return EFI_UNSUPPORTED;
-  }
-  Status = gBS->AllocatePages(AllocateAnyPages, MemoryType, Pages, &Memory);
-  if (Status == EFI_SUCCESS)
-    *HostAddress = (VOID *)Memory;
-  return Status;
-}
-
-
-EFI_STATUS
-PciIoFreeBuffer (
-  IN EFI_PCI_IO_PROTOCOL           *This,
-  IN  UINTN                        Pages,
-  IN  VOID                         *HostAddress
-  )
-{
-  return gBS->FreePages((EFI_PHYSICAL_ADDRESS)HostAddress, Pages);
-}
-
-
-EFI_STATUS
-PciIoFlush (
-  IN EFI_PCI_IO_PROTOCOL  *This
-  )
-{
-  return EFI_SUCCESS;
-}
-
-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) {
-    *SegmentNumber = Private->Segment;
-  }
-
-  if (BusNumber != NULL) {
-    *BusNumber = 0xff;
-  }
-
-  if (DeviceNumber != NULL) {
-    *DeviceNumber = 0;
-  }
-
-  if (FunctionNumber != NULL) {
-    *FunctionNumber = 0;
-  }
-
-  return EFI_SUCCESS;
-}
-
-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_IO_ATTRIBUTE_MEMORY | EFI_PCI_IO_ATTRIBUTE_BUS_MASTER | EFI_PCI_DEVICE_ENABLE;
-    break;
-
-  case EfiPciIoAttributeOperationSet:
-  case EfiPciIoAttributeOperationEnable:
-  case EfiPciIoAttributeOperationDisable:
-    // Since we are not a real PCI device no enable/set or disable operations exist.
-    return EFI_SUCCESS;
-
-  default:
-  ASSERT (FALSE);
-    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
-PciEmulationEntryPoint (
-  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
-  )
-{
-  EFI_STATUS              Status;
-  EFI_HANDLE              Handle;
-  EFI_PCI_IO_PRIVATE_DATA *Private;
-
-  // 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 = AhciBaseAddr;                       // Get the SATA capability register base
-  Private->Segment                = 0;                                  // Default to segment zero
-
-  // Total size of the SATA registers.
-  Private->RootBridge.MemorySize = 1024;
-
-  // 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 = 0x3530;
-  Private->ConfigSpace->Hdr.DeviceId = 0x3530;
-  Private->ConfigSpace->Hdr.ClassCode[0] = PCI_IF_APIC_CONTROLLER2;
-  Private->ConfigSpace->Hdr.ClassCode[1] = PCI_CLASS_MASS_STORAGE_SATADPA;
-  Private->ConfigSpace->Hdr.ClassCode[2] = PCI_CLASS_MASS_STORAGE;
-  Private->ConfigSpace->Device.Bar[EFI_AHCI_BAR_INDEX] = Private->RootBridge.MemoryStart;
-
-  Handle = NULL;
-
-  // Unique device path.
-  CopyMem(&Private->DevicePath, &PciIoDevicePathTemplate, sizeof(PciIoDevicePathTemplate));
-  Private->DevicePath.AcpiDevicePath.UID = 1;
-
-  // 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;
-}
-
diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.h b/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.h
deleted file mode 100644
index 067aea21e33f..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciEmulation.h
+++ /dev/null
@@ -1,289 +0,0 @@ 
-/** @file
-
-  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
-  Copyright (c) 2014 - 2016, AMD 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 <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/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/Pci30.h>
-#include <IndustryStandard/Acpi.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
-PciEmulationEntryPoint (
-  EFI_PHYSICAL_ADDRESS    AhciBaseAddr
-  );
-
-#endif
-
diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciRootBridgeIo.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciRootBridgeIo.c
deleted file mode 100644
index 9fcb402bc326..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/PciRootBridgeIo.c
+++ /dev/null
@@ -1,307 +0,0 @@ 
-/** @file
-
-  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
-  Copyright (c) 2014 - 2016, AMD 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);
-}
-
-
diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.c b/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.c
deleted file mode 100644
index 93d940cff055..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.c
+++ /dev/null
@@ -1,1027 +0,0 @@ 
-/** @file
-  This driver module produces IDE_CONTROLLER_INIT protocol for Sata Controllers.
-
-  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
-  Copyright (c) 2014 - 2016, AMD 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 "SataController.h"
-
-///
-/// EFI_DRIVER_BINDING_PROTOCOL instance
-///
-EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding = {
-  SataControllerSupported,
-  SataControllerStart,
-  SataControllerStop,
-  0xa,
-  NULL,
-  NULL
-};
-
-/**
-  Read AHCI Operation register.
-
-  @param PciIo      The PCI IO protocol instance.
-  @param Offset     The operation register offset.
-
-  @return The register content read.
-
-**/
-UINT32
-EFIAPI
-AhciReadReg (
-  IN EFI_PCI_IO_PROTOCOL    *PciIo,
-  IN UINT32                 Offset
-  )
-{
-  UINT32    Data;
-
-  ASSERT (PciIo != NULL);
-
-  Data = 0;
-
-  PciIo->Mem.Read (
-               PciIo,
-               EfiPciIoWidthUint32,
-               AHCI_BAR_INDEX,
-               (UINT64) Offset,
-               1,
-               &Data
-               );
-
-  return Data;
-}
-
-/**
-  Write AHCI Operation register.
-
-  @param PciIo      The PCI IO protocol instance.
-  @param Offset     The operation register offset.
-  @param Data       The data used to write down.
-
-**/
-VOID
-EFIAPI
-AhciWriteReg (
-  IN EFI_PCI_IO_PROTOCOL    *PciIo,
-  IN UINT32                 Offset,
-  IN UINT32                 Data
-  )
-{
-  ASSERT (PciIo != NULL);
-
-  PciIo->Mem.Write (
-               PciIo,
-               EfiPciIoWidthUint32,
-               AHCI_BAR_INDEX,
-               (UINT64) Offset,
-               1,
-               &Data
-               );
-
-  return;
-}
-
-/**
-  This function is used to calculate the best PIO mode supported by specific IDE device
-
-  @param IdentifyData   The identify data of specific IDE device.
-  @param DisPioMode     Disqualified PIO modes collection.
-  @param SelectedMode   Available PIO modes collection.
-
-  @retval EFI_SUCCESS       Best PIO modes are returned.
-  @retval EFI_UNSUPPORTED   The device doesn't support PIO mode,
-                            or all supported modes have been disqualified.
-**/
-EFI_STATUS
-CalculateBestPioMode (
-  IN EFI_IDENTIFY_DATA  *IdentifyData,
-  IN UINT16             *DisPioMode OPTIONAL,
-  OUT UINT16            *SelectedMode
-  )
-{
-  UINT16    PioMode;
-  UINT16    AdvancedPioMode;
-  UINT16    Temp;
-  UINT16    Index;
-  UINT16    MinimumPioCycleTime;
-
-  Temp = 0xff;
-
-DEBUG ((EFI_D_INFO, "CalculateBestPioMode()\n"));
-
-  PioMode = (UINT8) (((ATA5_IDENTIFY_DATA *) (&(IdentifyData->AtaData)))->pio_cycle_timing >> 8);
-
-  //
-  // See whether Identify Data word 64 - 70 are valid
-  //
-  if ((IdentifyData->AtaData.field_validity & 0x02) == 0x02) {
-
-    AdvancedPioMode = IdentifyData->AtaData.advanced_pio_modes;
-    DEBUG ((EFI_D_INFO, "CalculateBestPioMode: AdvancedPioMode = %x\n", AdvancedPioMode));
-
-    for (Index = 0; Index < 8; Index++) {
-      if ((AdvancedPioMode & 0x01) != 0) {
-        Temp = Index;
-      }
-
-      AdvancedPioMode >>= 1;
-    }
-
-    //
-    // If Temp is modified, mean the advanced_pio_modes is not zero;
-    // if Temp is not modified, mean there is no advanced PIO mode supported,
-    // the best PIO Mode is the value in pio_cycle_timing.
-    //
-    if (Temp != 0xff) {
-      AdvancedPioMode = (UINT16) (Temp + 3);
-    } else {
-      AdvancedPioMode = PioMode;
-    }
-
-    //
-    // Limit the PIO mode to at most PIO4.
-    //
-    PioMode = (UINT16) MIN (AdvancedPioMode, 4);
-
-    MinimumPioCycleTime = IdentifyData->AtaData.min_pio_cycle_time_with_flow_control;
-
-    if (MinimumPioCycleTime <= 120) {
-      PioMode = (UINT16) MIN (4, PioMode);
-    } else if (MinimumPioCycleTime <= 180) {
-      PioMode = (UINT16) MIN (3, PioMode);
-    } else if (MinimumPioCycleTime <= 240) {
-      PioMode = (UINT16) MIN (2, PioMode);
-    } else {
-      PioMode = 0;
-    }
-
-    //
-    // Degrade the PIO mode if the mode has been disqualified
-    //
-    if (DisPioMode != NULL) {
-      if (*DisPioMode < 2) {
-        return EFI_UNSUPPORTED; // no mode below ATA_PIO_MODE_BELOW_2
-      }
-
-      if (PioMode >= *DisPioMode) {
-        PioMode = (UINT16) (*DisPioMode - 1);
-      }
-    }
-
-    if (PioMode < 2) {
-      *SelectedMode = 1;        // ATA_PIO_MODE_BELOW_2;
-    } else {
-      *SelectedMode = PioMode;  // ATA_PIO_MODE_2 to ATA_PIO_MODE_4;
-    }
-
-  } else {
-    //
-    // Identify Data word 64 - 70 are not valid
-    // Degrade the PIO mode if the mode has been disqualified
-    //
-    if (DisPioMode != NULL) {
-      if (*DisPioMode < 2) {
-        return EFI_UNSUPPORTED; // no mode below ATA_PIO_MODE_BELOW_2
-      }
-
-      if (PioMode == *DisPioMode) {
-        PioMode--;
-      }
-    }
-
-    if (PioMode < 2) {
-      *SelectedMode = 1;        // ATA_PIO_MODE_BELOW_2;
-    } else {
-      *SelectedMode = 2;        // ATA_PIO_MODE_2;
-    }
-
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  This function is used to calculate the best UDMA mode supported by specific IDE device
-
-  @param IdentifyData   The identify data of specific IDE device.
-  @param DisUDmaMode     Disqualified UDMA modes collection.
-  @param SelectedMode   Available UDMA modes collection.
-
-  @retval EFI_SUCCESS       Best UDMA modes are returned.
-  @retval EFI_UNSUPPORTED   The device doesn't support UDMA mode,
-                            or all supported modes have been disqualified.
-**/
-EFI_STATUS
-CalculateBestUdmaMode (
-  IN EFI_IDENTIFY_DATA  *IdentifyData,
-  IN UINT16             *DisUDmaMode OPTIONAL,
-  OUT UINT16            *SelectedMode
-  )
-{
-  UINT16    TempMode;
-  UINT16    DeviceUDmaMode;
-
-  DeviceUDmaMode = 0;
-
-DEBUG ((EFI_D_INFO, "CalculateBestUdmaMode()\n"));
-  //
-  // Check whether the WORD 88 (supported UltraDMA by drive) is valid
-  //
-  if ((IdentifyData->AtaData.field_validity & 0x04) == 0x00) {
-    return EFI_UNSUPPORTED;
-  }
-
-  DeviceUDmaMode = IdentifyData->AtaData.ultra_dma_mode;
-  DEBUG ((EFI_D_INFO, "CalculateBestUdmaMode: DeviceUDmaMode = %x\n", DeviceUDmaMode));
-  DeviceUDmaMode &= 0x3f;
-  TempMode = 0;                 // initialize it to UDMA-0
-
-  while ((DeviceUDmaMode >>= 1) != 0) {
-    TempMode++;
-  }
-
-  //
-  // Degrade the UDMA mode if the mode has been disqualified
-  //
-  if (DisUDmaMode != NULL) {
-    if (*DisUDmaMode == 0) {
-      *SelectedMode = 0;
-      return EFI_UNSUPPORTED;   // no mode below ATA_UDMA_MODE_0
-    }
-
-    if (TempMode >= *DisUDmaMode) {
-      TempMode = (UINT16) (*DisUDmaMode - 1);
-    }
-  }
-
-  //
-  // Possible returned mode is between ATA_UDMA_MODE_0 and ATA_UDMA_MODE_5
-  //
-  *SelectedMode = TempMode;
-
-  return EFI_SUCCESS;
-}
-
-/**
-  The Entry Point of module. It follows the standard UEFI driver model.
-
-  @param[in] ImageHandle    The firmware allocated handle for the EFI image.
-  @param[in] SystemTable    A pointer to the EFI System Table.
-
-  @retval EFI_SUCCESS   The entry point is executed successfully.
-  @retval other         Some error occurs when executing this entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-InitializeSataControllerDriver (
-  IN EFI_HANDLE         ImageHandle,
-  IN EFI_SYSTEM_TABLE   *SystemTable
-  )
-{
-  EFI_STATUS    Status;
-
-DEBUG ((EFI_D_INFO, "InitializeSataControllerDriver()\n"));
-  //
-  // Initialize the SATA controller
-  //
-  Status = InitializeSataController();
-  ASSERT_EFI_ERROR (Status);
-
-  //
-  // Install driver model protocol(s).
-  //
-  Status = EfiLibInstallDriverBindingComponentName2 (
-             ImageHandle,
-             SystemTable,
-             &gSataControllerDriverBinding,
-             ImageHandle,
-             &gSataControllerComponentName,
-             &gSataControllerComponentName2
-             );
-  ASSERT_EFI_ERROR (Status);
-
-  return Status;
-}
-
-/**
-  Supported function of Driver Binding protocol for this driver.
-  Test to see if this driver supports ControllerHandle.
-
-  @param This                   Protocol instance pointer.
-  @param Controller             Handle of device to test.
-  @param RemainingDevicePath    A pointer to the device path.
-                                it should be ignored by device driver.
-
-  @retval EFI_SUCCESS           This driver supports this device.
-  @retval EFI_ALREADY_STARTED   This driver is already running on this device.
-  @retval other                 This driver does not support this device.
-
-**/
-EFI_STATUS
-EFIAPI
-SataControllerSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
-  IN EFI_HANDLE                     Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
-  )
-{
-  EFI_STATUS            Status;
-  EFI_PCI_IO_PROTOCOL   *PciIo;
-  PCI_TYPE00            PciData;
-
-//DEBUG ((EFI_D_INFO, "SataControllerSupported()\n"));
-  //
-  // Attempt to open PCI I/O Protocol
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  (VOID **) &PciIo,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Now further check the PCI header: Base Class (offset 0x0B) and
-  // Sub Class (offset 0x0A). This controller should be an SATA controller
-  //
-  Status = PciIo->Pci.Read (
-                        PciIo,
-                        EfiPciIoWidthUint8,
-                        PCI_CLASSCODE_OFFSET,
-                        sizeof (PciData.Hdr.ClassCode),
-                        PciData.Hdr.ClassCode
-                        );
-  if (EFI_ERROR (Status)) {
-    return EFI_UNSUPPORTED;
-  }
-
-  if (IS_PCI_IDE (&PciData) || IS_PCI_SATADPA (&PciData)) {
-    return EFI_SUCCESS;
-  }
-
-  return EFI_UNSUPPORTED;
-}
-
-/**
-  This routine is called right after the .Supported() called and
-  Start this driver on ControllerHandle.
-
-  @param This                   Protocol instance pointer.
-  @param Controller             Handle of device to bind driver to.
-  @param RemainingDevicePath    A pointer to the device path.
-                                it should be ignored by device driver.
-
-  @retval EFI_SUCCESS           This driver is added to this device.
-  @retval EFI_ALREADY_STARTED   This driver is already running on this device.
-  @retval other                 Some error occurs when binding this driver to this device.
-
-**/
-EFI_STATUS
-EFIAPI
-SataControllerStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
-  IN EFI_HANDLE                     Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
-  )
-{
-  EFI_STATUS                        Status;
-  EFI_PCI_IO_PROTOCOL               *PciIo;
-  PCI_TYPE00                        PciData;
-  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
-  UINT32                            Data32;
-  UINTN                             ChannelDeviceCount;
-
-  DEBUG ((EFI_D_INFO, "SataControllerStart START\n"));
-
-  SataPrivateData = NULL;
-
-  //
-  // Now test and open PCI I/O Protocol
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  (VOID **) &PciIo,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-  if (EFI_ERROR (Status)) {
-    DEBUG ((EFI_D_ERROR, "SataControllerStart error return status = %r\n", Status));
-    return Status;
-  }
-
-  //
-  // Allocate Sata Private Data structure
-  //
-  SataPrivateData = AllocateZeroPool (sizeof (EFI_SATA_CONTROLLER_PRIVATE_DATA));
-  if (SataPrivateData == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  //
-  // Initialize Sata Private Data
-  //
-  SataPrivateData->Signature = SATA_CONTROLLER_SIGNATURE;
-  SataPrivateData->PciIo = PciIo;
-  SataPrivateData->IdeInit.GetChannelInfo = IdeInitGetChannelInfo;
-  SataPrivateData->IdeInit.NotifyPhase = IdeInitNotifyPhase;
-  SataPrivateData->IdeInit.SubmitData = IdeInitSubmitData;
-  SataPrivateData->IdeInit.DisqualifyMode = IdeInitDisqualifyMode;
-  SataPrivateData->IdeInit.CalculateMode = IdeInitCalculateMode;
-  SataPrivateData->IdeInit.SetTiming = IdeInitSetTiming;
-  SataPrivateData->IdeInit.EnumAll = SATA_ENUMER_ALL;
-
-  Status = PciIo->Pci.Read (
-                        PciIo,
-                        EfiPciIoWidthUint8,
-                        PCI_CLASSCODE_OFFSET,
-                        sizeof (PciData.Hdr.ClassCode),
-                        PciData.Hdr.ClassCode
-                        );
-  ASSERT_EFI_ERROR (Status);
-
-  if (IS_PCI_IDE (&PciData)) {
-    SataPrivateData->IdeInit.ChannelCount = IDE_MAX_CHANNEL;
-    SataPrivateData->DeviceCount = IDE_MAX_DEVICES;
-  } else if (IS_PCI_SATADPA (&PciData)) {
-    //
-    // Read Host Capability Register(CAP) to get Number of Ports(NPS) and Supports Port Multiplier(SPM)
-    //   NPS is 0's based value indicating the maximum number of ports supported by the HBA silicon.
-    //   A maximum of 32 ports can be supported. A value of '0h', indicating one port, is the minimum requirement.
-    //
-    Data32 = AhciReadReg (PciIo, R_AHCI_CAP);
-    SataPrivateData->IdeInit.ChannelCount = (UINT8) ((Data32 & B_AHCI_CAP_NPS) + 1);
-    SataPrivateData->DeviceCount = AHCI_MAX_DEVICES;
-    if ((Data32 & B_AHCI_CAP_SPM) == B_AHCI_CAP_SPM) {
-      SataPrivateData->DeviceCount = AHCI_MULTI_MAX_DEVICES;
-    }
-  }
-
-  ChannelDeviceCount = (UINTN) (SataPrivateData->IdeInit.ChannelCount) * (UINTN) (SataPrivateData->DeviceCount);
-  DEBUG ((EFI_D_INFO, "ChannelDeviceCount %d\n", ChannelDeviceCount));
-  SataPrivateData->DisqulifiedModes = AllocateZeroPool ((sizeof (EFI_ATA_COLLECTIVE_MODE)) * ChannelDeviceCount);
-  if (SataPrivateData->DisqulifiedModes == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  SataPrivateData->IdentifyData = AllocateZeroPool ((sizeof (EFI_IDENTIFY_DATA)) * ChannelDeviceCount);
-  if (SataPrivateData->IdentifyData == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  SataPrivateData->IdentifyValid = AllocateZeroPool ((sizeof (BOOLEAN)) * ChannelDeviceCount);
-  if (SataPrivateData->IdentifyValid == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  //
-  // Install IDE Controller Init Protocol to this instance
-  //
-  Status = gBS->InstallMultipleProtocolInterfaces (
-                  &Controller,
-                  &gEfiIdeControllerInitProtocolGuid,
-                  &(SataPrivateData->IdeInit),
-                  NULL
-                  );
-
-Done:
-  if (EFI_ERROR (Status)) {
-
-    gBS->CloseProtocol (
-          Controller,
-          &gEfiPciIoProtocolGuid,
-          This->DriverBindingHandle,
-          Controller
-          );
-    if (SataPrivateData != NULL) {
-      if (SataPrivateData->DisqulifiedModes != NULL) {
-        FreePool (SataPrivateData->DisqulifiedModes);
-      }
-      if (SataPrivateData->IdentifyData != NULL) {
-        FreePool (SataPrivateData->IdentifyData);
-      }
-      if (SataPrivateData->IdentifyValid != NULL) {
-        FreePool (SataPrivateData->IdentifyValid);
-      }
-      FreePool (SataPrivateData);
-    }
-  }
-
-  DEBUG ((EFI_D_INFO, "SataControllerStart END status = %r\n", Status));
-
-  return Status;
-}
-
-/**
-  Stop this driver on ControllerHandle.
-
-  @param This               Protocol instance pointer.
-  @param Controller         Handle of device to stop driver on.
-  @param NumberOfChildren   Not used.
-  @param ChildHandleBuffer  Not used.
-
-  @retval EFI_SUCCESS   This driver is removed from this device.
-  @retval other         Some error occurs when removing this driver from this device.
-
-**/
-EFI_STATUS
-EFIAPI
-SataControllerStop (
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
-  IN EFI_HANDLE                     Controller,
-  IN UINTN                          NumberOfChildren,
-  IN EFI_HANDLE                     *ChildHandleBuffer
-  )
-{
-  EFI_STATUS                        Status;
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL  *IdeInit;
-  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
-
-DEBUG ((EFI_D_INFO, "SataControllerStop()\n"));
-  //
-  // Open the produced protocol
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiIdeControllerInitProtocolGuid,
-                  (VOID **) &IdeInit,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
-  if (EFI_ERROR (Status)) {
-    return EFI_UNSUPPORTED;
-  }
-
-  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (IdeInit);
-  ASSERT (SataPrivateData != NULL);
-
-  //
-  // Uninstall the IDE Controller Init Protocol from this instance
-  //
-  Status = gBS->UninstallMultipleProtocolInterfaces (
-                  Controller,
-                  &gEfiIdeControllerInitProtocolGuid,
-                  &(SataPrivateData->IdeInit),
-                  NULL
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  if (SataPrivateData != NULL) {
-    if (SataPrivateData->DisqulifiedModes != NULL) {
-      FreePool (SataPrivateData->DisqulifiedModes);
-    }
-    if (SataPrivateData->IdentifyData != NULL) {
-      FreePool (SataPrivateData->IdentifyData);
-    }
-    if (SataPrivateData->IdentifyValid != NULL) {
-      FreePool (SataPrivateData->IdentifyValid);
-    }
-    FreePool (SataPrivateData);
-  }
-
-  //
-  // Close protocols opened by Sata Controller driver
-  //
-  return gBS->CloseProtocol (
-                Controller,
-                &gEfiPciIoProtocolGuid,
-                This->DriverBindingHandle,
-                Controller
-                );
-}
-
-//
-// Interface functions of IDE_CONTROLLER_INIT protocol
-//
-/**
-  Returns the information about the specified IDE channel.
-
-  This function can be used to obtain information about a particular IDE channel.
-  The driver entity uses this information during the enumeration process.
-
-  If Enabled is set to FALSE, the driver entity will not scan the channel. Note
-  that it will not prevent an operating system driver from scanning the channel.
-
-  For most of today's controllers, MaxDevices will either be 1 or 2. For SATA
-  controllers, this value will always be 1. SATA configurations can contain SATA
-  port multipliers. SATA port multipliers behave like SATA bridges and can support
-  up to 16 devices on the other side. If a SATA port out of the IDE controller
-  is connected to a port multiplier, MaxDevices will be set to the number of SATA
-  devices that the port multiplier supports. Because today's port multipliers
-  support up to fifteen SATA devices, this number can be as large as fifteen. The IDE
-  bus driver is required to scan for the presence of port multipliers behind an SATA
-  controller and enumerate up to MaxDevices number of devices behind the port
-  multiplier.
-
-  In this context, the devices behind a port multiplier constitute a channel.
-
-  @param[in]  This         The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in]  Channel      Zero-based channel number.
-  @param[out] Enabled      TRUE if this channel is enabled.  Disabled channels
-                           are not scanned to see if any devices are present.
-  @param[out] MaxDevices   The maximum number of IDE devices that the bus driver
-                           can expect on this channel.  For the ATA/ATAPI
-                           specification, version 6, this number will either be
-                           one or two. For Serial ATA (SATA) configurations with a
-                           port multiplier, this number can be as large as fifteen.
-
-  @retval EFI_SUCCESS             Information was returned without any errors.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitGetChannelInfo (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  OUT BOOLEAN                           *Enabled,
-  OUT UINT8                             *MaxDevices
-  )
-{
-  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
-  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);
-  ASSERT (SataPrivateData != NULL);
-
-DEBUG ((EFI_D_INFO, "IdeInitGetChannelInfo()\n"));
-  if (Channel < This->ChannelCount) {
-    *Enabled = TRUE;
-    *MaxDevices = SataPrivateData->DeviceCount;
-    return EFI_SUCCESS;
-  }
-
-  *Enabled = FALSE;
-  return EFI_INVALID_PARAMETER;
-}
-
-/**
-  The notifications from the driver entity that it is about to enter a certain
-  phase of the IDE channel enumeration process.
-
-  This function can be used to notify the IDE controller driver to perform
-  specific actions, including any chipset-specific initialization, so that the
-  chipset is ready to enter the next phase. Seven notification points are defined
-  at this time.
-
-  More synchronization points may be added as required in the future.
-
-  @param[in] This      The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in] Phase     The phase during enumeration.
-  @param[in] Channel   Zero-based channel number.
-
-  @retval EFI_SUCCESS             The notification was accepted without any errors.
-  @retval EFI_UNSUPPORTED         Phase is not supported.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_NOT_READY           This phase cannot be entered at this time; for
-                                  example, an attempt was made to enter a Phase
-                                  without having entered one or more previous
-                                  Phase.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitNotifyPhase (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN EFI_IDE_CONTROLLER_ENUM_PHASE      Phase,
-  IN UINT8                              Channel
-  )
-{
-  return EFI_SUCCESS;
-}
-
-/**
-  Submits the device information to the IDE controller driver.
-
-  This function is used by the driver entity to pass detailed information about
-  a particular device to the IDE controller driver. The driver entity obtains
-  this information by issuing an ATA or ATAPI IDENTIFY_DEVICE command. IdentifyData
-  is the pointer to the response data buffer. The IdentifyData buffer is owned
-  by the driver entity, and the IDE controller driver must make a local copy
-  of the entire buffer or parts of the buffer as needed. The original IdentifyData
-  buffer pointer may not be valid when
-
-    - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() or
-    - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() is called at a later point.
-
-  The IDE controller driver may consult various fields of EFI_IDENTIFY_DATA to
-  compute the optimum mode for the device. These fields are not limited to the
-  timing information. For example, an implementation of the IDE controller driver
-  may examine the vendor and type/mode field to match known bad drives.
-
-  The driver entity may submit drive information in any order, as long as it
-  submits information for all the devices belonging to the enumeration group
-  before EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() is called for any device
-  in that enumeration group. If a device is absent, EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
-  should be called with IdentifyData set to NULL.  The IDE controller driver may
-  not have any other mechanism to know whether a device is present or not. Therefore,
-  setting IdentifyData to NULL does not constitute an error condition.
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() can be called only once for a
-  given (Channel, Device) pair.
-
-  @param[in] This           A pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in] Channel        Zero-based channel number.
-  @param[in] Device         Zero-based device number on the Channel.
-  @param[in] IdentifyData   The device's response to the ATA IDENTIFY_DEVICE command.
-
-  @retval EFI_SUCCESS             The information was accepted without any errors.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_INVALID_PARAMETER   Device is invalid.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitSubmitData (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  IN UINT8                              Device,
-  IN EFI_IDENTIFY_DATA                  *IdentifyData
-  )
-{
-  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
-  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);
-  ASSERT (SataPrivateData != NULL);
-
-DEBUG ((EFI_D_INFO, "IdeInitSubmitData()\n"));
-  if ((Channel >= This->ChannelCount) || (Device >= SataPrivateData->DeviceCount)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Make a local copy of device's IdentifyData and mark the valid flag
-  //
-  if (IdentifyData != NULL) {
-    CopyMem (
-      &(SataPrivateData->IdentifyData[Channel * Device]),
-      IdentifyData,
-      sizeof (EFI_IDENTIFY_DATA)
-      );
-
-    SataPrivateData->IdentifyValid[Channel * Device] = TRUE;
-  } else {
-    SataPrivateData->IdentifyValid[Channel * Device] = FALSE;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Disqualifies specific modes for an IDE device.
-
-  This function allows the driver entity or other drivers (such as platform
-  drivers) to reject certain timing modes and request the IDE controller driver
-  to recalculate modes. This function allows the driver entity and the IDE
-  controller driver to negotiate the timings on a per-device basis. This function
-  is useful in the case of drives that lie about their capabilities. An example
-  is when the IDE device fails to accept the timing modes that are calculated
-  by the IDE controller driver based on the response to the Identify Drive command.
-
-  If the driver entity does not want to limit the ATA timing modes and leave that
-  decision to the IDE controller driver, it can either not call this function for
-  the given device or call this function and set the Valid flag to FALSE for all
-  modes that are listed in EFI_ATA_COLLECTIVE_MODE.
-
-  The driver entity may disqualify modes for a device in any order and any number
-  of times.
-
-  This function can be called multiple times to invalidate multiple modes of the
-  same type (e.g., Programmed Input/Output [PIO] modes 3 and 4). See the ATA/ATAPI
-  specification for more information on PIO modes.
-
-  For Serial ATA (SATA) controllers, this member function can be used to disqualify
-  a higher transfer rate mode on a given channel. For example, a platform driver
-  may inform the IDE controller driver to not use second-generation (Gen2) speeds
-  for a certain SATA drive.
-
-  @param[in] This       The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in] Channel    The zero-based channel number.
-  @param[in] Device     The zero-based device number on the Channel.
-  @param[in] BadModes   The modes that the device does not support and that
-                        should be disqualified.
-
-  @retval EFI_SUCCESS             The modes were accepted without any errors.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_INVALID_PARAMETER   Device is invalid.
-  @retval EFI_INVALID_PARAMETER   IdentifyData is NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitDisqualifyMode (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  IN UINT8                              Device,
-  IN EFI_ATA_COLLECTIVE_MODE            *BadModes
-  )
-{
-  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
-  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);
-  ASSERT (SataPrivateData != NULL);
-
-DEBUG ((EFI_D_INFO, "IdeInitDisqualifyMode()\n"));
-
-  if ((Channel >= This->ChannelCount) || (BadModes == NULL) || (Device >= SataPrivateData->DeviceCount)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Record the disqualified modes per channel per device. From ATA/ATAPI spec,
-  // if a mode is not supported, the modes higher than it is also not supported.
-  //
-  CopyMem (
-    &(SataPrivateData->DisqulifiedModes[Channel * Device]),
-    BadModes,
-    sizeof (EFI_ATA_COLLECTIVE_MODE)
-    );
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Returns the information about the optimum modes for the specified IDE device.
-
-  This function is used by the driver entity to obtain the optimum ATA modes for
-  a specific device.  The IDE controller driver takes into account the following
-  while calculating the mode:
-    - The IdentifyData inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
-    - The BadModes inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode()
-
-  The driver entity is required to call EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
-  for all the devices that belong to an enumeration group before calling
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() for any device in the same group.
-
-  The IDE controller driver will use controller- and possibly platform-specific
-  algorithms to arrive at SupportedModes.  The IDE controller may base its
-  decision on user preferences and other considerations as well. This function
-  may be called multiple times because the driver entity may renegotiate the mode
-  with the IDE controller driver using EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode().
-
-  The driver entity may collect timing information for various devices in any
-  order. The driver entity is responsible for making sure that all the dependencies
-  are satisfied. For example, the SupportedModes information for device A that
-  was previously returned may become stale after a call to
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() for device B.
-
-  The buffer SupportedModes is allocated by the callee because the caller does
-  not necessarily know the size of the buffer. The type EFI_ATA_COLLECTIVE_MODE
-  is defined in a way that allows for future extensibility and can be of variable
-  length. This memory pool should be deallocated by the caller when it is no
-  longer necessary.
-
-  The IDE controller driver for a Serial ATA (SATA) controller can use this
-  member function to force a lower speed (first-generation [Gen1] speeds on a
-  second-generation [Gen2]-capable hardware).  The IDE controller driver can
-  also allow the driver entity to stay with the speed that has been negotiated
-  by the physical layer.
-
-  @param[in]  This             The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in]  Channel          A zero-based channel number.
-  @param[in]  Device           A zero-based device number on the Channel.
-  @param[out] SupportedModes   The optimum modes for the device.
-
-  @retval EFI_SUCCESS             SupportedModes was returned.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_INVALID_PARAMETER   Device is invalid.
-  @retval EFI_INVALID_PARAMETER   SupportedModes is NULL.
-  @retval EFI_NOT_READY           Modes cannot be calculated due to a lack of
-                                  data.  This error may happen if
-                                  EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
-                                  and EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyData()
-                                  were not called for at least one drive in the
-                                  same enumeration group.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitCalculateMode (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  IN UINT8                              Device,
-  OUT EFI_ATA_COLLECTIVE_MODE           **SupportedModes
-  )
-{
-  EFI_SATA_CONTROLLER_PRIVATE_DATA  *SataPrivateData;
-  EFI_IDENTIFY_DATA                 *IdentifyData;
-  BOOLEAN                           IdentifyValid;
-  EFI_ATA_COLLECTIVE_MODE           *DisqulifiedModes;
-  UINT16                            SelectedMode;
-  EFI_STATUS                        Status;
-
-DEBUG ((EFI_D_INFO, "IdeInitCalculateMode()\n"));
-  SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This);
-  ASSERT (SataPrivateData != NULL);
-
-  if ((Channel >= This->ChannelCount) || (SupportedModes == NULL) || (Device >= SataPrivateData->DeviceCount)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  *SupportedModes = AllocateZeroPool (sizeof (EFI_ATA_COLLECTIVE_MODE));
-  if (*SupportedModes == NULL) {
-    ASSERT (*SupportedModes != NULL);
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  IdentifyData = &(SataPrivateData->IdentifyData[Channel * Device]);
-  IdentifyValid = SataPrivateData->IdentifyValid[Channel * Device];
-  DisqulifiedModes = &(SataPrivateData->DisqulifiedModes[Channel * Device]);
-
-  //
-  // Make sure we've got the valid identify data of the device from SubmitData()
-  //
-  if (!IdentifyValid) {
-    FreePool (*SupportedModes);
-    return EFI_NOT_READY;
-  }
-
-  Status = CalculateBestPioMode (
-            IdentifyData,
-            (DisqulifiedModes->PioMode.Valid ? ((UINT16 *) &(DisqulifiedModes->PioMode.Mode)) : NULL),
-            &SelectedMode
-            );
-  if (!EFI_ERROR (Status)) {
-    (*SupportedModes)->PioMode.Valid = TRUE;
-    (*SupportedModes)->PioMode.Mode = SelectedMode;
-
-  } else {
-    (*SupportedModes)->PioMode.Valid = FALSE;
-  }
-  DEBUG ((EFI_D_INFO, "IdeInitCalculateMode: PioMode = %x\n", (*SupportedModes)->PioMode.Mode));
-
-  Status = CalculateBestUdmaMode (
-            IdentifyData,
-            (DisqulifiedModes->UdmaMode.Valid ? ((UINT16 *) &(DisqulifiedModes->UdmaMode.Mode)) : NULL),
-            &SelectedMode
-            );
-
-  if (!EFI_ERROR (Status)) {
-    (*SupportedModes)->UdmaMode.Valid = TRUE;
-    (*SupportedModes)->UdmaMode.Mode  = SelectedMode;
-
-  } else {
-    (*SupportedModes)->UdmaMode.Valid = FALSE;
-  }
-  DEBUG ((EFI_D_INFO, "IdeInitCalculateMode: UdmaMode = %x\n", (*SupportedModes)->UdmaMode.Mode));
-
-  //
-  // The modes other than PIO and UDMA are not supported
-  //
-  return EFI_SUCCESS;
-}
-
-/**
-  Commands the IDE controller driver to program the IDE controller hardware
-  so that the specified device can operate at the specified mode.
-
-  This function is used by the driver entity to instruct the IDE controller
-  driver to program the IDE controller hardware to the specified modes. This
-  function can be called only once for a particular device. For a Serial ATA
-  (SATA) Advanced Host Controller Interface (AHCI) controller, no controller-
-  specific programming may be required.
-
-  @param[in] This      Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in] Channel   Zero-based channel number.
-  @param[in] Device    Zero-based device number on the Channel.
-  @param[in] Modes     The modes to set.
-
-  @retval EFI_SUCCESS             The command was accepted without any errors.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_INVALID_PARAMETER   Device is invalid.
-  @retval EFI_NOT_READY           Modes cannot be set at this time due to lack of data.
-  @retval EFI_DEVICE_ERROR        Modes cannot be set due to hardware failure.
-                                  The driver entity should not use this device.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitSetTiming (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  IN UINT8                              Device,
-  IN EFI_ATA_COLLECTIVE_MODE            *Modes
-  )
-{
-  return EFI_SUCCESS;
-}
diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.h b/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.h
deleted file mode 100644
index cb9b84be2d1b..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataController.h
+++ /dev/null
@@ -1,555 +0,0 @@ 
-/** @file
-  Header file for Sata Controller driver.
-
-  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
-  Copyright (c) 2014 - 2016, AMD 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 _SATA_CONTROLLER_H_
-#define _SATA_CONTROLLER_H_
-
-#include <Uefi.h>
-#include <Protocol/ComponentName.h>
-#include <Protocol/DriverBinding.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/IdeControllerInit.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiLib.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <IndustryStandard/Pci.h>
-
-//
-// Global Variables definitions
-//
-extern EFI_DRIVER_BINDING_PROTOCOL  gSataControllerDriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL  gSataControllerComponentName;
-extern EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2;
-
-#define AHCI_BAR_INDEX 0x05
-#define R_AHCI_CAP 0x0
-#define   B_AHCI_CAP_NPS (BIT4 | BIT3 | BIT2 | BIT1 | BIT0) // Number of Ports
-#define   B_AHCI_CAP_SPM BIT17 // Supports Port Multiplier
-
-///
-/// AHCI each channel can have up to 1 device
-///
-#define AHCI_MAX_DEVICES 0x01
-
-///
-/// AHCI each channel can have 15 devices in the presence of a multiplier
-///
-#define AHCI_MULTI_MAX_DEVICES 0x0F
-
-///
-/// IDE supports 2 channel max
-///
-#define IDE_MAX_CHANNEL 0x02
-
-///
-/// IDE supports 2 devices max
-///
-#define IDE_MAX_DEVICES 0x02
-
-#define SATA_ENUMER_ALL FALSE
-
-//
-// Sata Controller driver private data structure
-//
-
-#define SATA_CONTROLLER_SIGNATURE SIGNATURE_32('S','A','T','A')
-
-typedef struct _EFI_SATA_CONTROLLER_PRIVATE_DATA {
-  //
-  // Standard signature used to identify Sata Controller private data
-  //
-  UINT32                            Signature;
-
-  //
-  // Protocol instance of IDE_CONTROLLER_INIT produced by this driver
-  //
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL  IdeInit;
-
-  //
-  // Copy of protocol pointers used by this driver
-  //
-  EFI_PCI_IO_PROTOCOL               *PciIo;
-
-  //
-  // The number of devices that are supported by this channel
-  //
-  UINT8                             DeviceCount;
-
-  //
-  // The highest disqulified mode for each attached device,
-  // From ATA/ATAPI spec, if a mode is not supported,
-  // the modes higher than it is also not supported
-  //
-  EFI_ATA_COLLECTIVE_MODE           *DisqulifiedModes;
-
-  //
-  // A copy of EFI_IDENTIFY_DATA data for each attached SATA device and its flag
-  //
-  EFI_IDENTIFY_DATA                 *IdentifyData;
-  BOOLEAN                           *IdentifyValid;
-} EFI_SATA_CONTROLLER_PRIVATE_DATA;
-
-#define SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS(a) CR(a, EFI_SATA_CONTROLLER_PRIVATE_DATA, IdeInit, SATA_CONTROLLER_SIGNATURE)
-
-/**
-  Initialize the Sata controller hardware.
-
-  @retval EFI_SUCCESS   This driver is removed from this device.
-  @retval other         Some error occurs when removing this driver from this device.
-**/
-EFI_STATUS
-InitializeSataController (
-  VOID
-  );
-
-//
-// Driver binding functions declaration
-//
-/**
-  Supported function of Driver Binding protocol for this driver.
-  Test to see if this driver supports ControllerHandle.
-
-  @param This                   Protocol instance pointer.
-  @param Controller             Handle of device to test.
-  @param RemainingDevicePath    A pointer to the device path. Should be ignored by
-                                device driver.
-
-  @retval EFI_SUCCESS           This driver supports this device.
-  @retval EFI_ALREADY_STARTED   This driver is already running on this device.
-  @retval other                 This driver does not support this device.
-
-**/
-EFI_STATUS
-EFIAPI
-SataControllerSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
-  IN EFI_HANDLE                     Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
-  )
-;
-
-/**
-  This routine is called right after the .Supported() called and
-  Start this driver on ControllerHandle.
-
-  @param This                   Protocol instance pointer.
-  @param Controller             Handle of device to bind driver to.
-  @param RemainingDevicePath    A pointer to the device path. Should be ignored by
-                                device driver.
-
-  @retval EFI_SUCCESS           This driver is added to this device.
-  @retval EFI_ALREADY_STARTED   This driver is already running on this device.
-  @retval other                 Some error occurs when binding this driver to this device.
-
-**/
-EFI_STATUS
-EFIAPI
-SataControllerStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
-  IN EFI_HANDLE                     Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
-  )
-;
-
-/**
-  Stop this driver on ControllerHandle.
-
-  @param This               Protocol instance pointer.
-  @param Controller         Handle of device to stop driver on.
-  @param NumberOfChildren   Not used.
-  @param ChildHandleBuffer  Not used.
-
-  @retval EFI_SUCCESS   This driver is removed from this device.
-  @retval other         Some error occurs when removing this driver from this device.
-
-**/
-EFI_STATUS
-EFIAPI
-SataControllerStop (
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,
-  IN EFI_HANDLE                     Controller,
-  IN UINTN                          NumberOfChildren,
-  IN EFI_HANDLE                     *ChildHandleBuffer
-  )
-;
-
-//
-// IDE controller init functions declaration
-//
-/**
-  Returns the information about the specified IDE channel.
-
-  This function can be used to obtain information about a particular IDE channel.
-  The driver entity uses this information during the enumeration process.
-
-  If Enabled is set to FALSE, the driver entity will not scan the channel. Note
-  that it will not prevent an operating system driver from scanning the channel.
-
-  For most of today's controllers, MaxDevices will either be 1 or 2. For SATA
-  controllers, this value will always be 1. SATA configurations can contain SATA
-  port multipliers. SATA port multipliers behave like SATA bridges and can support
-  up to 16 devices on the other side. If a SATA port out of the IDE controller
-  is connected to a port multiplier, MaxDevices will be set to the number of SATA
-  devices that the port multiplier supports. Because today's port multipliers
-  support up to fifteen SATA devices, this number can be as large as fifteen. The IDE
-  bus driver is required to scan for the presence of port multipliers behind an SATA
-  controller and enumerate up to MaxDevices number of devices behind the port
-  multiplier.
-
-  In this context, the devices behind a port multiplier constitute a channel.
-
-  @param[in]  This         The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in]  Channel      Zero-based channel number.
-  @param[out] Enabled      TRUE if this channel is enabled.  Disabled channels
-                           are not scanned to see if any devices are present.
-  @param[out] MaxDevices   The maximum number of IDE devices that the bus driver
-                           can expect on this channel.  For the ATA/ATAPI
-                           specification, version 6, this number will either be
-                           one or two. For Serial ATA (SATA) configurations with a
-                           port multiplier, this number can be as large as fifteen.
-
-  @retval EFI_SUCCESS             Information was returned without any errors.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitGetChannelInfo (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  OUT BOOLEAN                           *Enabled,
-  OUT UINT8                             *MaxDevices
-  )
-;
-
-/**
-  The notifications from the driver entity that it is about to enter a certain
-  phase of the IDE channel enumeration process.
-
-  This function can be used to notify the IDE controller driver to perform
-  specific actions, including any chipset-specific initialization, so that the
-  chipset is ready to enter the next phase. Seven notification points are defined
-  at this time.
-
-  More synchronization points may be added as required in the future.
-
-  @param[in] This      The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in] Phase     The phase during enumeration.
-  @param[in] Channel   Zero-based channel number.
-
-  @retval EFI_SUCCESS             The notification was accepted without any errors.
-  @retval EFI_UNSUPPORTED         Phase is not supported.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_NOT_READY           This phase cannot be entered at this time; for
-                                  example, an attempt was made to enter a Phase
-                                  without having entered one or more previous
-                                  Phase.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitNotifyPhase (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN EFI_IDE_CONTROLLER_ENUM_PHASE      Phase,
-  IN UINT8                              Channel
-  )
-;
-
-/**
-  Submits the device information to the IDE controller driver.
-
-  This function is used by the driver entity to pass detailed information about
-  a particular device to the IDE controller driver. The driver entity obtains
-  this information by issuing an ATA or ATAPI IDENTIFY_DEVICE command. IdentifyData
-  is the pointer to the response data buffer. The IdentifyData buffer is owned
-  by the driver entity, and the IDE controller driver must make a local copy
-  of the entire buffer or parts of the buffer as needed. The original IdentifyData
-  buffer pointer may not be valid when
-
-    - EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() or
-    - EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() is called at a later point.
-
-  The IDE controller driver may consult various fields of EFI_IDENTIFY_DATA to
-  compute the optimum mode for the device. These fields are not limited to the
-  timing information. For example, an implementation of the IDE controller driver
-  may examine the vendor and type/mode field to match known bad drives.
-
-  The driver entity may submit drive information in any order, as long as it
-  submits information for all the devices belonging to the enumeration group
-  before EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() is called for any device
-  in that enumeration group. If a device is absent, EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
-  should be called with IdentifyData set to NULL.  The IDE controller driver may
-  not have any other mechanism to know whether a device is present or not. Therefore,
-  setting IdentifyData to NULL does not constitute an error condition.
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData() can be called only once for a
-  given (Channel, Device) pair.
-
-  @param[in] This           A pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in] Channel        Zero-based channel number.
-  @param[in] Device         Zero-based device number on the Channel.
-  @param[in] IdentifyData   The device's response to the ATA IDENTIFY_DEVICE command.
-
-  @retval EFI_SUCCESS             The information was accepted without any errors.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_INVALID_PARAMETER   Device is invalid.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitSubmitData (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  IN UINT8                              Device,
-  IN EFI_IDENTIFY_DATA                  *IdentifyData
-  )
-;
-
-/**
-  Disqualifies specific modes for an IDE device.
-
-  This function allows the driver entity or other drivers (such as platform
-  drivers) to reject certain timing modes and request the IDE controller driver
-  to recalculate modes. This function allows the driver entity and the IDE
-  controller driver to negotiate the timings on a per-device basis. This function
-  is useful in the case of drives that lie about their capabilities. An example
-  is when the IDE device fails to accept the timing modes that are calculated
-  by the IDE controller driver based on the response to the Identify Drive command.
-
-  If the driver entity does not want to limit the ATA timing modes and leave that
-  decision to the IDE controller driver, it can either not call this function for
-  the given device or call this function and set the Valid flag to FALSE for all
-  modes that are listed in EFI_ATA_COLLECTIVE_MODE.
-
-  The driver entity may disqualify modes for a device in any order and any number
-  of times.
-
-  This function can be called multiple times to invalidate multiple modes of the
-  same type (e.g., Programmed Input/Output [PIO] modes 3 and 4). See the ATA/ATAPI
-  specification for more information on PIO modes.
-
-  For Serial ATA (SATA) controllers, this member function can be used to disqualify
-  a higher transfer rate mode on a given channel. For example, a platform driver
-  may inform the IDE controller driver to not use second-generation (Gen2) speeds
-  for a certain SATA drive.
-
-  @param[in] This       The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in] Channel    The zero-based channel number.
-  @param[in] Device     The zero-based device number on the Channel.
-  @param[in] BadModes   The modes that the device does not support and that
-                        should be disqualified.
-
-  @retval EFI_SUCCESS             The modes were accepted without any errors.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_INVALID_PARAMETER   Device is invalid.
-  @retval EFI_INVALID_PARAMETER   IdentifyData is NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitDisqualifyMode (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  IN UINT8                              Device,
-  IN EFI_ATA_COLLECTIVE_MODE            *BadModes
-  )
-;
-
-/**
-  Returns the information about the optimum modes for the specified IDE device.
-
-  This function is used by the driver entity to obtain the optimum ATA modes for
-  a specific device.  The IDE controller driver takes into account the following
-  while calculating the mode:
-    - The IdentifyData inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
-    - The BadModes inputs to EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode()
-
-  The driver entity is required to call EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
-  for all the devices that belong to an enumeration group before calling
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL.CalculateMode() for any device in the same group.
-
-  The IDE controller driver will use controller- and possibly platform-specific
-  algorithms to arrive at SupportedModes.  The IDE controller may base its
-  decision on user preferences and other considerations as well. This function
-  may be called multiple times because the driver entity may renegotiate the mode
-  with the IDE controller driver using EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode().
-
-  The driver entity may collect timing information for various devices in any
-  order. The driver entity is responsible for making sure that all the dependencies
-  are satisfied. For example, the SupportedModes information for device A that
-  was previously returned may become stale after a call to
-  EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyMode() for device B.
-
-  The buffer SupportedModes is allocated by the callee because the caller does
-  not necessarily know the size of the buffer. The type EFI_ATA_COLLECTIVE_MODE
-  is defined in a way that allows for future extensibility and can be of variable
-  length. This memory pool should be deallocated by the caller when it is no
-  longer necessary.
-
-  The IDE controller driver for a Serial ATA (SATA) controller can use this
-  member function to force a lower speed (first-generation [Gen1] speeds on a
-  second-generation [Gen2]-capable hardware).  The IDE controller driver can
-  also allow the driver entity to stay with the speed that has been negotiated
-  by the physical layer.
-
-  @param[in]  This             The pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in]  Channel          A zero-based channel number.
-  @param[in]  Device           A zero-based device number on the Channel.
-  @param[out] SupportedModes   The optimum modes for the device.
-
-  @retval EFI_SUCCESS             SupportedModes was returned.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_INVALID_PARAMETER   Device is invalid.
-  @retval EFI_INVALID_PARAMETER   SupportedModes is NULL.
-  @retval EFI_NOT_READY           Modes cannot be calculated due to a lack of
-                                  data.  This error may happen if
-                                  EFI_IDE_CONTROLLER_INIT_PROTOCOL.SubmitData()
-                                  and EFI_IDE_CONTROLLER_INIT_PROTOCOL.DisqualifyData()
-                                  were not called for at least one drive in the
-                                  same enumeration group.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitCalculateMode (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  IN UINT8                              Device,
-  OUT EFI_ATA_COLLECTIVE_MODE           **SupportedModes
-  )
-;
-
-/**
-  Commands the IDE controller driver to program the IDE controller hardware
-  so that the specified device can operate at the specified mode.
-
-  This function is used by the driver entity to instruct the IDE controller
-  driver to program the IDE controller hardware to the specified modes. This
-  function can be called only once for a particular device. For a Serial ATA
-  (SATA) Advanced Host Controller Interface (AHCI) controller, no controller-
-  specific programming may be required.
-
-  @param[in] This      Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
-  @param[in] Channel   Zero-based channel number.
-  @param[in] Device    Zero-based device number on the Channel.
-  @param[in] Modes     The modes to set.
-
-  @retval EFI_SUCCESS             The command was accepted without any errors.
-  @retval EFI_INVALID_PARAMETER   Channel is invalid (Channel >= ChannelCount).
-  @retval EFI_INVALID_PARAMETER   Device is invalid.
-  @retval EFI_NOT_READY           Modes cannot be set at this time due to lack of data.
-  @retval EFI_DEVICE_ERROR        Modes cannot be set due to hardware failure.
-                                  The driver entity should not use this device.
-
-**/
-EFI_STATUS
-EFIAPI
-IdeInitSetTiming (
-  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL   *This,
-  IN UINT8                              Channel,
-  IN UINT8                              Device,
-  IN EFI_ATA_COLLECTIVE_MODE            *Modes
-  )
-;
-
-//
-// Forward reference declaration
-//
-/**
-  Retrieves a Unicode string that is the user readable name of the UEFI Driver.
-
-  @param This           A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
-  @param Language       A pointer to a three character ISO 639-2 language identifier.
-                        This is the language of the driver name that that the caller
-                        is requesting, and it must match one of the languages specified
-                        in SupportedLanguages.  The number of languages supported by a
-                        driver is up to the driver writer.
-  @param DriverName     A pointer to the Unicode string to return.  This Unicode string
-                        is the name of the driver specified by This in the language
-                        specified by Language.
-
-  @retval EFI_SUCCESS           The Unicode string for the Driver specified by This
-                                and the language specified by Language was returned
-                                in DriverName.
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-  @retval EFI_INVALID_PARAMETER DriverName is NULL.
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support the
-                                language specified by Language.
-**/
-EFI_STATUS
-EFIAPI
-SataControllerComponentNameGetDriverName (
-  IN EFI_COMPONENT_NAME_PROTOCOL    *This,
-  IN CHAR8                          *Language,
-  OUT CHAR16                        **DriverName
-  )
-;
-
-/**
-  Retrieves a Unicode string that is the user readable name of the controller
-  that is being managed by an UEFI Driver.
-
-  @param This                   A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
-  @param ControllerHandle       The handle of a controller that the driver specified by
-                                This is managing.  This handle specifies the controller
-                                whose name is to be returned.
-  @param OPTIONAL   ChildHandle The handle of the child controller to retrieve the name
-                                of.  This is an optional parameter that may be NULL.  It
-                                will be NULL for device drivers.  It will also be NULL
-                                for a bus drivers that wish to retrieve the name of the
-                                bus controller.  It will not be NULL for a bus driver
-                                that wishes to retrieve the name of a child controller.
-  @param Language               A pointer to a three character ISO 639-2 language
-                                identifier.  This is the language of the controller name
-                                that that the caller is requesting, and it must match one
-                                of the languages specified in SupportedLanguages.  The
-                                number of languages supported by a driver is up to the
-                                driver writer.
-  @param ControllerName         A pointer to the Unicode string to return.  This Unicode
-                                string is the name of the controller specified by
-                                ControllerHandle and ChildHandle in the language
-                                specified by Language from the point of view of the
-                                driver specified by This.
-
-  @retval EFI_SUCCESS           The Unicode string for the user readable name in the
-                                language specified by Language for the driver
-                                specified by This was returned in DriverName.
-  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
-  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
-                                EFI_HANDLE.
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
-  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
-                                managing the controller specified by
-                                ControllerHandle and ChildHandle.
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support the
-                                language specified by Language.
-**/
-EFI_STATUS
-EFIAPI
-SataControllerComponentNameGetControllerName (
-  IN EFI_COMPONENT_NAME_PROTOCOL    *This,
-  IN EFI_HANDLE                     ControllerHandle,
-  IN EFI_HANDLE                     ChildHandle OPTIONAL,
-  IN CHAR8                          *Language,
-  OUT CHAR16                        **ControllerName
-  )
-;
-
-#endif
diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf b/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf
deleted file mode 100644
index 383ef90dc08c..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf
+++ /dev/null
@@ -1,85 +0,0 @@ 
-## @file
-#
-#  Component description file for the Sata Controller driver.
-#
-#  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
-#  Copyright (c) 2014 - 2016, AMD 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.
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = SataController
-  FILE_GUID                      = 1c6d1ed1-22ec-4b16-9179-e5cdbf7ddf8d
-  MODULE_TYPE                    = UEFI_DRIVER
-  VERSION_STRING                 = 1.0
-  ENTRY_POINT                    = InitializeSataControllerDriver
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
-#
-
-[Sources]
-  ComponentName.c
-  SataController.c
-  SataController.h
-  PciEmulation.c
-  PciEmulation.h
-  PciRootBridgeIo.c
-  SataRegisters.h
-  InitController.c
-
-[Packages]
-  ArmPkg/ArmPkg.dec
-  ArmPlatformPkg/ArmPlatformPkg.dec
-  MdePkg/MdePkg.dec
-  MdeModulePkg/MdeModulePkg.dec
-  IntelFrameworkPkg/IntelFrameworkPkg.dec
-  EmbeddedPkg/EmbeddedPkg.dec
-  AmdModulePkg/AmdModulePkg.dec
-  OpenPlatformPkg/Platforms/AMD/Styx/AmdStyx.dec
-
-[LibraryClasses]
-  UefiDriverEntryPoint
-  DebugLib
-  UefiLib
-  BaseLib
-  BaseMemoryLib
-  MemoryAllocationLib
-  UefiBootServicesTableLib
-  IoLib
-  AmdSataInit
-
-[Protocols]
-  gEfiPciIoProtocolGuid
-  gEfiIdeControllerInitProtocolGuid
-
-[Pcd]
-  gAmdModulePkgTokenSpaceGuid.PcdSataSerdesBase
-  gAmdModulePkgTokenSpaceGuid.PcdSataSerdesOffset
-  gAmdModulePkgTokenSpaceGuid.PcdSataNumChPerSerdes
-
-  gAmdStyxTokenSpaceGuid.PcdSataCtrlAxiSlvPort
-  gAmdStyxTokenSpaceGuid.PcdSataPortCount
-  gAmdStyxTokenSpaceGuid.PcdSataPi
-  gAmdStyxTokenSpaceGuid.PcdSataPortMode
-  gAmdStyxTokenSpaceGuid.PcdSataSmpsSupport
-  gAmdStyxTokenSpaceGuid.PcdSataSssSupport
-  gAmdStyxTokenSpaceGuid.PcdSataPortCpd
-  gAmdStyxTokenSpaceGuid.PcdSataPortMpsp
-  gAmdStyxTokenSpaceGuid.PcdSata1CtrlAxiSlvPort
-  gAmdStyxTokenSpaceGuid.PcdSata1PortCount
-
-[Depex]
-  TRUE
-
diff --git a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataRegisters.h b/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataRegisters.h
deleted file mode 100644
index ff78f4ac3c67..000000000000
--- a/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataRegisters.h
+++ /dev/null
@@ -1,180 +0,0 @@ 
-/** @file
-  Header file for AHCI mode of ATA host controller.
-
-  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-  Copyright (c) 2014 - 2016, AMD 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 __SATA_REGISTERS_H__
-#define __SATA_REGISTERS_H__
-
-#define EFI_AHCI_BAR_INDEX                     0x05
-
-#define EFI_AHCI_CAPABILITY_OFFSET             0x0000
-#define   EFI_AHCI_CAP_SSS                     BIT27
-#define   EFI_AHCI_CAP_SMPS                    BIT28
-#define   EFI_AHCI_CAP_S64A                    BIT31
-#define EFI_AHCI_GHC_OFFSET                    0x0004
-#define   EFI_AHCI_GHC_RESET                   BIT0
-#define   EFI_AHCI_GHC_IE                      BIT1
-#define   EFI_AHCI_GHC_ENABLE                  BIT31
-#define EFI_AHCI_IS_OFFSET                     0x0008
-#define EFI_AHCI_PI_OFFSET                     0x000C
-
-#define EFI_AHCI_MAX_PORTS                     32
-
-//
-// Refer SATA1.0a spec section 5.2, the Phy detection time should be less than 10ms.
-//
-#define  EFI_AHCI_BUS_PHY_DETECT_TIMEOUT       10
-//
-// Refer SATA1.0a spec, the FIS enable time should be less than 500ms.
-//
-#define  EFI_AHCI_PORT_CMD_FR_CLEAR_TIMEOUT    EFI_TIMER_PERIOD_MILLISECONDS(500)
-//
-// Refer SATA1.0a spec, the bus reset time should be less than 1s.
-//
-#define  EFI_AHCI_BUS_RESET_TIMEOUT            EFI_TIMER_PERIOD_SECONDS(1)
-
-#define  EFI_AHCI_ATAPI_DEVICE_SIG             0xEB140000
-#define  EFI_AHCI_ATA_DEVICE_SIG               0x00000000
-#define  EFI_AHCI_PORT_MULTIPLIER_SIG          0x96690000
-#define  EFI_AHCI_ATAPI_SIG_MASK               0xFFFF0000
-
-//
-// Each PRDT entry can point to a memory block up to 4M byte
-//
-#define EFI_AHCI_MAX_DATA_PER_PRDT             0x400000
-
-#define EFI_AHCI_FIS_REGISTER_H2D              0x27      //Register FIS - Host to Device
-#define   EFI_AHCI_FIS_REGISTER_H2D_LENGTH     20
-#define EFI_AHCI_FIS_REGISTER_D2H              0x34      //Register FIS - Device to Host
-#define   EFI_AHCI_FIS_REGISTER_D2H_LENGTH     20
-#define EFI_AHCI_FIS_DMA_ACTIVATE              0x39      //DMA Activate FIS - Device to Host
-#define   EFI_AHCI_FIS_DMA_ACTIVATE_LENGTH     4
-#define EFI_AHCI_FIS_DMA_SETUP                 0x41      //DMA Setup FIS - Bi-directional
-#define   EFI_AHCI_FIS_DMA_SETUP_LENGTH        28
-#define EFI_AHCI_FIS_DATA                      0x46      //Data FIS - Bi-directional
-#define EFI_AHCI_FIS_BIST                      0x58      //BIST Activate FIS - Bi-directional
-#define   EFI_AHCI_FIS_BIST_LENGTH             12
-#define EFI_AHCI_FIS_PIO_SETUP                 0x5F      //PIO Setup FIS - Device to Host
-#define   EFI_AHCI_FIS_PIO_SETUP_LENGTH        20
-#define EFI_AHCI_FIS_SET_DEVICE                0xA1      //Set Device Bits FIS - Device to Host
-#define   EFI_AHCI_FIS_SET_DEVICE_LENGTH       8
-
-#define EFI_AHCI_D2H_FIS_OFFSET                0x40
-#define EFI_AHCI_DMA_FIS_OFFSET                0x00
-#define EFI_AHCI_PIO_FIS_OFFSET                0x20
-#define EFI_AHCI_SDB_FIS_OFFSET                0x58
-#define EFI_AHCI_FIS_TYPE_MASK                 0xFF
-#define EFI_AHCI_U_FIS_OFFSET                  0x60
-
-//
-// Port register
-//
-#define EFI_AHCI_PORT_START                    0x0100
-#define EFI_AHCI_PORT_REG_WIDTH                0x0080
-#define EFI_AHCI_PORT_CLB                      0x0000
-#define EFI_AHCI_PORT_CLBU                     0x0004
-#define EFI_AHCI_PORT_FB                       0x0008
-#define EFI_AHCI_PORT_FBU                      0x000C
-#define EFI_AHCI_PORT_IS                       0x0010
-#define   EFI_AHCI_PORT_IS_DHRS                BIT0
-#define   EFI_AHCI_PORT_IS_PSS                 BIT1
-#define   EFI_AHCI_PORT_IS_SSS                 BIT2
-#define   EFI_AHCI_PORT_IS_SDBS                BIT3
-#define   EFI_AHCI_PORT_IS_UFS                 BIT4
-#define   EFI_AHCI_PORT_IS_DPS                 BIT5
-#define   EFI_AHCI_PORT_IS_PCS                 BIT6
-#define   EFI_AHCI_PORT_IS_DIS                 BIT7
-#define   EFI_AHCI_PORT_IS_PRCS                BIT22
-#define   EFI_AHCI_PORT_IS_IPMS                BIT23
-#define   EFI_AHCI_PORT_IS_OFS                 BIT24
-#define   EFI_AHCI_PORT_IS_INFS                BIT26
-#define   EFI_AHCI_PORT_IS_IFS                 BIT27
-#define   EFI_AHCI_PORT_IS_HBDS                BIT28
-#define   EFI_AHCI_PORT_IS_HBFS                BIT29
-#define   EFI_AHCI_PORT_IS_TFES                BIT30
-#define   EFI_AHCI_PORT_IS_CPDS                BIT31
-#define   EFI_AHCI_PORT_IS_CLEAR               0xFFFFFFFF
-#define   EFI_AHCI_PORT_IS_FIS_CLEAR           0x0000000F
-
-#define EFI_AHCI_PORT_OFFSET(PortNum) \
-        (EFI_AHCI_PORT_START + ((PortNum) * EFI_AHCI_PORT_REG_WIDTH))
-
-#define EFI_AHCI_PORT_IE                       0x0014
-#define EFI_AHCI_PORT_CMD                      0x0018
-#define   EFI_AHCI_PORT_CMD_ST_MASK            0xFFFFFFFE
-#define   EFI_AHCI_PORT_CMD_ST                 BIT0
-#define   EFI_AHCI_PORT_CMD_SUD                BIT1
-#define   EFI_AHCI_PORT_CMD_POD                BIT2
-#define   EFI_AHCI_PORT_CMD_CLO                BIT3
-#define   EFI_AHCI_PORT_CMD_CR                 BIT15
-#define   EFI_AHCI_PORT_CMD_FRE                BIT4
-#define   EFI_AHCI_PORT_CMD_FR                 BIT14
-#define   EFI_AHCI_PORT_CMD_MASK               ~(EFI_AHCI_PORT_CMD_ST | EFI_AHCI_PORT_CMD_FRE | EFI_AHCI_PORT_CMD_COL)
-#define   EFI_AHCI_PORT_CMD_PMA                BIT17
-#define   EFI_AHCI_PORT_CMD_HPCP               BIT18
-#define   EFI_AHCI_PORT_CMD_MPSP               BIT19
-#define   EFI_AHCI_PORT_CMD_CPD                BIT20
-#define   EFI_AHCI_PORT_CMD_ESP                BIT21
-#define   EFI_AHCI_PORT_CMD_ATAPI              BIT24
-#define   EFI_AHCI_PORT_CMD_DLAE               BIT25
-#define   EFI_AHCI_PORT_CMD_ALPE               BIT26
-#define   EFI_AHCI_PORT_CMD_ASP                BIT27
-#define   EFI_AHCI_PORT_CMD_ICC_MASK           (BIT28 | BIT29 | BIT30 | BIT31)
-#define   EFI_AHCI_PORT_CMD_ACTIVE             (1 << 28 )
-#define EFI_AHCI_PORT_TFD                      0x0020
-#define   EFI_AHCI_PORT_TFD_MASK               (BIT7 | BIT3 | BIT0)
-#define   EFI_AHCI_PORT_TFD_BSY                BIT7
-#define   EFI_AHCI_PORT_TFD_DRQ                BIT3
-#define   EFI_AHCI_PORT_TFD_ERR                BIT0
-#define   EFI_AHCI_PORT_TFD_ERR_MASK           0x00FF00
-#define EFI_AHCI_PORT_SIG                      0x0024
-#define EFI_AHCI_PORT_SSTS                     0x0028
-#define   EFI_AHCI_PORT_SSTS_DET_MASK          0x000F
-#define   EFI_AHCI_PORT_SSTS_DET               0x0001
-#define   EFI_AHCI_PORT_SSTS_DET_PCE           0x0003
-#define   EFI_AHCI_PORT_SSTS_SPD_MASK          0x00F0
-#define EFI_AHCI_PORT_SCTL                     0x002C
-#define   EFI_AHCI_PORT_SCTL_DET_MASK          0x000F
-#define   EFI_AHCI_PORT_SCTL_MASK              (~EFI_AHCI_PORT_SCTL_DET_MASK)
-#define   EFI_AHCI_PORT_SCTL_DET_INIT          0x0001
-#define   EFI_AHCI_PORT_SCTL_DET_PHYCOMM       0x0003
-#define   EFI_AHCI_PORT_SCTL_SPD_MASK          0x00F0
-#define   EFI_AHCI_PORT_SCTL_IPM_MASK          0x0F00
-#define   EFI_AHCI_PORT_SCTL_IPM_INIT          0x0300
-#define   EFI_AHCI_PORT_SCTL_IPM_PSD           0x0100
-#define   EFI_AHCI_PORT_SCTL_IPM_SSD           0x0200
-#define EFI_AHCI_PORT_SERR                     0x0030
-#define   EFI_AHCI_PORT_SERR_RDIE              BIT0
-#define   EFI_AHCI_PORT_SERR_RCE               BIT1
-#define   EFI_AHCI_PORT_SERR_TDIE              BIT8
-#define   EFI_AHCI_PORT_SERR_PCDIE             BIT9
-#define   EFI_AHCI_PORT_SERR_PE                BIT10
-#define   EFI_AHCI_PORT_SERR_IE                BIT11
-#define   EFI_AHCI_PORT_SERR_PRC               BIT16
-#define   EFI_AHCI_PORT_SERR_PIE               BIT17
-#define   EFI_AHCI_PORT_SERR_CW                BIT18
-#define   EFI_AHCI_PORT_SERR_BDE               BIT19
-#define   EFI_AHCI_PORT_SERR_DE                BIT20
-#define   EFI_AHCI_PORT_SERR_CRCE              BIT21
-#define   EFI_AHCI_PORT_SERR_HE                BIT22
-#define   EFI_AHCI_PORT_SERR_LSE               BIT23
-#define   EFI_AHCI_PORT_SERR_TSTE              BIT24
-#define   EFI_AHCI_PORT_SERR_UFT               BIT25
-#define   EFI_AHCI_PORT_SERR_EX                BIT26
-#define   EFI_AHCI_PORT_ERR_CLEAR              0xFFFFFFFF
-#define EFI_AHCI_PORT_SACT                     0x0034
-#define EFI_AHCI_PORT_CI                       0x0038
-#define EFI_AHCI_PORT_SNTF                     0x003C
-
-#endif