xref: /openbsd-src/gnu/usr.bin/binutils/gdb/rdi-share/crc.h (revision 63addd46c1e40ca0f49488ddcdc4ab598023b0c1)
1b725ae77Skettenis /*
2b725ae77Skettenis  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
3b725ae77Skettenis  *
4b725ae77Skettenis  * This software may be freely used, copied, modified, and distributed
5b725ae77Skettenis  * provided that the above copyright notice is preserved in all copies of the
6b725ae77Skettenis  * software.
7b725ae77Skettenis  */
8b725ae77Skettenis 
9b725ae77Skettenis /* -*-C-*-
10b725ae77Skettenis  *
11*63addd46Skettenis  * $Revision: 1.3 $
12*63addd46Skettenis  *     $Date: 2004/12/27 14:00:54 $
13b725ae77Skettenis  *
14b725ae77Skettenis  *
15b725ae77Skettenis  * crc.h - describes some "standard" CRC calculation routines.
16b725ae77Skettenis  */
17b725ae77Skettenis #ifndef angel_crc_h
18b725ae77Skettenis #define angel_crc_h
19b725ae77Skettenis 
20b725ae77Skettenis /*
21b725ae77Skettenis  * manifests
22b725ae77Skettenis  */
23b725ae77Skettenis 
24b725ae77Skettenis /*
25b725ae77Skettenis  * When using "crc32" or "crc16" these initial CRC values must be given to
26b725ae77Skettenis  * the respective function the first time it is called. The function can
27b725ae77Skettenis  * then be called with the return value from the last call of the function
28b725ae77Skettenis  * to generate a running CRC over multiple data blocks.
29b725ae77Skettenis  * When the last data block has been processed using the "crc32" algorithm
30b725ae77Skettenis  * the CRC value should be inverted to produce the final CRC value:
31b725ae77Skettenis  * e.g. CRC = ~CRC
32b725ae77Skettenis  */
33b725ae77Skettenis 
34b725ae77Skettenis #define startCRC32  (0xFFFFFFFF)    /* CRC initialised to all 1s */
35b725ae77Skettenis #define startCRC16  (0x0000)        /* CRC initialised to all 0s */
36b725ae77Skettenis 
37b725ae77Skettenis /*
38b725ae77Skettenis  * For the CRC-32 residual to be calculated correctly requires that the CRC
39b725ae77Skettenis  * value is in memory little-endian due to the byte read, bit-ordering
40b725ae77Skettenis  * nature of the algorithm.
41b725ae77Skettenis  */
42b725ae77Skettenis #define CRC32residual   (0xDEBB20E3)    /* good CRC-32 residual */
43b725ae77Skettenis 
44b725ae77Skettenis 
45b725ae77Skettenis /**********************************************************************/
46b725ae77Skettenis 
47b725ae77Skettenis /*
48b725ae77Skettenis  * exported functions
49b725ae77Skettenis  */
50b725ae77Skettenis 
51b725ae77Skettenis /*
52b725ae77Skettenis  *  Function: crc32
53b725ae77Skettenis  *   Purpose: Provides a table driven implementation of the IEEE-802.3
54b725ae77Skettenis  *            32-bit CRC algorithm for byte data.
55b725ae77Skettenis  *
56b725ae77Skettenis  *    Params:
57b725ae77Skettenis  *       Input: address     pointer to the byte data
58b725ae77Skettenis  *              size        number of bytes of data to be processed
59b725ae77Skettenis  *              crc         initial CRC value to be used (can be the output
60b725ae77Skettenis  *                          from a previous call to this function).
61b725ae77Skettenis  *   Returns:
62b725ae77Skettenis  *          OK: 32-bit CRC value for the specified data
63b725ae77Skettenis  */
64b725ae77Skettenis extern unsigned int crc32(unsigned char *address, unsigned int size,
65b725ae77Skettenis                           unsigned int crc);
66b725ae77Skettenis 
67b725ae77Skettenis /**********************************************************************/
68b725ae77Skettenis 
69b725ae77Skettenis /*
70b725ae77Skettenis  *
71b725ae77Skettenis  *  Function: crc16
72b725ae77Skettenis  *   Purpose: Generates a table driven 16-bit CRC-CCITT for byte data
73b725ae77Skettenis  *
74b725ae77Skettenis  *    Params:
75b725ae77Skettenis  *       Input: address     pointer to the byte data
76b725ae77Skettenis  *              size        number of bytes of data to be processed
77b725ae77Skettenis  *              crc         initial CRC value to be used (can be the output
78b725ae77Skettenis  *                          from a previous call to this function).
79b725ae77Skettenis  *
80b725ae77Skettenis  *   Returns:
81b725ae77Skettenis  *          OK: 16-bit CRC value for the specified data
82b725ae77Skettenis  */
83b725ae77Skettenis extern unsigned short crc16(unsigned char *address, unsigned int size,
84b725ae77Skettenis                             unsigned short crc);
85b725ae77Skettenis 
86b725ae77Skettenis /**********************************************************************/
87b725ae77Skettenis 
88b725ae77Skettenis #endif /* !defined(angel_crc_h) */
89b725ae77Skettenis 
90b725ae77Skettenis /* EOF crc.h */
91