1b344bd3aSVal Packett /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3b344bd3aSVal Packett * 4b344bd3aSVal Packett * Copyright (c) 2017, Fedor Uporov 5b344bd3aSVal Packett * All rights reserved. 6b344bd3aSVal Packett * 7b344bd3aSVal Packett * Redistribution and use in source and binary forms, with or without 8b344bd3aSVal Packett * modification, are permitted provided that the following conditions 9b344bd3aSVal Packett * are met: 10b344bd3aSVal Packett * 1. Redistributions of source code must retain the above copyright 11b344bd3aSVal Packett * notice, this list of conditions and the following disclaimer. 12b344bd3aSVal Packett * 2. Redistributions in binary form must reproduce the above copyright 13b344bd3aSVal Packett * notice, this list of conditions and the following disclaimer in the 14b344bd3aSVal Packett * documentation and/or other materials provided with the distribution. 15b344bd3aSVal Packett * 16b344bd3aSVal Packett * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 17b344bd3aSVal Packett * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18b344bd3aSVal Packett * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19b344bd3aSVal Packett * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 20b344bd3aSVal Packett * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21b344bd3aSVal Packett * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22b344bd3aSVal Packett * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23b344bd3aSVal Packett * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24b344bd3aSVal Packett * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25b344bd3aSVal Packett * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26b344bd3aSVal Packett * SUCH DAMAGE. 27b344bd3aSVal Packett */ 28b344bd3aSVal Packett 29b344bd3aSVal Packett #include <sys/types.h> 30b344bd3aSVal Packett #include <sys/crc16.h> 31b344bd3aSVal Packett 32b344bd3aSVal Packett /* CRC table for the CRC-16. The poly is 0x8005 (x16 + x15 + x2 + 1). */ 33b344bd3aSVal Packett uint16_t const crc16_table[256] = { 34b344bd3aSVal Packett 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 35b344bd3aSVal Packett 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 36b344bd3aSVal Packett 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 37b344bd3aSVal Packett 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 38b344bd3aSVal Packett 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 39b344bd3aSVal Packett 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 40b344bd3aSVal Packett 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, 41b344bd3aSVal Packett 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 42b344bd3aSVal Packett 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 43b344bd3aSVal Packett 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, 44b344bd3aSVal Packett 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 45b344bd3aSVal Packett 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 46b344bd3aSVal Packett 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 47b344bd3aSVal Packett 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 48b344bd3aSVal Packett 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, 49b344bd3aSVal Packett 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 50b344bd3aSVal Packett 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 51b344bd3aSVal Packett 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, 52b344bd3aSVal Packett 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 53b344bd3aSVal Packett 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, 54b344bd3aSVal Packett 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 55b344bd3aSVal Packett 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 56b344bd3aSVal Packett 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, 57b344bd3aSVal Packett 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 58b344bd3aSVal Packett 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 59b344bd3aSVal Packett 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, 60b344bd3aSVal Packett 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 61b344bd3aSVal Packett 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, 62b344bd3aSVal Packett 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 63b344bd3aSVal Packett 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 64b344bd3aSVal Packett 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 65b344bd3aSVal Packett 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 66b344bd3aSVal Packett }; 67