4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Provides services to decompress a buffer using the UEFI Decompress algorithm.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The UEFI Decompress Library enables the decompression of objects that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync were compressed using the UEFI compression scheme. The UEFI Decompress
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Library is independent of environment and requires the caller to allocate
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync all required memory buffers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __UEFI_DECPOMPRESS_LIB_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __UEFI_DECPOMPRESS_LIB_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Given a compressed source buffer, this function retrieves the size of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the uncompressed buffer and the size of the scratch buffer required
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to decompress the compressed source buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves the size of the uncompressed buffer and the temporary scratch buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync required to decompress the buffer specified by Source and SourceSize.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the size of the uncompressed buffer or the size of the scratch buffer cannot
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be determined from the compressed data specified by Source and SourceData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then RETURN_INVALID_PARAMETER is returned. Otherwise, the size of the uncompressed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buffer is returned in DestinationSize, the size of the scratch buffer is returned
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in ScratchSize, and RETURN_SUCCESS is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function does not have scratch buffer available to perform a thorough
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync checking of the validity of the source data. It just retrieves the "Original Size"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync field from the beginning bytes of the source data and output it as DestinationSize.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync And ScratchSize is specific to the decompression implementation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Source is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If DestinationSize is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If ScratchSize is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Source The source buffer containing the compressed data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SourceSize The size, in bytes, of the source buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DestinationSize A pointer to the size, in bytes, of the uncompressed buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that will be generated when the compressed buffer specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by Source and SourceSize is decompressed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ScratchSize A pointer to the size, in bytes, of the scratch buffer that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is required to decompress the compressed buffer specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by Source and SourceSize.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_SUCCESS The size of the uncompressed data was returned
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in DestinationSize and the size of the scratch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buffer was returned in ScratchSize.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_INVALID_PARAMETER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The size of the uncompressed data or the size of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the scratch buffer cannot be determined from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the compressed data specified by Source
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and SourceSize.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncRETURN_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUefiDecompressGetInfo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST VOID *Source,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 SourceSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *DestinationSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *ScratchSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Decompresses a compressed source buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Extracts decompressed data to its original form.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is designed so that the decompression algorithm can be implemented
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync without using any memory services. As a result, this function is not allowed to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync call any memory allocation services in its implementation. It is the caller's
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync responsibility to allocate and free the Destination and Scratch buffers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the compressed source data specified by Source is successfully decompressed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync into Destination, then RETURN_SUCCESS is returned. If the compressed source data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Source is not in a valid compressed data format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then RETURN_INVALID_PARAMETER is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Source is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Destination is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the required scratch buffer size > 0 and Scratch is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Source The source buffer containing the compressed data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Destination The destination buffer to store the decompressed data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Scratch A temporary scratch buffer that is used to perform the decompression.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This is an optional parameter that may be NULL if the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync required scratch buffer size is 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_SUCCESS Decompression completed successfully, and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the uncompressed buffer is returned in Destination.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval RETURN_INVALID_PARAMETER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The source buffer specified by Source is corrupted
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (not in a valid compressed format).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncRETURN_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUefiDecompress (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST VOID *Source,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *Destination,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *Scratch OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif