core-device.c 34.0 KB
Newer Older
1 2
/*
 * Device probing and sysfs code.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
 *
 * Copyright (C) 2005-2006  Kristian Hoegsberg <krh@bitplanet.net>
 *
 * 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.
 */

21
#include <linux/bug.h>
22
#include <linux/ctype.h>
23
#include <linux/delay.h>
24 25
#include <linux/device.h>
#include <linux/errno.h>
26 27
#include <linux/firewire.h>
#include <linux/firewire-constants.h>
28
#include <linux/idr.h>
29
#include <linux/jiffies.h>
30 31
#include <linux/kobject.h>
#include <linux/list.h>
32
#include <linux/mod_devicetable.h>
S
Stefan Richter 已提交
33
#include <linux/module.h>
34
#include <linux/mutex.h>
35
#include <linux/random.h>
36
#include <linux/rwsem.h>
37
#include <linux/slab.h>
J
Jay Fenlason 已提交
38
#include <linux/spinlock.h>
39 40 41
#include <linux/string.h>
#include <linux/workqueue.h>

A
Arun Sharma 已提交
42
#include <linux/atomic.h>
S
Stefan Richter 已提交
43
#include <asm/byteorder.h>
44

45
#include "core.h"
46

47
void fw_csr_iterator_init(struct fw_csr_iterator *ci, const u32 *p)
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
{
	ci->p = p + 1;
	ci->end = ci->p + (p[0] >> 16);
}
EXPORT_SYMBOL(fw_csr_iterator_init);

int fw_csr_iterator_next(struct fw_csr_iterator *ci, int *key, int *value)
{
	*key = *ci->p >> 24;
	*value = *ci->p & 0xffffff;

	return ci->p++ < ci->end;
}
EXPORT_SYMBOL(fw_csr_iterator_next);

63
static const u32 *search_leaf(const u32 *directory, int search_key)
64 65 66 67 68 69 70 71 72
{
	struct fw_csr_iterator ci;
	int last_key = 0, key, value;

	fw_csr_iterator_init(&ci, directory);
	while (fw_csr_iterator_next(&ci, &key, &value)) {
		if (last_key == search_key &&
		    key == (CSR_DESCRIPTOR | CSR_LEAF))
			return ci.p - 1 + value;
73

74 75
		last_key = key;
	}
76

77 78 79
	return NULL;
}

80
static int textual_leaf_to_string(const u32 *block, char *buf, size_t size)
81
{
82 83
	unsigned int quadlets, i;
	char c;
84 85 86 87

	if (!size || !buf)
		return -EINVAL;

88
	quadlets = min(block[0] >> 16, 256U);
89 90 91 92 93 94 95 96 97
	if (quadlets < 2)
		return -ENODATA;

	if (block[1] != 0 || block[2] != 0)
		/* unknown language/character set */
		return -ENODATA;

	block += 3;
	quadlets -= 2;
98 99
	for (i = 0; i < quadlets * 4 && i < size - 1; i++) {
		c = block[i / 4] >> (24 - 8 * (i % 4));
100 101
		if (c == '\0')
			break;
102
		buf[i] = c;
103
	}
104 105 106
	buf[i] = '\0';

	return i;
107 108 109
}

/**
110 111 112 113 114
 * fw_csr_string() - reads a string from the configuration ROM
 * @directory:	e.g. root directory or unit directory
 * @key:	the key of the preceding directory entry
 * @buf:	where to put the string
 * @size:	size of @buf, in bytes
115
 *
116 117 118
 * The string is taken from a minimal ASCII text descriptor leaf after
 * the immediate entry with @key.  The string is zero-terminated.
 * Returns strlen(buf) or a negative error code.
119
 */
120
int fw_csr_string(const u32 *directory, int key, char *buf, size_t size)
121
{
122
	const u32 *leaf = search_leaf(directory, key);
123 124
	if (!leaf)
		return -ENOENT;
125

126 127 128 129
	return textual_leaf_to_string(leaf, buf, size);
}
EXPORT_SYMBOL(fw_csr_string);

130
static void get_ids(const u32 *directory, int *id)
131 132
{
	struct fw_csr_iterator ci;
133
	int key, value;
134 135 136

	fw_csr_iterator_init(&ci, directory);
	while (fw_csr_iterator_next(&ci, &key, &value)) {
137 138 139 140 141 142
		switch (key) {
		case CSR_VENDOR:	id[0] = value; break;
		case CSR_MODEL:		id[1] = value; break;
		case CSR_SPECIFIER_ID:	id[2] = value; break;
		case CSR_VERSION:	id[3] = value; break;
		}
143
	}
144
}
145

146 147 148 149 150
static void get_modalias_ids(struct fw_unit *unit, int *id)
{
	get_ids(&fw_parent_device(unit)->config_rom[5], id);
	get_ids(unit->directory, id);
}
151

152 153 154 155 156 157 158 159 160 161 162 163 164 165
static bool match_ids(const struct ieee1394_device_id *id_table, int *id)
{
	int match = 0;

	if (id[0] == id_table->vendor_id)
		match |= IEEE1394_MATCH_VENDOR_ID;
	if (id[1] == id_table->model_id)
		match |= IEEE1394_MATCH_MODEL_ID;
	if (id[2] == id_table->specifier_id)
		match |= IEEE1394_MATCH_SPECIFIER_ID;
	if (id[3] == id_table->version)
		match |= IEEE1394_MATCH_VERSION;

	return (match & id_table->match_flags) == id_table->match_flags;
166 167
}

168 169
static const struct ieee1394_device_id *unit_match(struct device *dev,
						   struct device_driver *drv)
170
{
171 172 173
	const struct ieee1394_device_id *id_table =
			container_of(drv, struct fw_driver, driver)->id_table;
	int id[] = {0, 0, 0, 0};
174

175
	get_modalias_ids(fw_unit(dev), id);
176

177 178
	for (; id_table->match_flags != 0; id_table++)
		if (match_ids(id_table, id))
179
			return id_table;
180

181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
	return NULL;
}

