Path: blob/main/sys/contrib/ncsw/Peripherals/FM/Pcd/crc64.h
48524 views
/*1* Copyright 2008-2012 Freescale Semiconductor Inc.2*3* Redistribution and use in source and binary forms, with or without4* modification, are permitted provided that the following conditions are met:5* * Redistributions of source code must retain the above copyright6* notice, this list of conditions and the following disclaimer.7* * Redistributions in binary form must reproduce the above copyright8* notice, this list of conditions and the following disclaimer in the9* documentation and/or other materials provided with the distribution.10* * Neither the name of Freescale Semiconductor nor the11* names of its contributors may be used to endorse or promote products12* derived from this software without specific prior written permission.13*14*15* ALTERNATIVELY, this software may be distributed under the terms of the16* GNU General Public License ("GPL") as published by the Free Software17* Foundation, either version 2 of that License or (at your option) any18* later version.19*20* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY21* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED22* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE23* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY24* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES25* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;26* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND27* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT28* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS29* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.30*/313233/**************************************************************************//**34@File crc64.h3536@Description brief This file contains the CRC64 Table, and __inline__37functions used for calculating crc.38*//***************************************************************************/39#ifndef __CRC64_H40#define __CRC64_H4142#include "std_ext.h"434445#define BITS_PER_BYTE 84647#define CRC64_EXPON_ECMA_182 0xC96C5795D7870F42ULL48#define CRC64_DEFAULT_INITVAL 0xFFFFFFFFFFFFFFFFULL4950#define CRC64_BYTE_MASK 0xFF51#define CRC64_TABLE_ENTRIES ( 1 << BITS_PER_BYTE )52#define CRC64_ODD_MASK 1535455/**56\brief '64 bit crc' Table57*/58struct crc64_t {59uint64_t initial; /**< Initial seed */60uint64_t table[CRC64_TABLE_ENTRIES]; /**< CRC table entries */61};626364static struct crc64_t CRC64_ECMA_182 = {65CRC64_DEFAULT_INITVAL,66{670x0000000000000000ULL,680xb32e4cbe03a75f6fULL,690xf4843657a840a05bULL,700x47aa7ae9abe7ff34ULL,710x7bd0c384ff8f5e33ULL,720xc8fe8f3afc28015cULL,730x8f54f5d357cffe68ULL,740x3c7ab96d5468a107ULL,750xf7a18709ff1ebc66ULL,760x448fcbb7fcb9e309ULL,770x0325b15e575e1c3dULL,780xb00bfde054f94352ULL,790x8c71448d0091e255ULL,800x3f5f08330336bd3aULL,810x78f572daa8d1420eULL,820xcbdb3e64ab761d61ULL,830x7d9ba13851336649ULL,840xceb5ed8652943926ULL,850x891f976ff973c612ULL,860x3a31dbd1fad4997dULL,870x064b62bcaebc387aULL,880xb5652e02ad1b6715ULL,890xf2cf54eb06fc9821ULL,900x41e11855055bc74eULL,910x8a3a2631ae2dda2fULL,920x39146a8fad8a8540ULL,930x7ebe1066066d7a74ULL,940xcd905cd805ca251bULL,950xf1eae5b551a2841cULL,960x42c4a90b5205db73ULL,970x056ed3e2f9e22447ULL,980xb6409f5cfa457b28ULL,990xfb374270a266cc92ULL,1000x48190ecea1c193fdULL,1010x0fb374270a266cc9ULL,1020xbc9d3899098133a6ULL,1030x80e781f45de992a1ULL,1040x33c9cd4a5e4ecdceULL,1050x7463b7a3f5a932faULL,1060xc74dfb1df60e6d95ULL,1070x0c96c5795d7870f4ULL,1080xbfb889c75edf2f9bULL,1090xf812f32ef538d0afULL,1100x4b3cbf90f69f8fc0ULL,1110x774606fda2f72ec7ULL,1120xc4684a43a15071a8ULL,1130x83c230aa0ab78e9cULL,1140x30ec7c140910d1f3ULL,1150x86ace348f355aadbULL,1160x3582aff6f0f2f5b4ULL,1170x7228d51f5b150a80ULL,1180xc10699a158b255efULL,1190xfd7c20cc0cdaf4e8ULL,1200x4e526c720f7dab87ULL,1210x09f8169ba49a54b3ULL,1220xbad65a25a73d0bdcULL,1230x710d64410c4b16bdULL,1240xc22328ff0fec49d2ULL,1250x85895216a40bb6e6ULL,1260x36a71ea8a7ace989ULL,1270x0adda7c5f3c4488eULL,1280xb9f3eb7bf06317e1ULL,1290xfe5991925b84e8d5ULL,1300x4d77dd2c5823b7baULL,1310x64b62bcaebc387a1ULL,1320xd7986774e864d8ceULL,1330x90321d9d438327faULL,1340x231c512340247895ULL,1350x1f66e84e144cd992ULL,1360xac48a4f017eb86fdULL,1370xebe2de19bc0c79c9ULL,1380x58cc92a7bfab26a6ULL,1390x9317acc314dd3bc7ULL,1400x2039e07d177a64a8ULL,1410x67939a94bc9d9b9cULL,1420xd4bdd62abf3ac4f3ULL,1430xe8c76f47eb5265f4ULL,1440x5be923f9e8f53a9bULL,1450x1c4359104312c5afULL,1460xaf6d15ae40b59ac0ULL,1470x192d8af2baf0e1e8ULL,1480xaa03c64cb957be87ULL,1490xeda9bca512b041b3ULL,1500x5e87f01b11171edcULL,1510x62fd4976457fbfdbULL,1520xd1d305c846d8e0b4ULL,1530x96797f21ed3f1f80ULL,1540x2557339fee9840efULL,1550xee8c0dfb45ee5d8eULL,1560x5da24145464902e1ULL,1570x1a083bacedaefdd5ULL,1580xa9267712ee09a2baULL,1590x955cce7fba6103bdULL,1600x267282c1b9c65cd2ULL,1610x61d8f8281221a3e6ULL,1620xd2f6b4961186fc89ULL,1630x9f8169ba49a54b33ULL,1640x2caf25044a02145cULL,1650x6b055fede1e5eb68ULL,1660xd82b1353e242b407ULL,1670xe451aa3eb62a1500ULL,1680x577fe680b58d4a6fULL,1690x10d59c691e6ab55bULL,1700xa3fbd0d71dcdea34ULL,1710x6820eeb3b6bbf755ULL,1720xdb0ea20db51ca83aULL,1730x9ca4d8e41efb570eULL,1740x2f8a945a1d5c0861ULL,1750x13f02d374934a966ULL,1760xa0de61894a93f609ULL,1770xe7741b60e174093dULL,1780x545a57dee2d35652ULL,1790xe21ac88218962d7aULL,1800x5134843c1b317215ULL,1810x169efed5b0d68d21ULL,1820xa5b0b26bb371d24eULL,1830x99ca0b06e7197349ULL,1840x2ae447b8e4be2c26ULL,1850x6d4e3d514f59d312ULL,1860xde6071ef4cfe8c7dULL,1870x15bb4f8be788911cULL,1880xa6950335e42fce73ULL,1890xe13f79dc4fc83147ULL,1900x521135624c6f6e28ULL,1910x6e6b8c0f1807cf2fULL,1920xdd45c0b11ba09040ULL,1930x9aefba58b0476f74ULL,1940x29c1f6e6b3e0301bULL,1950xc96c5795d7870f42ULL,1960x7a421b2bd420502dULL,1970x3de861c27fc7af19ULL,1980x8ec62d7c7c60f076ULL,1990xb2bc941128085171ULL,2000x0192d8af2baf0e1eULL,2010x4638a2468048f12aULL,2020xf516eef883efae45ULL,2030x3ecdd09c2899b324ULL,2040x8de39c222b3eec4bULL,2050xca49e6cb80d9137fULL,2060x7967aa75837e4c10ULL,2070x451d1318d716ed17ULL,2080xf6335fa6d4b1b278ULL,2090xb199254f7f564d4cULL,2100x02b769f17cf11223ULL,2110xb4f7f6ad86b4690bULL,2120x07d9ba1385133664ULL,2130x4073c0fa2ef4c950ULL,2140xf35d8c442d53963fULL,2150xcf273529793b3738ULL,2160x7c0979977a9c6857ULL,2170x3ba3037ed17b9763ULL,2180x888d4fc0d2dcc80cULL,2190x435671a479aad56dULL,2200xf0783d1a7a0d8a02ULL,2210xb7d247f3d1ea7536ULL,2220x04fc0b4dd24d2a59ULL,2230x3886b22086258b5eULL,2240x8ba8fe9e8582d431ULL,2250xcc0284772e652b05ULL,2260x7f2cc8c92dc2746aULL,2270x325b15e575e1c3d0ULL,2280x8175595b76469cbfULL,2290xc6df23b2dda1638bULL,2300x75f16f0cde063ce4ULL,2310x498bd6618a6e9de3ULL,2320xfaa59adf89c9c28cULL,2330xbd0fe036222e3db8ULL,2340x0e21ac88218962d7ULL,2350xc5fa92ec8aff7fb6ULL,2360x76d4de52895820d9ULL,2370x317ea4bb22bfdfedULL,2380x8250e80521188082ULL,2390xbe2a516875702185ULL,2400x0d041dd676d77eeaULL,2410x4aae673fdd3081deULL,2420xf9802b81de97deb1ULL,2430x4fc0b4dd24d2a599ULL,2440xfceef8632775faf6ULL,2450xbb44828a8c9205c2ULL,2460x086ace348f355aadULL,2470x34107759db5dfbaaULL,2480x873e3be7d8faa4c5ULL,2490xc094410e731d5bf1ULL,2500x73ba0db070ba049eULL,2510xb86133d4dbcc19ffULL,2520x0b4f7f6ad86b4690ULL,2530x4ce50583738cb9a4ULL,2540xffcb493d702be6cbULL,2550xc3b1f050244347ccULL,2560x709fbcee27e418a3ULL,2570x3735c6078c03e797ULL,2580x841b8ab98fa4b8f8ULL,2590xadda7c5f3c4488e3ULL,2600x1ef430e13fe3d78cULL,2610x595e4a08940428b8ULL,2620xea7006b697a377d7ULL,2630xd60abfdbc3cbd6d0ULL,2640x6524f365c06c89bfULL,2650x228e898c6b8b768bULL,2660x91a0c532682c29e4ULL,2670x5a7bfb56c35a3485ULL,2680xe955b7e8c0fd6beaULL,2690xaeffcd016b1a94deULL,2700x1dd181bf68bdcbb1ULL,2710x21ab38d23cd56ab6ULL,2720x9285746c3f7235d9ULL,2730xd52f0e859495caedULL,2740x6601423b97329582ULL,2750xd041dd676d77eeaaULL,2760x636f91d96ed0b1c5ULL,2770x24c5eb30c5374ef1ULL,2780x97eba78ec690119eULL,2790xab911ee392f8b099ULL,2800x18bf525d915feff6ULL,2810x5f1528b43ab810c2ULL,2820xec3b640a391f4fadULL,2830x27e05a6e926952ccULL,2840x94ce16d091ce0da3ULL,2850xd3646c393a29f297ULL,2860x604a2087398eadf8ULL,2870x5c3099ea6de60cffULL,2880xef1ed5546e415390ULL,2890xa8b4afbdc5a6aca4ULL,2900x1b9ae303c601f3cbULL,2910x56ed3e2f9e224471ULL,2920xe5c372919d851b1eULL,2930xa26908783662e42aULL,2940x114744c635c5bb45ULL,2950x2d3dfdab61ad1a42ULL,2960x9e13b115620a452dULL,2970xd9b9cbfcc9edba19ULL,2980x6a978742ca4ae576ULL,2990xa14cb926613cf817ULL,3000x1262f598629ba778ULL,3010x55c88f71c97c584cULL,3020xe6e6c3cfcadb0723ULL,3030xda9c7aa29eb3a624ULL,3040x69b2361c9d14f94bULL,3050x2e184cf536f3067fULL,3060x9d36004b35545910ULL,3070x2b769f17cf112238ULL,3080x9858d3a9ccb67d57ULL,3090xdff2a94067518263ULL,3100x6cdce5fe64f6dd0cULL,3110x50a65c93309e7c0bULL,3120xe388102d33392364ULL,3130xa4226ac498dedc50ULL,3140x170c267a9b79833fULL,3150xdcd7181e300f9e5eULL,3160x6ff954a033a8c131ULL,3170x28532e49984f3e05ULL,3180x9b7d62f79be8616aULL,3190xa707db9acf80c06dULL,3200x14299724cc279f02ULL,3210x5383edcd67c06036ULL,3220xe0ada17364673f59ULL323}324};325326327/**328\brief Initializes the crc seed329*/330static __inline__ uint64_t crc64_init(void)331{332return CRC64_ECMA_182.initial;333}334335/**336\brief Computes 64 bit the crc337\param[in] data Pointer to the Data in the frame338\param[in] len Length of the Data339\param[in] crc seed340\return calculated crc341*/342static __inline__ uint64_t crc64_compute(void const *data,343uint32_t len,344uint64_t seed)345{346uint32_t i;347uint64_t crc = seed;348uint8_t *bdata = (uint8_t *) data;349350for (i = 0; i < len; i++)351crc =352CRC64_ECMA_182.353table[(crc ^ *bdata++) & CRC64_BYTE_MASK] ^ (crc >> 8);354355return crc;356}357358359#endif /* __CRC64_H */360361362