-/*++\r
+/** @file\r
+ Set up ROM Table for PCI Bus module.\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
+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
-Module Name:\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
- PciRomTable.c\r
- \r
-Abstract:\r
+**/\r
\r
- Option Rom Support for PCI Bus Driver\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#include "pcibus.h"\r
-#include "PciRomTable.h"\r
+#include "PciBus.h"\r
\r
+//\r
+// PCI ROM image information\r
+//\r
typedef struct {\r
EFI_HANDLE ImageHandle;\r
UINTN Seg;\r
UINT64 RomLength;\r
} EFI_PCI_ROM_IMAGE_MAPPING;\r
\r
-static UINTN mNumberOfPciRomImages = 0;\r
-static UINTN mMaxNumberOfPciRomImages = 0;\r
-static EFI_PCI_ROM_IMAGE_MAPPING *mRomImageTable = NULL;\r
+UINTN mNumberOfPciRomImages = 0;\r
+UINTN mMaxNumberOfPciRomImages = 0;\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
+ @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
-\r
-Routine Description:\r
-\r
- TODO: Add function description\r
-\r
-Arguments:\r
-\r
- ImageHandle - TODO: add argument description\r
- Seg - TODO: add argument description\r
- Bus - TODO: add argument description\r
- Dev - TODO: add argument description\r
- Func - TODO: add argument description\r
- RomAddress - TODO: add argument description\r
- RomLength - TODO: add argument description\r
-\r
-Returns:\r
-\r
- TODO: add return values\r
-\r
---*/\r
{\r
EFI_PCI_ROM_IMAGE_MAPPING *TempMapping;\r
\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
-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
-\r
-Routine Description:\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-// TODO: This - add argument and description to function comment\r
-// TODO: PciRootBridgeIo - add argument and description to function comment\r
-// TODO: PciIoDevice - add argument and description to function comment\r
-// TODO: EFI_NOT_FOUND - add return value to function comment\r
-// TODO: EFI_SUCCESS - add return value to function comment\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
+ Get Option rom driver's mapping for PCI device.\r
\r
- AddDriver (PciIoDevice, mRomImageTable[Index].ImageHandle);\r
- }\r
- }\r
+ @param PciIoDevice Device instance.\r
\r
- return EFI_SUCCESS;\r
-}\r
+ @retval TRUE Found Image mapping.\r
+ @retval FALSE Cannot found image mapping.\r
\r
-EFI_STATUS\r
+**/\r
+BOOLEAN\r
PciRomGetImageMapping (\r
- PCI_IO_DEVICE *PciIoDevice\r
+ IN PCI_IO_DEVICE *PciIoDevice\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-// TODO: PciIoDevice - add argument and description to function comment\r
-// TODO: EFI_SUCCESS - add return value to function comment\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