0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef LINUX_RIO_H
0011 #define LINUX_RIO_H
0012
0013 #include <linux/types.h>
0014 #include <linux/ioport.h>
0015 #include <linux/list.h>
0016 #include <linux/errno.h>
0017 #include <linux/device.h>
0018 #include <linux/rio_regs.h>
0019 #include <linux/mod_devicetable.h>
0020 #ifdef CONFIG_RAPIDIO_DMA_ENGINE
0021 #include <linux/dmaengine.h>
0022 #endif
0023
0024 #define RIO_NO_HOPCOUNT -1
0025 #define RIO_INVALID_DESTID 0xffff
0026
0027 #define RIO_MAX_MPORTS 8
0028 #define RIO_MAX_MPORT_RESOURCES 16
0029 #define RIO_MAX_DEV_RESOURCES 16
0030 #define RIO_MAX_MPORT_NAME 40
0031
0032 #define RIO_GLOBAL_TABLE 0xff
0033
0034
0035
0036
0037 #define RIO_INVALID_ROUTE 0xff
0038
0039
0040
0041 #define RIO_MAX_ROUTE_ENTRIES(size) (size ? (1 << 16) : (1 << 8))
0042 #define RIO_ANY_DESTID(size) (size ? 0xffff : 0xff)
0043
0044 #define RIO_MAX_MBOX 4
0045 #define RIO_MAX_MSG_SIZE 0x1000
0046
0047
0048
0049
0050 #define RIO_SUCCESSFUL 0x00
0051 #define RIO_BAD_SIZE 0x81
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065 #define RIO_DOORBELL_RESOURCE 0
0066 #define RIO_INB_MBOX_RESOURCE 1
0067 #define RIO_OUTB_MBOX_RESOURCE 2
0068
0069 #define RIO_PW_MSG_SIZE 64
0070
0071
0072
0073
0074
0075
0076
0077
0078 #define RIO_CTAG_RESRVD 0xfffe0000
0079 #define RIO_CTAG_UDEVID 0x0001ffff
0080
0081 extern struct bus_type rio_bus_type;
0082 extern struct class rio_mport_class;
0083
0084 struct rio_mport;
0085 struct rio_dev;
0086 union rio_pw_msg;
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 struct rio_switch {
0098 struct list_head node;
0099 u8 *route_table;
0100 u32 port_ok;
0101 struct rio_switch_ops *ops;
0102 spinlock_t lock;
0103 struct rio_dev *nextdev[];
0104 };
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120 struct rio_switch_ops {
0121 struct module *owner;
0122 int (*add_entry) (struct rio_mport *mport, u16 destid, u8 hopcount,
0123 u16 table, u16 route_destid, u8 route_port);
0124 int (*get_entry) (struct rio_mport *mport, u16 destid, u8 hopcount,
0125 u16 table, u16 route_destid, u8 *route_port);
0126 int (*clr_table) (struct rio_mport *mport, u16 destid, u8 hopcount,
0127 u16 table);
0128 int (*set_domain) (struct rio_mport *mport, u16 destid, u8 hopcount,
0129 u8 sw_domain);
0130 int (*get_domain) (struct rio_mport *mport, u16 destid, u8 hopcount,
0131 u8 *sw_domain);
0132 int (*em_init) (struct rio_dev *dev);
0133 int (*em_handle) (struct rio_dev *dev, u8 swport);
0134 };
0135
0136 enum rio_device_state {
0137 RIO_DEVICE_INITIALIZING,
0138 RIO_DEVICE_RUNNING,
0139 RIO_DEVICE_GONE,
0140 RIO_DEVICE_SHUTDOWN,
0141 };
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175 struct rio_dev {
0176 struct list_head global_list;
0177 struct list_head net_list;
0178 struct rio_net *net;
0179 bool do_enum;
0180 u16 did;
0181 u16 vid;
0182 u32 device_rev;
0183 u16 asm_did;
0184 u16 asm_vid;
0185 u16 asm_rev;
0186 u16 efptr;
0187 u32 pef;
0188 u32 swpinfo;
0189 u32 src_ops;
0190 u32 dst_ops;
0191 u32 comp_tag;
0192 u32 phys_efptr;
0193 u32 phys_rmap;
0194 u32 em_efptr;
0195 u64 dma_mask;
0196 struct rio_driver *driver;
0197 struct device dev;
0198 struct resource riores[RIO_MAX_DEV_RESOURCES];
0199 int (*pwcback) (struct rio_dev *rdev, union rio_pw_msg *msg, int step);
0200 u16 destid;
0201 u8 hopcount;
0202 struct rio_dev *prev;
0203 atomic_t state;
0204 struct rio_switch rswitch[];
0205 };
0206
0207 #define rio_dev_g(n) list_entry(n, struct rio_dev, global_list)
0208 #define rio_dev_f(n) list_entry(n, struct rio_dev, net_list)
0209 #define to_rio_dev(n) container_of(n, struct rio_dev, dev)
0210 #define sw_to_rio_dev(n) container_of(n, struct rio_dev, rswitch[0])
0211 #define to_rio_mport(n) container_of(n, struct rio_mport, dev)
0212 #define to_rio_net(n) container_of(n, struct rio_net, dev)
0213
0214
0215
0216
0217
0218
0219 struct rio_msg {
0220 struct resource *res;
0221 void (*mcback) (struct rio_mport * mport, void *dev_id, int mbox, int slot);
0222 };
0223
0224
0225
0226
0227
0228
0229
0230
0231 struct rio_dbell {
0232 struct list_head node;
0233 struct resource *res;
0234 void (*dinb) (struct rio_mport *mport, void *dev_id, u16 src, u16 dst, u16 info);
0235 void *dev_id;
0236 };
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265 struct rio_mport {
0266 struct list_head dbells;
0267 struct list_head pwrites;
0268 struct list_head node;
0269 struct list_head nnode;
0270 struct rio_net *net;
0271 struct mutex lock;
0272 struct resource iores;
0273 struct resource riores[RIO_MAX_MPORT_RESOURCES];
0274 struct rio_msg inb_msg[RIO_MAX_MBOX];
0275 struct rio_msg outb_msg[RIO_MAX_MBOX];
0276 int host_deviceid;
0277 struct rio_ops *ops;
0278 unsigned char id;
0279 unsigned char index;
0280
0281 unsigned int sys_size;
0282
0283
0284
0285 u32 phys_efptr;
0286 u32 phys_rmap;
0287 unsigned char name[RIO_MAX_MPORT_NAME];
0288 struct device dev;
0289 void *priv;
0290 #ifdef CONFIG_RAPIDIO_DMA_ENGINE
0291 struct dma_device dma;
0292 #endif
0293 struct rio_scan *nscan;
0294 atomic_t state;
0295 unsigned int pwe_refcnt;
0296 };
0297
0298 static inline int rio_mport_is_running(struct rio_mport *mport)
0299 {
0300 return atomic_read(&mport->state) == RIO_DEVICE_RUNNING;
0301 }
0302
0303
0304
0305
0306 #define RIO_SCAN_ENUM_NO_WAIT 0x00000001
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320 struct rio_net {
0321 struct list_head node;
0322 struct list_head devices;
0323 struct list_head switches;
0324 struct list_head mports;
0325 struct rio_mport *hport;
0326 unsigned char id;
0327 struct device dev;
0328 void *enum_data;
0329 void (*release)(struct rio_net *net);
0330 };
0331
0332 enum rio_link_speed {
0333 RIO_LINK_DOWN = 0,
0334 RIO_LINK_125 = 1,
0335 RIO_LINK_250 = 2,
0336 RIO_LINK_312 = 3,
0337 RIO_LINK_500 = 4,
0338 RIO_LINK_625 = 5
0339 };
0340
0341 enum rio_link_width {
0342 RIO_LINK_1X = 0,
0343 RIO_LINK_1XR = 1,
0344 RIO_LINK_2X = 3,
0345 RIO_LINK_4X = 2,
0346 RIO_LINK_8X = 4,
0347 RIO_LINK_16X = 5
0348 };
0349
0350 enum rio_mport_flags {
0351 RIO_MPORT_DMA = (1 << 0),
0352 RIO_MPORT_DMA_SG = (1 << 1),
0353 RIO_MPORT_IBSG = (1 << 2),
0354 };
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365 struct rio_mport_attr {
0366 int flags;
0367 int link_speed;
0368 int link_width;
0369
0370
0371 int dma_max_sge;
0372 int dma_max_size;
0373 int dma_align;
0374 };
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399 struct rio_ops {
0400 int (*lcread) (struct rio_mport *mport, int index, u32 offset, int len,
0401 u32 *data);
0402 int (*lcwrite) (struct rio_mport *mport, int index, u32 offset, int len,
0403 u32 data);
0404 int (*cread) (struct rio_mport *mport, int index, u16 destid,
0405 u8 hopcount, u32 offset, int len, u32 *data);
0406 int (*cwrite) (struct rio_mport *mport, int index, u16 destid,
0407 u8 hopcount, u32 offset, int len, u32 data);
0408 int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data);
0409 int (*pwenable) (struct rio_mport *mport, int enable);
0410 int (*open_outb_mbox)(struct rio_mport *mport, void *dev_id,
0411 int mbox, int entries);
0412 void (*close_outb_mbox)(struct rio_mport *mport, int mbox);
0413 int (*open_inb_mbox)(struct rio_mport *mport, void *dev_id,
0414 int mbox, int entries);
0415 void (*close_inb_mbox)(struct rio_mport *mport, int mbox);
0416 int (*add_outb_message)(struct rio_mport *mport, struct rio_dev *rdev,
0417 int mbox, void *buffer, size_t len);
0418 int (*add_inb_buffer)(struct rio_mport *mport, int mbox, void *buf);
0419 void *(*get_inb_message)(struct rio_mport *mport, int mbox);
0420 int (*map_inb)(struct rio_mport *mport, dma_addr_t lstart,
0421 u64 rstart, u64 size, u32 flags);
0422 void (*unmap_inb)(struct rio_mport *mport, dma_addr_t lstart);
0423 int (*query_mport)(struct rio_mport *mport,
0424 struct rio_mport_attr *attr);
0425 int (*map_outb)(struct rio_mport *mport, u16 destid, u64 rstart,
0426 u32 size, u32 flags, dma_addr_t *laddr);
0427 void (*unmap_outb)(struct rio_mport *mport, u16 destid, u64 rstart);
0428 };
0429
0430 #define RIO_RESOURCE_MEM 0x00000100
0431 #define RIO_RESOURCE_DOORBELL 0x00000200
0432 #define RIO_RESOURCE_MAILBOX 0x00000400
0433
0434 #define RIO_RESOURCE_CACHEABLE 0x00010000
0435 #define RIO_RESOURCE_PCI 0x00020000
0436
0437 #define RIO_RESOURCE_BUSY 0x80000000
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455 struct rio_driver {
0456 struct list_head node;
0457 char *name;
0458 const struct rio_device_id *id_table;
0459 int (*probe) (struct rio_dev * dev, const struct rio_device_id * id);
0460 void (*remove) (struct rio_dev * dev);
0461 void (*shutdown)(struct rio_dev *dev);
0462 int (*suspend) (struct rio_dev * dev, u32 state);
0463 int (*resume) (struct rio_dev * dev);
0464 int (*enable_wake) (struct rio_dev * dev, u32 state, int enable);
0465 struct device_driver driver;
0466 };
0467
0468 #define to_rio_driver(drv) container_of(drv,struct rio_driver, driver)
0469
0470 union rio_pw_msg {
0471 struct {
0472 u32 comptag;
0473 u32 errdetect;
0474 u32 is_port;
0475 u32 ltlerrdet;
0476 u32 padding[12];
0477 } em;
0478 u32 raw[RIO_PW_MSG_SIZE/sizeof(u32)];
0479 };
0480
0481 #ifdef CONFIG_RAPIDIO_DMA_ENGINE
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492 enum rio_write_type {
0493 RDW_DEFAULT,
0494 RDW_ALL_NWRITE,
0495 RDW_ALL_NWRITE_R,
0496 RDW_LAST_NWRITE_R,
0497 };
0498
0499 struct rio_dma_ext {
0500 u16 destid;
0501 u64 rio_addr;
0502 u8 rio_addr_u;
0503 enum rio_write_type wr_type;
0504 };
0505
0506 struct rio_dma_data {
0507
0508 struct scatterlist *sg;
0509 unsigned int sg_len;
0510
0511 u64 rio_addr;
0512 u8 rio_addr_u;
0513 enum rio_write_type wr_type;
0514 };
0515
0516 static inline struct rio_mport *dma_to_mport(struct dma_device *ddev)
0517 {
0518 return container_of(ddev, struct rio_mport, dma);
0519 }
0520 #endif
0521
0522
0523
0524
0525
0526
0527
0528 struct rio_scan {
0529 struct module *owner;
0530 int (*enumerate)(struct rio_mport *mport, u32 flags);
0531 int (*discover)(struct rio_mport *mport, u32 flags);
0532 };
0533
0534
0535
0536
0537
0538
0539
0540
0541 struct rio_scan_node {
0542 int mport_id;
0543 struct list_head node;
0544 struct rio_scan *ops;
0545 };
0546
0547
0548 extern int rio_mport_initialize(struct rio_mport *);
0549 extern int rio_register_mport(struct rio_mport *);
0550 extern int rio_unregister_mport(struct rio_mport *);
0551 extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int);
0552 extern void rio_close_inb_mbox(struct rio_mport *, int);
0553 extern int rio_open_outb_mbox(struct rio_mport *, void *, int, int);
0554 extern void rio_close_outb_mbox(struct rio_mport *, int);
0555 extern int rio_query_mport(struct rio_mport *port,
0556 struct rio_mport_attr *mport_attr);
0557
0558 #endif