summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/checksum/power8/crc32_wrapper.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/checksum/power8/crc32_wrapper.c')
-rw-r--r--src/third_party/wiredtiger/src/checksum/power8/crc32_wrapper.c36
1 files changed, 31 insertions, 5 deletions
diff --git a/src/third_party/wiredtiger/src/checksum/power8/crc32_wrapper.c b/src/third_party/wiredtiger/src/checksum/power8/crc32_wrapper.c
index 62bd3e64f5c..ddfa2bdaeb8 100644
--- a/src/third_party/wiredtiger/src/checksum/power8/crc32_wrapper.c
+++ b/src/third_party/wiredtiger/src/checksum/power8/crc32_wrapper.c
@@ -6,7 +6,7 @@
#define VMX_ALIGN_MASK (VMX_ALIGN-1)
#ifdef REFLECT
-static unsigned int crc32_align(unsigned int crc, unsigned char *p,
+static unsigned int crc32_align(unsigned int crc, const unsigned char *p,
unsigned long len)
{
while (len--)
@@ -14,7 +14,7 @@ static unsigned int crc32_align(unsigned int crc, unsigned char *p,
return crc;
}
#else
-static unsigned int crc32_align(unsigned int crc, unsigned char *p,
+static unsigned int crc32_align(unsigned int crc, const unsigned char *p,
unsigned long len)
{
while (len--)
@@ -23,13 +23,13 @@ static unsigned int crc32_align(unsigned int crc, unsigned char *p,
}
#endif
-unsigned int __crc32_vpmsum(unsigned int crc, unsigned char *p,
+unsigned int __crc32_vpmsum(unsigned int crc, const unsigned char *p,
unsigned long len);
/* -Werror=missing-prototypes */
-unsigned int crc32_vpmsum(unsigned int crc, unsigned char *p,
+unsigned int crc32_vpmsum(unsigned int crc, const unsigned char *p,
unsigned long len);
-unsigned int crc32_vpmsum(unsigned int crc, unsigned char *p,
+unsigned int crc32_vpmsum(unsigned int crc, const unsigned char *p,
unsigned long len)
{
unsigned int prealign;
@@ -67,3 +67,29 @@ out:
return crc;
}
#endif
+
+#include "wt_internal.h"
+
+/*
+ * __wt_checksum_hw --
+ * WiredTiger: return a checksum for a chunk of memory.
+ */
+static uint32_t
+__wt_checksum_hw(const void *chunk, size_t len)
+{
+ return (crc32_vpmsum(0, chunk, len));
+}
+
+/*
+ * __wt_checksum_init --
+ * WiredTiger: detect CRC hardware and set the checksum function.
+ */
+void
+__wt_checksum_init(void)
+{
+#if defined(HAVE_CRC32_HARDWARE)
+ __wt_process.checksum = __wt_checksum_hw;
+#else
+ __wt_process.checksum = __wt_checksum_sw;
+#endif
+}