s390/ap: introduce new AP bus sysfs attribute features
authorHarald Freudenberger <freude@linux.ibm.com>
Tue, 20 Sep 2022 13:18:39 +0000 (15:18 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 20 Mar 2023 10:12:48 +0000 (11:12 +0100)
Introduce a new AP bus sysfs attribute /sys/bus/ap/features
which shows the features from the QCI information.
Currently these feature bits are evaluated:

- QCI S bit is shown as 'APSC'
- QCI N bit is shown as 'APXA'
- QCI C bit is shown as 'QACT'
- QCI R bit is shown as 'RC8A'
- QCI B bit is shown as 'APSB'

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com>
Reviewed-by: Holger Dengler <dengler@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
drivers/s390/crypto/ap_bus.c

index b3c350e9fc1dfda960bf0e30045a4c7610bd8a10..4e1926cf7a3d33483fab29e46fa0622d7bb59317 100644 (file)
@@ -1557,6 +1557,31 @@ static ssize_t bindings_show(struct bus_type *bus, char *buf)
 
 static BUS_ATTR_RO(bindings);
 
+static ssize_t features_show(struct bus_type *bus, char *buf)
+{
+       int n = 0;
+
+       if (!ap_qci_info)       /* QCI not supported */
+               return sysfs_emit(buf, "-\n");
+
+       if (ap_qci_info->apsc)
+               n += sysfs_emit_at(buf, n, "APSC ");
+       if (ap_qci_info->apxa)
+               n += sysfs_emit_at(buf, n, "APXA ");
+       if (ap_qci_info->qact)
+               n += sysfs_emit_at(buf, n, "QACT ");
+       if (ap_qci_info->rc8a)
+               n += sysfs_emit_at(buf, n, "RC8A ");
+       if (ap_qci_info->apsb)
+               n += sysfs_emit_at(buf, n, "APSB ");
+
+       sysfs_emit_at(buf, n == 0 ? 0 : n - 1, "\n");
+
+       return n;
+}
+
+static BUS_ATTR_RO(features);
+
 static struct attribute *ap_bus_attrs[] = {
        &bus_attr_ap_domain.attr,
        &bus_attr_ap_control_domain_mask.attr,
@@ -1572,6 +1597,7 @@ static struct attribute *ap_bus_attrs[] = {
        &bus_attr_aqmask.attr,
        &bus_attr_scans.attr,
        &bus_attr_bindings.attr,
+       &bus_attr_features.attr,
        NULL,
 };
 ATTRIBUTE_GROUPS(ap_bus);