]> git.proxmox.com Git - mirror_edk2.git/blame - DuetPkg/PciBusNoEnumerationDxe/PciDriverOverride.c
Update the copyright notice format
[mirror_edk2.git] / DuetPkg / PciBusNoEnumerationDxe / PciDriverOverride.c
CommitLineData
10590588 1/*++\r
2\r
b1f700a8
HT
3Copyright (c) 2005 - 2007, Intel Corporation. All rights reserved.<BR>\r
4This program and the accompanying materials \r
10590588 5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
12Module Name:\r
13\r
14 PciDriverOverride.c\r
15 \r
16Abstract:\r
17\r
18 PCI Bus Driver\r
19\r
20Revision History\r
21\r
22--*/\r
23\r
d8bee43c 24#include "PciBus.h"\r
10590588 25\r
26EFI_STATUS\r
27EFIAPI\r
28GetDriver(\r
c7b5f50f 29 IN EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This,\r
10590588 30 IN OUT EFI_HANDLE *DriverImageHandle\r
31 );\r
32\r
33\r
34\r
35EFI_STATUS\r
36InitializePciDriverOverrideInstance (\r
37 PCI_IO_DEVICE *PciIoDevice\r
38 )\r
39/*++\r
40\r
41Routine Description:\r
42\r
43 Initializes a PCI Driver Override Instance\r
44\r
45Arguments:\r
46 \r
47Returns:\r
48\r
49 None\r
50\r
51--*/\r
52\r
53{\r
54 PciIoDevice->PciDriverOverride.GetDriver = GetDriver;\r
55 return EFI_SUCCESS;\r
56}\r
57\r
58EFI_STATUS\r
59EFIAPI\r
60GetDriver (\r
61 IN EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This,\r
62 IN OUT EFI_HANDLE *DriverImageHandle\r
63 )\r
64/*++\r
65\r
66Routine Description:\r
67\r
68 Get a overriding driver image\r
69\r
70Arguments:\r
71 \r
72Returns:\r
73\r
74 None\r
75\r
76--*/\r
77{\r
78 PCI_IO_DEVICE *PciIoDevice;\r
79 LIST_ENTRY *CurrentLink;\r
80 PCI_DRIVER_OVERRIDE_LIST *Node;\r
81\r
82 PciIoDevice = PCI_IO_DEVICE_FROM_PCI_DRIVER_OVERRIDE_THIS (This);\r
83\r
84 CurrentLink = PciIoDevice->OptionRomDriverList.ForwardLink;\r
85\r
86 while (CurrentLink && CurrentLink != &PciIoDevice->OptionRomDriverList) {\r
87\r
88 Node = DRIVER_OVERRIDE_FROM_LINK (CurrentLink);\r
89\r
90 if (*DriverImageHandle == NULL) {\r
91\r
92 *DriverImageHandle = Node->DriverImageHandle;\r
93 return EFI_SUCCESS;\r
94 }\r
95\r
96 if (*DriverImageHandle == Node->DriverImageHandle) {\r
97\r
98 if (CurrentLink->ForwardLink == &PciIoDevice->OptionRomDriverList ||\r
99 CurrentLink->ForwardLink == NULL) {\r
100 return EFI_NOT_FOUND;\r
101 }\r
102\r
103 //\r
104 // Get next node\r
105 //\r
106 Node = DRIVER_OVERRIDE_FROM_LINK (CurrentLink->ForwardLink);\r
107 *DriverImageHandle = Node->DriverImageHandle;\r
108 return EFI_SUCCESS;\r
109 }\r
110\r
111 CurrentLink = CurrentLink->ForwardLink;\r
112 }\r
113\r
114 return EFI_INVALID_PARAMETER;\r
115}\r
116\r
117EFI_STATUS\r
118AddDriver (\r
119 IN PCI_IO_DEVICE *PciIoDevice,\r
120 IN EFI_HANDLE DriverImageHandle\r
121 )\r
122/*++\r
123\r
124Routine Description:\r
125\r
126 Add a overriding driver image\r
127\r
128Arguments:\r
129 \r
130Returns:\r
131\r
132 None\r
133\r
134--*/\r
135\r
136{\r
137 EFI_STATUS Status;\r
10590588 138 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
e8ba34ff 139 PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;\r
10590588 140 PCI_DRIVER_OVERRIDE_LIST *Node;\r
10590588 141\r
142 Status = gBS->HandleProtocol (DriverImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &LoadedImage);\r
143 if (EFI_ERROR (Status)) {\r
144 return Status;\r
145 }\r
146\r
147 Node = AllocatePool (sizeof (PCI_DRIVER_OVERRIDE_LIST));\r
148 if (Node == NULL) {\r
149 return EFI_OUT_OF_RESOURCES;\r
150 }\r
151\r
152 Node->Signature = DRIVER_OVERRIDE_SIGNATURE;\r
153 Node->DriverImageHandle = DriverImageHandle;\r
154\r
155 InsertTailList (&PciIoDevice->OptionRomDriverList, &(Node->Link));\r
156\r
157 PciIoDevice->BusOverride = TRUE;\r
158\r
e8ba34ff 159\r
160 ImageContext.Handle = LoadedImage->ImageBase;\r
161 ImageContext.ImageRead = PeCoffLoaderImageReadFromMemory;\r
162\r
163 //\r
164 // Get information about the image \r
165 //\r
166 Status = PeCoffLoaderGetImageInfo (&ImageContext);\r
167 if (EFI_ERROR (Status)) {\r
10590588 168 return EFI_SUCCESS;\r
169 }\r
170\r
e8ba34ff 171 if (ImageContext.Machine != EFI_IMAGE_MACHINE_EBC) {\r
10590588 172 return EFI_SUCCESS;\r
173 }\r
174\r
10590588 175 return EFI_SUCCESS;\r
176}\r