]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/HttpBootDxe/HttpBootClient.h
NetworkPkg: Add UEFI HTTP boot driver.
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootClient.h
CommitLineData
c4545d76
FS
1/** @file
2 Declaration of the boot file download function.
3
4Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5This program and the accompanying materials are licensed and made available under
6the terms and conditions of the BSD License that accompanies this distribution.
7The full text of the license may be found at
8http://opensource.org/licenses/bsd-license.php.
9
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13**/
14
15#ifndef __EFI_HTTP_BOOT_HTTP_H__
16#define __EFI_HTTP_BOOT_HTTP_H__
17
18#define HTTP_BOOT_REQUEST_TIMEOUT 5000 // 5 seconds in uints of millisecond.
19#define HTTP_BOOT_BLOCK_SIZE 1024
20
21#define HTTP_FIELD_NAME_USER_AGENT "User-Agent"
22#define HTTP_FIELD_NAME_HOST "Host"
23#define HTTP_FIELD_NAME_ACCEPT "Accept"
24
25
26#define HTTP_USER_AGENT_EFI_HTTP_BOOT "UefiHttpBoot/1.0"
27
28//
29// Record the data length and start address of a data block.
30//
31typedef struct {
32 LIST_ENTRY Link; // Link to the EntityDataList in HTTP_BOOT_CACHE_CONTENT
33 UINT8 *Block; // If NULL, the data is in previous data block.
34 UINT8 *DataStart; // Point to somewhere in the Block
35 UINTN DataLength;
36} HTTP_BOOT_ENTITY_DATA;
37
38//
39// Structure for a cache item
40//
41typedef struct {
42 LIST_ENTRY Link; // Link to the CacheList in driver's private data.
43 EFI_HTTP_REQUEST_DATA *RequestData;
44 HTTP_IO_RESOPNSE_DATA *ResponseData; // Not include any message-body data.
45 UINTN EntityLength;
46 LIST_ENTRY EntityDataList; // Entity data (message-body)
47} HTTP_BOOT_CACHE_CONTENT;
48
49//
50// Callback data for HTTP_BODY_PARSER_CALLBACK()
51//
52typedef struct {
53 EFI_STATUS Status;
54 //
55 // Cache info.
56 //
57 HTTP_BOOT_CACHE_CONTENT *Cache;
58 BOOLEAN NewBlock;
59 UINT8 *Block;
60
61 //
62 // Caller provided buffer to load the file in.
63 //
64 UINTN CopyedSize;
65 UINTN BufferSize;
66 UINT8 *Buffer;
67} HTTP_BOOT_CALLBACK_DATA;
68
69/**
70 Discover all the boot information for boot file.
71
72 @param[in, out] Private The pointer to the driver's private data.
73
74 @retval EFI_SUCCESS Successfully obtained all the boot information .
75 @retval Others Failed to retrieve the boot information.
76
77**/
78EFI_STATUS
79HttpBootDiscoverBootInfo (
80 IN OUT HTTP_BOOT_PRIVATE_DATA *Private
81 );
82
83/**
84 Create a HttpIo instance for the file download.
85
86 @param[in] Private The pointer to the driver's private data.
87
88 @retval EFI_SUCCESS Successfully created.
89 @retval Others Failed to create HttpIo.
90
91**/
92EFI_STATUS
93HttpBootCreateHttpIo (
94 IN HTTP_BOOT_PRIVATE_DATA *Private
95 );
96
97/**
98 This function download the boot file by using UEFI HTTP protocol.
99
100 @param[in] Private The pointer to the driver's private data.
101 @param[in] HeaderOnly Only request the response header, it could save a lot of time if
102 the caller only want to know the size of the requested file.
103 @param[in, out] BufferSize On input the size of Buffer in bytes. On output with a return
104 code of EFI_SUCCESS, the amount of data transferred to
105 Buffer. On output with a return code of EFI_BUFFER_TOO_SMALL,
106 the size of Buffer required to retrieve the requested file.
107 @param[out] Buffer The memory buffer to transfer the file to. IF Buffer is NULL,
108 then the size of the requested file is returned in
109 BufferSize.
110
111 @retval EFI_SUCCESS The file was loaded.
112 @retval EFI_INVALID_PARAMETER BufferSize is NULL or Buffer Size is not NULL but Buffer is NULL.
113 @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
114 @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory entry.
115 BufferSize has been updated with the size needed to complete
116 the request.
117 @retval Others Unexpected error happened.
118
119**/
120EFI_STATUS
121HttpBootGetBootFile (
122 IN HTTP_BOOT_PRIVATE_DATA *Private,
123 IN BOOLEAN HeaderOnly,
124 IN OUT UINTN *BufferSize,
125 OUT UINT8 *Buffer
126 );
127
128/**
129 Clean up all cached data.
130
131 @param[in] Private The pointer to the driver's private data.
132
133**/
134VOID
135HttpBootFreeCacheList (
136 IN HTTP_BOOT_PRIVATE_DATA *Private
137 );
138
139#endif