\r
BarIndex -= (UINT8)Dev->BarOffset;\r
\r
+ if (BarIndex >= Dev->BarCount) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
for (Desc = Dev->Device->Resources;\r
Desc->Desc != ACPI_END_TAG_DESCRIPTOR;\r
Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3)) {\r
EFI_STATUS Status;\r
NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO *MapInfo;\r
\r
+ if (Operation != EfiPciIoOperationBusMasterRead &&\r
+ Operation != EfiPciIoOperationBusMasterWrite &&\r
+ Operation != EfiPciIoOperationBusMasterCommonBuffer) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if (HostAddress == NULL ||\r
+ NumberOfBytes == NULL ||\r
+ DeviceAddress == NULL ||\r
+ Mapping == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
//\r
// 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
return EFI_UNSUPPORTED;\r
}\r
\r
+ if ((MemoryType != EfiBootServicesData) &&\r
+ (MemoryType != EfiRuntimeServicesData)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
//\r
// Allocate below 4 GB if the dual address cycle attribute has not\r
// been set. If the system has no memory available below 4 GB, there\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
\r
Status = CoherentPciIoAllocateBuffer (This, Type, MemoryType, Pages,\r
EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor;\r
BOOLEAN Bounce;\r
\r
+ if (HostAddress == NULL ||\r
+ NumberOfBytes == NULL ||\r
+ DeviceAddress == NULL ||\r
+ Mapping == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if (Operation != EfiPciIoOperationBusMasterRead &&\r
+ Operation != EfiPciIoOperationBusMasterWrite &&\r
+ Operation != EfiPciIoOperationBusMasterCommonBuffer) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
MapInfo = AllocatePool (sizeof *MapInfo);\r
if (MapInfo == NULL) {\r
return EFI_OUT_OF_RESOURCES;\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
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
Enable = FALSE;\r
switch (Operation) {\r
case EfiPciIoAttributeOperationGet:\r
if (Result == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
- *Result = EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE;\r
+ *Result = DEV_SUPPORTED_ATTRIBUTES;\r
break;\r
\r
case EfiPciIoAttributeOperationEnable:\r