2 * Copyright 2008-2012 Freescale Semiconductor Inc.
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.
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
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.
34 /*------------------------------------------------------*/
36 /* File: crc_mac_addr_ext.h */
39 /* Define a macro that calculate the crc value of */
40 /* an Ethernet MAC address (48 bitd address */
41 /*------------------------------------------------------*/
43 #ifndef __crc_mac_addr_ext_h
44 #define __crc_mac_addr_ext_h
49 static uint32_t crc_table[256] =
310 #define GET_MAC_ADDR_CRC(addr, crc) \
315 /* CRC calculation */ \
317 for (i=0; i < 6; i++) \
319 data = (uint8_t)(addr >> ((5-i)*8)); \
321 crc = crc_table[crc&0xff] ^ (crc>>8); \
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)
349 return ((uint8_t)(((mirror[n & 0x0f] << 4) | (mirror[n >> 4]))));
352 static __inline__ uint32_t GetMirror32(uint32_t n)
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))));
360 #define MIRROR GetMirror
361 #define MIRROR_32 GetMirror32
364 #endif /* __crc_mac_addr_ext_h */