drivers/hwtracing/coresight/coresight-dummy.c

Source file repositories/reference/linux-study-clean/drivers/hwtracing/coresight/coresight-dummy.c

File Facts

System
Linux kernel
Corpus path
drivers/hwtracing/coresight/coresight-dummy.c
Extension
.c
Size
5643 bytes
Lines
229
Domain
Driver Families
Bucket
drivers/hwtracing
Inferred role
Driver Families: implementation source
Status
source 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

struct dummy_drvdata {
	struct device			*dev;
	struct coresight_device		*csdev;
	u8				traceid;
};

static int dummy_source_enable(struct coresight_device *csdev,
			       struct perf_event *event, enum cs_mode mode,
			       __maybe_unused struct coresight_path *path)
{
	if (!coresight_take_mode(csdev, mode))
		return -EBUSY;

	dev_dbg(csdev->dev.parent, "Dummy source enabled\n");

	return 0;
}

static void dummy_source_disable(struct coresight_device *csdev,
				 struct perf_event *event)
{
	coresight_set_mode(csdev, CS_MODE_DISABLED);
	dev_dbg(csdev->dev.parent, "Dummy source disabled\n");
}

static int dummy_source_trace_id(struct coresight_device *csdev, __maybe_unused enum cs_mode mode,
				 __maybe_unused struct coresight_device *sink)
{
	struct dummy_drvdata *drvdata;

	drvdata = dev_get_drvdata(csdev->dev.parent);

	return drvdata->traceid;
}

static int dummy_sink_enable(struct coresight_device *csdev, enum cs_mode mode,
			     struct coresight_path *path)
{
	dev_dbg(csdev->dev.parent, "Dummy sink enabled\n");

	return 0;
}

static int dummy_sink_disable(struct coresight_device *csdev)
{
	dev_dbg(csdev->dev.parent, "Dummy sink disabled\n");

	return 0;
}

static const struct coresight_ops_source dummy_source_ops = {
	.enable	= dummy_source_enable,
	.disable = dummy_source_disable,
};

static const struct coresight_ops dummy_source_cs_ops = {
	.trace_id	= dummy_source_trace_id,
	.source_ops	= &dummy_source_ops,
};

static const struct coresight_ops_sink dummy_sink_ops = {
	.enable	= dummy_sink_enable,
	.disable = dummy_sink_disable,
};

static const struct coresight_ops dummy_sink_cs_ops = {
	.sink_ops = &dummy_sink_ops,
};

/* User can get the trace id of dummy source from this node. */
static ssize_t traceid_show(struct device *dev,
			    struct device_attribute *attr, char *buf)
{
	unsigned long val;
	struct dummy_drvdata *drvdata = dev_get_drvdata(dev->parent);

	val = drvdata->traceid;
	return sysfs_emit(buf, "%#lx\n", val);
}
static DEVICE_ATTR_RO(traceid);

static struct attribute *coresight_dummy_attrs[] = {
	&dev_attr_traceid.attr,
	NULL,
};

static const struct attribute_group coresight_dummy_group = {
	.attrs = coresight_dummy_attrs,
};

Annotation

Implementation Notes