Improve LFSR implementation
[fio.git] / lib / lfsr.h
index 0de9ea8e3c09a10a4b411d69d9fb30b569733f76..bc16af966af4a350a25bd2119dc551b09cc6ed2e 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <inttypes.h>
 
-#define FIO_MAX_TAPS   8
+#define FIO_MAX_TAPS   6
 
 struct lfsr_taps {
        unsigned int length;
@@ -12,13 +12,18 @@ struct lfsr_taps {
 
 
 struct fio_lfsr {
+       uint64_t xormask;
        uint64_t last_val;
+       uint64_t cached_bit;
        uint64_t max_val;
        uint64_t num_vals;
-       struct lfsr_taps taps;
+       uint64_t cycle_length;
+       unsigned int spin;
 };
 
-int lfsr_next(struct fio_lfsr *fl, uint64_t *off);
-int lfsr_init(struct fio_lfsr *fl, uint64_t size);
+int lfsr_next(struct fio_lfsr *fl, uint64_t *off, uint64_t);
+int lfsr_init(struct fio_lfsr *fl, uint64_t size,
+               unsigned long seed, unsigned int spin);
+int lfsr_reset(struct fio_lfsr *fl, unsigned long seed);
 
 #endif