Lines Matching refs:cap
213 static int crypto_invoke(struct cryptocap *cap, struct cryptop *crp, int hint);
215 static void crypto_remove(struct cryptocap *cap);
452 driver_suitable(const struct cryptocap *cap, const struct cryptoini *cri) in driver_suitable() argument
458 if (cap->cc_alg[cr->cri_alg] == 0) in driver_suitable()
477 struct cryptocap *cap, *best; in crypto_select_driver() local
492 cap = &crypto_drivers[hid]; in crypto_select_driver()
498 if (cap->cc_dev == NULL || in crypto_select_driver()
499 (cap->cc_flags & CRYPTOCAP_F_CLEANUP) || in crypto_select_driver()
500 (cap->cc_flags & match) == 0) in crypto_select_driver()
504 if (driver_suitable(cap, cri)) { in crypto_select_driver()
506 cap->cc_sessions < best->cc_sessions) in crypto_select_driver()
507 best = cap; in crypto_select_driver()
530 struct cryptocap *cap; in crypto_newsession() local
544 cap = crypto_checkdriver(crid); in crypto_newsession()
545 if (cap != NULL && !driver_suitable(cap, cri)) in crypto_newsession()
546 cap = NULL; in crypto_newsession()
551 cap = crypto_select_driver(cri, crid); in crypto_newsession()
558 if (cap == NULL) { in crypto_newsession()
563 cap->cc_sessions++; in crypto_newsession()
564 softc_size = cap->cc_session_size; in crypto_newsession()
565 hid = cap - crypto_drivers; in crypto_newsession()
566 cap = NULL; in crypto_newsession()
574 cap = crypto_checkdriver(hid); in crypto_newsession()
575 if (cap != NULL && (cap->cc_flags & CRYPTOCAP_F_CLEANUP) != 0) { in crypto_newsession()
576 cap->cc_sessions--; in crypto_newsession()
577 crypto_remove(cap); in crypto_newsession()
578 cap = NULL; in crypto_newsession()
580 if (cap == NULL) { in crypto_newsession()
588 err = CRYPTODEV_NEWSESSION(cap->cc_dev, res, cri); in crypto_newsession()
594 res->capabilities = cap->cc_flags & 0xff000000; in crypto_newsession()
609 crypto_remove(struct cryptocap *cap) in crypto_remove() argument
613 if (cap->cc_sessions == 0 && cap->cc_koperations == 0) in crypto_remove()
614 bzero(cap, sizeof(*cap)); in crypto_remove()
624 struct cryptocap *cap; in crypto_freesession() local
637 cap = &crypto_drivers[hid]; in crypto_freesession()
640 ses_size = cap->cc_session_size; in crypto_freesession()
642 if (cap->cc_sessions) in crypto_freesession()
643 cap->cc_sessions--; in crypto_freesession()
646 CRYPTODEV_FREESESSION(cap->cc_dev, cses); in crypto_freesession()
652 if (cap->cc_flags & CRYPTOCAP_F_CLEANUP) in crypto_freesession()
653 crypto_remove(cap); in crypto_freesession()
755 struct cryptocap *cap = crypto_checkdriver(hid); in crypto_find_device_byhid() local
756 return cap != NULL ? cap->cc_dev : NULL; in crypto_find_device_byhid()
765 struct cryptocap *cap = crypto_checkdriver(hid); in crypto_getcaps() local
766 return cap != NULL ? cap->cc_flags : 0; in crypto_getcaps()
776 struct cryptocap *cap; in crypto_kregister() local
781 cap = crypto_checkdriver(driverid); in crypto_kregister()
782 if (cap != NULL && in crypto_kregister()
790 cap->cc_kalg[kalg] = flags | CRYPTO_ALG_FLAG_SUPPORTED; in crypto_kregister()
793 , device_get_nameunit(cap->cc_dev) in crypto_kregister()
813 struct cryptocap *cap; in crypto_register() local
818 cap = crypto_checkdriver(driverid); in crypto_register()
820 if (cap != NULL && in crypto_register()
828 cap->cc_alg[alg] = flags | CRYPTO_ALG_FLAG_SUPPORTED; in crypto_register()
829 cap->cc_max_op_len[alg] = maxoplen; in crypto_register()
832 , device_get_nameunit(cap->cc_dev) in crypto_register()
837 cap->cc_sessions = 0; /* Unmark */ in crypto_register()
847 driver_finis(struct cryptocap *cap) in driver_finis() argument
853 ses = cap->cc_sessions; in driver_finis()
854 kops = cap->cc_koperations; in driver_finis()
855 bzero(cap, sizeof(*cap)); in driver_finis()
861 cap->cc_flags |= CRYPTOCAP_F_CLEANUP; in driver_finis()
862 cap->cc_sessions = ses; in driver_finis()
863 cap->cc_koperations = kops; in driver_finis()
876 struct cryptocap *cap; in crypto_unregister() local
880 cap = crypto_checkdriver(driverid); in crypto_unregister()
881 if (cap != NULL && in crypto_unregister()
883 cap->cc_alg[alg] != 0) { in crypto_unregister()
884 cap->cc_alg[alg] = 0; in crypto_unregister()
885 cap->cc_max_op_len[alg] = 0; in crypto_unregister()
889 if (cap->cc_alg[i] != 0) in crypto_unregister()
893 driver_finis(cap); in crypto_unregister()
912 struct cryptocap *cap; in crypto_unregister_all() local
916 cap = crypto_checkdriver(driverid); in crypto_unregister_all()
917 if (cap != NULL) { in crypto_unregister_all()
918 driver_finis(cap); in crypto_unregister_all()
934 struct cryptocap *cap; in crypto_unblock() local
938 cap = crypto_checkdriver(driverid); in crypto_unblock()
939 if (cap != NULL) { in crypto_unblock()
941 cap->cc_qblocked = 0; in crypto_unblock()
943 cap->cc_kqblocked = 0; in crypto_unblock()
960 struct cryptocap *cap; in crypto_dispatch() local
997 cap = crypto_checkdriver(hid); in crypto_dispatch()
999 KASSERT(cap != NULL, ("%s: Driver disappeared.", __func__)); in crypto_dispatch()
1000 if (!cap->cc_qblocked) { in crypto_dispatch()
1001 result = crypto_invoke(cap, crp, 0); in crypto_dispatch()
1052 kdriver_suitable(const struct cryptocap *cap, const struct cryptkop *krp) in kdriver_suitable() argument
1054 return (cap->cc_kalg[krp->krp_op] & CRYPTO_ALG_FLAG_SUPPORTED) != 0; in kdriver_suitable()
1070 struct cryptocap *cap, *best; in crypto_select_kdriver() local
1085 cap = &crypto_drivers[hid]; in crypto_select_kdriver()
1091 if (cap->cc_dev == NULL || in crypto_select_kdriver()
1092 (cap->cc_flags & CRYPTOCAP_F_CLEANUP) || in crypto_select_kdriver()
1093 (cap->cc_flags & match) == 0) in crypto_select_kdriver()
1097 if (kdriver_suitable(cap, krp)) { in crypto_select_kdriver()
1099 cap->cc_koperations < best->cc_koperations) in crypto_select_kdriver()
1100 best = cap; in crypto_select_kdriver()
1119 struct cryptocap *cap = NULL; in crypto_kinvoke() local
1128 cap = crypto_checkdriver(crid); in crypto_kinvoke()
1129 if (cap != NULL) { in crypto_kinvoke()
1135 if (!kdriver_suitable(cap, krp) || in crypto_kinvoke()
1137 (cap->cc_flags & CRYPTOCAP_F_HARDWARE) == 0)) in crypto_kinvoke()
1138 cap = NULL; in crypto_kinvoke()
1146 cap = crypto_select_kdriver(krp, crid); in crypto_kinvoke()
1148 if (cap != NULL && !cap->cc_kqblocked) { in crypto_kinvoke()
1149 krp->krp_hid = cap - crypto_drivers; in crypto_kinvoke()
1150 cap->cc_koperations++; in crypto_kinvoke()
1152 error = CRYPTODEV_KPROCESS(cap->cc_dev, krp, 0); in crypto_kinvoke()
1155 cap->cc_koperations--; in crypto_kinvoke()
1165 error = (cap == NULL) ? ENODEV : ERESTART; in crypto_kinvoke()
1205 struct cryptocap *cap; in crypto_task_invoke() local
1212 cap = crypto_checkdriver(hid); in crypto_task_invoke()
1214 result = crypto_invoke(cap, crp, 0); in crypto_task_invoke()
1223 crypto_invoke(struct cryptocap *cap, struct cryptop *crp, int hint) in crypto_invoke() argument
1235 if (cap->cc_flags & CRYPTOCAP_F_CLEANUP) { in crypto_invoke()
1263 return CRYPTODEV_PROCESS(cap->cc_dev, crp, hint); in crypto_invoke()
1430 struct cryptocap *cap; in crypto_kdone() local
1437 cap = &crypto_drivers[krp->krp_hid]; in crypto_kdone()
1438 KASSERT(cap->cc_koperations > 0, ("cc_koperations == 0")); in crypto_kdone()
1439 cap->cc_koperations--; in crypto_kdone()
1440 if (cap->cc_flags & CRYPTOCAP_F_CLEANUP) in crypto_kdone()
1441 crypto_remove(cap); in crypto_kdone()
1461 const struct cryptocap *cap = &crypto_drivers[hid]; in crypto_getfeat() local
1463 if ((cap->cc_flags & CRYPTOCAP_F_SOFTWARE) && in crypto_getfeat()
1468 if (cap->cc_kalg[kalg] & CRYPTO_ALG_FLAG_SUPPORTED) in crypto_getfeat()
1502 struct cryptocap *cap; in crypto_proc() local
1521 cap = crypto_checkdriver(hid); in crypto_proc()
1526 KASSERT(cap != NULL, ("%s:%u Driver disappeared.", in crypto_proc()
1528 if (cap == NULL || cap->cc_dev == NULL) { in crypto_proc()
1534 if (!cap->cc_qblocked) { in crypto_proc()
1558 cap = crypto_checkdriver(hid); in crypto_proc()
1559 KASSERT(cap != NULL, ("%s:%u Driver disappeared.", in crypto_proc()
1561 result = crypto_invoke(cap, submit, hint); in crypto_proc()
1581 cap = crypto_checkdriver(krp->krp_hid); in crypto_proc()
1582 if (cap == NULL || cap->cc_dev == NULL) { in crypto_proc()
1596 if (!cap->cc_kqblocked) in crypto_proc()
1735 const struct cryptocap *cap = &crypto_drivers[hid]; in db_show_drivers() local
1736 if (cap->cc_dev == NULL) in db_show_drivers()
1739 , device_get_nameunit(cap->cc_dev) in db_show_drivers()
1740 , cap->cc_sessions in db_show_drivers()
1741 , cap->cc_koperations in db_show_drivers()
1742 , cap->cc_flags in db_show_drivers()
1743 , cap->cc_qblocked in db_show_drivers()
1744 , cap->cc_kqblocked in db_show_drivers()