]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciRomTable.c
1. EDK_RELEASE_VERSION removed;
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / PciBusDxe / PciRomTable.c
CommitLineData
eeefcb9d 1/** @file\r
3db51098 2 Option Rom Support for PCI Bus Driver\r
ead42efc 3\r
4Copyright (c) 2006, Intel Corporation \r
5All rights reserved. This program and the accompanying materials \r
6are licensed and made available under the terms and conditions of the BSD License \r
7which accompanies this distribution. The full text of the license may be found at \r
8http://opensource.org/licenses/bsd-license.php \r
9 \r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12\r
3db51098 13**/\r
ead42efc 14\r
03417d8d 15#include "PciBus.h"\r
ead42efc 16#include "PciRomTable.h"\r
17\r
18typedef struct {\r
19 EFI_HANDLE ImageHandle;\r
20 UINTN Seg;\r
21 UINT8 Bus;\r
22 UINT8 Dev;\r
23 UINT8 Func;\r
24 UINT64 RomAddress;\r
25 UINT64 RomLength;\r
26} EFI_PCI_ROM_IMAGE_MAPPING;\r
27\r
819d1488 28UINTN mNumberOfPciRomImages = 0;\r
29UINTN mMaxNumberOfPciRomImages = 0;\r
30EFI_PCI_ROM_IMAGE_MAPPING *mRomImageTable = NULL;\r
ead42efc 31\r
57076f45 32/**\r
eeefcb9d 33 Add the Rom Image to internal database for later PCI light enumeration.\r
57076f45 34 \r
eeefcb9d 35 @param ImageHandle Option Rom image handle.\r
36 @param Seg Segment of PCI space.\r
37 @param Bus Bus NO of PCI space.\r
38 @param Dev Dev NO of PCI space.\r
39 @param Func Func NO of PCI space.\r
40 @param RomAddress Base address of OptionRom.\r
57076f45 41 @param RomLength Length of rom image.\r
42**/\r
ead42efc 43VOID\r
44PciRomAddImageMapping (\r
45 IN EFI_HANDLE ImageHandle,\r
46 IN UINTN Seg,\r
47 IN UINT8 Bus,\r
48 IN UINT8 Dev,\r
49 IN UINT8 Func,\r
50 IN UINT64 RomAddress,\r
51 IN UINT64 RomLength\r
52 )\r
ead42efc 53{\r
54 EFI_PCI_ROM_IMAGE_MAPPING *TempMapping;\r
55\r
56 if (mNumberOfPciRomImages >= mMaxNumberOfPciRomImages) {\r
57\r
58 mMaxNumberOfPciRomImages += 0x20;\r
59\r
60 TempMapping = NULL;\r
61 TempMapping = AllocatePool (mMaxNumberOfPciRomImages * sizeof (EFI_PCI_ROM_IMAGE_MAPPING));\r
62 if (TempMapping == NULL) {\r
63 return ;\r
64 }\r
65\r
66 CopyMem (TempMapping, mRomImageTable, mNumberOfPciRomImages * sizeof (EFI_PCI_ROM_IMAGE_MAPPING));\r
67\r
68 if (mRomImageTable != NULL) {\r
69 gBS->FreePool (mRomImageTable);\r
70 }\r
71\r
72 mRomImageTable = TempMapping;\r
73 }\r
74\r
75 mRomImageTable[mNumberOfPciRomImages].ImageHandle = ImageHandle;\r
76 mRomImageTable[mNumberOfPciRomImages].Seg = Seg;\r
77 mRomImageTable[mNumberOfPciRomImages].Bus = Bus;\r
78 mRomImageTable[mNumberOfPciRomImages].Dev = Dev;\r
79 mRomImageTable[mNumberOfPciRomImages].Func = Func;\r
80 mRomImageTable[mNumberOfPciRomImages].RomAddress = RomAddress;\r
81 mRomImageTable[mNumberOfPciRomImages].RomLength = RomLength;\r
82 mNumberOfPciRomImages++;\r
83}\r
84\r
57076f45 85/**\r
86 Get Option rom driver's mapping for PCI device.\r
87 \r
88 @param PciIoDevice Device instance.\r
89\r
8e6b0dcb 90 @retval TRUE Found Image mapping.\r
91 @retval FALSE\r
92\r
57076f45 93**/\r
8e6b0dcb 94BOOLEAN\r
ead42efc 95PciRomGetImageMapping (\r
96 PCI_IO_DEVICE *PciIoDevice\r
97 )\r
ead42efc 98{\r
99 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
100 UINTN Index;\r
8e6b0dcb 101 BOOLEAN Found;\r
ead42efc 102\r
103 PciRootBridgeIo = PciIoDevice->PciRootBridgeIo;\r
8e6b0dcb 104 Found = FALSE;\r
ead42efc 105\r
106 for (Index = 0; Index < mNumberOfPciRomImages; Index++) {\r
107 if (mRomImageTable[Index].Seg == PciRootBridgeIo->SegmentNumber &&\r
108 mRomImageTable[Index].Bus == PciIoDevice->BusNumber &&\r
109 mRomImageTable[Index].Dev == PciIoDevice->DeviceNumber &&\r
110 mRomImageTable[Index].Func == PciIoDevice->FunctionNumber ) {\r
8e6b0dcb 111 Found = TRUE;\r
ead42efc 112\r
113 if (mRomImageTable[Index].ImageHandle != NULL) {\r
114 AddDriver (PciIoDevice, mRomImageTable[Index].ImageHandle);\r
115 } else {\r
116 PciIoDevice->PciIo.RomImage = (VOID *) (UINTN) mRomImageTable[Index].RomAddress;\r
117 PciIoDevice->PciIo.RomSize = (UINTN) mRomImageTable[Index].RomLength;\r
118 }\r
119 }\r
120 }\r
121\r
8e6b0dcb 122 return Found;\r
ead42efc 123}\r