1 /** @file
2   Provides decompression services to the PEI Foundatoin.
3 
4   Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
5   This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  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   @par Revision Reference:
14   This PPI is introduced in PI Version 1.0.
15 
16 **/
17 
18 #ifndef __DECOMPRESS_PPI_H__
19 #define __DECOMPRESS_PPI_H__
20 
21 #define EFI_PEI_DECOMPRESS_PPI_GUID \
22   { 0x1a36e4e7, 0xfab6, 0x476a, { 0x8e, 0x75, 0x69, 0x5a, 0x5, 0x76, 0xfd, 0xd7 } }
23 
24 typedef struct _EFI_PEI_DECOMPRESS_PPI  EFI_PEI_DECOMPRESS_PPI;
25 
26 /**
27   Decompress a single compression section in a firmware file.
28 
29   Decompresses the data in a compressed section and returns it
30   as a series of standard PI Firmware File Sections. The
31   required memory is allocated from permanent memory.
32 
33   @param This                   Points to this instance of the
34                                 EFI_PEI_DECOMPRESS_PEI PPI.
35   @param InputSection           Points to the compressed section.
36   @param OutputBuffer           Holds the returned pointer to the
37                                 decompressed sections.
38   @param OutputSize             Holds the returned size of the decompress
39                                 section streams.
40 
41   @retval EFI_SUCCESS           The section was decompressed
42                                 successfully. OutputBuffer contains the
43                                 resulting data and OutputSize contains
44                                 the resulting size.
45   @retval EFI_OUT_OF_RESOURCES  Unable to allocate sufficient
46                                 memory to hold the decompressed data.
47   @retval EFI_UNSUPPORTED       The compression type specified
48                                 in the compression header is unsupported.
49 
50 **/
51 typedef
52 EFI_STATUS
53 (EFIAPI *EFI_PEI_DECOMPRESS_DECOMPRESS)(
54   IN  CONST EFI_PEI_DECOMPRESS_PPI  *This,
55   IN  CONST EFI_COMPRESSION_SECTION *InputSection,
56   OUT VOID                           **OutputBuffer,
57   OUT UINTN                          *OutputSize
58 );
59 
60 
61 ///
62 /// This PPI's single member function decompresses a compression
63 /// encapsulated section. It is used by the PEI Foundation to
64 /// process sectioned files. Prior to the installation of this PPI,
65 /// compression sections will be ignored.
66 ///
67 struct _EFI_PEI_DECOMPRESS_PPI {
68   EFI_PEI_DECOMPRESS_DECOMPRESS Decompress;
69 };
70 
71 
72 extern EFI_GUID   gEfiPeiDecompressPpiGuid;
73 
74 #endif
75