4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Internal data structure defintions for Base UEFI Decompress Libary.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __BASE_UEFI_DECOMPRESS_LIB_INTERNALS_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __BASE_UEFI_DECOMPRESS_LIB_INTERNALS_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Decompression algorithm begins here
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define BITBUFSIZ 32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAXMATCH 256
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define THRESHOLD 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CODE_BIT 16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define BAD_TABLE - 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// C: Char&Len Set; P: Position Set; T: exTra Set
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define NC (0xff + MAXMATCH + 2 - THRESHOLD)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CBIT 9
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAXPBIT 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TBIT 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAXNP ((1U << MAXPBIT) - 1)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define NT (CODE_BIT + 3)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#if NT > MAXNP
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define NPT NT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#else
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define NPT MAXNP
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 *mSrcBase; // The starting address of compressed data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 *mDstBase; // The starting address of decompressed data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 mOutBuf;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 mInBuf;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 mBitCount;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 mBitBuf;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 mSubBitBuf;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 mBlockSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 mCompSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 mOrigSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 mBadTableFlag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 mLeft[2 * NC - 1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 mRight[2 * NC - 1];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 mCLen[NC];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 mPTLen[NPT];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 mCTable[4096];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 mPTTable[256];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The length of the field 'Position Set Code Length Array Size' in Block Header.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// For UEFI 2.0 de/compression algorithm, mPBit = 4.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 mPBit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SCRATCH_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read NumOfBit of bits from source into mBitBuf.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Shift mBitBuf NumOfBits left. Read in NumOfBits of bits from source.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Sd The global scratch data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param NumOfBits The number of bits to shift and read.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncFillBuf (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SCRATCH_DATA *Sd,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 NumOfBits
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get NumOfBits of bits out from mBitBuf.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get NumOfBits of bits out from mBitBuf. Fill mBitBuf with subsequent
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NumOfBits of bits from source. Returns NumOfBits of bits that are
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync popped out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Sd The global scratch data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param NumOfBits The number of bits to pop and read.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The bits that are popped out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetBits (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SCRATCH_DATA *Sd,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 NumOfBits
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Creates Huffman Code mapping table according to code length array.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Creates Huffman Code mapping table for Extra Set, Char&Len Set
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and Position Set according to code length array.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If TableBits > 16, then ASSERT ().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Sd The global scratch data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param NumOfChar The number of symbols in the symbol set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BitLen Code length array.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TableBits The width of the mapping table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Table The table to be created.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval 0 OK.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval BAD_TABLE The table is corrupted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMakeTable (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SCRATCH_DATA *Sd,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 NumOfChar,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 *BitLen,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 TableBits,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT16 *Table
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Decodes a position value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get a position value according to Position Huffman Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Sd The global scratch data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The position value decoded.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDecodeP (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SCRATCH_DATA *Sd
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Reads code lengths for the Extra Set or the Position Set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read in the Extra Set or Pointion Set Length Arrary, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync generate the Huffman code mapping for them.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Sd The global scratch data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param nn The number of symbols.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param nbit The number of bits needed to represent nn.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Special The special symbol that needs to be taken care of.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval 0 OK.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval BAD_TABLE Table is corrupted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncReadPTLen (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SCRATCH_DATA *Sd,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 nn,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 nbit,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Special
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Reads code lengths for Char&Len Set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read in and decode the Char&Len Set Code Length Array, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync generate the Huffman Code mapping table for the Char&Len Set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Sd The global scratch data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncReadCLen (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SCRATCH_DATA *Sd
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Decode a character/length value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read one value from mBitBuf, Get one code from mBitBuf. If it is at block boundary, generates
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Huffman code mapping table for Extra Set, Code&Len Set and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Position Set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Sd The global scratch data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The value decoded.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDecodeC (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SCRATCH_DATA *Sd
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Decode the source data and put the resulting data into the destination buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Sd The global scratch data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDecode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SCRATCH_DATA *Sd
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif