Merge branch 'master' of git://git.denx.de/u-boot-arm
[platform/kernel/u-boot.git] / include / crc.h
1 /*
2  *==========================================================================
3  *
4  *      crc.h
5  *
6  *      Interface for the CRC algorithms.
7  *
8  *==========================================================================
9  *####ECOSGPLCOPYRIGHTBEGIN####
10  * -------------------------------------------
11  * This file is part of eCos, the Embedded Configurable Operating System.
12  * Copyright (C) 2002 Andrew Lunn
13  *
14  * eCos is free software; you can redistribute it and/or modify it under
15  * the terms of the GNU General Public License as published by the Free
16  * Software Foundation; either version 2 or (at your option) any later version.
17  *
18  * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
19  * WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21  * for more details.
22  *
23  * You should have received a copy of the GNU General Public License along
24  * with eCos; if not, write to the Free Software Foundation, Inc.,
25  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26  *
27  * As a special exception, if other files instantiate templates or use macros
28  * or inline functions from this file, or you compile this file and link it
29  * with other works to produce a work based on this file, this file does not
30  * by itself cause the resulting work to be covered by the GNU General Public
31  * License. However the source code for this file must still be made available
32  * in accordance with section (3) of the GNU General Public License.
33  *
34  * This exception does not invalidate any other reasons why a work based on
35  * this file might be covered by the GNU General Public License.
36  *
37  * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
38  * at http: *sources.redhat.com/ecos/ecos-license/
39  * -------------------------------------------
40  *####ECOSGPLCOPYRIGHTEND####
41  *==========================================================================
42  *#####DESCRIPTIONBEGIN####
43  *
44  * Author(s):    Andrew Lunn
45  * Contributors: Andrew Lunn
46  * Date:         2002-08-06
47  * Purpose:
48  * Description:
49  *
50  * This code is part of eCos (tm).
51  *
52  *####DESCRIPTIONEND####
53  *
54  *==========================================================================
55  */
56
57 #ifndef _SERVICES_CRC_CRC_H_
58 #define _SERVICES_CRC_CRC_H_
59
60 #include <linux/types.h>
61
62 #ifndef __externC
63 # ifdef __cplusplus
64 #  define __externC extern "C"
65 # else
66 #  define __externC extern
67 # endif
68 #endif
69
70 /* Compute a CRC, using the POSIX 1003 definition */
71 extern uint32_t
72 cyg_posix_crc32(unsigned char *s, int len);
73
74 /* Gary S. Brown's 32 bit CRC */
75
76 extern uint32_t
77 cyg_crc32(unsigned char *s, int len);
78
79 /* Gary S. Brown's 32 bit CRC, but accumulate the result from a */
80 /* previous CRC calculation */
81
82 extern uint32_t
83 cyg_crc32_accumulate(uint32_t crc, unsigned char *s, int len);
84
85 /* Ethernet FCS Algorithm */
86
87 extern uint32_t
88 cyg_ether_crc32(unsigned char *s, int len);
89
90 /* Ethernet FCS algorithm, but accumulate the result from a previous */
91 /* CRC calculation. */
92
93 extern uint32_t
94 cyg_ether_crc32_accumulate(uint32_t crc, unsigned char *s, int len);
95
96 /* 16 bit CRC with polynomial x^16+x^12+x^5+1 */
97
98 extern uint16_t cyg_crc16(unsigned char *s, int len);
99
100 #endif /* _SERVICES_CRC_CRC_H_ */