1/*
2 * This header was generated from the Linux kernel headers by update_headers.py,
3 * to provide necessary information from kernel to userspace, such as constants,
4 * structures, and macros, and thus, contains no copyrightable information.
5 */
6#ifndef _UAPI_MISC_CXL_H
7#define _UAPI_MISC_CXL_H
8#include <linux/types.h>
9#include <linux/ioctl.h>
10struct cxl_ioctl_start_work {
11	__u64 flags;
12	__u64 work_element_descriptor;
13	__u64 amr;
14	__s16 num_interrupts;
15	__u16 tid;
16	__s32 reserved1;
17	__u64 reserved2;
18	__u64 reserved3;
19	__u64 reserved4;
20	__u64 reserved5;
21};
22#define CXL_START_WORK_AMR		0x0000000000000001ULL
23#define CXL_START_WORK_NUM_IRQS		0x0000000000000002ULL
24#define CXL_START_WORK_ERR_FF		0x0000000000000004ULL
25#define CXL_START_WORK_TID		0x0000000000000008ULL
26#define CXL_START_WORK_ALL		(CXL_START_WORK_AMR |\
27					 CXL_START_WORK_NUM_IRQS |\
28					 CXL_START_WORK_ERR_FF |\
29					 CXL_START_WORK_TID)
30#define CXL_MODE_DEDICATED   0x1
31#define CXL_MODE_DIRECTED    0x2
32#define CXL_AFUID_FLAG_SLAVE    0x1
33struct cxl_afu_id {
34	__u64 flags;
35	__u32 card_id;
36	__u32 afu_offset;
37	__u32 afu_mode;
38	__u32 reserved1;
39	__u64 reserved2;
40	__u64 reserved3;
41	__u64 reserved4;
42	__u64 reserved5;
43	__u64 reserved6;
44};
45#define CXL_AI_NEED_HEADER	0x0000000000000001ULL
46#define CXL_AI_ALL		CXL_AI_NEED_HEADER
47#define CXL_AI_HEADER_SIZE 128
48#define CXL_AI_BUFFER_SIZE 4096
49#define CXL_AI_MAX_ENTRIES 256
50#define CXL_AI_MAX_CHUNK_SIZE (CXL_AI_BUFFER_SIZE * CXL_AI_MAX_ENTRIES)
51struct cxl_adapter_image {
52	__u64 flags;
53	__u64 data;
54	__u64 len_data;
55	__u64 len_image;
56	__u64 reserved1;
57	__u64 reserved2;
58	__u64 reserved3;
59	__u64 reserved4;
60};
61#define CXL_MAGIC 0xCA
62#define CXL_IOCTL_START_WORK		_IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work)
63#define CXL_IOCTL_GET_PROCESS_ELEMENT	_IOR(CXL_MAGIC, 0x01, __u32)
64#define CXL_IOCTL_GET_AFU_ID            _IOR(CXL_MAGIC, 0x02, struct cxl_afu_id)
65#define CXL_IOCTL_DOWNLOAD_IMAGE        _IOW(CXL_MAGIC, 0x0A, struct cxl_adapter_image)
66#define CXL_IOCTL_VALIDATE_IMAGE        _IOW(CXL_MAGIC, 0x0B, struct cxl_adapter_image)
67#define CXL_READ_MIN_SIZE 0x1000
68enum cxl_event_type {
69	CXL_EVENT_RESERVED      = 0,
70	CXL_EVENT_AFU_INTERRUPT = 1,
71	CXL_EVENT_DATA_STORAGE  = 2,
72	CXL_EVENT_AFU_ERROR     = 3,
73	CXL_EVENT_AFU_DRIVER    = 4,
74};
75struct cxl_event_header {
76	__u16 type;
77	__u16 size;
78	__u16 process_element;
79	__u16 reserved1;
80};
81struct cxl_event_afu_interrupt {
82	__u16 flags;
83	__u16 irq;
84	__u32 reserved1;
85};
86struct cxl_event_data_storage {
87	__u16 flags;
88	__u16 reserved1;
89	__u32 reserved2;
90	__u64 addr;
91	__u64 dsisr;
92	__u64 reserved3;
93};
94struct cxl_event_afu_error {
95	__u16 flags;
96	__u16 reserved1;
97	__u32 reserved2;
98	__u64 error;
99};
100struct cxl_event_afu_driver_reserved {
101
102	__u32 data_size;
103	__u8 data[];
104};
105struct cxl_event {
106	struct cxl_event_header header;
107	union {
108		struct cxl_event_afu_interrupt irq;
109		struct cxl_event_data_storage fault;
110		struct cxl_event_afu_error afu_error;
111		struct cxl_event_afu_driver_reserved afu_driver_event;
112	};
113};
114#endif
115