summaryrefslogtreecommitdiffstats
path: root/include/u-boot
diff options
context:
space:
mode:
authorPhilipp Tomsich <philipp.tomsich@theobroma-systems.com>2018-11-25 19:22:19 +0100
committerTom Rini <trini@konsulko.com>2018-12-08 20:18:44 -0500
commit51c2345bd24837f9f67f16268da6dc71573f1325 (patch)
tree318af05398baae25f2ac5ecc8baad6a2e194b365 /include/u-boot
parenta740ee913ec8ba04cc53100440f94841648324e2 (diff)
downloadu-boot-51c2345bd24837f9f67f16268da6dc71573f1325.tar.gz
u-boot-51c2345bd24837f9f67f16268da6dc71573f1325.tar.xz
u-boot-51c2345bd24837f9f67f16268da6dc71573f1325.zip
Roll CRC16-CCITT into the hash infrastructure
The CRC16-CCITT checksum function is useful for space-constrained applications (such as obtaining a checksum across a 2KBit or 4KBit EEPROM) in boot applications. It has not been accessible from boot scripts until now (due to not having a dedicated command and not being supported by the hash infrstructure) limiting its applicability outside of custom commands. This adds the CRC16-CCITT (poly 0x1021, init 0x0) algorithm to the list of available hashes and adds a new crc16_ccitt_wd_buf() to make this possible. Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> [trini: Fix building crc16.o for SPL/TPL] Signed-off-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'include/u-boot')
-rw-r--r--include/u-boot/crc.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/u-boot/crc.h b/include/u-boot/crc.h
index 111b22c4b6..788ef29a17 100644
--- a/include/u-boot/crc.h
+++ b/include/u-boot/crc.h
@@ -13,6 +13,17 @@ unsigned int crc8(unsigned int crc_start, const unsigned char *vptr, int len);
/* lib/crc16.c - 16 bit CRC with polynomial x^16+x^12+x^5+1 (CRC-CCITT) */
uint16_t crc16_ccitt(uint16_t crc_start, const unsigned char *s, int len);
+/**
+ * crc16_ccitt_wd_buf - Perform CRC16-CCIT on an input buffer and return the
+ * 16-bit result (network byte-order) in an output buffer
+ *
+ * @in: input buffer
+ * @len: input buffer length
+ * @out: output buffer (at least 2 bytes)
+ * @chunk_sz: ignored
+ */
+void crc16_ccitt_wd_buf(const uint8_t *in, uint len,
+ uint8_t *out, uint chunk_sz);
/* lib/crc32.c */
uint32_t crc32 (uint32_t, const unsigned char *, uint);