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