Commit 8c099490 authored by Haren Myneni's avatar Haren Myneni Committed by Michael Ellerman

crypto/nx: Add sysfs interface to export NX capabilities

Export NX-GZIP capabilities to usrespace in sysfs
/sys/devices/vio/ibm,compression-v1/nx_gzip_caps directory.
These are queried by userspace accelerator libraries to set
minimum length heuristics and maximum limits on request sizes.

NX-GZIP capabilities:
min_compress_len  /*Recommended minimum compress length in bytes*/
min_decompress_len /*Recommended minimum decompress length in bytes*/
req_max_processed_len /* Maximum number of bytes processed in one
			request */

NX will return RMA_Reject if the request buffer size is greater
than req_max_processed_len.
Signed-off-by: default avatarHaren Myneni <haren@linux.ibm.com>
Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Acked-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/510da86abbd904878d5f13d74aba72603c37d783.camel@linux.ibm.com
parent b4ba2211
...@@ -967,6 +967,36 @@ static struct attribute_group nx842_attribute_group = { ...@@ -967,6 +967,36 @@ static struct attribute_group nx842_attribute_group = {
.attrs = nx842_sysfs_entries, .attrs = nx842_sysfs_entries,
}; };
#define nxcop_caps_read(_name) \
static ssize_t nxcop_##_name##_show(struct device *dev, \
struct device_attribute *attr, char *buf) \
{ \
return sprintf(buf, "%lld\n", nx_cop_caps._name); \
}
#define NXCT_ATTR_RO(_name) \
nxcop_caps_read(_name); \
static struct device_attribute dev_attr_##_name = __ATTR(_name, \
0444, \
nxcop_##_name##_show, \
NULL);
NXCT_ATTR_RO(req_max_processed_len);
NXCT_ATTR_RO(min_compress_len);
NXCT_ATTR_RO(min_decompress_len);
static struct attribute *nxcop_caps_sysfs_entries[] = {
&dev_attr_req_max_processed_len.attr,
&dev_attr_min_compress_len.attr,
&dev_attr_min_decompress_len.attr,
NULL,
};
static struct attribute_group nxcop_caps_attr_group = {
.name = "nx_gzip_caps",
.attrs = nxcop_caps_sysfs_entries,
};
static struct nx842_driver nx842_pseries_driver = { static struct nx842_driver nx842_pseries_driver = {
.name = KBUILD_MODNAME, .name = KBUILD_MODNAME,
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -1056,6 +1086,16 @@ static int nx842_probe(struct vio_dev *viodev, ...@@ -1056,6 +1086,16 @@ static int nx842_probe(struct vio_dev *viodev,
goto error; goto error;
} }
if (caps_feat) {
if (sysfs_create_group(&viodev->dev.kobj,
&nxcop_caps_attr_group)) {
dev_err(&viodev->dev,
"Could not create sysfs NX capability entries\n");
ret = -1;
goto error;
}
}
return 0; return 0;
error_unlock: error_unlock:
...@@ -1075,6 +1115,9 @@ static void nx842_remove(struct vio_dev *viodev) ...@@ -1075,6 +1115,9 @@ static void nx842_remove(struct vio_dev *viodev)
pr_info("Removing IBM Power 842 compression device\n"); pr_info("Removing IBM Power 842 compression device\n");
sysfs_remove_group(&viodev->dev.kobj, &nx842_attribute_group); sysfs_remove_group(&viodev->dev.kobj, &nx842_attribute_group);
if (caps_feat)
sysfs_remove_group(&viodev->dev.kobj, &nxcop_caps_attr_group);
crypto_unregister_alg(&nx842_pseries_alg); crypto_unregister_alg(&nx842_pseries_alg);
spin_lock_irqsave(&devdata_mutex, flags); spin_lock_irqsave(&devdata_mutex, flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment