Lines Matching +full:- +full:boot
1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
15 #define JENT_TEST_RINGBUFFER_MASK (JENT_TEST_RINGBUFFER_SIZE - 1)
31 * boot variable:
32 * 0 ==> No boot test, gathering of runtime data allowed
33 * 1 ==> Boot test enabled and ready for collecting data, gathering runtime
35 * 2 ==> Boot test completed and disabled, gathering of runtime data is
43 spin_lock_irqsave(&data->lock, flags); in jent_testing_reset()
44 data->rb_reader = 0; in jent_testing_reset()
45 atomic_set(&data->rb_writer, 0); in jent_testing_reset()
46 spin_unlock_irqrestore(&data->lock, flags); in jent_testing_reset()
49 static void jent_testing_data_init(struct jent_testing *data, u32 boot) in jent_testing_data_init() argument
52 * The boot time testing implies we have a running test. If the in jent_testing_data_init()
56 if (boot) in jent_testing_data_init()
60 atomic_set(&data->jent_testing_enabled, 1); in jent_testing_data_init()
64 static void jent_testing_fini(struct jent_testing *data, u32 boot) in jent_testing_fini() argument
66 /* If we have boot data, we do not reset yet to allow data to be read */ in jent_testing_fini()
67 if (boot) in jent_testing_fini()
70 atomic_set(&data->jent_testing_enabled, 0); in jent_testing_fini()
76 u32 *boot) in jent_testing_store() argument
80 if (!atomic_read(&data->jent_testing_enabled) && (*boot != 1)) in jent_testing_store()
83 spin_lock_irqsave(&data->lock, flags); in jent_testing_store()
86 * Disable entropy testing for boot time testing after ring buffer in jent_testing_store()
89 if (*boot) { in jent_testing_store()
90 if (((u32)atomic_read(&data->rb_writer)) > in jent_testing_store()
92 *boot = 2; in jent_testing_store()
94 spin_unlock_irqrestore(&data->lock, flags); in jent_testing_store()
98 if (atomic_read(&data->rb_writer) == 1) in jent_testing_store()
102 data->jent_testing_rb[((u32)atomic_read(&data->rb_writer)) & in jent_testing_store()
104 atomic_inc(&data->rb_writer); in jent_testing_store()
106 spin_unlock_irqrestore(&data->lock, flags); in jent_testing_store()
108 if (wq_has_sleeper(&data->read_wait)) in jent_testing_store()
109 wake_up_interruptible(&data->read_wait); in jent_testing_store()
116 return ((((u32)atomic_read(&data->rb_writer)) & in jent_testing_have_data()
118 (data->rb_reader & JENT_TEST_RINGBUFFER_MASK)); in jent_testing_have_data()
121 static int jent_testing_reader(struct jent_testing *data, u32 *boot, in jent_testing_reader() argument
127 jent_testing_data_init(data, *boot); in jent_testing_reader()
130 u32 writer = (u32)atomic_read(&data->rb_writer); in jent_testing_reader()
132 spin_lock_irqsave(&data->lock, flags); in jent_testing_reader()
135 if (!writer || (writer == data->rb_reader)) { in jent_testing_reader()
137 spin_unlock_irqrestore(&data->lock, flags); in jent_testing_reader()
140 * Now we gathered all boot data, enable regular data in jent_testing_reader()
143 if (*boot) { in jent_testing_reader()
144 *boot = 0; in jent_testing_reader()
148 wait_event_interruptible(data->read_wait, in jent_testing_reader()
151 collected_data = -ERESTARTSYS; in jent_testing_reader()
158 /* We copy out word-wise */ in jent_testing_reader()
160 spin_unlock_irqrestore(&data->lock, flags); in jent_testing_reader()
164 memcpy(outbuf, &data->jent_testing_rb[data->rb_reader], in jent_testing_reader()
166 data->rb_reader++; in jent_testing_reader()
168 spin_unlock_irqrestore(&data->lock, flags); in jent_testing_reader()
171 outbuflen -= sizeof(u64); in jent_testing_reader()
176 jent_testing_fini(data, *boot); in jent_testing_reader()
192 * 1000 samples due to the SP800-90B requirements. However, due to in jent_testing_extract_user()
200 return -ENOMEM; in jent_testing_extract_user()
210 ret = -ERESTARTSYS; in jent_testing_extract_user()
224 ret = -EFAULT; in jent_testing_extract_user()
228 nbytes -= i; in jent_testing_extract_user()
241 /************** Raw High-Resolution Timer Entropy Data Handling **************/
246 …"Enable gathering boot time high resolution timer entropy of the first Jitter RNG entropy events");