Lines Matching refs:cap

620 		struct cryptocap *cap = NULL;  in crypto_destroy()  local
634 cap = crypto_checkdriver(i); in crypto_destroy()
635 if (cap == NULL) in crypto_destroy()
637 if (cap->cc_sessions != 0) { in crypto_destroy()
685 crypto_driver_suitable(struct cryptocap *cap, struct cryptoini *cri) in crypto_driver_suitable() argument
690 if (cap->cc_alg[cr->cri_alg] == 0) { in crypto_driver_suitable()
715 struct cryptocap *cap, *best; in crypto_select_driver_lock() local
730 cap = crypto_checkdriver(hid); in crypto_select_driver_lock()
731 if (cap == NULL) in crypto_select_driver_lock()
734 crypto_driver_lock(cap); in crypto_select_driver_lock()
740 if (cap->cc_newsession == NULL || in crypto_select_driver_lock()
741 (cap->cc_flags & CRYPTOCAP_F_CLEANUP)) { in crypto_select_driver_lock()
742 crypto_driver_unlock(cap); in crypto_select_driver_lock()
748 && (cap->cc_flags & CRYPTOCAP_F_SOFTWARE)) { in crypto_select_driver_lock()
749 crypto_driver_unlock(cap); in crypto_select_driver_lock()
754 && (cap->cc_flags & CRYPTOCAP_F_SOFTWARE) == 0) { in crypto_select_driver_lock()
755 crypto_driver_unlock(cap); in crypto_select_driver_lock()
760 if (crypto_driver_suitable(cap, cri)) { in crypto_select_driver_lock()
763 best = cap; in crypto_select_driver_lock()
765 } else if (cap->cc_sessions < best->cc_sessions) { in crypto_select_driver_lock()
768 best = cap; in crypto_select_driver_lock()
773 crypto_driver_unlock(cap); in crypto_select_driver_lock()
800 struct cryptocap *cap; in crypto_newsession() local
815 cap = crypto_select_driver_lock(cri, hard); in crypto_newsession()
816 if (cap != NULL) { in crypto_newsession()
819 hid = cap - crypto_drivers; in crypto_newsession()
830 crypto_driver_unlock(cap); in crypto_newsession()
831 err = cap->cc_newsession(cap->cc_arg, &lid, cri); in crypto_newsession()
832 crypto_driver_lock(cap); in crypto_newsession()
838 cap->cc_sessions++; in crypto_newsession()
843 crypto_driver_unlock(cap); in crypto_newsession()
858 struct cryptocap *cap; in crypto_freesession() local
872 cap = crypto_checkdriver_lock(CRYPTO_SESID2HID(sid)); in crypto_freesession()
873 KASSERTMSG(cap != NULL, "sid=%"PRIx64, sid); in crypto_freesession()
875 KASSERT(cap->cc_sessions > 0); in crypto_freesession()
876 cap->cc_sessions--; in crypto_freesession()
879 if (cap->cc_freesession) in crypto_freesession()
880 cap->cc_freesession(cap->cc_arg, sid); in crypto_freesession()
886 if ((cap->cc_flags & CRYPTOCAP_F_CLEANUP) && cap->cc_sessions == 0) in crypto_freesession()
887 crypto_driver_clear(cap); in crypto_freesession()
889 crypto_driver_unlock(cap); in crypto_freesession()
893 crypto_checkdriver_initialized(const struct cryptocap *cap) in crypto_checkdriver_initialized() argument
896 return cap->cc_process != NULL || in crypto_checkdriver_initialized()
897 (cap->cc_flags & CRYPTOCAP_F_CLEANUP) != 0 || in crypto_checkdriver_initialized()
898 cap->cc_sessions != 0; in crypto_checkdriver_initialized()
909 struct cryptocap *cap = NULL; in crypto_get_driverid() local
916 cap = crypto_checkdriver_uninit(i); in crypto_get_driverid()
917 if (cap == NULL || crypto_checkdriver_initialized(cap)) in crypto_get_driverid()
923 if (cap == NULL) { in crypto_get_driverid()
941 cap = crypto_checkdriver_uninit(i); in crypto_get_driverid()
942 KASSERT(cap != NULL); in crypto_get_driverid()
946 cap->cc_sessions = 1; /* Mark */ in crypto_get_driverid()
947 cap->cc_flags = flags; in crypto_get_driverid()
948 mutex_init(&cap->cc_lock, MUTEX_DEFAULT, IPL_NET); in crypto_get_driverid()
961 struct cryptocap *cap; in crypto_checkdriver_lock() local
968 cap = &crypto_drivers[hid]; in crypto_checkdriver_lock()
969 mutex_enter(&cap->cc_lock); in crypto_checkdriver_lock()
970 return cap; in crypto_checkdriver_lock()
1006 struct cryptocap *cap = &crypto_drivers[hid]; in crypto_checkdriver() local
1007 return crypto_checkdriver_initialized(cap) ? cap : NULL; in crypto_checkdriver()
1011 crypto_driver_lock(struct cryptocap *cap) in crypto_driver_lock() argument
1014 KASSERT(cap != NULL); in crypto_driver_lock()
1016 mutex_enter(&cap->cc_lock); in crypto_driver_lock()
1020 crypto_driver_unlock(struct cryptocap *cap) in crypto_driver_unlock() argument
1023 KASSERT(cap != NULL); in crypto_driver_unlock()
1025 mutex_exit(&cap->cc_lock); in crypto_driver_unlock()
1029 crypto_driver_clear(struct cryptocap *cap) in crypto_driver_clear() argument
1032 if (cap == NULL) in crypto_driver_clear()
1035 KASSERT(mutex_owned(&cap->cc_lock)); in crypto_driver_clear()
1037 cap->cc_sessions = 0; in crypto_driver_clear()
1038 memset(&cap->cc_max_op_len, 0, sizeof(cap->cc_max_op_len)); in crypto_driver_clear()
1039 memset(&cap->cc_alg, 0, sizeof(cap->cc_alg)); in crypto_driver_clear()
1040 memset(&cap->cc_kalg, 0, sizeof(cap->cc_kalg)); in crypto_driver_clear()
1041 cap->cc_flags = 0; in crypto_driver_clear()
1042 cap->cc_qblocked = 0; in crypto_driver_clear()
1043 cap->cc_kqblocked = 0; in crypto_driver_clear()
1045 cap->cc_arg = NULL; in crypto_driver_clear()
1046 cap->cc_newsession = NULL; in crypto_driver_clear()
1047 cap->cc_process = NULL; in crypto_driver_clear()
1048 cap->cc_freesession = NULL; in crypto_driver_clear()
1049 cap->cc_kprocess = NULL; in crypto_driver_clear()
1061 struct cryptocap *cap; in crypto_kregister() local
1066 cap = crypto_checkdriver_lock(driverid); in crypto_kregister()
1067 if (cap != NULL && in crypto_kregister()
1075 cap->cc_kalg[kalg] = flags | CRYPTO_ALG_FLAG_SUPPORTED; in crypto_kregister()
1085 if (cap->cc_kprocess == NULL) { in crypto_kregister()
1086 cap->cc_karg = karg; in crypto_kregister()
1087 cap->cc_kprocess = kprocess; in crypto_kregister()
1109 struct cryptocap *cap; in crypto_register() local
1112 cap = crypto_checkdriver_lock(driverid); in crypto_register()
1113 if (cap == NULL) in crypto_register()
1124 cap->cc_alg[alg] = flags | CRYPTO_ALG_FLAG_SUPPORTED; in crypto_register()
1125 cap->cc_max_op_len[alg] = maxoplen; in crypto_register()
1136 if (cap->cc_process == NULL) { in crypto_register()
1137 cap->cc_arg = arg; in crypto_register()
1138 cap->cc_newsession = newses; in crypto_register()
1139 cap->cc_process = process; in crypto_register()
1140 cap->cc_freesession = freeses; in crypto_register()
1141 cap->cc_sessions = 0; /* Unmark */ in crypto_register()
1147 crypto_driver_unlock(cap); in crypto_register()
1153 crypto_unregister_locked(struct cryptocap *cap, int alg, bool all) in crypto_unregister_locked() argument
1159 KASSERT(cap != NULL); in crypto_unregister_locked()
1160 KASSERT(mutex_owned(&cap->cc_lock)); in crypto_unregister_locked()
1165 if (!all && cap->cc_alg[alg] == 0) in crypto_unregister_locked()
1168 cap->cc_alg[alg] = 0; in crypto_unregister_locked()
1169 cap->cc_max_op_len[alg] = 0; in crypto_unregister_locked()
1177 if (cap->cc_alg[i] != 0) { in crypto_unregister_locked()
1183 ses = cap->cc_sessions; in crypto_unregister_locked()
1184 crypto_driver_clear(cap); in crypto_unregister_locked()
1189 cap->cc_flags |= CRYPTOCAP_F_CLEANUP; in crypto_unregister_locked()
1190 cap->cc_sessions = ses; in crypto_unregister_locked()
1207 struct cryptocap *cap; in crypto_unregister() local
1209 cap = crypto_checkdriver_lock(driverid); in crypto_unregister()
1210 err = crypto_unregister_locked(cap, alg, false); in crypto_unregister()
1211 crypto_driver_unlock(cap); in crypto_unregister()
1227 struct cryptocap *cap; in crypto_unregister_all() local
1229 cap = crypto_checkdriver_lock(driverid); in crypto_unregister_all()
1231 err = crypto_unregister_locked(cap, i, true); in crypto_unregister_all()
1235 crypto_driver_unlock(cap); in crypto_unregister_all()
1247 struct cryptocap *cap; in crypto_unblock() local
1250 cap = crypto_checkdriver_lock(driverid); in crypto_unblock()
1251 if (cap == NULL) in crypto_unblock()
1255 needwakeup |= cap->cc_qblocked; in crypto_unblock()
1256 cap->cc_qblocked = 0; in crypto_unblock()
1259 needwakeup |= cap->cc_kqblocked; in crypto_unblock()
1260 cap->cc_kqblocked = 0; in crypto_unblock()
1262 crypto_driver_unlock(cap); in crypto_unblock()
1280 struct cryptocap *cap; in crypto_dispatch() local
1325 cap = crypto_checkdriver_lock(CRYPTO_SESID2HID(crp->crp_sid)); in crypto_dispatch()
1331 if (cap == NULL) { in crypto_dispatch()
1340 if (cap->cc_qblocked != 0) { in crypto_dispatch()
1341 crypto_driver_unlock(cap); in crypto_dispatch()
1355 crypto_driver_unlock(cap); in crypto_dispatch()
1364 crypto_driver_lock(cap); in crypto_dispatch()
1365 cap->cc_qblocked = 1; in crypto_dispatch()
1366 crypto_driver_unlock(cap); in crypto_dispatch()
1383 struct cryptocap *cap; in crypto_kdispatch() local
1395 cap = crypto_checkdriver_lock(krp->krp_hid); in crypto_kdispatch()
1401 if (cap == NULL) { in crypto_kdispatch()
1406 if (cap->cc_kqblocked != 0) { in crypto_kdispatch()
1407 crypto_driver_unlock(cap); in crypto_kdispatch()
1416 crypto_driver_unlock(cap); in crypto_kdispatch()
1425 crypto_driver_lock(cap); in crypto_kdispatch()
1426 cap->cc_kqblocked = 1; in crypto_kdispatch()
1427 crypto_driver_unlock(cap); in crypto_kdispatch()
1442 struct cryptocap *cap = NULL; in crypto_kinvoke() local
1452 cap = crypto_checkdriver(hid); in crypto_kinvoke()
1453 if (cap == NULL) in crypto_kinvoke()
1455 crypto_driver_lock(cap); in crypto_kinvoke()
1456 if ((cap->cc_flags & CRYPTOCAP_F_SOFTWARE) && in crypto_kinvoke()
1458 crypto_driver_unlock(cap); in crypto_kinvoke()
1461 if (cap->cc_kprocess == NULL) { in crypto_kinvoke()
1462 crypto_driver_unlock(cap); in crypto_kinvoke()
1465 if ((cap->cc_kalg[krp->krp_op] & in crypto_kinvoke()
1467 crypto_driver_unlock(cap); in crypto_kinvoke()
1473 if (cap != NULL) { in crypto_kinvoke()
1477 process = cap->cc_kprocess; in crypto_kinvoke()
1478 arg = cap->cc_karg; in crypto_kinvoke()
1481 crypto_driver_unlock(cap); in crypto_kinvoke()
1524 struct cryptocap *cap; in crypto_invoke() local
1537 cap = crypto_checkdriver_lock(CRYPTO_SESID2HID(crp->crp_sid)); in crypto_invoke()
1538 if (cap != NULL && (cap->cc_flags & CRYPTOCAP_F_CLEANUP) == 0) { in crypto_invoke()
1542 process = cap->cc_process; in crypto_invoke()
1543 arg = cap->cc_arg; in crypto_invoke()
1550 crypto_driver_unlock(cap); in crypto_invoke()
1556 if (cap != NULL) { in crypto_invoke()
1557 crypto_driver_unlock(cap); in crypto_invoke()
1766 struct cryptocap *cap; in crypto_getfeat() local
1767 cap = crypto_checkdriver(hid); in crypto_getfeat()
1768 if (cap == NULL) in crypto_getfeat()
1771 crypto_driver_lock(cap); in crypto_getfeat()
1773 if ((cap->cc_flags & CRYPTOCAP_F_SOFTWARE) && in crypto_getfeat()
1777 if (cap->cc_kprocess == NULL) in crypto_getfeat()
1781 if ((cap->cc_kalg[kalg] & in crypto_getfeat()
1785 unlock: crypto_driver_unlock(cap); in crypto_getfeat()
1801 struct cryptocap *cap; in cryptointr() local
1821 cap = crypto_checkdriver_lock(hid); in cryptointr()
1822 if (cap == NULL || cap->cc_process == NULL) { in cryptointr()
1823 if (cap != NULL) in cryptointr()
1824 crypto_driver_unlock(cap); in cryptointr()
1833 if (cap->cc_qblocked != 0) { in cryptointr()
1834 crypto_driver_unlock(cap); in cryptointr()
1837 crypto_driver_unlock(cap); in cryptointr()
1882 cap = crypto_checkdriver_lock(CRYPTO_SESID2HID(submit->crp_sid)); in cryptointr()
1883 if (cap == NULL) { in cryptointr()
1887 cap->cc_qblocked = 1; in cryptointr()
1888 crypto_driver_unlock(cap); in cryptointr()
1897 cap = crypto_checkdriver_lock(krp->krp_hid); in cryptointr()
1898 if (cap == NULL || cap->cc_kprocess == NULL) { in cryptointr()
1899 if (cap != NULL) in cryptointr()
1900 crypto_driver_unlock(cap); in cryptointr()
1904 if (!cap->cc_kqblocked) { in cryptointr()
1905 crypto_driver_unlock(cap); in cryptointr()
1908 crypto_driver_unlock(cap); in cryptointr()
1927 cap = crypto_checkdriver_lock(krp->krp_hid); in cryptointr()
1928 if (cap == NULL) { in cryptointr()
1932 cap->cc_kqblocked = 1; in cryptointr()
1933 crypto_driver_unlock(cap); in cryptointr()