xref: /linux/drivers/thunderbolt/configfs.c (revision 3d5e48944e824bddc20d7b874e784f7b279636fe)
1*cba57ed6SMika Westerberg // SPDX-License-Identifier: GPL-2.0
2*cba57ed6SMika Westerberg /*
3*cba57ed6SMika Westerberg  * ConfigFS support
4*cba57ed6SMika Westerberg  *
5*cba57ed6SMika Westerberg  * Copyright (C) 2026, Intel Corporation
6*cba57ed6SMika Westerberg  * Author: Mika Westerberg <mika.westerberg@linux.intel.com>
7*cba57ed6SMika Westerberg  */
8*cba57ed6SMika Westerberg 
9*cba57ed6SMika Westerberg #include <linux/configfs.h>
10*cba57ed6SMika Westerberg #include <linux/export.h>
11*cba57ed6SMika Westerberg 
12*cba57ed6SMika Westerberg #include "tb.h"
13*cba57ed6SMika Westerberg 
14*cba57ed6SMika Westerberg static const struct config_item_type tb_root_group_type = {
15*cba57ed6SMika Westerberg 	.ct_owner = THIS_MODULE,
16*cba57ed6SMika Westerberg };
17*cba57ed6SMika Westerberg 
18*cba57ed6SMika Westerberg static struct configfs_subsystem tb_configfs = {
19*cba57ed6SMika Westerberg 	.su_group = {
20*cba57ed6SMika Westerberg 		.cg_item = {
21*cba57ed6SMika Westerberg 			.ci_namebuf = "thunderbolt",
22*cba57ed6SMika Westerberg 			.ci_type = &tb_root_group_type,
23*cba57ed6SMika Westerberg 		},
24*cba57ed6SMika Westerberg 	},
25*cba57ed6SMika Westerberg };
26*cba57ed6SMika Westerberg 
27*cba57ed6SMika Westerberg /**
28*cba57ed6SMika Westerberg  * tb_configfs_register_group() - Register Thunderbolt ConfigFS group
29*cba57ed6SMika Westerberg  * @group: Group to register.
30*cba57ed6SMika Westerberg  *
31*cba57ed6SMika Westerberg  * Registers the new @group under Thunderbolt subsystem ConfigFS.
32*cba57ed6SMika Westerberg  *
33*cba57ed6SMika Westerberg  * Return: 0% in case of success, negative errno otherwise.
34*cba57ed6SMika Westerberg  */
35*cba57ed6SMika Westerberg int tb_configfs_register_group(struct config_group *group)
36*cba57ed6SMika Westerberg {
37*cba57ed6SMika Westerberg 	return configfs_register_group(&tb_configfs.su_group, group);
38*cba57ed6SMika Westerberg }
39*cba57ed6SMika Westerberg EXPORT_SYMBOL_GPL(tb_configfs_register_group);
40*cba57ed6SMika Westerberg 
41*cba57ed6SMika Westerberg /**
42*cba57ed6SMika Westerberg  * tb_configfs_unregister_group() - Unregister previously registered group
43*cba57ed6SMika Westerberg  * @group: Group to unregister.
44*cba57ed6SMika Westerberg  */
45*cba57ed6SMika Westerberg void tb_configfs_unregister_group(struct config_group *group)
46*cba57ed6SMika Westerberg {
47*cba57ed6SMika Westerberg 	configfs_unregister_group(group);
48*cba57ed6SMika Westerberg }
49*cba57ed6SMika Westerberg EXPORT_SYMBOL_GPL(tb_configfs_unregister_group);
50*cba57ed6SMika Westerberg 
51*cba57ed6SMika Westerberg int tb_configfs_init(void)
52*cba57ed6SMika Westerberg {
53*cba57ed6SMika Westerberg 	config_group_init(&tb_configfs.su_group);
54*cba57ed6SMika Westerberg 	mutex_init(&tb_configfs.su_mutex);
55*cba57ed6SMika Westerberg 	return configfs_register_subsystem(&tb_configfs);
56*cba57ed6SMika Westerberg }
57*cba57ed6SMika Westerberg 
58*cba57ed6SMika Westerberg void tb_configfs_exit(void)
59*cba57ed6SMika Westerberg {
60*cba57ed6SMika Westerberg 	configfs_unregister_subsystem(&tb_configfs);
61*cba57ed6SMika Westerberg }
62