diff options
author | Jason Gunthorpe <jgg@nvidia.com> | 2021-06-11 18:00:28 +0200 |
---|---|---|
committer | Jason Gunthorpe <jgg@nvidia.com> | 2021-06-17 01:58:30 +0200 |
commit | 054239f45c6346025afe252fe6f470a4093f61f9 (patch) | |
tree | 8008f978e18f3ee883b9037a20edf422e78f5c18 /include/rdma/ib_sysfs.h | |
parent | RDMA/core: Remove the kobject_uevent() NOP (diff) | |
download | linux-054239f45c6346025afe252fe6f470a4093f61f9.tar.xz linux-054239f45c6346025afe252fe6f470a4093f61f9.zip |
RDMA/core: Expose the ib port sysfs attribute machinery
Other things outside the core code are creating attributes against the
port. This patch exposes the basic machinery to do this.
The ib_port_attribute type allows creating groups of attributes attatched
to the port and comes with the usual machinery to do this.
Link: https://lore.kernel.org/r/5c4aeae57f6fa7c59a1d6d1c5506069516ae9bbf.1623427137.git.leonro@nvidia.com
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Diffstat (limited to 'include/rdma/ib_sysfs.h')
-rw-r--r-- | include/rdma/ib_sysfs.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/include/rdma/ib_sysfs.h b/include/rdma/ib_sysfs.h new file mode 100644 index 000000000000..f869d0e4fd30 --- /dev/null +++ b/include/rdma/ib_sysfs.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ +/* + * Copyright (c) 2021 Mellanox Technologies Ltd. All rights reserved. + */ +#ifndef DEF_RDMA_IB_SYSFS_H +#define DEF_RDMA_IB_SYSFS_H + +#include <linux/sysfs.h> + +struct ib_device; + +struct ib_port_attribute { + struct attribute attr; + ssize_t (*show)(struct ib_device *ibdev, u32 port_num, + struct ib_port_attribute *attr, char *buf); + ssize_t (*store)(struct ib_device *ibdev, u32 port_num, + struct ib_port_attribute *attr, const char *buf, + size_t count); +}; + +#define IB_PORT_ATTR_RW(_name) \ + struct ib_port_attribute ib_port_attr_##_name = __ATTR_RW(_name) + +#define IB_PORT_ATTR_ADMIN_RW(_name) \ + struct ib_port_attribute ib_port_attr_##_name = \ + __ATTR_RW_MODE(_name, 0600) + +#define IB_PORT_ATTR_RO(_name) \ + struct ib_port_attribute ib_port_attr_##_name = __ATTR_RO(_name) + +#define IB_PORT_ATTR_WO(_name) \ + struct ib_port_attribute ib_port_attr_##_name = __ATTR_WO(_name) + +int ib_port_sysfs_create_groups(struct ib_device *ibdev, u32 port_num, + const struct attribute_group **groups); +void ib_port_sysfs_remove_groups(struct ib_device *ibdev, u32 port_num, + const struct attribute_group **groups); +struct ib_device *ib_port_sysfs_get_ibdev_kobj(struct kobject *kobj, + u32 *port_num); + +#endif |