core-card.c 18.8 KB
Newer Older
1 2
/*
 * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net>
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

S
Stefan Richter 已提交
19
#include <linux/bug.h>
20 21
#include <linux/completion.h>
#include <linux/crc-itu-t.h>
22
#include <linux/device.h>
23
#include <linux/errno.h>
24 25
#include <linux/firewire.h>
#include <linux/firewire-constants.h>
S
Stefan Richter 已提交
26 27
#include <linux/jiffies.h>
#include <linux/kernel.h>
28
#include <linux/kref.h>
S
Stefan Richter 已提交
29
#include <linux/list.h>
30
#include <linux/module.h>
31
#include <linux/mutex.h>
S
Stefan Richter 已提交
32 33 34 35 36
#include <linux/spinlock.h>
#include <linux/workqueue.h>

#include <asm/atomic.h>
#include <asm/byteorder.h>
37

38
#include "core.h"
39

40
int fw_compute_block_crc(__be32 *block)
41 42 43 44 45 46 47 48 49 50 51
{
	int length;
	u16 crc;

	length = (be32_to_cpu(block[0]) >> 16) & 0xff;
	crc = crc_itu_t(0, (u8 *)&block[1], length * 4);
	*block |= cpu_to_be32(crc);

	return length;
}

52
static DEFINE_MUTEX(card_mutex);
53 54 55 56 57
static LIST_HEAD(card_list);

static LIST_HEAD(descriptor_list);
static int descriptor_count;

58
static __be32 tmp_config_rom[256];
59 60
/* ROM header, bus info block, root dir header, capabilities = 7 quadlets */
static size_t config_rom_length = 1 + 4 + 1 + 1;
61

62 63 64
#define BIB_CRC(v)		((v) <<  0)
#define BIB_CRC_LENGTH(v)	((v) << 16)
#define BIB_INFO_LENGTH(v)	((v) << 24)
65
#define BIB_BUS_NAME		0x31333934 /* "1394" */
66 67 68 69 70 71 72 73 74
#define BIB_LINK_SPEED(v)	((v) <<  0)
#define BIB_GENERATION(v)	((v) <<  4)
#define BIB_MAX_ROM(v)		((v) <<  8)
#define BIB_MAX_RECEIVE(v)	((v) << 12)
#define BIB_CYC_CLK_ACC(v)	((v) << 16)
#define BIB_PMC			((1) << 27)
#define BIB_BMC			((1) << 28)
#define BIB_ISC			((1) << 29)
#define BIB_CMC			((1) << 30)
75 76
#define BIB_IRMC		((1) << 31)
#define NODE_CAPABILITIES	0x0c0083c0 /* per IEEE 1394 clause 8.3.2.6.5.2 */
77

78 79 80 81 82 83 84
/*
 * IEEE-1394 specifies a default SPLIT_TIMEOUT value of 800 cycles (100 ms),
 * but we have to make it longer because there are many devices whose firmware
 * is just too slow for that.
 */
#define DEFAULT_SPLIT_TIMEOUT	(2 * 8000)

85 86
#define CANON_OUI		0x000085

