diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2013-05-10 09:07:15 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-05-13 17:38:46 -0400 |
commit | 4efc4bbdc1602d887d784be629a7a4efbf6b6e19 (patch) | |
tree | 0ede50007734043fd366d04700cda4392d0fee22 | |
parent | b3fab427739c76871c96834e72c369dd0e502d4b (diff) |
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: Ian Abbott <abbotti@mev.co.uk>
Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/Kconfig | 9 | ||||
-rw-r--r-- | drivers/staging/comedi/comedi_buf.c | 6 |
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 7871579bb83d..87e852a0ef49 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig | |||
@@ -981,6 +981,7 @@ config COMEDI_ME_DAQ | |||
981 | 981 | ||
982 | config COMEDI_NI_6527 | 982 | config COMEDI_NI_6527 |
983 | tristate "NI 6527 support" | 983 | tristate "NI 6527 support" |
984 | depends on HAS_DMA | ||
984 | select COMEDI_MITE | 985 | select COMEDI_MITE |
985 | ---help--- | 986 | ---help--- |
986 | Enable support for the National Instruments 6527 PCI card | 987 | Enable support for the National Instruments 6527 PCI card |
@@ -990,6 +991,7 @@ config COMEDI_NI_6527 | |||
990 | 991 | ||
991 | config COMEDI_NI_65XX | 992 | config COMEDI_NI_65XX |
992 | tristate "NI 65xx static dio PCI card support" | 993 | tristate "NI 65xx static dio PCI card support" |
994 | depends on HAS_DMA | ||
993 | select COMEDI_MITE | 995 | select COMEDI_MITE |
994 | ---help--- | 996 | ---help--- |
995 | Enable support for National Instruments 65xx static dio boards. | 997 | Enable support for National Instruments 65xx static dio boards. |
@@ -1003,6 +1005,7 @@ config COMEDI_NI_65XX | |||
1003 | 1005 | ||
1004 | config COMEDI_NI_660X | 1006 | config COMEDI_NI_660X |
1005 | tristate "NI 660x counter/timer PCI card support" | 1007 | tristate "NI 660x counter/timer PCI card support" |
1008 | depends on HAS_DMA | ||
1006 | select COMEDI_NI_TIOCMD | 1009 | select COMEDI_NI_TIOCMD |
1007 | ---help--- | 1010 | ---help--- |
1008 | Enable support for National Instruments PCI-6601 (ni_660x), PCI-6602, | 1011 | Enable support for National Instruments PCI-6601 (ni_660x), PCI-6602, |
@@ -1013,6 +1016,7 @@ config COMEDI_NI_660X | |||
1013 | 1016 | ||
1014 | config COMEDI_NI_670X | 1017 | config COMEDI_NI_670X |
1015 | tristate "NI 670x PCI card support" | 1018 | tristate "NI 670x PCI card support" |
1019 | depends on HAS_DMA | ||
1016 | select COMEDI_MITE | 1020 | select COMEDI_MITE |
1017 | ---help--- | 1021 | ---help--- |
1018 | Enable support for National Instruments PCI-6703 and PCI-6704 | 1022 | Enable support for National Instruments PCI-6703 and PCI-6704 |
@@ -1022,6 +1026,7 @@ config COMEDI_NI_670X | |||
1022 | 1026 | ||
1023 | config COMEDI_NI_LABPC_PCI | 1027 | config COMEDI_NI_LABPC_PCI |
1024 | tristate "NI Lab-PC PCI-1200 support" | 1028 | tristate "NI Lab-PC PCI-1200 support" |
1029 | depends on HAS_DMA | ||
1025 | select COMEDI_NI_LABPC | 1030 | select COMEDI_NI_LABPC |
1026 | select COMEDI_MITE | 1031 | select COMEDI_MITE |
1027 | ---help--- | 1032 | ---help--- |
@@ -1032,6 +1037,7 @@ config COMEDI_NI_LABPC_PCI | |||
1032 | 1037 | ||
1033 | config COMEDI_NI_PCIDIO | 1038 | config COMEDI_NI_PCIDIO |
1034 | tristate "NI PCI-DIO32HS, PCI-6533, PCI-6534 support" | 1039 | tristate "NI PCI-DIO32HS, PCI-6533, PCI-6534 support" |
1040 | depends on HAS_DMA | ||
1035 | select COMEDI_MITE | 1041 | select COMEDI_MITE |
1036 | select COMEDI_8255 | 1042 | select COMEDI_8255 |
1037 | ---help--- | 1043 | ---help--- |
@@ -1043,6 +1049,7 @@ config COMEDI_NI_PCIDIO | |||
1043 | 1049 | ||
1044 | config COMEDI_NI_PCIMIO | 1050 | config COMEDI_NI_PCIMIO |
1045 | tristate "NI PCI-MIO-E series and M series support" | 1051 | tristate "NI PCI-MIO-E series and M series support" |
1052 | depends on HAS_DMA | ||
1046 | select COMEDI_NI_TIOCMD | 1053 | select COMEDI_NI_TIOCMD |
1047 | select COMEDI_8255 | 1054 | select COMEDI_8255 |
1048 | select COMEDI_FC | 1055 | select COMEDI_FC |
@@ -1095,10 +1102,12 @@ config COMEDI_SSV_DNP | |||
1095 | called ssv_dnp. | 1102 | called ssv_dnp. |
1096 | 1103 | ||
1097 | config COMEDI_MITE | 1104 | config COMEDI_MITE |
1105 | depends on HAS_DMA | ||
1098 | tristate | 1106 | tristate |
1099 | 1107 | ||
1100 | config COMEDI_NI_TIOCMD | 1108 | config COMEDI_NI_TIOCMD |
1101 | tristate | 1109 | tristate |
1110 | depends on HAS_DMA | ||
1102 | select COMEDI_NI_TIO | 1111 | select COMEDI_NI_TIO |
1103 | select COMEDI_MITE | 1112 | select COMEDI_MITE |
1104 | 1113 | ||
diff --git a/drivers/staging/comedi/comedi_buf.c b/drivers/staging/comedi/comedi_buf.c index ca709901fb3e..b6cd67ad55d1 100644 --- a/drivers/staging/comedi/comedi_buf.c +++ b/drivers/staging/comedi/comedi_buf.c | |||
@@ -51,10 +51,12 @@ static void __comedi_buf_free(struct comedi_device *dev, | |||
51 | clear_bit(PG_reserved, | 51 | clear_bit(PG_reserved, |
52 | &(virt_to_page(buf->virt_addr)->flags)); | 52 | &(virt_to_page(buf->virt_addr)->flags)); |
53 | if (s->async_dma_dir != DMA_NONE) { | 53 | if (s->async_dma_dir != DMA_NONE) { |
54 | #ifdef CONFIG_HAS_DMA | ||
54 | dma_free_coherent(dev->hw_dev, | 55 | dma_free_coherent(dev->hw_dev, |
55 | PAGE_SIZE, | 56 | PAGE_SIZE, |
56 | buf->virt_addr, | 57 | buf->virt_addr, |
57 | buf->dma_addr); | 58 | buf->dma_addr); |
59 | #endif | ||
58 | } else { | 60 | } else { |
59 | free_page((unsigned long)buf->virt_addr); | 61 | free_page((unsigned long)buf->virt_addr); |
60 | } | 62 | } |
@@ -84,11 +86,15 @@ static void __comedi_buf_alloc(struct comedi_device *dev, | |||
84 | for (i = 0; i < n_pages; i++) { | 86 | for (i = 0; i < n_pages; i++) { |
85 | buf = &async->buf_page_list[i]; | 87 | buf = &async->buf_page_list[i]; |
86 | if (s->async_dma_dir != DMA_NONE) | 88 | if (s->async_dma_dir != DMA_NONE) |
89 | #ifdef CONFIG_HAS_DMA | ||
87 | buf->virt_addr = dma_alloc_coherent(dev->hw_dev, | 90 | buf->virt_addr = dma_alloc_coherent(dev->hw_dev, |
88 | PAGE_SIZE, | 91 | PAGE_SIZE, |
89 | &buf->dma_addr, | 92 | &buf->dma_addr, |
90 | GFP_KERNEL | | 93 | GFP_KERNEL | |
91 | __GFP_COMP); | 94 | __GFP_COMP); |
95 | #else | ||
96 | break; | ||
97 | #endif | ||
92 | else | 98 | else |
93 | buf->virt_addr = (void *)get_zeroed_page(GFP_KERNEL); | 99 | buf->virt_addr = (void *)get_zeroed_page(GFP_KERNEL); |
94 | if (!buf->virt_addr) | 100 | if (!buf->virt_addr) |