drivers/rapidio/rio-sysfs.c

Source file repositories/reference/linux-study-clean/drivers/rapidio/rio-sysfs.c

File Facts

System
Linux kernel
Corpus path
drivers/rapidio/rio-sysfs.c
Extension
.c
Size
7960 bytes
Lines
367
Domain
Driver Families
Bucket
drivers/rapidio
Inferred role
Driver Families: operation-table or driver-model contract
Status
pattern implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

static ssize_t scan_store(const struct bus_type *bus, const char *buf, size_t count)
{
	long val;
	int rc;

	if (kstrtol(buf, 0, &val) < 0)
		return -EINVAL;

	if (val == RIO_MPORT_ANY) {
		rc = rio_init_mports();
		goto exit;
	}

	if (val < 0 || val >= RIO_MAX_MPORTS)
		return -EINVAL;

	rc = rio_mport_scan((int)val);
exit:
	if (!rc)
		rc = count;

	return rc;
}
static BUS_ATTR_WO(scan);

static struct attribute *rio_bus_attrs[] = {
	&bus_attr_scan.attr,
	NULL,
};

static const struct attribute_group rio_bus_group = {
	.attrs = rio_bus_attrs,
};

const struct attribute_group *rio_bus_groups[] = {
	&rio_bus_group,
	NULL,
};

static ssize_t
port_destid_show(struct device *dev, struct device_attribute *attr,
		 char *buf)
{
	struct rio_mport *mport = to_rio_mport(dev);

	if (mport)
		return sprintf(buf, "0x%04x\n", mport->host_deviceid);
	else
		return -ENODEV;
}
static DEVICE_ATTR_RO(port_destid);

static ssize_t sys_size_show(struct device *dev, struct device_attribute *attr,
			   char *buf)
{
	struct rio_mport *mport = to_rio_mport(dev);

	if (mport)
		return sprintf(buf, "%u\n", mport->sys_size);
	else
		return -ENODEV;
}
static DEVICE_ATTR_RO(sys_size);

static struct attribute *rio_mport_attrs[] = {
	&dev_attr_port_destid.attr,
	&dev_attr_sys_size.attr,
	NULL,
};

static const struct attribute_group rio_mport_group = {
	.attrs = rio_mport_attrs,
};

const struct attribute_group *rio_mport_groups[] = {
	&rio_mport_group,
	NULL,
};

Annotation

Implementation Notes