diff options
author | Sergei Shtylyov <sshtylyov@ru.mvista.com> | 2008-02-10 18:32:14 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-02-10 18:32:14 -0500 |
commit | 8e882ba111bb52fbb42c34a265afb97ddd4fcea1 (patch) | |
tree | b7c61b68039f68a3924f6cc81a883753b241b259 | |
parent | 7b56a937a17d21a266dd0a24053f951f3a92e428 (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/Kconfig | 9 | ||||
-rw-r--r-- | drivers/ide/ide-dma.c | 14 | ||||
-rw-r--r-- | include/linux/ide.h | 9 |
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 | ||
381 | config BLK_DEV_IDEDMA_SFF | ||
382 | bool | ||
383 | |||
381 | if PCI | 384 | if PCI |
382 | 385 | ||
383 | comment "PCI IDE chipsets support" | 386 | comment "PCI IDE chipsets support" |
@@ -459,6 +462,7 @@ config BLK_DEV_RZ1000 | |||
459 | config BLK_DEV_IDEDMA_PCI | 462 | config 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 | ||
463 | config BLK_DEV_AEC62XX | 467 | config BLK_DEV_AEC62XX |
464 | tristate "AEC62XX chipset support" | 468 | tristate "AEC62XX chipset support" |
@@ -999,7 +1003,7 @@ config BLK_DEV_Q40IDE | |||
999 | config BLK_DEV_PALMCHIP_BK3710 | 1003 | config 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 | |||
1107 | endif | 1111 | endif |
1108 | 1112 | ||
1109 | config BLK_DEV_IDEDMA | 1113 | config 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 | ||
1112 | config IDE_ARCH_OBSOLETE_INIT | 1117 | config 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 | ||
199 | EXPORT_SYMBOL_GPL(ide_build_sglist); | 199 | EXPORT_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 | ||
317 | EXPORT_SYMBOL_GPL(ide_destroy_dmatable); | 317 | EXPORT_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 | ||
426 | EXPORT_SYMBOL_GPL(ide_dma_host_set); | 426 | EXPORT_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 |
593 | static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; } | 593 | static 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 | ||
596 | int __ide_dma_bad_drive (ide_drive_t *drive) | 596 | int __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 |
844 | void ide_dma_lost_irq (ide_drive_t *drive) | 844 | void 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 | ||
1004 | EXPORT_SYMBOL_GPL(ide_setup_dma); | 1004 | EXPORT_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 | |||
998 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *); | 998 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *); |
999 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 999 | void 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) | ||
1003 | void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *); | 1002 | void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *); |
1004 | #else | 1003 | #else |
1005 | static inline void ide_hwif_setup_dma(ide_hwif_t *hwif, | 1004 | 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 | int ide_build_sglist(ide_drive_t *, struct request *); | 1145 | int ide_build_sglist(ide_drive_t *, struct request *); |
1147 | void ide_destroy_dmatable(ide_drive_t *); | 1146 | void ide_destroy_dmatable(ide_drive_t *); |
1148 | 1147 | ||
1149 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | 1148 | #ifdef CONFIG_BLK_DEV_IDEDMA_SFF |
1150 | extern int ide_build_dmatable(ide_drive_t *, struct request *); | 1149 | extern int ide_build_dmatable(ide_drive_t *, struct request *); |
1151 | extern int ide_release_dma(ide_hwif_t *); | 1150 | extern int ide_release_dma(ide_hwif_t *); |
1152 | extern void ide_setup_dma(ide_hwif_t *, unsigned long); | 1151 | extern void ide_setup_dma(ide_hwif_t *, unsigned long); |
@@ -1157,7 +1156,7 @@ extern void ide_dma_start(ide_drive_t *); | |||
1157 | extern int __ide_dma_end(ide_drive_t *); | 1156 | extern int __ide_dma_end(ide_drive_t *); |
1158 | extern void ide_dma_lost_irq(ide_drive_t *); | 1157 | extern void ide_dma_lost_irq(ide_drive_t *); |
1159 | extern void ide_dma_timeout(ide_drive_t *); | 1158 | extern 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 |
1163 | static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } | 1162 | 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 | static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } | 1170 | static 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 |
1175 | static inline void ide_release_dma(ide_hwif_t *drive) {;} | 1174 | static inline void ide_release_dma(ide_hwif_t *drive) {;} |
1176 | #endif | 1175 | #endif |
1177 | 1176 | ||