1cf48eb9aSWolfgang Denk /* 2cf48eb9aSWolfgang Denk *========================================================================== 3cf48eb9aSWolfgang Denk * 4cf48eb9aSWolfgang Denk * crc.h 5cf48eb9aSWolfgang Denk * 6cf48eb9aSWolfgang Denk * Interface for the CRC algorithms. 7cf48eb9aSWolfgang Denk * 8cf48eb9aSWolfgang Denk *========================================================================== 9e85427fdSWolfgang Denk * SPDX-License-Identifier: eCos-2.0 10cf48eb9aSWolfgang Denk *========================================================================== 11cf48eb9aSWolfgang Denk *#####DESCRIPTIONBEGIN#### 12cf48eb9aSWolfgang Denk * 13cf48eb9aSWolfgang Denk * Author(s): Andrew Lunn 14cf48eb9aSWolfgang Denk * Contributors: Andrew Lunn 15cf48eb9aSWolfgang Denk * Date: 2002-08-06 16cf48eb9aSWolfgang Denk * Purpose: 17cf48eb9aSWolfgang Denk * Description: 18cf48eb9aSWolfgang Denk * 19cf48eb9aSWolfgang Denk * This code is part of eCos (tm). 20cf48eb9aSWolfgang Denk * 21cf48eb9aSWolfgang Denk *####DESCRIPTIONEND#### 22cf48eb9aSWolfgang Denk * 23cf48eb9aSWolfgang Denk *========================================================================== 24cf48eb9aSWolfgang Denk */ 25f2841d37SMarkus Klotzbuecher 26f2841d37SMarkus Klotzbuecher #ifndef _SERVICES_CRC_CRC_H_ 27f2841d37SMarkus Klotzbuecher #define _SERVICES_CRC_CRC_H_ 28f2841d37SMarkus Klotzbuecher 29f2841d37SMarkus Klotzbuecher #include <linux/types.h> 30f2841d37SMarkus Klotzbuecher 31f2841d37SMarkus Klotzbuecher #ifndef __externC 32f2841d37SMarkus Klotzbuecher # ifdef __cplusplus 33f2841d37SMarkus Klotzbuecher # define __externC extern "C" 34f2841d37SMarkus Klotzbuecher # else 35f2841d37SMarkus Klotzbuecher # define __externC extern 36f2841d37SMarkus Klotzbuecher # endif 37f2841d37SMarkus Klotzbuecher #endif 38f2841d37SMarkus Klotzbuecher 39cf48eb9aSWolfgang Denk /* Compute a CRC, using the POSIX 1003 definition */ 40f2841d37SMarkus Klotzbuecher extern uint32_t 41f2841d37SMarkus Klotzbuecher cyg_posix_crc32(unsigned char *s, int len); 42f2841d37SMarkus Klotzbuecher 43cf48eb9aSWolfgang Denk /* Gary S. Brown's 32 bit CRC */ 44f2841d37SMarkus Klotzbuecher 45f2841d37SMarkus Klotzbuecher extern uint32_t 46f2841d37SMarkus Klotzbuecher cyg_crc32(unsigned char *s, int len); 47f2841d37SMarkus Klotzbuecher 48cf48eb9aSWolfgang Denk /* Gary S. Brown's 32 bit CRC, but accumulate the result from a */ 49cf48eb9aSWolfgang Denk /* previous CRC calculation */ 50f2841d37SMarkus Klotzbuecher 51f2841d37SMarkus Klotzbuecher extern uint32_t 52f2841d37SMarkus Klotzbuecher cyg_crc32_accumulate(uint32_t crc, unsigned char *s, int len); 53f2841d37SMarkus Klotzbuecher 54cf48eb9aSWolfgang Denk /* Ethernet FCS Algorithm */ 55f2841d37SMarkus Klotzbuecher 56f2841d37SMarkus Klotzbuecher extern uint32_t 57f2841d37SMarkus Klotzbuecher cyg_ether_crc32(unsigned char *s, int len); 58f2841d37SMarkus Klotzbuecher 59cf48eb9aSWolfgang Denk /* Ethernet FCS algorithm, but accumulate the result from a previous */ 60cf48eb9aSWolfgang Denk /* CRC calculation. */ 61f2841d37SMarkus Klotzbuecher 62f2841d37SMarkus Klotzbuecher extern uint32_t 63f2841d37SMarkus Klotzbuecher cyg_ether_crc32_accumulate(uint32_t crc, unsigned char *s, int len); 64f2841d37SMarkus Klotzbuecher 65*ecb57f69SStefan Roese /* 16 bit CRC with polynomial x^16+x^12+x^5+1 (CRC-CCITT) */ 66f2841d37SMarkus Klotzbuecher 67*ecb57f69SStefan Roese uint16_t crc16_ccitt(uint16_t crc_start, unsigned char *s, int len); 68f2841d37SMarkus Klotzbuecher 69cf48eb9aSWolfgang Denk #endif /* _SERVICES_CRC_CRC_H_ */ 70