cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

core-device.c (34148B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Device probing and sysfs code.
      4 *
      5 * Copyright (C) 2005-2006  Kristian Hoegsberg <krh@bitplanet.net>
      6 */
      7
      8#include <linux/bug.h>
      9#include <linux/ctype.h>
     10#include <linux/delay.h>
     11#include <linux/device.h>
     12#include <linux/errno.h>
     13#include <linux/firewire.h>
     14#include <linux/firewire-constants.h>
     15#include <linux/idr.h>
     16#include <linux/jiffies.h>
     17#include <linux/kobject.h>
     18#include <linux/list.h>
     19#include <linux/mod_devicetable.h>
     20#include <linux/module.h>
     21#include <linux/mutex.h>
     22#include <linux/random.h>
     23#include <linux/rwsem.h>
     24#include <linux/slab.h>
     25#include <linux/spinlock.h>
     26#include <linux/string.h>
     27#include <linux/workqueue.h>
     28
     29#include <linux/atomic.h>
     30#include <asm/byteorder.h>
     31
     32#include "core.h"
     33
     34void fw_csr_iterator_init(struct fw_csr_iterator *ci, const u32 *p)
     35{
     36	ci->p = p + 1;
     37	ci->end = ci->p + (p[0] >> 16);
     38}
     39EXPORT_SYMBOL(fw_csr_iterator_init);
     40
     41int fw_csr_iterator_next(struct fw_csr_iterator *ci, int *key, int *value)
     42{
     43	*key = *ci->p >> 24;
     44	*value = *ci->p & 0xffffff;
     45
     46	return ci->p++ < ci->end;
     47}
     48EXPORT_SYMBOL(fw_csr_iterator_next);
     49
     50static const u32 *search_leaf(const u32 *directory, int search_key)
     51{
     52	struct fw_csr_iterator ci;
     53	int last_key = 0, key, value;
     54
     55	fw_csr_iterator_init(&ci, directory);
     56	while (fw_csr_iterator_next(&ci, &key, &value)) {
     57		if (last_key == search_key &&
     58		    key == (CSR_DESCRIPTOR | CSR_LEAF))
     59			return ci.p - 1 + value;
     60
     61		last_key = key;
     62	}
     63
     64	return NULL;
     65}
     66
     67static int textual_leaf_to_string(const u32 *block, char *buf, size_t size)
     68{
     69	unsigned int quadlets, i;
     70	char c;
     71
     72	if (!size || !buf)
     73		return -EINVAL;
     74
     75	quadlets = min(block[0] >> 16, 256U);
     76	if (quadlets < 2)
     77		return -ENODATA;
     78
     79	if (block[1] != 0 || block[2] != 0)
     80		/* unknown language/character set */
     81		return -ENODATA;
     82
     83	block += 3;
     84	quadlets -= 2;
     85	for (i = 0; i < quadlets * 4 && i < size - 1; i++) {
     86		c = block[i / 4] >> (24 - 8 * (i % 4));
     87		if (c == '\0')
     88			break;
     89		buf[i] = c;
     90	}
     91	buf[i] = '\0';
     92
     93	return i;
     94}
     95
     96/**
     97 * fw_csr_string() - reads a string from the configuration ROM
     98 * @directory:	e.g. root directory or unit directory
     99 * @key:	the key of the preceding directory entry
    100 * @buf:	where to put the string
    101 * @size:	size of @buf, in bytes
    102 *
    103 * The string is taken from a minimal ASCII text descriptor leaf after
    104 * the immediate entry with @key.  The string is zero-terminated.
    105 * An overlong string is silently truncated such that it and the
    106 * zero byte fit into @size.
    107 *
    108 * Returns strlen(buf) or a negative error code.
    109 */
    110int fw_csr_string(const u32 *directory, int key, char *buf, size_t size)
    111{
    112	const u32 *leaf = search_leaf(directory, key);
    113	if (!leaf)
    114		return -ENOENT;
    115
    116	return textual_leaf_to_string(leaf, buf, size);
    117}
    118EXPORT_SYMBOL(fw_csr_string);
    119
    120static void get_ids(const u32 *directory, int *id)
    121{
    122	struct fw_csr_iterator ci;
    123	int key, value;
    124
    125	fw_csr_iterator_init(&ci, directory);
    126	while (fw_csr_iterator_next(&ci, &key, &value)) {
    127		switch (key) {
    128		case CSR_VENDOR:	id[0] = value; break;
    129		case CSR_MODEL:		id[1] = value; break;
    130		case CSR_SPECIFIER_ID:	id[2] = value; break;
    131		case CSR_VERSION:	id[3] = value; break;
    132		}
    133	}
    134}
    135
    136static void get_modalias_ids(struct fw_unit *unit, int *id)
    137{
    138	get_ids(&fw_parent_device(unit)->config_rom[5], id);
    139	get_ids(unit->directory, id);
    140}
    141
    142static bool match_ids(const struct ieee1394_device_id *id_table, int *id)
    143{
    144	int match = 0;
    145
    146	if (id[0] == id_table->vendor_id)
    147		match |= IEEE1394_MATCH_VENDOR_ID;
    148	if (id[1] == id_table->model_id)
    149		match |= IEEE1394_MATCH_MODEL_ID;
    150	if (id[2] == id_table->specifier_id)
    151		match |= IEEE1394_MATCH_SPECIFIER_ID;
    152	if (id[3] == id_table->version)
    153		match |= IEEE1394_MATCH_VERSION;
    154
    155	return (match & id_table->match_flags) == id_table->match_flags;
    156}
    157
    158static const struct ieee1394_device_id *unit_match(struct device *dev,
    159						   struct device_driver *drv)
    160{
    161	const struct ieee1394_device_id *id_table =
    162			container_of(drv, struct fw_driver, driver)->id_table;
    163	int id[] = {0, 0, 0, 0};
    164
    165	get_modalias_ids(fw_unit(dev), id);
    166
    167	for (; id_table->match_flags != 0; id_table++)
    168		if (match_ids(id_table, id))
    169			return id_table;
    170
    171	return NULL;
    172}
    173
    174static bool is_fw_unit(struct device *dev);
    175
    176static int fw_unit_match(struct device *dev, struct device_driver *drv)
    177{
    178	/* We only allow binding to fw_units. */
    179	return is_fw_unit(dev) && unit_match(dev, drv) != NULL;
    180}
    181
    182static int fw_unit_probe(struct device *dev)
    183{
    184	struct fw_driver *driver =
    185			container_of(dev->driver, struct fw_driver, driver);
    186
    187	return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
    188}
    189
    190static void fw_unit_remove(struct device *dev)
    191{
    192	struct fw_driver *driver =
    193			container_of(dev->driver, struct fw_driver, driver);
    194
    195	driver->remove(fw_unit(dev));
    196}
    197
    198static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
    199{
    200	int id[] = {0, 0, 0, 0};
    201
    202	get_modalias_ids(unit, id);
    203
    204	return snprintf(buffer, buffer_size,
    205			"ieee1394:ven%08Xmo%08Xsp%08Xver%08X",
    206			id[0], id[1], id[2], id[3]);
    207}
    208
    209static int fw_unit_uevent(struct device *dev, struct kobj_uevent_env *env)
    210{
    211	struct fw_unit *unit = fw_unit(dev);
    212	char modalias[64];
    213
    214	get_modalias(unit, modalias, sizeof(modalias));
    215
    216	if (add_uevent_var(env, "MODALIAS=%s", modalias))
    217		return -ENOMEM;
    218
    219	return 0;
    220}
    221
    222struct bus_type fw_bus_type = {
    223	.name = "firewire",
    224	.match = fw_unit_match,
    225	.probe = fw_unit_probe,
    226	.remove = fw_unit_remove,
    227};
    228EXPORT_SYMBOL(fw_bus_type);
    229
    230int fw_device_enable_phys_dma(struct fw_device *device)
    231{
    232	int generation = device->generation;
    233
    234	/* device->node_id, accessed below, must not be older than generation */
    235	smp_rmb();
    236
    237	return device->card->driver->enable_phys_dma(device->card,
    238						     device->node_id,
    239						     generation);
    240}
    241EXPORT_SYMBOL(fw_device_enable_phys_dma);
    242
    243struct config_rom_attribute {
    244	struct device_attribute attr;
    245	u32 key;
    246};
    247
    248static ssize_t show_immediate(struct device *dev,
    249			      struct device_attribute *dattr, char *buf)
    250{
    251	struct config_rom_attribute *attr =
    252		container_of(dattr, struct config_rom_attribute, attr);
    253	struct fw_csr_iterator ci;
    254	const u32 *dir;
    255	int key, value, ret = -ENOENT;
    256
    257	down_read(&fw_device_rwsem);
    258
    259	if (is_fw_unit(dev))
    260		dir = fw_unit(dev)->directory;
    261	else
    262		dir = fw_device(dev)->config_rom + 5;
    263
    264	fw_csr_iterator_init(&ci, dir);
    265	while (fw_csr_iterator_next(&ci, &key, &value))
    266		if (attr->key == key) {
    267			ret = snprintf(buf, buf ? PAGE_SIZE : 0,
    268				       "0x%06x\n", value);
    269			break;
    270		}
    271
    272	up_read(&fw_device_rwsem);
    273
    274	return ret;
    275}
    276
    277#define IMMEDIATE_ATTR(name, key)				\
    278	{ __ATTR(name, S_IRUGO, show_immediate, NULL), key }
    279
    280static ssize_t show_text_leaf(struct device *dev,
    281			      struct device_attribute *dattr, char *buf)
    282{
    283	struct config_rom_attribute *attr =
    284		container_of(dattr, struct config_rom_attribute, attr);
    285	const u32 *dir;
    286	size_t bufsize;
    287	char dummy_buf[2];
    288	int ret;
    289
    290	down_read(&fw_device_rwsem);
    291
    292	if (is_fw_unit(dev))
    293		dir = fw_unit(dev)->directory;
    294	else
    295		dir = fw_device(dev)->config_rom + 5;
    296
    297	if (buf) {
    298		bufsize = PAGE_SIZE - 1;
    299	} else {
    300		buf = dummy_buf;
    301		bufsize = 1;
    302	}
    303
    304	ret = fw_csr_string(dir, attr->key, buf, bufsize);
    305
    306	if (ret >= 0) {
    307		/* Strip trailing whitespace and add newline. */
    308		while (ret > 0 && isspace(buf[ret - 1]))
    309			ret--;
    310		strcpy(buf + ret, "\n");
    311		ret++;
    312	}
    313
    314	up_read(&fw_device_rwsem);
    315
    316	return ret;
    317}
    318
    319#define TEXT_LEAF_ATTR(name, key)				\
    320	{ __ATTR(name, S_IRUGO, show_text_leaf, NULL), key }
    321
    322static struct config_rom_attribute config_rom_attributes[] = {
    323	IMMEDIATE_ATTR(vendor, CSR_VENDOR),
    324	IMMEDIATE_ATTR(hardware_version, CSR_HARDWARE_VERSION),
    325	IMMEDIATE_ATTR(specifier_id, CSR_SPECIFIER_ID),
    326	IMMEDIATE_ATTR(version, CSR_VERSION),
    327	IMMEDIATE_ATTR(model, CSR_MODEL),
    328	TEXT_LEAF_ATTR(vendor_name, CSR_VENDOR),
    329	TEXT_LEAF_ATTR(model_name, CSR_MODEL),
    330	TEXT_LEAF_ATTR(hardware_version_name, CSR_HARDWARE_VERSION),
    331};
    332
    333static void init_fw_attribute_group(struct device *dev,
    334				    struct device_attribute *attrs,
    335				    struct fw_attribute_group *group)
    336{
    337	struct device_attribute *attr;
    338	int i, j;
    339
    340	for (j = 0; attrs[j].attr.name != NULL; j++)
    341		group->attrs[j] = &attrs[j].attr;
    342
    343	for (i = 0; i < ARRAY_SIZE(config_rom_attributes); i++) {
    344		attr = &config_rom_attributes[i].attr;
    345		if (attr->show(dev, attr, NULL) < 0)
    346			continue;
    347		group->attrs[j++] = &attr->attr;
    348	}
    349
    350	group->attrs[j] = NULL;
    351	group->groups[0] = &group->group;
    352	group->groups[1] = NULL;
    353	group->group.attrs = group->attrs;
    354	dev->groups = (const struct attribute_group **) group->groups;
    355}
    356
    357static ssize_t modalias_show(struct device *dev,
    358			     struct device_attribute *attr, char *buf)
    359{
    360	struct fw_unit *unit = fw_unit(dev);
    361	int length;
    362
    363	length = get_modalias(unit, buf, PAGE_SIZE);
    364	strcpy(buf + length, "\n");
    365
    366	return length + 1;
    367}
    368
    369static ssize_t rom_index_show(struct device *dev,
    370			      struct device_attribute *attr, char *buf)
    371{
    372	struct fw_device *device = fw_device(dev->parent);
    373	struct fw_unit *unit = fw_unit(dev);
    374
    375	return sysfs_emit(buf, "%td\n", unit->directory - device->config_rom);
    376}
    377
    378static struct device_attribute fw_unit_attributes[] = {
    379	__ATTR_RO(modalias),
    380	__ATTR_RO(rom_index),
    381	__ATTR_NULL,
    382};
    383
    384static ssize_t config_rom_show(struct device *dev,
    385			       struct device_attribute *attr, char *buf)
    386{
    387	struct fw_device *device = fw_device(dev);
    388	size_t length;
    389
    390	down_read(&fw_device_rwsem);
    391	length = device->config_rom_length * 4;
    392	memcpy(buf, device->config_rom, length);
    393	up_read(&fw_device_rwsem);
    394
    395	return length;
    396}
    397
    398static ssize_t guid_show(struct device *dev,
    399			 struct device_attribute *attr, char *buf)
    400{
    401	struct fw_device *device = fw_device(dev);
    402	int ret;
    403
    404	down_read(&fw_device_rwsem);
    405	ret = sysfs_emit(buf, "0x%08x%08x\n", device->config_rom[3], device->config_rom[4]);
    406	up_read(&fw_device_rwsem);
    407
    408	return ret;
    409}
    410
    411static ssize_t is_local_show(struct device *dev,
    412			     struct device_attribute *attr, char *buf)
    413{
    414	struct fw_device *device = fw_device(dev);
    415
    416	return sprintf(buf, "%u\n", device->is_local);
    417}
    418
    419static int units_sprintf(char *buf, const u32 *directory)
    420{
    421	struct fw_csr_iterator ci;
    422	int key, value;
    423	int specifier_id = 0;
    424	int version = 0;
    425
    426	fw_csr_iterator_init(&ci, directory);
    427	while (fw_csr_iterator_next(&ci, &key, &value)) {
    428		switch (key) {
    429		case CSR_SPECIFIER_ID:
    430			specifier_id = value;
    431			break;
    432		case CSR_VERSION:
    433			version = value;
    434			break;
    435		}
    436	}
    437
    438	return sprintf(buf, "0x%06x:0x%06x ", specifier_id, version);
    439}
    440
    441static ssize_t units_show(struct device *dev,
    442			  struct device_attribute *attr, char *buf)
    443{
    444	struct fw_device *device = fw_device(dev);
    445	struct fw_csr_iterator ci;
    446	int key, value, i = 0;
    447
    448	down_read(&fw_device_rwsem);
    449	fw_csr_iterator_init(&ci, &device->config_rom[5]);
    450	while (fw_csr_iterator_next(&ci, &key, &value)) {
    451		if (key != (CSR_UNIT | CSR_DIRECTORY))
    452			continue;
    453		i += units_sprintf(&buf[i], ci.p + value - 1);
    454		if (i >= PAGE_SIZE - (8 + 1 + 8 + 1))
    455			break;
    456	}
    457	up_read(&fw_device_rwsem);
    458
    459	if (i)
    460		buf[i - 1] = '\n';
    461
    462	return i;
    463}
    464
    465static struct device_attribute fw_device_attributes[] = {
    466	__ATTR_RO(config_rom),
    467	__ATTR_RO(guid),
    468	__ATTR_RO(is_local),
    469	__ATTR_RO(units),
    470	__ATTR_NULL,
    471};
    472
    473static int read_rom(struct fw_device *device,
    474		    int generation, int index, u32 *data)
    475{
    476	u64 offset = (CSR_REGISTER_BASE | CSR_CONFIG_ROM) + index * 4;
    477	int i, rcode;
    478
    479	/* device->node_id, accessed below, must not be older than generation */
    480	smp_rmb();
    481
    482	for (i = 10; i < 100; i += 10) {
    483		rcode = fw_run_transaction(device->card,
    484				TCODE_READ_QUADLET_REQUEST, device->node_id,
    485				generation, device->max_speed, offset, data, 4);
    486		if (rcode != RCODE_BUSY)
    487			break;
    488		msleep(i);
    489	}
    490	be32_to_cpus(data);
    491
    492	return rcode;
    493}
    494
    495#define MAX_CONFIG_ROM_SIZE 256
    496
    497/*
    498 * Read the bus info block, perform a speed probe, and read all of the rest of
    499 * the config ROM.  We do all this with a cached bus generation.  If the bus
    500 * generation changes under us, read_config_rom will fail and get retried.
    501 * It's better to start all over in this case because the node from which we
    502 * are reading the ROM may have changed the ROM during the reset.
    503 * Returns either a result code or a negative error code.
    504 */
    505static int read_config_rom(struct fw_device *device, int generation)
    506{
    507	struct fw_card *card = device->card;
    508	const u32 *old_rom, *new_rom;
    509	u32 *rom, *stack;
    510	u32 sp, key;
    511	int i, end, length, ret;
    512
    513	rom = kmalloc(sizeof(*rom) * MAX_CONFIG_ROM_SIZE +
    514		      sizeof(*stack) * MAX_CONFIG_ROM_SIZE, GFP_KERNEL);
    515	if (rom == NULL)
    516		return -ENOMEM;
    517
    518	stack = &rom[MAX_CONFIG_ROM_SIZE];
    519	memset(rom, 0, sizeof(*rom) * MAX_CONFIG_ROM_SIZE);
    520
    521	device->max_speed = SCODE_100;
    522
    523	/* First read the bus info block. */
    524	for (i = 0; i < 5; i++) {
    525		ret = read_rom(device, generation, i, &rom[i]);
    526		if (ret != RCODE_COMPLETE)
    527			goto out;
    528		/*
    529		 * As per IEEE1212 7.2, during initialization, devices can
    530		 * reply with a 0 for the first quadlet of the config
    531		 * rom to indicate that they are booting (for example,
    532		 * if the firmware is on the disk of a external
    533		 * harddisk).  In that case we just fail, and the
    534		 * retry mechanism will try again later.
    535		 */
    536		if (i == 0 && rom[i] == 0) {
    537			ret = RCODE_BUSY;
    538			goto out;
    539		}
    540	}
    541
    542	device->max_speed = device->node->max_speed;
    543
    544	/*
    545	 * Determine the speed of
    546	 *   - devices with link speed less than PHY speed,
    547	 *   - devices with 1394b PHY (unless only connected to 1394a PHYs),
    548	 *   - all devices if there are 1394b repeaters.
    549	 * Note, we cannot use the bus info block's link_spd as starting point
    550	 * because some buggy firmwares set it lower than necessary and because
    551	 * 1394-1995 nodes do not have the field.
    552	 */
    553	if ((rom[2] & 0x7) < device->max_speed ||
    554	    device->max_speed == SCODE_BETA ||
    555	    card->beta_repeaters_present) {
    556		u32 dummy;
    557
    558		/* for S1600 and S3200 */
    559		if (device->max_speed == SCODE_BETA)
    560			device->max_speed = card->link_speed;
    561
    562		while (device->max_speed > SCODE_100) {
    563			if (read_rom(device, generation, 0, &dummy) ==
    564			    RCODE_COMPLETE)
    565				break;
    566			device->max_speed--;
    567		}
    568	}
    569
    570	/*
    571	 * Now parse the config rom.  The config rom is a recursive
    572	 * directory structure so we parse it using a stack of
    573	 * references to the blocks that make up the structure.  We
    574	 * push a reference to the root directory on the stack to
    575	 * start things off.
    576	 */
    577	length = i;
    578	sp = 0;
    579	stack[sp++] = 0xc0000005;
    580	while (sp > 0) {
    581		/*
    582		 * Pop the next block reference of the stack.  The
    583		 * lower 24 bits is the offset into the config rom,
    584		 * the upper 8 bits are the type of the reference the
    585		 * block.
    586		 */
    587		key = stack[--sp];
    588		i = key & 0xffffff;
    589		if (WARN_ON(i >= MAX_CONFIG_ROM_SIZE)) {
    590			ret = -ENXIO;
    591			goto out;
    592		}
    593
    594		/* Read header quadlet for the block to get the length. */
    595		ret = read_rom(device, generation, i, &rom[i]);
    596		if (ret != RCODE_COMPLETE)
    597			goto out;
    598		end = i + (rom[i] >> 16) + 1;
    599		if (end > MAX_CONFIG_ROM_SIZE) {
    600			/*
    601			 * This block extends outside the config ROM which is
    602			 * a firmware bug.  Ignore this whole block, i.e.
    603			 * simply set a fake block length of 0.
    604			 */
    605			fw_err(card, "skipped invalid ROM block %x at %llx\n",
    606			       rom[i],
    607			       i * 4 | CSR_REGISTER_BASE | CSR_CONFIG_ROM);
    608			rom[i] = 0;
    609			end = i;
    610		}
    611		i++;
    612
    613		/*
    614		 * Now read in the block.  If this is a directory
    615		 * block, check the entries as we read them to see if
    616		 * it references another block, and push it in that case.
    617		 */
    618		for (; i < end; i++) {
    619			ret = read_rom(device, generation, i, &rom[i]);
    620			if (ret != RCODE_COMPLETE)
    621				goto out;
    622
    623			if ((key >> 30) != 3 || (rom[i] >> 30) < 2)
    624				continue;
    625			/*
    626			 * Offset points outside the ROM.  May be a firmware
    627			 * bug or an Extended ROM entry (IEEE 1212-2001 clause
    628			 * 7.7.18).  Simply overwrite this pointer here by a
    629			 * fake immediate entry so that later iterators over
    630			 * the ROM don't have to check offsets all the time.
    631			 */
    632			if (i + (rom[i] & 0xffffff) >= MAX_CONFIG_ROM_SIZE) {
    633				fw_err(card,
    634				       "skipped unsupported ROM entry %x at %llx\n",
    635				       rom[i],
    636				       i * 4 | CSR_REGISTER_BASE | CSR_CONFIG_ROM);
    637				rom[i] = 0;
    638				continue;
    639			}
    640			stack[sp++] = i + rom[i];
    641		}
    642		if (length < i)
    643			length = i;
    644	}
    645
    646	old_rom = device->config_rom;
    647	new_rom = kmemdup(rom, length * 4, GFP_KERNEL);
    648	if (new_rom == NULL) {
    649		ret = -ENOMEM;
    650		goto out;
    651	}
    652
    653	down_write(&fw_device_rwsem);
    654	device->config_rom = new_rom;
    655	device->config_rom_length = length;
    656	up_write(&fw_device_rwsem);
    657
    658	kfree(old_rom);
    659	ret = RCODE_COMPLETE;
    660	device->max_rec	= rom[2] >> 12 & 0xf;
    661	device->cmc	= rom[2] >> 30 & 1;
    662	device->irmc	= rom[2] >> 31 & 1;
    663 out:
    664	kfree(rom);
    665
    666	return ret;
    667}
    668
    669static void fw_unit_release(struct device *dev)
    670{
    671	struct fw_unit *unit = fw_unit(dev);
    672
    673	fw_device_put(fw_parent_device(unit));
    674	kfree(unit);
    675}
    676
    677static struct device_type fw_unit_type = {
    678	.uevent		= fw_unit_uevent,
    679	.release	= fw_unit_release,
    680};
    681
    682static bool is_fw_unit(struct device *dev)
    683{
    684	return dev->type == &fw_unit_type;
    685}
    686
    687static void create_units(struct fw_device *device)
    688{
    689	struct fw_csr_iterator ci;
    690	struct fw_unit *unit;
    691	int key, value, i;
    692
    693	i = 0;
    694	fw_csr_iterator_init(&ci, &device->config_rom[5]);
    695	while (fw_csr_iterator_next(&ci, &key, &value)) {
    696		if (key != (CSR_UNIT | CSR_DIRECTORY))
    697			continue;
    698
    699		/*
    700		 * Get the address of the unit directory and try to
    701		 * match the drivers id_tables against it.
    702		 */
    703		unit = kzalloc(sizeof(*unit), GFP_KERNEL);
    704		if (unit == NULL)
    705			continue;
    706
    707		unit->directory = ci.p + value - 1;
    708		unit->device.bus = &fw_bus_type;
    709		unit->device.type = &fw_unit_type;
    710		unit->device.parent = &device->device;
    711		dev_set_name(&unit->device, "%s.%d", dev_name(&device->device), i++);
    712
    713		BUILD_BUG_ON(ARRAY_SIZE(unit->attribute_group.attrs) <
    714				ARRAY_SIZE(fw_unit_attributes) +
    715				ARRAY_SIZE(config_rom_attributes));
    716		init_fw_attribute_group(&unit->device,
    717					fw_unit_attributes,
    718					&unit->attribute_group);
    719
    720		if (device_register(&unit->device) < 0)
    721			goto skip_unit;
    722
    723		fw_device_get(device);
    724		continue;
    725
    726	skip_unit:
    727		kfree(unit);
    728	}
    729}
    730
    731static int shutdown_unit(struct device *device, void *data)
    732{
    733	device_unregister(device);
    734
    735	return 0;
    736}
    737
    738/*
    739 * fw_device_rwsem acts as dual purpose mutex:
    740 *   - serializes accesses to fw_device_idr,
    741 *   - serializes accesses to fw_device.config_rom/.config_rom_length and
    742 *     fw_unit.directory, unless those accesses happen at safe occasions
    743 */
    744DECLARE_RWSEM(fw_device_rwsem);
    745
    746DEFINE_IDR(fw_device_idr);
    747int fw_cdev_major;
    748
    749struct fw_device *fw_device_get_by_devt(dev_t devt)
    750{
    751	struct fw_device *device;
    752
    753	down_read(&fw_device_rwsem);
    754	device = idr_find(&fw_device_idr, MINOR(devt));
    755	if (device)
    756		fw_device_get(device);
    757	up_read(&fw_device_rwsem);
    758
    759	return device;
    760}
    761
    762struct workqueue_struct *fw_workqueue;
    763EXPORT_SYMBOL(fw_workqueue);
    764
    765static void fw_schedule_device_work(struct fw_device *device,
    766				    unsigned long delay)
    767{
    768	queue_delayed_work(fw_workqueue, &device->work, delay);
    769}
    770
    771/*
    772 * These defines control the retry behavior for reading the config
    773 * rom.  It shouldn't be necessary to tweak these; if the device
    774 * doesn't respond to a config rom read within 10 seconds, it's not
    775 * going to respond at all.  As for the initial delay, a lot of
    776 * devices will be able to respond within half a second after bus
    777 * reset.  On the other hand, it's not really worth being more
    778 * aggressive than that, since it scales pretty well; if 10 devices
    779 * are plugged in, they're all getting read within one second.
    780 */
    781
    782#define MAX_RETRIES	10
    783#define RETRY_DELAY	(3 * HZ)
    784#define INITIAL_DELAY	(HZ / 2)
    785#define SHUTDOWN_DELAY	(2 * HZ)
    786
    787static void fw_device_shutdown(struct work_struct *work)
    788{
    789	struct fw_device *device =
    790		container_of(work, struct fw_device, work.work);
    791	int minor = MINOR(device->device.devt);
    792
    793	if (time_before64(get_jiffies_64(),
    794			  device->card->reset_jiffies + SHUTDOWN_DELAY)
    795	    && !list_empty(&device->card->link)) {
    796		fw_schedule_device_work(device, SHUTDOWN_DELAY);
    797		return;
    798	}
    799
    800	if (atomic_cmpxchg(&device->state,
    801			   FW_DEVICE_GONE,
    802			   FW_DEVICE_SHUTDOWN) != FW_DEVICE_GONE)
    803		return;
    804
    805	fw_device_cdev_remove(device);
    806	device_for_each_child(&device->device, NULL, shutdown_unit);
    807	device_unregister(&device->device);
    808
    809	down_write(&fw_device_rwsem);
    810	idr_remove(&fw_device_idr, minor);
    811	up_write(&fw_device_rwsem);
    812
    813	fw_device_put(device);
    814}
    815
    816static void fw_device_release(struct device *dev)
    817{
    818	struct fw_device *device = fw_device(dev);
    819	struct fw_card *card = device->card;
    820	unsigned long flags;
    821
    822	/*
    823	 * Take the card lock so we don't set this to NULL while a
    824	 * FW_NODE_UPDATED callback is being handled or while the
    825	 * bus manager work looks at this node.
    826	 */
    827	spin_lock_irqsave(&card->lock, flags);
    828	device->node->data = NULL;
    829	spin_unlock_irqrestore(&card->lock, flags);
    830
    831	fw_node_put(device->node);
    832	kfree(device->config_rom);
    833	kfree(device);
    834	fw_card_put(card);
    835}
    836
    837static struct device_type fw_device_type = {
    838	.release = fw_device_release,
    839};
    840
    841static bool is_fw_device(struct device *dev)
    842{
    843	return dev->type == &fw_device_type;
    844}
    845
    846static int update_unit(struct device *dev, void *data)
    847{
    848	struct fw_unit *unit = fw_unit(dev);
    849	struct fw_driver *driver = (struct fw_driver *)dev->driver;
    850
    851	if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) {
    852		device_lock(dev);
    853		driver->update(unit);
    854		device_unlock(dev);
    855	}
    856
    857	return 0;
    858}
    859
    860static void fw_device_update(struct work_struct *work)
    861{
    862	struct fw_device *device =
    863		container_of(work, struct fw_device, work.work);
    864
    865	fw_device_cdev_update(device);
    866	device_for_each_child(&device->device, NULL, update_unit);
    867}
    868
    869/*
    870 * If a device was pending for deletion because its node went away but its
    871 * bus info block and root directory header matches that of a newly discovered
    872 * device, revive the existing fw_device.
    873 * The newly allocated fw_device becomes obsolete instead.
    874 */
    875static int lookup_existing_device(struct device *dev, void *data)
    876{
    877	struct fw_device *old = fw_device(dev);
    878	struct fw_device *new = data;
    879	struct fw_card *card = new->card;
    880	int match = 0;
    881
    882	if (!is_fw_device(dev))
    883		return 0;
    884
    885	down_read(&fw_device_rwsem); /* serialize config_rom access */
    886	spin_lock_irq(&card->lock);  /* serialize node access */
    887
    888	if (memcmp(old->config_rom, new->config_rom, 6 * 4) == 0 &&
    889	    atomic_cmpxchg(&old->state,
    890			   FW_DEVICE_GONE,
    891			   FW_DEVICE_RUNNING) == FW_DEVICE_GONE) {
    892		struct fw_node *current_node = new->node;
    893		struct fw_node *obsolete_node = old->node;
    894
    895		new->node = obsolete_node;
    896		new->node->data = new;
    897		old->node = current_node;
    898		old->node->data = old;
    899
    900		old->max_speed = new->max_speed;
    901		old->node_id = current_node->node_id;
    902		smp_wmb();  /* update node_id before generation */
    903		old->generation = card->generation;
    904		old->config_rom_retries = 0;
    905		fw_notice(card, "rediscovered device %s\n", dev_name(dev));
    906
    907		old->workfn = fw_device_update;
    908		fw_schedule_device_work(old, 0);
    909
    910		if (current_node == card->root_node)
    911			fw_schedule_bm_work(card, 0);
    912
    913		match = 1;
    914	}
    915
    916	spin_unlock_irq(&card->lock);
    917	up_read(&fw_device_rwsem);
    918
    919	return match;
    920}
    921
    922enum { BC_UNKNOWN = 0, BC_UNIMPLEMENTED, BC_IMPLEMENTED, };
    923
    924static void set_broadcast_channel(struct fw_device *device, int generation)
    925{
    926	struct fw_card *card = device->card;
    927	__be32 data;
    928	int rcode;
    929
    930	if (!card->broadcast_channel_allocated)
    931		return;
    932
    933	/*
    934	 * The Broadcast_Channel Valid bit is required by nodes which want to
    935	 * transmit on this channel.  Such transmissions are practically
    936	 * exclusive to IP over 1394 (RFC 2734).  IP capable nodes are required
    937	 * to be IRM capable and have a max_rec of 8 or more.  We use this fact
    938	 * to narrow down to which nodes we send Broadcast_Channel updates.
    939	 */
    940	if (!device->irmc || device->max_rec < 8)
    941		return;
    942
    943	/*
    944	 * Some 1394-1995 nodes crash if this 1394a-2000 register is written.
    945	 * Perform a read test first.
    946	 */
    947	if (device->bc_implemented == BC_UNKNOWN) {
    948		rcode = fw_run_transaction(card, TCODE_READ_QUADLET_REQUEST,
    949				device->node_id, generation, device->max_speed,
    950				CSR_REGISTER_BASE + CSR_BROADCAST_CHANNEL,
    951				&data, 4);
    952		switch (rcode) {
    953		case RCODE_COMPLETE:
    954			if (data & cpu_to_be32(1 << 31)) {
    955				device->bc_implemented = BC_IMPLEMENTED;
    956				break;
    957			}
    958			fallthrough;	/* to case address error */
    959		case RCODE_ADDRESS_ERROR:
    960			device->bc_implemented = BC_UNIMPLEMENTED;
    961		}
    962	}
    963
    964	if (device->bc_implemented == BC_IMPLEMENTED) {
    965		data = cpu_to_be32(BROADCAST_CHANNEL_INITIAL |
    966				   BROADCAST_CHANNEL_VALID);
    967		fw_run_transaction(card, TCODE_WRITE_QUADLET_REQUEST,
    968				device->node_id, generation, device->max_speed,
    969				CSR_REGISTER_BASE + CSR_BROADCAST_CHANNEL,
    970				&data, 4);
    971	}
    972}
    973
    974int fw_device_set_broadcast_channel(struct device *dev, void *gen)
    975{
    976	if (is_fw_device(dev))
    977		set_broadcast_channel(fw_device(dev), (long)gen);
    978
    979	return 0;
    980}
    981
    982static void fw_device_init(struct work_struct *work)
    983{
    984	struct fw_device *device =
    985		container_of(work, struct fw_device, work.work);
    986	struct fw_card *card = device->card;
    987	struct device *revived_dev;
    988	int minor, ret;
    989
    990	/*
    991	 * All failure paths here set node->data to NULL, so that we
    992	 * don't try to do device_for_each_child() on a kfree()'d
    993	 * device.
    994	 */
    995
    996	ret = read_config_rom(device, device->generation);
    997	if (ret != RCODE_COMPLETE) {
    998		if (device->config_rom_retries < MAX_RETRIES &&
    999		    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
   1000			device->config_rom_retries++;
   1001			fw_schedule_device_work(device, RETRY_DELAY);
   1002		} else {
   1003			if (device->node->link_on)
   1004				fw_notice(card, "giving up on node %x: reading config rom failed: %s\n",
   1005					  device->node_id,
   1006					  fw_rcode_string(ret));
   1007			if (device->node == card->root_node)
   1008				fw_schedule_bm_work(card, 0);
   1009			fw_device_release(&device->device);
   1010		}
   1011		return;
   1012	}
   1013
   1014	revived_dev = device_find_child(card->device,
   1015					device, lookup_existing_device);
   1016	if (revived_dev) {
   1017		put_device(revived_dev);
   1018		fw_device_release(&device->device);
   1019
   1020		return;
   1021	}
   1022
   1023	device_initialize(&device->device);
   1024
   1025	fw_device_get(device);
   1026	down_write(&fw_device_rwsem);
   1027	minor = idr_alloc(&fw_device_idr, device, 0, 1 << MINORBITS,
   1028			GFP_KERNEL);
   1029	up_write(&fw_device_rwsem);
   1030
   1031	if (minor < 0)
   1032		goto error;
   1033
   1034	device->device.bus = &fw_bus_type;
   1035	device->device.type = &fw_device_type;
   1036	device->device.parent = card->device;
   1037	device->device.devt = MKDEV(fw_cdev_major, minor);
   1038	dev_set_name(&device->device, "fw%d", minor);
   1039
   1040	BUILD_BUG_ON(ARRAY_SIZE(device->attribute_group.attrs) <
   1041			ARRAY_SIZE(fw_device_attributes) +
   1042			ARRAY_SIZE(config_rom_attributes));
   1043	init_fw_attribute_group(&device->device,
   1044				fw_device_attributes,
   1045				&device->attribute_group);
   1046
   1047	if (device_add(&device->device)) {
   1048		fw_err(card, "failed to add device\n");
   1049		goto error_with_cdev;
   1050	}
   1051
   1052	create_units(device);
   1053
   1054	/*
   1055	 * Transition the device to running state.  If it got pulled
   1056	 * out from under us while we did the initialization work, we
   1057	 * have to shut down the device again here.  Normally, though,
   1058	 * fw_node_event will be responsible for shutting it down when
   1059	 * necessary.  We have to use the atomic cmpxchg here to avoid
   1060	 * racing with the FW_NODE_DESTROYED case in
   1061	 * fw_node_event().
   1062	 */
   1063	if (atomic_cmpxchg(&device->state,
   1064			   FW_DEVICE_INITIALIZING,
   1065			   FW_DEVICE_RUNNING) == FW_DEVICE_GONE) {
   1066		device->workfn = fw_device_shutdown;
   1067		fw_schedule_device_work(device, SHUTDOWN_DELAY);
   1068	} else {
   1069		fw_notice(card, "created device %s: GUID %08x%08x, S%d00\n",
   1070			  dev_name(&device->device),
   1071			  device->config_rom[3], device->config_rom[4],
   1072			  1 << device->max_speed);
   1073		device->config_rom_retries = 0;
   1074
   1075		set_broadcast_channel(device, device->generation);
   1076
   1077		add_device_randomness(&device->config_rom[3], 8);
   1078	}
   1079
   1080	/*
   1081	 * Reschedule the IRM work if we just finished reading the
   1082	 * root node config rom.  If this races with a bus reset we
   1083	 * just end up running the IRM work a couple of extra times -
   1084	 * pretty harmless.
   1085	 */
   1086	if (device->node == card->root_node)
   1087		fw_schedule_bm_work(card, 0);
   1088
   1089	return;
   1090
   1091 error_with_cdev:
   1092	down_write(&fw_device_rwsem);
   1093	idr_remove(&fw_device_idr, minor);
   1094	up_write(&fw_device_rwsem);
   1095 error:
   1096	fw_device_put(device);		/* fw_device_idr's reference */
   1097
   1098	put_device(&device->device);	/* our reference */
   1099}
   1100
   1101/* Reread and compare bus info block and header of root directory */
   1102static int reread_config_rom(struct fw_device *device, int generation,
   1103			     bool *changed)
   1104{
   1105	u32 q;
   1106	int i, rcode;
   1107
   1108	for (i = 0; i < 6; i++) {
   1109		rcode = read_rom(device, generation, i, &q);
   1110		if (rcode != RCODE_COMPLETE)
   1111			return rcode;
   1112
   1113		if (i == 0 && q == 0)
   1114			/* inaccessible (see read_config_rom); retry later */
   1115			return RCODE_BUSY;
   1116
   1117		if (q != device->config_rom[i]) {
   1118			*changed = true;
   1119			return RCODE_COMPLETE;
   1120		}
   1121	}
   1122
   1123	*changed = false;
   1124	return RCODE_COMPLETE;
   1125}
   1126
   1127static void fw_device_refresh(struct work_struct *work)
   1128{
   1129	struct fw_device *device =
   1130		container_of(work, struct fw_device, work.work);
   1131	struct fw_card *card = device->card;
   1132	int ret, node_id = device->node_id;
   1133	bool changed;
   1134
   1135	ret = reread_config_rom(device, device->generation, &changed);
   1136	if (ret != RCODE_COMPLETE)
   1137		goto failed_config_rom;
   1138
   1139	if (!changed) {
   1140		if (atomic_cmpxchg(&device->state,
   1141				   FW_DEVICE_INITIALIZING,
   1142				   FW_DEVICE_RUNNING) == FW_DEVICE_GONE)
   1143			goto gone;
   1144
   1145		fw_device_update(work);
   1146		device->config_rom_retries = 0;
   1147		goto out;
   1148	}
   1149
   1150	/*
   1151	 * Something changed.  We keep things simple and don't investigate
   1152	 * further.  We just destroy all previous units and create new ones.
   1153	 */
   1154	device_for_each_child(&device->device, NULL, shutdown_unit);
   1155
   1156	ret = read_config_rom(device, device->generation);
   1157	if (ret != RCODE_COMPLETE)
   1158		goto failed_config_rom;
   1159
   1160	fw_device_cdev_update(device);
   1161	create_units(device);
   1162
   1163	/* Userspace may want to re-read attributes. */
   1164	kobject_uevent(&device->device.kobj, KOBJ_CHANGE);
   1165
   1166	if (atomic_cmpxchg(&device->state,
   1167			   FW_DEVICE_INITIALIZING,
   1168			   FW_DEVICE_RUNNING) == FW_DEVICE_GONE)
   1169		goto gone;
   1170
   1171	fw_notice(card, "refreshed device %s\n", dev_name(&device->device));
   1172	device->config_rom_retries = 0;
   1173	goto out;
   1174
   1175 failed_config_rom:
   1176	if (device->config_rom_retries < MAX_RETRIES &&
   1177	    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
   1178		device->config_rom_retries++;
   1179		fw_schedule_device_work(device, RETRY_DELAY);
   1180		return;
   1181	}
   1182
   1183	fw_notice(card, "giving up on refresh of device %s: %s\n",
   1184		  dev_name(&device->device), fw_rcode_string(ret));
   1185 gone:
   1186	atomic_set(&device->state, FW_DEVICE_GONE);
   1187	device->workfn = fw_device_shutdown;
   1188	fw_schedule_device_work(device, SHUTDOWN_DELAY);
   1189 out:
   1190	if (node_id == card->root_node->node_id)
   1191		fw_schedule_bm_work(card, 0);
   1192}
   1193
   1194static void fw_device_workfn(struct work_struct *work)
   1195{
   1196	struct fw_device *device = container_of(to_delayed_work(work),
   1197						struct fw_device, work);
   1198	device->workfn(work);
   1199}
   1200
   1201void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
   1202{
   1203	struct fw_device *device;
   1204
   1205	switch (event) {
   1206	case FW_NODE_CREATED:
   1207		/*
   1208		 * Attempt to scan the node, regardless whether its self ID has
   1209		 * the L (link active) flag set or not.  Some broken devices
   1210		 * send L=0 but have an up-and-running link; others send L=1
   1211		 * without actually having a link.
   1212		 */
   1213 create:
   1214		device = kzalloc(sizeof(*device), GFP_ATOMIC);
   1215		if (device == NULL)
   1216			break;
   1217
   1218		/*
   1219		 * Do minimal initialization of the device here, the
   1220		 * rest will happen in fw_device_init().
   1221		 *
   1222		 * Attention:  A lot of things, even fw_device_get(),
   1223		 * cannot be done before fw_device_init() finished!
   1224		 * You can basically just check device->state and
   1225		 * schedule work until then, but only while holding
   1226		 * card->lock.
   1227		 */
   1228		atomic_set(&device->state, FW_DEVICE_INITIALIZING);
   1229		device->card = fw_card_get(card);
   1230		device->node = fw_node_get(node);
   1231		device->node_id = node->node_id;
   1232		device->generation = card->generation;
   1233		device->is_local = node == card->local_node;
   1234		mutex_init(&device->client_list_mutex);
   1235		INIT_LIST_HEAD(&device->client_list);
   1236
   1237		/*
   1238		 * Set the node data to point back to this device so
   1239		 * FW_NODE_UPDATED callbacks can update the node_id
   1240		 * and generation for the device.
   1241		 */
   1242		node->data = device;
   1243
   1244		/*
   1245		 * Many devices are slow to respond after bus resets,
   1246		 * especially if they are bus powered and go through
   1247		 * power-up after getting plugged in.  We schedule the
   1248		 * first config rom scan half a second after bus reset.
   1249		 */
   1250		device->workfn = fw_device_init;
   1251		INIT_DELAYED_WORK(&device->work, fw_device_workfn);
   1252		fw_schedule_device_work(device, INITIAL_DELAY);
   1253		break;
   1254
   1255	case FW_NODE_INITIATED_RESET:
   1256	case FW_NODE_LINK_ON:
   1257		device = node->data;
   1258		if (device == NULL)
   1259			goto create;
   1260
   1261		device->node_id = node->node_id;
   1262		smp_wmb();  /* update node_id before generation */
   1263		device->generation = card->generation;
   1264		if (atomic_cmpxchg(&device->state,
   1265			    FW_DEVICE_RUNNING,
   1266			    FW_DEVICE_INITIALIZING) == FW_DEVICE_RUNNING) {
   1267			device->workfn = fw_device_refresh;
   1268			fw_schedule_device_work(device,
   1269				device->is_local ? 0 : INITIAL_DELAY);
   1270		}
   1271		break;
   1272
   1273	case FW_NODE_UPDATED:
   1274		device = node->data;
   1275		if (device == NULL)
   1276			break;
   1277
   1278		device->node_id = node->node_id;
   1279		smp_wmb();  /* update node_id before generation */
   1280		device->generation = card->generation;
   1281		if (atomic_read(&device->state) == FW_DEVICE_RUNNING) {
   1282			device->workfn = fw_device_update;
   1283			fw_schedule_device_work(device, 0);
   1284		}
   1285		break;
   1286
   1287	case FW_NODE_DESTROYED:
   1288	case FW_NODE_LINK_OFF:
   1289		if (!node->data)
   1290			break;
   1291
   1292		/*
   1293		 * Destroy the device associated with the node.  There
   1294		 * are two cases here: either the device is fully
   1295		 * initialized (FW_DEVICE_RUNNING) or we're in the
   1296		 * process of reading its config rom
   1297		 * (FW_DEVICE_INITIALIZING).  If it is fully
   1298		 * initialized we can reuse device->work to schedule a
   1299		 * full fw_device_shutdown().  If not, there's work
   1300		 * scheduled to read it's config rom, and we just put
   1301		 * the device in shutdown state to have that code fail
   1302		 * to create the device.
   1303		 */
   1304		device = node->data;
   1305		if (atomic_xchg(&device->state,
   1306				FW_DEVICE_GONE) == FW_DEVICE_RUNNING) {
   1307			device->workfn = fw_device_shutdown;
   1308			fw_schedule_device_work(device,
   1309				list_empty(&card->link) ? 0 : SHUTDOWN_DELAY);
   1310		}
   1311		break;
   1312	}
   1313}