Blame view
lib/gen_crc64table.c
1.43 KB
d7d243b52 SMARC-iMX8MQ Linu... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
// SPDX-License-Identifier: GPL-2.0 /* * Generate lookup table for the table-driven CRC64 calculation. * * gen_crc64table is executed in kernel build time and generates * lib/crc64table.h. This header is included by lib/crc64.c for * the table-driven CRC64 calculation. * * See lib/crc64.c for more information about which specification * and polynomial arithmetic that gen_crc64table.c follows to * generate the lookup table. * * Copyright 2018 SUSE Linux. * Author: Coly Li <colyli@suse.de> */ #include <inttypes.h> #include <stdio.h> #define CRC64_ECMA182_POLY 0x42F0E1EBA9EA3693ULL static uint64_t crc64_table[256] = {0}; static void generate_crc64_table(void) { uint64_t i, j, c, crc; for (i = 0; i < 256; i++) { crc = 0; c = i << 56; for (j = 0; j < 8; j++) { if ((crc ^ c) & 0x8000000000000000ULL) crc = (crc << 1) ^ CRC64_ECMA182_POLY; else crc <<= 1; c <<= 1; } crc64_table[i] = crc; } } static void print_crc64_table(void) { int i; printf("/* this file is generated - do not edit */ "); printf("#include <linux/types.h> "); printf("#include <linux/cache.h> "); printf("static const u64 ____cacheline_aligned crc64table[256] = { "); for (i = 0; i < 256; i++) { printf("\t0x%016" PRIx64 "ULL", crc64_table[i]); if (i & 0x1) printf(", "); else printf(", "); } printf("}; "); } int main(int argc, char *argv[]) { generate_crc64_table(); print_crc64_table(); return 0; } |