]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciRomTable.c
Correct all header files for doxygen format and correct the license issue for VgaClas...
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / PciBusDxe / PciRomTable.c
CommitLineData
3db51098 1/**@file\r
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
15#include "pcibus.h"\r
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
28static UINTN mNumberOfPciRomImages = 0;\r
29static UINTN mMaxNumberOfPciRomImages = 0;\r
30static EFI_PCI_ROM_IMAGE_MAPPING *mRomImageTable = NULL;\r
31\r
32VOID\r
33PciRomAddImageMapping (\r
34 IN EFI_HANDLE ImageHandle,\r
35 IN UINTN Seg,\r
36 IN UINT8 Bus,\r
37 IN UINT8 Dev,\r
38 IN UINT8 Func,\r
39 IN UINT64 RomAddress,\r
40 IN UINT64 RomLength\r
41 )\r
42/*++\r
43\r
44Routine Description:\r
45\r
46 TODO: Add function description\r
47\r
48Arguments:\r
49\r
50 ImageHandle - TODO: add argument description\r
51 Seg - TODO: add argument description\r
52 Bus - TODO: add argument description\r
53 Dev - TODO: add argument description\r
54 Func - TODO: add argument description\r
55 RomAddress - TODO: add argument description\r
56 RomLength - TODO: add argument description\r
57\r
58Returns:\r
59\r
60 TODO: add return values\r
61\r
62--*/\r
63{\r
64 EFI_PCI_ROM_IMAGE_MAPPING *TempMapping;\r
65\r
66 if (mNumberOfPciRomImages >= mMaxNumberOfPciRomImages) {\r
67\r
68 mMaxNumberOfPciRomImages += 0x20;\r
69\r
70 TempMapping = NULL;\r
71 TempMapping = AllocatePool (mMaxNumberOfPciRomImages * sizeof (EFI_PCI_ROM_IMAGE_MAPPING));\r
72 if (TempMapping == NULL) {\r
73 return ;\r
74 }\r
75\r
76 CopyMem (TempMapping, mRomImageTable, mNumberOfPciRomImages * sizeof (EFI_PCI_ROM_IMAGE_MAPPING));\r
77\r
78 if (mRomImageTable != NULL) {\r
79 gBS->FreePool (mRomImageTable);\r
80 }\r
81\r
82 mRomImageTable = TempMapping;\r
83 }\r
84\r
85 mRomImageTable[mNumberOfPciRomImages].ImageHandle = ImageHandle;\r
86 mRomImageTable[mNumberOfPciRomImages].Seg = Seg;\r
87 mRomImageTable[mNumberOfPciRomImages].Bus = Bus;\r
88 mRomImageTable[mNumberOfPciRomImages].Dev = Dev;\r
89 mRomImageTable[mNumberOfPciRomImages].Func = Func;\r
90 mRomImageTable[mNumberOfPciRomImages].RomAddress = RomAddress;\r
91 mRomImageTable[mNumberOfPciRomImages].RomLength = RomLength;\r
92 mNumberOfPciRomImages++;\r
93}\r
94\r
95EFI_STATUS\r
96PciRomGetRomResourceFromPciOptionRomTable (\r
97 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
98 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,\r
99 PCI_IO_DEVICE *PciIoDevice\r
100 )\r
101/*++\r
102\r
103Routine Description:\r
104\r
105Arguments:\r
106\r
107Returns:\r
108\r
109--*/\r
110// TODO: This - add argument and description to function comment\r
111// TODO: PciRootBridgeIo - add argument and description to function comment\r
112// TODO: PciIoDevice - add argument and description to function comment\r
113// TODO: EFI_NOT_FOUND - add return value to function comment\r
114// TODO: EFI_SUCCESS - add return value to function comment\r
115{\r
116 EFI_STATUS Status;\r
117 EFI_PCI_OPTION_ROM_TABLE *PciOptionRomTable;\r
118 EFI_PCI_OPTION_ROM_DESCRIPTOR *PciOptionRomDescriptor;\r
119 UINTN Index;\r
120\r
121 Status = EfiGetSystemConfigurationTable (&gEfiPciOptionRomTableGuid, (VOID **) &PciOptionRomTable);\r
122 if (EFI_ERROR (Status)) {\r
123 return EFI_NOT_FOUND;\r
124 }\r
125\r
126 for (Index = 0; Index < PciOptionRomTable->PciOptionRomCount; Index++) {\r
127 PciOptionRomDescriptor = &PciOptionRomTable->PciOptionRomDescriptors[Index];\r
128 if (PciOptionRomDescriptor->Seg == PciRootBridgeIo->SegmentNumber &&\r
129 PciOptionRomDescriptor->Bus == PciIoDevice->BusNumber &&\r
130 PciOptionRomDescriptor->Dev == PciIoDevice->DeviceNumber &&\r
131 PciOptionRomDescriptor->Func == PciIoDevice->FunctionNumber ) {\r
132\r
133 PciIoDevice->PciIo.RomImage = (VOID *) (UINTN) PciOptionRomDescriptor->RomAddress;\r
134 PciIoDevice->PciIo.RomSize = (UINTN) PciOptionRomDescriptor->RomLength;\r
135 }\r
136 }\r
137\r
138 for (Index = 0; Index < mNumberOfPciRomImages; Index++) {\r
139 if (mRomImageTable[Index].Seg == PciRootBridgeIo->SegmentNumber &&\r
140 mRomImageTable[Index].Bus == PciIoDevice->BusNumber &&\r
141 mRomImageTable[Index].Dev == PciIoDevice->DeviceNumber &&\r
142 mRomImageTable[Index].Func == PciIoDevice->FunctionNumber ) {\r
143\r
144 AddDriver (PciIoDevice, mRomImageTable[Index].ImageHandle);\r
145 }\r
146 }\r
147\r
148 return EFI_SUCCESS;\r
149}\r
150\r
151EFI_STATUS\r
152PciRomGetImageMapping (\r
153 PCI_IO_DEVICE *PciIoDevice\r
154 )\r
155/*++\r
156\r
157Routine Description:\r
158\r
159Arguments:\r
160\r
161Returns:\r
162\r
163--*/\r
164// TODO: PciIoDevice - add argument and description to function comment\r
165// TODO: EFI_SUCCESS - add return value to function comment\r
166{\r
167 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
168 UINTN Index;\r
169\r
170 PciRootBridgeIo = PciIoDevice->PciRootBridgeIo;\r
171\r
172 for (Index = 0; Index < mNumberOfPciRomImages; Index++) {\r
173 if (mRomImageTable[Index].Seg == PciRootBridgeIo->SegmentNumber &&\r
174 mRomImageTable[Index].Bus == PciIoDevice->BusNumber &&\r
175 mRomImageTable[Index].Dev == PciIoDevice->DeviceNumber &&\r
176 mRomImageTable[Index].Func == PciIoDevice->FunctionNumber ) {\r
177\r
178 if (mRomImageTable[Index].ImageHandle != NULL) {\r
179 AddDriver (PciIoDevice, mRomImageTable[Index].ImageHandle);\r
180 } else {\r
181 PciIoDevice->PciIo.RomImage = (VOID *) (UINTN) mRomImageTable[Index].RomAddress;\r
182 PciIoDevice->PciIo.RomSize = (UINTN) mRomImageTable[Index].RomLength;\r
183 }\r
184 }\r
185 }\r
186\r
187 return EFI_SUCCESS;\r
188}\r