]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c
MdeModulePkg/Pci: Fixed Asserts in SCT PCIIO Protocol Test.
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / NonDiscoverablePciDeviceDxe / NonDiscoverablePciDeviceIo.c
index 2d55c96993225b6477839361cec343ce7883a4e7..c3e83003a01c5e79c7b04e82d84722a2bd885ad1 100644 (file)
@@ -93,6 +93,31 @@ PciIoPollMem (
   OUT UINT64                      *Result\r
   )\r
 {\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
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -126,6 +151,31 @@ PciIoPollIo (
   OUT UINT64                      *Result\r
   )\r
 {\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
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -396,6 +446,29 @@ PciIoIoRead (
   IN OUT VOID                         *Buffer\r
   )\r
 {\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
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -425,6 +498,29 @@ PciIoIoWrite (
   IN OUT VOID                         *Buffer\r
   )\r
 {\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
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -556,6 +652,35 @@ PciIoCopyMem (
   IN     UINTN                        Count\r
   )\r
 {\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
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -1265,9 +1390,6 @@ PciIoAttributes (
   NON_DISCOVERABLE_PCI_DEVICE   *Dev;\r
   BOOLEAN                       Enable;\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
-\r
   Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
 \r
   if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) {\r
   Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
 \r
   if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) {\r
@@ -1414,6 +1536,33 @@ PciIoSetBarAttributes (
   IN OUT UINT64                       *Length\r
   )\r
 {\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
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r