https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Siyuan Fu <siyuan.fu@intel.com>
		
			
				
	
	
		
			138 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Declaration of the boot file download function.
 | |
| 
 | |
| Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_HTTP_BOOT_HTTP_H__
 | |
| #define __EFI_HTTP_BOOT_HTTP_H__
 | |
| 
 | |
| #define HTTP_BOOT_REQUEST_TIMEOUT            5000      // 5 seconds in uints of millisecond.
 | |
| #define HTTP_BOOT_RESPONSE_TIMEOUT           5000      // 5 seconds in uints of millisecond.
 | |
| #define HTTP_BOOT_BLOCK_SIZE                 1500
 | |
| 
 | |
| 
 | |
| 
 | |
| #define HTTP_USER_AGENT_EFI_HTTP_BOOT        "UefiHttpBoot/1.0"
 | |
| 
 | |
| //
 | |
| // Record the data length and start address of a data block.
 | |
| //
 | |
| typedef struct {
 | |
|   LIST_ENTRY                 Link;        // Link to the EntityDataList in HTTP_BOOT_CACHE_CONTENT
 | |
|   UINT8                      *Block;      // If NULL, the data is in previous data block.
 | |
|   UINT8                      *DataStart;  // Point to somewhere in the Block
 | |
|   UINTN                      DataLength;
 | |
| } HTTP_BOOT_ENTITY_DATA;
 | |
| 
 | |
| //
 | |
| // Structure for a cache item
 | |
| //
 | |
| typedef struct {
 | |
|   LIST_ENTRY                 Link;            // Link to the CacheList in driver's private data.
 | |
|   EFI_HTTP_REQUEST_DATA      *RequestData;
 | |
|   HTTP_IO_RESPONSE_DATA      *ResponseData;   // Not include any message-body data.
 | |
|   HTTP_BOOT_IMAGE_TYPE       ImageType;
 | |
|   UINTN                      EntityLength;
 | |
|   LIST_ENTRY                 EntityDataList;  // Entity data (message-body)
 | |
| } HTTP_BOOT_CACHE_CONTENT;
 | |
| 
 | |
| //
 | |
| // Callback data for HTTP_BODY_PARSER_CALLBACK()
 | |
| //
 | |
| typedef struct {
 | |
|   EFI_STATUS                 Status;
 | |
|   //
 | |
|   // Cache info.
 | |
|   //
 | |
|   HTTP_BOOT_CACHE_CONTENT    *Cache;
 | |
|   BOOLEAN                    NewBlock;
 | |
|   UINT8                      *Block;
 | |
| 
 | |
|   //
 | |
|   // Caller provided buffer to load the file in.
 | |
|   //
 | |
|   UINTN                      CopyedSize;
 | |
|   UINTN                      BufferSize;
 | |
|   UINT8                      *Buffer;
 | |
| 
 | |
|   HTTP_BOOT_PRIVATE_DATA     *Private;
 | |
| } HTTP_BOOT_CALLBACK_DATA;
 | |
| 
 | |
| /**
 | |
|   Discover all the boot information for boot file.
 | |
| 
 | |
|   @param[in, out]    Private        The pointer to the driver's private data.
 | |
| 
 | |
|   @retval EFI_SUCCESS          Successfully obtained all the boot information .
 | |
|   @retval Others               Failed to retrieve the boot information.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpBootDiscoverBootInfo (
 | |
|   IN OUT HTTP_BOOT_PRIVATE_DATA   *Private
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create a HttpIo instance for the file download.
 | |
| 
 | |
|   @param[in]    Private        The pointer to the driver's private data.
 | |
| 
 | |
|   @retval EFI_SUCCESS          Successfully created.
 | |
|   @retval Others               Failed to create HttpIo.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpBootCreateHttpIo (
 | |
|   IN     HTTP_BOOT_PRIVATE_DATA       *Private
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function download the boot file by using UEFI HTTP protocol.
 | |
| 
 | |
|   @param[in]       Private         The pointer to the driver's private data.
 | |
|   @param[in]       HeaderOnly      Only request the response header, it could save a lot of time if
 | |
|                                    the caller only want to know the size of the requested file.
 | |
|   @param[in, out]  BufferSize      On input the size of Buffer in bytes. On output with a return
 | |
|                                    code of EFI_SUCCESS, the amount of data transferred to
 | |
|                                    Buffer. On output with a return code of EFI_BUFFER_TOO_SMALL,
 | |
|                                    the size of Buffer required to retrieve the requested file.
 | |
|   @param[out]      Buffer          The memory buffer to transfer the file to. IF Buffer is NULL,
 | |
|                                    then the size of the requested file is returned in
 | |
|                                    BufferSize.
 | |
|   @param[out]      ImageType       The image type of the downloaded file.
 | |
| 
 | |
|   @retval EFI_SUCCESS              The file was loaded.
 | |
|   @retval EFI_INVALID_PARAMETER    BufferSize is NULL or Buffer Size is not NULL but Buffer is NULL.
 | |
|   @retval EFI_OUT_OF_RESOURCES     Could not allocate needed resources
 | |
|   @retval EFI_BUFFER_TOO_SMALL     The BufferSize is too small to read the current directory entry.
 | |
|                                    BufferSize has been updated with the size needed to complete
 | |
|                                    the request.
 | |
|   @retval Others                   Unexpected error happened.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| HttpBootGetBootFile (
 | |
|   IN     HTTP_BOOT_PRIVATE_DATA   *Private,
 | |
|   IN     BOOLEAN                  HeaderOnly,
 | |
|   IN OUT UINTN                    *BufferSize,
 | |
|      OUT UINT8                    *Buffer,
 | |
|      OUT HTTP_BOOT_IMAGE_TYPE     *ImageType
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Clean up all cached data.
 | |
| 
 | |
|   @param[in]          Private         The pointer to the driver's private data.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| HttpBootFreeCacheList (
 | |
|   IN     HTTP_BOOT_PRIVATE_DATA   *Private
 | |
|   );
 | |
| 
 | |
| #endif
 |