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#ifndef _RIO_MPORT_CDEV_H_
40#define _RIO_MPORT_CDEV_H_
41
42#include <linux/ioctl.h>
43#include <linux/types.h>
44
45struct rio_mport_maint_io {
46 __u16 rioid;
47 __u8 hopcount;
48 __u8 pad0[5];
49 __u32 offset;
50 __u32 length;
51 __u64 buffer;
52};
53
54
55
56
57
58
59#define RIO_TRANSFER_MODE_MAPPED (1 << 0)
60#define RIO_TRANSFER_MODE_TRANSFER (1 << 1)
61#define RIO_CAP_DBL_SEND (1 << 2)
62#define RIO_CAP_DBL_RECV (1 << 3)
63#define RIO_CAP_PW_SEND (1 << 4)
64#define RIO_CAP_PW_RECV (1 << 5)
65#define RIO_CAP_MAP_OUTB (1 << 6)
66#define RIO_CAP_MAP_INB (1 << 7)
67
68struct rio_mport_properties {
69 __u16 hdid;
70 __u8 id;
71 __u8 index;
72 __u32 flags;
73 __u32 sys_size;
74 __u8 port_ok;
75 __u8 link_speed;
76 __u8 link_width;
77 __u8 pad0;
78 __u32 dma_max_sge;
79 __u32 dma_max_size;
80 __u32 dma_align;
81 __u32 transfer_mode;
82 __u32 cap_sys_size;
83 __u32 cap_addr_size;
84 __u32 cap_transfer_mode;
85 __u32 cap_mport;
86};
87
88
89
90
91
92
93#define RIO_DOORBELL (1 << 0)
94#define RIO_PORTWRITE (1 << 1)
95
96struct rio_doorbell {
97 __u16 rioid;
98 __u16 payload;
99};
100
101struct rio_doorbell_filter {
102 __u16 rioid;
103 __u16 low;
104 __u16 high;
105 __u16 pad0;
106};
107
108
109struct rio_portwrite {
110 __u32 payload[16];
111};
112
113struct rio_pw_filter {
114 __u32 mask;
115 __u32 low;
116 __u32 high;
117 __u32 pad0;
118};
119
120
121
122
123
124#define RIO_MAP_ANY_ADDR (__u64)(~((__u64) 0))
125
126struct rio_mmap {
127 __u16 rioid;
128 __u16 pad0[3];
129 __u64 rio_addr;
130 __u64 length;
131 __u64 handle;
132 __u64 address;
133};
134
135struct rio_dma_mem {
136 __u64 length;
137 __u64 dma_handle;
138 __u64 address;
139};
140
141struct rio_event {
142 __u32 header;
143 union {
144 struct rio_doorbell doorbell;
145 struct rio_portwrite portwrite;
146 } u;
147 __u32 pad0;
148};
149
150enum rio_transfer_sync {
151 RIO_TRANSFER_SYNC,
152 RIO_TRANSFER_ASYNC,
153 RIO_TRANSFER_FAF,
154};
155
156enum rio_transfer_dir {
157 RIO_TRANSFER_DIR_READ,
158 RIO_TRANSFER_DIR_WRITE,
159};
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181enum rio_exchange {
182 RIO_EXCHANGE_DEFAULT,
183 RIO_EXCHANGE_NWRITE,
184 RIO_EXCHANGE_SWRITE,
185 RIO_EXCHANGE_NWRITE_R,
186 RIO_EXCHANGE_SWRITE_R,
187 RIO_EXCHANGE_NWRITE_R_ALL,
188};
189
190struct rio_transfer_io {
191 __u64 rio_addr;
192 __u64 loc_addr;
193 __u64 handle;
194 __u64 offset;
195 __u64 length;
196 __u16 rioid;
197 __u16 method;
198 __u32 completion_code;
199};
200
201struct rio_transaction {
202 __u64 block;
203 __u32 count;
204 __u32 transfer_mode;
205 __u16 sync;
206 __u16 dir;
207 __u32 pad0;
208};
209
210struct rio_async_tx_wait {
211 __u32 token;
212 __u32 timeout;
213};
214
215#define RIO_MAX_DEVNAME_SZ 20
216
217struct rio_rdev_info {
218 __u16 destid;
219 __u8 hopcount;
220 __u8 pad0;
221 __u32 comptag;
222 char name[RIO_MAX_DEVNAME_SZ + 1];
223};
224
225
226#define RIO_MPORT_DRV_MAGIC 'm'
227
228#define RIO_MPORT_MAINT_HDID_SET \
229 _IOW(RIO_MPORT_DRV_MAGIC, 1, __u16)
230#define RIO_MPORT_MAINT_COMPTAG_SET \
231 _IOW(RIO_MPORT_DRV_MAGIC, 2, __u32)
232#define RIO_MPORT_MAINT_PORT_IDX_GET \
233 _IOR(RIO_MPORT_DRV_MAGIC, 3, __u32)
234#define RIO_MPORT_GET_PROPERTIES \
235 _IOR(RIO_MPORT_DRV_MAGIC, 4, struct rio_mport_properties)
236#define RIO_MPORT_MAINT_READ_LOCAL \
237 _IOR(RIO_MPORT_DRV_MAGIC, 5, struct rio_mport_maint_io)
238#define RIO_MPORT_MAINT_WRITE_LOCAL \
239 _IOW(RIO_MPORT_DRV_MAGIC, 6, struct rio_mport_maint_io)
240#define RIO_MPORT_MAINT_READ_REMOTE \
241 _IOR(RIO_MPORT_DRV_MAGIC, 7, struct rio_mport_maint_io)
242#define RIO_MPORT_MAINT_WRITE_REMOTE \
243 _IOW(RIO_MPORT_DRV_MAGIC, 8, struct rio_mport_maint_io)
244#define RIO_ENABLE_DOORBELL_RANGE \
245 _IOW(RIO_MPORT_DRV_MAGIC, 9, struct rio_doorbell_filter)
246#define RIO_DISABLE_DOORBELL_RANGE \
247 _IOW(RIO_MPORT_DRV_MAGIC, 10, struct rio_doorbell_filter)
248#define RIO_ENABLE_PORTWRITE_RANGE \
249 _IOW(RIO_MPORT_DRV_MAGIC, 11, struct rio_pw_filter)
250#define RIO_DISABLE_PORTWRITE_RANGE \
251 _IOW(RIO_MPORT_DRV_MAGIC, 12, struct rio_pw_filter)
252#define RIO_SET_EVENT_MASK \
253 _IOW(RIO_MPORT_DRV_MAGIC, 13, __u32)
254#define RIO_GET_EVENT_MASK \
255 _IOR(RIO_MPORT_DRV_MAGIC, 14, __u32)
256#define RIO_MAP_OUTBOUND \
257 _IOWR(RIO_MPORT_DRV_MAGIC, 15, struct rio_mmap)
258#define RIO_UNMAP_OUTBOUND \
259 _IOW(RIO_MPORT_DRV_MAGIC, 16, struct rio_mmap)
260#define RIO_MAP_INBOUND \
261 _IOWR(RIO_MPORT_DRV_MAGIC, 17, struct rio_mmap)
262#define RIO_UNMAP_INBOUND \
263 _IOW(RIO_MPORT_DRV_MAGIC, 18, __u64)
264#define RIO_ALLOC_DMA \
265 _IOWR(RIO_MPORT_DRV_MAGIC, 19, struct rio_dma_mem)
266#define RIO_FREE_DMA \
267 _IOW(RIO_MPORT_DRV_MAGIC, 20, __u64)
268#define RIO_TRANSFER \
269 _IOWR(RIO_MPORT_DRV_MAGIC, 21, struct rio_transaction)
270#define RIO_WAIT_FOR_ASYNC \
271 _IOW(RIO_MPORT_DRV_MAGIC, 22, struct rio_async_tx_wait)
272#define RIO_DEV_ADD \
273 _IOW(RIO_MPORT_DRV_MAGIC, 23, struct rio_rdev_info)
274#define RIO_DEV_DEL \
275 _IOW(RIO_MPORT_DRV_MAGIC, 24, struct rio_rdev_info)
276
277#endif
278