comedi_isadma.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * COMEDI ISA DMA support functions
  4. * Copyright (c) 2014 H Hartley Sweeten <[email protected]>
  5. */
  6. #ifndef _COMEDI_ISADMA_H
  7. #define _COMEDI_ISADMA_H
  8. #include <linux/types.h>
  9. struct comedi_device;
  10. struct device;
  11. /*
  12. * These are used to avoid issues when <asm/dma.h> and the DMA_MODE_
  13. * defines are not available.
  14. */
  15. #define COMEDI_ISADMA_READ 0
  16. #define COMEDI_ISADMA_WRITE 1
  17. /**
  18. * struct comedi_isadma_desc - cookie for ISA DMA
  19. * @virt_addr: virtual address of buffer
  20. * @hw_addr: hardware (bus) address of buffer
  21. * @chan: DMA channel
  22. * @maxsize: allocated size of buffer (in bytes)
  23. * @size: transfer size (in bytes)
  24. * @mode: DMA_MODE_READ or DMA_MODE_WRITE
  25. */
  26. struct comedi_isadma_desc {
  27. void *virt_addr;
  28. dma_addr_t hw_addr;
  29. unsigned int chan;
  30. unsigned int maxsize;
  31. unsigned int size;
  32. char mode;
  33. };
  34. /**
  35. * struct comedi_isadma - ISA DMA data
  36. * @dev: device to allocate non-coherent memory for
  37. * @desc: cookie for each DMA buffer
  38. * @n_desc: the number of cookies
  39. * @cur_dma: the current cookie in use
  40. * @chan: the first DMA channel requested
  41. * @chan2: the second DMA channel requested
  42. */
  43. struct comedi_isadma {
  44. struct device *dev;
  45. struct comedi_isadma_desc *desc;
  46. int n_desc;
  47. int cur_dma;
  48. unsigned int chan;
  49. unsigned int chan2;
  50. };
  51. #if IS_ENABLED(CONFIG_ISA_DMA_API)
  52. void comedi_isadma_program(struct comedi_isadma_desc *desc);
  53. unsigned int comedi_isadma_disable(unsigned int dma_chan);
  54. unsigned int comedi_isadma_disable_on_sample(unsigned int dma_chan,
  55. unsigned int size);
  56. unsigned int comedi_isadma_poll(struct comedi_isadma *dma);
  57. void comedi_isadma_set_mode(struct comedi_isadma_desc *desc, char dma_dir);
  58. struct comedi_isadma *comedi_isadma_alloc(struct comedi_device *dev,
  59. int n_desc, unsigned int dma_chan1,
  60. unsigned int dma_chan2,
  61. unsigned int maxsize, char dma_dir);
  62. void comedi_isadma_free(struct comedi_isadma *dma);
  63. #else /* !IS_ENABLED(CONFIG_ISA_DMA_API) */
  64. static inline void comedi_isadma_program(struct comedi_isadma_desc *desc)
  65. {
  66. }
  67. static inline unsigned int comedi_isadma_disable(unsigned int dma_chan)
  68. {
  69. return 0;
  70. }
  71. static inline unsigned int
  72. comedi_isadma_disable_on_sample(unsigned int dma_chan, unsigned int size)
  73. {
  74. return 0;
  75. }
  76. static inline unsigned int comedi_isadma_poll(struct comedi_isadma *dma)
  77. {
  78. return 0;
  79. }
  80. static inline void comedi_isadma_set_mode(struct comedi_isadma_desc *desc,
  81. char dma_dir)
  82. {
  83. }
  84. static inline struct comedi_isadma *
  85. comedi_isadma_alloc(struct comedi_device *dev, int n_desc,
  86. unsigned int dma_chan1, unsigned int dma_chan2,
  87. unsigned int maxsize, char dma_dir)
  88. {
  89. return NULL;
  90. }
  91. static inline void comedi_isadma_free(struct comedi_isadma *dma)
  92. {
  93. }
  94. #endif /* !IS_ENABLED(CONFIG_ISA_DMA_API) */
  95. #endif /* #ifndef _COMEDI_ISADMA_H */