core-device.c 33.2 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/rwsem.h>
36
#include <linux/slab.h>
J
Jay Fenlason 已提交
37
#include <linux/spinlock.h>
38 39 40
#include <linux/string.h>
#include <linux/workqueue.h>

A
Arun Sharma 已提交
41
#include <linux/atomic.h>
S
Stefan Richter 已提交
42
#include <asm/byteorder.h>
43
#include <asm/system.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 bool is_fw_unit(struct device *dev);

170 171
static int fw_unit_match(struct device *dev, struct device_driver *drv)
{
172 173 174
	const struct ieee1394_device_id *id_table =
			container_of(drv, struct fw_driver, driver)->id_table;
	int id[] = {0, 0, 0, 0};
175 176 177 178 179

	/* We only allow binding to fw_units. */
	if (!is_fw_unit(dev))
		return 0;

180
	get_modalias_ids(fw_unit(dev), id);
181

182 183
	for (; id_table->match_flags != 0; id_table++)
		if (match_ids(id_table, id))
184 185 186 187 188 189 190
			return 1;

	return 0;
}

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

193
	get_modalias_ids(unit, id);
194 195 196

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

200
static int fw_unit_uevent(struct device *dev, struct kobj_uevent_env *env)
201 202 203 204
{
	struct fw_unit *unit = fw_unit(dev);
	char modalias[64];

205
	get_modalias(unit, modalias, sizeof(modalias));
206

207
	if (add_uevent_var(env, "MODALIAS=%s", modalias))
208 209 210 211 212 213
		return -ENOMEM;

	return 0;
}

struct bus_type fw_bus_type = {
214
	.name = "firewire",
215 216 217 218 219 220
	.match = fw_unit_match,
};
EXPORT_SYMBOL(fw_bus_type);

int fw_device_enable_phys_dma(struct fw_device *device)
{
221 222 223 224 225
	int generation = device->generation;

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

226 227
	return device->card->driver->enable_phys_dma(device->card,
						     device->node_id,
228
						     generation);
229 230 231
}
EXPORT_SYMBOL(fw_device_enable_phys_dma);

232 233 234 235 236
struct config_rom_attribute {
	struct device_attribute attr;
	u32 key;
};

237 238
static ssize_t show_immediate(struct device *dev,
			      struct device_attribute *dattr, char *buf)
239 240 241 242
{
	struct config_rom_attribute *attr =
		container_of(dattr, struct config_rom_attribute, attr);
	struct fw_csr_iterator ci;
243
	const u32 *dir;
244 245 246
	int key, value, ret = -ENOENT;

	down_read(&fw_device_rwsem);
247 248 249 250 251 252 253 254

	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))
255 256 257 258 259 260 261
		if (attr->key == key) {
			ret = snprintf(buf, buf ? PAGE_SIZE : 0,
				       "0x%06x\n", value);
			break;
		}

	up_read(&fw_device_rwsem);
262

263
	return ret;
264 265 266 267 268
}

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

269 270
static ssize_t show_text_leaf(struct device *dev,
			      struct device_attribute *dattr, char *buf)
271 272 273
{
	struct config_rom_attribute *attr =
		container_of(dattr, struct config_rom_attribute, attr);
274
	const u32 *dir;
275 276 277
	size_t bufsize;
	char dummy_buf[2];
	int ret;
278

279 280
	down_read(&fw_device_rwsem);

281 282 283 284 285
	if (is_fw_unit(dev))
		dir = fw_unit(dev)->directory;
	else
		dir = fw_device(dev)->config_rom + 5;

286 287 288 289 290
	if (buf) {
		bufsize = PAGE_SIZE - 1;
	} else {
		buf = dummy_buf;
		bufsize = 1;
291 292
	}

293
	ret = fw_csr_string(dir, attr->key, buf, bufsize);
294

295 296 297 298 299 300
	if (ret >= 0) {
		/* Strip trailing whitespace and add newline. */
		while (ret > 0 && isspace(buf[ret - 1]))
			ret--;
		strcpy(buf + ret, "\n");
		ret++;
301
	}
302

303
	up_read(&fw_device_rwsem);
304

305
	return ret;
306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
}

