Root/
1 | #include <stdio.h> |
2 | #include "../include/generated/autoconf.h" |
3 | #include "crc32defs.h" |
4 | #include <inttypes.h> |
5 | |
6 | #define ENTRIES_PER_LINE 4 |
7 | |
8 | #if CRC_LE_BITS > 8 |
9 | # define LE_TABLE_ROWS (CRC_LE_BITS/8) |
10 | # define LE_TABLE_SIZE 256 |
11 | #else |
12 | # define LE_TABLE_ROWS 1 |
13 | # define LE_TABLE_SIZE (1 << CRC_LE_BITS) |
14 | #endif |
15 | |
16 | #if CRC_BE_BITS > 8 |
17 | # define BE_TABLE_ROWS (CRC_BE_BITS/8) |
18 | # define BE_TABLE_SIZE 256 |
19 | #else |
20 | # define BE_TABLE_ROWS 1 |
21 | # define BE_TABLE_SIZE (1 << CRC_BE_BITS) |
22 | #endif |
23 | |
24 | static uint32_t crc32table_le[LE_TABLE_ROWS][256]; |
25 | static uint32_t crc32table_be[BE_TABLE_ROWS][256]; |
26 | static uint32_t crc32ctable_le[LE_TABLE_ROWS][256]; |
27 | |
28 | /** |
29 | * crc32init_le() - allocate and initialize LE table data |
30 | * |
31 | * crc is the crc of the byte i; other entries are filled in based on the |
32 | * fact that crctable[i^j] = crctable[i] ^ crctable[j]. |
33 | * |
34 | */ |
35 | static void crc32init_le_generic(const uint32_t polynomial, |
36 | uint32_t (*tab)[256]) |
37 | { |
38 | unsigned i, j; |
39 | uint32_t crc = 1; |
40 | |
41 | tab[0][0] = 0; |
42 | |
43 | for (i = LE_TABLE_SIZE >> 1; i; i >>= 1) { |
44 | crc = (crc >> 1) ^ ((crc & 1) ? polynomial : 0); |
45 | for (j = 0; j < LE_TABLE_SIZE; j += 2 * i) |
46 | tab[0][i + j] = crc ^ tab[0][j]; |
47 | } |
48 | for (i = 0; i < LE_TABLE_SIZE; i++) { |
49 | crc = tab[0][i]; |
50 | for (j = 1; j < LE_TABLE_ROWS; j++) { |
51 | crc = tab[0][crc & 0xff] ^ (crc >> 8); |
52 | tab[j][i] = crc; |
53 | } |
54 | } |
55 | } |
56 | |
57 | static void crc32init_le(void) |
58 | { |
59 | crc32init_le_generic(CRCPOLY_LE, crc32table_le); |
60 | } |
61 | |
62 | static void crc32cinit_le(void) |
63 | { |
64 | crc32init_le_generic(CRC32C_POLY_LE, crc32ctable_le); |
65 | } |
66 | |
67 | /** |
68 | * crc32init_be() - allocate and initialize BE table data |
69 | */ |
70 | static void crc32init_be(void) |
71 | { |
72 | unsigned i, j; |
73 | uint32_t crc = 0x80000000; |
74 | |
75 | crc32table_be[0][0] = 0; |
76 | |
77 | for (i = 1; i < BE_TABLE_SIZE; i <<= 1) { |
78 | crc = (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE : 0); |
79 | for (j = 0; j < i; j++) |
80 | crc32table_be[0][i + j] = crc ^ crc32table_be[0][j]; |
81 | } |
82 | for (i = 0; i < BE_TABLE_SIZE; i++) { |
83 | crc = crc32table_be[0][i]; |
84 | for (j = 1; j < BE_TABLE_ROWS; j++) { |
85 | crc = crc32table_be[0][(crc >> 24) & 0xff] ^ (crc << 8); |
86 | crc32table_be[j][i] = crc; |
87 | } |
88 | } |
89 | } |
90 | |
91 | static void output_table(uint32_t (*table)[256], int rows, int len, char *trans) |
92 | { |
93 | int i, j; |
94 | |
95 | for (j = 0 ; j < rows; j++) { |
96 | printf("{"); |
97 | for (i = 0; i < len - 1; i++) { |
98 | if (i % ENTRIES_PER_LINE == 0) |
99 | printf("\n"); |
100 | printf("%s(0x%8.8xL), ", trans, table[j][i]); |
101 | } |
102 | printf("%s(0x%8.8xL)},\n", trans, table[j][len - 1]); |
103 | } |
104 | } |
105 | |
106 | int main(int argc, char** argv) |
107 | { |
108 | printf("/* this file is generated - do not edit */\n\n"); |
109 | |
110 | if (CRC_LE_BITS > 1) { |
111 | crc32init_le(); |
112 | printf("static const u32 __cacheline_aligned " |
113 | "crc32table_le[%d][%d] = {", |
114 | LE_TABLE_ROWS, LE_TABLE_SIZE); |
115 | output_table(crc32table_le, LE_TABLE_ROWS, |
116 | LE_TABLE_SIZE, "tole"); |
117 | printf("};\n"); |
118 | } |
119 | |
120 | if (CRC_BE_BITS > 1) { |
121 | crc32init_be(); |
122 | printf("static const u32 __cacheline_aligned " |
123 | "crc32table_be[%d][%d] = {", |
124 | BE_TABLE_ROWS, BE_TABLE_SIZE); |
125 | output_table(crc32table_be, LE_TABLE_ROWS, |
126 | BE_TABLE_SIZE, "tobe"); |
127 | printf("};\n"); |
128 | } |
129 | if (CRC_LE_BITS > 1) { |
130 | crc32cinit_le(); |
131 | printf("static const u32 __cacheline_aligned " |
132 | "crc32ctable_le[%d][%d] = {", |
133 | LE_TABLE_ROWS, LE_TABLE_SIZE); |
134 | output_table(crc32ctable_le, LE_TABLE_ROWS, |
135 | LE_TABLE_SIZE, "tole"); |
136 | printf("};\n"); |
137 | } |
138 | |
139 | return 0; |
140 | } |
141 |
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