Commit 4efc4bbd authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman

staging: comedi: work without HAS_DMA

The core "comedi" module and the "mite" helper module for NI PCI devices
both have calls to `dma_alloc_coherent()` and `dma_free_coherent()`.
Those functions are only available if `CONFIG_HAS_DMA` is defined.

Apart from the "mite" module, the functions are only called for comedi
drivers that set `s->async_dma_dir` (where `s` is a pointer to a `struct
comedi_subdevice`) to anything other than `DMA_NONE`.

Change local helper functions `__comedi_buf_alloc()` and
`__comedi_buf_free()` to only call `dma_alloc_coherent()` and
`dma_free_coherent()` if `CONFIG_HAS_DMA` is defined.

Change the "Kconfig" to make the following configuration options depend
on `HAS_DMA`:

`COMEDI_MITE` - builds the "mite" module.
`COMEDI_NI_6527` - selects `COMEDI_MITE`.
`COMEDI_NI_65XX` - selects `COMEDI_MITE`.
`COMEDI_NI_670X` - selects `COMEDI_MITE`.
`COMEDI_NI_LABPC_PCI` - selects `COMEDI_MITE`.
`COMEDI_NI_PCIDIO` - selects `COMEDI_MITE`.
`COMEDI_NI_TIOCMD` - selects `COMEDI_MITE`.
`COMEDI_NI_660X` - selects `COMEDI_NI_TIOCMD`,
                   sets `s->async_dma_dir`.
