Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
crc8.c
Go to the documentation of this file.
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
17
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18
19
#include <linux/module.h>
20
#include <
linux/crc8.h
>
21
#include <
linux/printk.h
>
22
23
/*
24
* crc8_populate_msb - fill crc table for given polynomial in reverse bit order.
25
*
26
* table: table to be filled.
27
* polynomial: polynomial for which table is to be filled.
28
*/
29
void
crc8_populate_msb
(
u8
table
[
CRC8_TABLE_SIZE
],
u8
polynomial)
30
{
31
int
i
,
j
;
32
const
u8
msbit = 0x80;
33
u8
t
= msbit;
34
35
table
[0] = 0;
36
37
for
(i = 1; i <
CRC8_TABLE_SIZE
; i *= 2) {
38
t = (t << 1) ^ (t & msbit ? polynomial : 0);
39
for
(j = 0; j <
i
; j++)
40
table
[i+j] =
table
[j] ^ t;
41
}
42
}
43
EXPORT_SYMBOL
(
crc8_populate_msb
);
44
45
/*
46
* crc8_populate_lsb - fill crc table for given polynomial in regular bit order.
47
*
48
* table: table to be filled.
49
* polynomial: polynomial for which table is to be filled.
50
*/
51
void
crc8_populate_lsb
(
u8
table
[
CRC8_TABLE_SIZE
],
u8
polynomial)
52
{
53
int
i
,
j
;
54
u8
t
= 1;
55
56
table
[0] = 0;
57
58
for
(i = (CRC8_TABLE_SIZE >> 1);
i
; i >>= 1) {
59
t = (t >> 1) ^ (t & 1 ? polynomial : 0);
60
for
(j = 0; j <
CRC8_TABLE_SIZE
; j += 2*
i
)
61
table
[i+j] =
table
[j] ^ t;
62
}
63
}
64
EXPORT_SYMBOL
(
crc8_populate_lsb
);
65
66
/*
67
* crc8 - calculate a crc8 over the given input data.
68
*
69
* table: crc table used for calculation.
70
* pdata: pointer to data buffer.
71
* nbytes: number of bytes in data buffer.
72
* crc: previous returned crc8 value.
73
*/
74
u8
crc8
(
const
u8
table
[
CRC8_TABLE_SIZE
],
u8
*
pdata
,
size_t
nbytes
,
u8
crc
)
75
{
76
/* loop over the buffer data */
77
while
(nbytes-- > 0)
78
crc =
table
[(crc ^ *pdata++) & 0xff];
79
80
return
crc
;
81
}
82
EXPORT_SYMBOL
(crc8);
83
84
MODULE_DESCRIPTION
(
"CRC8 (by Williams, Ross N.) function"
);
85
MODULE_AUTHOR
(
"Broadcom Corporation"
);
86
MODULE_LICENSE
(
"Dual BSD/GPL"
);
Generated on Thu Jan 10 2013 14:55:27 for Linux Kernel by
1.8.2