static bool is_fw_unit(struct device *dev);

static int fw_unit_match(struct device *dev, struct device_driver *drv)
{
	/* We only allow binding to fw_units. */
	return is_fw_unit(dev) && unit_match(dev, drv) != NULL;
}

static int fw_unit_probe(struct device *dev)
{
	struct fw_driver *driver =
			container_of(dev->driver, struct fw_driver, driver);

197
	return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
198 199 200 201 202 203 204
}

static int fw_unit_remove(struct device *dev)
{
	struct fw_driver *driver =
			container_of(dev->driver, struct fw_driver, driver);

205
	return driver->remove(fw_unit(dev)), 0;
206 207 208 209
}

static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
{
210
	int id[] = {0, 0, 0, 0};
211

212
	get_modalias_ids(unit, id);
213 214 215

	return snprintf(buffer, buffer_size,
			"ieee1394:ven%08Xmo%08Xsp%08Xver%08X",
216
			id[0], id[1], id[2], id[3]);
217 218
}

219
static int fw_unit_uevent(struct device *dev, struct kobj_uevent_env *env)
220 221 222 223
{
	struct fw_unit *unit = fw_unit(dev);
	char modalias[64];

224
	get_modalias(unit, modalias, sizeof(modalias));
225

226
	if (add_uevent_var(env, "MODALIAS=%s", modalias))
227 228 229 230 231 232
		return -ENOMEM;

	return 0;
}

struct bus_type fw_bus_type = {
233
	.name = "firewire",
234
	.match = fw_unit_match,
235 236
	.probe = fw_unit_probe,
	.remove = fw_unit_remove,
237 238 239 240 241
};
EXPORT_SYMBOL(fw_bus_type);

int fw_device_enable_phys_dma(struct fw_device *device)
{
242 243 244 245 246
	int generation = device->generation;

	/* device->node_id, accessed below, must not be older than generation */
	smp_rmb();

247 248
	return device->card->driver->enable_phys_dma(device->card,
						     device->node_id,
249
						     generation);
250 251 252
}
EXPORT_SYMBOL(fw_device_enable_phys_dma);

253 254 255 256 257
struct config_rom_attribute {
	struct device_attribute attr;
	u32 key;
};

258 259
static ssize_t show_immediate(struct device *dev,
			      struct device_attribute *dattr, char *buf)
260 261 262 263
{
	struct config_rom_attribute *attr =
		container_of(dattr, struct config_rom_attribute, attr);
	struct fw_csr_iterator ci;
264
	const u32 *dir;
265 266 267
	int key, value, ret = -ENOENT;

	down_read(&fw_device_rwsem);
268 269 270 271 272 273 274 275

	if (is_fw_unit(dev))
		dir = fw_unit(dev)->directory;
	else
		dir = fw_device(dev)->config_rom + 5;

	fw_csr_iterator_init(&ci, dir);
	while (fw_csr_iterator_next(&ci, &key, &value))
276 277 278 279 280 281 282
		if (attr->key == key) {
			ret = snprintf(buf, buf ? PAGE_SIZE : 0,
				       "0x%06x\n", value);
			break;
		}

	up_read(&fw_device_rwsem);
283

284
	return ret;
285 286 287 288 289
}

#define IMMEDIATE_ATTR(name, key)				\
	{ __ATTR(name, S_IRUGO, show_immediate, NULL), key }

290 291
static ssize_t show_text_leaf(struct device *dev,
			      struct device_attribute *dattr, char *buf)
292 293 294
{
	struct config_rom_attribute *attr =
		container_of(dattr, struct config_rom_attribute, attr);
295
	const u32 *dir;
296 297 298
	size_t bufsize;
	char dummy_buf[2];
	int ret;
299

300 301
	down_read(&fw_device_rwsem);

302 303 304 305 306
	if (is_fw_unit(dev))
		dir = fw_unit(dev)->directory;
	else
		dir = fw_device(dev)->config_rom + 5;

307 308 309 310 311
	if (buf) {
		bufsize = PAGE_SIZE - 1;
	} else {
		buf = dummy_buf;
		bufsize = 1;
312 313
	}

314
	ret = fw_csr_string(dir, attr->key, buf, bufsize);
315

316 317 318 319 320 321
	if (ret >= 0) {
		/* Strip trailing whitespace and add newline. */
		while (ret > 0 && isspace(buf[ret - 1]))
			ret--;
		strcpy(buf + ret, "\n");
		ret++;
322
	}
323

324
	up_read(&fw_device_rwsem);
325

326
	return ret;
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
}

#define TEXT_LEAF_ATTR(name, key)				\
	{ __ATTR(name, S_IRUGO, show_text_leaf, NULL), key }

static struct config_rom_attribute config_rom_attributes[] = {
	IMMEDIATE_ATTR(vendor, CSR_VENDOR),
	IMMEDIATE_ATTR(hardware_version, CSR_HARDWARE_VERSION),
	IMMEDIATE_ATTR(specifier_id, CSR_SPECIFIER_ID),
	IMMEDIATE_ATTR(version, CSR_VERSION),
	IMMEDIATE_ATTR(model, CSR_MODEL),
	TEXT_LEAF_ATTR(vendor_name, CSR_VENDOR),
	TEXT_LEAF_ATTR(model_name, CSR_MODEL),
	TEXT_LEAF_ATTR(hardware_version_name, CSR_HARDWARE_VERSION),
};

343 344 345
static void init_fw_attribute_group(struct device *dev,
				    struct device_attribute *attrs,
				    struct fw_attribute_group *group)
