]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/Network/PxeDhcp4/Dxe/PxeDhcp4.c
Remove 3 library instances: EdkDxeDebugLibReportStatusCode, EdkUefiDebugLibConOut...
[mirror_edk2.git] / EdkModulePkg / Universal / Network / PxeDhcp4 / Dxe / PxeDhcp4.c
CommitLineData
878ddf1f 1/*++\r
2\r
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
11\r
12Module Name:\r
13 PxeDhcp4.c\r
14 \r
15Abstract:\r
16\r
17--*/\r
18\r
19\r
20#include "PxeDhcp4.h"\r
21\r
878ddf1f 22//\r
23// PXE DHCP Protocol Interface\r
24//\r
25EFI_DRIVER_BINDING_PROTOCOL gPxeDhcp4DriverBinding = {\r
26 PxeDhcp4DriverBindingSupported,\r
27 PxeDhcp4DriverBindingStart,\r
28 PxeDhcp4DriverBindingStop,\r
61fb1657 29 0xa,\r
878ddf1f 30 NULL,\r
31 NULL\r
32};\r
33\r
34/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
35EFI_STATUS\r
36EFIAPI\r
37PxeDhcp4DriverBindingSupported (\r
38 IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
39 IN EFI_HANDLE ControllerHandle,\r
40 IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
41 )\r
42/*++\r
43\r
44 Routine Description:\r
45 Test to see if this driver supports ControllerHandle. Any\r
46 ControllerHandle that contains a PxeBaseCode protocol can be\r
47 supported.\r
48\r
49 Arguments:\r
50 This - Protocol instance pointer.\r
51 ControllerHandle - Handle of device to test.\r
52 RemainingDevicePath - Not used.\r
53\r
54 Returns:\r
55 EFI_SUCCESS - This driver supports this device.\r
56 EFI_ALREADY_STARTED - This driver is already running on this\r
57 device.\r
58 other - This driver does not support this device.\r
59\r
60--*/\r
61{\r
62 EFI_STATUS Status;\r
63 EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;\r
64\r
65 //\r
66 // Open the IO Abstraction(s) needed to perform the supported test.\r
67 //\r
68 Status = gBS->OpenProtocol (\r
69 ControllerHandle,\r
70 &gEfiPxeBaseCodeProtocolGuid,\r
71 (VOID **) &PxeBc,\r
72 This->DriverBindingHandle,\r
73 ControllerHandle,\r
74 EFI_OPEN_PROTOCOL_BY_DRIVER\r
75 );\r
76\r
77 if (EFI_ERROR (Status)) {\r
78 return Status;\r
79 }\r
80 //\r
81 // Close the I/O Abstraction(s) used to perform the supported test.\r
82 //\r
83 return gBS->CloseProtocol (\r
84 ControllerHandle,\r
85 &gEfiPxeBaseCodeProtocolGuid,\r
86 This->DriverBindingHandle,\r
87 ControllerHandle\r
88 );\r
89}\r
90\r
91/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
92EFI_STATUS\r
93EFIAPI\r
94PxeDhcp4DriverBindingStart (\r
95 IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
96 IN EFI_HANDLE ControllerHandle,\r
97 IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
98 )\r
99/*++\r
100\r
101 Routine Description:\r
102 Start this driver on ControllerHandle by opening a PxeBaseCode\r
103 protocol and installing a PxeDhcp4 protocol on ControllerHandle.\r
104\r
105 Arguments:\r
106 This - Protocol instance pointer.\r
107 ControllerHandle - Handle of device to bind driver to.\r
108 RemainingDevicePath - Not used, always produce all possible\r
109 children.\r
110\r
111 Returns:\r
112 EFI_SUCCESS - This driver is added to ControllerHandle.\r
113 EFI_ALREADY_STARTED - This driver is already running on\r
114 ControllerHandle.\r
115 other - This driver does not support this device.\r
116\r
117--*/\r
118{\r
119 EFI_STATUS Status;\r
120 EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;\r
121 EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
122 PXE_DHCP4_PRIVATE_DATA *Private;\r
123\r
124 //\r
125 // Connect to the PxeBaseCode interface on ControllerHandle.\r
126 //\r
127 Status = gBS->OpenProtocol (\r
128 ControllerHandle,\r
129 &gEfiPxeBaseCodeProtocolGuid,\r
130 (VOID **) &PxeBc,\r
131 This->DriverBindingHandle,\r
132 ControllerHandle,\r
133 EFI_OPEN_PROTOCOL_BY_DRIVER\r
134 );\r
135\r
136 if (EFI_ERROR (Status)) {\r
137 return Status;\r
138 }\r
139 //\r
140 // BaseCode has already grabbed the SimpleNetwork interface\r
141 // so just do a HandleProtocol() to get it.\r
142 //\r
143 Status = gBS->HandleProtocol (\r
144 ControllerHandle,\r
145 &gEfiSimpleNetworkProtocolGuid,\r
146 (VOID **) &Snp\r
147 );\r
148\r
149 if (EFI_ERROR (Status)) {\r
150 goto error_exit;\r
151 }\r
152\r
153 ASSERT (Snp);\r
154\r
155 //\r
156 // Initialize the PXE DHCP device instance.\r
157 //\r
158 Status = gBS->AllocatePool (\r
159 EfiBootServicesData,\r
160 sizeof (PXE_DHCP4_PRIVATE_DATA),\r
161 (VOID **) &Private\r
162 );\r
163\r
164 if (EFI_ERROR (Status)) {\r
165 goto error_exit;\r
166 }\r
167 //\r
168 //\r
169 //\r
170 ZeroMem (Private, sizeof (PXE_DHCP4_PRIVATE_DATA));\r
171\r
172 Private->Signature = PXE_DHCP4_PRIVATE_DATA_SIGNATURE;\r
173 Private->PxeBc = PxeBc;\r
174 Private->Snp = Snp;\r
175 Private->Handle = ControllerHandle;\r
176 Private->PxeDhcp4.Revision = EFI_PXE_DHCP4_PROTOCOL_REVISION;\r
177 Private->PxeDhcp4.Run = PxeDhcp4Run;\r
178 Private->PxeDhcp4.Setup = PxeDhcp4Setup;\r
179 Private->PxeDhcp4.Init = PxeDhcp4Init;\r
180 Private->PxeDhcp4.Select = PxeDhcp4Select;\r
181 Private->PxeDhcp4.Renew = PxeDhcp4Renew;\r
182 Private->PxeDhcp4.Rebind = PxeDhcp4Rebind;\r
183 Private->PxeDhcp4.Release = PxeDhcp4Release;\r
184 Private->PxeDhcp4.Data = NULL;\r
185\r
186 //\r
187 // Install protocol interfaces for the PXE DHCP device.\r
188 //\r
189 Status = gBS->InstallProtocolInterface (\r
190 &ControllerHandle,\r
191 &gEfiPxeDhcp4ProtocolGuid,\r
192 EFI_NATIVE_INTERFACE,\r
193 &Private->PxeDhcp4\r
194 );\r
195\r
196 if (!EFI_ERROR (Status)) {\r
197 return Status;\r
198 }\r
199\r
200error_exit: ;\r
201 gBS->CloseProtocol (\r
202 ControllerHandle,\r
203 &gEfiPxeBaseCodeProtocolGuid,\r
204 This->DriverBindingHandle,\r
205 ControllerHandle\r
206 );\r
207\r
208 return Status;\r
209}\r
210\r
211/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
212EFI_STATUS\r
213EFIAPI\r
214PxeDhcp4DriverBindingStop (\r
215 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
216 IN EFI_HANDLE ControllerHandle,\r
217 IN UINTN NumberOfChildren,\r
218 IN EFI_HANDLE *ChildHandleBuffer\r
219 )\r
220/*++\r
221\r
222 Routine Description:\r
223 Stop this driver on ControllerHandle by removing PXE DHCP\r
224 protocol and closing the PXE Base Code protocol on\r
225 ControllerHandle.\r
226\r
227 Arguments:\r
228 This - Protocol instance pointer.\r
229 ControllerHandle - Handle of device to stop driver on.\r
230 NumberOfChildren - Not used.\r
231 ChildHandleBuffer - Not used.\r
232\r
233 Returns:\r
234 EFI_SUCCESS - This driver is removed ControllerHandle.\r
235 other - This driver was not removed from this\r
236 device.\r
237\r
238--*/\r
239{\r
240 EFI_STATUS Status;\r
241 EFI_PXE_DHCP4_PROTOCOL *PxeDhcp4;\r
242 PXE_DHCP4_PRIVATE_DATA *Private;\r
243\r
244 //\r
245 // Get our context back.\r
246 //\r
247 Status = gBS->OpenProtocol (\r
248 ControllerHandle,\r
249 &gEfiPxeDhcp4ProtocolGuid,\r
250 (VOID **) &PxeDhcp4,\r
251 This->DriverBindingHandle,\r
252 ControllerHandle,\r
253 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
254 );\r
255\r
256 if (EFI_ERROR (Status)) {\r
257 return EFI_UNSUPPORTED;\r
258 }\r
259\r
260 Private = PXE_DHCP4_PRIVATE_DATA_FROM_THIS (PxeDhcp4);\r
261\r
262 //\r
263 // Release allocated resources\r
264 //\r
265 if (Private->PxeDhcp4.Data) {\r
266 gBS->FreePool (Private->PxeDhcp4.Data);\r
267 Private->PxeDhcp4.Data = NULL;\r
268 }\r
269 //\r
270 // Uninstall our protocol\r
271 //\r
272 Status = gBS->UninstallProtocolInterface (\r
273 ControllerHandle,\r
274 &gEfiPxeDhcp4ProtocolGuid,\r
275 &Private->PxeDhcp4\r
276 );\r
277\r
278 if (EFI_ERROR (Status)) {\r
279 return Status;\r
280 }\r
281 //\r
282 // Close any consumed protocols\r
283 //\r
284 Status = gBS->CloseProtocol (\r
285 ControllerHandle,\r
286 &gEfiPxeBaseCodeProtocolGuid,\r
287 This->DriverBindingHandle,\r
288 ControllerHandle\r
289 );\r
290\r
291 if (EFI_ERROR (Status)) {\r
292 return Status;\r
293 }\r
294 //\r
295 // Release our private data\r
296 //\r
297 gBS->FreePool (Private);\r
298\r
299 return Status;\r
300}\r
301\r
302/* EOF - PxeDhcp4.c */\r