]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/PxeDhcp4Dxe/PxeDhcp4.c
sync comments, fix function header, rename variable name to follow coding style.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / PxeDhcp4Dxe / PxeDhcp4.c
CommitLineData
772db4bb 1/** @file\r
2\r
3Copyright (c) 2004 - 2005, 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\r
21#include "PxeDhcp4.h"\r
22\r
23/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
24\r
25//\r
26// Prototypes\r
27// Driver model protocol interface\r
28//\r
29EFI_STATUS\r
30EFIAPI\r
31PxeDhcp4DriverEntryPoint (\r
32 IN EFI_HANDLE ImageHandle,\r
33 IN EFI_SYSTEM_TABLE *SystemTable\r
34 );\r
35\r
36EFI_STATUS\r
37EFIAPI\r
38PxeDhcp4DriverBindingSupported (\r
39 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
40 IN EFI_HANDLE ControllerHandle,\r
41 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
42 );\r
43\r
44EFI_STATUS\r
45EFIAPI\r
46PxeDhcp4DriverBindingStart (\r
47 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
48 IN EFI_HANDLE ControllerHandle,\r
49 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
50 );\r
51\r
52EFI_STATUS\r
53EFIAPI\r
54PxeDhcp4DriverBindingStop (\r
55 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
56 IN EFI_HANDLE ControllerHandle,\r
57 IN UINTN NumberOfChildren,\r
58 IN EFI_HANDLE *ChildHandleBuffer\r
59 );\r
60\r
61/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
62\r
63//\r
64// PXE DHCP Protocol Interface\r
65//\r
66EFI_DRIVER_BINDING_PROTOCOL gPxeDhcp4DriverBinding = {\r
67 PxeDhcp4DriverBindingSupported,\r
68 PxeDhcp4DriverBindingStart,\r
69 PxeDhcp4DriverBindingStop,\r
70 0xa,\r
71 NULL,\r
72 NULL\r
73};\r
74\r
75/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
76\r
77//\r
78// PxeDhcp4 Driver Entry point funtion\r
79//\r
80\r
81/**\r
82 Register Driver Binding protocol for this driver.\r
83\r
84 @param entry EFI_IMAGE_ENTRY_POINT)\r
85\r
86 @retval EFI_SUCCESS Driver loaded.\r
87 @retval other Driver not loaded.\r
88\r
89**/\r
90EFI_STATUS\r
91EFIAPI\r
92PxeDhcp4DriverEntryPoint (\r
93 IN EFI_HANDLE ImageHandle,\r
94 IN EFI_SYSTEM_TABLE *SystemTable\r
95 )\r
96{\r
83cbd279 97 return EfiLibInstallDriverBindingComponentName2 (\r
98 ImageHandle,\r
99 SystemTable,\r
100 &gPxeDhcp4DriverBinding,\r
101 NULL,\r
102 &gPxeDhcp4ComponentName,\r
103 &gPxeDhcp4ComponentName2\r
104 );\r
772db4bb 105}\r
106\r
107/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
108\r
109/**\r
110 Test to see if this driver supports ControllerHandle. Any\r
111 ControllerHandle that contains a PxeBaseCode protocol can be\r
112 supported.\r
113\r
114 @param This Protocol instance pointer.\r
115 @param ControllerHandle Handle of device to test.\r
116 @param RemainingDevicePath Not used.\r
117\r
118 @retval EFI_SUCCESS This driver supports this device.\r
119 @retval EFI_ALREADY_STARTED This driver is already running on this device.\r
120 @retval other This driver does not support this device.\r
121\r
122**/\r
123EFI_STATUS\r
124EFIAPI\r
125PxeDhcp4DriverBindingSupported (\r
126 IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
127 IN EFI_HANDLE ControllerHandle,\r
128 IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
129 )\r
130{\r
131 EFI_STATUS Status;\r
132 EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;\r
133\r
134 //\r
135 // Open the IO Abstraction(s) needed to perform the supported test.\r
136 //\r
137 Status = gBS->OpenProtocol (\r
138 ControllerHandle,\r
139 &gEfiPxeBaseCodeProtocolGuid,\r
140 (VOID **) &PxeBc,\r
141 This->DriverBindingHandle,\r
142 ControllerHandle,\r
143 EFI_OPEN_PROTOCOL_BY_DRIVER\r
144 );\r
145\r
146 if (EFI_ERROR (Status)) {\r
147 return Status;\r
148 }\r
149 //\r
150 // Close the I/O Abstraction(s) used to perform the supported test.\r
151 //\r
152 return gBS->CloseProtocol (\r
153 ControllerHandle,\r
154 &gEfiPxeBaseCodeProtocolGuid,\r
155 This->DriverBindingHandle,\r
156 ControllerHandle\r
157 );\r
158}\r
159\r
160/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
161\r
162/**\r
163 Start this driver on ControllerHandle by opening a PxeBaseCode\r
164 protocol and installing a PxeDhcp4 protocol on ControllerHandle.\r
165\r
166 @param This Protocol instance pointer.\r
167 @param ControllerHandle Handle of device to bind driver to.\r
168 @param RemainingDevicePath Not used, always produce all possible children.\r
169\r
170 @retval EFI_SUCCESS This driver is added to ControllerHandle.\r
171 @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle.\r
172 @retval other This driver does not support this device.\r
173\r
174**/\r
175EFI_STATUS\r
176EFIAPI\r
177PxeDhcp4DriverBindingStart (\r
178 IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
179 IN EFI_HANDLE ControllerHandle,\r
180 IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
181 )\r
182{\r
183 EFI_STATUS Status;\r
184 EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;\r
185 EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
186 PXE_DHCP4_PRIVATE_DATA *Private;\r
187\r
188 //\r
189 // Connect to the PxeBaseCode interface on ControllerHandle.\r
190 //\r
191 Status = gBS->OpenProtocol (\r
192 ControllerHandle,\r
193 &gEfiPxeBaseCodeProtocolGuid,\r
194 (VOID **) &PxeBc,\r
195 This->DriverBindingHandle,\r
196 ControllerHandle,\r
197 EFI_OPEN_PROTOCOL_BY_DRIVER\r
198 );\r
199\r
200 if (EFI_ERROR (Status)) {\r
201 return Status;\r
202 }\r
203 //\r
204 // BaseCode has already grabbed the SimpleNetwork interface\r
205 // so just do a HandleProtocol() to get it.\r
206 //\r
207 Status = gBS->HandleProtocol (\r
208 ControllerHandle,\r
209 &gEfiSimpleNetworkProtocolGuid,\r
210 (VOID **) &Snp\r
211 );\r
212\r
213 if (EFI_ERROR (Status)) {\r
214 goto error_exit;\r
215 }\r
216\r
217 ASSERT (Snp);\r
218\r
219 //\r
220 // Initialize the PXE DHCP device instance.\r
221 //\r
222 Private = AllocateZeroPool (sizeof (PXE_DHCP4_PRIVATE_DATA));\r
223 if (Private == NULL) {\r
224 Status = EFI_OUT_OF_RESOURCES;\r
225 goto error_exit;\r
226 }\r
227\r
228 Private->Signature = PXE_DHCP4_PRIVATE_DATA_SIGNATURE;\r
229 Private->PxeBc = PxeBc;\r
230 Private->Snp = Snp;\r
231 Private->Handle = ControllerHandle;\r
232 Private->PxeDhcp4.Revision = EFI_PXE_DHCP4_PROTOCOL_REVISION;\r
233 Private->PxeDhcp4.Run = PxeDhcp4Run;\r
234 Private->PxeDhcp4.Setup = PxeDhcp4Setup;\r
235 Private->PxeDhcp4.Init = PxeDhcp4Init;\r
236 Private->PxeDhcp4.Select = PxeDhcp4Select;\r
237 Private->PxeDhcp4.Renew = PxeDhcp4Renew;\r
238 Private->PxeDhcp4.Rebind = PxeDhcp4Rebind;\r
239 Private->PxeDhcp4.Release = PxeDhcp4Release;\r
240 Private->PxeDhcp4.Data = NULL;\r
241\r
242 //\r
243 // Install protocol interfaces for the PXE DHCP device.\r
244 //\r
245 Status = gBS->InstallProtocolInterface (\r
246 &ControllerHandle,\r
247 &gEfiPxeDhcp4ProtocolGuid,\r
248 EFI_NATIVE_INTERFACE,\r
249 &Private->PxeDhcp4\r
250 );\r
251\r
252 if (!EFI_ERROR (Status)) {\r
253 return Status;\r
254 }\r
255\r
256error_exit: ;\r
257 gBS->CloseProtocol (\r
258 ControllerHandle,\r
259 &gEfiPxeBaseCodeProtocolGuid,\r
260 This->DriverBindingHandle,\r
261 ControllerHandle\r
262 );\r
263\r
264 return Status;\r
265}\r
266\r
267/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
268\r
269/**\r
270 Stop this driver on ControllerHandle by removing PXE DHCP\r
271 protocol and closing the PXE Base Code protocol on\r
272 ControllerHandle.\r
273\r
274 @param This Protocol instance pointer.\r
275 @param ControllerHandle Handle of device to stop driver on.\r
276 @param NumberOfChildren Not used.\r
277 @param ChildHandleBuffer Not used.\r
278\r
279 @retval EFI_SUCCESS This driver is removed ControllerHandle.\r
280 @retval other This driver was not removed from this device.\r
281\r
282**/\r
283EFI_STATUS\r
284EFIAPI\r
285PxeDhcp4DriverBindingStop (\r
286 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
287 IN EFI_HANDLE ControllerHandle,\r
288 IN UINTN NumberOfChildren,\r
289 IN EFI_HANDLE *ChildHandleBuffer\r
290 )\r
291{\r
292 EFI_STATUS Status;\r
293 EFI_PXE_DHCP4_PROTOCOL *PxeDhcp4;\r
294 PXE_DHCP4_PRIVATE_DATA *Private;\r
295\r
296 //\r
297 // Get our context back.\r
298 //\r
299 Status = gBS->OpenProtocol (\r
300 ControllerHandle,\r
301 &gEfiPxeDhcp4ProtocolGuid,\r
302 (VOID **) &PxeDhcp4,\r
303 This->DriverBindingHandle,\r
304 ControllerHandle,\r
305 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
306 );\r
307\r
308 if (EFI_ERROR (Status)) {\r
309 return EFI_UNSUPPORTED;\r
310 }\r
311\r
312 Private = PXE_DHCP4_PRIVATE_DATA_FROM_THIS (PxeDhcp4);\r
313\r
314 //\r
315 // Release allocated resources\r
316 //\r
317 if (Private->PxeDhcp4.Data) {\r
318 FreePool (Private->PxeDhcp4.Data);\r
319 Private->PxeDhcp4.Data = NULL;\r
320 }\r
321 //\r
322 // Uninstall our protocol\r
323 //\r
324 Status = gBS->UninstallProtocolInterface (\r
325 ControllerHandle,\r
326 &gEfiPxeDhcp4ProtocolGuid,\r
327 &Private->PxeDhcp4\r
328 );\r
329\r
330 if (EFI_ERROR (Status)) {\r
331 return Status;\r
332 }\r
333 //\r
334 // Close any consumed protocols\r
335 //\r
336 Status = gBS->CloseProtocol (\r
337 ControllerHandle,\r
338 &gEfiPxeBaseCodeProtocolGuid,\r
339 This->DriverBindingHandle,\r
340 ControllerHandle\r
341 );\r
342\r
343 if (EFI_ERROR (Status)) {\r
344 return Status;\r
345 }\r
346 //\r
347 // Release our private data\r
348 //\r
349 FreePool (Private);\r
350\r
351 return Status;\r
352}\r
353\r
354/* EOF - PxeDhcp4.c */\r