346 347
{
	struct device_attribute *attr;
348 349 350 351
	int i, j;

	for (j = 0; attrs[j].attr.name != NULL; j++)
		group->attrs[j] = &attrs[j].attr;
352 353 354 355 356

	for (i = 0; i < ARRAY_SIZE(config_rom_attributes); i++) {
		attr = &config_rom_attributes[i].attr;
		if (attr->show(dev, attr, NULL) < 0)
			continue;
357
		group->attrs[j++] = &attr->attr;
358 359
	}

360
	group->attrs[j] = NULL;
361 362 363
	group->groups[0] = &group->group;
	group->groups[1] = NULL;
	group->group.attrs = group->attrs;
364
	dev->groups = (const struct attribute_group **) group->groups;
365 366
}

367 368
static ssize_t modalias_show(struct device *dev,
			     struct device_attribute *attr, char *buf)
369 370 371 372 373 374 375 376 377 378
{
	struct fw_unit *unit = fw_unit(dev);
	int length;

	length = get_modalias(unit, buf, PAGE_SIZE);
	strcpy(buf + length, "\n");

	return length + 1;
}

379 380
static ssize_t rom_index_show(struct device *dev,
			      struct device_attribute *attr, char *buf)
381
{
382 383
	struct fw_device *device = fw_device(dev->parent);
	struct fw_unit *unit = fw_unit(dev);
384

385 386
	return snprintf(buf, PAGE_SIZE, "%d\n",
			(int)(unit->directory - device->config_rom));
387 388
}

389 390 391 392
static struct device_attribute fw_unit_attributes[] = {
	__ATTR_RO(modalias),
	__ATTR_RO(rom_index),
	__ATTR_NULL,
393 394
};

395 396
static ssize_t config_rom_show(struct device *dev,
			       struct device_attribute *attr, char *buf)
397
{
398
	struct fw_device *device = fw_device(dev);
399
	size_t length;
400

401 402 403 404
	down_read(&fw_device_rwsem);
	length = device->config_rom_length * 4;
	memcpy(buf, device->config_rom, length);
	up_read(&fw_device_rwsem);
405

406
	return length;
407 408
}

409 410
static ssize_t guid_show(struct device *dev,
			 struct device_attribute *attr, char *buf)
411 412
{
	struct fw_device *device = fw_device(dev);
413 414 415 416 417 418
	int ret;

	down_read(&fw_device_rwsem);
	ret = snprintf(buf, PAGE_SIZE, "0x%08x%08x\n",
		       device->config_rom[3], device->config_rom[4]);
	up_read(&fw_device_rwsem);
419

420
	return ret;
421 422
}

423 424 425 426 427 428 429 430
static ssize_t is_local_show(struct device *dev,
			     struct device_attribute *attr, char *buf)
{
	struct fw_device *device = fw_device(dev);

	return sprintf(buf, "%u\n", device->is_local);
}

431
static int units_sprintf(char *buf, const u32 *directory)
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476
{
	struct fw_csr_iterator ci;
	int key, value;
	int specifier_id = 0;
	int version = 0;

	fw_csr_iterator_init(&ci, directory);
	while (fw_csr_iterator_next(&ci, &key, &value)) {
		switch (key) {
		case CSR_SPECIFIER_ID:
			specifier_id = value;
			break;
		case CSR_VERSION:
			version = value;
			break;
		}
	}

	return sprintf(buf, "0x%06x:0x%06x ", specifier_id, version);
}

static ssize_t units_show(struct device *dev,
			  struct device_attribute *attr, char *buf)
{
	struct fw_device *device = fw_device(dev);
	struct fw_csr_iterator ci;
	int key, value, i = 0;

	down_read(&fw_device_rwsem);
	fw_csr_iterator_init(&ci, &device->config_rom[5]);
	while (fw_csr_iterator_next(&ci, &key, &value)) {
		if (key != (CSR_UNIT | CSR_DIRECTORY))
			continue;
		i += units_sprintf(&buf[i], ci.p + value - 1);
		if (i >= PAGE_SIZE - (8 + 1 + 8 + 1))
			break;
	}
	up_read(&fw_device_rwsem);

	if (i)
		buf[i - 1] = '\n';

	return i;
}

477 478
static struct device_attribute fw_device_attributes[] = {
	__ATTR_RO(config_rom),
479
	__ATTR_RO(guid),
480
	__ATTR_RO(is_local),
481
	__ATTR_RO(units),
482
	__ATTR_NULL,
483 484
};

485 486
static int read_rom(struct fw_device *device,
		    int generation, int index, u32 *data)
487
{
488 489
	u64 offset = (CSR_REGISTER_BASE | CSR_CONFIG_ROM) + index * 4;
	int i, rcode;
490 491 492

	/* device->node_id, accessed below, must not be older than generation */
	smp_rmb();
493

494 495 496 497 498 499 500 501
	for (i = 10; i < 100; i += 10) {
		rcode = fw_run_transaction(device->card,
				TCODE_READ_QUADLET_REQUEST, device->node_id,
				generation, device->max_speed, offset, data, 4);
		if (rcode != RCODE_BUSY)
			break;
		msleep(i);
	}
J
Jay Fenlason 已提交
502
	be32_to_cpus(data);
503

J
Jay Fenlason 已提交
504
	return rcode;
505 506
}

507
#define MAX_CONFIG_ROM_SIZE 256
508

509 510 511
/*
 * Read the bus info block, perform a speed probe, and read all of the rest of
 * the config ROM.  We do all this with a cached bus generation.  If the bus
512
 * generation changes under us, read_config_rom will fail and get retried.
513 514
 * It's better to start all over in this case because the node from which we
 * are reading the ROM may have changed the ROM during the reset.
515
 * Returns either a result code or a negative error code.
516
 */
