/* see: Documentation/crc32.txt for a description of algorithms */
 
 #include <linux/crc32.h>
-#include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/compiler.h>
 #include <linux/types.h>
-#include <linux/init.h>
-#include <linux/atomic.h>
 #include "crc32defs.h"
+
 #if CRC_LE_BITS == 8
 # define tole(x) __constant_cpu_to_le32(x)
 #else
 #else
 # define tobe(x) (x)
 #endif
+
 #include "crc32table.h"
 
 MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
 #undef DO_CRC4
 }
 #endif
+
 /**
  * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
  * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
  * @p: pointer to buffer over which CRC is run
  * @len: length of buffer @p
  */
-u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len);
-
-#if CRC_LE_BITS == 1
-/*
- * In fact, the table-based code will work in this case, but it can be
- * simplified by inlining the table in ?: form.
- */
-
 u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
 {
+#if CRC_LE_BITS == 1
        int i;
        while (len--) {
                crc ^= *p++;
                for (i = 0; i < 8; i++)
                        crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
        }
-       return crc;
-}
-#else                          /* Table-based approach */
-
-u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
-{
-# if CRC_LE_BITS == 8
-       const u32      (*tab)[] = crc32table_le;
-
-       crc = __cpu_to_le32(crc);
-       crc = crc32_body(crc, p, len, tab);
-       return __le32_to_cpu(crc);
-# elif CRC_LE_BITS == 4
+# elif CRC_LE_BITS == 2
        while (len--) {
                crc ^= *p++;
-               crc = (crc >> 4) ^ crc32table_le[crc & 15];
-               crc = (crc >> 4) ^ crc32table_le[crc & 15];
+               crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
+               crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
+               crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
+               crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
        }
-       return crc;
-# elif CRC_LE_BITS == 2
+# elif CRC_LE_BITS == 4
        while (len--) {
                crc ^= *p++;
-               crc = (crc >> 2) ^ crc32table_le[crc & 3];
-               crc = (crc >> 2) ^ crc32table_le[crc & 3];
-               crc = (crc >> 2) ^ crc32table_le[crc & 3];
-               crc = (crc >> 2) ^ crc32table_le[crc & 3];
+               crc = (crc >> 4) ^ crc32table_le[0][crc & 15];
+               crc = (crc >> 4) ^ crc32table_le[0][crc & 15];
        }
+# elif CRC_LE_BITS == 8
+       const u32      (*tab)[] = crc32table_le;
+
+       crc = __cpu_to_le32(crc);
+       crc = crc32_body(crc, p, len, tab);
+       crc = __le32_to_cpu(crc);
+#endif
        return crc;
-# endif
 }
-#endif
+EXPORT_SYMBOL(crc32_le);
 
 /**
  * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
  * @p: pointer to buffer over which CRC is run
  * @len: length of buffer @p
  */
-u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len);
-
-#if CRC_BE_BITS == 1
-/*
- * In fact, the table-based code will work in this case, but it can be
- * simplified by inlining the table in ?: form.
- */
-
 u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
 {
+#if CRC_BE_BITS == 1
        int i;
        while (len--) {
                crc ^= *p++ << 24;
                            (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE :
                                          0);
        }
-       return crc;
-}
-
-#else                          /* Table-based approach */
-u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
-{
-# if CRC_BE_BITS == 8
-       const u32      (*tab)[] = crc32table_be;
-
-       crc = __cpu_to_be32(crc);
-       crc = crc32_body(crc, p, len, tab);
-       return __be32_to_cpu(crc);
-# elif CRC_BE_BITS == 4
+# elif CRC_BE_BITS == 2
        while (len--) {
                crc ^= *p++ << 24;
-               crc = (crc << 4) ^ crc32table_be[crc >> 28];
-               crc = (crc << 4) ^ crc32table_be[crc >> 28];
+               crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
+               crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
+               crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
+               crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
        }
-       return crc;
-# elif CRC_BE_BITS == 2
+# elif CRC_BE_BITS == 4
        while (len--) {
                crc ^= *p++ << 24;
-               crc = (crc << 2) ^ crc32table_be[crc >> 30];
-               crc = (crc << 2) ^ crc32table_be[crc >> 30];
-               crc = (crc << 2) ^ crc32table_be[crc >> 30];
-               crc = (crc << 2) ^ crc32table_be[crc >> 30];
+               crc = (crc << 4) ^ crc32table_be[0][crc >> 28];
+               crc = (crc << 4) ^ crc32table_be[0][crc >> 28];
        }
-       return crc;
+# elif CRC_BE_BITS == 8
+       const u32      (*tab)[] = crc32table_be;
+
+       crc = __cpu_to_be32(crc);
+       crc = crc32_body(crc, p, len, tab);
+       crc = __be32_to_cpu(crc);
 # endif
+       return crc;
 }
-#endif
-
-EXPORT_SYMBOL(crc32_le);
 EXPORT_SYMBOL(crc32_be);
 
 #ifdef CONFIG_CRC32_SELFTEST