#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),
};

322 323 324
static void init_fw_attribute_group(struct device *dev,
				    struct device_attribute *attrs,
				    struct fw_attribute_group *group)
325 326
{
	struct device_attribute *attr;
327 328 329 330
	int i, j;

	for (j = 0; attrs[j].attr.name != NULL; j++)
		group->attrs[j] = &attrs[j].attr;
331 332 333 334 335

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

339
	group->attrs[j] = NULL;
340 341 342
	group->groups[0] = &group->group;
	group->groups[1] = NULL;
	group->group.attrs = group->attrs;
343
	dev->groups = (const struct attribute_group **) group->groups;
344 345
}

346 347
static ssize_t modalias_show(struct device *dev,
			     struct device_attribute *attr, char *buf)
348 349 350 351 352 353 354 355 356 357
{
	struct fw_unit *unit = fw_unit(dev);
	int length;

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

	return length + 1;
}

358 359
static ssize_t rom_index_show(struct device *dev,
			      struct device_attribute *attr, char *buf)
360
{
361 362
	struct fw_device *device = fw_device(dev->parent);
	struct fw_unit *unit = fw_unit(dev);
363

364 365
	return snprintf(buf, PAGE_SIZE, "%d\n",
			(int)(unit->directory - device->config_rom));
366 367
}

368 369 370 371
static struct device_attribute fw_unit_attributes[] = {
	__ATTR_RO(modalias),
	__ATTR_RO(rom_index),
	__ATTR_NULL,
372 373
};

374 375
static ssize_t config_rom_show(struct device *dev,
			       struct device_attribute *attr, char *buf)
376
{
377
	struct fw_device *device = fw_device(dev);
378
	size_t length;
379

380 381 382 383
	down_read(&fw_device_rwsem);
	length = device->config_rom_length * 4;
	memcpy(buf, device->config_rom, length);
	up_read(&fw_device_rwsem);
384

385
	return length;
386 387
}

388 389
static ssize_t guid_show(struct device *dev,
			 struct device_attribute *attr, char *buf)
390 391
{
	struct fw_device *device = fw_device(dev);
392 393 394 395 396 397
	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);
398

399
	return ret;
400 401
}

402
static int units_sprintf(char *buf, const u32 *directory)
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447
{
	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;
}

448 449
static struct device_attribute fw_device_attributes[] = {
	__ATTR_RO(config_rom),
450
	__ATTR_RO(guid),
451
	__ATTR_RO(units),
452
	__ATTR_NULL,
453 454
};

455 456
static int read_rom(struct fw_device *device,
		    int generation, int index, u32 *data)
457
{
458 459
	u64 offset = (CSR_REGISTER_BASE | CSR_CONFIG_ROM) + index * 4;
	int i, rcode;
460 461 462

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

464 465 466 467 468 469 470 471
	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 已提交
472
	be32_to_cpus(data);
473

J
Jay Fenlason 已提交
474
	return rcode;
475 476
}

477
#define MAX_CONFIG_ROM_SIZE 256
478

479 480 481
/*
 * 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
482
 * generation changes under us, read_config_rom will fail and get retried.
483 484 485
 * 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.
 */
