Lines Matching refs:ixl_iw
47 static struct ixl_iw_state ixl_iw; variable
75 mtx_lock(&ixl_iw.mtx); in ixl_iw_invoke_op()
84 mtx_unlock(&ixl_iw.mtx); in ixl_iw_invoke_op()
88 mtx_unlock(&ixl_iw.mtx); in ixl_iw_invoke_op()
91 err = ixl_iw.ops->init(&info); in ixl_iw_invoke_op()
99 err = ixl_iw.ops->stop(&info); in ixl_iw_invoke_op()
117 mtx_destroy(&ixl_iw.mtx); in ixl_iw_uninit()
127 LIST_INIT(&ixl_iw.pfs); in ixl_iw_init()
128 mtx_init(&ixl_iw.mtx, "ixl_iw_pfs", NULL, MTX_DEF); in ixl_iw_init()
129 ixl_iw.registered = false; in ixl_iw_init()
147 mtx_lock(&ixl_iw.mtx); in ixl_iw_pf_init()
149 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_pf_init()
176 if (ixl_iw.registered) { in ixl_iw_pf_init()
178 taskqueue_enqueue(ixl_iw.tq, &pf_entry->iw_task); in ixl_iw_pf_init()
182 mtx_unlock(&ixl_iw.mtx); in ixl_iw_pf_init()
194 mtx_lock(&ixl_iw.mtx); in ixl_iw_pf_stop()
196 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_pf_stop()
208 if (ixl_iw.registered) in ixl_iw_pf_stop()
209 taskqueue_enqueue(ixl_iw.tq, &pf_entry->iw_task); in ixl_iw_pf_stop()
213 mtx_unlock(&ixl_iw.mtx); in ixl_iw_pf_stop()
229 mtx_lock(&ixl_iw.mtx); in ixl_iw_pf_attach()
231 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_pf_attach()
253 LIST_INSERT_HEAD(&ixl_iw.pfs, pf_entry, node); in ixl_iw_pf_attach()
258 mtx_unlock(&ixl_iw.mtx); in ixl_iw_pf_attach()
271 mtx_lock(&ixl_iw.mtx); in ixl_iw_pf_detach()
273 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_pf_detach()
295 mtx_unlock(&ixl_iw.mtx); in ixl_iw_pf_detach()
379 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_register()
397 mtx_lock(&ixl_iw.mtx); in ixl_iw_register()
398 if (ixl_iw.registered) { in ixl_iw_register()
403 ixl_iw.registered = true; in ixl_iw_register()
404 mtx_unlock(&ixl_iw.mtx); in ixl_iw_register()
406 ixl_iw.tq = taskqueue_create("ixl_iw", M_NOWAIT, in ixl_iw_register()
407 taskqueue_thread_enqueue, &ixl_iw.tq); in ixl_iw_register()
408 if (ixl_iw.tq == NULL) { in ixl_iw_register()
410 ixl_iw.registered = false; in ixl_iw_register()
413 taskqueue_start_threads(&ixl_iw.tq, 1, PI_NET, "ixl iw"); in ixl_iw_register()
415 ixl_iw.ops = malloc(sizeof(struct ixl_iw_ops), in ixl_iw_register()
417 if (ixl_iw.ops == NULL) { in ixl_iw_register()
419 taskqueue_free(ixl_iw.tq); in ixl_iw_register()
420 ixl_iw.registered = false; in ixl_iw_register()
424 ixl_iw.ops->init = ops->init; in ixl_iw_register()
425 ixl_iw.ops->stop = ops->stop; in ixl_iw_register()
427 mtx_lock(&ixl_iw.mtx); in ixl_iw_register()
428 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_register()
431 taskqueue_enqueue(ixl_iw.tq, &pf_entry->iw_task); in ixl_iw_register()
434 mtx_unlock(&ixl_iw.mtx); in ixl_iw_register()
447 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_unregister()
460 mtx_lock(&ixl_iw.mtx); in ixl_iw_unregister()
462 if (!ixl_iw.registered) { in ixl_iw_unregister()
465 mtx_unlock(&ixl_iw.mtx); in ixl_iw_unregister()
469 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_unregister()
472 taskqueue_enqueue(ixl_iw.tq, &pf_entry->iw_task); in ixl_iw_unregister()
475 ixl_iw.registered = false; in ixl_iw_unregister()
477 mtx_unlock(&ixl_iw.mtx); in ixl_iw_unregister()
479 LIST_FOREACH(pf_entry, &ixl_iw.pfs, node) in ixl_iw_unregister()
480 taskqueue_drain(ixl_iw.tq, &pf_entry->iw_task); in ixl_iw_unregister()
481 taskqueue_free(ixl_iw.tq); in ixl_iw_unregister()
482 ixl_iw.tq = NULL; in ixl_iw_unregister()
483 free(ixl_iw.ops, M_IXL); in ixl_iw_unregister()
484 ixl_iw.ops = NULL; in ixl_iw_unregister()