1 // SPDX-License-Identifier: GPL-2.0-only << 2 /* 1 /* 3 * linux/lib/crc-ccitt.c 2 * linux/lib/crc-ccitt.c >> 3 * >> 4 * This source code is licensed under the GNU General Public License, >> 5 * Version 2. See the file COPYING for more details. 4 */ 6 */ 5 7 6 #include <linux/types.h> 8 #include <linux/types.h> 7 #include <linux/module.h> 9 #include <linux/module.h> 8 #include <linux/crc-ccitt.h> 10 #include <linux/crc-ccitt.h> 9 11 10 /* 12 /* 11 * This mysterious table is just the CRC of ea 13 * This mysterious table is just the CRC of each possible byte. It can be 12 * computed using the standard bit-at-a-time m 14 * computed using the standard bit-at-a-time methods. The polynomial can 13 * be seen in entry 128, 0x8408. This correspo 15 * be seen in entry 128, 0x8408. This corresponds to x^0 + x^5 + x^12. 14 * Add the implicit x^16, and you have the sta 16 * Add the implicit x^16, and you have the standard CRC-CCITT. 15 */ 17 */ 16 u16 const crc_ccitt_table[256] = { 18 u16 const crc_ccitt_table[256] = { 17 0x0000, 0x1189, 0x2312, 0x329b, 0x4624 19 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 18 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c 20 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 19 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5 21 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 20 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed 22 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 21 0x2102, 0x308b, 0x0210, 0x1399, 0x6726 23 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 22 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e 24 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 23 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7 25 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 24 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef 26 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 25 0x4204, 0x538d, 0x6116, 0x709f, 0x0420 27 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 26 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868 28 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 27 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1 29 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 28 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9 30 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 29 0x6306, 0x728f, 0x4014, 0x519d, 0x2522 31 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 30 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a 32 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 31 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3 33 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 32 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb 34 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 33 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c 35 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 34 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64 36 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 35 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad 37 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 36 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5 38 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 37 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e 39 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 38 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66 40 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 39 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af 41 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 40 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7 42 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 41 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028 43 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 42 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60 44 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 43 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9 45 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 44 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1 46 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 45 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a 47 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 46 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62 48 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 47 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab 49 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 48 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3 50 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 49 }; 51 }; 50 EXPORT_SYMBOL(crc_ccitt_table); 52 EXPORT_SYMBOL(crc_ccitt_table); 51 53 52 /** 54 /** 53 * crc_ccitt - recompute the CRC (CRC-CCI !! 55 * crc_ccitt - recompute the CRC for the data buffer 54 * buffer << 55 * @crc: previous CRC value 56 * @crc: previous CRC value 56 * @buffer: data pointer 57 * @buffer: data pointer 57 * @len: number of bytes in the buffer 58 * @len: number of bytes in the buffer 58 */ 59 */ 59 u16 crc_ccitt(u16 crc, u8 const *buffer, size_ 60 u16 crc_ccitt(u16 crc, u8 const *buffer, size_t len) 60 { 61 { 61 while (len--) 62 while (len--) 62 crc = crc_ccitt_byte(crc, *buf 63 crc = crc_ccitt_byte(crc, *buffer++); 63 return crc; 64 return crc; 64 } 65 } 65 EXPORT_SYMBOL(crc_ccitt); 66 EXPORT_SYMBOL(crc_ccitt); 66 67 67 MODULE_DESCRIPTION("CRC-CCITT calculations"); 68 MODULE_DESCRIPTION("CRC-CCITT calculations"); 68 MODULE_LICENSE("GPL"); 69 MODULE_LICENSE("GPL"); 69 70
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.