summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBill Richardson <wfrichar@chromium.org>2011-08-16 14:52:56 -0700
committerSimon Glass <sjg@chromium.org>2011-08-29 10:59:33 -0700
commit3e79883063d890a85da157c508afd3012735b8e0 (patch)
tree5cc55ac62d018ef8aeb02576c1aea5087abde7b1 /lib
parent2d0cce869275f5fd0de39ad2c1fca1c1d0779c59 (diff)
New function VbExDecompress(), changed VbExDisplayImage().
The vboot_api.h interface has changed, so we need to adapt. VbExDecompress() now allows the vboot library access to native decompression routines. The signature of VbExDisplayImage() has changed, so we now only need to support uncompressed native-format bitmaps. BUG=chromium-os:19134 TEST=manual I tested by modifying the U-Boot build so I could get into the U-Boot prompt and run "vbexport_test display". The GBB screens rendered correctly. Change-Id: Iec605dee0af46e7d9eecc89b826e260f8a5930a4 Reviewed-on: http://gerrit.chromium.org/gerrit/6131 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Bill Richardson <wfrichar@chromium.org> Tested-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/vbexport/display.c61
1 files changed, 24 insertions, 37 deletions
diff --git a/lib/vbexport/display.c b/lib/vbexport/display.c
index 80f45128d9..c177f3bacf 100644
--- a/lib/vbexport/display.c
+++ b/lib/vbexport/display.c
@@ -127,56 +127,43 @@ VbError_t VbExDisplayScreen(uint32_t screen_type)
return VBERROR_SUCCESS;
}
-static uint8_t *uncompress_lzma(uint8_t *in_addr, SizeT in_size,
- SizeT out_size)
+VbError_t VbExDecompress(void *inbuf, uint32_t in_size,
+ uint32_t compression_type,
+ void *outbuf, uint32_t *out_size)
{
- uint8_t *out_addr = VbExMalloc(out_size);
- SizeT lzma_len = out_size;
+ SizeT input_size = in_size;
+ SizeT output_size = *out_size;
int ret;
- ret = lzmaBuffToBuffDecompress(out_addr, &lzma_len, in_addr, in_size);
- if (ret != SZ_OK) {
- VbExFree(out_addr);
- out_addr = NULL;
- }
- return out_addr;
-}
-
-VbError_t VbExDisplayImage(uint32_t x, uint32_t y, const ImageInfo *info,
- const void *buffer)
-{
- int ret;
- uint8_t *raw_data;
-
- switch (info->compression) {
+ switch (compression_type) {
case COMPRESS_NONE:
- raw_data = (uint8_t *)buffer;
- break;
+ memcpy(outbuf, inbuf, in_size);
+ *out_size = in_size;
+ return VBERROR_SUCCESS;
case COMPRESS_LZMA1:
- raw_data = uncompress_lzma((uint8_t *)buffer,
- (SizeT)info->compressed_size,
- (SizeT)info->original_size);
- if (!raw_data) {
- VBDEBUG("LZMA decompress failed.\n");
- return 1;
+ ret = lzmaBuffToBuffDecompress(outbuf, &output_size,
+ inbuf, input_size);
+ if (ret != SZ_OK) {
+ return ret;
}
- break;
-
- default:
- VBDEBUG("Unsupported compression format: %08x\n",
- info->compression);
- return 1;
+ *out_size = output_size;
+ return VBERROR_SUCCESS;
}
- ret = display_callbacks_.dc_display_bitmap((ulong)raw_data, x, y);
+ VBDEBUG("Unsupported compression format: %08x\n", compression_type);
+ return VBERROR_INVALID_PARAMETER;
+}
- if (info->compression == COMPRESS_LZMA1)
- VbExFree(raw_data);
+VbError_t VbExDisplayImage(uint32_t x, uint32_t y,
+ void *buffer, uint32_t buffersize)
+{
+ int ret;
+ ret = display_callbacks_.dc_display_bitmap((ulong)buffer, x, y);
if (ret) {
VBDEBUG("LCD display error.\n");
- return 1;
+ return VBERROR_UNKNOWN;
}
return VBERROR_SUCCESS;