Lines Matching +full:im +full:-

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
92 const struct icl_module *im; in sysctl_kern_icl_offloads() local
99 sx_slock(&sc->sc_lock); in sysctl_kern_icl_offloads()
100 TAILQ_FOREACH(im, &sc->sc_modules, im_next) { in sysctl_kern_icl_offloads()
101 if (im->im_iser != iser) in sysctl_kern_icl_offloads()
103 if (im != TAILQ_FIRST(&sc->sc_modules)) in sysctl_kern_icl_offloads()
105 sbuf_printf(&sb, "%s", im->im_name); in sysctl_kern_icl_offloads()
107 sx_sunlock(&sc->sc_lock); in sysctl_kern_icl_offloads()
119 struct icl_module *im, *im_max; in icl_find() local
121 sx_assert(&sc->sc_lock, SA_LOCKED); in icl_find()
129 TAILQ_FOREACH(im, &sc->sc_modules, im_next) { in icl_find()
130 if (im->im_iser != iser) in icl_find()
133 im->im_priority > im_max->im_priority) in icl_find()
134 im_max = im; in icl_find()
138 ICL_WARN("no iSER-capable offload found"); in icl_find()
143 TAILQ_FOREACH(im, &sc->sc_modules, im_next) { in icl_find()
144 if (strcasecmp(im->im_name, name) != 0) in icl_find()
147 if (!im->im_iser && iser && !quiet) { in icl_find()
148 ICL_WARN("offload \"%s\" is not iSER-capable", name); in icl_find()
151 if (im->im_iser && !iser && !quiet) { in icl_find()
152 ICL_WARN("offload \"%s\" is iSER-only", name); in icl_find()
156 return (im); in icl_find()
168 struct icl_module *im; in icl_new_conn() local
171 sx_slock(&sc->sc_lock); in icl_new_conn()
172 im = icl_find(offload, iser, false); in icl_new_conn()
173 if (im == NULL) { in icl_new_conn()
174 sx_sunlock(&sc->sc_lock); in icl_new_conn()
178 ic = im->im_new_conn(name, lock); in icl_new_conn()
179 sx_sunlock(&sc->sc_lock); in icl_new_conn()
188 struct icl_module *im; in icl_limits() local
192 sx_slock(&sc->sc_lock); in icl_limits()
193 im = icl_find(offload, iser, false); in icl_limits()
194 if (im == NULL) { in icl_limits()
195 sx_sunlock(&sc->sc_lock); in icl_limits()
199 error = im->im_limits(idl, socket); in icl_limits()
200 sx_sunlock(&sc->sc_lock); in icl_limits()
211 (OUT_OF_RANGE(idl->idl_max_recv_data_segment_length, 512, 16777215) || in icl_limits()
212 OUT_OF_RANGE(idl->idl_max_send_data_segment_length, 512, 16777215) || in icl_limits()
213 OUT_OF_RANGE(idl->idl_max_burst_length, 512, 16777215) || in icl_limits()
214 OUT_OF_RANGE(idl->idl_first_burst_length, 512, 16777215))) { in icl_limits()
223 if (error == 0 && idl->idl_first_burst_length > 0 && in icl_limits()
224 idl->idl_max_burst_length > 0 && in icl_limits()
225 idl->idl_first_burst_length > idl->idl_max_burst_length) { in icl_limits()
237 struct icl_module *im; in icl_register() local
239 sx_xlock(&sc->sc_lock); in icl_register()
240 im = icl_find(offload, iser, true); in icl_register()
241 if (im != NULL) { in icl_register()
243 sx_xunlock(&sc->sc_lock); in icl_register()
247 im = malloc(sizeof(*im), M_ICL, M_ZERO | M_WAITOK); in icl_register()
248 im->im_name = strdup(offload, M_ICL); in icl_register()
249 im->im_iser = iser; in icl_register()
250 im->im_priority = priority; in icl_register()
251 im->im_limits = limits; in icl_register()
252 im->im_new_conn = new_conn; in icl_register()
254 TAILQ_INSERT_HEAD(&sc->sc_modules, im, im_next); in icl_register()
255 sx_xunlock(&sc->sc_lock); in icl_register()
264 struct icl_module *im; in icl_unregister() local
266 sx_xlock(&sc->sc_lock); in icl_unregister()
267 im = icl_find(offload, rdma, true); in icl_unregister()
268 if (im == NULL) { in icl_unregister()
270 sx_xunlock(&sc->sc_lock); in icl_unregister()
274 TAILQ_REMOVE(&sc->sc_modules, im, im_next); in icl_unregister()
275 sx_xunlock(&sc->sc_lock); in icl_unregister()
277 free(im->im_name, M_ICL); in icl_unregister()
278 free(im, M_ICL); in icl_unregister()
289 sx_init(&sc->sc_lock, "icl"); in icl_load()
290 TAILQ_INIT(&sc->sc_modules); in icl_load()
299 sx_slock(&sc->sc_lock); in icl_unload()
300 KASSERT(TAILQ_EMPTY(&sc->sc_modules), ("still have modules")); in icl_unload()
301 sx_sunlock(&sc->sc_lock); in icl_unload()
303 sx_destroy(&sc->sc_lock); in icl_unload()