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