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

Go to the source code of this file.

Macros

#define pr_fmt(fmt)   KBUILD_MODNAME ": " fmt
 

Functions

void crc8_populate_msb (u8 table[CRC8_TABLE_SIZE], u8 polynomial)
 
 EXPORT_SYMBOL (crc8_populate_msb)
 
void crc8_populate_lsb (u8 table[CRC8_TABLE_SIZE], u8 polynomial)
 
 EXPORT_SYMBOL (crc8_populate_lsb)
 
u8 crc8 (const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc)
 
 EXPORT_SYMBOL (crc8)
 
 MODULE_DESCRIPTION ("CRC8 (by Williams, Ross N.) function")
 
 MODULE_AUTHOR ("Broadcom Corporation")
 
 MODULE_LICENSE ("Dual BSD/GPL")
 

Macro Definition Documentation

#define pr_fmt (   fmt)    KBUILD_MODNAME ": " fmt

Definition at line 17 of file crc8.c.

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.

EXPORT_SYMBOL ( crc8_populate_msb  )
EXPORT_SYMBOL ( crc8_populate_lsb  )
EXPORT_SYMBOL ( crc8  )
MODULE_AUTHOR ( "Broadcom Corporation"  )
MODULE_DESCRIPTION ( "CRC8 (by Williams, Ross N.) function )
MODULE_LICENSE ( "Dual BSD/GPL"  )