ARM: dts: i.MX6Q: fix avoid_unnecessary_addr_size warnings
[oweals/u-boot.git] / common / hash.c
index ef146513a076f4b8d9da4adcf231361404350450..413a5bfcdae5e49061ff3a4710865f11660000c1 100644 (file)
@@ -85,6 +85,33 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
 }
 #endif
 
+static int hash_init_crc16_ccitt(struct hash_algo *algo, void **ctxp)
+{
+       uint16_t *ctx = malloc(sizeof(uint16_t));
+       *ctx = 0;
+       *ctxp = ctx;
+       return 0;
+}
+
+static int hash_update_crc16_ccitt(struct hash_algo *algo, void *ctx,
+                                  const void *buf, unsigned int size,
+                                  int is_last)
+{
+       *((uint16_t *)ctx) = crc16_ccitt(*((uint16_t *)ctx), buf, size);
+       return 0;
+}
+
+static int hash_finish_crc16_ccitt(struct hash_algo *algo, void *ctx,
+                                  void *dest_buf, int size)
+{
+       if (size < algo->digest_size)
+               return -1;
+
+       *((uint16_t *)dest_buf) = *((uint16_t *)ctx);
+       free(ctx);
+       return 0;
+}
+
 static int hash_init_crc32(struct hash_algo *algo, void **ctxp)
 {
        uint32_t *ctx = malloc(sizeof(uint32_t));
@@ -159,6 +186,15 @@ static struct hash_algo hash_algo[] = {
 #endif
        },
 #endif
+       {
+               .name           = "crc16-ccitt",
+               .digest_size    = 2,
+               .chunk_size     = CHUNKSZ,
+               .hash_func_ws   = crc16_ccitt_wd_buf,
+               .hash_init      = hash_init_crc16_ccitt,
+               .hash_update    = hash_update_crc16_ccitt,
+               .hash_finish    = hash_finish_crc16_ccitt,
+       },
        {
                .name           = "crc32",
                .digest_size    = 4,