]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / NonDiscoverablePciDeviceDxe / NonDiscoverablePciDeviceIo.c
index 2d55c96993225b6477839361cec343ce7883a4e7..2fb78d8f9687ab9856e572628732d7dabf0d3670 100644 (file)
 #include <Protocol/PciRootBridgeIo.h>\r
 \r
 typedef struct {\r
-  EFI_PHYSICAL_ADDRESS            AllocAddress;\r
-  VOID                            *HostAddress;\r
-  EFI_PCI_IO_PROTOCOL_OPERATION   Operation;\r
-  UINTN                           NumberOfBytes;\r
+  EFI_PHYSICAL_ADDRESS             AllocAddress;\r
+  VOID                             *HostAddress;\r
+  EFI_PCI_IO_PROTOCOL_OPERATION    Operation;\r
+  UINTN                            NumberOfBytes;\r
 } NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO;\r
 \r
 /**\r
@@ -33,12 +33,12 @@ typedef struct {
 STATIC\r
 EFI_STATUS\r
 GetBarResource (\r
-  IN  NON_DISCOVERABLE_PCI_DEVICE         *Dev,\r
-  IN  UINT8                               BarIndex,\r
-  OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   **Descriptor\r
+  IN  NON_DISCOVERABLE_PCI_DEVICE        *Dev,\r
+  IN  UINT8                              BarIndex,\r
+  OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  **Descriptor\r
   )\r
 {\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
 \r
   if (BarIndex < Dev->BarOffset) {\r
     return EFI_NOT_FOUND;\r
@@ -52,8 +52,8 @@ GetBarResource (
 \r
   for (Desc = Dev->Device->Resources;\r
        Desc->Desc != ACPI_END_TAG_DESCRIPTOR;\r
-       Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3)) {\r
-\r
+       Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3))\r
+  {\r
     if (BarIndex == 0) {\r
       *Descriptor = Desc;\r
       return EFI_SUCCESS;\r
@@ -61,6 +61,7 @@ GetBarResource (
 \r
     BarIndex -= 1;\r
   }\r
+\r
   return EFI_NOT_FOUND;\r
 }\r
 \r
@@ -83,16 +84,41 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoPollMem (\r
-  IN  EFI_PCI_IO_PROTOCOL         *This,\r
-  IN  EFI_PCI_IO_PROTOCOL_WIDTH   Width,\r
-  IN  UINT8                       BarIndex,\r
-  IN  UINT64                      Offset,\r
-  IN  UINT64                      Mask,\r
-  IN  UINT64                      Value,\r
-  IN  UINT64                      Delay,\r
-  OUT UINT64                      *Result\r
+  IN  EFI_PCI_IO_PROTOCOL        *This,\r
+  IN  EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN  UINT8                      BarIndex,\r
+  IN  UINT64                     Offset,\r
+  IN  UINT64                     Mask,\r
+  IN  UINT64                     Value,\r
+  IN  UINT64                     Delay,\r
+  OUT UINT64                     *Result\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
+  UINTN                              Count;\r
+  EFI_STATUS                         Status;\r
+\r
+  if ((UINT32)Width > EfiPciIoWidthUint64) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Result == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev   = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
+  Count = 1;\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -116,16 +142,41 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoPollIo (\r
-  IN  EFI_PCI_IO_PROTOCOL         *This,\r
-  IN  EFI_PCI_IO_PROTOCOL_WIDTH   Width,\r
-  IN  UINT8                       BarIndex,\r
-  IN  UINT64                      Offset,\r
-  IN  UINT64                      Mask,\r
-  IN  UINT64                      Value,\r
-  IN  UINT64                      Delay,\r
-  OUT UINT64                      *Result\r
+  IN  EFI_PCI_IO_PROTOCOL        *This,\r
+  IN  EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN  UINT8                      BarIndex,\r
+  IN  UINT64                     Offset,\r
+  IN  UINT64                     Mask,\r
+  IN  UINT64                     Value,\r
+  IN  UINT64                     Delay,\r
+  OUT UINT64                     *Result\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
+  UINTN                              Count;\r
+  EFI_STATUS                         Status;\r
+\r
+  if ((UINT32)Width > EfiPciIoWidthUint64) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Result == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev   = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
+  Count = 1;\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -150,48 +201,51 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoMemRW (\r
-  IN  EFI_PCI_IO_PROTOCOL_WIDTH   Width,\r
-  IN  UINTN                       Count,\r
-  IN  UINTN                       DstStride,\r
-  IN  VOID                        *Dst,\r
-  IN  UINTN                       SrcStride,\r
-  OUT CONST VOID                  *Src\r
+  IN  EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN  UINTN                      Count,\r
+  IN  UINTN                      DstStride,\r
+  IN  VOID                       *Dst,\r
+  IN  UINTN                      SrcStride,\r
+  OUT CONST VOID                 *Src\r
   )\r
 {\r
-  volatile UINT8             *Dst8;\r
-  volatile UINT16            *Dst16;\r
-  volatile UINT32            *Dst32;\r
-  volatile CONST UINT8       *Src8;\r
-  volatile CONST UINT16      *Src16;\r
-  volatile CONST UINT32      *Src32;\r
+  volatile UINT8         *Dst8;\r
+  volatile UINT16        *Dst16;\r
+  volatile UINT32        *Dst32;\r
+  volatile CONST UINT8   *Src8;\r
+  volatile CONST UINT16  *Src16;\r
+  volatile CONST UINT32  *Src32;\r
 \r
   //\r
   // Loop for each iteration and move the data\r
   //\r
   switch (Width & 0x3) {\r
-  case EfiPciWidthUint8:\r
-    Dst8 = (UINT8 *)Dst;\r
-    Src8 = (UINT8 *)Src;\r
-    for (;Count > 0; Count--, Dst8 += DstStride, Src8 += SrcStride) {\r
-      *Dst8 = *Src8;\r
-    }\r
-    break;\r
-  case EfiPciWidthUint16:\r
-    Dst16 = (UINT16 *)Dst;\r
-    Src16 = (UINT16 *)Src;\r
-    for (;Count > 0; Count--, Dst16 += DstStride, Src16 += SrcStride) {\r
-      *Dst16 = *Src16;\r
-    }\r
-    break;\r
-  case EfiPciWidthUint32:\r
-    Dst32 = (UINT32 *)Dst;\r
-    Src32 = (UINT32 *)Src;\r
-    for (;Count > 0; Count--, Dst32 += DstStride, Src32 += SrcStride) {\r
-      *Dst32 = *Src32;\r
-    }\r
-    break;\r
-  default:\r
-    return EFI_INVALID_PARAMETER;\r
+    case EfiPciWidthUint8:\r
+      Dst8 = (UINT8 *)Dst;\r
+      Src8 = (UINT8 *)Src;\r
+      for ( ; Count > 0; Count--, Dst8 += DstStride, Src8 += SrcStride) {\r
+        *Dst8 = *Src8;\r
+      }\r
+\r
+      break;\r
+    case EfiPciWidthUint16:\r
+      Dst16 = (UINT16 *)Dst;\r
+      Src16 = (UINT16 *)Src;\r
+      for ( ; Count > 0; Count--, Dst16 += DstStride, Src16 += SrcStride) {\r
+        *Dst16 = *Src16;\r
+      }\r
+\r
+      break;\r
+    case EfiPciWidthUint32:\r
+      Dst32 = (UINT32 *)Dst;\r
+      Src32 = (UINT32 *)Src;\r
+      for ( ; Count > 0; Count--, Dst32 += DstStride, Src32 += SrcStride) {\r
+        *Dst32 = *Src32;\r
+      }\r
+\r
+      break;\r
+    default:\r
+      return EFI_INVALID_PARAMETER;\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -221,25 +275,25 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoMemRead (\r
-  IN     EFI_PCI_IO_PROTOCOL          *This,\r
-  IN     EFI_PCI_IO_PROTOCOL_WIDTH    Width,\r
-  IN     UINT8                        BarIndex,\r
-  IN     UINT64                       Offset,\r
-  IN     UINTN                        Count,\r
-  IN OUT VOID                         *Buffer\r
+  IN     EFI_PCI_IO_PROTOCOL        *This,\r
+  IN     EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN     UINT8                      BarIndex,\r
+  IN     UINT64                     Offset,\r
+  IN     UINTN                      Count,\r
+  IN OUT VOID                       *Buffer\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
-  UINTN                               AlignMask;\r
-  VOID                                *Address;\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
-  EFI_STATUS                          Status;\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  UINTN                              AlignMask;\r
+  VOID                               *Address;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
+  EFI_STATUS                         Status;\r
 \r
   if (Buffer == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
 \r
   //\r
   // Only allow accesses to the BARs we emulate\r
@@ -253,34 +307,35 @@ PciIoMemRead (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
-  Address = (VOID *)(UINTN)(Desc->AddrRangeMin + Offset);\r
+  Address   = (VOID *)(UINTN)(Desc->AddrRangeMin + Offset);\r
   AlignMask = (1 << (Width & 0x03)) - 1;\r
   if ((UINTN)Address & AlignMask) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
   switch (Width) {\r
-  case EfiPciIoWidthUint8:\r
-  case EfiPciIoWidthUint16:\r
-  case EfiPciIoWidthUint32:\r
-  case EfiPciIoWidthUint64:\r
-    return PciIoMemRW (Width, Count, 1, Buffer, 1, Address);\r
-\r
-  case EfiPciIoWidthFifoUint8:\r
-  case EfiPciIoWidthFifoUint16:\r
-  case EfiPciIoWidthFifoUint32:\r
-  case EfiPciIoWidthFifoUint64:\r
-    return PciIoMemRW (Width, Count, 1, Buffer, 0, Address);\r
-\r
-  case EfiPciIoWidthFillUint8:\r
-  case EfiPciIoWidthFillUint16:\r
-  case EfiPciIoWidthFillUint32:\r
-  case EfiPciIoWidthFillUint64:\r
-    return PciIoMemRW (Width, Count, 0, Buffer, 1, Address);\r
-\r
-  default:\r
-    break;\r
+    case EfiPciIoWidthUint8:\r
+    case EfiPciIoWidthUint16:\r
+    case EfiPciIoWidthUint32:\r
+    case EfiPciIoWidthUint64:\r
+      return PciIoMemRW (Width, Count, 1, Buffer, 1, Address);\r
+\r
+    case EfiPciIoWidthFifoUint8:\r
+    case EfiPciIoWidthFifoUint16:\r
+    case EfiPciIoWidthFifoUint32:\r
+    case EfiPciIoWidthFifoUint64:\r
+      return PciIoMemRW (Width, Count, 1, Buffer, 0, Address);\r
+\r
+    case EfiPciIoWidthFillUint8:\r
+    case EfiPciIoWidthFillUint16:\r
+    case EfiPciIoWidthFillUint32:\r
+    case EfiPciIoWidthFillUint64:\r
+      return PciIoMemRW (Width, Count, 0, Buffer, 1, Address);\r
+\r
+    default:\r
+      break;\r
   }\r
+\r
   return EFI_INVALID_PARAMETER;\r
 }\r
 \r
@@ -308,25 +363,25 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoMemWrite (\r
-  IN     EFI_PCI_IO_PROTOCOL          *This,\r
-  IN     EFI_PCI_IO_PROTOCOL_WIDTH    Width,\r
-  IN     UINT8                        BarIndex,\r
-  IN     UINT64                       Offset,\r
-  IN     UINTN                        Count,\r
-  IN OUT VOID                         *Buffer\r
+  IN     EFI_PCI_IO_PROTOCOL        *This,\r
+  IN     EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN     UINT8                      BarIndex,\r
+  IN     UINT64                     Offset,\r
+  IN     UINTN                      Count,\r
+  IN OUT VOID                       *Buffer\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
-  UINTN                               AlignMask;\r
-  VOID                                *Address;\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
-  EFI_STATUS                          Status;\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  UINTN                              AlignMask;\r
+  VOID                               *Address;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
+  EFI_STATUS                         Status;\r
 \r
   if (Buffer == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
 \r
   //\r
   // Only allow accesses to the BARs we emulate\r
@@ -340,34 +395,35 @@ PciIoMemWrite (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
-  Address = (VOID *)(UINTN)(Desc->AddrRangeMin + Offset);\r
+  Address   = (VOID *)(UINTN)(Desc->AddrRangeMin + Offset);\r
   AlignMask = (1 << (Width & 0x03)) - 1;\r
   if ((UINTN)Address & AlignMask) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
   switch (Width) {\r
-  case EfiPciIoWidthUint8:\r
-  case EfiPciIoWidthUint16:\r
-  case EfiPciIoWidthUint32:\r
-  case EfiPciIoWidthUint64:\r
-    return PciIoMemRW (Width, Count, 1, Address, 1, Buffer);\r
-\r
-  case EfiPciIoWidthFifoUint8:\r
-  case EfiPciIoWidthFifoUint16:\r
-  case EfiPciIoWidthFifoUint32:\r
-  case EfiPciIoWidthFifoUint64:\r
-    return PciIoMemRW (Width, Count, 0, Address, 1, Buffer);\r
-\r
-  case EfiPciIoWidthFillUint8:\r
-  case EfiPciIoWidthFillUint16:\r
-  case EfiPciIoWidthFillUint32:\r
-  case EfiPciIoWidthFillUint64:\r
-    return PciIoMemRW (Width, Count, 1, Address, 0, Buffer);\r
-\r
-  default:\r
-    break;\r
+    case EfiPciIoWidthUint8:\r
+    case EfiPciIoWidthUint16:\r
+    case EfiPciIoWidthUint32:\r
+    case EfiPciIoWidthUint64:\r
+      return PciIoMemRW (Width, Count, 1, Address, 1, Buffer);\r
+\r
+    case EfiPciIoWidthFifoUint8:\r
+    case EfiPciIoWidthFifoUint16:\r
+    case EfiPciIoWidthFifoUint32:\r
+    case EfiPciIoWidthFifoUint64:\r
+      return PciIoMemRW (Width, Count, 0, Address, 1, Buffer);\r
+\r
+    case EfiPciIoWidthFillUint8:\r
+    case EfiPciIoWidthFillUint16:\r
+    case EfiPciIoWidthFillUint32:\r
+    case EfiPciIoWidthFillUint64:\r
+      return PciIoMemRW (Width, Count, 1, Address, 0, Buffer);\r
+\r
+    default:\r
+      break;\r
   }\r
+\r
   return EFI_INVALID_PARAMETER;\r
 }\r
 \r
@@ -388,14 +444,37 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoIoRead (\r
-  IN EFI_PCI_IO_PROTOCOL              *This,\r
-  IN     EFI_PCI_IO_PROTOCOL_WIDTH    Width,\r
-  IN     UINT8                        BarIndex,\r
-  IN     UINT64                       Offset,\r
-  IN     UINTN                        Count,\r
-  IN OUT VOID                         *Buffer\r
+  IN EFI_PCI_IO_PROTOCOL            *This,\r
+  IN     EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN     UINT8                      BarIndex,\r
+  IN     UINT64                     Offset,\r
+  IN     UINTN                      Count,\r
+  IN OUT VOID                       *Buffer\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
+  EFI_STATUS                         Status;\r
+\r
+  if ((UINT32)Width >= EfiPciIoWidthMaximum) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -417,14 +496,37 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoIoWrite (\r
-  IN     EFI_PCI_IO_PROTOCOL          *This,\r
-  IN     EFI_PCI_IO_PROTOCOL_WIDTH    Width,\r
-  IN     UINT8                        BarIndex,\r
-  IN     UINT64                       Offset,\r
-  IN     UINTN                        Count,\r
-  IN OUT VOID                         *Buffer\r
+  IN     EFI_PCI_IO_PROTOCOL        *This,\r
+  IN     EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN     UINT8                      BarIndex,\r
+  IN     UINT64                     Offset,\r
+  IN     UINTN                      Count,\r
+  IN OUT VOID                       *Buffer\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
+  EFI_STATUS                         Status;\r
+\r
+  if ((UINT32)Width >= EfiPciIoWidthMaximum) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -451,17 +553,17 @@ PciIoPciRead (
   IN OUT VOID                       *Buffer\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE   *Dev;\r
-  VOID                          *Address;\r
-  UINTN                         Length;\r
+  NON_DISCOVERABLE_PCI_DEVICE  *Dev;\r
+  VOID                         *Address;\r
+  UINTN                        Length;\r
 \r
-  if (Width < 0 || Width >= EfiPciIoWidthMaximum || Buffer == NULL) {\r
+  if ((Width < 0) || (Width >= EfiPciIoWidthMaximum) || (Buffer == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev     = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
   Address = (UINT8 *)&Dev->ConfigSpace + Offset;\r
-  Length = Count << ((UINTN)Width & 0x3);\r
+  Length  = Count << ((UINTN)Width & 0x3);\r
 \r
   if (Offset >= sizeof (Dev->ConfigSpace)) {\r
     ZeroMem (Buffer, Length);\r
@@ -478,6 +580,7 @@ PciIoPciRead (
 \r
     Count -= Length >> ((UINTN)Width & 0x3);\r
   }\r
+\r
   return PciIoMemRW (Width, Count, 1, Buffer, 1, Address);\r
 }\r
 \r
@@ -501,21 +604,21 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoPciWrite (\r
-  IN EFI_PCI_IO_PROTOCOL              *This,\r
-  IN     EFI_PCI_IO_PROTOCOL_WIDTH    Width,\r
-  IN     UINT32                       Offset,\r
-  IN     UINTN                        Count,\r
-  IN OUT VOID                         *Buffer\r
+  IN EFI_PCI_IO_PROTOCOL            *This,\r
+  IN     EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN     UINT32                     Offset,\r
+  IN     UINTN                      Count,\r
+  IN OUT VOID                       *Buffer\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE   *Dev;\r
-  VOID                          *Address;\r
+  NON_DISCOVERABLE_PCI_DEVICE  *Dev;\r
+  VOID                         *Address;\r
 \r
-  if (Width < 0 || Width >= EfiPciIoWidthMaximum || Buffer == NULL) {\r
+  if ((Width < 0) || (Width >= EfiPciIoWidthMaximum) || (Buffer == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev     = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
   Address = (UINT8 *)&Dev->ConfigSpace + Offset;\r
 \r
   if (Offset + (Count << ((UINTN)Width & 0x3)) > sizeof (Dev->ConfigSpace)) {\r
@@ -547,15 +650,44 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoCopyMem (\r
-  IN EFI_PCI_IO_PROTOCOL              *This,\r
-  IN     EFI_PCI_IO_PROTOCOL_WIDTH    Width,\r
-  IN     UINT8                        DestBarIndex,\r
-  IN     UINT64                       DestOffset,\r
-  IN     UINT8                        SrcBarIndex,\r
-  IN     UINT64                       SrcOffset,\r
-  IN     UINTN                        Count\r
+  IN EFI_PCI_IO_PROTOCOL            *This,\r
+  IN     EFI_PCI_IO_PROTOCOL_WIDTH  Width,\r
+  IN     UINT8                      DestBarIndex,\r
+  IN     UINT64                     DestOffset,\r
+  IN     UINT8                      SrcBarIndex,\r
+  IN     UINT64                     SrcOffset,\r
+  IN     UINTN                      Count\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *DestDesc;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *SrcDesc;\r
+  EFI_STATUS                         Status;\r
+\r
+  if ((UINT32)Width > EfiPciIoWidthUint64) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
+\r
+  Status = GetBarResource (Dev, DestBarIndex, &DestDesc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (DestOffset + (Count << (Width & 0x3)) > DestDesc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  Status = GetBarResource (Dev, SrcBarIndex, &SrcDesc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (SrcOffset + (Count << (Width & 0x3)) > SrcDesc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -595,16 +727,18 @@ CoherentPciIoMap (
   EFI_STATUS                            Status;\r
   NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO  *MapInfo;\r
 \r
-  if (Operation != EfiPciIoOperationBusMasterRead &&\r
-      Operation != EfiPciIoOperationBusMasterWrite &&\r
-      Operation != EfiPciIoOperationBusMasterCommonBuffer) {\r
+  if ((Operation != EfiPciIoOperationBusMasterRead) &&\r
+      (Operation != EfiPciIoOperationBusMasterWrite) &&\r
+      (Operation != EfiPciIoOperationBusMasterCommonBuffer))\r
+  {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if (HostAddress   == NULL ||\r
-      NumberOfBytes == NULL ||\r
-      DeviceAddress == NULL ||\r
-      Mapping       == NULL) {\r
+  if ((HostAddress   == NULL) ||\r
+      (NumberOfBytes == NULL) ||\r
+      (DeviceAddress == NULL) ||\r
+      (Mapping       == NULL))\r
+  {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -612,10 +746,10 @@ CoherentPciIoMap (
   // If HostAddress exceeds 4 GB, and this device does not support 64-bit DMA\r
   // addressing, we need to allocate a bounce buffer and copy over the data.\r
   //\r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
-  if ((Dev->Attributes & EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) == 0 &&\r
-      (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress + *NumberOfBytes > SIZE_4GB) {\r
-\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
+  if (((Dev->Attributes & EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) == 0) &&\r
+      ((EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress + *NumberOfBytes > SIZE_4GB))\r
+  {\r
     //\r
     // Bounce buffering is not possible for consistent mappings\r
     //\r
@@ -628,14 +762,17 @@ CoherentPciIoMap (
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
-    MapInfo->AllocAddress = MAX_UINT32;\r
-    MapInfo->HostAddress = HostAddress;\r
-    MapInfo->Operation = Operation;\r
+    MapInfo->AllocAddress  = MAX_UINT32;\r
+    MapInfo->HostAddress   = HostAddress;\r
+    MapInfo->Operation     = Operation;\r
     MapInfo->NumberOfBytes = *NumberOfBytes;\r
 \r
-    Status = gBS->AllocatePages (AllocateMaxAddress, EfiBootServicesData,\r
+    Status = gBS->AllocatePages (\r
+                    AllocateMaxAddress,\r
+                    EfiBootServicesData,\r
                     EFI_SIZE_TO_PAGES (MapInfo->NumberOfBytes),\r
-                    &MapInfo->AllocAddress);\r
+                    &MapInfo->AllocAddress\r
+                    );\r
     if (EFI_ERROR (Status)) {\r
       //\r
       // If we fail here, it is likely because the system has no memory below\r
@@ -645,16 +782,22 @@ CoherentPciIoMap (
       FreePool (MapInfo);\r
       return EFI_DEVICE_ERROR;\r
     }\r
+\r
     if (Operation == EfiPciIoOperationBusMasterRead) {\r
-      gBS->CopyMem ((VOID *)(UINTN)MapInfo->AllocAddress, HostAddress,\r
-             *NumberOfBytes);\r
+      gBS->CopyMem (\r
+             (VOID *)(UINTN)MapInfo->AllocAddress,\r
+             HostAddress,\r
+             *NumberOfBytes\r
+             );\r
     }\r
+\r
     *DeviceAddress = MapInfo->AllocAddress;\r
-    *Mapping = MapInfo;\r
+    *Mapping       = MapInfo;\r
   } else {\r
     *DeviceAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress;\r
-    *Mapping = NULL;\r
+    *Mapping       = NULL;\r
   }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -671,8 +814,8 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 CoherentPciIoUnmap (\r
-  IN  EFI_PCI_IO_PROTOCOL          *This,\r
-  IN  VOID                         *Mapping\r
+  IN  EFI_PCI_IO_PROTOCOL  *This,\r
+  IN  VOID                 *Mapping\r
   )\r
 {\r
   NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO  *MapInfo;\r
@@ -680,13 +823,20 @@ CoherentPciIoUnmap (
   MapInfo = Mapping;\r
   if (MapInfo != NULL) {\r
     if (MapInfo->Operation == EfiPciIoOperationBusMasterWrite) {\r
-      gBS->CopyMem (MapInfo->HostAddress, (VOID *)(UINTN)MapInfo->AllocAddress,\r
-             MapInfo->NumberOfBytes);\r
+      gBS->CopyMem (\r
+             MapInfo->HostAddress,\r
+             (VOID *)(UINTN)MapInfo->AllocAddress,\r
+             MapInfo->NumberOfBytes\r
+             );\r
     }\r
-    gBS->FreePages (MapInfo->AllocAddress,\r
-           EFI_SIZE_TO_PAGES (MapInfo->NumberOfBytes));\r
+\r
+    gBS->FreePages (\r
+           MapInfo->AllocAddress,\r
+           EFI_SIZE_TO_PAGES (MapInfo->NumberOfBytes)\r
+           );\r
     FreePool (MapInfo);\r
   }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -713,26 +863,32 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 CoherentPciIoAllocateBuffer (\r
-  IN  EFI_PCI_IO_PROTOCOL         *This,\r
-  IN  EFI_ALLOCATE_TYPE           Type,\r
-  IN  EFI_MEMORY_TYPE             MemoryType,\r
-  IN  UINTN                       Pages,\r
-  OUT VOID                        **HostAddress,\r
-  IN  UINT64                      Attributes\r
+  IN  EFI_PCI_IO_PROTOCOL  *This,\r
+  IN  EFI_ALLOCATE_TYPE    Type,\r
+  IN  EFI_MEMORY_TYPE      MemoryType,\r
+  IN  UINTN                Pages,\r
+  OUT VOID                 **HostAddress,\r
+  IN  UINT64               Attributes\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE       *Dev;\r
-  EFI_PHYSICAL_ADDRESS              AllocAddress;\r
-  EFI_ALLOCATE_TYPE                 AllocType;\r
-  EFI_STATUS                        Status;\r
+  NON_DISCOVERABLE_PCI_DEVICE  *Dev;\r
+  EFI_PHYSICAL_ADDRESS         AllocAddress;\r
+  EFI_ALLOCATE_TYPE            AllocType;\r
+  EFI_STATUS                   Status;\r
 \r
   if ((Attributes & ~(EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE |\r
-                      EFI_PCI_ATTRIBUTE_MEMORY_CACHED)) != 0) {\r
+                      EFI_PCI_ATTRIBUTE_MEMORY_CACHED)) != 0)\r
+  {\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
+  if (HostAddress == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   if ((MemoryType != EfiBootServicesData) &&\r
-      (MemoryType != EfiRuntimeServicesData)) {\r
+      (MemoryType != EfiRuntimeServicesData))\r
+  {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -741,10 +897,10 @@ CoherentPciIoAllocateBuffer (
   // been set. If the system has no memory available below 4 GB, there\r
   // is little we can do except propagate the error.\r
   //\r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
   if ((Dev->Attributes & EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) == 0) {\r
     AllocAddress = MAX_UINT32;\r
-    AllocType = AllocateMaxAddress;\r
+    AllocType    = AllocateMaxAddress;\r
   } else {\r
     AllocType = AllocateAnyPages;\r
   }\r
@@ -753,6 +909,7 @@ CoherentPciIoAllocateBuffer (
   if (!EFI_ERROR (Status)) {\r
     *HostAddress = (VOID *)(UINTN)AllocAddress;\r
   }\r
+\r
   return Status;\r
 }\r
 \r
@@ -770,9 +927,9 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 CoherentPciIoFreeBuffer (\r
-  IN  EFI_PCI_IO_PROTOCOL         *This,\r
-  IN  UINTN                       Pages,\r
-  IN  VOID                        *HostAddress\r
+  IN  EFI_PCI_IO_PROTOCOL  *This,\r
+  IN  UINTN                Pages,\r
+  IN  VOID                 *HostAddress\r
   )\r
 {\r
   FreePages (HostAddress, Pages);\r
@@ -794,34 +951,56 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 NonCoherentPciIoFreeBuffer (\r
-  IN  EFI_PCI_IO_PROTOCOL         *This,\r
-  IN  UINTN                       Pages,\r
-  IN  VOID                        *HostAddress\r
+  IN  EFI_PCI_IO_PROTOCOL  *This,\r
+  IN  UINTN                Pages,\r
+  IN  VOID                 *HostAddress\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE                   *Dev;\r
-  LIST_ENTRY                                    *Entry;\r
-  EFI_STATUS                                    Status;\r
-  NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION   *Alloc;\r
-  BOOLEAN                                       Found;\r
+  NON_DISCOVERABLE_PCI_DEVICE                  *Dev;\r
+  LIST_ENTRY                                   *Entry;\r
+  EFI_STATUS                                   Status;\r
+  NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION  *Alloc;\r
+  NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION  *AllocHead;\r
+  NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION  *AllocTail;\r
+  BOOLEAN                                      Found;\r
+  UINTN                                        StartPages;\r
+  UINTN                                        EndPages;\r
+\r
+  if (HostAddress != ALIGN_POINTER (HostAddress, EFI_PAGE_SIZE)) {\r
+    ASSERT_EFI_ERROR (EFI_INVALID_PARAMETER);\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
 \r
   Found = FALSE;\r
   Alloc = NULL;\r
 \r
+  AllocHead = NULL;\r
+  AllocTail = NULL;\r
+\r
   //\r
   // Find the uncached allocation list entry associated\r
   // with this allocation\r
   //\r
   for (Entry = Dev->UncachedAllocationList.ForwardLink;\r
        Entry != &Dev->UncachedAllocationList;\r
-       Entry = Entry->ForwardLink) {\r
-\r
+       Entry = Entry->ForwardLink)\r
+  {\r
     Alloc = BASE_CR (Entry, NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION, List);\r
-    if (Alloc->HostAddress == HostAddress && Alloc->NumPages == Pages) {\r
+\r
+    StartPages = 0;\r
+    if (Alloc->HostAddress < HostAddress) {\r
+      StartPages = EFI_SIZE_TO_PAGES (\r
+                     (UINTN)HostAddress - (UINTN)Alloc->HostAddress\r
+                     );\r
+    }\r
+\r
+    if ((Alloc->HostAddress <= HostAddress) &&\r
+        (Alloc->NumPages >= (Pages + StartPages)))\r
+    {\r
       //\r
-      // We are freeing the exact allocation we were given\r
+      // We are freeing at least part of what we were given\r
       // before by AllocateBuffer()\r
       //\r
       Found = TRUE;\r
@@ -834,12 +1013,51 @@ NonCoherentPciIoFreeBuffer (
     return EFI_NOT_FOUND;\r
   }\r
 \r
+  EndPages = Alloc->NumPages - (Pages + StartPages);\r
+\r
+  if (StartPages != 0) {\r
+    AllocHead = AllocatePool (sizeof *AllocHead);\r
+    if (AllocHead == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
+\r
+    AllocHead->HostAddress = Alloc->HostAddress;\r
+\r
+    AllocHead->NumPages   = StartPages;\r
+    AllocHead->Attributes = Alloc->Attributes;\r
+  }\r
+\r
+  if (EndPages != 0) {\r
+    AllocTail = AllocatePool (sizeof *AllocTail);\r
+    if (AllocTail == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
+\r
+    AllocTail->HostAddress = (UINT8 *)Alloc->HostAddress +\r
+                             EFI_PAGES_TO_SIZE (Pages + StartPages);\r
+\r
+    AllocTail->NumPages   = EndPages;\r
+    AllocTail->Attributes = Alloc->Attributes;\r
+  }\r
+\r
   RemoveEntryList (&Alloc->List);\r
+  //\r
+  // Record this new sub allocations in the linked list, so we\r
+  // can restore the memory space attributes later\r
+  //\r
+  if (AllocHead != NULL) {\r
+    InsertHeadList (&Dev->UncachedAllocationList, &AllocHead->List);\r
+  }\r
+\r
+  if (AllocTail != NULL) {\r
+    InsertHeadList (&Dev->UncachedAllocationList, &AllocTail->List);\r
+  }\r
 \r
   Status = gDS->SetMemorySpaceAttributes (\r
                   (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress,\r
                   EFI_PAGES_TO_SIZE (Pages),\r
-                  Alloc->Attributes);\r
+                  Alloc->Attributes\r
+                  );\r
   if (EFI_ERROR (Status)) {\r
     goto FreeAlloc;\r
   }\r
@@ -878,36 +1096,43 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 NonCoherentPciIoAllocateBuffer (\r
-  IN  EFI_PCI_IO_PROTOCOL         *This,\r
-  IN  EFI_ALLOCATE_TYPE           Type,\r
-  IN  EFI_MEMORY_TYPE             MemoryType,\r
-  IN  UINTN                       Pages,\r
-  OUT VOID                        **HostAddress,\r
-  IN  UINT64                      Attributes\r
+  IN  EFI_PCI_IO_PROTOCOL  *This,\r
+  IN  EFI_ALLOCATE_TYPE    Type,\r
+  IN  EFI_MEMORY_TYPE      MemoryType,\r
+  IN  UINTN                Pages,\r
+  OUT VOID                 **HostAddress,\r
+  IN  UINT64               Attributes\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE                 *Dev;\r
-  EFI_GCD_MEMORY_SPACE_DESCRIPTOR             GcdDescriptor;\r
-  EFI_STATUS                                  Status;\r
-  UINT64                                      MemType;\r
-  NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *Alloc;\r
-  VOID                                        *AllocAddress;\r
+  NON_DISCOVERABLE_PCI_DEVICE                  *Dev;\r
+  EFI_GCD_MEMORY_SPACE_DESCRIPTOR              GcdDescriptor;\r
+  EFI_STATUS                                   Status;\r
+  UINT64                                       MemType;\r
+  NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION  *Alloc;\r
+  VOID                                         *AllocAddress;\r
 \r
   if (HostAddress == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
 \r
-  Status = CoherentPciIoAllocateBuffer (This, Type, MemoryType, Pages,\r
-             &AllocAddress, Attributes);\r
+  Status = CoherentPciIoAllocateBuffer (\r
+             This,\r
+             Type,\r
+             MemoryType,\r
+             Pages,\r
+             &AllocAddress,\r
+             Attributes\r
+             );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
   Status = gDS->GetMemorySpaceDescriptor (\r
                   (EFI_PHYSICAL_ADDRESS)(UINTN)AllocAddress,\r
-                  &GcdDescriptor);\r
+                  &GcdDescriptor\r
+                  );\r
   if (EFI_ERROR (Status)) {\r
     goto FreeBuffer;\r
   }\r
@@ -920,8 +1145,9 @@ NonCoherentPciIoAllocateBuffer (
   //\r
   // Set the preferred memory attributes\r
   //\r
-  if ((Attributes & EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE) != 0 ||\r
-      (GcdDescriptor.Capabilities & EFI_MEMORY_UC) == 0) {\r
+  if (((Attributes & EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE) != 0) ||\r
+      ((GcdDescriptor.Capabilities & EFI_MEMORY_UC) == 0))\r
+  {\r
     //\r
     // Use write combining if it was requested, or if it is the only\r
     // type supported by the region.\r
@@ -937,8 +1163,8 @@ NonCoherentPciIoAllocateBuffer (
   }\r
 \r
   Alloc->HostAddress = AllocAddress;\r
-  Alloc->NumPages = Pages;\r
-  Alloc->Attributes = GcdDescriptor.Attributes;\r
+  Alloc->NumPages    = Pages;\r
+  Alloc->Attributes  = GcdDescriptor.Attributes;\r
 \r
   //\r
   // Record this allocation in the linked list, so we\r
@@ -949,7 +1175,8 @@ NonCoherentPciIoAllocateBuffer (
   Status = gDS->SetMemorySpaceAttributes (\r
                   (EFI_PHYSICAL_ADDRESS)(UINTN)AllocAddress,\r
                   EFI_PAGES_TO_SIZE (Pages),\r
-                  MemType);\r
+                  MemType\r
+                  );\r
   if (EFI_ERROR (Status)) {\r
     goto RemoveList;\r
   }\r
@@ -958,7 +1185,8 @@ NonCoherentPciIoAllocateBuffer (
                    mCpu,\r
                    (EFI_PHYSICAL_ADDRESS)(UINTN)AllocAddress,\r
                    EFI_PAGES_TO_SIZE (Pages),\r
-                   EfiCpuFlushTypeInvalidate);\r
+                   EfiCpuFlushTypeInvalidate\r
+                   );\r
   if (EFI_ERROR (Status)) {\r
     goto RemoveList;\r
   }\r
@@ -1015,16 +1243,18 @@ NonCoherentPciIoMap (
   EFI_GCD_MEMORY_SPACE_DESCRIPTOR       GcdDescriptor;\r
   BOOLEAN                               Bounce;\r
 \r
-  if (HostAddress   == NULL ||\r
-      NumberOfBytes == NULL ||\r
-      DeviceAddress == NULL ||\r
-      Mapping       == NULL) {\r
+  if ((HostAddress   == NULL) ||\r
+      (NumberOfBytes == NULL) ||\r
+      (DeviceAddress == NULL) ||\r
+      (Mapping       == NULL))\r
+  {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if (Operation != EfiPciIoOperationBusMasterRead &&\r
-      Operation != EfiPciIoOperationBusMasterWrite &&\r
-      Operation != EfiPciIoOperationBusMasterCommonBuffer) {\r
+  if ((Operation != EfiPciIoOperationBusMasterRead) &&\r
+      (Operation != EfiPciIoOperationBusMasterWrite) &&\r
+      (Operation != EfiPciIoOperationBusMasterCommonBuffer))\r
+  {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -1033,11 +1263,11 @@ NonCoherentPciIoMap (
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  MapInfo->HostAddress = HostAddress;\r
-  MapInfo->Operation = Operation;\r
+  MapInfo->HostAddress   = HostAddress;\r
+  MapInfo->Operation     = Operation;\r
   MapInfo->NumberOfBytes = *NumberOfBytes;\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
 \r
   //\r
   // If this device does not support 64-bit DMA addressing, we need to allocate\r
@@ -1048,33 +1278,37 @@ NonCoherentPciIoMap (
 \r
   if (!Bounce) {\r
     switch (Operation) {\r
-    case EfiPciIoOperationBusMasterRead:\r
-    case EfiPciIoOperationBusMasterWrite:\r
-      //\r
-      // For streaming DMA, it is sufficient if the buffer is aligned to\r
-      // the CPUs DMA buffer alignment.\r
-      //\r
-      AlignMask = mCpu->DmaBufferAlignment - 1;\r
-      if ((((UINTN) HostAddress | *NumberOfBytes) & AlignMask) == 0) {\r
-        break;\r
-      }\r
+      case EfiPciIoOperationBusMasterRead:\r
+      case EfiPciIoOperationBusMasterWrite:\r
+        //\r
+        // For streaming DMA, it is sufficient if the buffer is aligned to\r
+        // the CPUs DMA buffer alignment.\r
+        //\r
+        AlignMask = mCpu->DmaBufferAlignment - 1;\r
+        if ((((UINTN)HostAddress | *NumberOfBytes) & AlignMask) == 0) {\r
+          break;\r
+        }\r
+\r
       // fall through\r
 \r
-    case EfiPciIoOperationBusMasterCommonBuffer:\r
-      //\r
-      // Check whether the host address refers to an uncached mapping.\r
-      //\r
-      Status = gDS->GetMemorySpaceDescriptor (\r
-                      (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress,\r
-                      &GcdDescriptor);\r
-      if (EFI_ERROR (Status) ||\r
-          (GcdDescriptor.Attributes & (EFI_MEMORY_WB|EFI_MEMORY_WT)) != 0) {\r
-        Bounce = TRUE;\r
-      }\r
-      break;\r
+      case EfiPciIoOperationBusMasterCommonBuffer:\r
+        //\r
+        // Check whether the host address refers to an uncached mapping.\r
+        //\r
+        Status = gDS->GetMemorySpaceDescriptor (\r
+                        (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress,\r
+                        &GcdDescriptor\r
+                        );\r
+        if (EFI_ERROR (Status) ||\r
+            ((GcdDescriptor.Attributes & (EFI_MEMORY_WB|EFI_MEMORY_WT)) != 0))\r
+        {\r
+          Bounce = TRUE;\r
+        }\r
 \r
-    default:\r
-      ASSERT (FALSE);\r
+        break;\r
+\r
+      default:\r
+        ASSERT (FALSE);\r
     }\r
   }\r
 \r
@@ -1084,20 +1318,27 @@ NonCoherentPciIoMap (
       goto FreeMapInfo;\r
     }\r
 \r
-    Status = NonCoherentPciIoAllocateBuffer (This, AllocateAnyPages,\r
-               EfiBootServicesData, EFI_SIZE_TO_PAGES (MapInfo->NumberOfBytes),\r
-               &AllocAddress, EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE);\r
+    Status = NonCoherentPciIoAllocateBuffer (\r
+               This,\r
+               AllocateAnyPages,\r
+               EfiBootServicesData,\r
+               EFI_SIZE_TO_PAGES (MapInfo->NumberOfBytes),\r
+               &AllocAddress,\r
+               EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE\r
+               );\r
     if (EFI_ERROR (Status)) {\r
       goto FreeMapInfo;\r
     }\r
+\r
     MapInfo->AllocAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)AllocAddress;\r
     if (Operation == EfiPciIoOperationBusMasterRead) {\r
       gBS->CopyMem (AllocAddress, HostAddress, *NumberOfBytes);\r
     }\r
+\r
     *DeviceAddress = MapInfo->AllocAddress;\r
   } else {\r
     MapInfo->AllocAddress = 0;\r
-    *DeviceAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress;\r
+    *DeviceAddress        = (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress;\r
 \r
     //\r
     // We are not using a bounce buffer: the mapping is sufficiently\r
@@ -1109,8 +1350,12 @@ NonCoherentPciIoMap (
     //   may be written back unexpectedly, and clobber the data written to\r
     //   main memory by the device.\r
     //\r
-    mCpu->FlushDataCache (mCpu, (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress,\r
-            *NumberOfBytes, EfiCpuFlushTypeWriteBack);\r
+    mCpu->FlushDataCache (\r
+            mCpu,\r
+            (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress,\r
+            *NumberOfBytes,\r
+            EfiCpuFlushTypeWriteBack\r
+            );\r
   }\r
 \r
   *Mapping = MapInfo;\r
@@ -1135,8 +1380,8 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 NonCoherentPciIoUnmap (\r
-  IN  EFI_PCI_IO_PROTOCOL          *This,\r
-  IN  VOID                         *Mapping\r
+  IN  EFI_PCI_IO_PROTOCOL  *This,\r
+  IN  VOID                 *Mapping\r
   )\r
 {\r
   NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO  *MapInfo;\r
@@ -1152,12 +1397,18 @@ NonCoherentPciIoUnmap (
     // and free the buffer.\r
     //\r
     if (MapInfo->Operation == EfiPciIoOperationBusMasterWrite) {\r
-      gBS->CopyMem (MapInfo->HostAddress, (VOID *)(UINTN)MapInfo->AllocAddress,\r
-             MapInfo->NumberOfBytes);\r
+      gBS->CopyMem (\r
+             MapInfo->HostAddress,\r
+             (VOID *)(UINTN)MapInfo->AllocAddress,\r
+             MapInfo->NumberOfBytes\r
+             );\r
     }\r
-    NonCoherentPciIoFreeBuffer (This,\r
+\r
+    NonCoherentPciIoFreeBuffer (\r
+      This,\r
       EFI_SIZE_TO_PAGES (MapInfo->NumberOfBytes),\r
-      (VOID *)(UINTN)MapInfo->AllocAddress);\r
+      (VOID *)(UINTN)MapInfo->AllocAddress\r
+      );\r
   } else {\r
     //\r
     // We are *not* using a bounce buffer: if this is a bus master write,\r
@@ -1165,11 +1416,15 @@ NonCoherentPciIoUnmap (
     // data written by the device.\r
     //\r
     if (MapInfo->Operation == EfiPciIoOperationBusMasterWrite) {\r
-      mCpu->FlushDataCache (mCpu,\r
+      mCpu->FlushDataCache (\r
+              mCpu,\r
               (EFI_PHYSICAL_ADDRESS)(UINTN)MapInfo->HostAddress,\r
-              MapInfo->NumberOfBytes, EfiCpuFlushTypeInvalidate);\r
+              MapInfo->NumberOfBytes,\r
+              EfiCpuFlushTypeInvalidate\r
+              );\r
     }\r
   }\r
+\r
   FreePool (MapInfo);\r
   return EFI_SUCCESS;\r
 }\r
@@ -1184,7 +1439,7 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoFlush (\r
-  IN EFI_PCI_IO_PROTOCOL          *This\r
+  IN EFI_PCI_IO_PROTOCOL  *This\r
   )\r
 {\r
   return EFI_SUCCESS;\r
@@ -1214,16 +1469,17 @@ PciIoGetLocation (
   OUT  UINTN                *FunctionNumber\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
+  NON_DISCOVERABLE_PCI_DEVICE  *Dev;\r
 \r
-  if (SegmentNumber == NULL ||\r
-      BusNumber == NULL ||\r
-      DeviceNumber == NULL ||\r
-      FunctionNumber == NULL) {\r
+  if ((SegmentNumber == NULL) ||\r
+      (BusNumber == NULL) ||\r
+      (DeviceNumber == NULL) ||\r
+      (FunctionNumber == NULL))\r
+  {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
 \r
   *SegmentNumber  = 0xff;\r
   *BusNumber      = Dev->UniqueId >> 5;\r
@@ -1262,13 +1518,10 @@ PciIoAttributes (
   OUT UINT64                                   *Result OPTIONAL\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE   *Dev;\r
-  BOOLEAN                       Enable;\r
-\r
-  #define DEV_SUPPORTED_ATTRIBUTES \\r
-    (EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE)\r
+  NON_DISCOVERABLE_PCI_DEVICE  *Dev;\r
+  BOOLEAN                      Enable;\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
 \r
   if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) {\r
     return EFI_UNSUPPORTED;\r
@@ -1276,43 +1529,46 @@ PciIoAttributes (
 \r
   Enable = FALSE;\r
   switch (Operation) {\r
-  case EfiPciIoAttributeOperationGet:\r
-    if (Result == NULL) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-    *Result = Dev->Attributes;\r
-    break;\r
+    case EfiPciIoAttributeOperationGet:\r
+      if (Result == NULL) {\r
+        return EFI_INVALID_PARAMETER;\r
+      }\r
 \r
-  case EfiPciIoAttributeOperationSupported:\r
-    if (Result == NULL) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-    *Result = DEV_SUPPORTED_ATTRIBUTES;\r
-    break;\r
+      *Result = Dev->Attributes;\r
+      break;\r
+\r
+    case EfiPciIoAttributeOperationSupported:\r
+      if (Result == NULL) {\r
+        return EFI_INVALID_PARAMETER;\r
+      }\r
 \r
-  case EfiPciIoAttributeOperationEnable:\r
-    Attributes |= Dev->Attributes;\r
-  case EfiPciIoAttributeOperationSet:\r
-    Enable = ((~Dev->Attributes & Attributes) & EFI_PCI_DEVICE_ENABLE) != 0;\r
-    Dev->Attributes = Attributes;\r
-    break;\r
+      *Result = DEV_SUPPORTED_ATTRIBUTES;\r
+      break;\r
 \r
-  case EfiPciIoAttributeOperationDisable:\r
-    Dev->Attributes &= ~Attributes;\r
-    break;\r
+    case EfiPciIoAttributeOperationEnable:\r
+      Attributes |= Dev->Attributes;\r
+    case EfiPciIoAttributeOperationSet:\r
+      Enable          = ((~Dev->Attributes & Attributes) & EFI_PCI_DEVICE_ENABLE) != 0;\r
+      Dev->Attributes = Attributes;\r
+      break;\r
 \r
-  default:\r
-    return EFI_INVALID_PARAMETER;\r
-  };\r
+    case EfiPciIoAttributeOperationDisable:\r
+      Dev->Attributes &= ~Attributes;\r
+      break;\r
+\r
+    default:\r
+      return EFI_INVALID_PARAMETER;\r
+  }\r
 \r
   //\r
   // If we're setting any of the EFI_PCI_DEVICE_ENABLE bits, perform\r
   // the device specific initialization now.\r
   //\r
-  if (Enable && !Dev->Enabled && Dev->Device->Initialize != NULL) {\r
+  if (Enable && !Dev->Enabled && (Dev->Device->Initialize != NULL)) {\r
     Dev->Device->Initialize (Dev->Device);\r
     Dev->Enabled = TRUE;\r
   }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -1342,23 +1598,23 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoGetBarAttributes (\r
-  IN EFI_PCI_IO_PROTOCOL             *This,\r
-  IN  UINT8                          BarIndex,\r
-  OUT UINT64                         *Supports OPTIONAL,\r
-  OUT VOID                           **Resources OPTIONAL\r
+  IN EFI_PCI_IO_PROTOCOL  *This,\r
+  IN  UINT8               BarIndex,\r
+  OUT UINT64              *Supports OPTIONAL,\r
+  OUT VOID                **Resources OPTIONAL\r
   )\r
 {\r
-  NON_DISCOVERABLE_PCI_DEVICE       *Dev;\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;\r
-  EFI_ACPI_END_TAG_DESCRIPTOR       *End;\r
-  EFI_STATUS                        Status;\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Descriptor;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *BarDesc;\r
+  EFI_ACPI_END_TAG_DESCRIPTOR        *End;\r
+  EFI_STATUS                         Status;\r
 \r
-  if (Supports == NULL && Resources == NULL) {\r
+  if ((Supports == NULL) && (Resources == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
 \r
   Status = GetBarResource (Dev, BarIndex, &BarDesc);\r
   if (EFI_ERROR (Status)) {\r
@@ -1373,20 +1629,23 @@ PciIoGetBarAttributes (
   }\r
 \r
   if (Resources != NULL) {\r
-    Descriptor = AllocatePool (sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) +\r
-                               sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));\r
+    Descriptor = AllocatePool (\r
+                   sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) +\r
+                   sizeof (EFI_ACPI_END_TAG_DESCRIPTOR)\r
+                   );\r
     if (Descriptor == NULL) {\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
 \r
     CopyMem (Descriptor, BarDesc, sizeof *Descriptor);\r
 \r
-    End           = (EFI_ACPI_END_TAG_DESCRIPTOR *) (Descriptor + 1);\r
+    End           = (EFI_ACPI_END_TAG_DESCRIPTOR *)(Descriptor + 1);\r
     End->Desc     = ACPI_END_TAG_DESCRIPTOR;\r
     End->Checksum = 0;\r
 \r
     *Resources = Descriptor;\r
   }\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -1407,24 +1666,51 @@ STATIC
 EFI_STATUS\r
 EFIAPI\r
 PciIoSetBarAttributes (\r
-  IN     EFI_PCI_IO_PROTOCOL          *This,\r
-  IN     UINT64                       Attributes,\r
-  IN     UINT8                        BarIndex,\r
-  IN OUT UINT64                       *Offset,\r
-  IN OUT UINT64                       *Length\r
+  IN     EFI_PCI_IO_PROTOCOL  *This,\r
+  IN     UINT64               Attributes,\r
+  IN     UINT8                BarIndex,\r
+  IN OUT UINT64               *Offset,\r
+  IN OUT UINT64               *Length\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE        *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
+  EFI_PCI_IO_PROTOCOL_WIDTH          Width;\r
+  UINTN                              Count;\r
+  EFI_STATUS                         Status;\r
+\r
+  if ((Attributes & (~DEV_SUPPORTED_ATTRIBUTES)) != 0) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  if ((Offset == NULL) || (Length == NULL)) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev   = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO (This);\r
+  Width = EfiPciIoWidthUint8;\r
+  Count = (UINT32)*Length;\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (*Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
 \r
-STATIC CONST EFI_PCI_IO_PROTOCOL PciIoTemplate =\r
+STATIC CONST EFI_PCI_IO_PROTOCOL  PciIoTemplate =\r
 {\r
   PciIoPollMem,\r
   PciIoPollIo,\r
-  { PciIoMemRead, PciIoMemWrite },\r
-  { PciIoIoRead,  PciIoIoWrite },\r
-  { PciIoPciRead, PciIoPciWrite },\r
+  { PciIoMemRead,             PciIoMemWrite    },\r
+  { PciIoIoRead,              PciIoIoWrite     },\r
+  { PciIoPciRead,             PciIoPciWrite    },\r
   PciIoCopyMem,\r
   CoherentPciIoMap,\r
   CoherentPciIoUnmap,\r
@@ -1447,11 +1733,11 @@ STATIC CONST EFI_PCI_IO_PROTOCOL PciIoTemplate =
 **/\r
 VOID\r
 InitializePciIoProtocol (\r
-  NON_DISCOVERABLE_PCI_DEVICE     *Dev\r
+  NON_DISCOVERABLE_PCI_DEVICE  *Dev\r
   )\r
 {\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
-  INTN                                Idx;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR  *Desc;\r
+  INTN                               Idx;\r
 \r
   InitializeListHead (&Dev->UncachedAllocationList);\r
 \r
@@ -1459,62 +1745,83 @@ InitializePciIoProtocol (
   Dev->ConfigSpace.Hdr.DeviceId = PCI_ID_DEVICE_DONTCARE;\r
 \r
   // Copy protocol structure\r
-  CopyMem(&Dev->PciIo, &PciIoTemplate, sizeof PciIoTemplate);\r
+  CopyMem (&Dev->PciIo, &PciIoTemplate, sizeof PciIoTemplate);\r
 \r
   if (Dev->Device->DmaType == NonDiscoverableDeviceDmaTypeNonCoherent) {\r
-    Dev->PciIo.AllocateBuffer   = NonCoherentPciIoAllocateBuffer;\r
-    Dev->PciIo.FreeBuffer       = NonCoherentPciIoFreeBuffer;\r
-    Dev->PciIo.Map              = NonCoherentPciIoMap;\r
-    Dev->PciIo.Unmap            = NonCoherentPciIoUnmap;\r
+    Dev->PciIo.AllocateBuffer = NonCoherentPciIoAllocateBuffer;\r
+    Dev->PciIo.FreeBuffer     = NonCoherentPciIoFreeBuffer;\r
+    Dev->PciIo.Map            = NonCoherentPciIoMap;\r
+    Dev->PciIo.Unmap          = NonCoherentPciIoUnmap;\r
   }\r
 \r
   if (CompareGuid (Dev->Device->Type, &gEdkiiNonDiscoverableAhciDeviceGuid)) {\r
     Dev->ConfigSpace.Hdr.ClassCode[0] = PCI_IF_MASS_STORAGE_AHCI;\r
     Dev->ConfigSpace.Hdr.ClassCode[1] = PCI_CLASS_MASS_STORAGE_SATADPA;\r
     Dev->ConfigSpace.Hdr.ClassCode[2] = PCI_CLASS_MASS_STORAGE;\r
-    Dev->BarOffset = 5;\r
-  } else if (CompareGuid (Dev->Device->Type,\r
-                          &gEdkiiNonDiscoverableEhciDeviceGuid)) {\r
+    Dev->BarOffset                    = 5;\r
+  } else if (CompareGuid (\r
+               Dev->Device->Type,\r
+               &gEdkiiNonDiscoverableEhciDeviceGuid\r
+               ))\r
+  {\r
     Dev->ConfigSpace.Hdr.ClassCode[0] = PCI_IF_EHCI;\r
     Dev->ConfigSpace.Hdr.ClassCode[1] = PCI_CLASS_SERIAL_USB;\r
     Dev->ConfigSpace.Hdr.ClassCode[2] = PCI_CLASS_SERIAL;\r
-    Dev->BarOffset = 0;\r
-  } else if (CompareGuid (Dev->Device->Type,\r
-                          &gEdkiiNonDiscoverableNvmeDeviceGuid)) {\r
+    Dev->BarOffset                    = 0;\r
+  } else if (CompareGuid (\r
+               Dev->Device->Type,\r
+               &gEdkiiNonDiscoverableNvmeDeviceGuid\r
+               ))\r
+  {\r
     Dev->ConfigSpace.Hdr.ClassCode[0] = 0x2; // PCI_IF_NVMHCI\r
     Dev->ConfigSpace.Hdr.ClassCode[1] = 0x8; // PCI_CLASS_MASS_STORAGE_NVM\r
     Dev->ConfigSpace.Hdr.ClassCode[2] = PCI_CLASS_MASS_STORAGE;\r
-    Dev->BarOffset = 0;\r
-  } else if (CompareGuid (Dev->Device->Type,\r
-                          &gEdkiiNonDiscoverableOhciDeviceGuid)) {\r
+    Dev->BarOffset                    = 0;\r
+  } else if (CompareGuid (\r
+               Dev->Device->Type,\r
+               &gEdkiiNonDiscoverableOhciDeviceGuid\r
+               ))\r
+  {\r
     Dev->ConfigSpace.Hdr.ClassCode[0] = PCI_IF_OHCI;\r
     Dev->ConfigSpace.Hdr.ClassCode[1] = PCI_CLASS_SERIAL_USB;\r
     Dev->ConfigSpace.Hdr.ClassCode[2] = PCI_CLASS_SERIAL;\r
-    Dev->BarOffset = 0;\r
-  } else if (CompareGuid (Dev->Device->Type,\r
-                          &gEdkiiNonDiscoverableSdhciDeviceGuid)) {\r
+    Dev->BarOffset                    = 0;\r
+  } else if (CompareGuid (\r
+               Dev->Device->Type,\r
+               &gEdkiiNonDiscoverableSdhciDeviceGuid\r
+               ))\r
+  {\r
     Dev->ConfigSpace.Hdr.ClassCode[0] = 0x0; // don't care\r
     Dev->ConfigSpace.Hdr.ClassCode[1] = PCI_SUBCLASS_SD_HOST_CONTROLLER;\r
     Dev->ConfigSpace.Hdr.ClassCode[2] = PCI_CLASS_SYSTEM_PERIPHERAL;\r
-    Dev->BarOffset = 0;\r
-  } else if (CompareGuid (Dev->Device->Type,\r
-                          &gEdkiiNonDiscoverableXhciDeviceGuid)) {\r
+    Dev->BarOffset                    = 0;\r
+  } else if (CompareGuid (\r
+               Dev->Device->Type,\r
+               &gEdkiiNonDiscoverableXhciDeviceGuid\r
+               ))\r
+  {\r
     Dev->ConfigSpace.Hdr.ClassCode[0] = PCI_IF_XHCI;\r
     Dev->ConfigSpace.Hdr.ClassCode[1] = PCI_CLASS_SERIAL_USB;\r
     Dev->ConfigSpace.Hdr.ClassCode[2] = PCI_CLASS_SERIAL;\r
-    Dev->BarOffset = 0;\r
-  } else if (CompareGuid (Dev->Device->Type,\r
-                          &gEdkiiNonDiscoverableUhciDeviceGuid)) {\r
+    Dev->BarOffset                    = 0;\r
+  } else if (CompareGuid (\r
+               Dev->Device->Type,\r
+               &gEdkiiNonDiscoverableUhciDeviceGuid\r
+               ))\r
+  {\r
     Dev->ConfigSpace.Hdr.ClassCode[0] = PCI_IF_UHCI;\r
     Dev->ConfigSpace.Hdr.ClassCode[1] = PCI_CLASS_SERIAL_USB;\r
     Dev->ConfigSpace.Hdr.ClassCode[2] = PCI_CLASS_SERIAL;\r
-    Dev->BarOffset = 0;\r
-  } else if (CompareGuid (Dev->Device->Type,\r
-                          &gEdkiiNonDiscoverableUfsDeviceGuid)) {\r
+    Dev->BarOffset                    = 0;\r
+  } else if (CompareGuid (\r
+               Dev->Device->Type,\r
+               &gEdkiiNonDiscoverableUfsDeviceGuid\r
+               ))\r
+  {\r
     Dev->ConfigSpace.Hdr.ClassCode[0] = 0x0; // don't care\r
     Dev->ConfigSpace.Hdr.ClassCode[1] = 0x9; // UFS controller subclass;\r
     Dev->ConfigSpace.Hdr.ClassCode[2] = PCI_CLASS_MASS_STORAGE;\r
-    Dev->BarOffset = 0;\r
+    Dev->BarOffset                    = 0;\r
   } else {\r
     ASSERT_EFI_ERROR (EFI_INVALID_PARAMETER);\r
   }\r
@@ -1525,16 +1832,19 @@ InitializePciIoProtocol (
   Idx = Dev->BarOffset;\r
   for (Desc = Dev->Device->Resources, Dev->BarCount = 0;\r
        Desc->Desc != ACPI_END_TAG_DESCRIPTOR;\r
-       Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3)) {\r
-\r
+       Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3))\r
+  {\r
     ASSERT (Desc->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR);\r
     ASSERT (Desc->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM);\r
 \r
-    if (Idx >= PCI_MAX_BARS ||\r
-        (Idx == PCI_MAX_BARS - 1 && Desc->AddrSpaceGranularity == 64)) {\r
-      DEBUG ((DEBUG_ERROR,\r
+    if ((Idx >= PCI_MAX_BAR) ||\r
+        ((Idx == PCI_MAX_BAR - 1) && (Desc->AddrSpaceGranularity == 64)))\r
+    {\r
+      DEBUG ((\r
+        DEBUG_ERROR,\r
         "%a: resource count exceeds number of emulated BARs\n",\r
-        __FUNCTION__));\r
+        __FUNCTION__\r
+        ));\r
       ASSERT (FALSE);\r
       break;\r
     }\r
@@ -1543,9 +1853,11 @@ InitializePciIoProtocol (
     Dev->BarCount++;\r
 \r
     if (Desc->AddrSpaceGranularity == 64) {\r
-      Dev->ConfigSpace.Device.Bar[Idx] |= 0x4;\r
+      Dev->ConfigSpace.Device.Bar[Idx]  |= 0x4;\r
       Dev->ConfigSpace.Device.Bar[++Idx] = (UINT32)RShiftU64 (\r
-                                                     Desc->AddrRangeMin, 32);\r
+                                                     Desc->AddrRangeMin,\r
+                                                     32\r
+                                                     );\r
     }\r
   }\r
 }\r