11e154bdbf14a1d352117aea057035235b66f0381Jens Axboe/* 21e154bdbf14a1d352117aea057035235b66f0381Jens Axboe * crc7.c 31e154bdbf14a1d352117aea057035235b66f0381Jens Axboe * 41e154bdbf14a1d352117aea057035235b66f0381Jens Axboe * This source code is licensed under the GNU General Public License, 51e154bdbf14a1d352117aea057035235b66f0381Jens Axboe * Version 2. See the file COPYING for more details. 61e154bdbf14a1d352117aea057035235b66f0381Jens Axboe */ 71e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 81e154bdbf14a1d352117aea057035235b66f0381Jens Axboe#include "crc7.h" 91e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 101e154bdbf14a1d352117aea057035235b66f0381Jens Axboe/* Table for CRC-7 (polynomial x^7 + x^3 + 1) */ 111e154bdbf14a1d352117aea057035235b66f0381Jens Axboeconst unsigned char crc7_syndrome_table[256] = { 121e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 131e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 141e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x19, 0x10, 0x0b, 0x02, 0x3d, 0x34, 0x2f, 0x26, 151e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x51, 0x58, 0x43, 0x4a, 0x75, 0x7c, 0x67, 0x6e, 161e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x32, 0x3b, 0x20, 0x29, 0x16, 0x1f, 0x04, 0x0d, 171e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x7a, 0x73, 0x68, 0x61, 0x5e, 0x57, 0x4c, 0x45, 181e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x2b, 0x22, 0x39, 0x30, 0x0f, 0x06, 0x1d, 0x14, 191e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x63, 0x6a, 0x71, 0x78, 0x47, 0x4e, 0x55, 0x5c, 201e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x64, 0x6d, 0x76, 0x7f, 0x40, 0x49, 0x52, 0x5b, 211e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x2c, 0x25, 0x3e, 0x37, 0x08, 0x01, 0x1a, 0x13, 221e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x7d, 0x74, 0x6f, 0x66, 0x59, 0x50, 0x4b, 0x42, 231e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x35, 0x3c, 0x27, 0x2e, 0x11, 0x18, 0x03, 0x0a, 241e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x56, 0x5f, 0x44, 0x4d, 0x72, 0x7b, 0x60, 0x69, 251e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x1e, 0x17, 0x0c, 0x05, 0x3a, 0x33, 0x28, 0x21, 261e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x4f, 0x46, 0x5d, 0x54, 0x6b, 0x62, 0x79, 0x70, 271e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x07, 0x0e, 0x15, 0x1c, 0x23, 0x2a, 0x31, 0x38, 281e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x41, 0x48, 0x53, 0x5a, 0x65, 0x6c, 0x77, 0x7e, 291e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x09, 0x00, 0x1b, 0x12, 0x2d, 0x24, 0x3f, 0x36, 301e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x58, 0x51, 0x4a, 0x43, 0x7c, 0x75, 0x6e, 0x67, 311e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x10, 0x19, 0x02, 0x0b, 0x34, 0x3d, 0x26, 0x2f, 321e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, 331e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 341e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x6a, 0x63, 0x78, 0x71, 0x4e, 0x47, 0x5c, 0x55, 351e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x22, 0x2b, 0x30, 0x39, 0x06, 0x0f, 0x14, 0x1d, 361e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x25, 0x2c, 0x37, 0x3e, 0x01, 0x08, 0x13, 0x1a, 371e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x6d, 0x64, 0x7f, 0x76, 0x49, 0x40, 0x5b, 0x52, 381e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x3c, 0x35, 0x2e, 0x27, 0x18, 0x11, 0x0a, 0x03, 391e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x74, 0x7d, 0x66, 0x6f, 0x50, 0x59, 0x42, 0x4b, 401e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x17, 0x1e, 0x05, 0x0c, 0x33, 0x3a, 0x21, 0x28, 411e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x5f, 0x56, 0x4d, 0x44, 0x7b, 0x72, 0x69, 0x60, 421e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x0e, 0x07, 0x1c, 0x15, 0x2a, 0x23, 0x38, 0x31, 431e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 0x46, 0x4f, 0x54, 0x5d, 0x62, 0x6b, 0x70, 0x79 441e154bdbf14a1d352117aea057035235b66f0381Jens Axboe}; 451e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 4625dfa848abbb6c35b4d45fabd5a8e82cb77fb285Jens Axboeunsigned char fio_crc7(const unsigned char *buffer, unsigned int len) 471e154bdbf14a1d352117aea057035235b66f0381Jens Axboe{ 481e154bdbf14a1d352117aea057035235b66f0381Jens Axboe unsigned char crc = 0; 491e154bdbf14a1d352117aea057035235b66f0381Jens Axboe 501e154bdbf14a1d352117aea057035235b66f0381Jens Axboe while (len--) 511e154bdbf14a1d352117aea057035235b66f0381Jens Axboe crc = crc7_byte(crc, *buffer++); 521e154bdbf14a1d352117aea057035235b66f0381Jens Axboe return crc; 531e154bdbf14a1d352117aea057035235b66f0381Jens Axboe} 54