Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions
crc8.h File Reference
#include <linux/types.h>

Go to the source code of this file.

Macros

#define CRC8_INIT_VALUE   0xFF
 
#define CRC8_GOOD_VALUE(_table)   (_table[0xFF])
 
#define CRC8_TABLE_SIZE   256
 
#define DECLARE_CRC8_TABLE(_table)   static u8 _table[CRC8_TABLE_SIZE]
 

Functions

void crc8_populate_lsb (u8 table[CRC8_TABLE_SIZE], u8 polynomial)
 
void crc8_populate_msb (u8 table[CRC8_TABLE_SIZE], u8 polynomial)
 
u8 crc8 (const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc)
 

Macro Definition Documentation

#define CRC8_GOOD_VALUE (   _table)    (_table[0xFF])

Definition at line 30 of file crc8.h.

#define CRC8_INIT_VALUE   0xFF

Definition at line 22 of file crc8.h.

#define CRC8_TABLE_SIZE   256

Definition at line 33 of file crc8.h.

#define DECLARE_CRC8_TABLE (   _table)    static u8 _table[CRC8_TABLE_SIZE]

Definition at line 36 of file crc8.h.

Function Documentation

u8 crc8 ( const u8  table[CRC8_TABLE_SIZE],
u8 pdata,
size_t  nbytes,
u8  crc 
)

crc8() - calculate a crc8 over the given input data.

: crc table used for calculation. : pointer to data buffer. : number of bytes in data buffer. : previous returned crc8 value.

The CRC8 is calculated using the polynomial given in crc8_populate_msb() or crc8_populate_lsb().

The caller provides the initial value (either CRC8_INIT_VALUE or the previous returned value) to allow for processing of discontiguous blocks of data. When generating the CRC the caller is responsible for complementing the final return value and inserting it into the byte stream. When validating a byte stream (including CRC8), a final return value of CRC8_GOOD_VALUE indicates the byte stream data can be considered valid.

Reference: "A Painless Guide to CRC Error Detection Algorithms", ver 3, Aug 1993 Williams, Ross N., ross<at>ross.net (see URL http://www.ross.net/crc/download/crc_v3.txt).

Definition at line 74 of file crc8.c.

void crc8_populate_lsb ( u8  table[CRC8_TABLE_SIZE],
u8  polynomial 
)

crc8_populate_lsb - fill crc table for given polynomial in regular bit order.

: table to be filled. : polynomial for which table is to be filled.

This function fills the provided table according the polynomial provided for regular bit order (lsb first). Polynomials in CRC algorithms are typically represented as shown below.

poly = x^8 + x^7 + x^6 + x^4 + x^2 + 1

For lsb first direction x^7 maps to the lsb. So the polynomial is as below.

  • lsb first: poly = 10101011(1) = 0xAB

Definition at line 51 of file crc8.c.

void crc8_populate_msb ( u8  table[CRC8_TABLE_SIZE],
u8  polynomial 
)

crc8_populate_msb - fill crc table for given polynomial in reverse bit order.

: table to be filled. : polynomial for which table is to be filled.

This function fills the provided table according the polynomial provided for reverse bit order (msb first). Polynomials in CRC algorithms are typically represented as shown below.

poly = x^8 + x^7 + x^6 + x^4 + x^2 + 1

For msb first direction x^7 maps to the msb. So the polynomial is as below.

  • msb first: poly = (1)11010101 = 0xD5

Definition at line 29 of file crc8.c.