87
static void generate_config_rom(struct fw_card *card, __be32 *config_rom)
88 89
{
	struct fw_descriptor *desc;
90
	int i, j, k, length;
91

92 93
	/*
	 * Initialize contents of config rom buffer.  On the OHCI
94 95 96
	 * controller, block reads to the config rom accesses the host
	 * memory, but quadlet read access the hardware bus info block
	 * registers.  That's just crack, but it means we should make
J
Jay Fenlason 已提交
97
	 * sure the contents of bus info block in host memory matches
98 99
	 * the version stored in the OHCI registers.
	 */
100

101 102
	config_rom[0] = cpu_to_be32(
		BIB_CRC_LENGTH(4) | BIB_INFO_LENGTH(4) | BIB_CRC(0));
103
	config_rom[1] = cpu_to_be32(BIB_BUS_NAME);
104
	config_rom[2] = cpu_to_be32(
105 106 107 108
		BIB_LINK_SPEED(card->link_speed) |
		BIB_GENERATION(card->config_rom_generation++ % 14 + 2) |
		BIB_MAX_ROM(2) |
		BIB_MAX_RECEIVE(card->max_receive) |
109
		BIB_BMC | BIB_ISC | BIB_CMC | BIB_IRMC);
110 111
	config_rom[3] = cpu_to_be32(card->guid >> 32);
	config_rom[4] = cpu_to_be32(card->guid);
112 113

	/* Generate root directory. */
114
	config_rom[6] = cpu_to_be32(NODE_CAPABILITIES);
115 116
	i = 7;
	j = 7 + descriptor_count;
117 118 119

	/* Generate root directory entries for descriptors. */
	list_for_each_entry (desc, &descriptor_list, link) {
120
		if (desc->immediate > 0)
121 122
			config_rom[i++] = cpu_to_be32(desc->immediate);
		config_rom[i] = cpu_to_be32(desc->key | (j - i));
123 124 125 126 127
		i++;
		j += desc->length;
	}

	/* Update root directory length. */
128
	config_rom[5] = cpu_to_be32((i - 5 - 1) << 16);
129 130 131

	/* End of root directory, now copy in descriptors. */
	list_for_each_entry (desc, &descriptor_list, link) {
132 133
		for (k = 0; k < desc->length; k++)
			config_rom[i + k] = cpu_to_be32(desc->data[k]);
134 135 136 137 138 139 140
		i += desc->length;
	}

	/* Calculate CRCs for all blocks in the config rom.  This
	 * assumes that CRC length and info length are identical for
	 * the bus info block, which is always the case for this
	 * implementation. */
141
	for (i = 0; i < j; i += length + 1)
142
		length = fw_compute_block_crc(config_rom + i);
143

144
	WARN_ON(j != config_rom_length);
145 146
}

147
static void update_config_roms(void)
148 149 150 151
{
	struct fw_card *card;

	list_for_each_entry (card, &card_list, link) {
152 153 154
		generate_config_rom(card, tmp_config_rom);
		card->driver->set_config_rom(card, tmp_config_rom,
					     config_rom_length);
155 156 157
	}
}

158 159 160 161 162 163
static size_t required_space(struct fw_descriptor *desc)
{
	/* descriptor + entry into root dir + optional immediate entry */
	return desc->length + 1 + (desc->immediate > 0 ? 1 : 0);
}

164
int fw_core_add_descriptor(struct fw_descriptor *desc)
165 166
{
	size_t i;
167
	int ret;
168

169 170
	/*
	 * Check descriptor is valid; the length of all blocks in the
171
	 * descriptor has to add up to exactly the length of the
172 173
	 * block.
	 */
174 175 176 177 178
	i = 0;
	while (i < desc->length)
		i += (desc->data[i] >> 16) + 1;

	if (i != desc->length)
179
		return -EINVAL;
180

181
	mutex_lock(&card_mutex);
182

183 184 185 186 187
	if (config_rom_length + required_space(desc) > 256) {
		ret = -EBUSY;
	} else {
		list_add_tail(&desc->link, &descriptor_list);
		config_rom_length += required_space(desc);
188
		descriptor_count++;
189 190 191 192 193
		if (desc->immediate > 0)
			descriptor_count++;
		update_config_roms();
		ret = 0;
	}
194

195
	mutex_unlock(&card_mutex);
196

197
	return ret;
198
}
J
Jay Fenlason 已提交
199
EXPORT_SYMBOL(fw_core_add_descriptor);
200

201
void fw_core_remove_descriptor(struct fw_descriptor *desc)
202
{
203
	mutex_lock(&card_mutex);
204 205

	list_del(&desc->link);
206
	config_rom_length -= required_space(desc);
207
	descriptor_count--;
208 209
	if (desc->immediate > 0)
		descriptor_count--;
210 211
	update_config_roms();

212
	mutex_unlock(&card_mutex);
213
}
J
Jay Fenlason 已提交
214
EXPORT_SYMBOL(fw_core_remove_descriptor);
215

216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
static int reset_bus(struct fw_card *card, bool short_reset)
{
	int reg = short_reset ? 5 : 1;
	int bit = short_reset ? PHY_BUS_SHORT_RESET : PHY_BUS_RESET;

	return card->driver->update_phy_reg(card, reg, 0, bit);
}

