diff options
Diffstat (limited to 'include/linux/rio.h')
-rw-r--r-- | include/linux/rio.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/include/linux/rio.h b/include/linux/rio.h index 4d50611112ba..a90ebadd9da0 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h | |||
@@ -20,6 +20,9 @@ | |||
20 | #include <linux/errno.h> | 20 | #include <linux/errno.h> |
21 | #include <linux/device.h> | 21 | #include <linux/device.h> |
22 | #include <linux/rio_regs.h> | 22 | #include <linux/rio_regs.h> |
23 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | ||
24 | #include <linux/dmaengine.h> | ||
25 | #endif | ||
23 | 26 | ||
24 | #define RIO_NO_HOPCOUNT -1 | 27 | #define RIO_NO_HOPCOUNT -1 |
25 | #define RIO_INVALID_DESTID 0xffff | 28 | #define RIO_INVALID_DESTID 0xffff |
@@ -254,6 +257,9 @@ struct rio_mport { | |||
254 | u32 phys_efptr; | 257 | u32 phys_efptr; |
255 | unsigned char name[40]; | 258 | unsigned char name[40]; |
256 | void *priv; /* Master port private data */ | 259 | void *priv; /* Master port private data */ |
260 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | ||
261 | struct dma_device dma; | ||
262 | #endif | ||
257 | }; | 263 | }; |
258 | 264 | ||
259 | /** | 265 | /** |
@@ -395,6 +401,47 @@ union rio_pw_msg { | |||
395 | u32 raw[RIO_PW_MSG_SIZE/sizeof(u32)]; | 401 | u32 raw[RIO_PW_MSG_SIZE/sizeof(u32)]; |
396 | }; | 402 | }; |
397 | 403 | ||
404 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | ||
405 | |||
406 | /** | ||
407 | * enum rio_write_type - RIO write transaction types used in DMA transfers | ||
408 | * | ||
409 | * Note: RapidIO specification defines write (NWRITE) and | ||
410 | * write-with-response (NWRITE_R) data transfer operations. | ||
411 | * Existing DMA controllers that service RapidIO may use one of these operations | ||
412 | * for entire data transfer or their combination with only the last data packet | ||
413 | * requires response. | ||
414 | */ | ||
415 | enum rio_write_type { | ||
416 | RDW_DEFAULT, /* default method used by DMA driver */ | ||
417 | RDW_ALL_NWRITE, /* all packets use NWRITE */ | ||
418 | RDW_ALL_NWRITE_R, /* all packets use NWRITE_R */ | ||
419 | RDW_LAST_NWRITE_R, /* last packet uses NWRITE_R, others - NWRITE */ | ||
420 | }; | ||
421 | |||
422 | struct rio_dma_ext { | ||
423 | u16 destid; | ||
424 | u64 rio_addr; /* low 64-bits of 66-bit RapidIO address */ | ||
425 | u8 rio_addr_u; /* upper 2-bits of 66-bit RapidIO address */ | ||
426 | enum rio_write_type wr_type; /* preferred RIO write operation type */ | ||
427 | }; | ||
428 | |||
429 | struct rio_dma_data { | ||
430 | /* Local data (as scatterlist) */ | ||
431 | struct scatterlist *sg; /* I/O scatter list */ | ||
432 | unsigned int sg_len; /* size of scatter list */ | ||
433 | /* Remote device address (flat buffer) */ | ||
434 | u64 rio_addr; /* low 64-bits of 66-bit RapidIO address */ | ||
435 | u8 rio_addr_u; /* upper 2-bits of 66-bit RapidIO address */ | ||
436 | enum rio_write_type wr_type; /* preferred RIO write operation type */ | ||
437 | }; | ||
438 | |||
439 | static inline struct rio_mport *dma_to_mport(struct dma_device *ddev) | ||
440 | { | ||
441 | return container_of(ddev, struct rio_mport, dma); | ||
442 | } | ||
443 | #endif /* CONFIG_RAPIDIO_DMA_ENGINE */ | ||
444 | |||
398 | /* Architecture and hardware-specific functions */ | 445 | /* Architecture and hardware-specific functions */ |
399 | extern int rio_register_mport(struct rio_mport *); | 446 | extern int rio_register_mport(struct rio_mport *); |
400 | extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int); | 447 | extern int rio_open_inb_mbox(struct rio_mport *, void *, int, int); |