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: Bob Feng <bob.c.feng@intel.com>
		
			
				
	
	
		
			432 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			432 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Internal include file for Tiano Decompress Library.
 | |
| 
 | |
|   Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __TIANO_DECOMPRESS_H__
 | |
| #define __TIANO_DECOMPRESS_H__
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <assert.h>
 | |
| #include <Common/UefiBaseTypes.h>
 | |
| 
 | |
| 
 | |
| //
 | |
| // Decompression algorithm begins here
 | |
| //
 | |
| #define UTILITY_NAME "TianoCompress"
 | |
| #define UTILITY_MAJOR_VERSION 0
 | |
| #define UTILITY_MINOR_VERSION 1
 | |
| 
 | |
| //
 | |
| // Default output file name
 | |
| //
 | |
| #define DEFAULT_OUTPUT_FILE "file.tmp"
 | |
| 
 | |
| #define BITBUFSIZ 32
 | |
| #define MAXMATCH  256
 | |
| #define THRESHOLD 3
 | |
| #define CODE_BIT  16
 | |
| #define BAD_TABLE - 1
 | |
| 
 | |
| typedef INT32 NODE;
 | |
| 
 | |
| //
 | |
| // C: Char&Len Set; P: Position Set; T: exTra Set
 | |
| //
 | |
| #define NC      (0xff + MAXMATCH + 2 - THRESHOLD)
 | |
| #define CBIT    9
 | |
| #define MAXPBIT 5
 | |
| #define TBIT    5
 | |
| #define MAXNP   ((1U << MAXPBIT) - 1)
 | |
| #define NT      (CODE_BIT + 3)
 | |
| #if NT > MAXNP
 | |
| #define NPT NT
 | |
| #else
 | |
| #define NPT MAXNP
 | |
| #endif
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8   *mSrcBase;  // Starting address of compressed data
 | |
|   UINT8   *mDstBase;  // Starting address of decompressed data
 | |
|   UINT32  mOutBuf;
 | |
|   UINT32  mInBuf;
 | |
| 
 | |
|   UINT16  mBitCount;
 | |
|   UINT32  mBitBuf;
 | |
|   UINT32  mSubBitBuf;
 | |
|   UINT16  mBlockSize;
 | |
|   UINT32  mCompSize;
 | |
|   UINT32  mOrigSize;
 | |
| 
 | |
|   UINT16  mBadTableFlag;
 | |
| 
 | |
|   UINT16  mLeft[2 * NC - 1];
 | |
|   UINT16  mRight[2 * NC - 1];
 | |
|   UINT8   mCLen[NC];
 | |
|   UINT8   mPTLen[NPT];
 | |
|   UINT16  mCTable[4096];
 | |
|   UINT16  mPTTable[256];
 | |
| 
 | |
|   //
 | |
|   // The length of the field 'Position Set Code Length Array Size' in Block Header.
 | |
|   // For EFI 1.1 de/compression algorithm, mPBit = 4
 | |
|   // For Tiano de/compression algorithm, mPBit = 5
 | |
|   //
 | |
|   UINT8   mPBit;
 | |
| } SCRATCH_DATA;
 | |
| 
 | |
| //
 | |
| // Function Prototypes
 | |
| //
 | |
| 
 | |
| EFI_STATUS
 | |
