Blame view

kernel/linux-rt-4.4.41/include/uapi/misc/cxl.h 2.48 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  /*
   * Copyright 2014 IBM Corp.
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License
   * as published by the Free Software Foundation; either version
   * 2 of the License, or (at your option) any later version.
   */
  
  #ifndef _UAPI_MISC_CXL_H
  #define _UAPI_MISC_CXL_H
  
  #include <linux/types.h>
  #include <linux/ioctl.h>
  
  
  struct cxl_ioctl_start_work {
  	__u64 flags;
  	__u64 work_element_descriptor;
  	__u64 amr;
  	__s16 num_interrupts;
  	__s16 reserved1;
  	__s32 reserved2;
  	__u64 reserved3;
  	__u64 reserved4;
  	__u64 reserved5;
  	__u64 reserved6;
  };
  
  #define CXL_START_WORK_AMR		0x0000000000000001ULL
  #define CXL_START_WORK_NUM_IRQS		0x0000000000000002ULL
  #define CXL_START_WORK_ERR_FF		0x0000000000000004ULL
  #define CXL_START_WORK_ALL		(CXL_START_WORK_AMR |\
  					 CXL_START_WORK_NUM_IRQS |\
  					 CXL_START_WORK_ERR_FF)
  
  
  /* Possible modes that an afu can be in */
  #define CXL_MODE_DEDICATED   0x1
  #define CXL_MODE_DIRECTED    0x2
  
  /* possible flags for the cxl_afu_id flags field */
  #define CXL_AFUID_FLAG_SLAVE    0x1  /* In directed-mode afu is in slave mode */
  
  struct cxl_afu_id {
  	__u64 flags;     /* One of CXL_AFUID_FLAG_X */
  	__u32 card_id;
  	__u32 afu_offset;
  	__u32 afu_mode;  /* one of the CXL_MODE_X */
  	__u32 reserved1;
  	__u64 reserved2;
  	__u64 reserved3;
  	__u64 reserved4;
  	__u64 reserved5;
  	__u64 reserved6;
  };
  
  /* ioctl numbers */
  #define CXL_MAGIC 0xCA
  #define CXL_IOCTL_START_WORK		_IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work)
  #define CXL_IOCTL_GET_PROCESS_ELEMENT	_IOR(CXL_MAGIC, 0x01, __u32)
  #define CXL_IOCTL_GET_AFU_ID            _IOR(CXL_MAGIC, 0x02, struct cxl_afu_id)
  
  #define CXL_READ_MIN_SIZE 0x1000 /* 4K */
  
  /* Events from read() */
  enum cxl_event_type {
  	CXL_EVENT_RESERVED      = 0,
  	CXL_EVENT_AFU_INTERRUPT = 1,
  	CXL_EVENT_DATA_STORAGE  = 2,
  	CXL_EVENT_AFU_ERROR     = 3,
  };
  
  struct cxl_event_header {
  	__u16 type;
  	__u16 size;
  	__u16 process_element;
  	__u16 reserved1;
  };
  
  struct cxl_event_afu_interrupt {
  	__u16 flags;
  	__u16 irq; /* Raised AFU interrupt number */
  	__u32 reserved1;
  };
  
  struct cxl_event_data_storage {
  	__u16 flags;
  	__u16 reserved1;
  	__u32 reserved2;
  	__u64 addr;
  	__u64 dsisr;
  	__u64 reserved3;
  };
  
  struct cxl_event_afu_error {
  	__u16 flags;
  	__u16 reserved1;
  	__u32 reserved2;
  	__u64 error;
  };
  
  struct cxl_event {
  	struct cxl_event_header header;
  	union {
  		struct cxl_event_afu_interrupt irq;
  		struct cxl_event_data_storage fault;
  		struct cxl_event_afu_error afu_error;
  	};
  };
  
  #endif /* _UAPI_MISC_CXL_H */