void fw_schedule_bus_reset(struct fw_card *card, bool delayed, bool short_reset)
{
	/* We don't try hard to sort out requests of long vs. short resets. */
	card->br_short = 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))
		fw_card_put(card);
}
EXPORT_SYMBOL(fw_schedule_bus_reset);

static void br_work(struct work_struct *work)
{
	struct fw_card *card = container_of(work, struct fw_card, br_work.work);

	/* Delay for 2s after last reset per IEEE 1394 clause 8.2.1. */
	if (card->reset_jiffies != 0 &&
243
	    time_before64(get_jiffies_64(), card->reset_jiffies + 2 * HZ)) {
244 245 246 247 248 249 250 251 252 253 254
		if (!schedule_delayed_work(&card->br_work, 2 * HZ))
			fw_card_put(card);
		return;
	}

	fw_send_phy_config(card, FW_PHY_CONFIG_NO_NODE_ID, card->generation,
			   FW_PHY_CONFIG_CURRENT_GAP_COUNT);
	reset_bus(card, card->br_short);
	fw_card_put(card);
}

255
static void allocate_broadcast_channel(struct fw_card *card, int generation)
256
{
257 258
	int channel, bandwidth = 0;

259 260 261 262 263 264 265 266
	if (!card->broadcast_channel_allocated) {
		fw_iso_resource_manage(card, generation, 1ULL << 31,
				       &channel, &bandwidth, true,
				       card->bm_transaction_data);
		if (channel != 31) {
			fw_notify("failed to allocate broadcast channel\n");
			return;
		}
267
		card->broadcast_channel_allocated = true;
268
	}
269 270 271

	device_for_each_child(card->device, (void *)(long)generation,
			      fw_device_set_broadcast_channel);
272 273
}

274 275 276 277
static const char gap_count_table[] = {
	63, 5, 7, 8, 10, 13, 16, 18, 21, 24, 26, 29, 32, 35, 37, 40
};

278
void fw_schedule_bm_work(struct fw_card *card, unsigned long delay)
279 280
{
	fw_card_get(card);
281
	if (!schedule_delayed_work(&card->bm_work, delay))
282 283 284
		fw_card_put(card);
}

