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>
10 struct 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
33 struct 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)
51 struct 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
68 enum 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 };
75 struct cxl_event_header {
76 	__u16 type;
77 	__u16 size;
78 	__u16 process_element;
79 	__u16 reserved1;
80 };
81 struct cxl_event_afu_interrupt {
82 	__u16 flags;
83 	__u16 irq;
84 	__u32 reserved1;
85 };
86 struct cxl_event_data_storage {
87 	__u16 flags;
88 	__u16 reserved1;
89 	__u32 reserved2;
90 	__u64 addr;
91 	__u64 dsisr;
92 	__u64 reserved3;
93 };
94 struct cxl_event_afu_error {
95 	__u16 flags;
96 	__u16 reserved1;
97 	__u32 reserved2;
98 	__u64 error;
99 };
100 struct cxl_event_afu_driver_reserved {
101 
102 	__u32 data_size;
103 	__u8 data[];
104 };
105 struct 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