517
static int read_config_rom(struct fw_device *device, int generation)
518
{
519
	struct fw_card *card = device->card;
520 521
	const u32 *old_rom, *new_rom;
	u32 *rom, *stack;
522
	u32 sp, key;
523
	int i, end, length, ret;
524

525 526
	rom = kmalloc(sizeof(*rom) * MAX_CONFIG_ROM_SIZE +
		      sizeof(*stack) * MAX_CONFIG_ROM_SIZE, GFP_KERNEL);
527 528 529
	if (rom == NULL)
		return -ENOMEM;

530 531
	stack = &rom[MAX_CONFIG_ROM_SIZE];
	memset(rom, 0, sizeof(*rom) * MAX_CONFIG_ROM_SIZE);
532

533 534
	device->max_speed = SCODE_100;

535 536
	/* First read the bus info block. */
	for (i = 0; i < 5; i++) {
537 538
		ret = read_rom(device, generation, i, &rom[i]);
		if (ret != RCODE_COMPLETE)
539
			goto out;
540
		/*
541
		 * As per IEEE1212 7.2, during initialization, devices can
542 543 544 545
		 * reply with a 0 for the first quadlet of the config
		 * rom to indicate that they are booting (for example,
		 * if the firmware is on the disk of a external
		 * harddisk).  In that case we just fail, and the
546 547
		 * retry mechanism will try again later.
		 */
548 549
		if (i == 0 && rom[i] == 0) {
			ret = RCODE_BUSY;
550
			goto out;
551
		}
552 553
	}

554 555 556 557 558 559 560 561 562 563 564 565 566
	device->max_speed = device->node->max_speed;

	/*
	 * Determine the speed of
	 *   - devices with link speed less than PHY speed,
	 *   - devices with 1394b PHY (unless only connected to 1394a PHYs),
	 *   - all devices if there are 1394b repeaters.
	 * Note, we cannot use the bus info block's link_spd as starting point
	 * because some buggy firmwares set it lower than necessary and because
	 * 1394-1995 nodes do not have the field.
	 */
	if ((rom[2] & 0x7) < device->max_speed ||
	    device->max_speed == SCODE_BETA ||
567
	    card->beta_repeaters_present) {
568 569 570 571
		u32 dummy;

		/* for S1600 and S3200 */
		if (device->max_speed == SCODE_BETA)
572
			device->max_speed = card->link_speed;
573 574

		while (device->max_speed > SCODE_100) {
575 576
			if (read_rom(device, generation, 0, &dummy) ==
			    RCODE_COMPLETE)
577 578 579 580 581
				break;
			device->max_speed--;
		}
	}

582 583
	/*
	 * Now parse the config rom.  The config rom is a recursive
584 585 586
	 * directory structure so we parse it using a stack of
	 * references to the blocks that make up the structure.  We
	 * push a reference to the root directory on the stack to
587 588
	 * start things off.
	 */
589 590 591 592
	length = i;
	sp = 0;
	stack[sp++] = 0xc0000005;
	while (sp > 0) {
593 594
		/*
		 * Pop the next block reference of the stack.  The
595 596
		 * lower 24 bits is the offset into the config rom,
		 * the upper 8 bits are the type of the reference the
597 598
		 * block.
		 */
599 600
		key = stack[--sp];
		i = key & 0xffffff;
601 602
		if (WARN_ON(i >= MAX_CONFIG_ROM_SIZE)) {
			ret = -ENXIO;
603
			goto out;
604
		}
605 606

		/* Read header quadlet for the block to get the length. */
607 608
		ret = read_rom(device, generation, i, &rom[i]);
		if (ret != RCODE_COMPLETE)
609
			goto out;
610
		end = i + (rom[i] >> 16) + 1;
611
		if (end > MAX_CONFIG_ROM_SIZE) {
612
			/*
613 614 615
			 * This block extends outside the config ROM which is
			 * a firmware bug.  Ignore this whole block, i.e.
			 * simply set a fake block length of 0.
616
			 */
617 618 619
			fw_err(card, "skipped invalid ROM block %x at %llx\n",
			       rom[i],
			       i * 4 | CSR_REGISTER_BASE | CSR_CONFIG_ROM);
620 621 622 623
			rom[i] = 0;
			end = i;
		}
		i++;
624

625 626
		/*
		 * Now read in the block.  If this is a directory
627
		 * block, check the entries as we read them to see if
628 629
		 * it references another block, and push it in that case.
		 */
630
		for (; i < end; i++) {
631 632
			ret = read_rom(device, generation, i, &rom[i]);
			if (ret != RCODE_COMPLETE)
633
				goto out;
634

635
			if ((key >> 30) != 3 || (rom[i] >> 30) < 2)
636 637 638 639 640 641 642 643
				continue;
			/*
			 * Offset points outside the ROM.  May be a firmware
			 * bug or an Extended ROM entry (IEEE 1212-2001 clause
			 * 7.7.18).  Simply overwrite this pointer here by a
			 * fake immediate entry so that later iterators over
			 * the ROM don't have to check offsets all the time.
			 */
644
			if (i + (rom[i] & 0xffffff) >= MAX_CONFIG_ROM_SIZE) {
645 646 647 648
				fw_err(card,
				       "skipped unsupported ROM entry %x at %llx\n",
				       rom[i],
				       i * 4 | CSR_REGISTER_BASE | CSR_CONFIG_ROM);
649 650 651 652
				rom[i] = 0;
				continue;
			}
			stack[sp++] = i + rom[i];
653 654 655 656 657
		}
		if (length < i)
			length = i;
	}

658 659
	old_rom = device->config_rom;
	new_rom = kmemdup(rom, length * 4, GFP_KERNEL);
660 661
	if (new_rom == NULL) {
		ret = -ENOMEM;
662
		goto out;
663
	}
664 665 666

	down_write(&fw_device_rwsem);
	device->config_rom = new_rom;
667
	device->config_rom_length = length;
668 669 670
	up_write(&fw_device_rwsem);

	kfree(old_rom);
671
	ret = RCODE_COMPLETE;
672 673 674
	device->max_rec	= rom[2] >> 12 & 0xf;
	device->cmc	= rom[2] >> 30 & 1;
	device->irmc	= rom[2] >> 31 & 1;
675 676
 out:
	kfree(rom);
677

678
	return ret;
679 680 681 682 683 684
}

