]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLibInternals.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Library / BaseUefiDecompressLib / BaseUefiDecompressLibInternals.h
index 70ae3f29748f5285350966b3f84db580240be406..cb08c2b14d96507b84f3400c385de19e224fecd9 100644 (file)
@@ -1,82 +1,79 @@
 /** @file\r
-  Internal include file for Base UEFI Decompress Libary.\r
+  Internal data structure defintions for Base UEFI Decompress Library.\r
 \r
-  Copyright (c) 2006, Intel Corporation\r
-  All rights reserved. This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-  Module Name:  BaseUefiDecompressLibInternals.h\r
+  Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #ifndef __BASE_UEFI_DECOMPRESS_LIB_INTERNALS_H__\r
 #define __BASE_UEFI_DECOMPRESS_LIB_INTERNALS_H__\r
 \r
+#include <Base.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiDecompressLib.h>\r
 //\r
 // Decompression algorithm begins here\r
 //\r
-#define BITBUFSIZ 32\r
-#define MAXMATCH  256\r
-#define THRESHOLD 3\r
-#define CODE_BIT  16\r
-#define BAD_TABLE - 1\r
+#define BITBUFSIZ  32\r
+#define MAXMATCH   256\r
+#define THRESHOLD  3\r
+#define CODE_BIT   16\r
+#define BAD_TABLE  - 1\r
 \r
 //\r
 // C: Char&Len Set; P: Position Set; T: exTra Set\r
 //\r
-#define NC      (0xff + MAXMATCH + 2 - THRESHOLD)\r
-#define CBIT    9\r
-#define MAXPBIT 5\r
-#define TBIT    5\r
-#define MAXNP   ((1U << MAXPBIT) - 1)\r
-#define NT      (CODE_BIT + 3)\r
+#define NC       (0xff + MAXMATCH + 2 - THRESHOLD)\r
+#define CBIT     9\r
+#define MAXPBIT  5\r
+#define TBIT     5\r
+#define MAXNP    ((1U << MAXPBIT) - 1)\r
+#define NT       (CODE_BIT + 3)\r
 #if NT > MAXNP\r
-#define NPT NT\r
+#define NPT  NT\r
 #else\r
-#define NPT MAXNP\r
+#define NPT  MAXNP\r
 #endif\r
 \r
 typedef struct {\r
-  UINT8   *mSrcBase;  ///< Starting address of compressed data\r
-  UINT8   *mDstBase;  ///< Starting address of decompressed data\r
-  UINT32  mOutBuf;\r
-  UINT32  mInBuf;\r
-\r
-  UINT16  mBitCount;\r
-  UINT32  mBitBuf;\r
-  UINT32  mSubBitBuf;\r
-  UINT16  mBlockSize;\r
-  UINT32  mCompSize;\r
-  UINT32  mOrigSize;\r
-\r
-  UINT16  mBadTableFlag;\r
-\r
-  UINT16  mLeft[2 * NC - 1];\r
-  UINT16  mRight[2 * NC - 1];\r
-  UINT8   mCLen[NC];\r
-  UINT8   mPTLen[NPT];\r
-  UINT16  mCTable[4096];\r
-  UINT16  mPTTable[256];\r
+  UINT8     *mSrcBase; // The starting address of compressed data\r
+  UINT8     *mDstBase; // The starting address of decompressed data\r
+  UINT32    mOutBuf;\r
+  UINT32    mInBuf;\r
+\r
+  UINT16    mBitCount;\r
+  UINT32    mBitBuf;\r
+  UINT32    mSubBitBuf;\r
+  UINT16    mBlockSize;\r
+  UINT32    mCompSize;\r
+  UINT32    mOrigSize;\r
+\r
+  UINT16    mBadTableFlag;\r
+\r
+  UINT16    mLeft[2 * NC - 1];\r
+  UINT16    mRight[2 * NC - 1];\r
+  UINT8     mCLen[NC];\r
+  UINT8     mPTLen[NPT];\r
+  UINT16    mCTable[4096];\r
+  UINT16    mPTTable[256];\r
 \r
   ///\r
   /// The length of the field 'Position Set Code Length Array Size' in Block Header.\r
-  /// For EFI 1.1 de/compression algorithm, mPBit = 4\r
-  /// For Tiano de/compression algorithm, mPBit = 5\r
+  /// For UEFI 2.0 de/compression algorithm, mPBit = 4.\r
+  /// For Tiano de/compression algorithm, mPBit = 5.\r
   ///\r
-  UINT8   mPBit;\r
+  UINT8     mPBit;\r
 } SCRATCH_DATA;\r
 \r
 /**\r
-  Read NumOfBit of bits from source into mBitBuf\r
+  Read NumOfBit of bits from source into mBitBuf.\r
 \r
   Shift mBitBuf NumOfBits left. Read in NumOfBits of bits from source.\r
 \r
-  @param  Sd        The global scratch data\r
+  @param  Sd        The global scratch data.\r
   @param  NumOfBits The number of bits to shift and read.\r
 \r
 **/\r
