]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
powerpc/pseries: Define papr_indices_io_block for papr-indices ioctls
authorHaren Myneni <haren@linux.ibm.com>
Wed, 16 Apr 2025 22:57:37 +0000 (15:57 -0700)
committerMadhavan Srinivasan <maddy@linux.ibm.com>
Thu, 17 Apr 2025 06:12:29 +0000 (11:42 +0530)
To issue ibm,get-indices, ibm,set-dynamic-indicator and
ibm,get-dynamic-sensor-state in the user space, the RMO buffer is
allocated for the work area which is restricted under system
lockdown. So instead of user space execution, the kernel will
provide /dev/papr-indices interface to execute these RTAS calls.

The user space assigns data in papr_indices_io_block struct
depends on the specific HCALL and passes to the following ioctls:

PAPR_INDICES_IOC_GET: Use for ibm,get-indices. Returns a
get-indices handle fd to read data.
PAPR_DYNAMIC_SENSOR_IOC_GET: Use for  ibm,get-dynamic-sensor-state.
Updates the sensor state in
papr_indices_io_block.dynamic_param.state

PAPR_DYNAMIC_INDICATOR_IOC_SET: Use for ibm,set-dynamic-indicator.
Sets the new state for the input
indicator.

Signed-off-by: Haren Myneni <haren@linux.ibm.com>
Tested-by: Sathvika Vasireddy <sv@linux.ibm.com>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20250416225743.596462-3-haren@linux.ibm.com
Documentation/userspace-api/ioctl/ioctl-number.rst
arch/powerpc/include/uapi/asm/papr-indices.h [new file with mode: 0644]

index 7a1409ecc238ebbe78dc4fda971bd96a6ee3c842..638dc403448364aad8f239d15f184599a3f48372 100644 (file)
@@ -366,6 +366,8 @@ Code  Seq#    Include File                                           Comments
                                                                      <mailto:linuxppc-dev>
 0xB2  01-02  arch/powerpc/include/uapi/asm/papr-sysparm.h            powerpc/pseries system parameter API
                                                                      <mailto:linuxppc-dev>
+0xB2  03-05 arch/powerpc/include/uapi/asm/papr-indices.h             powerpc/pseries indices API
+                                                                     <mailto:linuxppc-dev>
 0xB3  00     linux/mmc/ioctl.h
 0xB4  00-0F  linux/gpio.h                                            <mailto:linux-gpio@vger.kernel.org>
 0xB5  00-0F  uapi/linux/rpmsg.h                                      <mailto:linux-remoteproc@vger.kernel.org>
diff --git a/arch/powerpc/include/uapi/asm/papr-indices.h b/arch/powerpc/include/uapi/asm/papr-indices.h
new file mode 100644 (file)
index 0000000..c2999d8
--- /dev/null
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _UAPI_PAPR_INDICES_H_
+#define _UAPI_PAPR_INDICES_H_
+
+#include <linux/types.h>
+#include <asm/ioctl.h>
+#include <asm/papr-miscdev.h>
+
+#define LOC_CODE_SIZE                  80
+#define RTAS_GET_INDICES_BUF_SIZE      SZ_4K
+
+struct papr_indices_io_block {
+       union {
+               struct {
+                       __u8 is_sensor; /* 0 for indicator and 1 for sensor */
+                       __u32 indice_type;
+               } indices;
+               struct {
+                       __u32 token; /* Sensor or indicator token */
+                       __u32 state; /* get / set state */
+                       /*
+                        * PAPR+ 12.3.2.4 Converged Location Code Rules - Length
+                        * Restrictions. 79 characters plus null.
+                        */
+                       char location_code_str[LOC_CODE_SIZE]; /* location code */
+               } dynamic_param;
+       };
+};
+
+/*
+ * ioctls for /dev/papr-indices.
+ * PAPR_INDICES_IOC_GET: Returns a get-indices handle fd to read data
+ * PAPR_DYNAMIC_SENSOR_IOC_GET: Gets the state of the input sensor
+ * PAPR_DYNAMIC_INDICATOR_IOC_SET: Sets the new state for the input indicator
+ */
+#define PAPR_INDICES_IOC_GET           _IOW(PAPR_MISCDEV_IOC_ID, 3, struct papr_indices_io_block)
+#define PAPR_DYNAMIC_SENSOR_IOC_GET    _IOWR(PAPR_MISCDEV_IOC_ID, 4, struct papr_indices_io_block)
+#define PAPR_DYNAMIC_INDICATOR_IOC_SET _IOW(PAPR_MISCDEV_IOC_ID, 5, struct papr_indices_io_block)
+
+
+#endif /* _UAPI_PAPR_INDICES_H_ */