Lines Matching defs:lfsr
9 /* $Id: lfsr.c,v 1.20 2007/06/19 23:47:17 tbox Exp $ */
19 #include <isc/lfsr.h>
25 isc_lfsr_init(isc_lfsr_t *lfsr, isc_uint32_t state, unsigned int bits,
29 REQUIRE(VALID_LFSR(lfsr));
33 lfsr->state = state;
34 lfsr->bits = bits;
35 lfsr->tap = tap;
36 lfsr->count = count;
37 lfsr->reseed = reseed;
38 lfsr->arg = arg;
41 reseed(lfsr, arg);
42 if (lfsr->state == 0)
43 lfsr->state = 0xffffffffU >> (32 - lfsr->bits);
47 * Return the next state of the lfsr.
50 lfsr_generate(isc_lfsr_t *lfsr)
60 if (lfsr->state == 0) {
61 if (lfsr->reseed != NULL)
62 lfsr->reseed(lfsr, lfsr->arg);
63 if (lfsr->state == 0)
64 lfsr->state = 0xffffffffU >> (32 - lfsr->bits);
67 if (lfsr->state & 0x01) {
68 lfsr->state = (lfsr->state >> 1) ^ lfsr->tap;
71 lfsr->state >>= 1;
77 isc_lfsr_generate(isc_lfsr_t *lfsr, void *data, unsigned int count)
83 REQUIRE(VALID_LFSR(lfsr));
93 *p |= lfsr_generate(lfsr);
96 *p |= lfsr_generate(lfsr);
100 if (lfsr->count != 0 && lfsr->reseed != NULL) {
101 if (lfsr->count <= count * 8)
102 lfsr->reseed(lfsr, lfsr->arg);
104 lfsr->count -= (count * 8);
109 lfsr_skipgenerate(isc_lfsr_t *lfsr, unsigned int skip)
112 (void)lfsr_generate(lfsr);
114 (void)lfsr_generate(lfsr);
116 return (lfsr->state);
120 * Skip "skip" states in "lfsr".
123 isc_lfsr_skip(isc_lfsr_t *lfsr, unsigned int skip)
125 REQUIRE(VALID_LFSR(lfsr));
128 (void)lfsr_generate(lfsr);