/*
 * This file is auto-generated. Modifications will be lost.
 *
 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
 * for more information.
 */
#ifndef _UAPI_MISC_OCXL_H
#define _UAPI_MISC_OCXL_H
#include <linux/types.h>
#include <linux/ioctl.h>
enum ocxl_event_type {
  OCXL_AFU_EVENT_XSL_FAULT_ERROR = 0,
};
#define OCXL_KERNEL_EVENT_FLAG_LAST 0x0001
struct ocxl_kernel_event_header {
  __u16 type;
  __u16 flags;
  __u32 reserved;
};
struct ocxl_kernel_event_xsl_fault_error {
  __u64 addr;
  __u64 dsisr;
  __u64 count;
  __u64 reserved;
};
struct ocxl_ioctl_attach {
  __u64 amr;
  __u64 reserved1;
  __u64 reserved2;
  __u64 reserved3;
};
struct ocxl_ioctl_metadata {
  __u16 version;
  __u8 afu_version_major;
  __u8 afu_version_minor;
  __u32 pasid;
  __u64 pp_mmio_size;
  __u64 global_mmio_size;
  __u64 reserved[13];
};
struct ocxl_ioctl_p9_wait {
  __u16 thread_id;
  __u16 reserved1;
  __u32 reserved2;
  __u64 reserved3[3];
};
#define OCXL_IOCTL_FEATURES_FLAGS0_P9_WAIT 0x01
struct ocxl_ioctl_features {
  __u64 flags[4];
};
struct ocxl_ioctl_irq_fd {
  __u64 irq_offset;
  __s32 eventfd;
  __u32 reserved;
};
#define OCXL_MAGIC 0xCA
#define OCXL_IOCTL_ATTACH _IOW(OCXL_MAGIC, 0x10, struct ocxl_ioctl_attach)
#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)
#define OCXL_IOCTL_ENABLE_P9_WAIT _IOR(OCXL_MAGIC, 0x15, struct ocxl_ioctl_p9_wait)
#define OCXL_IOCTL_GET_FEATURES _IOR(OCXL_MAGIC, 0x16, struct ocxl_ioctl_features)
#endif
