This adds an optimization to lzma decode to also read from the boot medium in chunks of 8 bytes if that is the general purpose register length instead of always 4 bytes. It depends on the cache / memory / spi controller whether this is faster, but it's likely to be either the same or faster. TESTED - google/vilboz: cached boot medium 64bit before - 32bit - 64bit after load FSP-M: 35,674 - 35,595 - 34,690 load ramstage: 42,134 - 43,378 - 40,882 load FSP-S: 24,954 - 25,496 - 24,368 - foxconn/g41m: uncached boot medium for testing 64bit before - 32bit - 64bit after load ramstage: 51,164 - 51,872 - 51,894 Change-Id: I890c075307c0aec877618d9902ea352ae42a3bfa Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/70175 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com> Reviewed-by: Julius Werner <jwerner@chromium.org>
67 lines
1.6 KiB
C
67 lines
1.6 KiB
C
/*
|
|
LzmaDecode.h
|
|
LZMA Decoder interface
|
|
|
|
LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)
|
|
http://www.7-zip.org/
|
|
|
|
LZMA SDK is licensed under two licenses:
|
|
1) GNU Lesser General Public License (GNU LGPL)
|
|
2) Common Public License (CPL)
|
|
It means that you can select one of these two licenses and
|
|
follow rules of that license.
|
|
|
|
SPECIAL EXCEPTION:
|
|
Igor Pavlov, as the author of this code, expressly permits you to
|
|
statically or dynamically link your code (or bind by name) to the
|
|
interfaces of this file without subjecting your linked code to the
|
|
terms of the CPL or GNU LGPL. Any modifications or additions
|
|
to this file, however, are subject to the LGPL or CPL terms.
|
|
*/
|
|
|
|
#ifndef __LZMADECODE_H
|
|
#define __LZMADECODE_H
|
|
|
|
#include <types.h>
|
|
|
|
typedef unsigned char Byte;
|
|
typedef unsigned short UInt16;
|
|
typedef unsigned int UInt32;
|
|
typedef size_t SizeT;
|
|
|
|
#define CProb UInt16
|
|
|
|
#define LZMA_RESULT_OK 0
|
|
#define LZMA_RESULT_DATA_ERROR 1
|
|
|
|
|
|
#define LZMA_BASE_SIZE 1846
|
|
#define LZMA_LIT_SIZE 768
|
|
|
|
#define LZMA_PROPERTIES_SIZE 5
|
|
|
|
typedef struct _CLzmaProperties {
|
|
int lc;
|
|
int lp;
|
|
int pb;
|
|
} CLzmaProperties;
|
|
|
|
int LzmaDecodeProperties(CLzmaProperties *propsRes,
|
|
const unsigned char *propsData, int size);
|
|
|
|
#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE \
|
|
<< ((Properties)->lc + (Properties)->lp)))
|
|
|
|
#define kLzmaNeedInitId (-2)
|
|
|
|
typedef struct _CLzmaDecoderState {
|
|
CLzmaProperties Properties;
|
|
CProb *Probs;
|
|
} CLzmaDecoderState;
|
|
|
|
|
|
int LzmaDecode(CLzmaDecoderState *vs,
|
|
const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
|
|
unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed);
|
|
|
|
#endif
|