dma.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /* arch/arm/plat-s3c/include/plat/dma.h
  2. *
  3. * Copyright (C) 2003,2004,2006 Simtec Electronics
  4. * Ben Dooks <ben@simtec.co.uk>
  5. *
  6. * Samsung S3C DMA support
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License version 2 as
  10. * published by the Free Software Foundation.
  11. */
  12. enum s3c2410_dma_buffresult {
  13. S3C2410_RES_OK,
  14. S3C2410_RES_ERR,
  15. S3C2410_RES_ABORT
  16. };
  17. enum s3c2410_dmasrc {
  18. S3C2410_DMASRC_HW, /* source is memory */
  19. S3C2410_DMASRC_MEM /* source is hardware */
  20. };
  21. /* enum s3c2410_chan_op
  22. *
  23. * operation codes passed to the DMA code by the user, and also used
  24. * to inform the current channel owner of any changes to the system state
  25. */
  26. enum s3c2410_chan_op {
  27. S3C2410_DMAOP_START,
  28. S3C2410_DMAOP_STOP,
  29. S3C2410_DMAOP_PAUSE,
  30. S3C2410_DMAOP_RESUME,
  31. S3C2410_DMAOP_FLUSH,
  32. S3C2410_DMAOP_TIMEOUT, /* internal signal to handler */
  33. S3C2410_DMAOP_STARTED, /* indicate channel started */
  34. };
  35. struct s3c2410_dma_client {
  36. char *name;
  37. };
  38. struct s3c2410_dma_chan;
  39. /* s3c2410_dma_cbfn_t
  40. *
  41. * buffer callback routine type
  42. */
  43. typedef void (*s3c2410_dma_cbfn_t)(struct s3c2410_dma_chan *,
  44. void *buf, int size,
  45. enum s3c2410_dma_buffresult result);
  46. typedef int (*s3c2410_dma_opfn_t)(struct s3c2410_dma_chan *,
  47. enum s3c2410_chan_op );
  48. /* s3c2410_dma_request
  49. *
  50. * request a dma channel exclusivley
  51. */
  52. extern int s3c2410_dma_request(unsigned int channel,
  53. struct s3c2410_dma_client *, void *dev);
  54. /* s3c2410_dma_ctrl
  55. *
  56. * change the state of the dma channel
  57. */
  58. extern int s3c2410_dma_ctrl(unsigned int channel, enum s3c2410_chan_op op);
  59. /* s3c2410_dma_setflags
  60. *
  61. * set the channel's flags to a given state
  62. */
  63. extern int s3c2410_dma_setflags(unsigned int channel,
  64. unsigned int flags);
  65. /* s3c2410_dma_free
  66. *
  67. * free the dma channel (will also abort any outstanding operations)
  68. */
  69. extern int s3c2410_dma_free(unsigned int channel, struct s3c2410_dma_client *);
  70. /* s3c2410_dma_enqueue
  71. *
  72. * place the given buffer onto the queue of operations for the channel.
  73. * The buffer must be allocated from dma coherent memory, or the Dcache/WB
  74. * drained before the buffer is given to the DMA system.
  75. */
  76. extern int s3c2410_dma_enqueue(unsigned int channel, void *id,
  77. dma_addr_t data, int size);
  78. /* s3c2410_dma_config
  79. *
  80. * configure the dma channel
  81. */
  82. extern int s3c2410_dma_config(unsigned int channel, int xferunit);
  83. /* s3c2410_dma_devconfig
  84. *
  85. * configure the device we're talking to
  86. */
  87. extern int s3c2410_dma_devconfig(int channel, enum s3c2410_dmasrc source,
  88. unsigned long devaddr);
  89. /* s3c2410_dma_getposition
  90. *
  91. * get the position that the dma transfer is currently at
  92. */
  93. extern int s3c2410_dma_getposition(unsigned int channel,
  94. dma_addr_t *src, dma_addr_t *dest);
  95. extern int s3c2410_dma_set_opfn(unsigned int, s3c2410_dma_opfn_t rtn);
  96. extern int s3c2410_dma_set_buffdone_fn(unsigned int, s3c2410_dma_cbfn_t rtn);