aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergei Shtylyov <sshtylyov@ru.mvista.com>2008-02-10 18:32:14 -0500
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-02-10 18:32:14 -0500
commit8e882ba111bb52fbb42c34a265afb97ddd4fcea1 (patch)
treeb7c61b68039f68a3924f6cc81a883753b241b259
parent7b56a937a17d21a266dd0a24053f951f3a92e428 (diff)
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: Sergei Shtylyov <sshtylyov@ru.mvista.com> Cc: Anton Salnikov <asalnikov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r--drivers/ide/Kconfig9
-rw-r--r--drivers/ide/ide-dma.c14
-rw-r--r--include/linux/ide.h9
3 files changed, 18 insertions, 14 deletions
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
index d2c4f06f53c9..df752e690e47 100644
--- a/drivers/ide/Kconfig
+++ b/drivers/ide/Kconfig
@@ -378,6 +378,9 @@ config BLK_DEV_IDEPNP
378 would like the kernel to automatically detect and activate 378 would like the kernel to automatically detect and activate
379 it, say Y here. 379 it, say Y here.
380 380
381config BLK_DEV_IDEDMA_SFF
382 bool
383
381if PCI 384if PCI
382 385
383comment "PCI IDE chipsets support" 386comment "PCI IDE chipsets support"
@@ -459,6 +462,7 @@ config BLK_DEV_RZ1000
459config BLK_DEV_IDEDMA_PCI 462config BLK_DEV_IDEDMA_PCI
460 bool 463 bool
461 select BLK_DEV_IDEPCI 464 select BLK_DEV_IDEPCI
465 select BLK_DEV_IDEDMA_SFF
462 466
463config BLK_DEV_AEC62XX 467config BLK_DEV_AEC62XX
464 tristate "AEC62XX chipset support" 468 tristate "AEC62XX chipset support"
@@ -999,7 +1003,7 @@ config BLK_DEV_Q40IDE
999config BLK_DEV_PALMCHIP_BK3710 1003config BLK_DEV_PALMCHIP_BK3710
1000 tristate "Palmchip bk3710 IDE controller support" 1004 tristate "Palmchip bk3710 IDE controller support"
1001 depends on ARCH_DAVINCI 1005 depends on ARCH_DAVINCI
1002 select BLK_DEV_IDEDMA_PCI 1006 select BLK_DEV_IDEDMA_SFF
1003 help 1007 help
1004 Say Y here if you want to support the onchip IDE controller on the 1008 Say Y here if you want to support the onchip IDE controller on the
1005 TI DaVinci SoC 1009 TI DaVinci SoC
@@ -1107,7 +1111,8 @@ config BLK_DEV_UMC8672
1107endif 1111endif
1108 1112
1109config BLK_DEV_IDEDMA 1113config BLK_DEV_IDEDMA
1110 def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA 1114 def_bool BLK_DEV_IDEDMA_SFF || BLK_DEV_IDEDMA_PMAC || \
1115 BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
1111 1116
1112config IDE_ARCH_OBSOLETE_INIT 1117config IDE_ARCH_OBSOLETE_INIT
1113 def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC 1118 def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index a4bb32883c6b..d0e7b537353e 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -198,7 +198,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
198 198
199EXPORT_SYMBOL_GPL(ide_build_sglist); 199EXPORT_SYMBOL_GPL(ide_build_sglist);
200 200
201#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 201#ifdef CONFIG_BLK_DEV_IDEDMA_SFF
202/** 202/**
203 * ide_build_dmatable - build IDE DMA table 203 * ide_build_dmatable - build IDE DMA table
204 * 204 *
@@ -316,7 +316,7 @@ void ide_destroy_dmatable (ide_drive_t *drive)
316 316
317EXPORT_SYMBOL_GPL(ide_destroy_dmatable); 317EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
318 318
319#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 319#ifdef CONFIG_BLK_DEV_IDEDMA_SFF
320/** 320/**
321 * config_drive_for_dma - attempt to activate IDE DMA 321 * config_drive_for_dma - attempt to activate IDE DMA
322 * @drive: the drive to place in DMA mode 322 * @drive: the drive to place in DMA mode
@@ -424,7 +424,7 @@ void ide_dma_host_set(ide_drive_t *drive, int on)
424} 424}
425 425
426EXPORT_SYMBOL_GPL(ide_dma_host_set); 426EXPORT_SYMBOL_GPL(ide_dma_host_set);
427#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ 427#endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
428 428
429/** 429/**
430 * ide_dma_off_quietly - Generic DMA kill 430 * ide_dma_off_quietly - Generic DMA kill
@@ -474,7 +474,7 @@ void ide_dma_on(ide_drive_t *drive)
474 drive->hwif->dma_host_set(drive, 1); 474 drive->hwif->dma_host_set(drive, 1);
475} 475}
476 476
477#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 477#ifdef CONFIG_BLK_DEV_IDEDMA_SFF
478/** 478/**
479 * ide_dma_setup - begin a DMA phase 479 * ide_dma_setup - begin a DMA phase
480 * @drive: target device 480 * @drive: target device
@@ -591,7 +591,7 @@ static int __ide_dma_test_irq(ide_drive_t *drive)
591} 591}
592#else 592#else
593static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; } 593static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; }
594#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ 594#endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
595 595
596int __ide_dma_bad_drive (ide_drive_t *drive) 596int __ide_dma_bad_drive (ide_drive_t *drive)
597{ 597{
@@ -840,7 +840,7 @@ void ide_check_dma_crc(ide_drive_t *drive)
840 ide_dma_on(drive); 840 ide_dma_on(drive);
841} 841}
842 842
843#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 843#ifdef CONFIG_BLK_DEV_IDEDMA_SFF
844void ide_dma_lost_irq (ide_drive_t *drive) 844void ide_dma_lost_irq (ide_drive_t *drive)
845{ 845{
846 printk("%s: DMA interrupt recovery\n", drive->name); 846 printk("%s: DMA interrupt recovery\n", drive->name);
@@ -1002,4 +1002,4 @@ void ide_setup_dma(ide_hwif_t *hwif, unsigned long base)
1002} 1002}
1003 1003
1004EXPORT_SYMBOL_GPL(ide_setup_dma); 1004EXPORT_SYMBOL_GPL(ide_setup_dma);
1005#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ 1005#endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
diff --git a/include/linux/ide.h b/include/linux/ide.h
index acec99da832d..40a01c3592df 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -998,8 +998,7 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o
998void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *); 998void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *);
999void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); 999void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *);
1000 1000
1001/* FIXME: palm_bk3710 uses BLK_DEV_IDEDMA_PCI without BLK_DEV_IDEPCI! */ 1001#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
1002#if defined(CONFIG_BLK_DEV_IDEPCI) && defined(CONFIG_BLK_DEV_IDEDMA_PCI)
1003void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *); 1002void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *);
1004#else 1003#else
1005static inline void ide_hwif_setup_dma(ide_hwif_t *hwif, 1004static inline void ide_hwif_setup_dma(ide_hwif_t *hwif,
@@ -1146,7 +1145,7 @@ ide_startstop_t ide_dma_intr(ide_drive_t *);
1146int ide_build_sglist(ide_drive_t *, struct request *); 1145int ide_build_sglist(ide_drive_t *, struct request *);
1147void ide_destroy_dmatable(ide_drive_t *); 1146void ide_destroy_dmatable(ide_drive_t *);
1148 1147
1149#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 1148#ifdef CONFIG_BLK_DEV_IDEDMA_SFF
1150extern int ide_build_dmatable(ide_drive_t *, struct request *); 1149extern int ide_build_dmatable(ide_drive_t *, struct request *);
1151extern int ide_release_dma(ide_hwif_t *); 1150extern int ide_release_dma(ide_hwif_t *);
1152extern void ide_setup_dma(ide_hwif_t *, unsigned long); 1151extern void ide_setup_dma(ide_hwif_t *, unsigned long);
@@ -1157,7 +1156,7 @@ extern void ide_dma_start(ide_drive_t *);
1157extern int __ide_dma_end(ide_drive_t *); 1156extern int __ide_dma_end(ide_drive_t *);
1158extern void ide_dma_lost_irq(ide_drive_t *); 1157extern void ide_dma_lost_irq(ide_drive_t *);
1159extern void ide_dma_timeout(ide_drive_t *); 1158extern void ide_dma_timeout(ide_drive_t *);
1160#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ 1159#endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
1161 1160
1162#else 1161#else
1163static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } 1162static 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; }
1171static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } 1170static inline void ide_check_dma_crc(ide_drive_t *drive) { ; }
1172#endif /* CONFIG_BLK_DEV_IDEDMA */ 1171#endif /* CONFIG_BLK_DEV_IDEDMA */
1173 1172
1174#ifndef CONFIG_BLK_DEV_IDEDMA_PCI 1173#ifndef CONFIG_BLK_DEV_IDEDMA_SFF
1175static inline void ide_release_dma(ide_hwif_t *drive) {;} 1174static inline void ide_release_dma(ide_hwif_t *drive) {;}
1176#endif 1175#endif
1177 1176