0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 #ifndef _RIO_MPORT_CDEV_H_
0041 #define _RIO_MPORT_CDEV_H_
0042
0043 #include <linux/ioctl.h>
0044 #include <linux/types.h>
0045
0046 struct rio_mport_maint_io {
0047 __u16 rioid;
0048 __u8 hopcount;
0049 __u8 pad0[5];
0050 __u32 offset;
0051 __u32 length;
0052 __u64 buffer;
0053 };
0054
0055
0056
0057
0058
0059
0060 #define RIO_TRANSFER_MODE_MAPPED (1 << 0)
0061 #define RIO_TRANSFER_MODE_TRANSFER (1 << 1)
0062 #define RIO_CAP_DBL_SEND (1 << 2)
0063 #define RIO_CAP_DBL_RECV (1 << 3)
0064 #define RIO_CAP_PW_SEND (1 << 4)
0065 #define RIO_CAP_PW_RECV (1 << 5)
0066 #define RIO_CAP_MAP_OUTB (1 << 6)
0067 #define RIO_CAP_MAP_INB (1 << 7)
0068
0069 struct rio_mport_properties {
0070 __u16 hdid;
0071 __u8 id;
0072 __u8 index;
0073 __u32 flags;
0074 __u32 sys_size;
0075 __u8 port_ok;
0076 __u8 link_speed;
0077 __u8 link_width;
0078 __u8 pad0;
0079 __u32 dma_max_sge;
0080 __u32 dma_max_size;
0081 __u32 dma_align;
0082 __u32 transfer_mode;
0083 __u32 cap_sys_size;
0084 __u32 cap_addr_size;
0085 __u32 cap_transfer_mode;
0086 __u32 cap_mport;
0087 };
0088
0089
0090
0091
0092
0093
0094 #define RIO_DOORBELL (1 << 0)
0095 #define RIO_PORTWRITE (1 << 1)
0096
0097 struct rio_doorbell {
0098 __u16 rioid;
0099 __u16 payload;
0100 };
0101
0102 struct rio_doorbell_filter {
0103 __u16 rioid;
0104 __u16 low;
0105 __u16 high;
0106 __u16 pad0;
0107 };
0108
0109
0110 struct rio_portwrite {
0111 __u32 payload[16];
0112 };
0113
0114 struct rio_pw_filter {
0115 __u32 mask;
0116 __u32 low;
0117 __u32 high;
0118 __u32 pad0;
0119 };
0120
0121
0122
0123
0124
0125 #define RIO_MAP_ANY_ADDR (__u64)(~((__u64) 0))
0126
0127 struct rio_mmap {
0128 __u16 rioid;
0129 __u16 pad0[3];
0130 __u64 rio_addr;
0131 __u64 length;
0132 __u64 handle;
0133 __u64 address;
0134 };
0135
0136 struct rio_dma_mem {
0137 __u64 length;
0138 __u64 dma_handle;
0139 __u64 address;
0140 };
0141
0142 struct rio_event {
0143 __u32 header;
0144 union {
0145 struct rio_doorbell doorbell;
0146 struct rio_portwrite portwrite;
0147 } u;
0148 __u32 pad0;
0149 };
0150
0151 enum rio_transfer_sync {
0152 RIO_TRANSFER_SYNC,
0153 RIO_TRANSFER_ASYNC,
0154 RIO_TRANSFER_FAF,
0155 };
0156
0157 enum rio_transfer_dir {
0158 RIO_TRANSFER_DIR_READ,
0159 RIO_TRANSFER_DIR_WRITE,
0160 };
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182 enum rio_exchange {
0183 RIO_EXCHANGE_DEFAULT,
0184 RIO_EXCHANGE_NWRITE,
0185 RIO_EXCHANGE_SWRITE,
0186 RIO_EXCHANGE_NWRITE_R,
0187 RIO_EXCHANGE_SWRITE_R,
0188 RIO_EXCHANGE_NWRITE_R_ALL,
0189 };
0190
0191 struct rio_transfer_io {
0192 __u64 rio_addr;
0193 __u64 loc_addr;
0194 __u64 handle;
0195 __u64 offset;
0196 __u64 length;
0197 __u16 rioid;
0198 __u16 method;
0199 __u32 completion_code;
0200 };
0201
0202 struct rio_transaction {
0203 __u64 block;
0204 __u32 count;
0205 __u32 transfer_mode;
0206 __u16 sync;
0207 __u16 dir;
0208 __u32 pad0;
0209 };
0210
0211 struct rio_async_tx_wait {
0212 __u32 token;
0213 __u32 timeout;
0214 };
0215
0216 #define RIO_MAX_DEVNAME_SZ 20
0217
0218 struct rio_rdev_info {
0219 __u16 destid;
0220 __u8 hopcount;
0221 __u8 pad0;
0222 __u32 comptag;
0223 char name[RIO_MAX_DEVNAME_SZ + 1];
0224 };
0225
0226
0227 #define RIO_MPORT_DRV_MAGIC 'm'
0228
0229 #define RIO_MPORT_MAINT_HDID_SET \
0230 _IOW(RIO_MPORT_DRV_MAGIC, 1, __u16)
0231 #define RIO_MPORT_MAINT_COMPTAG_SET \
0232 _IOW(RIO_MPORT_DRV_MAGIC, 2, __u32)
0233 #define RIO_MPORT_MAINT_PORT_IDX_GET \
0234 _IOR(RIO_MPORT_DRV_MAGIC, 3, __u32)
0235 #define RIO_MPORT_GET_PROPERTIES \
0236 _IOR(RIO_MPORT_DRV_MAGIC, 4, struct rio_mport_properties)
0237 #define RIO_MPORT_MAINT_READ_LOCAL \
0238 _IOR(RIO_MPORT_DRV_MAGIC, 5, struct rio_mport_maint_io)
0239 #define RIO_MPORT_MAINT_WRITE_LOCAL \
0240 _IOW(RIO_MPORT_DRV_MAGIC, 6, struct rio_mport_maint_io)
0241 #define RIO_MPORT_MAINT_READ_REMOTE \
0242 _IOR(RIO_MPORT_DRV_MAGIC, 7, struct rio_mport_maint_io)
0243 #define RIO_MPORT_MAINT_WRITE_REMOTE \
0244 _IOW(RIO_MPORT_DRV_MAGIC, 8, struct rio_mport_maint_io)
0245 #define RIO_ENABLE_DOORBELL_RANGE \
0246 _IOW(RIO_MPORT_DRV_MAGIC, 9, struct rio_doorbell_filter)
0247 #define RIO_DISABLE_DOORBELL_RANGE \
0248 _IOW(RIO_MPORT_DRV_MAGIC, 10, struct rio_doorbell_filter)
0249 #define RIO_ENABLE_PORTWRITE_RANGE \
0250 _IOW(RIO_MPORT_DRV_MAGIC, 11, struct rio_pw_filter)
0251 #define RIO_DISABLE_PORTWRITE_RANGE \
0252 _IOW(RIO_MPORT_DRV_MAGIC, 12, struct rio_pw_filter)
0253 #define RIO_SET_EVENT_MASK \
0254 _IOW(RIO_MPORT_DRV_MAGIC, 13, __u32)
0255 #define RIO_GET_EVENT_MASK \
0256 _IOR(RIO_MPORT_DRV_MAGIC, 14, __u32)
0257 #define RIO_MAP_OUTBOUND \
0258 _IOWR(RIO_MPORT_DRV_MAGIC, 15, struct rio_mmap)
0259 #define RIO_UNMAP_OUTBOUND \
0260 _IOW(RIO_MPORT_DRV_MAGIC, 16, struct rio_mmap)
0261 #define RIO_MAP_INBOUND \
0262 _IOWR(RIO_MPORT_DRV_MAGIC, 17, struct rio_mmap)
0263 #define RIO_UNMAP_INBOUND \
0264 _IOW(RIO_MPORT_DRV_MAGIC, 18, __u64)
0265 #define RIO_ALLOC_DMA \
0266 _IOWR(RIO_MPORT_DRV_MAGIC, 19, struct rio_dma_mem)
0267 #define RIO_FREE_DMA \
0268 _IOW(RIO_MPORT_DRV_MAGIC, 20, __u64)
0269 #define RIO_TRANSFER \
0270 _IOWR(RIO_MPORT_DRV_MAGIC, 21, struct rio_transaction)
0271 #define RIO_WAIT_FOR_ASYNC \
0272 _IOW(RIO_MPORT_DRV_MAGIC, 22, struct rio_async_tx_wait)
0273 #define RIO_DEV_ADD \
0274 _IOW(RIO_MPORT_DRV_MAGIC, 23, struct rio_rdev_info)
0275 #define RIO_DEV_DEL \
0276 _IOW(RIO_MPORT_DRV_MAGIC, 24, struct rio_rdev_info)
0277
0278 #endif