`COMEDI_NI_PCIMIO` - selects `COMEDI_NI_TIOCMD`,
                     sets `s->async_dma_dir`.
Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
Reviewed-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b3fab427
...@@ -981,6 +981,7 @@ config COMEDI_ME_DAQ ...@@ -981,6 +981,7 @@ config COMEDI_ME_DAQ
config COMEDI_NI_6527 config COMEDI_NI_6527
tristate "NI 6527 support" tristate "NI 6527 support"
depends on HAS_DMA
select COMEDI_MITE select COMEDI_MITE
---help--- ---help---
Enable support for the National Instruments 6527 PCI card Enable support for the National Instruments 6527 PCI card
...@@ -990,6 +991,7 @@ config COMEDI_NI_6527 ...@@ -990,6 +991,7 @@ config COMEDI_NI_6527
config COMEDI_NI_65XX config COMEDI_NI_65XX
tristate "NI 65xx static dio PCI card support" tristate "NI 65xx static dio PCI card support"
depends on HAS_DMA
select COMEDI_MITE select COMEDI_MITE
---help--- ---help---
Enable support for National Instruments 65xx static dio boards. Enable support for National Instruments 65xx static dio boards.
...@@ -1003,6 +1005,7 @@ config COMEDI_NI_65XX ...@@ -1003,6 +1005,7 @@ config COMEDI_NI_65XX
config COMEDI_NI_660X config COMEDI_NI_660X
tristate "NI 660x counter/timer PCI card support" tristate "NI 660x counter/timer PCI card support"
depends on HAS_DMA
select COMEDI_NI_TIOCMD select COMEDI_NI_TIOCMD
---help--- ---help---
Enable support for National Instruments PCI-6601 (ni_660x), PCI-6602, Enable support for National Instruments PCI-6601 (ni_660x), PCI-6602,
...@@ -1013,6 +1016,7 @@ config COMEDI_NI_660X ...@@ -1013,6 +1016,7 @@ config COMEDI_NI_660X
config COMEDI_NI_670X config COMEDI_NI_670X
tristate "NI 670x PCI card support" tristate "NI 670x PCI card support"
depends on HAS_DMA
select COMEDI_MITE select COMEDI_MITE
---help--- ---help---
Enable support for National Instruments PCI-6703 and PCI-6704 Enable support for National Instruments PCI-6703 and PCI-6704
...@@ -1022,6 +1026,7 @@ config COMEDI_NI_670X ...@@ -1022,6 +1026,7 @@ config COMEDI_NI_670X
config COMEDI_NI_LABPC_PCI config COMEDI_NI_LABPC_PCI
tristate "NI Lab-PC PCI-1200 support" tristate "NI Lab-PC PCI-1200 support"
depends on HAS_DMA
select COMEDI_NI_LABPC select COMEDI_NI_LABPC
select COMEDI_MITE select COMEDI_MITE
---help--- ---help---
...@@ -1032,6 +1037,7 @@ config COMEDI_NI_LABPC_PCI ...@@ -1032,6 +1037,7 @@ config COMEDI_NI_LABPC_PCI
config COMEDI_NI_PCIDIO config COMEDI_NI_PCIDIO
tristate "NI PCI-DIO32HS, PCI-6533, PCI-6534 support" tristate "NI PCI-DIO32HS, PCI-6533, PCI-6534 support"
depends on HAS_DMA
select COMEDI_MITE select COMEDI_MITE
select COMEDI_8255 select COMEDI_8255
---help--- ---help---
...@@ -1043,6 +1049,7 @@ config COMEDI_NI_PCIDIO ...@@ -1043,6 +1049,7 @@ config COMEDI_NI_PCIDIO
config COMEDI_NI_PCIMIO config COMEDI_NI_PCIMIO
tristate "NI PCI-MIO-E series and M series support" tristate "NI PCI-MIO-E series and M series support"
depends on HAS_DMA
select COMEDI_NI_TIOCMD select COMEDI_NI_TIOCMD
select COMEDI_8255 select COMEDI_8255
select COMEDI_FC select COMEDI_FC
...@@ -1095,10 +1102,12 @@ config COMEDI_SSV_DNP ...@@ -1095,10 +1102,12 @@ config COMEDI_SSV_DNP
called ssv_dnp. called ssv_dnp.
config COMEDI_MITE config COMEDI_MITE
depends on HAS_DMA
tristate tristate
config COMEDI_NI_TIOCMD config COMEDI_NI_TIOCMD
tristate tristate
depends on HAS_DMA
select COMEDI_NI_TIO select COMEDI_NI_TIO
select COMEDI_MITE select COMEDI_MITE
......
...@@ -51,10 +51,12 @@ static void __comedi_buf_free(struct comedi_device *dev, ...@@ -51,10 +51,12 @@ static void __comedi_buf_free(struct comedi_device *dev,
clear_bit(PG_reserved, clear_bit(PG_reserved,
&(virt_to_page(buf->virt_addr)->flags)); &(virt_to_page(buf->virt_addr)->flags));
if (s->async_dma_dir != DMA_NONE) { if (s->async_dma_dir != DMA_NONE) {
#ifdef CONFIG_HAS_DMA
dma_free_coherent(dev->hw_dev, dma_free_coherent(dev->hw_dev,
PAGE_SIZE, PAGE_SIZE,
buf->virt_addr, buf->virt_addr,
buf->dma_addr); buf->dma_addr);
#endif
} else { } else {
free_page((unsigned long)buf->virt_addr); free_page((unsigned long)buf->virt_addr);
} }
...@@ -84,11 +86,15 @@ static void __comedi_buf_alloc(struct comedi_device *dev, ...@@ -84,11 +86,15 @@ static void __comedi_buf_alloc(struct comedi_device *dev,
for (i = 0; i < n_pages; i++) { for (i = 0; i < n_pages; i++) {
buf = &async->buf_page_list[i]; buf = &async->buf_page_list[i];
if (s->async_dma_dir != DMA_NONE) if (s->async_dma_dir != DMA_NONE)
#ifdef CONFIG_HAS_DMA
buf->virt_addr = dma_alloc_coherent(dev->hw_dev, buf->virt_addr = dma_alloc_coherent(dev->hw_dev,
PAGE_SIZE, PAGE_SIZE,
&buf->dma_addr, &buf->dma_addr,
GFP_KERNEL | GFP_KERNEL |
__GFP_COMP); __GFP_COMP);
#else
break;
#endif
else else
buf->virt_addr = (void *)get_zeroed_page(GFP_KERNEL); buf->virt_addr = (void *)get_zeroed_page(GFP_KERNEL);
if (!buf->virt_addr) if (!buf->virt_addr)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment