-/**@file\r
- Option Rom Support for PCI Bus Driver\r
-\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+/** @file\r
+ Set up ROM Table for PCI Bus module.\r
+\r
+Copyright (c) 2006 - 2009, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
#include "PciBus.h"\r
-#include "PciRomTable.h"\r
\r
+//\r
+// PCI ROM image information\r
+//\r
typedef struct {\r
EFI_HANDLE ImageHandle;\r
UINTN Seg;\r
EFI_PCI_ROM_IMAGE_MAPPING *mRomImageTable = NULL;\r
\r
/**\r
- Add the Rom Image to internal database for later PCI light enumeration\r
- \r
- @param ImageHandle Option Rom image handle\r
- @param Seg Segment of PCI space\r
- @param Bus Bus NO of PCI space\r
- @param Dev Dev NO of PCI space\r
- @param Func Func NO of PCI space\r
- @param RomAddress Base address of OptionRom\r
+ Add the Rom Image to internal database for later PCI light enumeration.\r
+\r
+ @param ImageHandle Option Rom image handle.\r
+ @param Seg Segment of PCI space.\r
+ @param Bus Bus NO of PCI space.\r
+ @param Dev Dev NO of PCI space.\r
+ @param Func Func NO of PCI space.\r
+ @param RomAddress Base address of OptionRom.\r
@param RomLength Length of rom image.\r
+\r
**/\r
VOID\r
PciRomAddImageMapping (\r
- IN EFI_HANDLE ImageHandle,\r
- IN UINTN Seg,\r
- IN UINT8 Bus,\r
- IN UINT8 Dev,\r
- IN UINT8 Func,\r
- IN UINT64 RomAddress,\r
- IN UINT64 RomLength\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN UINTN Seg,\r
+ IN UINT8 Bus,\r
+ IN UINT8 Dev,\r
+ IN UINT8 Func,\r
+ IN UINT64 RomAddress,\r
+ IN UINT64 RomLength\r
)\r
{\r
EFI_PCI_ROM_IMAGE_MAPPING *TempMapping;\r
CopyMem (TempMapping, mRomImageTable, mNumberOfPciRomImages * sizeof (EFI_PCI_ROM_IMAGE_MAPPING));\r
\r
if (mRomImageTable != NULL) {\r
- gBS->FreePool (mRomImageTable);\r
+ FreePool (mRomImageTable);\r
}\r
\r
mRomImageTable = TempMapping;\r
mNumberOfPciRomImages++;\r
}\r
\r
-/**\r
- Load all option rom image to PCI driver list.\r
- \r
- @param This Pointer to protocol instance EFI_DRIVER_BINDING_PROTOCOL\r
- @param PciRootBridgeIo Root bridge Io instance\r
- @param PciIoDevice device instance\r
-**/\r
-EFI_STATUS\r
-PciRomGetRomResourceFromPciOptionRomTable (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,\r
- PCI_IO_DEVICE *PciIoDevice\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_PCI_OPTION_ROM_TABLE *PciOptionRomTable;\r
- EFI_PCI_OPTION_ROM_DESCRIPTOR *PciOptionRomDescriptor;\r
- UINTN Index;\r
-\r
- Status = EfiGetSystemConfigurationTable (&gEfiPciOptionRomTableGuid, (VOID **) &PciOptionRomTable);\r
- if (EFI_ERROR (Status)) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- for (Index = 0; Index < PciOptionRomTable->PciOptionRomCount; Index++) {\r
- PciOptionRomDescriptor = &PciOptionRomTable->PciOptionRomDescriptors[Index];\r
- if (PciOptionRomDescriptor->Seg == PciRootBridgeIo->SegmentNumber &&\r
- PciOptionRomDescriptor->Bus == PciIoDevice->BusNumber &&\r
- PciOptionRomDescriptor->Dev == PciIoDevice->DeviceNumber &&\r
- PciOptionRomDescriptor->Func == PciIoDevice->FunctionNumber ) {\r
-\r
- PciIoDevice->PciIo.RomImage = (VOID *) (UINTN) PciOptionRomDescriptor->RomAddress;\r
- PciIoDevice->PciIo.RomSize = (UINTN) PciOptionRomDescriptor->RomLength;\r
- }\r
- }\r
-\r
- for (Index = 0; Index < mNumberOfPciRomImages; Index++) {\r
- if (mRomImageTable[Index].Seg == PciRootBridgeIo->SegmentNumber &&\r
- mRomImageTable[Index].Bus == PciIoDevice->BusNumber &&\r
- mRomImageTable[Index].Dev == PciIoDevice->DeviceNumber &&\r
- mRomImageTable[Index].Func == PciIoDevice->FunctionNumber ) {\r
-\r
- AddDriver (PciIoDevice, mRomImageTable[Index].ImageHandle);\r
- }\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
/**\r
Get Option rom driver's mapping for PCI device.\r
- \r
+\r
@param PciIoDevice Device instance.\r
\r
+ @retval TRUE Found Image mapping.\r
+ @retval FALSE Cannot found image mapping.\r
+\r
**/\r
-EFI_STATUS\r
+BOOLEAN\r
PciRomGetImageMapping (\r
- PCI_IO_DEVICE *PciIoDevice\r
+ IN PCI_IO_DEVICE *PciIoDevice\r
)\r
{\r
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
UINTN Index;\r
+ BOOLEAN Found;\r
\r
PciRootBridgeIo = PciIoDevice->PciRootBridgeIo;\r
+ Found = FALSE;\r
\r
for (Index = 0; Index < mNumberOfPciRomImages; Index++) {\r
if (mRomImageTable[Index].Seg == PciRootBridgeIo->SegmentNumber &&\r
mRomImageTable[Index].Bus == PciIoDevice->BusNumber &&\r
mRomImageTable[Index].Dev == PciIoDevice->DeviceNumber &&\r
mRomImageTable[Index].Func == PciIoDevice->FunctionNumber ) {\r
+ Found = TRUE;\r
\r
if (mRomImageTable[Index].ImageHandle != NULL) {\r
AddDriver (PciIoDevice, mRomImageTable[Index].ImageHandle);\r
}\r
}\r
\r
- return EFI_SUCCESS;\r
+ return Found;\r
}\r