Lines Matching refs:cap
136 struct cryptocap *cap; member
232 static int crypto_invoke(struct cryptocap *cap, struct cryptop *crp, int hint);
297 cap_ref(struct cryptocap *cap) in cap_ref() argument
300 refcount_acquire(&cap->cc_refs); in cap_ref()
301 return (cap); in cap_ref()
305 cap_rele(struct cryptocap *cap) in cap_rele() argument
308 if (refcount_release(&cap->cc_refs) == 0) in cap_rele()
311 KASSERT(cap->cc_sessions == 0, in cap_rele()
313 KASSERT(cap->cc_koperations == 0, in cap_rele()
316 free(cap, M_CRYPTO_DATA); in cap_rele()
501 return (crypto_session->cap->cc_hid); in crypto_ses2hid()
507 return (crypto_session->cap->cc_flags & 0xff000000); in crypto_ses2caps()
624 struct cryptocap *cap, *best; in crypto_select_driver() local
636 cap = crypto_drivers[hid]; in crypto_select_driver()
637 if (cap == NULL || in crypto_select_driver()
638 (cap->cc_flags & flags) == 0) in crypto_select_driver()
641 error = CRYPTODEV_PROBESESSION(cap->cc_dev, csp); in crypto_select_driver()
653 cap->cc_sessions < best->cc_sessions)) { in crypto_select_driver()
654 best = cap; in crypto_select_driver()
889 struct cryptocap *cap; in crypto_deletesession() local
891 cap = cses->cap; in crypto_deletesession()
896 cap->cc_sessions--; in crypto_deletesession()
897 if (cap->cc_sessions == 0 && cap->cc_flags & CRYPTOCAP_F_CLEANUP) in crypto_deletesession()
898 wakeup(cap); in crypto_deletesession()
900 cap_rele(cap); in crypto_deletesession()
915 struct cryptocap *cap; in crypto_newsession() local
928 cap = crypto_checkdriver(crid); in crypto_newsession()
929 if (cap != NULL && CRYPTODEV_PROBESESSION(cap->cc_dev, csp) > 0) in crypto_newsession()
930 cap = NULL; in crypto_newsession()
935 cap = crypto_select_driver(csp, crid); in crypto_newsession()
937 if (cap == NULL) { in crypto_newsession()
942 cap_ref(cap); in crypto_newsession()
943 cap->cc_sessions++; in crypto_newsession()
947 res = malloc(sizeof(*res) + cap->cc_session_size, M_CRYPTO_DATA, in crypto_newsession()
949 res->cap = cap; in crypto_newsession()
954 err = CRYPTODEV_NEWSESSION(cap->cc_dev, res, csp); in crypto_newsession()
972 struct cryptocap *cap; in crypto_freesession() local
977 cap = cses->cap; in crypto_freesession()
980 CRYPTODEV_FREESESSION(cap->cc_dev, cses); in crypto_freesession()
992 struct cryptocap *cap, **newdrv; in crypto_get_driverid() local
1001 cap = malloc(sizeof(*cap), M_CRYPTO_DATA, M_WAITOK | M_ZERO); in crypto_get_driverid()
1002 cap->cc_dev = dev; in crypto_get_driverid()
1003 cap->cc_session_size = sessionsize; in crypto_get_driverid()
1004 cap->cc_flags = flags; in crypto_get_driverid()
1005 refcount_init(&cap->cc_refs, 1); in crypto_get_driverid()
1022 cap_rele(cap); in crypto_get_driverid()
1040 cap->cc_hid = i; in crypto_get_driverid()
1041 crypto_drivers[i] = cap; in crypto_get_driverid()
1060 struct cryptocap *cap; in crypto_find_driver() local
1067 cap = crypto_drivers[i]; in crypto_find_driver()
1068 if (strncmp(match, device_get_nameunit(cap->cc_dev), len) == 0 || in crypto_find_driver()
1069 strncmp(match, device_get_name(cap->cc_dev), len) == 0) { in crypto_find_driver()
1085 struct cryptocap *cap; in crypto_find_device_byhid() local
1090 cap = crypto_checkdriver(hid); in crypto_find_device_byhid()
1091 if (cap != NULL) in crypto_find_device_byhid()
1092 dev = cap->cc_dev; in crypto_find_device_byhid()
1103 struct cryptocap *cap; in crypto_getcaps() local
1108 cap = crypto_checkdriver(hid); in crypto_getcaps()
1109 if (cap != NULL) in crypto_getcaps()
1110 flags = cap->cc_flags; in crypto_getcaps()
1122 struct cryptocap *cap; in crypto_kregister() local
1127 cap = crypto_checkdriver(driverid); in crypto_kregister()
1128 if (cap != NULL && in crypto_kregister()
1136 cap->cc_kalg[kalg] = flags | CRYPTO_ALG_FLAG_SUPPORTED; in crypto_kregister()
1139 , device_get_nameunit(cap->cc_dev) in crypto_kregister()
1143 gone_in_dev(cap->cc_dev, 14, "asymmetric crypto"); in crypto_kregister()
1162 struct cryptocap *cap; in crypto_unregister_all() local
1165 cap = crypto_checkdriver(driverid); in crypto_unregister_all()
1166 if (cap == NULL) { in crypto_unregister_all()
1171 cap->cc_flags |= CRYPTOCAP_F_CLEANUP; in crypto_unregister_all()
1178 while (cap->cc_sessions != 0 || cap->cc_koperations != 0) in crypto_unregister_all()
1179 mtx_sleep(cap, &crypto_drivers_mtx, 0, "cryunreg", 0); in crypto_unregister_all()
1181 cap_rele(cap); in crypto_unregister_all()
1193 struct cryptocap *cap; in crypto_unblock() local
1197 cap = crypto_checkdriver(driverid); in crypto_unblock()
1198 if (cap != NULL) { in crypto_unblock()
1200 cap->cc_qblocked = 0; in crypto_unblock()
1202 cap->cc_kqblocked = 0; in crypto_unblock()
1415 struct cryptocap *cap; in crypto_dispatch() local
1448 cap = crp->crp_session->cap; in crypto_dispatch()
1449 if (!cap->cc_qblocked) { in crypto_dispatch()
1450 result = crypto_invoke(cap, crp, 0); in crypto_dispatch()
1502 kdriver_suitable(const struct cryptocap *cap, const struct cryptkop *krp) in kdriver_suitable() argument
1504 return (cap->cc_kalg[krp->krp_op] & CRYPTO_ALG_FLAG_SUPPORTED) != 0; in kdriver_suitable()
1520 struct cryptocap *cap, *best; in crypto_select_kdriver() local
1540 cap = crypto_drivers[hid]; in crypto_select_kdriver()
1541 if (cap == NULL || in crypto_select_kdriver()
1542 (cap->cc_flags & match) == 0) in crypto_select_kdriver()
1546 if (kdriver_suitable(cap, krp)) { in crypto_select_kdriver()
1548 cap->cc_koperations < best->cc_koperations) in crypto_select_kdriver()
1549 best = cap; in crypto_select_kdriver()
1568 struct cryptocap *cap; in crypto_lookup_kdriver() local
1572 cap = krp->krp_cap; in crypto_lookup_kdriver()
1573 if (cap != NULL) in crypto_lookup_kdriver()
1574 return (cap); in crypto_lookup_kdriver()
1579 cap = crypto_checkdriver(crid); in crypto_lookup_kdriver()
1580 if (cap != NULL) { in crypto_lookup_kdriver()
1587 if (!kdriver_suitable(cap, krp) || in crypto_lookup_kdriver()
1589 (cap->cc_flags & CRYPTOCAP_F_HARDWARE) == 0)) in crypto_lookup_kdriver()
1590 cap = NULL; in crypto_lookup_kdriver()
1598 cap = crypto_select_kdriver(krp, crid); in crypto_lookup_kdriver()
1601 if (cap != NULL) { in crypto_lookup_kdriver()
1602 krp->krp_cap = cap_ref(cap); in crypto_lookup_kdriver()
1603 krp->krp_hid = cap->cc_hid; in crypto_lookup_kdriver()
1605 return (cap); in crypto_lookup_kdriver()
1614 struct cryptocap *cap = NULL; in crypto_kinvoke() local
1622 cap = crypto_lookup_kdriver(krp); in crypto_kinvoke()
1623 if (cap == NULL) { in crypto_kinvoke()
1633 if (cap->cc_kqblocked) { in crypto_kinvoke()
1643 cap->cc_koperations++; in crypto_kinvoke()
1645 error = CRYPTODEV_KPROCESS(cap->cc_dev, krp, 0); in crypto_kinvoke()
1648 cap->cc_koperations--; in crypto_kinvoke()
1660 struct cryptocap *cap; in crypto_task_invoke() local
1665 cap = crp->crp_session->cap; in crypto_task_invoke()
1666 result = crypto_invoke(cap, crp, 0); in crypto_task_invoke()
1675 crypto_invoke(struct cryptocap *cap, struct cryptop *crp, int hint) in crypto_invoke() argument
1684 if (cap->cc_flags & CRYPTOCAP_F_CLEANUP) { in crypto_invoke()
1730 return CRYPTODEV_PROCESS(cap->cc_dev, crp, hint); in crypto_invoke()
1877 struct cryptocap *cap; in crypto_kdone() local
1881 cap = krp->krp_cap; in crypto_kdone()
1882 if (cap != NULL) { in crypto_kdone()
1884 KASSERT(cap->cc_koperations > 0, ("cc_koperations == 0")); in crypto_kdone()
1885 cap->cc_koperations--; in crypto_kdone()
1886 if (cap->cc_koperations == 0 && in crypto_kdone()
1887 cap->cc_flags & CRYPTOCAP_F_CLEANUP) in crypto_kdone()
1888 wakeup(cap); in crypto_kdone()
1891 cap_rele(cap); in crypto_kdone()
1910 const struct cryptocap *cap = crypto_drivers[hid]; in crypto_getfeat() local
1912 if (cap == NULL || in crypto_getfeat()
1913 ((cap->cc_flags & CRYPTOCAP_F_SOFTWARE) && in crypto_getfeat()
1918 if (cap->cc_kalg[kalg] & CRYPTO_ALG_FLAG_SUPPORTED) in crypto_getfeat()
1952 struct cryptocap *cap; in crypto_proc() local
1969 cap = crp->crp_session->cap; in crypto_proc()
1974 KASSERT(cap != NULL, ("%s:%u Driver disappeared.", in crypto_proc()
1976 if (cap->cc_flags & CRYPTOCAP_F_CLEANUP) { in crypto_proc()
1982 if (!cap->cc_qblocked) { in crypto_proc()
1992 if (submit->crp_session->cap == cap) in crypto_proc()
2005 cap = submit->crp_session->cap; in crypto_proc()
2006 KASSERT(cap != NULL, ("%s:%u Driver disappeared.", in crypto_proc()
2009 result = crypto_invoke(cap, submit, hint); in crypto_proc()
2021 cap->cc_qblocked = 1; in crypto_proc()
2029 cap = krp->krp_cap; in crypto_proc()
2030 if (cap->cc_flags & CRYPTOCAP_F_CLEANUP) { in crypto_proc()
2037 cap_rele(cap); in crypto_proc()
2040 if (!cap->cc_kqblocked) in crypto_proc()
2166 const struct cryptocap *cap = crypto_drivers[hid]; in db_show_drivers() local
2167 if (cap == NULL) in db_show_drivers()
2170 , device_get_nameunit(cap->cc_dev) in db_show_drivers()
2171 , cap->cc_sessions in db_show_drivers()
2172 , cap->cc_koperations in db_show_drivers()
2173 , cap->cc_flags in db_show_drivers()
2174 , cap->cc_qblocked in db_show_drivers()
2175 , cap->cc_kqblocked in db_show_drivers()
2193 , crp->crp_session->cap->cc_hid in DB_SHOW_COMMAND()
2198 , device_get_nameunit(crp->crp_session->cap->cc_dev) in DB_SHOW_COMMAND()
2209 , crp->crp_session->cap->cc_hid in DB_SHOW_COMMAND()