drivers/crypto/ccp/ccp-debugfs.c

Source file repositories/reference/linux-study-clean/drivers/crypto/ccp/ccp-debugfs.c

File Facts

System
Linux kernel
Corpus path
drivers/crypto/ccp/ccp-debugfs.c
Extension
.c
Size
8946 bytes
Lines
327
Domain
Driver Families
Bucket
drivers/crypto
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 const struct file_operations ccp_debugfs_info_ops = {
	.owner = THIS_MODULE,
	.open = simple_open,
	.read = ccp5_debugfs_info_read,
	.write = NULL,
};

static const struct file_operations ccp_debugfs_queue_ops = {
	.owner = THIS_MODULE,
	.open = simple_open,
	.read = ccp5_debugfs_queue_read,
	.write = ccp5_debugfs_queue_write,
};

static const struct file_operations ccp_debugfs_stats_ops = {
	.owner = THIS_MODULE,
	.open = simple_open,
	.read = ccp5_debugfs_stats_read,
	.write = ccp5_debugfs_stats_write,
};

static struct dentry *ccp_debugfs_dir;
static DEFINE_MUTEX(ccp_debugfs_lock);

#define	MAX_NAME_LEN	20

void ccp5_debugfs_setup(struct ccp_device *ccp)
{
	struct ccp_cmd_queue *cmd_q;
	char name[MAX_NAME_LEN + 1];
	struct dentry *debugfs_q_instance;
	int i;

	if (!debugfs_initialized())
		return;

	mutex_lock(&ccp_debugfs_lock);
	if (!ccp_debugfs_dir)
		ccp_debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
	mutex_unlock(&ccp_debugfs_lock);

	ccp->debugfs_instance = debugfs_create_dir(ccp->name, ccp_debugfs_dir);

	debugfs_create_file("info", 0400, ccp->debugfs_instance, ccp,
			    &ccp_debugfs_info_ops);

	debugfs_create_file("stats", 0600, ccp->debugfs_instance, ccp,
			    &ccp_debugfs_stats_ops);

	for (i = 0; i < ccp->cmd_q_count; i++) {
		cmd_q = &ccp->cmd_q[i];

		snprintf(name, MAX_NAME_LEN - 1, "q%d", cmd_q->id);

		debugfs_q_instance =
			debugfs_create_dir(name, ccp->debugfs_instance);

		debugfs_create_file("stats", 0600, debugfs_q_instance, cmd_q,
				    &ccp_debugfs_queue_ops);
	}

	return;
}

void ccp5_debugfs_destroy(void)
{
	mutex_lock(&ccp_debugfs_lock);
	debugfs_remove_recursive(ccp_debugfs_dir);
	ccp_debugfs_dir = NULL;
	mutex_unlock(&ccp_debugfs_lock);
}

Annotation

Implementation Notes