1 /** @file 2 Declaration of the boot file download function. 3 4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials are licensed and made available under 6 the terms and conditions of the BSD License that accompanies this distribution. 7 The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php. 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT 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 1500 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 // 31 typedef 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 // 41 typedef 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 // 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 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 **/ 120 EFI_STATUS 121 HttpBootGetBootFile ( 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 **/ 134 VOID 135 HttpBootFreeCacheList ( 136 IN HTTP_BOOT_PRIVATE_DATA *Private 137 ); 138 139 #endif 140