Lines Matching refs:dispatch
710 oct->dispatch.dlist = (struct octeon_dispatch *) in octeon_allocate_device_mem()
842 oct->dispatch.count = 0; in octeon_init_dispatch_list()
845 oct->dispatch.dlist[i].opcode = 0; in octeon_init_dispatch_list()
846 INIT_LIST_HEAD(&oct->dispatch.dlist[i].list); in octeon_init_dispatch_list()
852 spin_lock_init(&oct->dispatch.lock); in octeon_init_dispatch_list()
864 spin_lock_bh(&oct->dispatch.lock); in octeon_delete_dispatch_list()
867 struct list_head *dispatch; in octeon_delete_dispatch_list() local
869 dispatch = &oct->dispatch.dlist[i].list; in octeon_delete_dispatch_list()
870 while (dispatch->next != dispatch) { in octeon_delete_dispatch_list()
871 temp = dispatch->next; in octeon_delete_dispatch_list()
876 oct->dispatch.dlist[i].opcode = 0; in octeon_delete_dispatch_list()
879 oct->dispatch.count = 0; in octeon_delete_dispatch_list()
881 spin_unlock_bh(&oct->dispatch.lock); in octeon_delete_dispatch_list()
894 struct list_head *dispatch; in octeon_get_dispatch() local
900 spin_lock_bh(&octeon_dev->dispatch.lock); in octeon_get_dispatch()
902 if (octeon_dev->dispatch.count == 0) { in octeon_get_dispatch()
903 spin_unlock_bh(&octeon_dev->dispatch.lock); in octeon_get_dispatch()
907 if (!(octeon_dev->dispatch.dlist[idx].opcode)) { in octeon_get_dispatch()
908 spin_unlock_bh(&octeon_dev->dispatch.lock); in octeon_get_dispatch()
912 if (octeon_dev->dispatch.dlist[idx].opcode == combined_opcode) { in octeon_get_dispatch()
913 fn = octeon_dev->dispatch.dlist[idx].dispatch_fn; in octeon_get_dispatch()
915 list_for_each(dispatch, in octeon_get_dispatch()
916 &octeon_dev->dispatch.dlist[idx].list) { in octeon_get_dispatch()
917 if (((struct octeon_dispatch *)dispatch)->opcode == in octeon_get_dispatch()
920 dispatch)->dispatch_fn; in octeon_get_dispatch()
926 spin_unlock_bh(&octeon_dev->dispatch.lock); in octeon_get_dispatch()
959 spin_lock_bh(&oct->dispatch.lock); in octeon_register_dispatch_fn()
961 if (oct->dispatch.dlist[idx].opcode == 0) { in octeon_register_dispatch_fn()
962 oct->dispatch.dlist[idx].opcode = combined_opcode; in octeon_register_dispatch_fn()
963 oct->dispatch.dlist[idx].dispatch_fn = fn; in octeon_register_dispatch_fn()
964 oct->dispatch.dlist[idx].arg = fn_arg; in octeon_register_dispatch_fn()
965 oct->dispatch.count++; in octeon_register_dispatch_fn()
966 spin_unlock_bh(&oct->dispatch.lock); in octeon_register_dispatch_fn()
970 spin_unlock_bh(&oct->dispatch.lock); in octeon_register_dispatch_fn()
977 struct octeon_dispatch *dispatch; in octeon_register_dispatch_fn() local
981 dispatch = (struct octeon_dispatch *) in octeon_register_dispatch_fn()
983 if (!dispatch) { in octeon_register_dispatch_fn()
988 dispatch->opcode = combined_opcode; in octeon_register_dispatch_fn()
989 dispatch->dispatch_fn = fn; in octeon_register_dispatch_fn()
990 dispatch->arg = fn_arg; in octeon_register_dispatch_fn()
995 spin_lock_bh(&oct->dispatch.lock); in octeon_register_dispatch_fn()
996 list_add(&dispatch->list, &oct->dispatch.dlist[idx].list); in octeon_register_dispatch_fn()
997 oct->dispatch.count++; in octeon_register_dispatch_fn()
998 spin_unlock_bh(&oct->dispatch.lock); in octeon_register_dispatch_fn()
1029 struct list_head *dispatch, *dfree = NULL, *tmp2; in octeon_unregister_dispatch_fn() local
1034 spin_lock_bh(&oct->dispatch.lock); in octeon_unregister_dispatch_fn()
1036 if (oct->dispatch.count == 0) { in octeon_unregister_dispatch_fn()
1037 spin_unlock_bh(&oct->dispatch.lock); in octeon_unregister_dispatch_fn()
1043 if (oct->dispatch.dlist[idx].opcode == combined_opcode) { in octeon_unregister_dispatch_fn()
1044 dispatch = &oct->dispatch.dlist[idx].list; in octeon_unregister_dispatch_fn()
1045 if (dispatch->next != dispatch) { in octeon_unregister_dispatch_fn()
1046 dispatch = dispatch->next; in octeon_unregister_dispatch_fn()
1047 oct->dispatch.dlist[idx].opcode = in octeon_unregister_dispatch_fn()
1048 ((struct octeon_dispatch *)dispatch)->opcode; in octeon_unregister_dispatch_fn()
1049 oct->dispatch.dlist[idx].dispatch_fn = in octeon_unregister_dispatch_fn()
1051 dispatch)->dispatch_fn; in octeon_unregister_dispatch_fn()
1052 oct->dispatch.dlist[idx].arg = in octeon_unregister_dispatch_fn()
1053 ((struct octeon_dispatch *)dispatch)->arg; in octeon_unregister_dispatch_fn()
1054 list_del(dispatch); in octeon_unregister_dispatch_fn()
1055 dfree = dispatch; in octeon_unregister_dispatch_fn()
1057 oct->dispatch.dlist[idx].opcode = 0; in octeon_unregister_dispatch_fn()
1058 oct->dispatch.dlist[idx].dispatch_fn = NULL; in octeon_unregister_dispatch_fn()
1059 oct->dispatch.dlist[idx].arg = NULL; in octeon_unregister_dispatch_fn()
1063 list_for_each_safe(dispatch, tmp2, in octeon_unregister_dispatch_fn()
1064 &(oct->dispatch.dlist[idx]. in octeon_unregister_dispatch_fn()
1066 if (((struct octeon_dispatch *)dispatch)->opcode == in octeon_unregister_dispatch_fn()
1068 list_del(dispatch); in octeon_unregister_dispatch_fn()
1069 dfree = dispatch; in octeon_unregister_dispatch_fn()
1076 oct->dispatch.count--; in octeon_unregister_dispatch_fn()
1078 spin_unlock_bh(&oct->dispatch.lock); in octeon_unregister_dispatch_fn()