| GetFileContents (
 | |
|   IN char    *InputFileName,
 | |
|   OUT UINT8   *FileBuffer,
 | |
|   OUT UINT32  *BufferLength
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| PutDword(
 | |
|   IN UINT32 Data
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| EFI_STATUS
 | |
| AllocateMemory (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| FreeMemory (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| InitSlide (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| NODE
 | |
| Child (
 | |
|   IN NODE   NodeQ,
 | |
|   IN UINT8  CharC
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| MakeChild (
 | |
|   IN NODE  NodeQ,
 | |
|   IN UINT8 CharC,
 | |
|   IN NODE  NodeR
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| Split (
 | |
|   IN NODE Old
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| InsertNode (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| DeleteNode (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| GetNextMatch (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| EFI_STATUS
 | |
| Encode (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| CountTFreq (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| WritePTLen (
 | |
|   IN INT32 Number,
 | |
|   IN INT32 nbit,
 | |
|   IN INT32 Special
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| WriteCLen (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| EncodeC (
 | |
|   IN INT32 Value
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| EncodeP (
 | |
|   IN UINT32 Value
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| SendBlock (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| Output (
 | |
|   IN UINT32 c,
 | |
|   IN UINT32 p
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| HufEncodeStart (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| HufEncodeEnd (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| MakeCrcTable (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| PutBits (
 | |
|   IN INT32  Number,
 | |
|   IN UINT32 Value
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| INT32
 | |
| FreadCrc (
 | |
|   OUT UINT8 *Pointer,
 | |
|   IN  INT32 Number
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| InitPutBits (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| CountLen (
 | |
|   IN INT32 Index
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| MakeLen (
 | |
|   IN INT32 Root
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| DownHeap (
 | |
|   IN INT32 Index
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| MakeCode (
 | |
|   IN  INT32       Number,
 | |
|   IN  UINT8 Len[  ],
 | |
|   OUT UINT16 Code[]
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| INT32
 | |
| MakeTree (
 | |
|   IN  INT32            NParm,
 | |
|   IN  UINT16  FreqParm[],
 | |
|   OUT UINT8   LenParm[ ],
 | |
|   OUT UINT16  CodeParm[]
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Read NumOfBit of bits from source into mBitBuf
 | |
| 
 | |
|   Shift mBitBuf NumOfBits left. Read in NumOfBits of bits from source.
 | |
| 
 | |
|   @param  Sd        The global scratch data
 | |
|   @param  NumOfBits The number of bits to shift and read.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| FillBuf (
 | |
|   IN  SCRATCH_DATA  *Sd,
 | |
|   IN  UINT16        NumOfBits
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get NumOfBits of bits out from mBitBuf
 | |
| 
 | |
|   Get NumOfBits of bits out from mBitBuf. Fill mBitBuf with subsequent
 | |
|   NumOfBits of bits from source. Returns NumOfBits of bits that are
 | |
|   popped out.
 | |
| 
 | |
|   @param  Sd        The global scratch data.
 | |
|   @param  NumOfBits The number of bits to pop and read.
 | |
| 
 | |
|   @return The bits that are popped out.
 | |
| 
 | |
| **/
 | |
| UINT32
 | |
| GetBits (
 | |
|   IN  SCRATCH_DATA  *Sd,
 | |
|   IN  UINT16        NumOfBits
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Creates Huffman Code mapping table according to code length array.
 | |
| 
 | |
|   Creates Huffman Code mapping table for Extra Set, Char&Len Set
 | |
|   and Position Set according to code length array.
 | |
| 
 | |
|   @param  Sd        The global scratch data
 | |
|   @param  NumOfChar Number of symbols in the symbol set
 | |
|   @param  BitLen    Code length array
 | |
|   @param  TableBits The width of the mapping table
 | |
|   @param  Table     The table
 | |
| 
 | |
|   @retval  0 OK.
 | |
|   @retval  BAD_TABLE The table is corrupted.
 | |
| 
 | |
| **/
 | |
| UINT16
 | |
| MakeTable (
 | |
|   IN  SCRATCH_DATA  *Sd,
 | |
|   IN  UINT16        NumOfChar,
 | |
|   IN  UINT8         *BitLen,
 | |
|   IN  UINT16        TableBits,
 | |
|   OUT UINT16        *Table
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Decodes a position value.
 | |
| 
 | |
|   Get a position value according to Position Huffman Table.
 | |
| 
 | |
|   @param  Sd the global scratch data
 | |
| 
 | |
|   @return The position value decoded.
 | |
| 
 | |
| **/
 | |
| UINT32
 | |
| DecodeP (
 | |
|   IN  SCRATCH_DATA  *Sd
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Reads code lengths for the Extra Set or the Position Set.
 | |
| 
 | |
|   Read in the Extra Set or Position Set Length Array, then
 | |
|   generate the Huffman code mapping for them.
 | |
| 
 | |
|   @param  Sd      The global scratch data.
 | |
|   @param  nn      Number of symbols.
 | |
|   @param  nbit    Number of bits needed to represent nn.
 | |
|   @param  Special The special symbol that needs to be taken care of.
 | |
| 
 | |
|   @retval  0 OK.
 | |
|   @retval  BAD_TABLE Table is corrupted.
 | |
| 
 | |
| **/
 | |
| UINT16
 | |
| ReadPTLen (
 | |
|   IN  SCRATCH_DATA  *Sd,
 | |
|   IN  UINT16        nn,
 | |
|   IN  UINT16        nbit,
 | |
|   IN  UINT16        Special
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Reads code lengths for Char&Len Set.
 | |
| 
 | |
|   Read in and decode the Char&Len Set Code Length Array, then
 | |
|   generate the Huffman Code mapping table for the Char&Len Set.
 | |
| 
 | |
|   @param  Sd the global scratch data
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ReadCLen (
 | |
|   SCRATCH_DATA  *Sd
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Decode a character/length value.
 | |
| 
 | |
|   Read one value from mBitBuf, Get one code from mBitBuf. If it is at block boundary, generates
 | |
|   Huffman code mapping table for Extra Set, Code&Len Set and
 | |
|   Position Set.
 | |
| 
 | |
|   @param  Sd The global scratch data.
 | |
| 
 | |
|   @return The value decoded.
 | |
| 
 | |
| **/
 | |
| UINT16
 | |
| DecodeC (
 | |
|   SCRATCH_DATA  *Sd
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Decode the source data and put the resulting data into the destination buffer.
 | |
| 
 | |
|   Decode the source data and put the resulting data into the destination buffer.
 | |
| 
 | |
|   @param  Sd The global scratch data
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| Decode (
 | |
|   SCRATCH_DATA  *Sd
 | |
|   );
 | |
| 
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| TDecompress (
 | |
|   IN VOID  *Source,
 | |
|   IN OUT VOID    *Destination,
 | |
|   IN OUT VOID    *Scratch,
 | |
|   IN UINT32      Version
 | |
|   );
 | |
| 
 | |
| #endif
 |