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