285
static void bm_work(struct work_struct *work)
286
{
287
	struct fw_card *card = container_of(work, struct fw_card, bm_work.work);
288
	struct fw_device *root_device, *irm_device;
289
	struct fw_node *root_node;
290
	int root_id, new_root_id, irm_id, bm_id, local_id;
291
	int gap_count, generation, grace, rcode;
292
	bool do_reset = false;
293 294
	bool root_device_is_running;
	bool root_device_is_cmc;
295
	bool irm_is_1394_1995_only;
296
	bool keep_this_irm;
297

298
	spin_lock_irq(&card->lock);
299

300
	if (card->local_node == NULL) {
301
		spin_unlock_irq(&card->lock);
302
		goto out_put_card;
303
	}
304 305

	generation = card->generation;
306

307 308
	root_node = card->root_node;
	fw_node_get(root_node);
309
	root_device = root_node->data;
310 311 312
	root_device_is_running = root_device &&
			atomic_read(&root_device->state) == FW_DEVICE_RUNNING;
	root_device_is_cmc = root_device && root_device->cmc;
313 314 315 316 317

	irm_device = card->irm_node->data;
	irm_is_1394_1995_only = irm_device && irm_device->config_rom &&
			(irm_device->config_rom[2] & 0x000000f0) == 0;

318 319 320 321
	/* Canon MV5i works unreliably if it is not root node. */
	keep_this_irm = irm_device && irm_device->config_rom &&
			irm_device->config_rom[3] >> 8 == CANON_OUI;

322 323 324
	root_id  = root_node->node_id;
	irm_id   = card->irm_node->node_id;
	local_id = card->local_node->node_id;
325

326 327
	grace = time_after64(get_jiffies_64(),
			     card->reset_jiffies + DIV_ROUND_UP(HZ, 8));
328

329 330
	if ((is_next_generation(generation, card->bm_generation) &&
	     !card->bm_abdicate) ||
331
	    (card->bm_generation != generation && grace)) {
332 333
		/*
		 * This first step is to figure out who is IRM and
334 335 336 337 338 339 340
		 * then try to become bus manager.  If the IRM is not
		 * well defined (e.g. does not have an active link
		 * layer or does not responds to our lock request, we
		 * will have to do a little vigilante bus management.
		 * In that case, we do a goto into the gap count logic
		 * so that when we do the reset, we still optimize the
		 * gap count.  That could well save a reset in the
341 342
		 * next generation.
		 */
343

344 345
		if (!card->irm_node->link_on) {
			new_root_id = local_id;
346 347 348 349 350
			fw_notify("%s, making local node (%02x) root.\n",
				  "IRM has link off", new_root_id);
			goto pick_me;
		}

351
		if (irm_is_1394_1995_only && !keep_this_irm) {
352 353 354
			new_root_id = local_id;
			fw_notify("%s, making local node (%02x) root.\n",
				  "IRM is not 1394a compliant", new_root_id);
355 356 357
			goto pick_me;
		}

358 359
		card->bm_transaction_data[0] = cpu_to_be32(0x3f);
		card->bm_transaction_data[1] = cpu_to_be32(local_id);
360

361
		spin_unlock_irq(&card->lock);
362

J
Jay Fenlason 已提交
363 364 365
		rcode = fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,
				irm_id, generation, SCODE_100,
				CSR_REGISTER_BASE + CSR_BUS_MANAGER_ID,
366
				card->bm_transaction_data, 8);
367

J
Jay Fenlason 已提交
368 369
		if (rcode == RCODE_GENERATION)
			/* Another bus reset, BM work has been rescheduled. */
370
			goto out;
371

372
		bm_id = be32_to_cpu(card->bm_transaction_data[0]);
373

374 375 376 377 378
		spin_lock_irq(&card->lock);
		if (rcode == RCODE_COMPLETE && generation == card->generation)
			card->bm_node_id =
			    bm_id == 0x3f ? local_id : 0xffc0 | bm_id;
		spin_unlock_irq(&card->lock);
379

380
		if (rcode == RCODE_COMPLETE && bm_id != 0x3f) {
381 382 383 384
			/* Somebody else is BM.  Only act as IRM. */
			if (local_id == irm_id)
				allocate_broadcast_channel(card, generation);

385
			goto out;
386
		}
387

388 389 390 391 392 393 394 395 396 397
		if (rcode == RCODE_SEND_ERROR) {
			/*
			 * We have been unable to send the lock request due to
			 * some local problem.  Let's try again later and hope
			 * that the problem has gone away by then.
			 */
			fw_schedule_bm_work(card, DIV_ROUND_UP(HZ, 8));
			goto out;
		}

398
		spin_lock_irq(&card->lock);
J
Jay Fenlason 已提交
399

400
		if (rcode != RCODE_COMPLETE && !keep_this_irm) {
401 402
			/*
			 * The lock request failed, maybe the IRM
403 404
			 * isn't really IRM capable after all. Let's
			 * do a bus reset and pick the local node as
405 406
			 * root, and thus, IRM.
			 */
407
			new_root_id = local_id;
408 409
			fw_notify("%s, making local node (%02x) root.\n",
				  "BM lock failed", new_root_id);
410 411 412
			goto pick_me;
		}
	} else if (card->bm_generation != generation) {
413
		/*
414 415
		 * We weren't BM in the last generation, and the last
		 * bus reset is less than 125ms ago.  Reschedule this job.
416
		 */
417
		spin_unlock_irq(&card->lock);
418
		fw_schedule_bm_work(card, DIV_ROUND_UP(HZ, 8));
419
		goto out;
420 421
	}

422 423
	/*
	 * We're bus manager for this generation, so next step is to
424
	 * make sure we have an active cycle master and do gap count
425 426
	 * optimization.
	 */
427
	card->bm_generation = generation;
428

429
	if (root_device == NULL) {
430 431 432 433
		/*
		 * Either link_on is false, or we failed to read the
		 * config rom.  In either case, pick another root.
		 */
434
		new_root_id = local_id;
435
	} else if (!root_device_is_running) {
436 437 438 439
		/*
		 * If we haven't probed this device yet, bail out now
		 * and let's try again once that's done.
		 */
440
		spin_unlock_irq(&card->lock);
441
		goto out;
442
	} else if (root_device_is_cmc) {
443
		/*
444 445
		 * We will send out a force root packet for this
		 * node as part of the gap count optimization.
446
		 */
447
		new_root_id = root_id;
448
	} else {
449 450
		/*
		 * Current root has an active link layer and we
451
		 * successfully read the config rom, but it's not
452 453
		 * cycle master capable.
		 */
454
		new_root_id = local_id;
455 456
	}

