Home | History | Annotate | Download | only in HttpBootDxe
      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