486
static int read_config_rom(struct fw_device *device, int generation)
487
{
488 489
	const u32 *old_rom, *new_rom;
	u32 *rom, *stack;
490 491 492
	u32 sp, key;
	int i, end, length, ret = -1;

493 494
	rom = kmalloc(sizeof(*rom) * MAX_CONFIG_ROM_SIZE +
		      sizeof(*stack) * MAX_CONFIG_ROM_SIZE, GFP_KERNEL);
495 496 497
	if (rom == NULL)
		return -ENOMEM;

498 499
	stack = &rom[MAX_CONFIG_ROM_SIZE];
	memset(rom, 0, sizeof(*rom) * MAX_CONFIG_ROM_SIZE);
500

501 502
	device->max_speed = SCODE_100;

503 504
	/* First read the bus info block. */
	for (i = 0; i < 5; i++) {
505
		if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
506
			goto out;
507 508
		/*
		 * As per IEEE1212 7.2, during power-up, devices can
509 510 511 512
		 * 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
513 514
		 * retry mechanism will try again later.
		 */
515
		if (i == 0 && rom[i] == 0)
516
			goto out;
517 518
	}

519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539
	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 ||
	    device->card->beta_repeaters_present) {
		u32 dummy;

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

		while (device->max_speed > SCODE_100) {
540 541
			if (read_rom(device, generation, 0, &dummy) ==
			    RCODE_COMPLETE)
542 543 544 545 546
				break;
			device->max_speed--;
		}
	}

547 548
	/*
	 * Now parse the config rom.  The config rom is a recursive
549 550 551
	 * 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
552 553
	 * start things off.
	 */
554 555 556 557
	length = i;
	sp = 0;
	stack[sp++] = 0xc0000005;
	while (sp > 0) {
558 559
		/*
		 * Pop the next block reference of the stack.  The
560 561
		 * lower 24 bits is the offset into the config rom,
		 * the upper 8 bits are the type of the reference the
562 563
		 * block.
		 */
564 565
		key = stack[--sp];
		i = key & 0xffffff;
566
		if (WARN_ON(i >= MAX_CONFIG_ROM_SIZE))
567
			goto out;
568 569

		/* Read header quadlet for the block to get the length. */
570
		if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
571
			goto out;
572
		end = i + (rom[i] >> 16) + 1;
573
		if (end > MAX_CONFIG_ROM_SIZE) {
574
			/*
575 576 577
			 * 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.
578
			 */
579 580 581 582 583 584 585
			fw_error("skipped invalid ROM block %x at %llx\n",
				 rom[i],
				 i * 4 | CSR_REGISTER_BASE | CSR_CONFIG_ROM);
			rom[i] = 0;
			end = i;
		}
		i++;
586

587 588
		/*
		 * Now read in the block.  If this is a directory
589
		 * block, check the entries as we read them to see if
590 591
		 * it references another block, and push it in that case.
		 */
592
		for (; i < end; i++) {
593 594
			if (read_rom(device, generation, i, &rom[i]) !=
			    RCODE_COMPLETE)
595
				goto out;
596

597
			if ((key >> 30) != 3 || (rom[i] >> 30) < 2)
598 599 600 601 602 603 604 605
				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.
			 */
606
			if (i + (rom[i] & 0xffffff) >= MAX_CONFIG_ROM_SIZE) {
607 608 609 610 611 612 613
				fw_error("skipped unsupported ROM entry %x at %llx\n",
					 rom[i],
					 i * 4 | CSR_REGISTER_BASE | CSR_CONFIG_ROM);
				rom[i] = 0;
				continue;
			}
			stack[sp++] = i + rom[i];
614 615 616 617 618
		}
		if (length < i)
			length = i;
	}

619 620 621
	old_rom = device->config_rom;
	new_rom = kmemdup(rom, length * 4, GFP_KERNEL);
	if (new_rom == NULL)
622
		goto out;
623 624 625

	down_write(&fw_device_rwsem);
	device->config_rom = new_rom;
626
	device->config_rom_length = length;
627 628 629
	up_write(&fw_device_rwsem);

	kfree(old_rom);
630
	ret = 0;
631 632 633
	device->max_rec	= rom[2] >> 12 & 0xf;
	device->cmc	= rom[2] >> 30 & 1;
	device->irmc	= rom[2] >> 31 & 1;
634 635
 out:
	kfree(rom);
636

637
	return ret;
638 639 640 641 642 643 644 645 646
}

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

	kfree(unit);
}

647 648 649 650 651
static struct device_type fw_unit_type = {
	.uevent		= fw_unit_uevent,
	.release	= fw_unit_release,
};