457
 pick_me:
458 459 460 461 462
	/*
	 * Pick a gap count from 1394a table E-1.  The table doesn't cover
	 * the typically much larger 1394b beta repeater delays though.
	 */
	if (!card->beta_repeaters_present &&
463 464
	    root_node->max_hops < ARRAY_SIZE(gap_count_table))
		gap_count = gap_count_table[root_node->max_hops];
465 466 467
	else
		gap_count = 63;

468
	/*
469 470
	 * Finally, figure out if we should do a reset or not.  If we have
	 * done less than 5 resets with the same physical topology and we
471 472
	 * have either a new root or a new gap count setting, let's do it.
	 */
473

474 475
	if (card->bm_retries++ < 5 &&
	    (card->gap_count != gap_count || new_root_id != root_id))
476
		do_reset = true;
477

478
	spin_unlock_irq(&card->lock);
479

480 481
	if (do_reset) {
		fw_notify("phy config: card %d, new root=%x, gap_count=%d\n",
482 483
			  card->index, new_root_id, gap_count);
		fw_send_phy_config(card, new_root_id, generation, gap_count);
484
		reset_bus(card, true);
485
		/* Will allocate broadcast channel after the reset. */
486
		goto out;
487
	}
488

489 490 491 492 493 494 495 496
	if (root_device_is_cmc) {
		/*
		 * Make sure that the cycle master sends cycle start packets.
		 */
		card->bm_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,
497
				card->bm_transaction_data, 4);
498 499
		if (rcode == RCODE_GENERATION)
			goto out;
500
	}
501

502 503 504
	if (local_id == irm_id)
		allocate_broadcast_channel(card, generation);

505 506
 out:
	fw_node_put(root_node);
507 508
 out_put_card:
	fw_card_put(card);
509 510
}

511 512 513
void fw_card_initialize(struct fw_card *card,
			const struct fw_card_driver *driver,
			struct device *device)
514
{
515
	static atomic_t index = ATOMIC_INIT(-1);
516

517
	card->index = atomic_inc_return(&index);
518
	card->driver = driver;
519
	card->device = device;
520 521
	card->current_tlabel = 0;
	card->tlabel_mask = 0;
522 523 524 525 526
	card->split_timeout_hi = DEFAULT_SPLIT_TIMEOUT / 8000;
	card->split_timeout_lo = (DEFAULT_SPLIT_TIMEOUT % 8000) << 19;
	card->split_timeout_cycles = DEFAULT_SPLIT_TIMEOUT;
	card->split_timeout_jiffies =
			DIV_ROUND_UP(DEFAULT_SPLIT_TIMEOUT * HZ, 8000);
527
	card->color = 0;
528
	card->broadcast_channel = BROADCAST_CHANNEL_INITIAL;
529

530 531
	kref_init(&card->kref);
	init_completion(&card->done);
532
	INIT_LIST_HEAD(&card->transaction_list);
533
	INIT_LIST_HEAD(&card->phy_receiver_list);
534 535 536 537
	spin_lock_init(&card->lock);

	card->local_node = NULL;

538 539
	INIT_DELAYED_WORK(&card->br_work, br_work);
	INIT_DELAYED_WORK(&card->bm_work, bm_work);
540 541 542
}
EXPORT_SYMBOL(fw_card_initialize);

543 544
int fw_card_add(struct fw_card *card,
		u32 max_receive, u32 link_speed, u64 guid)
545
{
546
	int ret;
547 548 549 550 551

	card->max_receive = max_receive;
	card->link_speed = link_speed;
	card->guid = guid;

552
	mutex_lock(&card_mutex);
553

554 555
	generate_config_rom(card, tmp_config_rom);
	ret = card->driver->enable(card, tmp_config_rom, config_rom_length);
556 557 558 559
	if (ret == 0)
		list_add_tail(&card->link, &card_list);

	mutex_unlock(&card_mutex);
560 561

	return ret;
562 563 564
}
EXPORT_SYMBOL(fw_card_add);

