]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/C/TianoCompress/TianoCompress.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / BaseTools / Source / C / TianoCompress / TianoCompress.h
1 /** @file
2 Internal include file for Tiano Decompress Library.
3
4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #ifndef __TIANO_DECOMPRESS_H__
10 #define __TIANO_DECOMPRESS_H__
11
12 #include <stdio.h>
13 #include <assert.h>
14 #include <Common/UefiBaseTypes.h>
15
16
17 //
18 // Decompression algorithm begins here
19 //
20 #define UTILITY_NAME "TianoCompress"
21 #define UTILITY_MAJOR_VERSION 0
22 #define UTILITY_MINOR_VERSION 1
23
24 //
25 // Default output file name
26 //
27 #define DEFAULT_OUTPUT_FILE "file.tmp"
28
29 #define BITBUFSIZ 32
30 #define MAXMATCH 256
31 #define THRESHOLD 3
32 #define CODE_BIT 16
33 #define BAD_TABLE - 1
34
35 typedef INT32 NODE;
36
37 //
38 // C: Char&Len Set; P: Position Set; T: exTra Set
39 //
40 #define NC (0xff + MAXMATCH + 2 - THRESHOLD)
41 #define CBIT 9
42 #define MAXPBIT 5
43 #define TBIT 5
44 #define MAXNP ((1U << MAXPBIT) - 1)
45 #define NT (CODE_BIT + 3)
46 #if NT > MAXNP
47 #define NPT NT
48 #else
49 #define NPT MAXNP
50 #endif
51
52 typedef struct {
53 UINT8 *mSrcBase; // Starting address of compressed data
54 UINT8 *mDstBase; // Starting address of decompressed data
55 UINT32 mOutBuf;
56 UINT32 mInBuf;
57
58 UINT16 mBitCount;
59 UINT32 mBitBuf;
60 UINT32 mSubBitBuf;
61 UINT16 mBlockSize;
62 UINT32 mCompSize;
63 UINT32 mOrigSize;
64
65 UINT16 mBadTableFlag;
66
67 UINT16 mLeft[2 * NC - 1];
68 UINT16 mRight[2 * NC - 1];
69 UINT8 mCLen[NC];
70 UINT8 mPTLen[NPT];
71 UINT16 mCTable[4096];
72 UINT16 mPTTable[256];
73
74 //
75 // The length of the field 'Position Set Code Length Array Size' in Block Header.
76 // For EFI 1.1 de/compression algorithm, mPBit = 4
77 // For Tiano de/compression algorithm, mPBit = 5
78 //
79 UINT8 mPBit;
80 } SCRATCH_DATA;
81
82 //
83 // Function Prototypes
84 //
85
86 EFI_STATUS
87 GetFileContents (
88 IN char *InputFileName,
89 OUT UINT8 *FileBuffer,
90 OUT UINT32 *BufferLength
91 );
92
93 STATIC
94 VOID
95 PutDword(
96 IN UINT32 Data
97 );
98
99 STATIC
100 EFI_STATUS
101 AllocateMemory (
102 VOID
103 );
104
105 STATIC
106 VOID
107 FreeMemory (
108 VOID
109 );
110
111 STATIC
112 VOID
113 InitSlide (
114 VOID
115 );
116
117 STATIC
118 NODE
119 Child (
120 IN NODE NodeQ,
121 IN UINT8 CharC
122 );
123
124 STATIC
125 VOID
126 MakeChild (
127 IN NODE NodeQ,
128 IN UINT8 CharC,
129 IN NODE NodeR
130 );
131
132 STATIC
133 VOID
134 Split (
135 IN NODE Old
136 );
137
138 STATIC
139 VOID
140 InsertNode (
141 VOID
142 );
143
144 STATIC
145 VOID
146 DeleteNode (
147 VOID
148 );
149
150 STATIC
151 VOID
152 GetNextMatch (
153 VOID
154 );
155
156 STATIC
157 EFI_STATUS
158 Encode (
159 VOID
160 );
161
162 STATIC
163 VOID
164 CountTFreq (
165 VOID
166 );
167
168 STATIC
169 VOID
170 WritePTLen (
171 IN INT32 Number,
172 IN INT32 nbit,
173 IN INT32 Special
174 );
175
176 STATIC
177 VOID
178 WriteCLen (
179 VOID
180 );
181
182 STATIC
183 VOID
184 EncodeC (
185 IN INT32 Value
186 );
187
188 STATIC
189 VOID
190 EncodeP (
191 IN UINT32 Value
192 );
193
194 STATIC
195 VOID
196 SendBlock (
197 VOID
198 );
199
200 STATIC
201 VOID
202 Output (
203 IN UINT32 c,
204 IN UINT32 p
205 );
206
207 STATIC
208 VOID
209 HufEncodeStart (
210 VOID
211 );
212
213 STATIC
214 VOID
215 HufEncodeEnd (
216 VOID
217 );
218
219 STATIC
220 VOID
221 MakeCrcTable (
222 VOID
223 );
224
225
226 STATIC
227 VOID
228 PutBits (
229 IN INT32 Number,
230 IN UINT32 Value
231 );
232
233 STATIC
234 INT32
235 FreadCrc (
236 OUT UINT8 *Pointer,
237 IN INT32 Number
238 );
239
240 STATIC
241 VOID
242 InitPutBits (
243 VOID
244 );
245
246 STATIC
247 VOID
248 CountLen (
249 IN INT32 Index
250 );
251
252 STATIC
253 VOID
254 MakeLen (
255 IN INT32 Root
256 );
257
258 STATIC
259 VOID
260 DownHeap (
261 IN INT32 Index
262 );
263
264 STATIC
265 VOID
266 MakeCode (
267 IN INT32 Number,
268 IN UINT8 Len[ ],
269 OUT UINT16 Code[]
270 );
271
272 STATIC
273 INT32
274 MakeTree (
275 IN INT32 NParm,
276 IN UINT16 FreqParm[],
277 OUT UINT8 LenParm[ ],
278 OUT UINT16 CodeParm[]
279 );
280
281 /**
282 Read NumOfBit of bits from source into mBitBuf
283
284 Shift mBitBuf NumOfBits left. Read in NumOfBits of bits from source.
285
286 @param Sd The global scratch data
287 @param NumOfBits The number of bits to shift and read.
288
289 **/
290 VOID
291 FillBuf (
292 IN SCRATCH_DATA *Sd,
293 IN UINT16 NumOfBits
294 );
295
296 /**
297 Get NumOfBits of bits out from mBitBuf
298
299 Get NumOfBits of bits out from mBitBuf. Fill mBitBuf with subsequent
300 NumOfBits of bits from source. Returns NumOfBits of bits that are
301 popped out.
302
303 @param Sd The global scratch data.
304 @param NumOfBits The number of bits to pop and read.
305
306 @return The bits that are popped out.
307
308 **/
309 UINT32
310 GetBits (
311 IN SCRATCH_DATA *Sd,
312 IN UINT16 NumOfBits
313 );
314
315 /**
316 Creates Huffman Code mapping table according to code length array.
317
318 Creates Huffman Code mapping table for Extra Set, Char&Len Set
319 and Position Set according to code length array.
320
321 @param Sd The global scratch data
322 @param NumOfChar Number of symbols in the symbol set
323 @param BitLen Code length array
324 @param TableBits The width of the mapping table
325 @param Table The table
326
327 @retval 0 OK.
328 @retval BAD_TABLE The table is corrupted.
329
330 **/
331 UINT16
332 MakeTable (
333 IN SCRATCH_DATA *Sd,
334 IN UINT16 NumOfChar,
335 IN UINT8 *BitLen,
336 IN UINT16 TableBits,
337 OUT UINT16 *Table
338 );
339
340 /**
341 Decodes a position value.
342
343 Get a position value according to Position Huffman Table.
344
345 @param Sd the global scratch data
346
347 @return The position value decoded.
348
349 **/
350 UINT32
351 DecodeP (
352 IN SCRATCH_DATA *Sd
353 );
354
355 /**
356 Reads code lengths for the Extra Set or the Position Set.
357
358 Read in the Extra Set or Position Set Length Array, then
359 generate the Huffman code mapping for them.
360
361 @param Sd The global scratch data.
362 @param nn Number of symbols.
363 @param nbit Number of bits needed to represent nn.
364 @param Special The special symbol that needs to be taken care of.
365
366 @retval 0 OK.
367 @retval BAD_TABLE Table is corrupted.
368
369 **/
370 UINT16
371 ReadPTLen (
372 IN SCRATCH_DATA *Sd,
373 IN UINT16 nn,
374 IN UINT16 nbit,
375 IN UINT16 Special
376 );
377
378 /**
379 Reads code lengths for Char&Len Set.
380
381 Read in and decode the Char&Len Set Code Length Array, then
382 generate the Huffman Code mapping table for the Char&Len Set.
383
384 @param Sd the global scratch data
385
386 **/
387 VOID
388 ReadCLen (
389 SCRATCH_DATA *Sd
390 );
391
392 /**
393 Decode a character/length value.
394
395 Read one value from mBitBuf, Get one code from mBitBuf. If it is at block boundary, generates
396 Huffman code mapping table for Extra Set, Code&Len Set and
397 Position Set.
398
399 @param Sd The global scratch data.
400
401 @return The value decoded.
402
403 **/
404 UINT16
405 DecodeC (
406 SCRATCH_DATA *Sd
407 );
408
409 /**
410 Decode the source data and put the resulting data into the destination buffer.
411
412 Decode the source data and put the resulting data into the destination buffer.
413
414 @param Sd The global scratch data
415
416 **/
417 VOID
418 Decode (
419 SCRATCH_DATA *Sd
420 );
421
422 RETURN_STATUS
423 EFIAPI
424 TDecompress (
425 IN VOID *Source,
426 IN OUT VOID *Destination,
427 IN OUT VOID *Scratch,
428 IN UINT32 Version
429 );
430
431 #endif