• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   Declaration of the boot file download function.
3 
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
6 This program and the accompanying materials are licensed and made available under
7 the terms and conditions of the BSD License that accompanies this distribution.
8 The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
10 
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 **/
15 
16 #ifndef __EFI_HTTP_BOOT_HTTP_H__
17 #define __EFI_HTTP_BOOT_HTTP_H__
18 
19 #define HTTP_BOOT_REQUEST_TIMEOUT            5000      // 5 seconds in uints of millisecond.
20 #define HTTP_BOOT_RESPONSE_TIMEOUT           5000      // 5 seconds in uints of millisecond.
21 #define HTTP_BOOT_BLOCK_SIZE                 1500
22 
23 
24 
25 #define HTTP_USER_AGENT_EFI_HTTP_BOOT        "UefiHttpBoot/1.0"
26 
27 //
28 // Record the data length and start address of a data block.
29 //
30 typedef struct {
31   LIST_ENTRY                 Link;        // Link to the EntityDataList in HTTP_BOOT_CACHE_CONTENT
32   UINT8                      *Block;      // If NULL, the data is in previous data block.
33   UINT8                      *DataStart;  // Point to somewhere in the Block
34   UINTN                      DataLength;
35 } HTTP_BOOT_ENTITY_DATA;
36 
37 //
38 // Structure for a cache item
39 //
40 typedef struct {
41   LIST_ENTRY                 Link;            // Link to the CacheList in driver's private data.
42   EFI_HTTP_REQUEST_DATA      *RequestData;
43   HTTP_IO_RESPONSE_DATA      *ResponseData;   // Not include any message-body data.
44   HTTP_BOOT_IMAGE_TYPE       ImageType;
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 //
52 typedef 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 **/
78 EFI_STATUS
79 HttpBootDiscoverBootInfo (
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 **/
92 EFI_STATUS
93 HttpBootCreateHttpIo (
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   @param[out]      ImageType       The image type of the downloaded file.
111 
112   @retval EFI_SUCCESS              The file was loaded.
113   @retval EFI_INVALID_PARAMETER    BufferSize is NULL or Buffer Size is not NULL but Buffer is NULL.
114   @retval EFI_OUT_OF_RESOURCES     Could not allocate needed resources
115   @retval EFI_BUFFER_TOO_SMALL     The BufferSize is too small to read the current directory entry.
116                                    BufferSize has been updated with the size needed to complete
117                                    the request.
118   @retval Others                   Unexpected error happened.
119 
120 **/
121 EFI_STATUS
122 HttpBootGetBootFile (
123   IN     HTTP_BOOT_PRIVATE_DATA   *Private,
124   IN     BOOLEAN                  HeaderOnly,
125   IN OUT UINTN                    *BufferSize,
126      OUT UINT8                    *Buffer,
127      OUT HTTP_BOOT_IMAGE_TYPE     *ImageType
128   );
129 
130 /**
131   Clean up all cached data.
132 
133   @param[in]          Private         The pointer to the driver's private data.
134 
135 **/
136 VOID
137 HttpBootFreeCacheList (
138   IN     HTTP_BOOT_PRIVATE_DATA   *Private
139   );
140 
141 #endif
142