Merge tag 'u-boot-imx-20200623' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx
[oweals/u-boot.git] / lib / crc16.c
index 753b987b0206e8f8cac1dc78fe132c5ab4e86622..f46ba727c9a869afae3af9bfd0abff1d3b26db42 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: eCos-2.0
 /*
  *==========================================================================
  *
@@ -6,8 +7,6 @@
  *      16 bit CRC with polynomial x^16+x^12+x^5+1
  *
  *==========================================================================
- * SPDX-License-Identifier:    eCos-2.0
- *==========================================================================
  *#####DESCRIPTIONBEGIN####
  *
  * Author(s):    gthomas
  *==========================================================================
  */
 
-#include "crc.h"
+#ifdef USE_HOSTCC
+#include <arpa/inet.h>
+#else
+#include <common.h>
+#endif
+#include <u-boot/crc.h>
 
 /* Table of CRC constants - implements x^16+x^12+x^5+1 */
 static const uint16_t crc16_tab[] = {
@@ -61,14 +65,20 @@ static const uint16_t crc16_tab[] = {
        0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
 };
 
-uint16_t crc16_ccitt(uint16_t crc_start, unsigned char *buf, int len)
+uint16_t crc16_ccitt(uint16_t cksum, const unsigned char *buf, int len)
 {
-       int i;
-       uint16_t cksum;
-
-       cksum = crc_start;
-       for (i = 0;  i < len;  i++)
+       for (int i = 0;  i < len;  i++)
                cksum = crc16_tab[((cksum>>8) ^ *buf++) & 0xff] ^ (cksum << 8);
 
        return cksum;
 }
+
+void crc16_ccitt_wd_buf(const uint8_t *in, uint len,
+                       uint8_t *out, uint chunk_sz)
+{
+       uint16_t crc;
+
+       crc = crc16_ccitt(0, in, len);
+       crc = htons(crc);
+       memcpy(out, &crc, sizeof(crc));
+}