]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/Network/PxeDhcp4/Dxe/PxeDhcp4.c
Clean up the following module msa files, they are three networt and two PCD modules.
[mirror_edk2.git] / EdkModulePkg / Universal / Network / PxeDhcp4 / Dxe / PxeDhcp4.c
CommitLineData
878ddf1f 1/*++\r
2\r
26aa0c2f 3Copyright (c) 2006 - 2007, Intel Corporation \r
878ddf1f 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
26aa0c2f
LG
158 Private = AllocateZeroPool (sizeof (PXE_DHCP4_PRIVATE_DATA));\r
159 if (Private == NULL) {\r
160 Status = EFI_OUT_OF_RESOURCES;\r
878ddf1f 161 goto error_exit;\r
162 }\r
878ddf1f 163\r
164 Private->Signature = PXE_DHCP4_PRIVATE_DATA_SIGNATURE;\r
165 Private->PxeBc = PxeBc;\r
166 Private->Snp = Snp;\r
167 Private->Handle = ControllerHandle;\r
168 Private->PxeDhcp4.Revision = EFI_PXE_DHCP4_PROTOCOL_REVISION;\r
169 Private->PxeDhcp4.Run = PxeDhcp4Run;\r
170 Private->PxeDhcp4.Setup = PxeDhcp4Setup;\r
171 Private->PxeDhcp4.Init = PxeDhcp4Init;\r
172 Private->PxeDhcp4.Select = PxeDhcp4Select;\r
173 Private->PxeDhcp4.Renew = PxeDhcp4Renew;\r
174 Private->PxeDhcp4.Rebind = PxeDhcp4Rebind;\r
175 Private->PxeDhcp4.Release = PxeDhcp4Release;\r
176 Private->PxeDhcp4.Data = NULL;\r
177\r
178 //\r
179 // Install protocol interfaces for the PXE DHCP device.\r
180 //\r
181 Status = gBS->InstallProtocolInterface (\r
182 &ControllerHandle,\r
183 &gEfiPxeDhcp4ProtocolGuid,\r
184 EFI_NATIVE_INTERFACE,\r
185 &Private->PxeDhcp4\r
186 );\r
187\r
188 if (!EFI_ERROR (Status)) {\r
189 return Status;\r
190 }\r
191\r
192error_exit: ;\r
193 gBS->CloseProtocol (\r
194 ControllerHandle,\r
195 &gEfiPxeBaseCodeProtocolGuid,\r
196 This->DriverBindingHandle,\r
197 ControllerHandle\r
198 );\r
199\r
200 return Status;\r
201}\r
202\r
203/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
204EFI_STATUS\r
205EFIAPI\r
206PxeDhcp4DriverBindingStop (\r
207 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
208 IN EFI_HANDLE ControllerHandle,\r
209 IN UINTN NumberOfChildren,\r
210 IN EFI_HANDLE *ChildHandleBuffer\r
211 )\r
212/*++\r
213\r
214 Routine Description:\r
215 Stop this driver on ControllerHandle by removing PXE DHCP\r
216 protocol and closing the PXE Base Code protocol on\r
217 ControllerHandle.\r
218\r
219 Arguments:\r
220 This - Protocol instance pointer.\r
221 ControllerHandle - Handle of device to stop driver on.\r
222 NumberOfChildren - Not used.\r
223 ChildHandleBuffer - Not used.\r
224\r
225 Returns:\r
226 EFI_SUCCESS - This driver is removed ControllerHandle.\r
227 other - This driver was not removed from this\r
228 device.\r
229\r
230--*/\r
231{\r
232 EFI_STATUS Status;\r
233 EFI_PXE_DHCP4_PROTOCOL *PxeDhcp4;\r
234 PXE_DHCP4_PRIVATE_DATA *Private;\r
235\r
236 //\r
237 // Get our context back.\r
238 //\r
239 Status = gBS->OpenProtocol (\r
240 ControllerHandle,\r
241 &gEfiPxeDhcp4ProtocolGuid,\r
242 (VOID **) &PxeDhcp4,\r
243 This->DriverBindingHandle,\r
244 ControllerHandle,\r
245 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
246 );\r
247\r
248 if (EFI_ERROR (Status)) {\r
249 return EFI_UNSUPPORTED;\r
250 }\r
251\r
252 Private = PXE_DHCP4_PRIVATE_DATA_FROM_THIS (PxeDhcp4);\r
253\r
254 //\r
255 // Release allocated resources\r
256 //\r
257 if (Private->PxeDhcp4.Data) {\r
26aa0c2f 258 FreePool (Private->PxeDhcp4.Data);\r
878ddf1f 259 Private->PxeDhcp4.Data = NULL;\r
260 }\r
261 //\r
262 // Uninstall our protocol\r
263 //\r
264 Status = gBS->UninstallProtocolInterface (\r
265 ControllerHandle,\r
266 &gEfiPxeDhcp4ProtocolGuid,\r
267 &Private->PxeDhcp4\r
268 );\r
269\r
270 if (EFI_ERROR (Status)) {\r
271 return Status;\r
272 }\r
273 //\r
274 // Close any consumed protocols\r
275 //\r
276 Status = gBS->CloseProtocol (\r
277 ControllerHandle,\r
278 &gEfiPxeBaseCodeProtocolGuid,\r
279 This->DriverBindingHandle,\r
280 ControllerHandle\r
281 );\r
282\r
283 if (EFI_ERROR (Status)) {\r
284 return Status;\r
285 }\r
286 //\r
287 // Release our private data\r
288 //\r
26aa0c2f 289 FreePool (Private);\r
878ddf1f 290\r
291 return Status;\r
292}\r
293\r
294/* EOF - PxeDhcp4.c */\r