@@ -87,10 +84,10 @@ FillBuf (
   );\r
 \r
 /**\r
-  Get NumOfBits of bits out from mBitBuf\r
+  Get NumOfBits of bits out from mBitBuf.\r
 \r
-  Get NumOfBits of bits out from mBitBuf. Fill mBitBuf with subsequent \r
-  NumOfBits of bits from source. Returns NumOfBits of bits that are \r
+  Get NumOfBits of bits out from mBitBuf. Fill mBitBuf with subsequent\r
+  NumOfBits of bits from source. Returns NumOfBits of bits that are\r
   popped out.\r
 \r
   @param  Sd        The global scratch data.\r
@@ -108,14 +105,15 @@ GetBits (
 /**\r
   Creates Huffman Code mapping table according to code length array.\r
 \r
-  Creates Huffman Code mapping table for Extra Set, Char&Len Set \r
+  Creates Huffman Code mapping table for Extra Set, Char&Len Set\r
   and Position Set according to code length array.\r
+  If TableBits > 16, then ASSERT ().\r
 \r
-  @param  Sd        The global scratch data\r
-  @param  NumOfChar Number of symbols in the symbol set\r
-  @param  BitLen    Code length array\r
-  @param  TableBits The width of the mapping table\r
-  @param  Table     The table\r
+  @param  Sd        The global scratch data.\r
+  @param  NumOfChar The number of symbols in the symbol set.\r
+  @param  BitLen    Code length array.\r
+  @param  TableBits The width of the mapping table.\r
+  @param  Table     The table to be created.\r
 \r
   @retval  0 OK.\r
   @retval  BAD_TABLE The table is corrupted.\r
@@ -134,8 +132,8 @@ MakeTable (
   Decodes a position value.\r
 \r
   Get a position value according to Position Huffman Table.\r
-  \r
-  @param  Sd the global scratch data\r
+\r
+  @param  Sd The global scratch data.\r
 \r
   @return The position value decoded.\r
 \r
@@ -148,12 +146,12 @@ DecodeP (
 /**\r
   Reads code lengths for the Extra Set or the Position Set.\r
 \r
-  Read in the Extra Set or Pointion Set Length Arrary, then\r
+  Read in the Extra Set or Position Set Length Array, then\r
   generate the Huffman code mapping for them.\r
 \r
   @param  Sd      The global scratch data.\r
-  @param  nn      Number of symbols.\r
-  @param  nbit    Number of bits needed to represent nn.\r
+  @param  nn      The number of symbols.\r
+  @param  nbit    The number of bits needed to represent nn.\r
   @param  Special The special symbol that needs to be taken care of.\r
 \r
   @retval  0 OK.\r
@@ -170,11 +168,11 @@ ReadPTLen (
 \r
 /**\r
   Reads code lengths for Char&Len Set.\r
-  \r
+\r
   Read in and decode the Char&Len Set Code Length Array, then\r
   generate the Huffman Code mapping table for the Char&Len Set.\r
 \r
-  @param  Sd the global scratch data\r
+  @param  Sd The global scratch data.\r
 \r
 **/\r
 VOID\r
@@ -184,7 +182,7 @@ ReadCLen (
 \r
 /**\r
   Decode a character/length value.\r
-  \r
+\r
   Read one value from mBitBuf, Get one code from mBitBuf. If it is at block boundary, generates\r
   Huffman code mapping table for Extra Set, Code&Len Set and\r
   Position Set.\r
@@ -202,9 +200,7 @@ DecodeC (
 /**\r
   Decode the source data and put the resulting data into the destination buffer.\r
 \r
-  Decode the source data and put the resulting data into the destination buffer.\r
-  \r
-  @param  Sd The global scratch data\r
+  @param  Sd The global scratch data.\r
 \r
 **/\r
 VOID\r
@@ -212,4 +208,42 @@ Decode (
   SCRATCH_DATA  *Sd\r
   );\r
 \r
+/**\r
+  Decompresses a compressed source buffer.\r
+\r
+  Extracts decompressed data to its original form.\r
+  This function is designed so that the decompression algorithm can be implemented\r
+  without using any memory services.  As a result, this function is not allowed to\r
+  call any memory allocation services in its implementation.  It is the caller's\r
+  responsibility to allocate and free the Destination and Scratch buffers.\r
+  If the compressed source data specified by Source is successfully decompressed\r
+  into Destination, then RETURN_SUCCESS is returned.  If the compressed source data\r
+  specified by Source is not in a valid compressed data format,\r
+  then RETURN_INVALID_PARAMETER is returned.\r
+\r
+  If Source is NULL, then ASSERT().\r
+  If Destination is NULL, then ASSERT().\r
+  If the required scratch buffer size > 0 and Scratch is NULL, then ASSERT().\r
+\r
+  @param  Source      The source buffer containing the compressed data.\r
+  @param  Destination The destination buffer to store the decompressed data.\r
+  @param  Scratch     A temporary scratch buffer that is used to perform the decompression.\r
+                      This is an optional parameter that may be NULL if the\r
+                      required scratch buffer size is 0.\r
+  @param  Version     1 for UEFI Decompress algoruthm, 2 for Tiano Decompess algorithm.\r
+\r
+  @retval  RETURN_SUCCESS Decompression completed successfully, and\r
+                          the uncompressed buffer is returned in Destination.\r
+  @retval  RETURN_INVALID_PARAMETER\r
+                          The source buffer specified by Source is corrupted\r
+                          (not in a valid compressed format).\r
+**/\r
+RETURN_STATUS\r
+UefiTianoDecompress (\r
+  IN CONST VOID  *Source,\r
+  IN OUT VOID    *Destination,\r
+  IN OUT VOID    *Scratch,\r
+  IN UINT32      Version\r
+  );\r
+\r
 #endif\r