Lines Matching refs:dispatch
309 oct->dispatch.dlist = (struct lio_dispatch *)(buf + configsize); in lio_allocate_device_mem()
521 oct->dispatch.count = 0; in lio_init_dispatch_list()
524 oct->dispatch.dlist[i].opcode = 0; in lio_init_dispatch_list()
525 STAILQ_INIT(&oct->dispatch.dlist[i].head); in lio_init_dispatch_list()
528 mtx_init(&oct->dispatch.lock, "dispatch_lock", NULL, MTX_DEF); in lio_init_dispatch_list()
542 mtx_lock(&oct->dispatch.lock); in lio_delete_dispatch_list()
545 struct lio_stailq_head *dispatch; in lio_delete_dispatch_list() local
547 dispatch = &oct->dispatch.dlist[i].head; in lio_delete_dispatch_list()
548 while (!STAILQ_EMPTY(dispatch)) { in lio_delete_dispatch_list()
549 temp = STAILQ_FIRST(dispatch); in lio_delete_dispatch_list()
550 STAILQ_REMOVE_HEAD(&oct->dispatch.dlist[i].head, in lio_delete_dispatch_list()
555 oct->dispatch.dlist[i].opcode = 0; in lio_delete_dispatch_list()
558 oct->dispatch.count = 0; in lio_delete_dispatch_list()
560 mtx_unlock(&oct->dispatch.lock); in lio_delete_dispatch_list()
572 struct lio_stailq_node *dispatch; in lio_get_dispatch() local
579 mtx_lock(&octeon_dev->dispatch.lock); in lio_get_dispatch()
581 if (octeon_dev->dispatch.count == 0) { in lio_get_dispatch()
582 mtx_unlock(&octeon_dev->dispatch.lock); in lio_get_dispatch()
586 if (!(octeon_dev->dispatch.dlist[idx].opcode)) { in lio_get_dispatch()
587 mtx_unlock(&octeon_dev->dispatch.lock); in lio_get_dispatch()
591 if (octeon_dev->dispatch.dlist[idx].opcode == combined_opcode) { in lio_get_dispatch()
592 fn = octeon_dev->dispatch.dlist[idx].dispatch_fn; in lio_get_dispatch()
594 STAILQ_FOREACH(dispatch, &octeon_dev->dispatch.dlist[idx].head, in lio_get_dispatch()
596 if (((struct lio_dispatch *)dispatch)->opcode == in lio_get_dispatch()
599 dispatch)->dispatch_fn; in lio_get_dispatch()
605 mtx_unlock(&octeon_dev->dispatch.lock); in lio_get_dispatch()
637 mtx_lock(&oct->dispatch.lock); in lio_register_dispatch_fn()
639 if (oct->dispatch.dlist[idx].opcode == 0) { in lio_register_dispatch_fn()
640 oct->dispatch.dlist[idx].opcode = combined_opcode; in lio_register_dispatch_fn()
641 oct->dispatch.dlist[idx].dispatch_fn = fn; in lio_register_dispatch_fn()
642 oct->dispatch.dlist[idx].arg = fn_arg; in lio_register_dispatch_fn()
643 oct->dispatch.count++; in lio_register_dispatch_fn()
644 mtx_unlock(&oct->dispatch.lock); in lio_register_dispatch_fn()
648 mtx_unlock(&oct->dispatch.lock); in lio_register_dispatch_fn()
656 struct lio_dispatch *dispatch; in lio_register_dispatch_fn() local
660 dispatch = (struct lio_dispatch *) in lio_register_dispatch_fn()
663 if (dispatch == NULL) { in lio_register_dispatch_fn()
669 dispatch->opcode = combined_opcode; in lio_register_dispatch_fn()
670 dispatch->dispatch_fn = fn; in lio_register_dispatch_fn()
671 dispatch->arg = fn_arg; in lio_register_dispatch_fn()
677 mtx_lock(&oct->dispatch.lock); in lio_register_dispatch_fn()
678 STAILQ_INSERT_HEAD(&oct->dispatch.dlist[idx].head, in lio_register_dispatch_fn()
679 &dispatch->node, entries); in lio_register_dispatch_fn()
680 oct->dispatch.count++; in lio_register_dispatch_fn()
681 mtx_unlock(&oct->dispatch.lock); in lio_register_dispatch_fn()
711 struct lio_stailq_node *dispatch, *dfree = NULL, *tmp2; in lio_unregister_dispatch_fn() local
718 mtx_lock(&oct->dispatch.lock); in lio_unregister_dispatch_fn()
720 if (oct->dispatch.count == 0) { in lio_unregister_dispatch_fn()
721 mtx_unlock(&oct->dispatch.lock); in lio_unregister_dispatch_fn()
725 if (oct->dispatch.dlist[idx].opcode == combined_opcode) { in lio_unregister_dispatch_fn()
726 dispatch_head = &oct->dispatch.dlist[idx].head; in lio_unregister_dispatch_fn()
728 dispatch = STAILQ_FIRST(dispatch_head); in lio_unregister_dispatch_fn()
729 oct->dispatch.dlist[idx].opcode = in lio_unregister_dispatch_fn()
730 ((struct lio_dispatch *)dispatch)->opcode; in lio_unregister_dispatch_fn()
731 oct->dispatch.dlist[idx].dispatch_fn = in lio_unregister_dispatch_fn()
732 ((struct lio_dispatch *)dispatch)->dispatch_fn; in lio_unregister_dispatch_fn()
733 oct->dispatch.dlist[idx].arg = in lio_unregister_dispatch_fn()
734 ((struct lio_dispatch *)dispatch)->arg; in lio_unregister_dispatch_fn()
736 dfree = dispatch; in lio_unregister_dispatch_fn()
738 oct->dispatch.dlist[idx].opcode = 0; in lio_unregister_dispatch_fn()
739 oct->dispatch.dlist[idx].dispatch_fn = NULL; in lio_unregister_dispatch_fn()
740 oct->dispatch.dlist[idx].arg = NULL; in lio_unregister_dispatch_fn()
744 STAILQ_FOREACH_SAFE(dispatch, in lio_unregister_dispatch_fn()
745 &oct->dispatch.dlist[idx].head, in lio_unregister_dispatch_fn()
747 if (((struct lio_dispatch *)dispatch)->opcode == in lio_unregister_dispatch_fn()
749 STAILQ_REMOVE(&oct->dispatch.dlist[idx].head, in lio_unregister_dispatch_fn()
750 dispatch, in lio_unregister_dispatch_fn()
752 dfree = dispatch; in lio_unregister_dispatch_fn()
759 oct->dispatch.count--; in lio_unregister_dispatch_fn()
761 mtx_unlock(&oct->dispatch.lock); in lio_unregister_dispatch_fn()