root/include/linux/crc8.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright (c) 2011 Broadcom Corporation
   3  *
   4  * Permission to use, copy, modify, and/or distribute this software for any
   5  * purpose with or without fee is hereby granted, provided that the above
   6  * copyright notice and this permission notice appear in all copies.
   7  *
   8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
  11  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  13  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15  */
  16 #ifndef __CRC8_H_
  17 #define __CRC8_H_
  18 
  19 #include <linux/types.h>
  20 
  21 /* see usage of this value in crc8() description */
  22 #define CRC8_INIT_VALUE         0xFF
  23 
  24 /*
  25  * Return value of crc8() indicating valid message+crc. This is true
  26  * if a CRC is inverted before transmission. The CRC computed over the
  27  * whole received bitstream is _table[x], where x is the bit pattern
  28  * of the modification (almost always 0xff).
  29  */
  30 #define CRC8_GOOD_VALUE(_table) (_table[0xFF])
  31 
  32 /* required table size for crc8 algorithm */
  33 #define CRC8_TABLE_SIZE                 256
  34 
  35 /* helper macro assuring right table size is used */
  36 #define DECLARE_CRC8_TABLE(_table) \
  37         static u8 _table[CRC8_TABLE_SIZE]
  38 
  39 /**
  40  * crc8_populate_lsb - fill crc table for given polynomial in regular bit order.
  41  *
  42  * @table:      table to be filled.
  43  * @polynomial: polynomial for which table is to be filled.
  44  *
  45  * This function fills the provided table according the polynomial provided for
  46  * regular bit order (lsb first). Polynomials in CRC algorithms are typically
  47  * represented as shown below.
  48  *
  49  *      poly = x^8 + x^7 + x^6 + x^4 + x^2 + 1
  50  *
  51  * For lsb first direction x^7 maps to the lsb. So the polynomial is as below.
  52  *
  53  * - lsb first: poly = 10101011(1) = 0xAB
  54  */
  55 void crc8_populate_lsb(u8 table[CRC8_TABLE_SIZE], u8 polynomial);
  56 
  57 /**
  58  * crc8_populate_msb - fill crc table for given polynomial in reverse bit order.
  59  *
  60  * @table:      table to be filled.
  61  * @polynomial: polynomial for which table is to be filled.
  62  *
  63  * This function fills the provided table according the polynomial provided for
  64  * reverse bit order (msb first). Polynomials in CRC algorithms are typically
  65  * represented as shown below.
  66  *
  67  *      poly = x^8 + x^7 + x^6 + x^4 + x^2 + 1
  68  *
  69  * For msb first direction x^7 maps to the msb. So the polynomial is as below.
  70  *
  71  * - msb first: poly = (1)11010101 = 0xD5
  72  */
  73 void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial);
  74 
  75 /**
  76  * crc8() - calculate a crc8 over the given input data.
  77  *
  78  * @table:      crc table used for calculation.
  79  * @pdata:      pointer to data buffer.
  80  * @nbytes:     number of bytes in data buffer.
  81  * @crc:        previous returned crc8 value.
  82  *
  83  * The CRC8 is calculated using the polynomial given in crc8_populate_msb()
  84  * or crc8_populate_lsb().
  85  *
  86  * The caller provides the initial value (either %CRC8_INIT_VALUE
  87  * or the previous returned value) to allow for processing of
  88  * discontiguous blocks of data.  When generating the CRC the
  89  * caller is responsible for complementing the final return value
  90  * and inserting it into the byte stream.  When validating a byte
  91  * stream (including CRC8), a final return value of %CRC8_GOOD_VALUE
  92  * indicates the byte stream data can be considered valid.
  93  *
  94  * Reference:
  95  * "A Painless Guide to CRC Error Detection Algorithms", ver 3, Aug 1993
  96  * Williams, Ross N., ross<at>ross.net
  97  * (see URL http://www.ross.net/crc/download/crc_v3.txt).
  98  */
  99 u8 crc8(const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc);
 100 
 101 #endif /* __CRC8_H_ */

/* [<][>][^][v][top][bottom][index][help] */