static void fw_unit_release(struct device *dev)
{
	struct fw_unit *unit = fw_unit(dev);

685
	fw_device_put(fw_parent_device(unit));
686 687 688
	kfree(unit);
}

689 690 691 692 693
static struct device_type fw_unit_type = {
	.uevent		= fw_unit_uevent,
	.release	= fw_unit_release,
};

694
static bool is_fw_unit(struct device *dev)
695
{
696
	return dev->type == &fw_unit_type;
697 698 699 700 701 702 703 704 705 706 707 708 709 710
}

static void create_units(struct fw_device *device)
{
	struct fw_csr_iterator ci;
	struct fw_unit *unit;
	int key, value, i;

	i = 0;
	fw_csr_iterator_init(&ci, &device->config_rom[5]);
	while (fw_csr_iterator_next(&ci, &key, &value)) {
		if (key != (CSR_UNIT | CSR_DIRECTORY))
			continue;

711 712 713 714
		/*
		 * Get the address of the unit directory and try to
		 * match the drivers id_tables against it.
		 */
715
		unit = kzalloc(sizeof(*unit), GFP_KERNEL);
716
		if (unit == NULL)
717 718 719 720
			continue;

		unit->directory = ci.p + value - 1;
		unit->device.bus = &fw_bus_type;
721
		unit->device.type = &fw_unit_type;
722
		unit->device.parent = &device->device;
723
		dev_set_name(&unit->device, "%s.%d", dev_name(&device->device), i++);
724

725 726 727
		BUILD_BUG_ON(ARRAY_SIZE(unit->attribute_group.attrs) <
				ARRAY_SIZE(fw_unit_attributes) +
				ARRAY_SIZE(config_rom_attributes));
728 729 730
		init_fw_attribute_group(&unit->device,
					fw_unit_attributes,
					&unit->attribute_group);
731

732 733 734
		if (device_register(&unit->device) < 0)
			goto skip_unit;

735
		fw_device_get(device);
736 737 738 739
		continue;

	skip_unit:
		kfree(unit);
740 741 742 743 744
	}
}

static int shutdown_unit(struct device *device, void *data)
{
745
	device_unregister(device);
746 747 748 749

	return 0;
}

750 751 752 753 754 755 756 757
/*
 * fw_device_rwsem acts as dual purpose mutex:
 *   - serializes accesses to fw_device_idr,
 *   - serializes accesses to fw_device.config_rom/.config_rom_length and
 *     fw_unit.directory, unless those accesses happen at safe occasions
 */
DECLARE_RWSEM(fw_device_rwsem);

758
DEFINE_IDR(fw_device_idr);
759 760
int fw_cdev_major;

761
struct fw_device *fw_device_get_by_devt(dev_t devt)
762 763 764
{
	struct fw_device *device;

765
	down_read(&fw_device_rwsem);
766
	device = idr_find(&fw_device_idr, MINOR(devt));
767 768
	if (device)
		fw_device_get(device);
769
	up_read(&fw_device_rwsem);
770 771 772 773

	return device;
}

774 775
struct workqueue_struct *fw_workqueue;
EXPORT_SYMBOL(fw_workqueue);
776 777 778 779

static void fw_schedule_device_work(struct fw_device *device,
				    unsigned long delay)
{
780
	queue_delayed_work(fw_workqueue, &device->work, delay);
781 782
}

783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798
/*
 * These defines control the retry behavior for reading the config
 * rom.  It shouldn't be necessary to tweak these; if the device
 * doesn't respond to a config rom read within 10 seconds, it's not
 * going to respond at all.  As for the initial delay, a lot of
 * devices will be able to respond within half a second after bus
 * reset.  On the other hand, it's not really worth being more
 * aggressive than that, since it scales pretty well; if 10 devices
 * are plugged in, they're all getting read within one second.
 */

#define MAX_RETRIES	10
#define RETRY_DELAY	(3 * HZ)
#define INITIAL_DELAY	(HZ / 2)
#define SHUTDOWN_DELAY	(2 * HZ)

799 800 801 802
static void fw_device_shutdown(struct work_struct *work)
{
	struct fw_device *device =
		container_of(work, struct fw_device, work.work);
803 804
	int minor = MINOR(device->device.devt);

805 806
	if (time_before64(get_jiffies_64(),
			  device->card->reset_jiffies + SHUTDOWN_DELAY)
807
	    && !list_empty(&device->card->link)) {
808
		fw_schedule_device_work(device, SHUTDOWN_DELAY);
809 810 811 812 813 814 815 816
		return;
	}

	if (atomic_cmpxchg(&device->state,
			   FW_DEVICE_GONE,
			   FW_DEVICE_SHUTDOWN) != FW_DEVICE_GONE)
		return;

817
	fw_device_cdev_remove(device);
818 819
	device_for_each_child(&device->device, NULL, shutdown_unit);
	device_unregister(&device->device);
820

821
	down_write(&fw_device_rwsem);
822
	idr_remove(&fw_device_idr, minor);
823
	up_write(&fw_device_rwsem);
824

825
	fw_device_put(device);
826 827
}

828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848
static void fw_device_release(struct device *dev)
{
	struct fw_device *device = fw_device(dev);
	struct fw_card *card = device->card;
	unsigned long flags;

	/*
	 * Take the card lock so we don't set this to NULL while a
	 * FW_NODE_UPDATED callback is being handled or while the
	 * bus manager work looks at this node.
	 */
	spin_lock_irqsave(&card->lock, flags);
	device->node->data = NULL;
	spin_unlock_irqrestore(&card->lock, flags);

	fw_node_put(device->node);
	kfree(device->config_rom);
	kfree(device);
	fw_card_put(card);
}

849
static struct device_type fw_device_type = {
850
	.release = fw_device_release,
851 852
};

853 854 855 856 857
static bool is_fw_device(struct device *dev)
{
	return dev->type == &fw_device_type;
}

