Lines Matching refs:cap

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