1bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe/* crc32c -- calculate and POSIX.2 checksum 2bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe Copyright (C) 92, 1995-1999 Free Software Foundation, Inc. 3bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe 4bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe This program is free software; you can redistribute it and/or modify 5bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe it under the terms of the GNU General Public License as published by 6bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe the Free Software Foundation; either version 2, or (at your option) 7bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe any later version. 8bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe 9bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe This program is distributed in the hope that it will be useful, 10bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe but WITHOUT ANY WARRANTY; without even the implied warranty of 11bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe GNU General Public License for more details. 13bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe 14bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe You should have received a copy of the GNU General Public License 15bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe along with this program; if not, write to the Free Software Foundation, 16bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 17bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe 18bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe#ifndef CRC32C_H 19bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe#define CRC32C_H 20bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe 21419484b934222e589f0b718e9494b045df176167Aaron Carroll#include "../arch/arch.h" 22419484b934222e589f0b718e9494b045df176167Aaron Carroll 23e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboeextern uint32_t crc32c_sw(unsigned char const *, unsigned long); 24e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboeextern int crc32c_intel_available; 25419484b934222e589f0b718e9494b045df176167Aaron Carroll 262f68124f26e54233db41b462a257dabc48e5c32bJens Axboe#ifdef ARCH_HAVE_SSE4_2 273845591fadea480177223e28c9d1c03642d34f0eJens Axboeextern uint32_t crc32c_intel(unsigned char const *, unsigned long); 28e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboeextern void crc32c_intel_probe(void); 29419484b934222e589f0b718e9494b045df176167Aaron Carroll#else 30e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboe#define crc32c_intel crc32c_sw 31e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboestatic inline void crc32c_intel_probe(void) 325d7c5d348d66794fd5e8aa3090f582358e6c5017Jens Axboe{ 335d7c5d348d66794fd5e8aa3090f582358e6c5017Jens Axboe} 34419484b934222e589f0b718e9494b045df176167Aaron Carroll#endif 35bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe 3625dfa848abbb6c35b4d45fabd5a8e82cb77fb285Jens Axboestatic inline uint32_t fio_crc32c(unsigned char const *buf, unsigned long len) 37e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboe{ 38e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboe if (crc32c_intel_available) 39e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboe return crc32c_intel(buf, len); 40e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboe 41e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboe return crc32c_sw(buf, len); 42e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboe} 43e3aaafc4e902a0f78b8ee4d4bc85f8edac6e09d2Jens Axboe 44bac39e0e8807a1d52863ad8304e67221df2bc63bJens Axboe#endif 45