Lines Matching refs:dca

46 int dca_random_buffer(dca_t *dca, caddr_t buf, int len);
51 dca_rng(dca_t *dca, uchar_t *buf, size_t len, crypto_req_handle_t req) in dca_rng() argument
57 if ((reqp = dca_getreq(dca, MCR2, 1)) == NULL) { in dca_rng()
58 dca_error(dca, "unable to allocate request for RNG"); in dca_rng()
73 rv = dca_rngstart(dca, reqp); in dca_rng()
84 dca_rngstart(dca_t *dca, dca_request_t *reqp) in dca_rngstart() argument
91 if (dca->dca_flags & DCA_RNGSHA1) { in dca_rngstart()
106 dca_sgcheck(dca, reqp->dr_out, DCA_SG_WALIGN)) { in dca_rngstart()
143 return (dca_start(dca, reqp, MCR2, 1)); in dca_rngstart()
212 dca_random_init(dca_t *dca) in dca_random_init() argument
215 mutex_init(&dca->dca_random_lock, NULL, MUTEX_DRIVER, NULL); in dca_random_init()
217 if ((dca->dca_buf1 = kmem_alloc(RANDOM_BUFFER_SIZE, KM_SLEEP)) == in dca_random_init()
219 mutex_destroy(&dca->dca_random_lock); in dca_random_init()
223 if ((dca->dca_buf2 = kmem_alloc(RANDOM_BUFFER_SIZE, KM_SLEEP)) == in dca_random_init()
225 mutex_destroy(&dca->dca_random_lock); in dca_random_init()
226 kmem_free(dca->dca_buf1, RANDOM_BUFFER_SIZE); in dca_random_init()
234 dca_random_fini(dca_t *dca) in dca_random_fini() argument
236 kmem_free(dca->dca_buf1, RANDOM_BUFFER_SIZE); in dca_random_fini()
237 kmem_free(dca->dca_buf2, RANDOM_BUFFER_SIZE); in dca_random_fini()
238 dca->dca_buf1 = dca->dca_buf2 = dca->dca_buf_ptr = NULL; in dca_random_fini()
239 (void) mutex_destroy(&dca->dca_random_lock); in dca_random_fini()
243 dca_random_buffer(dca_t *dca, caddr_t buf, int len) in dca_random_buffer() argument
249 mutex_enter(&dca->dca_random_lock); in dca_random_buffer()
251 if (dca->dca_buf_ptr == NULL) { in dca_random_buffer()
252 if (dca->dca_buf1 == NULL || dca->dca_buf2 == NULL) { in dca_random_buffer()
253 mutex_exit(&dca->dca_random_lock); in dca_random_buffer()
258 if (dca_rng(dca, (uchar_t *)dca->dca_buf1, RANDOM_BUFFER_SIZE, in dca_random_buffer()
260 mutex_exit(&dca->dca_random_lock); in dca_random_buffer()
264 atomic_or_32(&dca->dca_random_filling, 0x1); in dca_random_buffer()
267 dca->dca_buf_ptr = dca->dca_buf2; in dca_random_buffer()
268 dca->dca_index = RANDOM_BUFFER_SIZE; in dca_random_buffer()
273 if (dca->dca_index >= RANDOM_BUFFER_SIZE) { in dca_random_buffer()
275 while (dca->dca_random_filling) { in dca_random_buffer()
283 mutex_exit(&dca->dca_random_lock); in dca_random_buffer()
288 if (dca->dca_buf_ptr == dca->dca_buf1) { in dca_random_buffer()
289 dca->dca_buf_ptr = dca->dca_buf2; in dca_random_buffer()
290 fill_buf = dca->dca_buf1; in dca_random_buffer()
292 dca->dca_buf_ptr = dca->dca_buf1; in dca_random_buffer()
293 fill_buf = dca->dca_buf2; in dca_random_buffer()
296 atomic_or_32(&dca->dca_random_filling, 0x1); in dca_random_buffer()
297 dca->dca_index = 0; in dca_random_buffer()
299 if ((rv = dca_rng(dca, (uchar_t *)fill_buf, in dca_random_buffer()
301 mutex_exit(&dca->dca_random_lock); in dca_random_buffer()
306 if (dca->dca_buf_ptr[dca->dca_index] != '\0') in dca_random_buffer()
307 buf[i++] = dca->dca_buf_ptr[dca->dca_index]; in dca_random_buffer()
309 dca->dca_index++; in dca_random_buffer()
312 mutex_exit(&dca->dca_random_lock); in dca_random_buffer()
319 dca_random_done(dca_t *dca) in dca_random_done() argument
322 atomic_and_32(&dca->dca_random_filling, 0x0); in dca_random_done()