Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc5f80b1 authored by Chris Boot's avatar Chris Boot Committed by Nicholas Bellinger
Browse files

firewire: Move fw_card kref functions into linux/firewire.h



When writing a firewire driver that doesn't deal with struct fw_device
objects (e.g. it only publishes FireWire units and doesn't subscribe to
them), you likely need to keep referenced to struct fw_card objects so
that you can send messages to other nodes. This patch moves
fw_card_put(), fw_card_get() and fw_card_release() into the public
include/linux/firewire.h header instead of drivers/firewire/core.h, and
adds EXPORT_SYMBOL_GPL(fw_card_release).

The firewire-sbp-target module requires these so it can keep a reference
to the fw_card object in order that it can fetch ORBs to execute and
read/write related data and status information.

Signed-off-by: default avatarChris Boot <bootc@bootc.net>
Acked-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
Cc: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 253d9237
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -676,6 +676,7 @@ void fw_card_release(struct kref *kref)


	complete(&card->done);
	complete(&card->done);
}
}
EXPORT_SYMBOL_GPL(fw_card_release);


void fw_core_remove_card(struct fw_card *card)
void fw_core_remove_card(struct fw_card *card)
{
{
+0 −15
Original line number Original line Diff line number Diff line
@@ -120,21 +120,6 @@ int fw_compute_block_crc(__be32 *block);
void fw_schedule_bus_reset(struct fw_card *card, bool delayed, bool short_reset);
void fw_schedule_bus_reset(struct fw_card *card, bool delayed, bool short_reset);
void fw_schedule_bm_work(struct fw_card *card, unsigned long delay);
void fw_schedule_bm_work(struct fw_card *card, unsigned long delay);


static inline struct fw_card *fw_card_get(struct fw_card *card)
{
	kref_get(&card->kref);

	return card;
}

void fw_card_release(struct kref *kref);

static inline void fw_card_put(struct fw_card *card)
{
	kref_put(&card->kref, fw_card_release);
}


/* -cdev */
/* -cdev */


extern const struct file_operations fw_device_ops;
extern const struct file_operations fw_device_ops;
+14 −0
Original line number Original line Diff line number Diff line
@@ -135,6 +135,20 @@ struct fw_card {
	__be32 maint_utility_register;
	__be32 maint_utility_register;
};
};


static inline struct fw_card *fw_card_get(struct fw_card *card)
{
	kref_get(&card->kref);

	return card;
}

void fw_card_release(struct kref *kref);

static inline void fw_card_put(struct fw_card *card)
{
	kref_put(&card->kref, fw_card_release);
}

struct fw_attribute_group {
struct fw_attribute_group {
	struct attribute_group *groups[2];
	struct attribute_group *groups[2];
	struct attribute_group group;
	struct attribute_group group;