ocxl: Add get_metadata IOCTL to share OCXL information to userspace
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>
This commit is contained in:

committed by
Michael Ellerman

parent
cd4a6f3ab4
commit
07c5ccd70a
@@ -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,
|
||||
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user