Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/ncsw/inc/Peripherals/crc_mac_addr_ext.h
48375 views
1
/*
2
* Copyright 2008-2012 Freescale Semiconductor Inc.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
6
* * Redistributions of source code must retain the above copyright
7
* notice, this list of conditions and the following disclaimer.
8
* * Redistributions in binary form must reproduce the above copyright
9
* notice, this list of conditions and the following disclaimer in the
10
* documentation and/or other materials provided with the distribution.
11
* * Neither the name of Freescale Semiconductor nor the
12
* names of its contributors may be used to endorse or promote products
13
* derived from this software without specific prior written permission.
14
*
15
*
16
* ALTERNATIVELY, this software may be distributed under the terms of the
17
* GNU General Public License ("GPL") as published by the Free Software
18
* Foundation, either version 2 of that License or (at your option) any
19
* later version.
20
*
21
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
33
34
/*------------------------------------------------------*/
35
/* */
36
/* File: crc_mac_addr_ext.h */
37
/* */
38
/* Description: */
39
/* Define a macro that calculate the crc value of */
40
/* an Ethernet MAC address (48 bitd address */
41
/*------------------------------------------------------*/
42
43
#ifndef __crc_mac_addr_ext_h
44
#define __crc_mac_addr_ext_h
45
46
#include "std_ext.h"
47
48
49
static uint32_t crc_table[256] =
50
{
51
0x00000000,
52
0x77073096,
53
0xee0e612c,
54
0x990951ba,
55
0x076dc419,
56
0x706af48f,
57
0xe963a535,
58
0x9e6495a3,
59
0x0edb8832,
60
0x79dcb8a4,
61
0xe0d5e91e,
62
0x97d2d988,
63
0x09b64c2b,
64
0x7eb17cbd,
65
0xe7b82d07,
66
0x90bf1d91,
67
0x1db71064,
68
0x6ab020f2,
69
0xf3b97148,
70
0x84be41de,
71
0x1adad47d,
72
0x6ddde4eb,
73
0xf4d4b551,
74
0x83d385c7,
75
0x136c9856,
76
0x646ba8c0,
77
0xfd62f97a,
78
0x8a65c9ec,
79
0x14015c4f,
80
0x63066cd9,
81
0xfa0f3d63,
82
0x8d080df5,
83
0x3b6e20c8,
84
0x4c69105e,
85
0xd56041e4,
86
0xa2677172,
87
0x3c03e4d1,
88
0x4b04d447,
89
0xd20d85fd,
90
0xa50ab56b,
91
0x35b5a8fa,
92
0x42b2986c,
93
0xdbbbc9d6,
94
0xacbcf940,
95
0x32d86ce3,
96
0x45df5c75,
97
0xdcd60dcf,
98
0xabd13d59,
99
0x26d930ac,
100
0x51de003a,
101
0xc8d75180,
102
0xbfd06116,
103
0x21b4f4b5,
104
0x56b3c423,
105
0xcfba9599,
106
0xb8bda50f,
107
0x2802b89e,
108
0x5f058808,
109
0xc60cd9b2,
110
0xb10be924,
111
0x2f6f7c87,
112
0x58684c11,
113
0xc1611dab,
114
0xb6662d3d,
115
0x76dc4190,
116
0x01db7106,
117
0x98d220bc,
118
0xefd5102a,
119
0x71b18589,
120
0x06b6b51f,
121
0x9fbfe4a5,
122
0xe8b8d433,
123
0x7807c9a2,
124
0x0f00f934,
125
0x9609a88e,
126
0xe10e9818,
127
0x7f6a0dbb,
128
0x086d3d2d,
129
0x91646c97,
130
0xe6635c01,
131
0x6b6b51f4,
132
0x1c6c6162,
133
0x856530d8,
134
0xf262004e,
135
0x6c0695ed,
136
0x1b01a57b,
137
0x8208f4c1,
138
0xf50fc457,
139
0x65b0d9c6,
140
0x12b7e950,
141
0x8bbeb8ea,
142
0xfcb9887c,
143
0x62dd1ddf,
144
0x15da2d49,
145
0x8cd37cf3,
146
0xfbd44c65,
147
0x4db26158,
148
0x3ab551ce,
149
0xa3bc0074,
150
0xd4bb30e2,
151
0x4adfa541,
152
0x3dd895d7,
153
0xa4d1c46d,
154
0xd3d6f4fb,
155
0x4369e96a,
156
0x346ed9fc,
157
0xad678846,
158
0xda60b8d0,
159
0x44042d73,
160
0x33031de5,
161
0xaa0a4c5f,
162
0xdd0d7cc9,
163
0x5005713c,
164
0x270241aa,
165
0xbe0b1010,
166
0xc90c2086,
167
0x5768b525,
168
0x206f85b3,
169
0xb966d409,
170
0xce61e49f,
171
0x5edef90e,
172
0x29d9c998,
173
0xb0d09822,
174
0xc7d7a8b4,
175
0x59b33d17,
176
0x2eb40d81,
177
0xb7bd5c3b,
178
0xc0ba6cad,
179
0xedb88320,
180
0x9abfb3b6,
181
0x03b6e20c,
182
0x74b1d29a,
183
0xead54739,
184
0x9dd277af,
185
0x04db2615,
186
0x73dc1683,
187
0xe3630b12,
188
0x94643b84,
189
0x0d6d6a3e,
190
0x7a6a5aa8,
191
0xe40ecf0b,
192
0x9309ff9d,
193
0x0a00ae27,
194
0x7d079eb1,
195
0xf00f9344,
196
0x8708a3d2,
197
0x1e01f268,
198
0x6906c2fe,
199
0xf762575d,
200
0x806567cb,
201
0x196c3671,
202
0x6e6b06e7,
203
0xfed41b76,
204
0x89d32be0,
205
0x10da7a5a,
206
0x67dd4acc,
207
0xf9b9df6f,
208
0x8ebeeff9,
209
0x17b7be43,
210
0x60b08ed5,
211
0xd6d6a3e8,
212
0xa1d1937e,
213
0x38d8c2c4,
214
0x4fdff252,
215
0xd1bb67f1,
216
0xa6bc5767,
217
0x3fb506dd,
218
0x48b2364b,
219
0xd80d2bda,
220
0xaf0a1b4c,
221
0x36034af6,
222
0x41047a60,
223
0xdf60efc3,
224
0xa867df55,
225
0x316e8eef,
226
0x4669be79,
227
0xcb61b38c,
228
0xbc66831a,
229
0x256fd2a0,
230
0x5268e236,
231
0xcc0c7795,
232
0xbb0b4703,
233
0x220216b9,
234
0x5505262f,
235
0xc5ba3bbe,
236
0xb2bd0b28,
237
0x2bb45a92,
238
0x5cb36a04,
239
0xc2d7ffa7,
240
0xb5d0cf31,
241
0x2cd99e8b,
242
0x5bdeae1d,
243
0x9b64c2b0,
244
0xec63f226,
245
0x756aa39c,
246
0x026d930a,
247
0x9c0906a9,
248
0xeb0e363f,
249
0x72076785,
250
0x05005713,
251
0x95bf4a82,
252
0xe2b87a14,
253
0x7bb12bae,
254
0x0cb61b38,
255
0x92d28e9b,
256
0xe5d5be0d,
257
0x7cdcefb7,
258
0x0bdbdf21,
259
0x86d3d2d4,
260
0xf1d4e242,
261
0x68ddb3f8,
262
0x1fda836e,
263
0x81be16cd,
264
0xf6b9265b,
265
0x6fb077e1,
266
0x18b74777,
267
0x88085ae6,
268
0xff0f6a70,
269
0x66063bca,
270
0x11010b5c,
271
0x8f659eff,
272
0xf862ae69,
273
0x616bffd3,
274
0x166ccf45,
275
0xa00ae278,
276
0xd70dd2ee,
277
0x4e048354,
278
0x3903b3c2,
279
0xa7672661,
280
0xd06016f7,
281
0x4969474d,
282
0x3e6e77db,
283
0xaed16a4a,
284
0xd9d65adc,
285
0x40df0b66,
286
0x37d83bf0,
287
0xa9bcae53,
288
0xdebb9ec5,
289
0x47b2cf7f,
290
0x30b5ffe9,
291
0xbdbdf21c,
292
0xcabac28a,
293
0x53b39330,
294
0x24b4a3a6,
295
0xbad03605,
296
0xcdd70693,
297
0x54de5729,
298
0x23d967bf,
299
0xb3667a2e,
300
0xc4614ab8,
301
0x5d681b02,
302
0x2a6f2b94,
303
0xb40bbe37,
304
0xc30c8ea1,
305
0x5a05df1b,
306
0x2d02ef8d
307
};
308
309
310
#define GET_MAC_ADDR_CRC(addr, crc) \
311
{ \
312
uint32_t i; \
313
uint8_t data; \
314
\
315
/* CRC calculation */ \
316
crc = 0xffffffff; \
317
for (i=0; i < 6; i++) \
318
{ \
319
data = (uint8_t)(addr >> ((5-i)*8)); \
320
crc = crc^data; \
321
crc = crc_table[crc&0xff] ^ (crc>>8); \
322
} \
323
} \
324
325
/* Define a macro for getting the mirrored value of */
326
/* a byte size number. (0x11010011 --> 0x11001011) */
327
/* Sometimes the mirrored value of the CRC is required */
328
static __inline__ uint8_t GetMirror(uint8_t n)
329
{
330
uint8_t mirror[16] =
331
{
332
0x00,
333
0x08,
334
0x04,
335
0x0c,
336
0x02,
337
0x0a,
338
0x06,
339
0x0e,
340
0x01,
341
0x09,
342
0x05,
343
0x0d,
344
0x03,
345
0x0b,
346
0x07,
347
0x0f
348
};
349
return ((uint8_t)(((mirror[n & 0x0f] << 4) | (mirror[n >> 4]))));
350
}
351
352
static __inline__ uint32_t GetMirror32(uint32_t n)
353
{
354
return (((uint32_t)GetMirror((uint8_t)(n))<<24) |
355
((uint32_t)GetMirror((uint8_t)(n>>8))<<16) |
356
((uint32_t)GetMirror((uint8_t)(n>>16))<<8) |
357
((uint32_t)GetMirror((uint8_t)(n>>24))));
358
}
359
360
#define MIRROR GetMirror
361
#define MIRROR_32 GetMirror32
362
363
364
#endif /* __crc_mac_addr_ext_h */
365
366