Skip to content

Commit

Permalink
ocxl: Add get_metadata IOCTL to share OCXL information to userspace
Browse files Browse the repository at this point in the history
Some required information is not exposed to userspace currently (eg. the
PASID), pass this information back, along with other information which
is currently communicated via sysfs, which saves some parsing effort in
userspace.

Signed-off-by: Alastair D'Silva <alastair@d-silva.org>
Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
  • Loading branch information
Alastair D'Silva authored and Michael Ellerman committed Mar 2, 2018
1 parent cd4a6f3 commit 07c5ccd
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
27 changes: 27 additions & 0 deletions drivers/misc/ocxl/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,32 @@ static long afu_ioctl_attach(struct ocxl_context *ctx,
return rc;
}

static long afu_ioctl_get_metadata(struct ocxl_context *ctx,
struct ocxl_ioctl_metadata __user *uarg)
{
struct ocxl_ioctl_metadata arg;

memset(&arg, 0, sizeof(arg));

arg.version = 0;

arg.afu_version_major = ctx->afu->config.version_major;
arg.afu_version_minor = ctx->afu->config.version_minor;
arg.pasid = ctx->pasid;
arg.pp_mmio_size = ctx->afu->config.pp_mmio_stride;
arg.global_mmio_size = ctx->afu->config.global_mmio_size;

if (copy_to_user(uarg, &arg, sizeof(arg)))
return -EFAULT;

return 0;
}

#define CMD_STR(x) (x == OCXL_IOCTL_ATTACH ? "ATTACH" : \
x == OCXL_IOCTL_IRQ_ALLOC ? "IRQ_ALLOC" : \
x == OCXL_IOCTL_IRQ_FREE ? "IRQ_FREE" : \
x == OCXL_IOCTL_IRQ_SET_FD ? "IRQ_SET_FD" : \
x == OCXL_IOCTL_GET_METADATA ? "GET_METADATA" : \
"UNKNOWN")

static long afu_ioctl(struct file *file, unsigned int cmd,
Expand Down Expand Up @@ -159,6 +181,11 @@ static long afu_ioctl(struct file *file, unsigned int cmd,
irq_fd.eventfd);
break;

case OCXL_IOCTL_GET_METADATA:
rc = afu_ioctl_get_metadata(ctx,
(struct ocxl_ioctl_metadata __user *) args);
break;

default:
rc = -EINVAL;
}
Expand Down
17 changes: 17 additions & 0 deletions include/uapi/misc/ocxl.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,22 @@ struct ocxl_ioctl_attach {
__u64 reserved3;
};

struct ocxl_ioctl_metadata {
__u16 version; // struct version, always backwards compatible

// Version 0 fields
__u8 afu_version_major;
__u8 afu_version_minor;
__u32 pasid; // PASID assigned to the current context

__u64 pp_mmio_size; // Per PASID MMIO size
__u64 global_mmio_size;

// End version 0 fields

__u64 reserved[13]; // Total of 16*u64
};

struct ocxl_ioctl_irq_fd {
__u64 irq_offset;
__s32 eventfd;
Expand All @@ -45,5 +61,6 @@ struct ocxl_ioctl_irq_fd {
#define OCXL_IOCTL_IRQ_ALLOC _IOR(OCXL_MAGIC, 0x11, __u64)
#define OCXL_IOCTL_IRQ_FREE _IOW(OCXL_MAGIC, 0x12, __u64)
#define OCXL_IOCTL_IRQ_SET_FD _IOW(OCXL_MAGIC, 0x13, struct ocxl_ioctl_irq_fd)
#define OCXL_IOCTL_GET_METADATA _IOR(OCXL_MAGIC, 0x14, struct ocxl_ioctl_metadata)

#endif /* _UAPI_MISC_OCXL_H */

0 comments on commit 07c5ccd

Please sign in to comment.