Blame view

lib/crc7.c 2.58 KB
ad241528c   Jan Nikitenko   CRC7 support
1
2
3
4
5
6
7
8
9
10
  /*
   *      crc7.c
   *
   * This source code is licensed under the GNU General Public License,
   * Version 2. See the file COPYING for more details.
   */
  
  #include <linux/types.h>
  #include <linux/module.h>
  #include <linux/crc7.h>
1836eea20   George Spelvin   lib/crc7: Shift c...
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  /*
   * Table for CRC-7 (polynomial x^7 + x^3 + 1).
   * This is a big-endian CRC (msbit is highest power of x),
   * aligned so the msbit of the byte is the x^6 coefficient
   * and the lsbit is not used.
   */
  const u8 crc7_be_syndrome_table[256] = {
  	0x00, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e,
  	0x90, 0x82, 0xb4, 0xa6, 0xd8, 0xca, 0xfc, 0xee,
  	0x32, 0x20, 0x16, 0x04, 0x7a, 0x68, 0x5e, 0x4c,
  	0xa2, 0xb0, 0x86, 0x94, 0xea, 0xf8, 0xce, 0xdc,
  	0x64, 0x76, 0x40, 0x52, 0x2c, 0x3e, 0x08, 0x1a,
  	0xf4, 0xe6, 0xd0, 0xc2, 0xbc, 0xae, 0x98, 0x8a,
  	0x56, 0x44, 0x72, 0x60, 0x1e, 0x0c, 0x3a, 0x28,
  	0xc6, 0xd4, 0xe2, 0xf0, 0x8e, 0x9c, 0xaa, 0xb8,
  	0xc8, 0xda, 0xec, 0xfe, 0x80, 0x92, 0xa4, 0xb6,
  	0x58, 0x4a, 0x7c, 0x6e, 0x10, 0x02, 0x34, 0x26,
  	0xfa, 0xe8, 0xde, 0xcc, 0xb2, 0xa0, 0x96, 0x84,
  	0x6a, 0x78, 0x4e, 0x5c, 0x22, 0x30, 0x06, 0x14,
  	0xac, 0xbe, 0x88, 0x9a, 0xe4, 0xf6, 0xc0, 0xd2,
  	0x3c, 0x2e, 0x18, 0x0a, 0x74, 0x66, 0x50, 0x42,
  	0x9e, 0x8c, 0xba, 0xa8, 0xd6, 0xc4, 0xf2, 0xe0,
  	0x0e, 0x1c, 0x2a, 0x38, 0x46, 0x54, 0x62, 0x70,
  	0x82, 0x90, 0xa6, 0xb4, 0xca, 0xd8, 0xee, 0xfc,
  	0x12, 0x00, 0x36, 0x24, 0x5a, 0x48, 0x7e, 0x6c,
  	0xb0, 0xa2, 0x94, 0x86, 0xf8, 0xea, 0xdc, 0xce,
  	0x20, 0x32, 0x04, 0x16, 0x68, 0x7a, 0x4c, 0x5e,
  	0xe6, 0xf4, 0xc2, 0xd0, 0xae, 0xbc, 0x8a, 0x98,
  	0x76, 0x64, 0x52, 0x40, 0x3e, 0x2c, 0x1a, 0x08,
  	0xd4, 0xc6, 0xf0, 0xe2, 0x9c, 0x8e, 0xb8, 0xaa,
  	0x44, 0x56, 0x60, 0x72, 0x0c, 0x1e, 0x28, 0x3a,
  	0x4a, 0x58, 0x6e, 0x7c, 0x02, 0x10, 0x26, 0x34,
  	0xda, 0xc8, 0xfe, 0xec, 0x92, 0x80, 0xb6, 0xa4,
  	0x78, 0x6a, 0x5c, 0x4e, 0x30, 0x22, 0x14, 0x06,
  	0xe8, 0xfa, 0xcc, 0xde, 0xa0, 0xb2, 0x84, 0x96,
  	0x2e, 0x3c, 0x0a, 0x18, 0x66, 0x74, 0x42, 0x50,
  	0xbe, 0xac, 0x9a, 0x88, 0xf6, 0xe4, 0xd2, 0xc0,
  	0x1c, 0x0e, 0x38, 0x2a, 0x54, 0x46, 0x70, 0x62,
  	0x8c, 0x9e, 0xa8, 0xba, 0xc4, 0xd6, 0xe0, 0xf2
ad241528c   Jan Nikitenko   CRC7 support
50
  };
1836eea20   George Spelvin   lib/crc7: Shift c...
51
  EXPORT_SYMBOL(crc7_be_syndrome_table);
ad241528c   Jan Nikitenko   CRC7 support
52
53
54
55
56
57
58
59
60
  
  /**
   * crc7 - update the CRC7 for the data buffer
   * @crc:     previous CRC7 value
   * @buffer:  data pointer
   * @len:     number of bytes in the buffer
   * Context: any
   *
   * Returns the updated CRC7 value.
1836eea20   George Spelvin   lib/crc7: Shift c...
61
62
63
   * The CRC7 is left-aligned in the byte (the lsbit is always 0), as that
   * makes the computation easier, and all callers want it in that form.
   *
ad241528c   Jan Nikitenko   CRC7 support
64
   */
1836eea20   George Spelvin   lib/crc7: Shift c...
65
  u8 crc7_be(u8 crc, const u8 *buffer, size_t len)
ad241528c   Jan Nikitenko   CRC7 support
66
67
  {
  	while (len--)
1836eea20   George Spelvin   lib/crc7: Shift c...
68
  		crc = crc7_be_byte(crc, *buffer++);
ad241528c   Jan Nikitenko   CRC7 support
69
70
  	return crc;
  }
1836eea20   George Spelvin   lib/crc7: Shift c...
71
  EXPORT_SYMBOL(crc7_be);
ad241528c   Jan Nikitenko   CRC7 support
72
73
74
  
  MODULE_DESCRIPTION("CRC7 calculations");
  MODULE_LICENSE("GPL");