^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* Copyright 2017 IBM Corp. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #ifndef _UAPI_MISC_OCXL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #define _UAPI_MISC_OCXL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/ioctl.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) enum ocxl_event_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) OCXL_AFU_EVENT_XSL_FAULT_ERROR = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define OCXL_KERNEL_EVENT_FLAG_LAST 0x0001 /* This is the last event pending */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) struct ocxl_kernel_event_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) __u16 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) __u16 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) __u32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) struct ocxl_kernel_event_xsl_fault_error {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) __u64 addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) __u64 dsisr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) __u64 count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) __u64 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) struct ocxl_ioctl_attach {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) __u64 amr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __u64 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) __u64 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) __u64 reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) struct ocxl_ioctl_metadata {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) __u16 version; /* struct version, always backwards compatible */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) /* Version 0 fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) __u8 afu_version_major;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) __u8 afu_version_minor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) __u32 pasid; /* PASID assigned to the current context */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) __u64 pp_mmio_size; /* Per PASID MMIO size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) __u64 global_mmio_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) /* End version 0 fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) __u64 reserved[13]; /* Total of 16*u64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) struct ocxl_ioctl_p9_wait {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) __u16 thread_id; /* The thread ID required to wake this thread */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) __u16 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) __u32 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) __u64 reserved3[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define OCXL_IOCTL_FEATURES_FLAGS0_P9_WAIT 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) struct ocxl_ioctl_features {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) __u64 flags[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct ocxl_ioctl_irq_fd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) __u64 irq_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) __s32 eventfd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) __u32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) /* ioctl numbers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define OCXL_MAGIC 0xCA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) /* AFU devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define OCXL_IOCTL_ATTACH _IOW(OCXL_MAGIC, 0x10, struct ocxl_ioctl_attach)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define OCXL_IOCTL_IRQ_ALLOC _IOR(OCXL_MAGIC, 0x11, __u64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define OCXL_IOCTL_IRQ_FREE _IOW(OCXL_MAGIC, 0x12, __u64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define OCXL_IOCTL_IRQ_SET_FD _IOW(OCXL_MAGIC, 0x13, struct ocxl_ioctl_irq_fd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define OCXL_IOCTL_GET_METADATA _IOR(OCXL_MAGIC, 0x14, struct ocxl_ioctl_metadata)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define OCXL_IOCTL_ENABLE_P9_WAIT _IOR(OCXL_MAGIC, 0x15, struct ocxl_ioctl_p9_wait)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define OCXL_IOCTL_GET_FEATURES _IOR(OCXL_MAGIC, 0x16, struct ocxl_ioctl_features)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #endif /* _UAPI_MISC_OCXL_H */