610 mutex_destroy(&cm->cm_lock);
611 cv_destroy(&cm->cm_cv);
612 kmem_free(cm, sizeof (crypto_minor_t));
613
614 return (0);
615 }
616
617 static crypto_minor_t *
618 crypto_hold_minor(minor_t minor)
619 {
620 crypto_minor_t *cm;
621 kcf_lock_withpad_t *mp;
622
623 if (minor > crypto_minors_table_count)
624 return (NULL);
625
626 mp = &crypto_locks[CPU_SEQID];
627 mutex_enter(&mp->kl_lock);
628
629 if ((cm = crypto_minors[minor - 1]) != NULL) {
630 atomic_add_32(&cm->cm_refcnt, 1);
631 }
632 mutex_exit(&mp->kl_lock);
633 return (cm);
634 }
635
636 static void
637 crypto_release_minor(crypto_minor_t *cm)
638 {
639 if (atomic_add_32_nv(&cm->cm_refcnt, -1) == 0) {
640 cv_signal(&cm->cm_cv);
641 }
642 }
643
644 /*
645 * Build a list of functions and other information for the provider, pd.
646 */
647 static void
648 crypto_build_function_list(crypto_function_list_t *fl, kcf_provider_desc_t *pd)
649 {
650 crypto_ops_t *ops;
651 crypto_digest_ops_t *digest_ops;
652 crypto_cipher_ops_t *cipher_ops;
653 crypto_mac_ops_t *mac_ops;
654 crypto_sign_ops_t *sign_ops;
655 crypto_verify_ops_t *verify_ops;
656 crypto_dual_ops_t *dual_ops;
657 crypto_random_number_ops_t *random_number_ops;
658 crypto_session_ops_t *session_ops;
659 crypto_object_ops_t *object_ops;
|
610 mutex_destroy(&cm->cm_lock);
611 cv_destroy(&cm->cm_cv);
612 kmem_free(cm, sizeof (crypto_minor_t));
613
614 return (0);
615 }
616
617 static crypto_minor_t *
618 crypto_hold_minor(minor_t minor)
619 {
620 crypto_minor_t *cm;
621 kcf_lock_withpad_t *mp;
622
623 if (minor > crypto_minors_table_count)
624 return (NULL);
625
626 mp = &crypto_locks[CPU_SEQID];
627 mutex_enter(&mp->kl_lock);
628
629 if ((cm = crypto_minors[minor - 1]) != NULL) {
630 atomic_inc_32(&cm->cm_refcnt);
631 }
632 mutex_exit(&mp->kl_lock);
633 return (cm);
634 }
635
636 static void
637 crypto_release_minor(crypto_minor_t *cm)
638 {
639 if (atomic_dec_32_nv(&cm->cm_refcnt) == 0) {
640 cv_signal(&cm->cm_cv);
641 }
642 }
643
644 /*
645 * Build a list of functions and other information for the provider, pd.
646 */
647 static void
648 crypto_build_function_list(crypto_function_list_t *fl, kcf_provider_desc_t *pd)
649 {
650 crypto_ops_t *ops;
651 crypto_digest_ops_t *digest_ops;
652 crypto_cipher_ops_t *cipher_ops;
653 crypto_mac_ops_t *mac_ops;
654 crypto_sign_ops_t *sign_ops;
655 crypto_verify_ops_t *verify_ops;
656 crypto_dual_ops_t *dual_ops;
657 crypto_random_number_ops_t *random_number_ops;
658 crypto_session_ops_t *session_ops;
659 crypto_object_ops_t *object_ops;
|