diff options
author | Mike Baiocchi <baiocchi@us.ibm.com> | 2013-09-20 14:47:15 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-10-28 12:21:53 -0500 |
commit | a094332bbe8807c8f24aeb79f34be063845cea10 (patch) | |
tree | 7b05b516287bd27d971ee8404a980bfad311ac2b /src/lib | |
parent | 7b8d4a482ca2d110f3bf67b7a8e1bed758318420 (diff) | |
download | talos-hostboot-a094332bbe8807c8f24aeb79f34be063845cea10.tar.gz talos-hostboot-a094332bbe8807c8f24aeb79f34be063845cea10.zip |
Initial Support for Updating SBE SEEPROM
This initial commit will be used to create the new SBE
directories and files. It also supports the usr functions
to find and copy SBE PNOR images. NOTE: It will not enable
Updating SBE SEEPROMs in the IPL.
Change-Id: I3f545a134493c7595ce50fd885478bbe606de472
RTC: 47032
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6311
Tested-by: Jenkins Server
Reviewed-by: ADAM R. MUHLE <armuhle@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/crc32.C | 67 | ||||
-rw-r--r-- | src/lib/makefile | 2 |
2 files changed, 68 insertions, 1 deletions
diff --git a/src/lib/crc32.C b/src/lib/crc32.C new file mode 100644 index 000000000..0c06c62c5 --- /dev/null +++ b/src/lib/crc32.C @@ -0,0 +1,67 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/lib/crc32.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +#include <stdint.h> +#include <util/crc32.H> + +namespace Util +{ + static const uint64_t CRC32_POLY = 0x104C11DB7ull; + + uint32_t crc32_calc(const void* ptr, size_t size) + { + const uint8_t* _ptr = (const uint8_t*)ptr; + uint64_t crc = 0; + while(size) + { + uint64_t data = 0; + for (int i = 0; i < 4; ++i) + { + data <<= 8; + if (size) + { + data |= *(_ptr++); + --size; + } + } + + crc <<= 32; + crc ^= (data << 32); + + + int idx = 0; + do + { + idx = __builtin_clzl(crc); + if (idx < 32) + { + crc ^= (CRC32_POLY << (31 - idx)); + } + + } while (idx < 32); + } + + return crc; + } + +}; + diff --git a/src/lib/makefile b/src/lib/makefile index e8b648c6c..42571c341 100644 --- a/src/lib/makefile +++ b/src/lib/makefile @@ -25,7 +25,7 @@ ROOTPATH = ../.. OBJS = string.o string_ext.o stdlib.o ctype.o assert.o stdio.o math.o sprintf.o OBJS += syscall_stub.o syscall_task.o syscall_msg.o OBJS += syscall_mmio.o syscall_time.o sync.o syscall_misc.o -OBJS += syscall_mm.o splaytree.o cxxtest_data.o +OBJS += syscall_mm.o splaytree.o cxxtest_data.o crc32.o ifdef HOSTBOOT_MEMORY_LEAKS COMMONFLAGS += -DHOSTBOOT_MEMORY_LEAKS=1 |