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