Merge remote-tracking branch 'regulator/fix/core' into regulator-linus
[pandora-kernel.git] / include / linux / hash.h
index f09a0ae..bd1754c 100644 (file)
@@ -15,6 +15,7 @@
  */
 
 #include <asm/types.h>
+#include <asm/hash.h>
 #include <linux/compiler.h>
 
 /* 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 */
@@ -78,4 +79,39 @@ static inline u32 hash32_ptr(const void *ptr)
 #endif
        return (u32)val;
 }
+
+struct fast_hash_ops {
+       u32 (*hash)(const void *data, u32 len, u32 seed);
+       u32 (*hash2)(const u32 *data, u32 len, u32 seed);
+};
+
+/**
+ *     arch_fast_hash - Caclulates a hash over a given buffer that can have
+ *                      arbitrary size. This function will eventually use an
+ *                      architecture-optimized hashing implementation if
+ *                      available, and trades off distribution for speed.
+ *
+ *     @data: buffer to hash
+ *     @len: length of buffer in bytes
+ *     @seed: start seed
+ *
+ *     Returns 32bit hash.
+ */
+extern u32 arch_fast_hash(const void *data, u32 len, u32 seed);
+
+/**
+ *     arch_fast_hash2 - Caclulates a hash over a given buffer that has a
+ *                       size that is of a multiple of 32bit words. This
+ *                       function will eventually use an architecture-
+ *                       optimized hashing implementation if available,
+ *                       and trades off distribution for speed.
+ *
+ *     @data: buffer to hash (must be 32bit padded)
+ *     @len: number of 32bit words
+ *     @seed: start seed
+ *
+ *     Returns 32bit hash.
+ */
+extern u32 arch_fast_hash2(const u32 *data, u32 len, u32 seed);
+
 #endif /* _LINUX_HASH_H */