xref: /openbmc/u-boot/fs/ubifs/crc16.h (revision 712ac6a1)
1*9eefe2a2SStefan Roese /*
2*9eefe2a2SStefan Roese  *	crc16.h - CRC-16 routine
3*9eefe2a2SStefan Roese  *
4*9eefe2a2SStefan Roese  * Implements the standard CRC-16:
5*9eefe2a2SStefan Roese  *   Width 16
6*9eefe2a2SStefan Roese  *   Poly  0x8005 (x^16 + x^15 + x^2 + 1)
7*9eefe2a2SStefan Roese  *   Init  0
8*9eefe2a2SStefan Roese  *
9*9eefe2a2SStefan Roese  * Copyright (c) 2005 Ben Gardner <bgardner@wabtec.com>
10*9eefe2a2SStefan Roese  *
11*9eefe2a2SStefan Roese  * This source code is licensed under the GNU General Public License,
12*9eefe2a2SStefan Roese  * Version 2. See the file COPYING for more details.
13*9eefe2a2SStefan Roese  */
14*9eefe2a2SStefan Roese 
15*9eefe2a2SStefan Roese #ifndef __CRC16_H
16*9eefe2a2SStefan Roese #define __CRC16_H
17*9eefe2a2SStefan Roese 
18*9eefe2a2SStefan Roese #include <linux/types.h>
19*9eefe2a2SStefan Roese 
20*9eefe2a2SStefan Roese extern u16 const crc16_table[256];
21*9eefe2a2SStefan Roese 
22*9eefe2a2SStefan Roese extern u16 crc16(u16 crc, const u8 *buffer, size_t len);
23*9eefe2a2SStefan Roese 
crc16_byte(u16 crc,const u8 data)24*9eefe2a2SStefan Roese static inline u16 crc16_byte(u16 crc, const u8 data)
25*9eefe2a2SStefan Roese {
26*9eefe2a2SStefan Roese 	return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff];
27*9eefe2a2SStefan Roese }
28*9eefe2a2SStefan Roese 
29*9eefe2a2SStefan Roese #endif /* __CRC16_H */
30