Lines Matching refs:handler
560 struct fw_address_handler *handler; in lookup_overlapping_address_handler() local
562 list_for_each_entry_rcu(handler, list, link) { in lookup_overlapping_address_handler()
563 if (handler->offset < offset + length && in lookup_overlapping_address_handler()
564 offset < handler->offset + handler->length) in lookup_overlapping_address_handler()
565 return handler; in lookup_overlapping_address_handler()
571 static bool is_enclosing_handler(struct fw_address_handler *handler, in is_enclosing_handler() argument
574 return handler->offset <= offset && in is_enclosing_handler()
575 offset + length <= handler->offset + handler->length; in is_enclosing_handler()
581 struct fw_address_handler *handler; in lookup_enclosing_address_handler() local
583 list_for_each_entry_rcu(handler, list, link) { in lookup_enclosing_address_handler()
584 if (is_enclosing_handler(handler, offset, length)) in lookup_enclosing_address_handler()
585 return handler; in lookup_enclosing_address_handler()
613 struct fw_address_handler *handler = container_of(kref, struct fw_address_handler, kref); in complete_address_handler() local
615 complete(&handler->done); in complete_address_handler()
618 static void get_address_handler(struct fw_address_handler *handler) in get_address_handler() argument
620 kref_get(&handler->kref); in get_address_handler()
623 static int put_address_handler(struct fw_address_handler *handler) in put_address_handler() argument
625 return kref_put(&handler->kref, complete_address_handler); in put_address_handler()
648 int fw_core_add_address_handler(struct fw_address_handler *handler, in fw_core_add_address_handler() argument
657 handler->length & 3 || in fw_core_add_address_handler()
658 handler->length == 0) in fw_core_add_address_handler()
663 handler->offset = region->start; in fw_core_add_address_handler()
664 while (handler->offset + handler->length <= region->end) { in fw_core_add_address_handler()
665 if (is_in_fcp_region(handler->offset, handler->length)) in fw_core_add_address_handler()
670 handler->offset, handler->length); in fw_core_add_address_handler()
672 handler->offset += other->length; in fw_core_add_address_handler()
674 init_completion(&handler->done); in fw_core_add_address_handler()
675 kref_init(&handler->kref); in fw_core_add_address_handler()
676 list_add_tail_rcu(&handler->link, &address_handler_list); in fw_core_add_address_handler()
695 void fw_core_remove_address_handler(struct fw_address_handler *handler) in fw_core_remove_address_handler() argument
698 list_del_rcu(&handler->link); in fw_core_remove_address_handler()
702 if (!put_address_handler(handler)) in fw_core_remove_address_handler()
703 wait_for_completion(&handler->done); in fw_core_remove_address_handler()
990 struct fw_address_handler *handler; in handle_exclusive_region_request() local
1000 handler = lookup_enclosing_address_handler(&address_handler_list, offset, in handle_exclusive_region_request()
1002 if (handler) in handle_exclusive_region_request()
1003 get_address_handler(handler); in handle_exclusive_region_request()
1006 if (!handler) { in handle_exclusive_region_request()
1012 handler->address_callback(card, request, tcode, destination, source, p->generation, offset, in handle_exclusive_region_request()
1013 request->data, request->length, handler->callback_data); in handle_exclusive_region_request()
1014 put_address_handler(handler); in handle_exclusive_region_request()
1026 struct fw_address_handler *handler, **handlers; in handle_fcp_region_request() local
1052 list_for_each_entry_rcu(handler, &address_handler_list, link) { in handle_fcp_region_request()
1053 if (is_enclosing_handler(handler, offset, request->length)) { in handle_fcp_region_request()
1080 get_address_handler(handler); in handle_fcp_region_request()
1081 handlers[count++] = handler; in handle_fcp_region_request()
1087 handler = handlers[i]; in handle_fcp_region_request()
1088 handler->address_callback(card, request, tcode, destination, source, in handle_fcp_region_request()
1090 request->length, handler->callback_data); in handle_fcp_region_request()
1091 put_address_handler(handler); in handle_fcp_region_request()