858 859 860 861 862 863
static int update_unit(struct device *dev, void *data)
{
	struct fw_unit *unit = fw_unit(dev);
	struct fw_driver *driver = (struct fw_driver *)dev->driver;

	if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) {
864
		device_lock(dev);
865
		driver->update(unit);
866
		device_unlock(dev);
867 868 869 870 871 872 873 874 875 876 877 878 879
	}

	return 0;
}

static void fw_device_update(struct work_struct *work)
{
	struct fw_device *device =
		container_of(work, struct fw_device, work.work);

	fw_device_cdev_update(device);
	device_for_each_child(&device->device, NULL, update_unit);
}
880

881
/*
882 883 884 885
 * If a device was pending for deletion because its node went away but its
 * bus info block and root directory header matches that of a newly discovered
 * device, revive the existing fw_device.
 * The newly allocated fw_device becomes obsolete instead.
886
 */
887 888 889 890 891 892 893
static int lookup_existing_device(struct device *dev, void *data)
{
	struct fw_device *old = fw_device(dev);
	struct fw_device *new = data;
	struct fw_card *card = new->card;
	int match = 0;

894 895 896
	if (!is_fw_device(dev))
		return 0;

897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916
	down_read(&fw_device_rwsem); /* serialize config_rom access */
	spin_lock_irq(&card->lock);  /* serialize node access */

	if (memcmp(old->config_rom, new->config_rom, 6 * 4) == 0 &&
	    atomic_cmpxchg(&old->state,
			   FW_DEVICE_GONE,
			   FW_DEVICE_RUNNING) == FW_DEVICE_GONE) {
		struct fw_node *current_node = new->node;
		struct fw_node *obsolete_node = old->node;

		new->node = obsolete_node;
		new->node->data = new;
		old->node = current_node;
		old->node->data = old;

		old->max_speed = new->max_speed;
		old->node_id = current_node->node_id;
		smp_wmb();  /* update node_id before generation */
		old->generation = card->generation;
		old->config_rom_retries = 0;
917
		fw_notice(card, "rediscovered device %s\n", dev_name(dev));
918

919
		old->workfn = fw_device_update;
920
		fw_schedule_device_work(old, 0);
921 922 923 924 925 926 927 928 929 930 931 932

		if (current_node == card->root_node)
			fw_schedule_bm_work(card, 0);

		match = 1;
	}

	spin_unlock_irq(&card->lock);
	up_read(&fw_device_rwsem);

	return match;
}
933

934 935
enum { BC_UNKNOWN = 0, BC_UNIMPLEMENTED, BC_IMPLEMENTED, };

936
static void set_broadcast_channel(struct fw_device *device, int generation)
937 938 939 940 941 942 943 944
{
	struct fw_card *card = device->card;
	__be32 data;
	int rcode;

	if (!card->broadcast_channel_allocated)
		return;

945 946 947 948 949 950 951 952 953 954 955 956 957 958
	/*
	 * The Broadcast_Channel Valid bit is required by nodes which want to
	 * transmit on this channel.  Such transmissions are practically
	 * exclusive to IP over 1394 (RFC 2734).  IP capable nodes are required
	 * to be IRM capable and have a max_rec of 8 or more.  We use this fact
	 * to narrow down to which nodes we send Broadcast_Channel updates.
	 */
	if (!device->irmc || device->max_rec < 8)
		return;

	/*
	 * Some 1394-1995 nodes crash if this 1394a-2000 register is written.
	 * Perform a read test first.
	 */
959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985
	if (device->bc_implemented == BC_UNKNOWN) {
		rcode = fw_run_transaction(card, TCODE_READ_QUADLET_REQUEST,
				device->node_id, generation, device->max_speed,
				CSR_REGISTER_BASE + CSR_BROADCAST_CHANNEL,
				&data, 4);
		switch (rcode) {
		case RCODE_COMPLETE:
			if (data & cpu_to_be32(1 << 31)) {
				device->bc_implemented = BC_IMPLEMENTED;
				break;
			}
			/* else fall through to case address error */
		case RCODE_ADDRESS_ERROR:
			device->bc_implemented = BC_UNIMPLEMENTED;
		}
	}

	if (device->bc_implemented == BC_IMPLEMENTED) {
		data = cpu_to_be32(BROADCAST_CHANNEL_INITIAL |
				   BROADCAST_CHANNEL_VALID);
		fw_run_transaction(card, TCODE_WRITE_QUADLET_REQUEST,
				device->node_id, generation, device->max_speed,
				CSR_REGISTER_BASE + CSR_BROADCAST_CHANNEL,
				&data, 4);
	}
}

986 987 988 989 990 991 992 993
int fw_device_set_broadcast_channel(struct device *dev, void *gen)
{
	if (is_fw_device(dev))
		set_broadcast_channel(fw_device(dev), (long)gen);

	return 0;
}

