Commit 1c00f016 authored by David Rientjes's avatar David Rientjes Committed by Linus Torvalds

x86: allow CONFIG_ISA_DMA_API to be disabled

Not all 64-bit systems require ISA-style DMA, so allow it to be
configurable.  x86 utilizes the generic ISA DMA allocator from
kernel/dma.c, so require it only when CONFIG_ISA_DMA_API is enabled.

Disabling CONFIG_ISA_DMA_API is dependent on x86_64 since those machines
do not have ISA slots and benefit the most from disabling the option (and
on CONFIG_EXPERT as required by H.  Peter Anvin).

When disabled, this also avoids declaring claim_dma_lock(),
release_dma_lock(), request_dma(), and free_dma() since those interfaces
will no longer be provided.
Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8df3bd9e
...@@ -123,7 +123,7 @@ config NEED_SG_DMA_LENGTH ...@@ -123,7 +123,7 @@ config NEED_SG_DMA_LENGTH
def_bool y def_bool y
config GENERIC_ISA_DMA config GENERIC_ISA_DMA
def_bool y def_bool ISA_DMA_API
config GENERIC_IOMAP config GENERIC_IOMAP
def_bool y def_bool y
...@@ -2002,9 +2002,13 @@ source "drivers/pci/pcie/Kconfig" ...@@ -2002,9 +2002,13 @@ source "drivers/pci/pcie/Kconfig"
source "drivers/pci/Kconfig" source "drivers/pci/Kconfig"
# x86_64 have no ISA slots, but do have ISA-style DMA. # x86_64 have no ISA slots, but can have ISA-style DMA.
config ISA_DMA_API config ISA_DMA_API
def_bool y bool "ISA-style DMA support" if (X86_64 && EXPERT)
default y
help
Enables ISA-style DMA support for devices requiring such controllers.
If unsure, say Y.
if X86_32 if X86_32
......
...@@ -151,6 +151,7 @@ ...@@ -151,6 +151,7 @@
#define DMA_AUTOINIT 0x10 #define DMA_AUTOINIT 0x10
#ifdef CONFIG_ISA_DMA_API
extern spinlock_t dma_spin_lock; extern spinlock_t dma_spin_lock;
static inline unsigned long claim_dma_lock(void) static inline unsigned long claim_dma_lock(void)
...@@ -164,6 +165,7 @@ static inline void release_dma_lock(unsigned long flags) ...@@ -164,6 +165,7 @@ static inline void release_dma_lock(unsigned long flags)
{ {
spin_unlock_irqrestore(&dma_spin_lock, flags); spin_unlock_irqrestore(&dma_spin_lock, flags);
} }
#endif /* CONFIG_ISA_DMA_API */
/* enable/disable a specific DMA channel */ /* enable/disable a specific DMA channel */
static inline void enable_dma(unsigned int dmanr) static inline void enable_dma(unsigned int dmanr)
...@@ -303,9 +305,11 @@ static inline int get_dma_residue(unsigned int dmanr) ...@@ -303,9 +305,11 @@ static inline int get_dma_residue(unsigned int dmanr)
} }
/* These are in kernel/dma.c: */ /* These are in kernel/dma.c because x86 uses CONFIG_GENERIC_ISA_DMA */
#ifdef CONFIG_ISA_DMA_API
extern int request_dma(unsigned int dmanr, const char *device_id); extern int request_dma(unsigned int dmanr, const char *device_id);
extern void free_dma(unsigned int dmanr); extern void free_dma(unsigned int dmanr);
#endif
/* From PCI */ /* From PCI */
......
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