2 Option Rom Support for PCI Bus Driver
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include "PciRomTable.h"
19 EFI_HANDLE ImageHandle
;
26 } EFI_PCI_ROM_IMAGE_MAPPING
;
28 UINTN mNumberOfPciRomImages
= 0;
29 UINTN mMaxNumberOfPciRomImages
= 0;
30 EFI_PCI_ROM_IMAGE_MAPPING
*mRomImageTable
= NULL
;
33 Add the Rom Image to internal database for later PCI light enumeration.
35 @param ImageHandle Option Rom image handle.
36 @param Seg Segment of PCI space.
37 @param Bus Bus NO of PCI space.
38 @param Dev Dev NO of PCI space.
39 @param Func Func NO of PCI space.
40 @param RomAddress Base address of OptionRom.
41 @param RomLength Length of rom image.
44 PciRomAddImageMapping (
45 IN EFI_HANDLE ImageHandle
,
54 EFI_PCI_ROM_IMAGE_MAPPING
*TempMapping
;
56 if (mNumberOfPciRomImages
>= mMaxNumberOfPciRomImages
) {
58 mMaxNumberOfPciRomImages
+= 0x20;
61 TempMapping
= AllocatePool (mMaxNumberOfPciRomImages
* sizeof (EFI_PCI_ROM_IMAGE_MAPPING
));
62 if (TempMapping
== NULL
) {
66 CopyMem (TempMapping
, mRomImageTable
, mNumberOfPciRomImages
* sizeof (EFI_PCI_ROM_IMAGE_MAPPING
));
68 if (mRomImageTable
!= NULL
) {
69 gBS
->FreePool (mRomImageTable
);
72 mRomImageTable
= TempMapping
;
75 mRomImageTable
[mNumberOfPciRomImages
].ImageHandle
= ImageHandle
;
76 mRomImageTable
[mNumberOfPciRomImages
].Seg
= Seg
;
77 mRomImageTable
[mNumberOfPciRomImages
].Bus
= Bus
;
78 mRomImageTable
[mNumberOfPciRomImages
].Dev
= Dev
;
79 mRomImageTable
[mNumberOfPciRomImages
].Func
= Func
;
80 mRomImageTable
[mNumberOfPciRomImages
].RomAddress
= RomAddress
;
81 mRomImageTable
[mNumberOfPciRomImages
].RomLength
= RomLength
;
82 mNumberOfPciRomImages
++;
86 Get Option rom driver's mapping for PCI device.
88 @param PciIoDevice Device instance.
90 @retval TRUE Found Image mapping.
95 PciRomGetImageMapping (
96 PCI_IO_DEVICE
*PciIoDevice
99 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*PciRootBridgeIo
;
103 PciRootBridgeIo
= PciIoDevice
->PciRootBridgeIo
;
106 for (Index
= 0; Index
< mNumberOfPciRomImages
; Index
++) {
107 if (mRomImageTable
[Index
].Seg
== PciRootBridgeIo
->SegmentNumber
&&
108 mRomImageTable
[Index
].Bus
== PciIoDevice
->BusNumber
&&
109 mRomImageTable
[Index
].Dev
== PciIoDevice
->DeviceNumber
&&
110 mRomImageTable
[Index
].Func
== PciIoDevice
->FunctionNumber
) {
113 if (mRomImageTable
[Index
].ImageHandle
!= NULL
) {
114 AddDriver (PciIoDevice
, mRomImageTable
[Index
].ImageHandle
);
116 PciIoDevice
->PciIo
.RomImage
= (VOID
*) (UINTN
) mRomImageTable
[Index
].RomAddress
;
117 PciIoDevice
->PciIo
.RomSize
= (UINTN
) mRomImageTable
[Index
].RomLength
;