Lines Matching refs:vcrypto

32 	struct virtio_crypto *vcrypto = vq->vdev->priv;  in virtcrypto_ctrlq_callback()  local
37 spin_lock_irqsave(&vcrypto->ctrl_lock, flags); in virtcrypto_ctrlq_callback()
41 spin_unlock_irqrestore(&vcrypto->ctrl_lock, flags); in virtcrypto_ctrlq_callback()
43 spin_lock_irqsave(&vcrypto->ctrl_lock, flags); in virtcrypto_ctrlq_callback()
46 spin_unlock_irqrestore(&vcrypto->ctrl_lock, flags); in virtcrypto_ctrlq_callback()
49 int virtio_crypto_ctrl_vq_request(struct virtio_crypto *vcrypto, struct scatterlist *sgs[], in virtio_crypto_ctrl_vq_request() argument
58 spin_lock_irqsave(&vcrypto->ctrl_lock, flags); in virtio_crypto_ctrl_vq_request()
59 err = virtqueue_add_sgs(vcrypto->ctrl_vq, sgs, out_sgs, in_sgs, vc_ctrl_req, GFP_ATOMIC); in virtio_crypto_ctrl_vq_request()
61 spin_unlock_irqrestore(&vcrypto->ctrl_lock, flags); in virtio_crypto_ctrl_vq_request()
65 virtqueue_kick(vcrypto->ctrl_vq); in virtio_crypto_ctrl_vq_request()
66 spin_unlock_irqrestore(&vcrypto->ctrl_lock, flags); in virtio_crypto_ctrl_vq_request()
96 struct virtio_crypto *vcrypto = vq->vdev->priv; in virtcrypto_dataq_callback() local
97 struct data_queue *dq = &vcrypto->data_vq[vq->index]; in virtcrypto_dataq_callback()
192 static void virtcrypto_set_affinity(struct virtio_crypto *vcrypto) in virtcrypto_set_affinity() argument
200 if (vcrypto->curr_queue == 1 || vcrypto->max_data_queues == 1) { in virtcrypto_set_affinity()
201 virtcrypto_clean_affinity(vcrypto, -1); in virtcrypto_set_affinity()
213 virtqueue_set_affinity(vcrypto->data_vq[i].vq, cpumask_of(cpu)); in virtcrypto_set_affinity()
214 if (++i >= vcrypto->max_data_queues) in virtcrypto_set_affinity()
218 vcrypto->affinity_hint_set = true; in virtcrypto_set_affinity()
251 static int virtcrypto_update_status(struct virtio_crypto *vcrypto) in virtcrypto_update_status() argument
256 virtio_cread_le(vcrypto->vdev, in virtcrypto_update_status()
264 dev_warn(&vcrypto->vdev->dev, in virtcrypto_update_status()
267 virtio_break_device(vcrypto->vdev); in virtcrypto_update_status()
271 if (vcrypto->status == status) in virtcrypto_update_status()
274 vcrypto->status = status; in virtcrypto_update_status()
276 if (vcrypto->status & VIRTIO_CRYPTO_S_HW_READY) { in virtcrypto_update_status()
277 err = virtcrypto_dev_start(vcrypto); in virtcrypto_update_status()
279 dev_err(&vcrypto->vdev->dev, in virtcrypto_update_status()
284 dev_info(&vcrypto->vdev->dev, "Accelerator device is ready\n"); in virtcrypto_update_status()
286 virtcrypto_dev_stop(vcrypto); in virtcrypto_update_status()
287 dev_info(&vcrypto->vdev->dev, "Accelerator is not ready\n"); in virtcrypto_update_status()
293 static int virtcrypto_start_crypto_engines(struct virtio_crypto *vcrypto) in virtcrypto_start_crypto_engines() argument
298 for (i = 0; i < vcrypto->max_data_queues; i++) { in virtcrypto_start_crypto_engines()
299 if (vcrypto->data_vq[i].engine) { in virtcrypto_start_crypto_engines()
300 ret = crypto_engine_start(vcrypto->data_vq[i].engine); in virtcrypto_start_crypto_engines()
310 if (vcrypto->data_vq[i].engine) in virtcrypto_start_crypto_engines()
311 crypto_engine_exit(vcrypto->data_vq[i].engine); in virtcrypto_start_crypto_engines()
316 static void virtcrypto_clear_crypto_engines(struct virtio_crypto *vcrypto) in virtcrypto_clear_crypto_engines() argument
320 for (i = 0; i < vcrypto->max_data_queues; i++) in virtcrypto_clear_crypto_engines()
321 if (vcrypto->data_vq[i].engine) in virtcrypto_clear_crypto_engines()
322 crypto_engine_exit(vcrypto->data_vq[i].engine); in virtcrypto_clear_crypto_engines()
325 static void virtcrypto_del_vqs(struct virtio_crypto *vcrypto) in virtcrypto_del_vqs() argument
327 struct virtio_device *vdev = vcrypto->vdev; in virtcrypto_del_vqs()
329 virtcrypto_clean_affinity(vcrypto, -1); in virtcrypto_del_vqs()
333 virtcrypto_free_queues(vcrypto); in virtcrypto_del_vqs()
338 struct virtio_crypto *vcrypto = in vcrypto_config_changed_work() local
341 virtcrypto_update_status(vcrypto); in vcrypto_config_changed_work()
347 struct virtio_crypto *vcrypto; in virtcrypto_probe() local
379 vcrypto = kzalloc_node(sizeof(*vcrypto), GFP_KERNEL, in virtcrypto_probe()
381 if (!vcrypto) in virtcrypto_probe()
414 err = virtcrypto_devmgr_add_dev(vcrypto); in virtcrypto_probe()
419 vcrypto->owner = THIS_MODULE; in virtcrypto_probe()
420 vcrypto = vdev->priv = vcrypto; in virtcrypto_probe()
421 vcrypto->vdev = vdev; in virtcrypto_probe()
423 spin_lock_init(&vcrypto->ctrl_lock); in virtcrypto_probe()
426 vcrypto->curr_queue = 1; in virtcrypto_probe()
427 vcrypto->max_data_queues = max_data_queues; in virtcrypto_probe()
428 vcrypto->max_cipher_key_len = max_cipher_key_len; in virtcrypto_probe()
429 vcrypto->max_auth_key_len = max_auth_key_len; in virtcrypto_probe()
430 vcrypto->max_size = max_size; in virtcrypto_probe()
431 vcrypto->crypto_services = crypto_services; in virtcrypto_probe()
432 vcrypto->cipher_algo_l = cipher_algo_l; in virtcrypto_probe()
433 vcrypto->cipher_algo_h = cipher_algo_h; in virtcrypto_probe()
434 vcrypto->mac_algo_l = mac_algo_l; in virtcrypto_probe()
435 vcrypto->mac_algo_h = mac_algo_h; in virtcrypto_probe()
436 vcrypto->hash_algo = hash_algo; in virtcrypto_probe()
437 vcrypto->aead_algo = aead_algo; in virtcrypto_probe()
438 vcrypto->akcipher_algo = akcipher_algo; in virtcrypto_probe()
442 vcrypto->max_data_queues, in virtcrypto_probe()
443 vcrypto->max_cipher_key_len, in virtcrypto_probe()
444 vcrypto->max_auth_key_len, in virtcrypto_probe()
445 vcrypto->max_size); in virtcrypto_probe()
447 err = virtcrypto_init_vqs(vcrypto); in virtcrypto_probe()
453 err = virtcrypto_start_crypto_engines(vcrypto); in virtcrypto_probe()
459 err = virtcrypto_update_status(vcrypto); in virtcrypto_probe()
463 INIT_WORK(&vcrypto->config_work, vcrypto_config_changed_work); in virtcrypto_probe()
468 virtcrypto_clear_crypto_engines(vcrypto); in virtcrypto_probe()
471 virtcrypto_del_vqs(vcrypto); in virtcrypto_probe()
473 virtcrypto_devmgr_rm_dev(vcrypto); in virtcrypto_probe()
475 kfree(vcrypto); in virtcrypto_probe()
479 static void virtcrypto_free_unused_reqs(struct virtio_crypto *vcrypto) in virtcrypto_free_unused_reqs() argument
485 for (i = 0; i < vcrypto->max_data_queues; i++) { in virtcrypto_free_unused_reqs()
486 vq = vcrypto->data_vq[i].vq; in virtcrypto_free_unused_reqs()
495 struct virtio_crypto *vcrypto = vdev->priv; in virtcrypto_remove() local
500 flush_work(&vcrypto->config_work); in virtcrypto_remove()
501 if (virtcrypto_dev_started(vcrypto)) in virtcrypto_remove()
502 virtcrypto_dev_stop(vcrypto); in virtcrypto_remove()
503 for (i = 0; i < vcrypto->max_data_queues; i++) in virtcrypto_remove()
504 tasklet_kill(&vcrypto->data_vq[i].done_task); in virtcrypto_remove()
506 virtcrypto_free_unused_reqs(vcrypto); in virtcrypto_remove()
507 virtcrypto_clear_crypto_engines(vcrypto); in virtcrypto_remove()
508 virtcrypto_del_vqs(vcrypto); in virtcrypto_remove()
509 virtcrypto_devmgr_rm_dev(vcrypto); in virtcrypto_remove()
510 kfree(vcrypto); in virtcrypto_remove()
515 struct virtio_crypto *vcrypto = vdev->priv; in virtcrypto_config_changed() local
517 schedule_work(&vcrypto->config_work); in virtcrypto_config_changed()
523 struct virtio_crypto *vcrypto = vdev->priv; in virtcrypto_freeze() local
525 flush_work(&vcrypto->config_work); in virtcrypto_freeze()
527 virtcrypto_free_unused_reqs(vcrypto); in virtcrypto_freeze()
528 if (virtcrypto_dev_started(vcrypto)) in virtcrypto_freeze()
529 virtcrypto_dev_stop(vcrypto); in virtcrypto_freeze()
531 virtcrypto_clear_crypto_engines(vcrypto); in virtcrypto_freeze()
532 virtcrypto_del_vqs(vcrypto); in virtcrypto_freeze()
538 struct virtio_crypto *vcrypto = vdev->priv; in virtcrypto_restore() local
541 err = virtcrypto_init_vqs(vcrypto); in virtcrypto_restore()
545 err = virtcrypto_start_crypto_engines(vcrypto); in virtcrypto_restore()
551 err = virtcrypto_dev_start(vcrypto); in virtcrypto_restore()
560 virtcrypto_clear_crypto_engines(vcrypto); in virtcrypto_restore()
563 virtcrypto_del_vqs(vcrypto); in virtcrypto_restore()