summaryrefslogtreecommitdiff
path: root/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciDriverOverride.c
diff options
context:
space:
mode:
Diffstat (limited to 'EdkModulePkg/Bus/Pci/PciBus/Dxe/PciDriverOverride.c')
-rw-r--r--EdkModulePkg/Bus/Pci/PciBus/Dxe/PciDriverOverride.c143
1 files changed, 12 insertions, 131 deletions
diff --git a/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciDriverOverride.c b/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciDriverOverride.c
index 70ad48b5ec..7643fc87e2 100644
--- a/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciDriverOverride.c
+++ b/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciDriverOverride.c
@@ -1,18 +1,18 @@
/*++
-Copyright (c) 2006, Intel Corporation
-All rights reserved. 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.
+Copyright (c) 2006 - 2007, Intel Corporation
+All rights reserved. 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.
Module Name:
PciDriverOverride.c
-
+
Abstract:
PCI Bus Driver
@@ -34,7 +34,7 @@ Routine Description:
Initializes a PCI Driver Override Instance
Arguments:
-
+
Returns:
None
@@ -60,7 +60,7 @@ Routine Description:
Get a overriding driver image
Arguments:
-
+
Returns:
None
@@ -124,7 +124,7 @@ Routine Description:
Add a overriding driver image
Arguments:
-
+
Returns:
None
@@ -143,16 +143,6 @@ Returns:
EFI_IMAGE_NT_HEADERS *PeHdr;
EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
PCI_DRIVER_OVERRIDE_LIST *Node;
-#if (EFI_SPECIFICATION_VERSION < 0x00020000)
- EFI_DRIVER_OS_HANDOFF_HEADER *DriverOsHandoffHeader;
- EFI_DRIVER_OS_HANDOFF_HEADER *NewDriverOsHandoffHeader;
- EFI_DRIVER_OS_HANDOFF *DriverOsHandoff;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_HANDLE DeviceHandle;
- UINTN NumberOfEntries;
- UINTN Size;
- UINTN Index;
-#endif
Status = gBS->HandleProtocol (DriverImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &LoadedImage);
if (EFI_ERROR (Status)) {
@@ -181,114 +171,5 @@ Returns:
if (PeHdr->FileHeader.Machine != EFI_IMAGE_MACHINE_EBC) {
return EFI_SUCCESS;
}
-
-#if (EFI_SPECIFICATION_VERSION < 0x00020000)
- DriverOsHandoffHeader = NULL;
- Status = EfiGetSystemConfigurationTable (&gEfiUgaIoProtocolGuid, (VOID **) &DriverOsHandoffHeader);
- if (!EFI_ERROR (Status) && DriverOsHandoffHeader != NULL) {
- for (Index = 0; Index < DriverOsHandoffHeader->NumberOfEntries; Index++) {
- DriverOsHandoff = (EFI_DRIVER_OS_HANDOFF *)((UINTN)(DriverOsHandoffHeader) +
- DriverOsHandoffHeader->HeaderSize +
- Index * DriverOsHandoffHeader->SizeOfEntries);
- DevicePath = DriverOsHandoff->DevicePath;
- Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &DevicePath, &DeviceHandle);
- if (!EFI_ERROR (Status) && DeviceHandle != NULL && IsDevicePathEnd (DevicePath)) {
- if (DeviceHandle == PciIoDevice->Handle) {
- return EFI_SUCCESS;
- }
- }
- }
-
- NumberOfEntries = DriverOsHandoffHeader->NumberOfEntries + 1;
- } else {
- NumberOfEntries = 1;
- }
-
- Status = gBS->AllocatePool (
- EfiRuntimeServicesData,
- sizeof (EFI_DRIVER_OS_HANDOFF_HEADER) + NumberOfEntries * sizeof (EFI_DRIVER_OS_HANDOFF),
- (VOID **) &NewDriverOsHandoffHeader
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- if (DriverOsHandoffHeader == NULL) {
- NewDriverOsHandoffHeader->Version = 0;
- NewDriverOsHandoffHeader->HeaderSize = sizeof (EFI_DRIVER_OS_HANDOFF_HEADER);
- NewDriverOsHandoffHeader->SizeOfEntries = sizeof (EFI_DRIVER_OS_HANDOFF);
- NewDriverOsHandoffHeader->NumberOfEntries = (UINT32) NumberOfEntries;
- } else {
- gBS->CopyMem (
- NewDriverOsHandoffHeader,
- DriverOsHandoffHeader,
- DriverOsHandoffHeader->HeaderSize + (NumberOfEntries - 1) * DriverOsHandoffHeader->SizeOfEntries
- );
- NewDriverOsHandoffHeader->NumberOfEntries = (UINT32) NumberOfEntries;
- }
-
- DriverOsHandoff = (EFI_DRIVER_OS_HANDOFF *)((UINTN)NewDriverOsHandoffHeader +
- NewDriverOsHandoffHeader->HeaderSize +
- (NumberOfEntries - 1) * NewDriverOsHandoffHeader->SizeOfEntries);
-
- //
- // Fill in the EFI_DRIVER_OS_HANDOFF structure
- //
- DriverOsHandoff->Type = EfiUgaDriverFromPciRom;
-
- //
- // Compute the size of the device path
- //
- Size = GetDevicePathSize (PciIoDevice->DevicePath);
- if (Size == 0) {
- DriverOsHandoff->DevicePath = NULL;
- } else {
-
- //
- // Allocate space for duplicate device path
- //
- Status = gBS->AllocatePool (
- EfiRuntimeServicesData,
- Size,
- (VOID **) &DriverOsHandoff->DevicePath
- );
- if (EFI_ERROR (Status)) {
- gBS->FreePool (NewDriverOsHandoffHeader);
- return Status;
- }
-
- //
- // Make copy of device path
- //
- CopyMem (DriverOsHandoff->DevicePath, PciIoDevice->DevicePath, Size);
- }
-
- DriverOsHandoff->PciRomSize = (UINT64) PciIoDevice->PciIo.RomSize;
- Status = gBS->AllocatePool (
- EfiRuntimeServicesData,
- (UINTN) DriverOsHandoff->PciRomSize,
- (VOID **) &DriverOsHandoff->PciRomImage
- );
- if (EFI_ERROR (Status)) {
- gBS->FreePool (NewDriverOsHandoffHeader);
- return Status;
- }
-
- gBS->CopyMem (
- DriverOsHandoff->PciRomImage,
- PciIoDevice->PciIo.RomImage,
- (UINTN) DriverOsHandoff->PciRomSize
- );
-
- Status = gBS->InstallConfigurationTable (&gEfiUgaIoProtocolGuid, NewDriverOsHandoffHeader);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- if (DriverOsHandoffHeader != NULL) {
- gBS->FreePool (DriverOsHandoffHeader);
- }
-#endif
-
return EFI_SUCCESS;
}