Commit 8e882ba1 authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Bartlomiej Zolnierkiewicz

ide: introduce CONFIG_BLK_DEV_IDEDMA_SFF option

Introduce new option CONFIG_BLK_DEV_IDEDMA_SFF for non-PCI SFF-8038i compatible
bus mastering IDE controllers (which there are a few known), thus fixing a hack
made for Palmchip BK3710 controller...
Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Cc: Anton Salnikov <asalnikov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 7b56a937
...@@ -378,6 +378,9 @@ config BLK_DEV_IDEPNP ...@@ -378,6 +378,9 @@ config BLK_DEV_IDEPNP
would like the kernel to automatically detect and activate would like the kernel to automatically detect and activate
it, say Y here. it, say Y here.
config BLK_DEV_IDEDMA_SFF
bool
if PCI if PCI
comment "PCI IDE chipsets support" comment "PCI IDE chipsets support"
...@@ -459,6 +462,7 @@ config BLK_DEV_RZ1000 ...@@ -459,6 +462,7 @@ config BLK_DEV_RZ1000
config BLK_DEV_IDEDMA_PCI config BLK_DEV_IDEDMA_PCI
bool bool
select BLK_DEV_IDEPCI select BLK_DEV_IDEPCI
select BLK_DEV_IDEDMA_SFF
config BLK_DEV_AEC62XX config BLK_DEV_AEC62XX
tristate "AEC62XX chipset support" tristate "AEC62XX chipset support"
...@@ -999,7 +1003,7 @@ config BLK_DEV_Q40IDE ...@@ -999,7 +1003,7 @@ config BLK_DEV_Q40IDE
config BLK_DEV_PALMCHIP_BK3710 config BLK_DEV_PALMCHIP_BK3710
tristate "Palmchip bk3710 IDE controller support" tristate "Palmchip bk3710 IDE controller support"
depends on ARCH_DAVINCI depends on ARCH_DAVINCI
select BLK_DEV_IDEDMA_PCI select BLK_DEV_IDEDMA_SFF
help help
Say Y here if you want to support the onchip IDE controller on the Say Y here if you want to support the onchip IDE controller on the
TI DaVinci SoC TI DaVinci SoC
...@@ -1107,7 +1111,8 @@ config BLK_DEV_UMC8672 ...@@ -1107,7 +1111,8 @@ config BLK_DEV_UMC8672
endif endif
config BLK_DEV_IDEDMA config BLK_DEV_IDEDMA
def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA def_bool BLK_DEV_IDEDMA_SFF || BLK_DEV_IDEDMA_PMAC || \
BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
config IDE_ARCH_OBSOLETE_INIT config IDE_ARCH_OBSOLETE_INIT
def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC
......
...@@ -198,7 +198,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq) ...@@ -198,7 +198,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
EXPORT_SYMBOL_GPL(ide_build_sglist); EXPORT_SYMBOL_GPL(ide_build_sglist);
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
/** /**
* ide_build_dmatable - build IDE DMA table * ide_build_dmatable - build IDE DMA table
* *
...@@ -316,7 +316,7 @@ void ide_destroy_dmatable (ide_drive_t *drive) ...@@ -316,7 +316,7 @@ void ide_destroy_dmatable (ide_drive_t *drive)
EXPORT_SYMBOL_GPL(ide_destroy_dmatable); EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
/** /**
* config_drive_for_dma - attempt to activate IDE DMA * config_drive_for_dma - attempt to activate IDE DMA
* @drive: the drive to place in DMA mode * @drive: the drive to place in DMA mode
...@@ -424,7 +424,7 @@ void ide_dma_host_set(ide_drive_t *drive, int on) ...@@ -424,7 +424,7 @@ void ide_dma_host_set(ide_drive_t *drive, int on)
} }
EXPORT_SYMBOL_GPL(ide_dma_host_set); EXPORT_SYMBOL_GPL(ide_dma_host_set);
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
/** /**
* ide_dma_off_quietly - Generic DMA kill * ide_dma_off_quietly - Generic DMA kill
...@@ -474,7 +474,7 @@ void ide_dma_on(ide_drive_t *drive) ...@@ -474,7 +474,7 @@ void ide_dma_on(ide_drive_t *drive)
drive->hwif->dma_host_set(drive, 1); drive->hwif->dma_host_set(drive, 1);
} }
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
/** /**
* ide_dma_setup - begin a DMA phase * ide_dma_setup - begin a DMA phase
* @drive: target device * @drive: target device
...@@ -591,7 +591,7 @@ static int __ide_dma_test_irq(ide_drive_t *drive) ...@@ -591,7 +591,7 @@ static int __ide_dma_test_irq(ide_drive_t *drive)
} }
#else #else
static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; } static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; }
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
int __ide_dma_bad_drive (ide_drive_t *drive) int __ide_dma_bad_drive (ide_drive_t *drive)
{ {
...@@ -840,7 +840,7 @@ void ide_check_dma_crc(ide_drive_t *drive) ...@@ -840,7 +840,7 @@ void ide_check_dma_crc(ide_drive_t *drive)
ide_dma_on(drive); ide_dma_on(drive);
} }
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
void ide_dma_lost_irq (ide_drive_t *drive) void ide_dma_lost_irq (ide_drive_t *drive)
{ {
printk("%s: DMA interrupt recovery\n", drive->name); printk("%s: DMA interrupt recovery\n", drive->name);
...@@ -1002,4 +1002,4 @@ void ide_setup_dma(ide_hwif_t *hwif, unsigned long base) ...@@ -1002,4 +1002,4 @@ void ide_setup_dma(ide_hwif_t *hwif, unsigned long base)
} }
EXPORT_SYMBOL_GPL(ide_setup_dma); EXPORT_SYMBOL_GPL(ide_setup_dma);
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
...@@ -998,8 +998,7 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o ...@@ -998,8 +998,7 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o
void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *); void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *);
void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *);
/* FIXME: palm_bk3710 uses BLK_DEV_IDEDMA_PCI without BLK_DEV_IDEPCI! */ #ifdef CONFIG_BLK_DEV_IDEDMA_PCI
#if defined(CONFIG_BLK_DEV_IDEPCI) && defined(CONFIG_BLK_DEV_IDEDMA_PCI)
void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *); void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *);
#else #else
static inline void ide_hwif_setup_dma(ide_hwif_t *hwif, static inline void ide_hwif_setup_dma(ide_hwif_t *hwif,
...@@ -1146,7 +1145,7 @@ ide_startstop_t ide_dma_intr(ide_drive_t *); ...@@ -1146,7 +1145,7 @@ ide_startstop_t ide_dma_intr(ide_drive_t *);
int ide_build_sglist(ide_drive_t *, struct request *); int ide_build_sglist(ide_drive_t *, struct request *);
void ide_destroy_dmatable(ide_drive_t *); void ide_destroy_dmatable(ide_drive_t *);
#ifdef CONFIG_BLK_DEV_IDEDMA_PCI #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
extern int ide_build_dmatable(ide_drive_t *, struct request *); extern int ide_build_dmatable(ide_drive_t *, struct request *);
extern int ide_release_dma(ide_hwif_t *); extern int ide_release_dma(ide_hwif_t *);
extern void ide_setup_dma(ide_hwif_t *, unsigned long); extern void ide_setup_dma(ide_hwif_t *, unsigned long);
...@@ -1157,7 +1156,7 @@ extern void ide_dma_start(ide_drive_t *); ...@@ -1157,7 +1156,7 @@ extern void ide_dma_start(ide_drive_t *);
extern int __ide_dma_end(ide_drive_t *); extern int __ide_dma_end(ide_drive_t *);
extern void ide_dma_lost_irq(ide_drive_t *); extern void ide_dma_lost_irq(ide_drive_t *);
extern void ide_dma_timeout(ide_drive_t *); extern void ide_dma_timeout(ide_drive_t *);
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
#else #else
static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; }
...@@ -1171,7 +1170,7 @@ static inline int ide_set_dma(ide_drive_t *drive) { return 1; } ...@@ -1171,7 +1170,7 @@ static inline int ide_set_dma(ide_drive_t *drive) { return 1; }
static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } static inline void ide_check_dma_crc(ide_drive_t *drive) { ; }
#endif /* CONFIG_BLK_DEV_IDEDMA */ #endif /* CONFIG_BLK_DEV_IDEDMA */
#ifndef CONFIG_BLK_DEV_IDEDMA_PCI #ifndef CONFIG_BLK_DEV_IDEDMA_SFF
static inline void ide_release_dma(ide_hwif_t *drive) {;} static inline void ide_release_dma(ide_hwif_t *drive) {;}
#endif #endif
......
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