aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2014-05-27 13:51:31 -0400
committerJohn W. Linville <linville@tuxdriver.com>2014-05-27 13:51:31 -0400
commit9db7cb6901740453a442e598563b576987dd471b (patch)
treee38911285b5cd9980280a92ea0e0260f6c1ef2ad /lib
parent3bea8eddfebe1c61ea824dd2880d4368791edc1f (diff)
parent03c4444650969431b3a5effde4995de767e3013a (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'lib')
-rw-r--r--lib/crc7.c84
1 files changed, 46 insertions, 38 deletions
diff --git a/lib/crc7.c b/lib/crc7.c
index f1c3a144cec1..bf6255e23919 100644
--- a/lib/crc7.c
+++ b/lib/crc7.c
@@ -10,42 +10,47 @@
10#include <linux/crc7.h> 10#include <linux/crc7.h>
11 11
12 12
13/* Table for CRC-7 (polynomial x^7 + x^3 + 1) */ 13/*
14const u8 crc7_syndrome_table[256] = { 14 * Table for CRC-7 (polynomial x^7 + x^3 + 1).
15 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 15 * This is a big-endian CRC (msbit is highest power of x),
16 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 16 * aligned so the msbit of the byte is the x^6 coefficient
17 0x19, 0x10, 0x0b, 0x02, 0x3d, 0x34, 0x2f, 0x26, 17 * and the lsbit is not used.
18 0x51, 0x58, 0x43, 0x4a, 0x75, 0x7c, 0x67, 0x6e, 18 */
19 0x32, 0x3b, 0x20, 0x29, 0x16, 0x1f, 0x04, 0x0d, 19const u8 crc7_be_syndrome_table[256] = {
20 0x7a, 0x73, 0x68, 0x61, 0x5e, 0x57, 0x4c, 0x45, 20 0x00, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e,
21 0x2b, 0x22, 0x39, 0x30, 0x0f, 0x06, 0x1d, 0x14, 21 0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee,
22 0x63, 0x6a, 0x71, 0x78, 0x47, 0x4e, 0x55, 0x5c, 22 0x32, 0x20, 0x16, 0x04, 0x7a, 0x68, 0x5e, 0x4c,
23 0x64, 0x6d, 0x76, 0x7f, 0x40, 0x49, 0x52, 0x5b, 23 0xa2, 0xb0, 0x86, 0x94, 0xea, 0xf8, 0xce, 0xdc,
24 0x2c, 0x25, 0x3e, 0x37, 0x08, 0x01, 0x1a, 0x13, 24 0x64, 0x76, 0x40, 0x52, 0x2c, 0x3e, 0x08, 0x1a,
25 0x7d, 0x74, 0x6f, 0x66, 0x59, 0x50, 0x4b, 0x42, 25 0xf4, 0xe6, 0xd0, 0xc2, 0xbc, 0xae, 0x98, 0x8a,
26 0x35, 0x3c, 0x27, 0x2e, 0x11, 0x18, 0x03, 0x0a, 26 0x56, 0x44, 0x72, 0x60, 0x1e, 0x0c, 0x3a, 0x28,
27 0x56, 0x5f, 0x44, 0x4d, 0x72, 0x7b, 0x60, 0x69, 27 0xc6, 0xd4, 0xe2, 0xf0, 0x8e, 0x9c, 0xaa, 0xb8,
28 0x1e, 0x17, 0x0c, 0x05, 0x3a, 0x33, 0x28, 0x21, 28 0xc8, 0xda, 0xec, 0xfe, 0x80, 0x92, 0xa4, 0xb6,
29 0x4f, 0x46, 0x5d, 0x54, 0x6b, 0x62, 0x79, 0x70, 29 0x58, 0x4a, 0x7c, 0x6e, 0x10, 0x02, 0x34, 0x26,
30 0x07, 0x0e, 0x15, 0x1c, 0x23, 0x2a, 0x31, 0x38, 30 0xfa, 0xe8, 0xde, 0xcc, 0xb2, 0xa0, 0x96, 0x84,
31 0x41, 0x48, 0x53, 0x5a, 0x65, 0x6c, 0x77, 0x7e, 31 0x6a, 0x78, 0x4e, 0x5c, 0x22, 0x30, 0x06, 0x14,
32 0x09, 0x00, 0x1b, 0x12, 0x2d, 0x24, 0x3f, 0x36, 32 0xac, 0xbe, 0x88, 0x9a, 0xe4, 0xf6, 0xc0, 0xd2,
33 0x58, 0x51, 0x4a, 0x43, 0x7c, 0x75, 0x6e, 0x67, 33 0x3c, 0x2e, 0x18, 0x0a, 0x74, 0x66, 0x50, 0x42,
34 0x10, 0x19, 0x02, 0x0b, 0x34, 0x3d, 0x26, 0x2f, 34 0x9e, 0x8c, 0xba, 0xa8, 0xd6, 0xc4, 0xf2, 0xe0,
35 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, 35 0x0e, 0x1c, 0x2a, 0x38, 0x46, 0x54, 0x62, 0x70,
36 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 36 0x82, 0x90, 0xa6, 0xb4, 0xca, 0xd8, 0xee, 0xfc,
37 0x6a, 0x63, 0x78, 0x71, 0x4e, 0x47, 0x5c, 0x55, 37 0x12, 0x00, 0x36, 0x24, 0x5a, 0x48, 0x7e, 0x6c,
38 0x22, 0x2b, 0x30, 0x39, 0x06, 0x0f, 0x14, 0x1d, 38 0xb0, 0xa2, 0x94, 0x86, 0xf8, 0xea, 0xdc, 0xce,
39 0x25, 0x2c, 0x37, 0x3e, 0x01, 0x08, 0x13, 0x1a, 39 0x20, 0x32, 0x04, 0x16, 0x68, 0x7a, 0x4c, 0x5e,
40 0x6d, 0x64, 0x7f, 0x76, 0x49, 0x40, 0x5b, 0x52, 40 0xe6, 0xf4, 0xc2, 0xd0, 0xae, 0xbc, 0x8a, 0x98,
41 0x3c, 0x35, 0x2e, 0x27, 0x18, 0x11, 0x0a, 0x03, 41 0x76, 0x64, 0x52, 0x40, 0x3e, 0x2c, 0x1a, 0x08,
42 0x74, 0x7d, 0x66, 0x6f, 0x50, 0x59, 0x42, 0x4b, 42 0xd4, 0xc6, 0xf0, 0xe2, 0x9c, 0x8e, 0xb8, 0xaa,
43 0x17, 0x1e, 0x05, 0x0c, 0x33, 0x3a, 0x21, 0x28, 43 0x44, 0x56, 0x60, 0x72, 0x0c, 0x1e, 0x28, 0x3a,
44 0x5f, 0x56, 0x4d, 0x44, 0x7b, 0x72, 0x69, 0x60, 44 0x4a, 0x58, 0x6e, 0x7c, 0x02, 0x10, 0x26, 0x34,
45 0x0e, 0x07, 0x1c, 0x15, 0x2a, 0x23, 0x38, 0x31, 45 0xda, 0xc8, 0xfe, 0xec, 0x92, 0x80, 0xb6, 0xa4,
46 0x46, 0x4f, 0x54, 0x5d, 0x62, 0x6b, 0x70, 0x79 46 0x78, 0x6a, 0x5c, 0x4e, 0x30, 0x22, 0x14, 0x06,
47 0xe8, 0xfa, 0xcc, 0xde, 0xa0, 0xb2, 0x84, 0x96,
48 0x2e, 0x3c, 0x0a, 0x18, 0x66, 0x74, 0x42, 0x50,
49 0xbe, 0xac, 0x9a, 0x88, 0xf6, 0xe4, 0xd2, 0xc0,
50 0x1c, 0x0e, 0x38, 0x2a, 0x54, 0x46, 0x70, 0x62,
51 0x8c, 0x9e, 0xa8, 0xba, 0xc4, 0xd6, 0xe0, 0xf2
47}; 52};
48EXPORT_SYMBOL(crc7_syndrome_table); 53EXPORT_SYMBOL(crc7_be_syndrome_table);
49 54
50/** 55/**
51 * crc7 - update the CRC7 for the data buffer 56 * crc7 - update the CRC7 for the data buffer
@@ -55,14 +60,17 @@ EXPORT_SYMBOL(crc7_syndrome_table);
55 * Context: any 60 * Context: any
56 * 61 *
57 * Returns the updated CRC7 value. 62 * Returns the updated CRC7 value.
63 * The CRC7 is left-aligned in the byte (the lsbit is always 0), as that
64 * makes the computation easier, and all callers want it in that form.
65 *
58 */ 66 */
59u8 crc7(u8 crc, const u8 *buffer, size_t len) 67u8 crc7_be(u8 crc, const u8 *buffer, size_t len)
60{ 68{
61 while (len--) 69 while (len--)
62 crc = crc7_byte(crc, *buffer++); 70 crc = crc7_be_byte(crc, *buffer++);
63 return crc; 71 return crc;
64} 72}
65EXPORT_SYMBOL(crc7); 73EXPORT_SYMBOL(crc7_be);
66 74
67MODULE_DESCRIPTION("CRC7 calculations"); 75MODULE_DESCRIPTION("CRC7 calculations");
68MODULE_LICENSE("GPL"); 76MODULE_LICENSE("GPL");