652
static bool is_fw_unit(struct device *dev)
653
{
654
	return dev->type == &fw_unit_type;
655 656 657 658 659 660 661 662 663 664 665 666 667 668
}

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;

669 670 671 672
		/*
		 * Get the address of the unit directory and try to
		 * match the drivers id_tables against it.
		 */
673
		unit = kzalloc(sizeof(*unit), GFP_KERNEL);
674 675 676 677 678 679 680
		if (unit == NULL) {
			fw_error("failed to allocate memory for unit\n");
			continue;
		}

		unit->directory = ci.p + value - 1;
		unit->device.bus = &fw_bus_type;
681
		unit->device.type = &fw_unit_type;
682
		unit->device.parent = &device->device;
683
		dev_set_name(&unit->device, "%s.%d", dev_name(&device->device), i++);
684

685 686 687
		BUILD_BUG_ON(ARRAY_SIZE(unit->attribute_group.attrs) <
				ARRAY_SIZE(fw_unit_attributes) +
				ARRAY_SIZE(config_rom_attributes));
688 689 690
		init_fw_attribute_group(&unit->device,
					fw_unit_attributes,
					&unit->attribute_group);
691

692 693 694 695 696 697 698
		if (device_register(&unit->device) < 0)
			goto skip_unit;

		continue;

	skip_unit:
		kfree(unit);
699 700 701 702 703
	}
}

static int shutdown_unit(struct device *device, void *data)
{
704
	device_unregister(device);
705 706 707 708

	return 0;
}

709 710 711 712 713 714 715 716
/*
 * 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);

717
DEFINE_IDR(fw_device_idr);
718 719
int fw_cdev_major;

720
struct fw_device *fw_device_get_by_devt(dev_t devt)
721 722 723
{
	struct fw_device *device;

724
	down_read(&fw_device_rwsem);
725
	device = idr_find(&fw_device_idr, MINOR(devt));
726 727
	if (device)
		fw_device_get(device);
728
	up_read(&fw_device_rwsem);
729 730 731 732

	return device;
}

733 734
struct workqueue_struct *fw_workqueue;
EXPORT_SYMBOL(fw_workqueue);
735 736 737 738

static void fw_schedule_device_work(struct fw_device *device,
				    unsigned long delay)
{
739
	queue_delayed_work(fw_workqueue, &device->work, delay);
740 741
}

742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757
/*
 * 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)

758 759 760 761
static void fw_device_shutdown(struct work_struct *work)
{
	struct fw_device *device =
		container_of(work, struct fw_device, work.work);
762 763
	int minor = MINOR(device->device.devt);

764 765
	if (time_before64(get_jiffies_64(),
			  device->card->reset_jiffies + SHUTDOWN_DELAY)
766
	    && !list_empty(&device->card->link)) {
767
		fw_schedule_device_work(device, SHUTDOWN_DELAY);
768 769 770 771 772 773 774 775
		return;
	}

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

776
	fw_device_cdev_remove(device);
777 778
	device_for_each_child(&device->device, NULL, shutdown_unit);
	device_unregister(&device->device);
779

780
	down_write(&fw_device_rwsem);
781
	idr_remove(&fw_device_idr, minor);
782
	up_write(&fw_device_rwsem);
783

784
	fw_device_put(device);
785 786
}

787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807
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);
}

808
static struct device_type fw_device_type = {
809
	.release = fw_device_release,
810 811
};

812 813 814 815 816
static bool is_fw_device(struct device *dev)
{
	return dev->type == &fw_device_type;
}

817 818 819 820 821 822
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) {
823
		device_lock(dev);
824
		driver->update(unit);
825
		device_unlock(dev);
826 827 828 829 830 831 832 833 834 835 836 837 838
	}

	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);
}
839

840
/*
841 842 843 844
 * 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.
845
 */
846 847 848 849 850 851 852
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;

853 854 855
	if (!is_fw_device(dev))
		return 0;