994 995 996 997
static void fw_device_init(struct work_struct *work)
{
	struct fw_device *device =
		container_of(work, struct fw_device, work.work);
998
	struct fw_card *card = device->card;
999
	struct device *revived_dev;
1000
	int minor, ret;
1001

1002 1003
	/*
	 * All failure paths here set node->data to NULL, so that we
1004
	 * don't try to do device_for_each_child() on a kfree()'d
1005 1006
	 * device.
	 */
1007

1008 1009
	ret = read_config_rom(device, device->generation);
	if (ret != RCODE_COMPLETE) {
1010 1011
		if (device->config_rom_retries < MAX_RETRIES &&
		    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
1012
			device->config_rom_retries++;
1013
			fw_schedule_device_work(device, RETRY_DELAY);
1014
		} else {
1015
			if (device->node->link_on)
1016 1017 1018
				fw_notice(card, "giving up on node %x: reading config rom failed: %s\n",
					  device->node_id,
					  fw_rcode_string(ret));
1019 1020
			if (device->node == card->root_node)
				fw_schedule_bm_work(card, 0);
1021 1022 1023 1024 1025
			fw_device_release(&device->device);
		}
		return;
	}

1026
	revived_dev = device_find_child(card->device,
1027 1028 1029 1030 1031 1032 1033 1034
					device, lookup_existing_device);
	if (revived_dev) {
		put_device(revived_dev);
		fw_device_release(&device->device);

		return;
	}

1035
	device_initialize(&device->device);
1036 1037

	fw_device_get(device);
1038
	down_write(&fw_device_rwsem);
T
Tejun Heo 已提交
1039 1040
	minor = idr_alloc(&fw_device_idr, device, 0, 1 << MINORBITS,
			GFP_KERNEL);
1041
	up_write(&fw_device_rwsem);
1042

T
Tejun Heo 已提交
1043
	if (minor < 0)
1044 1045
		goto error;

1046
	device->device.bus = &fw_bus_type;
1047
	device->device.type = &fw_device_type;
1048
	device->device.parent = card->device;
1049
	device->device.devt = MKDEV(fw_cdev_major, minor);
1050
	dev_set_name(&device->device, "fw%d", minor);
1051

1052 1053 1054
	BUILD_BUG_ON(ARRAY_SIZE(device->attribute_group.attrs) <
			ARRAY_SIZE(fw_device_attributes) +
			ARRAY_SIZE(config_rom_attributes));
1055 1056 1057
	init_fw_attribute_group(&device->device,
				fw_device_attributes,
				&device->attribute_group);
1058

1059
	if (device_add(&device->device)) {
1060
		fw_err(card, "failed to add device\n");
1061
		goto error_with_cdev;
1062 1063 1064 1065
	}

	create_units(device);

1066 1067
	/*
	 * Transition the device to running state.  If it got pulled
1068 1069 1070 1071 1072
	 * out from under us while we did the intialization work, we
	 * have to shut down the device again here.  Normally, though,
	 * fw_node_event will be responsible for shutting it down when
	 * necessary.  We have to use the atomic cmpxchg here to avoid
	 * racing with the FW_NODE_DESTROYED case in
1073 1074
	 * fw_node_event().
	 */
1075
	if (atomic_cmpxchg(&device->state,
1076 1077
			   FW_DEVICE_INITIALIZING,
			   FW_DEVICE_RUNNING) == FW_DEVICE_GONE) {
1078
		device->workfn = fw_device_shutdown;
1079
		fw_schedule_device_work(device, SHUTDOWN_DELAY);
1080
	} else {
1081 1082 1083 1084
		fw_notice(card, "created device %s: GUID %08x%08x, S%d00\n",
			  dev_name(&device->device),
			  device->config_rom[3], device->config_rom[4],
			  1 << device->max_speed);
1085
		device->config_rom_retries = 0;
1086

1087
		set_broadcast_channel(device, device->generation);
1088 1089

		add_device_randomness(&device->config_rom[3], 8);
1090
	}
1091

1092 1093
	/*
	 * Reschedule the IRM work if we just finished reading the
1094 1095
	 * root node config rom.  If this races with a bus reset we
	 * just end up running the IRM work a couple of extra times -
1096 1097
	 * pretty harmless.
	 */
1098 1099
	if (device->node == card->root_node)
		fw_schedule_bm_work(card, 0);
1100 1101 1102

	return;

1103
 error_with_cdev:
1104
	down_write(&fw_device_rwsem);
1105
	idr_remove(&fw_device_idr, minor);
1106
	up_write(&fw_device_rwsem);
S
Stefan Richter 已提交
1107
 error:
1108 1109 1110
	fw_device_put(device);		/* fw_device_idr's reference */

	put_device(&device->device);	/* our reference */
1111 1112
}

1113
/* Reread and compare bus info block and header of root directory */
1114 1115
static int reread_config_rom(struct fw_device *device, int generation,
			     bool *changed)
1116 1117
{
	u32 q;
1118
	int i, rcode;
1119 1120

	for (i = 0; i < 6; i++) {
1121 1122 1123
		rcode = read_rom(device, generation, i, &q);
		if (rcode != RCODE_COMPLETE)
			return rcode;
1124 1125

		if (i == 0 && q == 0)
1126
			/* inaccessible (see read_config_rom); retry later */
1127
			return RCODE_BUSY;
1128

1129 1130 1131 1132
		if (q != device->config_rom[i]) {
			*changed = true;
			return RCODE_COMPLETE;
		}
1133 1134
	}

1135 1136
	*changed = false;
	return RCODE_COMPLETE;
1137 1138 1139 1140 1141 1142 1143
}

static void fw_device_refresh(struct work_struct *work)
{
	struct fw_device *device =
		container_of(work, struct fw_device, work.work);
	struct fw_card *card = device->card;
1144 1145
	int ret, node_id = device->node_id;
	bool changed;
1146

1147
	ret = reread_config_rom(device, device->generation, &changed);
1148 1149
	if (ret != RCODE_COMPLETE)
		goto failed_config_rom;
1150

1151
	if (!changed) {
1152
		if (atomic_cmpxchg(&device->state,
1153 1154
				   FW_DEVICE_INITIALIZING,
				   FW_DEVICE_RUNNING) == FW_DEVICE_GONE)
1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167
			goto gone;

		fw_device_update(work);
		device->config_rom_retries = 0;
		goto out;
	}

	/*
	 * Something changed.  We keep things simple and don't investigate
	 * further.  We just destroy all previous units and create new ones.
	 */
	device_for_each_child(&device->device, NULL, shutdown_unit);

1168
	ret = read_config_rom(device, device->generation);
1169 1170
	if (ret != RCODE_COMPLETE)
		goto failed_config_rom;
1171

1172
	fw_device_cdev_update(device);
1173 1174
	create_units(device);

1175 1176 1177
	/* Userspace may want to re-read attributes. */
	kobject_uevent(&device->device.kobj, KOBJ_CHANGE);

1178
	if (atomic_cmpxchg(&device->state,
1179 1180
			   FW_DEVICE_INITIALIZING,
			   FW_DEVICE_RUNNING) == FW_DEVICE_GONE)
1181 1182
		goto gone;

1183
	fw_notice(card, "refreshed device %s\n", dev_name(&device->device));
1184 1185 1186
	device->config_rom_retries = 0;
	goto out;

1187 1188 1189 1190 1191 1192 1193 1194
 failed_config_rom:
	if (device->config_rom_retries < MAX_RETRIES &&
	    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
		device->config_rom_retries++;
		fw_schedule_device_work(device, RETRY_DELAY);
		return;
	}

1195 1196
	fw_notice(card, "giving up on refresh of device %s: %s\n",
		  dev_name(&device->device), fw_rcode_string(ret));
1197
 gone:
1198
	atomic_set(&device->state, FW_DEVICE_GONE);
1199
	device->workfn = fw_device_shutdown;
1200
	fw_schedule_device_work(device, SHUTDOWN_DELAY);
1201 1202
 out:
	if (node_id == card->root_node->node_id)
1203
		fw_schedule_bm_work(card, 0);
1204 1205
}

