]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Pci/PciBusDxe/PciRomTable.c
Update the copyright notice format
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / PciBusDxe / PciRomTable.c
CommitLineData
9060e3ec 1/** @file\r
2 Set up ROM Table for PCI Bus module.\r
3\r
cd5ebaa0
HT
4Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>\r
5This program and the accompanying materials\r
9060e3ec 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
13**/\r
14\r
15#include "PciBus.h"\r
16\r
17//\r
18// PCI ROM image information\r
19//\r
20typedef struct {\r
21 EFI_HANDLE ImageHandle;\r
22 UINTN Seg;\r
23 UINT8 Bus;\r
24 UINT8 Dev;\r
25 UINT8 Func;\r
26 UINT64 RomAddress;\r
27 UINT64 RomLength;\r
28} EFI_PCI_ROM_IMAGE_MAPPING;\r
29\r
30UINTN mNumberOfPciRomImages = 0;\r
31UINTN mMaxNumberOfPciRomImages = 0;\r
32EFI_PCI_ROM_IMAGE_MAPPING *mRomImageTable = NULL;\r
33\r
34/**\r
35 Add the Rom Image to internal database for later PCI light enumeration.\r
36\r
37 @param ImageHandle Option Rom image handle.\r
38 @param Seg Segment of PCI space.\r
39 @param Bus Bus NO of PCI space.\r
40 @param Dev Dev NO of PCI space.\r
41 @param Func Func NO of PCI space.\r
42 @param RomAddress Base address of OptionRom.\r
43 @param RomLength Length of rom image.\r
44\r
45**/\r
46VOID\r
47PciRomAddImageMapping (\r
48 IN EFI_HANDLE ImageHandle,\r
49 IN UINTN Seg,\r
50 IN UINT8 Bus,\r
51 IN UINT8 Dev,\r
52 IN UINT8 Func,\r
53 IN UINT64 RomAddress,\r
54 IN UINT64 RomLength\r
55 )\r
56{\r
57 EFI_PCI_ROM_IMAGE_MAPPING *TempMapping;\r
58\r
59 if (mNumberOfPciRomImages >= mMaxNumberOfPciRomImages) {\r
60\r
61 mMaxNumberOfPciRomImages += 0x20;\r
62\r
63 TempMapping = NULL;\r
64 TempMapping = AllocatePool (mMaxNumberOfPciRomImages * sizeof (EFI_PCI_ROM_IMAGE_MAPPING));\r
65 if (TempMapping == NULL) {\r
66 return ;\r
67 }\r
68\r
69 CopyMem (TempMapping, mRomImageTable, mNumberOfPciRomImages * sizeof (EFI_PCI_ROM_IMAGE_MAPPING));\r
70\r
71 if (mRomImageTable != NULL) {\r
72 FreePool (mRomImageTable);\r
73 }\r
74\r
75 mRomImageTable = TempMapping;\r
76 }\r
77\r
78 mRomImageTable[mNumberOfPciRomImages].ImageHandle = ImageHandle;\r
79 mRomImageTable[mNumberOfPciRomImages].Seg = Seg;\r
80 mRomImageTable[mNumberOfPciRomImages].Bus = Bus;\r
81 mRomImageTable[mNumberOfPciRomImages].Dev = Dev;\r
82 mRomImageTable[mNumberOfPciRomImages].Func = Func;\r
83 mRomImageTable[mNumberOfPciRomImages].RomAddress = RomAddress;\r
84 mRomImageTable[mNumberOfPciRomImages].RomLength = RomLength;\r
85 mNumberOfPciRomImages++;\r
86}\r
87\r
88/**\r
89 Get Option rom driver's mapping for PCI device.\r
90\r
91 @param PciIoDevice Device instance.\r
92\r
93 @retval TRUE Found Image mapping.\r
94 @retval FALSE Cannot found image mapping.\r
95\r
96**/\r
97BOOLEAN\r
98PciRomGetImageMapping (\r
99 IN PCI_IO_DEVICE *PciIoDevice\r
100 )\r
101{\r
102 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
103 UINTN Index;\r
104 BOOLEAN Found;\r
105\r
106 PciRootBridgeIo = PciIoDevice->PciRootBridgeIo;\r
107 Found = FALSE;\r
108\r
109 for (Index = 0; Index < mNumberOfPciRomImages; Index++) {\r
110 if (mRomImageTable[Index].Seg == PciRootBridgeIo->SegmentNumber &&\r
111 mRomImageTable[Index].Bus == PciIoDevice->BusNumber &&\r
112 mRomImageTable[Index].Dev == PciIoDevice->DeviceNumber &&\r
113 mRomImageTable[Index].Func == PciIoDevice->FunctionNumber ) {\r
114 Found = TRUE;\r
115\r
116 if (mRomImageTable[Index].ImageHandle != NULL) {\r
117 AddDriver (PciIoDevice, mRomImageTable[Index].ImageHandle);\r
118 } else {\r
119 PciIoDevice->PciIo.RomImage = (VOID *) (UINTN) mRomImageTable[Index].RomAddress;\r
120 PciIoDevice->PciIo.RomSize = (UINTN) mRomImageTable[Index].RomLength;\r
121 }\r
122 }\r
123 }\r
124\r
125 return Found;\r
126}\r