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