Root/
1 | #include <stdio.h> |
2 | #include "crc32defs.h" |
3 | #include <inttypes.h> |
4 | |
5 | #define ENTRIES_PER_LINE 4 |
6 | |
7 | #define LE_TABLE_SIZE (1 << CRC_LE_BITS) |
8 | #define BE_TABLE_SIZE (1 << CRC_BE_BITS) |
9 | |
10 | static uint32_t crc32table_le[4][LE_TABLE_SIZE]; |
11 | static uint32_t crc32table_be[4][BE_TABLE_SIZE]; |
12 | |
13 | /** |
14 | * crc32init_le() - allocate and initialize LE table data |
15 | * |
16 | * crc is the crc of the byte i; other entries are filled in based on the |
17 | * fact that crctable[i^j] = crctable[i] ^ crctable[j]. |
18 | * |
19 | */ |
20 | static void crc32init_le(void) |
21 | { |
22 | unsigned i, j; |
23 | uint32_t crc = 1; |
24 | |
25 | crc32table_le[0][0] = 0; |
26 | |
27 | for (i = 1 << (CRC_LE_BITS - 1); i; i >>= 1) { |
28 | crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0); |
29 | for (j = 0; j < LE_TABLE_SIZE; j += 2 * i) |
30 | crc32table_le[0][i + j] = crc ^ crc32table_le[0][j]; |
31 | } |
32 | for (i = 0; i < LE_TABLE_SIZE; i++) { |
33 | crc = crc32table_le[0][i]; |
34 | for (j = 1; j < 4; j++) { |
35 | crc = crc32table_le[0][crc & 0xff] ^ (crc >> 8); |
36 | crc32table_le[j][i] = crc; |
37 | } |
38 | } |
39 | } |
40 | |
41 | /** |
42 | * crc32init_be() - allocate and initialize BE table data |
43 | */ |
44 | static void crc32init_be(void) |
45 | { |
46 | unsigned i, j; |
47 | uint32_t crc = 0x80000000; |
48 | |
49 | crc32table_be[0][0] = 0; |
50 | |
51 | for (i = 1; i < BE_TABLE_SIZE; i <<= 1) { |
52 | crc = (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE : 0); |
53 | for (j = 0; j < i; j++) |
54 | crc32table_be[0][i + j] = crc ^ crc32table_be[0][j]; |
55 | } |
56 | for (i = 0; i < BE_TABLE_SIZE; i++) { |
57 | crc = crc32table_be[0][i]; |
58 | for (j = 1; j < 4; j++) { |
59 | crc = crc32table_be[0][(crc >> 24) & 0xff] ^ (crc << 8); |
60 | crc32table_be[j][i] = crc; |
61 | } |
62 | } |
63 | } |
64 | |
65 | static void output_table(uint32_t table[4][256], int len, char *trans) |
66 | { |
67 | int i, j; |
68 | |
69 | for (j = 0 ; j < 4; j++) { |
70 | printf("{"); |
71 | for (i = 0; i < len - 1; i++) { |
72 | if (i % ENTRIES_PER_LINE == 0) |
73 | printf("\n"); |
74 | printf("%s(0x%8.8xL), ", trans, table[j][i]); |
75 | } |
76 | printf("%s(0x%8.8xL)},\n", trans, table[j][len - 1]); |
77 | } |
78 | } |
79 | |
80 | int main(int argc, char** argv) |
81 | { |
82 | printf("/* this file is generated - do not edit */\n\n"); |
83 | |
84 | if (CRC_LE_BITS > 1) { |
85 | crc32init_le(); |
86 | printf("static const u32 crc32table_le[4][256] = {"); |
87 | output_table(crc32table_le, LE_TABLE_SIZE, "tole"); |
88 | printf("};\n"); |
89 | } |
90 | |
91 | if (CRC_BE_BITS > 1) { |
92 | crc32init_be(); |
93 | printf("static const u32 crc32table_be[4][256] = {"); |
94 | output_table(crc32table_be, BE_TABLE_SIZE, "tobe"); |
95 | printf("};\n"); |
96 | } |
97 | |
98 | return 0; |
99 | } |
100 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9