Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/lib/crc/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  crc64-main.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * Normal 64-bit CRC calculation.
 *
 * This is a basic crc64 implementation following ECMA-182 specification,
 * which can be found from,
 * https://www.ecma-international.org/publications/standards/Ecma-182.htm
 *
 * Dr. Ross N. Williams has a great document to introduce the idea of CRC
 * algorithm, here the CRC64 code is also inspired by the table-driven
 * algorithm and detail example from this paper. This paper can be found
 * from,
 * http://www.ross.net/crc/download/crc_v3.txt
 *
 * crc64table[256] is the lookup table of a table-driven 64-bit CRC
 * calculation, which is generated by gen_crc64table.c in kernel build
 * time. The polynomial of crc64 arithmetic is from ECMA-182 specification
 * as well, which is defined as,
 *
 * x^64 + x^62 + x^57 + x^55 + x^54 + x^53 + x^52 + x^47 + x^46 + x^45 +
 * x^40 + x^39 + x^38 + x^37 + x^35 + x^33 + x^32 + x^31 + x^29 + x^27 +
 * x^24 + x^23 + x^22 + x^21 + x^19 + x^17 + x^13 + x^12 + x^10 + x^9 +
 * x^7 + x^4 + x + 1
 *
 * crc64nvmetable[256] uses the CRC64 polynomial from the NVME NVM Command Set
 * Specification and uses least-significant-bit first bit order:
 *
 * x^64 + x^63 + x^61 + x^59 + x^58 + x^56 + x^55 + x^52 + x^49 + x^48 + x^47 +
 * x^46 + x^44 + x^41 + x^37 + x^36 + x^34 + x^32 + x^31 + x^28 + x^26 + x^23 +
 * x^22 + x^19 + x^16 + x^13 + x^12 + x^10 + x^9 + x^6 + x^4 + x^3 + 1
 *
 * Copyright 2018 SUSE Linux.
 *   Author: Coly Li <colyli@suse.de>
 */


#include <linux/crc64.h>
#include <linux/export.h>
#include <linux/module.h>
#include <linux/types.h>

#include "crc64table.h"

static inline u64 __maybe_unused
crc64_be_generic(u64 crc, const u8 *p, size_t len)
{
 while (len--)
  crc = (crc << 8) ^ crc64table[(crc >> 56) ^ *p++];
 return crc;
}

static inline u64 __maybe_unused
crc64_nvme_generic(u64 crc, const u8 *p, size_t len)
{
 while (len--)
  crc = (crc >> 8) ^ crc64nvmetable[(crc & 0xff) ^ *p++];
 return crc;
}

#ifdef CONFIG_CRC64_ARCH
#include "crc64.h" /* $(SRCARCH)/crc64.h */
#else
#define crc64_be_arch crc64_be_generic
#define crc64_nvme_arch crc64_nvme_generic
#endif

u64 crc64_be(u64 crc, const void *p, size_t len)
{
 return crc64_be_arch(crc, p, len);
}
EXPORT_SYMBOL_GPL(crc64_be);

u64 crc64_nvme(u64 crc, const void *p, size_t len)
{
 return ~crc64_nvme_arch(~crc, p, len);
}
EXPORT_SYMBOL_GPL(crc64_nvme);

#ifdef crc64_mod_init_arch
static int __init crc64_mod_init(void)
{
 crc64_mod_init_arch();
 return 0;
}
subsys_initcall(crc64_mod_init);

static void __exit crc64_mod_exit(void)
{
}
module_exit(crc64_mod_exit);
#endif

MODULE_DESCRIPTION("CRC64 library functions");
MODULE_LICENSE("GPL");

Messung V0.5
C=92 H=96 G=93

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.