856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876
	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;
		fw_notify("rediscovered device %s\n", dev_name(dev));
877

878
		PREPARE_DELAYED_WORK(&old->work, fw_device_update);
879
		fw_schedule_device_work(old, 0);
880 881 882 883 884 885 886 887 888 889 890 891

		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;
}
892

893 894
enum { BC_UNKNOWN = 0, BC_UNIMPLEMENTED, BC_IMPLEMENTED, };

895
static void set_broadcast_channel(struct fw_device *device, int generation)
896 897 898 899 900 901 902 903
{
	struct fw_card *card = device->card;
	__be32 data;
	int rcode;

	if (!card->broadcast_channel_allocated)
		return;

904 905 906 907 908 909 910 911 912 913 914 915 916 917
	/*
	 * 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.
	 */
918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944
	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);
	}
}

945 946 947 948 949 950 951 952
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;
}

953 954 955 956
static void fw_device_init(struct work_struct *work)
{
	struct fw_device *device =
		container_of(work, struct fw_device, work.work);
957
	struct device *revived_dev;
958
	int minor, ret;
959

960 961
	/*
	 * All failure paths here set node->data to NULL, so that we
962
	 * don't try to do device_for_each_child() on a kfree()'d
963 964
	 * device.
	 */
965

966
	if (read_config_rom(device, device->generation) < 0) {
967 968
		if (device->config_rom_retries < MAX_RETRIES &&
		    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
969
			device->config_rom_retries++;
970
			fw_schedule_device_work(device, RETRY_DELAY);
971
		} else {
972 973 974
			if (device->node->link_on)
				fw_notify("giving up on config rom for node id %x\n",
					  device->node_id);
975
			if (device->node == device->card->root_node)
976
				fw_schedule_bm_work(device->card, 0);
977 978 979 980 981
			fw_device_release(&device->device);
		}
		return;
	}

982 983 984 985 986 987 988 989 990
	revived_dev = device_find_child(device->card->device,
					device, lookup_existing_device);
	if (revived_dev) {
		put_device(revived_dev);
		fw_device_release(&device->device);

		return;
	}

991
	device_initialize(&device->device);
992 993

	fw_device_get(device);
994
	down_write(&fw_device_rwsem);
995
	ret = idr_pre_get(&fw_device_idr, GFP_KERNEL) ?
996 997
	      idr_get_new(&fw_device_idr, device, &minor) :
	      -ENOMEM;
998
	up_write(&fw_device_rwsem);
999

1000
	if (ret < 0)
1001 1002
		goto error;

1003
	device->device.bus = &fw_bus_type;
1004
	device->device.type = &fw_device_type;
1005
	device->device.parent = device->card->device;
1006
	device->device.devt = MKDEV(fw_cdev_major, minor);
1007
	dev_set_name(&device->device, "fw%d", minor);
1008

1009 1010 1011
	BUILD_BUG_ON(ARRAY_SIZE(device->attribute_group.attrs) <
			ARRAY_SIZE(fw_device_attributes) +
			ARRAY_SIZE(config_rom_attributes));
1012 1013 1014
	init_fw_attribute_group(&device->device,
				fw_device_attributes,
				&device->attribute_group);
1015

1016 1017
	if (device_add(&device->device)) {
		fw_error("Failed to add device.\n");
1018
		goto error_with_cdev;
1019 1020 1021 1022
	}

	create_units(device);

1023 1024
	/*
	 * Transition the device to running state.  If it got pulled
1025 1026 1027 1028 1029
	 * 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
1030 1031
	 * fw_node_event().
	 */
1032
	if (atomic_cmpxchg(&device->state,
1033 1034 1035
			   FW_DEVICE_INITIALIZING,
			   FW_DEVICE_RUNNING) == FW_DEVICE_GONE) {
		PREPARE_DELAYED_WORK(&device->work, fw_device_shutdown);
1036
		fw_schedule_device_work(device, SHUTDOWN_DELAY);
1037 1038 1039 1040
	} else {
		if (device->config_rom_retries)
			fw_notify("created device %s: GUID %08x%08x, S%d00, "
				  "%d config ROM retries\n",
1041
				  dev_name(&device->device),
1042 1043 1044 1045 1046
				  device->config_rom[3], device->config_rom[4],
				  1 << device->max_speed,
				  device->config_rom_retries);
		else
			fw_notify("created device %s: GUID %08x%08x, S%d00\n",
1047
				  dev_name(&device->device),
1048 1049
				  device->config_rom[3], device->config_rom[4],
				  1 << device->max_speed);
1050
		device->config_rom_retries = 0;
1051

1052
		set_broadcast_channel(device, device->generation);
1053
	}
1054

1055 1056
	/*
	 * Reschedule the IRM work if we just finished reading the
1057 1058
	 * root node config rom.  If this races with a bus reset we
	 * just end up running the IRM work a couple of extra times -
1059 1060
	 * pretty harmless.
	 */
1061
	if (device->node == device->card->root_node)
1062
		fw_schedule_bm_work(device->card, 0);
1063 1064 1065

	return;

1066
 error_with_cdev:
1067
	down_write(&fw_device_rwsem);
1068
	idr_remove(&fw_device_idr, minor);
1069
	up_write(&fw_device_rwsem);
S
Stefan Richter 已提交
1070
 error:
1071 1072 1073
	fw_device_put(device);		/* fw_device_idr's reference */

	put_device(&device->device);	/* our reference */
1074 1075
}

