Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / staging / comedi / drivers / comedi_isadma.h
diff --git a/kernel/drivers/staging/comedi/drivers/comedi_isadma.h b/kernel/drivers/staging/comedi/drivers/comedi_isadma.h
new file mode 100644 (file)
index 0000000..c7c524f
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * COMEDI ISA DMA support functions
+ * Copyright (c) 2014 H Hartley Sweeten <hsweeten@visionengravers.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _COMEDI_ISADMA_H
+#define _COMEDI_ISADMA_H
+
+/*
+ * These are used to avoid issues when <asm/dma.h> and the DMA_MODE_
+ * defines are not available.
+ */
+#define COMEDI_ISADMA_READ     0
+#define COMEDI_ISADMA_WRITE    1
+
+/**
+ * struct comedi_isadma_desc - cookie for ISA DMA
+ * @virt_addr: virtual address of buffer
+ * @hw_addr:   hardware (bus) address of buffer
+ * @chan:      DMA channel
+ * @maxsize:   allocated size of buffer (in bytes)
+ * @size:      transfer size (in bytes)
+ * @mode:      DMA_MODE_READ or DMA_MODE_WRITE
+ */
+struct comedi_isadma_desc {
+       void *virt_addr;
+       dma_addr_t hw_addr;
+       unsigned int chan;
+       unsigned int maxsize;
+       unsigned int size;
+       char mode;
+};
+
+/**
+ * struct comedi_isadma - ISA DMA data
+ * @desc:      cookie for each DMA buffer
+ * @n_desc:    the number of cookies
+ * @cur_dma:   the current cookie in use
+ * @chan:      the first DMA channel requested
+ * @chan2:     the second DMA channel requested
+ */
+struct comedi_isadma {
+       struct comedi_isadma_desc *desc;
+       int n_desc;
+       int cur_dma;
+       unsigned int chan;
+       unsigned int chan2;
+};
+
+#if IS_ENABLED(CONFIG_ISA_DMA_API)
+
+void comedi_isadma_program(struct comedi_isadma_desc *);
+unsigned int comedi_isadma_disable(unsigned int dma_chan);
+unsigned int comedi_isadma_disable_on_sample(unsigned int dma_chan,
+                                            unsigned int size);
+unsigned int comedi_isadma_poll(struct comedi_isadma *);
+void comedi_isadma_set_mode(struct comedi_isadma_desc *, char dma_dir);
+
+struct comedi_isadma *comedi_isadma_alloc(struct comedi_device *,
+                                         int n_desc, unsigned int dma_chan1,
+                                         unsigned int dma_chan2,
+                                         unsigned int maxsize, char dma_dir);
+void comedi_isadma_free(struct comedi_isadma *);
+
+#else  /* !IS_ENABLED(CONFIG_ISA_DMA_API) */
+
+static inline void comedi_isadma_program(struct comedi_isadma_desc *desc)
+{
+}
+
+static inline unsigned int comedi_isadma_disable(unsigned int dma_chan)
+{
+       return 0;
+}
+
+static inline unsigned int
+comedi_isadma_disable_on_sample(unsigned int dma_chan, unsigned int size)
+{
+       return 0;
+}
+
+static inline unsigned int comedi_isadma_poll(struct comedi_isadma *dma)
+{
+       return 0;
+}
+
+static inline void comedi_isadma_set_mode(struct comedi_isadma_desc *desc,
+                                         char dma_dir)
+{
+}
+
+static inline struct comedi_isadma *
+comedi_isadma_alloc(struct comedi_device *dev, int n_desc,
+                   unsigned int dma_chan1, unsigned int dma_chan2,
+                   unsigned int maxsize, char dma_dir)
+{
+       return NULL;
+}
+
+static inline void comedi_isadma_free(struct comedi_isadma *dma)
+{
+}
+
+#endif /* !IS_ENABLED(CONFIG_ISA_DMA_API) */
+
+#endif /* #ifndef _COMEDI_ISADMA_H */