xref: /linux-6.15/include/linux/crc16.h (revision 40b0b3f8)
1*40b0b3f8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
27657ec1fSEvgeniy Polyakov /*
37657ec1fSEvgeniy Polyakov  *	crc16.h - CRC-16 routine
47657ec1fSEvgeniy Polyakov  *
5f24ec7f6SEvgeniy Polyakov  * Implements the standard CRC-16:
67657ec1fSEvgeniy Polyakov  *   Width 16
77657ec1fSEvgeniy Polyakov  *   Poly  0x8005 (x^16 + x^15 + x^2 + 1)
87657ec1fSEvgeniy Polyakov  *   Init  0
97657ec1fSEvgeniy Polyakov  *
107657ec1fSEvgeniy Polyakov  * Copyright (c) 2005 Ben Gardner <[email protected]>
117657ec1fSEvgeniy Polyakov  */
127657ec1fSEvgeniy Polyakov 
137657ec1fSEvgeniy Polyakov #ifndef __CRC16_H
147657ec1fSEvgeniy Polyakov #define __CRC16_H
157657ec1fSEvgeniy Polyakov 
167657ec1fSEvgeniy Polyakov #include <linux/types.h>
177657ec1fSEvgeniy Polyakov 
187657ec1fSEvgeniy Polyakov extern u16 const crc16_table[256];
197657ec1fSEvgeniy Polyakov 
207657ec1fSEvgeniy Polyakov extern u16 crc16(u16 crc, const u8 *buffer, size_t len);
217657ec1fSEvgeniy Polyakov 
crc16_byte(u16 crc,const u8 data)227657ec1fSEvgeniy Polyakov static inline u16 crc16_byte(u16 crc, const u8 data)
237657ec1fSEvgeniy Polyakov {
247657ec1fSEvgeniy Polyakov 	return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff];
257657ec1fSEvgeniy Polyakov }
267657ec1fSEvgeniy Polyakov 
277657ec1fSEvgeniy Polyakov #endif /* __CRC16_H */
287657ec1fSEvgeniy Polyakov 
29