0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #ifndef __I915_SELFTESTS_RANDOM_H__
0026 #define __I915_SELFTESTS_RANDOM_H__
0027
0028 #include <linux/math64.h>
0029 #include <linux/random.h>
0030
0031 #include "../i915_selftest.h"
0032
0033 #define I915_RND_STATE_INITIALIZER(x) ({ \
0034 struct rnd_state state__; \
0035 prandom_seed_state(&state__, (x)); \
0036 state__; \
0037 })
0038
0039 #define I915_RND_STATE(name__) \
0040 struct rnd_state name__ = I915_RND_STATE_INITIALIZER(i915_selftest.random_seed)
0041
0042 #define I915_RND_SUBSTATE(name__, parent__) \
0043 struct rnd_state name__ = I915_RND_STATE_INITIALIZER(prandom_u32_state(&(parent__)))
0044
0045 u64 i915_prandom_u64_state(struct rnd_state *rnd);
0046
0047 static inline u32 i915_prandom_u32_max_state(u32 ep_ro, struct rnd_state *state)
0048 {
0049 return upper_32_bits(mul_u32_u32(prandom_u32_state(state), ep_ro));
0050 }
0051
0052 unsigned int *i915_random_order(unsigned int count,
0053 struct rnd_state *state);
0054 void i915_random_reorder(unsigned int *order,
0055 unsigned int count,
0056 struct rnd_state *state);
0057
0058 void i915_prandom_shuffle(void *arr, size_t elsz, size_t count,
0059 struct rnd_state *state);
0060
0061 u64 igt_random_offset(struct rnd_state *state,
0062 u64 start, u64 end,
0063 u64 len, u64 align);
0064
0065 #endif