]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciDriverOverride.c
Remove ambiguous auto-increment usage. (gcc warning)
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / PciBusDxe / PciDriverOverride.c
CommitLineData
3db51098 1/**@file\r
ead42efc 2\r
3db51098 3Copyright (c) 2006, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
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
ead42efc 11\r
3db51098 12**/\r
ead42efc 13\r
ead42efc 14\r
15#include "pcibus.h"\r
16\r
17EFI_STATUS\r
18InitializePciDriverOverrideInstance (\r
19 PCI_IO_DEVICE *PciIoDevice\r
20 )\r
21/*++\r
22\r
23Routine Description:\r
24\r
25 Initializes a PCI Driver Override Instance\r
26\r
27Arguments:\r
28\r
29Returns:\r
30\r
31 None\r
32\r
33--*/\r
34// TODO: PciIoDevice - add argument and description to function comment\r
35// TODO: EFI_SUCCESS - add return value to function comment\r
36{\r
37 PciIoDevice->PciDriverOverride.GetDriver = GetDriver;\r
38 return EFI_SUCCESS;\r
39}\r
40\r
41EFI_STATUS\r
42EFIAPI\r
43GetDriver (\r
44 IN EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *This,\r
45 IN OUT EFI_HANDLE *DriverImageHandle\r
46 )\r
47/*++\r
48\r
49Routine Description:\r
50\r
51 Get a overriding driver image\r
52\r
53Arguments:\r
54\r
55Returns:\r
56\r
57 None\r
58\r
59--*/\r
60// TODO: This - add argument and description to function comment\r
61// TODO: DriverImageHandle - add argument and description to function comment\r
62// TODO: EFI_SUCCESS - add return value to function comment\r
63// TODO: EFI_NOT_FOUND - add return value to function comment\r
64// TODO: EFI_SUCCESS - add return value to function comment\r
65// TODO: EFI_INVALID_PARAMETER - add return value to function comment\r
66{\r
67 PCI_IO_DEVICE *PciIoDevice;\r
68 LIST_ENTRY *CurrentLink;\r
69 PCI_DRIVER_OVERRIDE_LIST *Node;\r
70\r
71 PciIoDevice = PCI_IO_DEVICE_FROM_PCI_DRIVER_OVERRIDE_THIS (This);\r
72\r
73 CurrentLink = PciIoDevice->OptionRomDriverList.ForwardLink;\r
74\r
75 while (CurrentLink && CurrentLink != &PciIoDevice->OptionRomDriverList) {\r
76\r
77 Node = DRIVER_OVERRIDE_FROM_LINK (CurrentLink);\r
78\r
79 if (*DriverImageHandle == NULL) {\r
80\r
81 *DriverImageHandle = Node->DriverImageHandle;\r
82 return EFI_SUCCESS;\r
83 }\r
84\r
85 if (*DriverImageHandle == Node->DriverImageHandle) {\r
86\r
87 if (CurrentLink->ForwardLink == &PciIoDevice->OptionRomDriverList ||\r
88 CurrentLink->ForwardLink == NULL) {\r
89 return EFI_NOT_FOUND;\r
90 }\r
91\r
92 //\r
93 // Get next node\r
94 //\r
95 Node = DRIVER_OVERRIDE_FROM_LINK (CurrentLink->ForwardLink);\r
96 *DriverImageHandle = Node->DriverImageHandle;\r
97 return EFI_SUCCESS;\r
98 }\r
99\r
100 CurrentLink = CurrentLink->ForwardLink;\r
101 }\r
102\r
103 return EFI_INVALID_PARAMETER;\r
104}\r
105\r
106EFI_STATUS\r
107AddDriver (\r
108 IN PCI_IO_DEVICE *PciIoDevice,\r
109 IN EFI_HANDLE DriverImageHandle\r
110 )\r
111/*++\r
112\r
113Routine Description:\r
114\r
115 Add a overriding driver image\r
116\r
117Arguments:\r
118\r
119Returns:\r
120\r
121 None\r
122\r
123--*/\r
124// TODO: PciIoDevice - add argument and description to function comment\r
125// TODO: DriverImageHandle - add argument and description to function comment\r
126// TODO: EFI_OUT_OF_RESOURCES - add return value to function comment\r
127// TODO: EFI_SUCCESS - add return value to function comment\r
128// TODO: EFI_SUCCESS - add return value to function comment\r
129// TODO: EFI_SUCCESS - add return value to function comment\r
130// TODO: EFI_SUCCESS - add return value to function comment\r
131{\r
132 EFI_STATUS Status;\r
133 EFI_IMAGE_DOS_HEADER *DosHdr;\r
134 EFI_IMAGE_NT_HEADERS *PeHdr;\r
135 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
136 PCI_DRIVER_OVERRIDE_LIST *Node;\r
137\r
138 Status = gBS->HandleProtocol (DriverImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &LoadedImage);\r
139 if (EFI_ERROR (Status)) {\r
140 return Status;\r
141 }\r
142\r
143 Node = AllocatePool (sizeof (PCI_DRIVER_OVERRIDE_LIST));\r
144 if (Node == NULL) {\r
145 return EFI_OUT_OF_RESOURCES;\r
146 }\r
147\r
148 Node->Signature = DRIVER_OVERRIDE_SIGNATURE;\r
149 Node->DriverImageHandle = DriverImageHandle;\r
150\r
151 InsertTailList (&PciIoDevice->OptionRomDriverList, &(Node->Link));\r
152\r
153 PciIoDevice->BusOverride = TRUE;\r
154\r
155 DosHdr = (EFI_IMAGE_DOS_HEADER *) LoadedImage->ImageBase;\r
156 if (DosHdr->e_magic != EFI_IMAGE_DOS_SIGNATURE) {\r
157 return EFI_SUCCESS;\r
158 }\r
159\r
160 PeHdr = (EFI_IMAGE_NT_HEADERS *) ((UINTN) LoadedImage->ImageBase + DosHdr->e_lfanew);\r
161\r
162 if (PeHdr->FileHeader.Machine != EFI_IMAGE_MACHINE_EBC) {\r
163 return EFI_SUCCESS;\r
164 }\r
165 return EFI_SUCCESS;\r
166}\r