Lines Matching defs:handler
38 /* returns 0 if the split timeout handler is already running */
565 struct fw_address_handler *handler;
567 list_for_each_entry_rcu(handler, list, link) {
568 if (handler->offset < offset + length &&
569 offset < handler->offset + handler->length)
570 return handler;
576 static bool is_enclosing_handler(struct fw_address_handler *handler,
579 return handler->offset <= offset &&
580 offset + length <= handler->offset + handler->length;
586 struct fw_address_handler *handler;
588 list_for_each_entry_rcu(handler, list, link) {
589 if (is_enclosing_handler(handler, offset, length))
590 return handler;
618 struct fw_address_handler *handler = container_of(kref, struct fw_address_handler, kref);
620 complete(&handler->done);
623 static void get_address_handler(struct fw_address_handler *handler)
625 kref_get(&handler->kref);
628 static int put_address_handler(struct fw_address_handler *handler)
630 return kref_put(&handler->kref, complete_address_handler);
635 * @handler: callback
638 * region->start, ->end, and handler->length have to be quadlet-aligned.
648 * The start offset of the handler's address region is determined by
649 * fw_core_add_address_handler() and is returned in handler->offset.
653 int fw_core_add_address_handler(struct fw_address_handler *handler,
662 handler->length & 3 ||
663 handler->length == 0)
668 handler->offset = region->start;
669 while (handler->offset + handler->length <= region->end) {
670 if (is_in_fcp_region(handler->offset, handler->length))
675 handler->offset, handler->length);
677 handler->offset += other->length;
679 init_completion(&handler->done);
680 kref_init(&handler->kref);
681 list_add_tail_rcu(&handler->link, &address_handler_list);
692 * fw_core_remove_address_handler() - unregister an address handler
693 * @handler: callback
697 * When fw_core_remove_address_handler() returns, @handler->callback() is
700 void fw_core_remove_address_handler(struct fw_address_handler *handler)
703 list_del_rcu(&handler->link);
707 if (!put_address_handler(handler))
708 wait_for_completion(&handler->done);
995 struct fw_address_handler *handler;
1005 handler = lookup_enclosing_address_handler(&address_handler_list, offset,
1007 if (handler)
1008 get_address_handler(handler);
1011 if (!handler) {
1017 handler->address_callback(card, request, tcode, destination, source, p->generation, offset,
1018 request->data, request->length, handler->callback_data);
1019 put_address_handler(handler);
1031 struct fw_address_handler *handler, **handlers;
1057 list_for_each_entry_rcu(handler, &address_handler_list, link) {
1058 if (is_enclosing_handler(handler, offset, request->length)) {
1085 get_address_handler(handler);
1086 handlers[count++] = handler;
1092 handler = handlers[i];
1093 handler->address_callback(card, request, tcode, destination, source,
1095 request->length, handler->callback_data);
1096 put_address_handler(handler);
1200 * The response handler may be executed while the request handler
1201 * is still pending. Cancel the request handler.