1076 1077 1078 1079 1080 1081 1082 1083
enum {
	REREAD_BIB_ERROR,
	REREAD_BIB_GONE,
	REREAD_BIB_UNCHANGED,
	REREAD_BIB_CHANGED,
};

/* Reread and compare bus info block and header of root directory */
1084
static int reread_config_rom(struct fw_device *device, int generation)
1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095
{
	u32 q;
	int i;

	for (i = 0; i < 6; i++) {
		if (read_rom(device, generation, i, &q) != RCODE_COMPLETE)
			return REREAD_BIB_ERROR;

		if (i == 0 && q == 0)
			return REREAD_BIB_GONE;

1096
		if (q != device->config_rom[i])
1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109
			return REREAD_BIB_CHANGED;
	}

	return REREAD_BIB_UNCHANGED;
}

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;
	int node_id = device->node_id;

1110
	switch (reread_config_rom(device, device->generation)) {
1111 1112 1113 1114
	case REREAD_BIB_ERROR:
		if (device->config_rom_retries < MAX_RETRIES / 2 &&
		    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
			device->config_rom_retries++;
1115
			fw_schedule_device_work(device, RETRY_DELAY / 2);
1116 1117 1118 1119 1120 1121 1122 1123 1124 1125

			return;
		}
		goto give_up;

	case REREAD_BIB_GONE:
		goto gone;

	case REREAD_BIB_UNCHANGED:
		if (atomic_cmpxchg(&device->state,
1126 1127
				   FW_DEVICE_INITIALIZING,
				   FW_DEVICE_RUNNING) == FW_DEVICE_GONE)
1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143
			goto gone;

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

	case REREAD_BIB_CHANGED:
		break;
	}

	/*
	 * 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);

1144
	if (read_config_rom(device, device->generation) < 0) {
1145 1146 1147
		if (device->config_rom_retries < MAX_RETRIES &&
		    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
			device->config_rom_retries++;
1148
			fw_schedule_device_work(device, RETRY_DELAY);
1149 1150 1151 1152 1153 1154

			return;
		}
		goto give_up;
	}

1155
	fw_device_cdev_update(device);
1156 1157
	create_units(device);

1158 1159 1160
	/* Userspace may want to re-read attributes. */
	kobject_uevent(&device->device.kobj, KOBJ_CHANGE);

1161
	if (atomic_cmpxchg(&device->state,
1162 1163
			   FW_DEVICE_INITIALIZING,
			   FW_DEVICE_RUNNING) == FW_DEVICE_GONE)
