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 Roesestatic 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