]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLibInternals.h
Update the copyright notice format
[mirror_edk2.git] / MdePkg / Library / BaseUefiDecompressLib / BaseUefiDecompressLibInternals.h
1 /** @file
2 Internal data structure defintions for Base UEFI Decompress Libary.
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 **/
14
15 #ifndef __BASE_UEFI_DECOMPRESS_LIB_INTERNALS_H__
16 #define __BASE_UEFI_DECOMPRESS_LIB_INTERNALS_H__
17
18 //
19 // Decompression algorithm begins here
20 //
21 #define BITBUFSIZ 32
22 #define MAXMATCH 256
23 #define THRESHOLD 3
24 #define CODE_BIT 16
25 #define BAD_TABLE - 1
26
27 //
28 // C: Char&Len Set; P: Position Set; T: exTra Set
29 //
30 #define NC (0xff + MAXMATCH + 2 - THRESHOLD)
31 #define CBIT 9
32 #define MAXPBIT 5
33 #define TBIT 5
34 #define MAXNP ((1U << MAXPBIT) - 1)
35 #define NT (CODE_BIT + 3)
36 #if NT > MAXNP
37 #define NPT NT
38 #else
39 #define NPT MAXNP
40 #endif
41
42 typedef struct {
43 UINT8 *mSrcBase; // Starting address of compressed data
44 UINT8 *mDstBase; // Starting address of decompressed data
45 UINT32 mOutBuf;
46 UINT32 mInBuf;
47
48 UINT16 mBitCount;
49 UINT32 mBitBuf;
50 UINT32 mSubBitBuf;
51 UINT16 mBlockSize;
52 UINT32 mCompSize;
53 UINT32 mOrigSize;
54
55 UINT16 mBadTableFlag;
56
57 UINT16 mLeft[2 * NC - 1];
58 UINT16 mRight[2 * NC - 1];
59 UINT8 mCLen[NC];
60 UINT8 mPTLen[NPT];
61 UINT16 mCTable[4096];
62 UINT16 mPTTable[256];
63
64 ///
65 /// The length of the field 'Position Set Code Length Array Size' in Block Header.
66 /// For UEFI 2.0 de/compression algorithm, mPBit = 4
67 ///
68 UINT8 mPBit;
69 } SCRATCH_DATA;
70
71 /**
72 Read NumOfBit of bits from source into mBitBuf.
73
74 Shift mBitBuf NumOfBits left. Read in NumOfBits of bits from source.
75
76 @param Sd The global scratch data
77 @param NumOfBits The number of bits to shift and read.
78
79 **/
80 VOID
81 FillBuf (
82 IN SCRATCH_DATA *Sd,
83 IN UINT16 NumOfBits
84 );
85
86 /**
87 Get NumOfBits of bits out from mBitBuf.
88
89 Get NumOfBits of bits out from mBitBuf. Fill mBitBuf with subsequent
90 NumOfBits of bits from source. Returns NumOfBits of bits that are
91 popped out.
92
93 @param Sd The global scratch data.
94 @param NumOfBits The number of bits to pop and read.
95
96 @return The bits that are popped out.
97
98 **/
99 UINT32
100 GetBits (
101 IN SCRATCH_DATA *Sd,
102 IN UINT16 NumOfBits
103 );
104
105 /**
106 Creates Huffman Code mapping table according to code length array.
107
108 Creates Huffman Code mapping table for Extra Set, Char&Len Set
109 and Position Set according to code length array.
110
111 @param Sd The global scratch data
112 @param NumOfChar Number of symbols in the symbol set
113 @param BitLen Code length array
114 @param TableBits The width of the mapping table
115 @param Table The table to be created.
116
117 @retval 0 OK.
118 @retval BAD_TABLE The table is corrupted.
119
120 **/
121 UINT16
122 MakeTable (
123 IN SCRATCH_DATA *Sd,
124 IN UINT16 NumOfChar,
125 IN UINT8 *BitLen,
126 IN UINT16 TableBits,
127 OUT UINT16 *Table
128 );
129
130 /**
131 Decodes a position value.
132
133 Get a position value according to Position Huffman Table.
134
135 @param Sd the global scratch data
136
137 @return The position value decoded.
138
139 **/
140 UINT32
141 DecodeP (
142 IN SCRATCH_DATA *Sd
143 );
144
145 /**
146 Reads code lengths for the Extra Set or the Position Set.
147
148 Read in the Extra Set or Pointion Set Length Arrary, then
149 generate the Huffman code mapping for them.
150
151 @param Sd The global scratch data.
152 @param nn Number of symbols.
153 @param nbit Number of bits needed to represent nn.
154 @param Special The special symbol that needs to be taken care of.
155
156 @retval 0 OK.
157 @retval BAD_TABLE Table is corrupted.
158
159 **/
160 UINT16
161 ReadPTLen (
162 IN SCRATCH_DATA *Sd,
163 IN UINT16 nn,
164 IN UINT16 nbit,
165 IN UINT16 Special
166 );
167
168 /**
169 Reads code lengths for Char&Len Set.
170
171 Read in and decode the Char&Len Set Code Length Array, then
172 generate the Huffman Code mapping table for the Char&Len Set.
173
174 @param Sd the global scratch data
175
176 **/
177 VOID
178 ReadCLen (
179 SCRATCH_DATA *Sd
180 );
181
182 /**
183 Decode a character/length value.
184
185 Read one value from mBitBuf, Get one code from mBitBuf. If it is at block boundary, generates
186 Huffman code mapping table for Extra Set, Code&Len Set and
187 Position Set.
188
189 @param Sd The global scratch data.
190
191 @return The value decoded.
192
193 **/
194 UINT16
195 DecodeC (
196 SCRATCH_DATA *Sd
197 );
198
199 /**
200 Decode the source data and put the resulting data into the destination buffer.
201
202 @param Sd The global scratch data
203
204 **/
205 VOID
206 Decode (
207 SCRATCH_DATA *Sd
208 );
209
210 #endif