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: David 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: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
8df3bd9e18
Коммит
1c00f0161f
|
@ -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"
|
||||||
|
|
||||||
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 @@
|
||||||
#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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* 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 */
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче