]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/HttpBootDxe/HttpBootDxe.h
NetworkPkg: Fix some typos of "according"
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootDxe.h
CommitLineData
d933e70a
JW
1/** @file\r
2 UEFI HTTP boot driver's private data structure and interfaces declaration.\r
3\r
fa848a40 4Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\r
90f658c4 5(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
d933e70a
JW
6This program and the accompanying materials are licensed and made available under \r
7the terms and conditions of the BSD License that accompanies this distribution. \r
8The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php. \r
10 \r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
13\r
14**/\r
15\r
16#ifndef __EFI_HTTP_BOOT_DXE_H__\r
17#define __EFI_HTTP_BOOT_DXE_H__\r
18\r
19#include <Uefi.h>\r
20\r
90f658c4 21#include <IndustryStandard/Http11.h>\r
142c00c3 22#include <IndustryStandard/Dhcp.h>\r
90f658c4 23\r
d933e70a
JW
24//\r
25// Libraries\r
26//\r
27#include <Library/UefiBootServicesTableLib.h>\r
fa848a40
FS
28#include <Library/UefiHiiServicesLib.h>\r
29#include <Library/UefiRuntimeServicesTableLib.h>\r
d933e70a
JW
30#include <Library/MemoryAllocationLib.h>\r
31#include <Library/BaseLib.h>\r
32#include <Library/UefiLib.h>\r
33#include <Library/DevicePathLib.h>\r
34#include <Library/DebugLib.h>\r
35#include <Library/NetLib.h>\r
36#include <Library/HttpLib.h>\r
fa848a40
FS
37#include <Library/HiiLib.h>\r
38#include <Library/PrintLib.h>\r
d933e70a
JW
39\r
40//\r
41// UEFI Driver Model Protocols\r
42//\r
43#include <Protocol/DriverBinding.h>\r
44#include <Protocol/ComponentName2.h>\r
45#include <Protocol/ComponentName.h>\r
46\r
47//\r
48// Consumed Protocols\r
49//\r
fa848a40
FS
50#include <Protocol/ServiceBinding.h>\r
51#include <Protocol/HiiConfigAccess.h>\r
d933e70a
JW
52#include <Protocol/NetworkInterfaceIdentifier.h>\r
53#include <Protocol/Dhcp4.h>\r
b659408b
ZL
54#include <Protocol/Dhcp6.h>\r
55#include <Protocol/Dns6.h>\r
d933e70a
JW
56#include <Protocol/Http.h>\r
57#include <Protocol/Ip4Config2.h>\r
b659408b 58#include <Protocol/Ip6Config.h>\r
587d204c 59#include <Protocol/RamDisk.h>\r
d933e70a
JW
60//\r
61// Produced Protocols\r
62//\r
63#include <Protocol/LoadFile.h>\r
64\r
fa848a40
FS
65//\r
66// Consumed Guids\r
67//\r
68#include <Guid/HttpBootConfigHii.h>\r
69\r
d933e70a
JW
70//\r
71// Driver Version\r
72//\r
73#define HTTP_BOOT_DXE_VERSION 0xa\r
74\r
587d204c
FS
75//\r
76// Provisional Standard Media Types defined in \r
77// http://www.iana.org/assignments/provisional-standard-media-types/provisional-standard-media-types.xhtml\r
78//\r
79#define HTTP_CONTENT_TYPE_APP_EFI "application/efi"\r
80\r
d933e70a
JW
81//\r
82// Protocol instances\r
83//\r
84extern EFI_DRIVER_BINDING_PROTOCOL gHttpBootDxeDriverBinding;\r
85extern EFI_COMPONENT_NAME2_PROTOCOL gHttpBootDxeComponentName2;\r
86extern EFI_COMPONENT_NAME_PROTOCOL gHttpBootDxeComponentName;\r
87\r
88//\r
89// Private data structure\r
90//\r
91typedef struct _HTTP_BOOT_PRIVATE_DATA HTTP_BOOT_PRIVATE_DATA;\r
b659408b 92typedef struct _HTTP_BOOT_VIRTUAL_NIC HTTP_BOOT_VIRTUAL_NIC;\r
d933e70a 93\r
587d204c
FS
94typedef enum {\r
95 ImageTypeEfi,\r
96 ImageTypeVirtualCd,\r
97 ImageTypeVirtualDisk,\r
98 ImageTypeMax\r
99} HTTP_BOOT_IMAGE_TYPE;\r
100\r
d933e70a
JW
101//\r
102// Include files with internal function prototypes\r
103//\r
104#include "HttpBootComponentName.h"\r
105#include "HttpBootDhcp4.h"\r
b659408b 106#include "HttpBootDhcp6.h"\r
d933e70a
JW
107#include "HttpBootImpl.h"\r
108#include "HttpBootSupport.h"\r
109#include "HttpBootClient.h"\r
fa848a40 110#include "HttpBootConfig.h"\r
d933e70a
JW
111\r
112typedef union {\r
113 HTTP_BOOT_DHCP4_PACKET_CACHE Dhcp4;\r
b659408b 114 HTTP_BOOT_DHCP6_PACKET_CACHE Dhcp6;\r
d933e70a
JW
115} HTTP_BOOT_DHCP_PACKET_CACHE;\r
116\r
b659408b
ZL
117struct _HTTP_BOOT_VIRTUAL_NIC {\r
118 UINT32 Signature;\r
119 EFI_HANDLE Controller;\r
75372581 120 EFI_HANDLE ImageHandle;\r
b659408b
ZL
121 EFI_LOAD_FILE_PROTOCOL LoadFile;\r
122 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
123 HTTP_BOOT_PRIVATE_DATA *Private;\r
124};\r
125\r
fa848a40
FS
126#define HTTP_BOOT_PRIVATE_DATA_FROM_CALLBACK_INFO(Callback) \\r
127 CR ( \\r
128 Callback, \\r
129 HTTP_BOOT_PRIVATE_DATA, \\r
130 CallbackInfo, \\r
131 HTTP_BOOT_PRIVATE_DATA_SIGNATURE \\r
132 )\r
133\r
d933e70a
JW
134struct _HTTP_BOOT_PRIVATE_DATA {\r
135 UINT32 Signature;\r
136 EFI_HANDLE Controller;\r
d933e70a 137\r
b659408b
ZL
138 HTTP_BOOT_VIRTUAL_NIC *Ip4Nic;\r
139 HTTP_BOOT_VIRTUAL_NIC *Ip6Nic;\r
140\r
d933e70a
JW
141 //\r
142 // Cousumed children\r
143 //\r
b659408b 144 EFI_HANDLE Ip6Child;\r
d933e70a 145 EFI_HANDLE Dhcp4Child;\r
b659408b 146 EFI_HANDLE Dhcp6Child;\r
d933e70a
JW
147 HTTP_IO HttpIo;\r
148 BOOLEAN HttpCreated;\r
149\r
150 //\r
151 // Consumed protocol\r
152 //\r
153 EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *Nii;\r
b659408b 154 EFI_IP6_PROTOCOL *Ip6;\r
d933e70a 155 EFI_IP4_CONFIG2_PROTOCOL *Ip4Config2;\r
b659408b 156 EFI_IP6_CONFIG_PROTOCOL *Ip6Config;\r
d933e70a 157 EFI_DHCP4_PROTOCOL *Dhcp4;\r
b659408b 158 EFI_DHCP6_PROTOCOL *Dhcp6;\r
d933e70a
JW
159 EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
160\r
d933e70a
JW
161 \r
162 //\r
163 // Produced protocol\r
164 //\r
165 EFI_LOAD_FILE_PROTOCOL LoadFile;\r
166 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
167 UINT32 Id;\r
168\r
fa848a40
FS
169 //\r
170 // HII callback info block\r
171 //\r
172 HTTP_BOOT_FORM_CALLBACK_INFO CallbackInfo;\r
173\r
d933e70a
JW
174 //\r
175 // Mode data\r
176 //\r
177 BOOLEAN UsingIpv6;\r
178 BOOLEAN Started;\r
179 EFI_IP_ADDRESS StationIp;\r
180 EFI_IP_ADDRESS SubnetMask;\r
181 EFI_IP_ADDRESS GatewayIp;\r
b659408b 182 EFI_IP_ADDRESS ServerIp;\r
d933e70a 183 UINT16 Port;\r
587d204c
FS
184\r
185 //\r
186 // The URI string attempt to download through HTTP, may point to\r
187 // the memory in cached DHCP offer, or to the memory in FilePathUri.\r
188 //\r
d933e70a
JW
189 CHAR8 *BootFileUri;\r
190 VOID *BootFileUriParser;\r
191 UINTN BootFileSize;\r
b659408b 192 BOOLEAN NoGateway;\r
44a7d08b 193 HTTP_BOOT_IMAGE_TYPE ImageType;\r
d933e70a 194\r
fa848a40
FS
195 //\r
196 // URI string extracted from the input FilePath parameter.\r
197 //\r
198 CHAR8 *FilePathUri;\r
199 VOID *FilePathUriParser;\r
200\r
d933e70a
JW
201 //\r
202 // Cached HTTP data\r
203 //\r
204 LIST_ENTRY CacheList;\r
205\r
206 //\r
207 // Cached DHCP offer\r
208 //\r
209 // OfferIndex records the index of DhcpOffer[] buffer, and OfferCount records the num of each type of offer.\r
210 //\r
211 // It supposed that\r
212 //\r
213 // OfferNum: 8\r
214 // OfferBuffer: [ProxyNameUri, DhcpNameUri, DhcpIpUri, ProxyNameUri, ProxyIpUri, DhcpOnly, DhcpIpUri, DhcpNameUriDns]\r
215 // (OfferBuffer is 0-based.)\r
216 //\r
217 // And assume that (DhcpIpUri is the first priority actually.)\r
218 //\r
219 // SelectIndex: 5\r
220 // SelectProxyType: HttpOfferTypeProxyIpUri\r
221 // (SelectIndex is 1-based, and 0 means no one is selected.)\r
222 //\r
223 // So it should be\r
224 //\r
225 // DhcpIpUri DhcpNameUriDns DhcpDns DhcpOnly ProxyNameUri ProxyIpUri DhcpNameUri\r
226 // OfferCount: [ 2, 1, 0, 1, 2, 1, 1]\r
227 //\r
228 // OfferIndex: {[ 2, 7, 0, 5, 0, *4, 1]\r
229 // [ 6, 0, 0, 0, 3, 0, 0]\r
230 // [ 0, 0, 0, 0, 0, 0, 0]\r
231 // ... ]}\r
232 // (OfferIndex is 0-based.)\r
233 //\r
234 //\r
235 UINT32 SelectIndex;\r
236 UINT32 SelectProxyType;\r
237 HTTP_BOOT_DHCP_PACKET_CACHE OfferBuffer[HTTP_BOOT_OFFER_MAX_NUM];\r
238 UINT32 OfferNum;\r
239 UINT32 OfferCount[HttpOfferTypeMax];\r
240 UINT32 OfferIndex[HttpOfferTypeMax][HTTP_BOOT_OFFER_MAX_NUM];\r
241};\r
242\r
243#define HTTP_BOOT_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('H', 'B', 'P', 'D')\r
b659408b 244#define HTTP_BOOT_VIRTUAL_NIC_SIGNATURE SIGNATURE_32 ('H', 'B', 'V', 'N')\r
d933e70a
JW
245#define HTTP_BOOT_PRIVATE_DATA_FROM_LOADFILE(a) CR (a, HTTP_BOOT_PRIVATE_DATA, LoadFile, HTTP_BOOT_PRIVATE_DATA_SIGNATURE)\r
246#define HTTP_BOOT_PRIVATE_DATA_FROM_ID(a) CR (a, HTTP_BOOT_PRIVATE_DATA, Id, HTTP_BOOT_PRIVATE_DATA_SIGNATURE)\r
b659408b 247#define HTTP_BOOT_VIRTUAL_NIC_FROM_LOADFILE(a) CR (a, HTTP_BOOT_VIRTUAL_NIC, LoadFile, HTTP_BOOT_VIRTUAL_NIC_SIGNATURE)\r
d933e70a
JW
248extern EFI_LOAD_FILE_PROTOCOL gHttpBootDxeLoadFile;\r
249\r
250/**\r
251 Tests to see if this driver supports a given controller. If a child device is provided, \r
252 it further tests to see if this driver supports creating a handle for the specified child device.\r
253\r
254 This function checks to see if the driver specified by This supports the device specified by \r
255 ControllerHandle. Drivers will typically use the device path attached to \r
256 ControllerHandle and/or the services from the bus I/O abstraction attached to \r
257 ControllerHandle to determine if the driver supports ControllerHandle. This function \r
258 may be called many times during platform initialization. In order to reduce boot times, the tests \r
259 performed by this function must be very small, and take as little time as possible to execute. This \r
260 function must not change the state of any hardware devices, and this function must be aware that the \r
261 device specified by ControllerHandle may already be managed by the same driver or a \r
262 different driver. This function must match its calls to AllocatePages() with FreePages(), \r
263 AllocatePool() with FreePool(), and OpenProtocol() with CloseProtocol(). \r
264 Because ControllerHandle may have been previously started by the same driver, if a protocol is \r
265 already in the opened state, then it must not be closed with CloseProtocol(). This is required \r
266 to guarantee the state of ControllerHandle is not modified by this function.\r
267\r
268 @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
269 @param[in] ControllerHandle The handle of the controller to test. This handle \r
270 must support a protocol interface that supplies \r
271 an I/O abstraction to the driver.\r
272 @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This \r
273 parameter is ignored by device drivers, and is optional for bus \r
274 drivers. For bus drivers, if this parameter is not NULL, then \r
275 the bus driver must determine if the bus controller specified \r
276 by ControllerHandle and the child controller specified \r
277 by RemainingDevicePath are both supported by this \r
278 bus driver.\r
279\r
280 @retval EFI_SUCCESS The device specified by ControllerHandle and\r
281 RemainingDevicePath is supported by the driver specified by This.\r
282 @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and\r
283 RemainingDevicePath is already being managed by the driver\r
284 specified by This.\r
285 @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and\r
286 RemainingDevicePath is already being managed by a different\r
287 driver or an application that requires exclusive access.\r
288 Currently not implemented.\r
289 @retval EFI_UNSUPPORTED The device specified by ControllerHandle and\r
290 RemainingDevicePath is not supported by the driver specified by This.\r
291**/\r
292EFI_STATUS\r
293EFIAPI\r
294HttpBootIp4DxeDriverBindingSupported (\r
295 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
296 IN EFI_HANDLE ControllerHandle,\r
297 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
298 );\r
299\r
300/**\r
301 Starts a device controller or a bus controller.\r
302\r
303 The Start() function is designed to be invoked from the EFI boot service ConnectController().\r
304 As a result, much of the error checking on the parameters to Start() has been moved into this \r
305 common boot service. It is legal to call Start() from other locations, \r
306 but the following calling restrictions must be followed, or the system behavior will not be deterministic.\r
307 1. ControllerHandle must be a valid EFI_HANDLE.\r
308 2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned\r
309 EFI_DEVICE_PATH_PROTOCOL.\r
310 3. Prior to calling Start(), the Supported() function for the driver specified by This must\r
311 have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS. \r
312\r
313 @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
314 @param[in] ControllerHandle The handle of the controller to start. This handle \r
315 must support a protocol interface that supplies \r
316 an I/O abstraction to the driver.\r
317 @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This \r
318 parameter is ignored by device drivers, and is optional for bus \r
319 drivers. For a bus driver, if this parameter is NULL, then handles \r
320 for all the children of Controller are created by this driver. \r
321 If this parameter is not NULL and the first Device Path Node is \r
322 not the End of Device Path Node, then only the handle for the \r
323 child device specified by the first Device Path Node of \r
324 RemainingDevicePath is created by this driver.\r
325 If the first Device Path Node of RemainingDevicePath is \r
326 the End of Device Path Node, no child handle is created by this\r
327 driver.\r
328\r
329 @retval EFI_SUCCESS The device was started.\r
330 @retval EFI_DEVICE_ERROR The device could not be started due to a device error.Currently not implemented.\r
331 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.\r
332 @retval Others The driver failded to start the device.\r
333\r
334**/\r
335EFI_STATUS\r
336EFIAPI\r
337HttpBootIp4DxeDriverBindingStart (\r
338 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
339 IN EFI_HANDLE ControllerHandle,\r
340 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
341 );\r
342\r
343/**\r
344 Stops a device controller or a bus controller.\r
345 \r
346 The Stop() function is designed to be invoked from the EFI boot service DisconnectController(). \r
347 As a result, much of the error checking on the parameters to Stop() has been moved \r
348 into this common boot service. It is legal to call Stop() from other locations, \r
349 but the following calling restrictions must be followed, or the system behavior will not be deterministic.\r
350 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this\r
351 same driver's Start() function.\r
352 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid\r
353 EFI_HANDLE. In addition, all of these handles must have been created in this driver's\r
354 Start() function, and the Start() function must have called OpenProtocol() on\r
355 ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.\r
356 \r
357 @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
358 @param[in] ControllerHandle A handle to the device being stopped. The handle must \r
359 support a bus specific I/O protocol for the driver \r
360 to use to stop the device.\r
361 @param[in] NumberOfChildren The number of child device handles in ChildHandleBuffer.\r
362 @param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL \r
363 if NumberOfChildren is 0.\r
364\r
365 @retval EFI_SUCCESS The device was stopped.\r
366 @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.\r
367\r
368**/\r
369EFI_STATUS\r
370EFIAPI\r
371HttpBootIp4DxeDriverBindingStop (\r
372 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
373 IN EFI_HANDLE ControllerHandle,\r
374 IN UINTN NumberOfChildren,\r
375 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL\r
376 );\r
377\r
b659408b
ZL
378/**\r
379 Tests to see if this driver supports a given controller. If a child device is provided, \r
380 it further tests to see if this driver supports creating a handle for the specified child device.\r
381\r
382 This function checks to see if the driver specified by This supports the device specified by \r
383 ControllerHandle. Drivers will typically use the device path attached to \r
384 ControllerHandle and/or the services from the bus I/O abstraction attached to \r
385 ControllerHandle to determine if the driver supports ControllerHandle. This function \r
386 may be called many times during platform initialization. In order to reduce boot times, the tests \r
387 performed by this function must be very small, and take as little time as possible to execute. This \r
388 function must not change the state of any hardware devices, and this function must be aware that the \r
389 device specified by ControllerHandle may already be managed by the same driver or a \r
390 different driver. This function must match its calls to AllocatePages() with FreePages(), \r
391 AllocatePool() with FreePool(), and OpenProtocol() with CloseProtocol(). \r
392 Because ControllerHandle may have been previously started by the same driver, if a protocol is \r
393 already in the opened state, then it must not be closed with CloseProtocol(). This is required \r
394 to guarantee the state of ControllerHandle is not modified by this function.\r
395\r
396 @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
397 @param[in] ControllerHandle The handle of the controller to test. This handle \r
398 must support a protocol interface that supplies \r
399 an I/O abstraction to the driver.\r
400 @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This \r
401 parameter is ignored by device drivers, and is optional for bus \r
402 drivers. For bus drivers, if this parameter is not NULL, then \r
403 the bus driver must determine if the bus controller specified \r
404 by ControllerHandle and the child controller specified \r
405 by RemainingDevicePath are both supported by this \r
406 bus driver.\r
407\r
408 @retval EFI_SUCCESS The device specified by ControllerHandle and\r
409 RemainingDevicePath is supported by the driver specified by This.\r
410 @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and\r
411 RemainingDevicePath is already being managed by the driver\r
412 specified by This.\r
413 @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and\r
414 RemainingDevicePath is already being managed by a different\r
415 driver or an application that requires exclusive access.\r
416 Currently not implemented.\r
417 @retval EFI_UNSUPPORTED The device specified by ControllerHandle and\r
418 RemainingDevicePath is not supported by the driver specified by This.\r
419**/\r
420EFI_STATUS\r
421EFIAPI\r
422HttpBootIp6DxeDriverBindingSupported (\r
423 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
424 IN EFI_HANDLE ControllerHandle,\r
425 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
426 );\r
427\r
428/**\r
429 Starts a device controller or a bus controller.\r
430\r
431 The Start() function is designed to be invoked from the EFI boot service ConnectController().\r
432 As a result, much of the error checking on the parameters to Start() has been moved into this \r
433 common boot service. It is legal to call Start() from other locations, \r
434 but the following calling restrictions must be followed, or the system behavior will not be deterministic.\r
435 1. ControllerHandle must be a valid EFI_HANDLE.\r
436 2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned\r
437 EFI_DEVICE_PATH_PROTOCOL.\r
438 3. Prior to calling Start(), the Supported() function for the driver specified by This must\r
439 have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS. \r
440\r
441 @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
442 @param[in] ControllerHandle The handle of the controller to start. This handle \r
443 must support a protocol interface that supplies \r
444 an I/O abstraction to the driver.\r
445 @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This \r
446 parameter is ignored by device drivers, and is optional for bus \r
447 drivers. For a bus driver, if this parameter is NULL, then handles \r
448 for all the children of Controller are created by this driver. \r
449 If this parameter is not NULL and the first Device Path Node is \r
450 not the End of Device Path Node, then only the handle for the \r
451 child device specified by the first Device Path Node of \r
452 RemainingDevicePath is created by this driver.\r
453 If the first Device Path Node of RemainingDevicePath is \r
454 the End of Device Path Node, no child handle is created by this\r
455 driver.\r
456\r
457 @retval EFI_SUCCESS The device was started.\r
458 @retval EFI_DEVICE_ERROR The device could not be started due to a device error.Currently not implemented.\r
459 @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.\r
460 @retval Others The driver failded to start the device.\r
461\r
462**/\r
463EFI_STATUS\r
464EFIAPI\r
465HttpBootIp6DxeDriverBindingStart (\r
466 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
467 IN EFI_HANDLE ControllerHandle,\r
468 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
469 );\r
470\r
471/**\r
472 Stops a device controller or a bus controller.\r
473 \r
474 The Stop() function is designed to be invoked from the EFI boot service DisconnectController(). \r
475 As a result, much of the error checking on the parameters to Stop() has been moved \r
476 into this common boot service. It is legal to call Stop() from other locations, \r
477 but the following calling restrictions must be followed, or the system behavior will not be deterministic.\r
478 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this\r
479 same driver's Start() function.\r
480 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid\r
481 EFI_HANDLE. In addition, all of these handles must have been created in this driver's\r
482 Start() function, and the Start() function must have called OpenProtocol() on\r
483 ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.\r
484 \r
485 @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.\r
486 @param[in] ControllerHandle A handle to the device being stopped. The handle must \r
487 support a bus specific I/O protocol for the driver \r
488 to use to stop the device.\r
489 @param[in] NumberOfChildren The number of child device handles in ChildHandleBuffer.\r
490 @param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL \r
491 if NumberOfChildren is 0.\r
492\r
493 @retval EFI_SUCCESS The device was stopped.\r
494 @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.\r
495\r
496**/\r
497EFI_STATUS\r
498EFIAPI\r
499HttpBootIp6DxeDriverBindingStop (\r
500 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
501 IN EFI_HANDLE ControllerHandle,\r
502 IN UINTN NumberOfChildren,\r
503 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL\r
504 );\r
d933e70a 505#endif\r