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); |
