diff options
Diffstat (limited to 'drivers/firewire/core-card.c')
| -rw-r--r-- | drivers/firewire/core-card.c | 27 | 
1 files changed, 16 insertions, 11 deletions
diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c index 3c44fbc81ac..29d2423fae6 100644 --- a/drivers/firewire/core-card.c +++ b/drivers/firewire/core-card.c @@ -228,8 +228,8 @@ void fw_schedule_bus_reset(struct fw_card *card, bool delayed, bool short_reset)  	/* Use an arbitrary short delay to combine multiple reset requests. */  	fw_card_get(card); -	if (!schedule_delayed_work(&card->br_work, -				   delayed ? DIV_ROUND_UP(HZ, 100) : 0)) +	if (!queue_delayed_work(fw_workqueue, &card->br_work, +				delayed ? DIV_ROUND_UP(HZ, 100) : 0))  		fw_card_put(card);  }  EXPORT_SYMBOL(fw_schedule_bus_reset); @@ -241,7 +241,7 @@ static void br_work(struct work_struct *work)  	/* Delay for 2s after last reset per IEEE 1394 clause 8.2.1. */  	if (card->reset_jiffies != 0 &&  	    time_before64(get_jiffies_64(), card->reset_jiffies + 2 * HZ)) { -		if (!schedule_delayed_work(&card->br_work, 2 * HZ)) +		if (!queue_delayed_work(fw_workqueue, &card->br_work, 2 * HZ))  			fw_card_put(card);  		return;  	} @@ -258,8 +258,7 @@ static void allocate_broadcast_channel(struct fw_card *card, int generation)  	if (!card->broadcast_channel_allocated) {  		fw_iso_resource_manage(card, generation, 1ULL << 31, -				       &channel, &bandwidth, true, -				       card->bm_transaction_data); +				       &channel, &bandwidth, true);  		if (channel != 31) {  			fw_notify("failed to allocate broadcast channel\n");  			return; @@ -294,6 +293,7 @@ static void bm_work(struct work_struct *work)  	bool root_device_is_cmc;  	bool irm_is_1394_1995_only;  	bool keep_this_irm; +	__be32 transaction_data[2];  	spin_lock_irq(&card->lock); @@ -355,21 +355,21 @@ static void bm_work(struct work_struct *work)  			goto pick_me;  		} -		card->bm_transaction_data[0] = cpu_to_be32(0x3f); -		card->bm_transaction_data[1] = cpu_to_be32(local_id); +		transaction_data[0] = cpu_to_be32(0x3f); +		transaction_data[1] = cpu_to_be32(local_id);  		spin_unlock_irq(&card->lock);  		rcode = fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,  				irm_id, generation, SCODE_100,  				CSR_REGISTER_BASE + CSR_BUS_MANAGER_ID, -				card->bm_transaction_data, 8); +				transaction_data, 8);  		if (rcode == RCODE_GENERATION)  			/* Another bus reset, BM work has been rescheduled. */  			goto out; -		bm_id = be32_to_cpu(card->bm_transaction_data[0]); +		bm_id = be32_to_cpu(transaction_data[0]);  		spin_lock_irq(&card->lock);  		if (rcode == RCODE_COMPLETE && generation == card->generation) @@ -490,11 +490,11 @@ static void bm_work(struct work_struct *work)  		/*  		 * Make sure that the cycle master sends cycle start packets.  		 */ -		card->bm_transaction_data[0] = cpu_to_be32(CSR_STATE_BIT_CMSTR); +		transaction_data[0] = cpu_to_be32(CSR_STATE_BIT_CMSTR);  		rcode = fw_run_transaction(card, TCODE_WRITE_QUADLET_REQUEST,  				root_id, generation, SCODE_100,  				CSR_REGISTER_BASE + CSR_STATE_SET, -				card->bm_transaction_data, 4); +				transaction_data, 4);  		if (rcode == RCODE_GENERATION)  			goto out;  	} @@ -630,6 +630,10 @@ static int dummy_queue_iso(struct fw_iso_context *ctx, struct fw_iso_packet *p,  	return -ENODEV;  } +static void dummy_flush_queue_iso(struct fw_iso_context *ctx) +{ +} +  static const struct fw_card_driver dummy_driver_template = {  	.read_phy_reg		= dummy_read_phy_reg,  	.update_phy_reg		= dummy_update_phy_reg, @@ -641,6 +645,7 @@ static const struct fw_card_driver dummy_driver_template = {  	.start_iso		= dummy_start_iso,  	.set_iso_channels	= dummy_set_iso_channels,  	.queue_iso		= dummy_queue_iso, +	.flush_queue_iso	= dummy_flush_queue_iso,  };  void fw_card_release(struct kref *kref)  |