1206 1207 1208 1209 1210 1211 1212
static void fw_device_workfn(struct work_struct *work)
{
	struct fw_device *device = container_of(to_delayed_work(work),
						struct fw_device, work);
	device->workfn(work);
}

1213 1214 1215 1216 1217 1218
void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
{
	struct fw_device *device;

	switch (event) {
	case FW_NODE_CREATED:
1219 1220 1221 1222 1223 1224
		/*
		 * Attempt to scan the node, regardless whether its self ID has
		 * the L (link active) flag set or not.  Some broken devices
		 * send L=0 but have an up-and-running link; others send L=1
		 * without actually having a link.
		 */
1225
 create:
1226 1227 1228 1229
		device = kzalloc(sizeof(*device), GFP_ATOMIC);
		if (device == NULL)
			break;

1230 1231
		/*
		 * Do minimal intialization of the device here, the
1232 1233 1234 1235 1236 1237 1238
		 * rest will happen in fw_device_init().
		 *
		 * Attention:  A lot of things, even fw_device_get(),
		 * cannot be done before fw_device_init() finished!
		 * You can basically just check device->state and
		 * schedule work until then, but only while holding
		 * card->lock.
1239
		 */
1240
		atomic_set(&device->state, FW_DEVICE_INITIALIZING);
1241
		device->card = fw_card_get(card);
1242 1243 1244
		device->node = fw_node_get(node);
		device->node_id = node->node_id;
		device->generation = card->generation;
1245
		device->is_local = node == card->local_node;
1246
		mutex_init(&device->client_list_mutex);
1247
		INIT_LIST_HEAD(&device->client_list);
1248

1249 1250
		/*
		 * Set the node data to point back to this device so
1251
		 * FW_NODE_UPDATED callbacks can update the node_id
1252 1253
		 * and generation for the device.
		 */
1254 1255
		node->data = device;

1256 1257
		/*
		 * Many devices are slow to respond after bus resets,
1258 1259
		 * especially if they are bus powered and go through
		 * power-up after getting plugged in.  We schedule the
1260 1261
		 * first config rom scan half a second after bus reset.
		 */
1262 1263
		device->workfn = fw_device_init;
		INIT_DELAYED_WORK(&device->work, fw_device_workfn);
1264
		fw_schedule_device_work(device, INITIAL_DELAY);
1265 1266
		break;

1267
	case FW_NODE_INITIATED_RESET:
1268
	case FW_NODE_LINK_ON:
1269 1270 1271 1272 1273 1274 1275 1276 1277 1278
		device = node->data;
		if (device == NULL)
			goto create;

		device->node_id = node->node_id;
		smp_wmb();  /* update node_id before generation */
		device->generation = card->generation;
		if (atomic_cmpxchg(&device->state,
			    FW_DEVICE_RUNNING,
			    FW_DEVICE_INITIALIZING) == FW_DEVICE_RUNNING) {
1279
			device->workfn = fw_device_refresh;
1280
			fw_schedule_device_work(device,
1281
				device->is_local ? 0 : INITIAL_DELAY);
1282 1283 1284
		}
		break;

1285
	case FW_NODE_UPDATED:
1286 1287
		device = node->data;
		if (device == NULL)
1288 1289 1290
			break;

		device->node_id = node->node_id;
1291
		smp_wmb();  /* update node_id before generation */
1292
		device->generation = card->generation;
1293
		if (atomic_read(&device->state) == FW_DEVICE_RUNNING) {
1294
			device->workfn = fw_device_update;
1295
			fw_schedule_device_work(device, 0);
1296
		}
1297 1298 1299 1300 1301 1302 1303
		break;

	case FW_NODE_DESTROYED:
	case FW_NODE_LINK_OFF:
		if (!node->data)
			break;

1304 1305
		/*
		 * Destroy the device associated with the node.  There
1306 1307 1308 1309 1310 1311 1312 1313
		 * are two cases here: either the device is fully
		 * initialized (FW_DEVICE_RUNNING) or we're in the
		 * process of reading its config rom
		 * (FW_DEVICE_INITIALIZING).  If it is fully
		 * initialized we can reuse device->work to schedule a
		 * full fw_device_shutdown().  If not, there's work
		 * scheduled to read it's config rom, and we just put
		 * the device in shutdown state to have that code fail
1314 1315
		 * to create the device.
		 */
1316
		device = node->data;
1317
		if (atomic_xchg(&device->state,
1318
				FW_DEVICE_GONE) == FW_DEVICE_RUNNING) {
1319
			device->workfn = fw_device_shutdown;
1320
			fw_schedule_device_work(device,
1321
				list_empty(&card->link) ? 0 : SHUTDOWN_DELAY);
1322 1323 1324 1325
		}
		break;
	}
}