uboot/include/u-boot/crc.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * (C) Copyright 2009
   4 * Marvell Semiconductor <www.marvell.com>
   5 * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
   6 */
   7
   8#ifndef _UBOOT_CRC_H
   9#define _UBOOT_CRC_H
  10
  11#include <compiler.h> /* 'uint*' definitions */
  12
  13/**
  14 * crc8() - Calculate and return CRC-8 of the data
  15 *
  16 * This uses an x^8 + x^2 + x + 1 polynomial.  A table-based algorithm would
  17 * be faster, but for only a few bytes it isn't worth the code size
  18 *
  19 * lib/crc8.c
  20 *
  21 * @crc_start: CRC8 start value
  22 * @vptr: Buffer to checksum
  23 * @len: Length of buffer in bytes
  24 * @return CRC8 checksum
  25 */
  26unsigned int crc8(unsigned int crc_start, const unsigned char *vptr, int len);
  27
  28/* lib/crc16.c - 16 bit CRC with polynomial x^16+x^12+x^5+1 (CRC-CCITT) */
  29uint16_t crc16_ccitt(uint16_t crc_start, const unsigned char *s, int len);
  30/**
  31 * crc16_ccitt_wd_buf - Perform CRC16-CCIT on an input buffer and return the
  32 *                      16-bit result (network byte-order) in an output buffer
  33 *
  34 * @in: input buffer
  35 * @len: input buffer length
  36 * @out: output buffer (at least 2 bytes)
  37 * @chunk_sz: ignored
  38 */
  39void crc16_ccitt_wd_buf(const uint8_t *in, uint len,
  40                        uint8_t *out, uint chunk_sz);
  41
  42/* lib/crc32.c */
  43
  44/**
  45 * crc32 - Calculate the CRC32 for a block of data
  46 *
  47 * @crc: Input crc to chain from a previous calculution (use 0 to start a new
  48 *      calculation)
  49 * @buf: Bytes to checksum
  50 * @len: Number of bytes to checksum
  51 * @return checksum value
  52 */
  53uint32_t crc32(uint32_t crc, const unsigned char *buf, uint len);
  54
  55/**
  56 * crc32_wd - Calculate the CRC32 for a block of data (watchdog version)
  57 *
  58 * This checksums the data @chunk_sz bytes at a time, calling WATCHDOG_RESET()
  59 * after each chunk, to prevent the watchdog from firing.
  60 *
  61 * @crc: Input crc to chain from a previous calculution (use 0 to start a new
  62 *      calculation)
  63 * @buf: Bytes to checksum
  64 * @len: Number of bytes to checksum
  65 * @chunk_sz: Chunk size to use between watchdog resets
  66 * @return checksum
  67 */
  68uint32_t crc32_wd(uint32_t crc, const unsigned char *buf, uint len,
  69                  uint chunk_sz);
  70
  71/**
  72 * crc32_no_comp - Calculate the CRC32 for a block of data (no one's compliment)
  73 *
  74 * This version uses a different algorithm which doesn't use one's compliment.
  75 * JFFS2 (and other things?) use this.
  76 *
  77 * @crc: Input crc to chain from a previous calculution (use 0 to start a new
  78 *      calculation)
  79 * @buf: Bytes to checksum
  80 * @len: Number of bytes to checksum
  81 * @return checksum value
  82 */
  83uint32_t crc32_no_comp(uint32_t crc, const unsigned char *buf, uint len);
  84
  85/**
  86 * crc32_wd_buf - Perform CRC32 on a buffer and return result in buffer
  87 *
  88 * @input:      Input buffer
  89 * @ilen:       Input buffer length
  90 * @output:     Place to put checksum result (4 bytes)
  91 * @chunk_sz:   Trigger watchdog after processing this many bytes
  92 */
  93void crc32_wd_buf(const uint8_t *input, uint ilen, uint8_t *output,
  94                  uint chunk_sz);
  95
  96/* lib/crc32c.c */
  97
  98/**
  99 * crc32c_init() - Set up a the CRC32 table
 100 *
 101 * This sets up 256-item table to aid in CRC32 calculation
 102 *
 103 * @crc32c_table: Place to put table
 104 * @pol: polynomial to use
 105 */
 106void crc32c_init(uint32_t *crc32c_table, uint32_t pol);
 107
 108/**
 109 * crc32c_cal() - Perform CRC32 on a buffer given a table
 110 *
 111 * This algorithm uses the table (set up by crc32c_init() to speed up
 112 * processing.
 113 *
 114 * @crc: Previous crc (use 0 at start)
 115 * @data: Data bytes to checksum
 116 * @length: Number of bytes to process
 117 * @crc32c_table:: CRC table
 118 * @return checksum value
 119 */
 120uint32_t crc32c_cal(uint32_t crc, const char *data, int length,
 121                    uint32_t *crc32c_table);
 122
 123#endif /* _UBOOT_CRC_H */
 124