1164 1165
		goto gone;

1166
	fw_notify("refreshed device %s\n", dev_name(&device->device));
1167 1168 1169 1170
	device->config_rom_retries = 0;
	goto out;

 give_up:
1171
	fw_notify("giving up on refresh of device %s\n", dev_name(&device->device));
1172
 gone:
1173 1174
	atomic_set(&device->state, FW_DEVICE_GONE);
	PREPARE_DELAYED_WORK(&device->work, fw_device_shutdown);
1175
	fw_schedule_device_work(device, SHUTDOWN_DELAY);
1176 1177
 out:
	if (node_id == card->root_node->node_id)
1178
		fw_schedule_bm_work(card, 0);
1179 1180
}

1181 1182 1183 1184 1185 1186
void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
{
	struct fw_device *device;

	switch (event) {
	case FW_NODE_CREATED:
1187 1188 1189 1190 1191 1192
		/*
		 * 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.
		 */
1193
 create:
1194 1195 1196 1197
		device = kzalloc(sizeof(*device), GFP_ATOMIC);
		if (device == NULL)
			break;

1198 1199
		/*
		 * Do minimal intialization of the device here, the
1200 1201 1202 1203 1204 1205 1206
		 * 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.
1207
		 */
1208
		atomic_set(&device->state, FW_DEVICE_INITIALIZING);
1209
		device->card = fw_card_get(card);
1210 1211 1212
		device->node = fw_node_get(node);
		device->node_id = node->node_id;
		device->generation = card->generation;
1213
		device->is_local = node == card->local_node;
1214
		mutex_init(&device->client_list_mutex);
1215
		INIT_LIST_HEAD(&device->client_list);
1216

1217 1218
		/*
		 * Set the node data to point back to this device so
1219
		 * FW_NODE_UPDATED callbacks can update the node_id
1220 1221
		 * and generation for the device.
		 */
1222 1223
		node->data = device;

1224 1225
		/*
		 * Many devices are slow to respond after bus resets,
1226 1227
		 * especially if they are bus powered and go through
		 * power-up after getting plugged in.  We schedule the
1228 1229
		 * first config rom scan half a second after bus reset.
		 */
1230
		INIT_DELAYED_WORK(&device->work, fw_device_init);
1231
		fw_schedule_device_work(device, INITIAL_DELAY);
1232 1233
		break;

1234
	case FW_NODE_INITIATED_RESET:
1235
	case FW_NODE_LINK_ON:
1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246
		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) {
			PREPARE_DELAYED_WORK(&device->work, fw_device_refresh);
1247
			fw_schedule_device_work(device,
1248
				device->is_local ? 0 : INITIAL_DELAY);
1249 1250 1251
		}
		break;

1252
	case FW_NODE_UPDATED:
1253 1254
		device = node->data;
		if (device == NULL)
1255 1256 1257
			break;

		device->node_id = node->node_id;
1258
		smp_wmb();  /* update node_id before generation */
1259
		device->generation = card->generation;
1260 1261
		if (atomic_read(&device->state) == FW_DEVICE_RUNNING) {
			PREPARE_DELAYED_WORK(&device->work, fw_device_update);
1262
			fw_schedule_device_work(device, 0);
1263
		}
1264 1265 1266 1267 1268 1269 1270
		break;

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

1271 1272
		/*
		 * Destroy the device associated with the node.  There
1273 1274 1275 1276 1277 1278 1279 1280
		 * 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
1281 1282
		 * to create the device.
		 */
1283
		device = node->data;
1284
		if (atomic_xchg(&device->state,
1285
				FW_DEVICE_GONE) == FW_DEVICE_RUNNING) {
1286
			PREPARE_DELAYED_WORK(&device->work, fw_device_shutdown);
1287
			fw_schedule_device_work(device,
1288
				list_empty(&card->link) ? 0 : SHUTDOWN_DELAY);
1289 1290 1291 1292
		}
		break;
	}
}