565
/*
566 567 568 569 570
 * The next few functions implement a dummy driver that is used once a card
 * driver shuts down an fw_card.  This allows the driver to cleanly unload,
 * as all IO to the card will be handled (and failed) by the dummy driver
 * instead of calling into the module.  Only functions for iso context
 * shutdown still need to be provided by the card driver.
571 572 573 574 575
 *
 * .read/write_csr() should never be called anymore after the dummy driver
 * was bound since they are only used within request handler context.
 * .set_config_rom() is never called since the card is taken out of card_list
 * before switching to the dummy driver.
576
 */
577

578
static int dummy_read_phy_reg(struct fw_card *card, int address)
579
{
580
	return -ENODEV;
581 582
}

583 584
static int dummy_update_phy_reg(struct fw_card *card, int address,
				int clear_bits, int set_bits)
585 586 587 588
{
	return -ENODEV;
}

589
static void dummy_send_request(struct fw_card *card, struct fw_packet *packet)
590
{
591
	packet->callback(packet, card, RCODE_CANCELLED);
592 593
}

594
static void dummy_send_response(struct fw_card *card, struct fw_packet *packet)
595
{
596
	packet->callback(packet, card, RCODE_CANCELLED);
597 598
}

599
static int dummy_cancel_packet(struct fw_card *card, struct fw_packet *packet)
600 601 602 603
{
	return -ENOENT;
}

604 605
static int dummy_enable_phys_dma(struct fw_card *card,
				 int node_id, int generation)
606 607 608 609
{
	return -ENODEV;
}

610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632
static struct fw_iso_context *dummy_allocate_iso_context(struct fw_card *card,
				int type, int channel, size_t header_size)
{
	return ERR_PTR(-ENODEV);
}

static int dummy_start_iso(struct fw_iso_context *ctx,
			   s32 cycle, u32 sync, u32 tags)
{
	return -ENODEV;
}

static int dummy_set_iso_channels(struct fw_iso_context *ctx, u64 *channels)
{
	return -ENODEV;
}

static int dummy_queue_iso(struct fw_iso_context *ctx, struct fw_iso_packet *p,
			   struct fw_iso_buffer *buffer, unsigned long payload)
{
	return -ENODEV;
}

633
static const struct fw_card_driver dummy_driver_template = {
634 635 636 637 638 639 640 641 642 643
	.read_phy_reg		= dummy_read_phy_reg,
	.update_phy_reg		= dummy_update_phy_reg,
	.send_request		= dummy_send_request,
	.send_response		= dummy_send_response,
	.cancel_packet		= dummy_cancel_packet,
	.enable_phys_dma	= dummy_enable_phys_dma,
	.allocate_iso_context	= dummy_allocate_iso_context,
	.start_iso		= dummy_start_iso,
	.set_iso_channels	= dummy_set_iso_channels,
	.queue_iso		= dummy_queue_iso,
644 645
};

646
void fw_card_release(struct kref *kref)
647 648 649 650 651 652
{
	struct fw_card *card = container_of(kref, struct fw_card, kref);

	complete(&card->done);
}

653
void fw_core_remove_card(struct fw_card *card)
654
{
655 656
	struct fw_card_driver dummy_driver = dummy_driver_template;

657 658
	card->driver->update_phy_reg(card, 4,
				     PHY_LINK_ACTIVE | PHY_CONTENDER, 0);
659
	fw_schedule_bus_reset(card, false, true);
660

661
	mutex_lock(&card_mutex);
662
	list_del_init(&card->link);
663
	mutex_unlock(&card_mutex);
664

665 666 667
	/* Switch off most of the card driver interface. */
	dummy_driver.free_iso_context	= card->driver->free_iso_context;
	dummy_driver.stop_iso		= card->driver->stop_iso;
668 669 670
	card->driver = &dummy_driver;

	fw_destroy_nodes(card);
671 672 673 674

	/* Wait for all users, especially device workqueue jobs, to finish. */
	fw_card_put(card);
	wait_for_completion(&card->done);
675

676
	WARN_ON(!list_empty(&card->transaction_list));
677 678
}
EXPORT_SYMBOL(fw_core_remove_card);