diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 19:56:35 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 19:56:35 -0400 |
| commit | 2b0460b534f383eca744eb8fff66ec9f57e702b9 (patch) | |
| tree | 1bf4b9d0ebccd3083da4de7e4273b8d29f5d5c5d /drivers | |
| parent | d91f5bb69adde86173071cf7fffbdf705ae8c6e7 (diff) | |
| parent | b02fcae007ac64012806bc57054e7fee6e2ffe5e (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6: (33 commits)
amd74xx: remove /proc/ide/amd74xx
amd74xx/via82cxxx: don't initialize drive->dn
sis5513: remove /proc/ide/sis
ide: remove CONFIG_IDEDMA_ONLYDISK
ide: add "hdx=nodma" kernel parameter
ide: remove hwif->autodma and drive->autodma
ide: remove "idex=dma" kernel parameter
ide: remove CONFIG_BLK_DEV_IDEDMA_FORCED
ide: use PCI_VDEVICE() macro
sis5513: clear prefetch and postwrite for ATAPI devices
it8213/piix/slc90e66: "de-couple" PIO and UDMA modes
ide: unexport noautodma
ide: unexport ide_tune_dma
ide: remove ->ide_dma_check (take 2)
ide-pmac: add PIO autotune fallback to ->ide_dma_check
ide-cris: add PIO autotune fallback to ->ide_dma_check
sl82c105: add PIO autotune fallback to ->ide_dma_check
cs5530/sc1200: add PIO autotune fallback to ->ide_dma_check
ide: remove ide_use_fast_pio()
ide: remove drive->init_speed zeroing
...
Diffstat (limited to 'drivers')
46 files changed, 442 insertions, 1689 deletions
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig index 8982c0932438..6d9fd92763f4 100644 --- a/drivers/ide/Kconfig +++ b/drivers/ide/Kconfig | |||
| @@ -435,24 +435,6 @@ config BLK_DEV_IDEDMA_PCI | |||
| 435 | bool | 435 | bool |
| 436 | select BLK_DEV_IDEPCI | 436 | select BLK_DEV_IDEPCI |
| 437 | 437 | ||
| 438 | config BLK_DEV_IDEDMA_FORCED | ||
| 439 | bool "Force enable legacy 2.0.X HOSTS to use DMA" | ||
| 440 | depends on BLK_DEV_IDEDMA_PCI | ||
| 441 | help | ||
| 442 | This is an old piece of lost code from Linux 2.0 Kernels. | ||
| 443 | |||
| 444 | Generally say N here. | ||
| 445 | |||
| 446 | # TODO: remove it | ||
| 447 | config IDEDMA_ONLYDISK | ||
| 448 | bool "Enable DMA only for disks " | ||
| 449 | depends on BLK_DEV_IDEDMA_PCI | ||
| 450 | help | ||
| 451 | This is used if you know your ATAPI Devices are going to fail DMA | ||
| 452 | Transfers. | ||
| 453 | |||
| 454 | Generally say N here. | ||
| 455 | |||
| 456 | config BLK_DEV_AEC62XX | 438 | config BLK_DEV_AEC62XX |
| 457 | tristate "AEC62XX chipset support" | 439 | tristate "AEC62XX chipset support" |
| 458 | select BLK_DEV_IDEDMA_PCI | 440 | select BLK_DEV_IDEDMA_PCI |
diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c index bd1f5b670378..e4875cef78bb 100644 --- a/drivers/ide/arm/icside.c +++ b/drivers/ide/arm/icside.c | |||
| @@ -309,14 +309,6 @@ static int icside_dma_on(ide_drive_t *drive) | |||
| 309 | return 0; | 309 | return 0; |
| 310 | } | 310 | } |
| 311 | 311 | ||
| 312 | static int icside_dma_check(ide_drive_t *drive) | ||
| 313 | { | ||
| 314 | if (ide_tune_dma(drive)) | ||
| 315 | return 0; | ||
| 316 | |||
| 317 | return -1; | ||
| 318 | } | ||
| 319 | |||
| 320 | static int icside_dma_end(ide_drive_t *drive) | 312 | static int icside_dma_end(ide_drive_t *drive) |
| 321 | { | 313 | { |
| 322 | ide_hwif_t *hwif = HWIF(drive); | 314 | ide_hwif_t *hwif = HWIF(drive); |
| @@ -423,8 +415,6 @@ static void icside_dma_lost_irq(ide_drive_t *drive) | |||
| 423 | 415 | ||
| 424 | static void icside_dma_init(ide_hwif_t *hwif) | 416 | static void icside_dma_init(ide_hwif_t *hwif) |
| 425 | { | 417 | { |
| 426 | printk(" %s: SG-DMA", hwif->name); | ||
| 427 | |||
| 428 | hwif->atapi_dma = 1; | 418 | hwif->atapi_dma = 1; |
| 429 | hwif->mwdma_mask = 7; /* MW0..2 */ | 419 | hwif->mwdma_mask = 7; /* MW0..2 */ |
| 430 | hwif->swdma_mask = 7; /* SW0..2 */ | 420 | hwif->swdma_mask = 7; /* SW0..2 */ |
| @@ -432,9 +422,7 @@ static void icside_dma_init(ide_hwif_t *hwif) | |||
| 432 | hwif->dmatable_cpu = NULL; | 422 | hwif->dmatable_cpu = NULL; |
| 433 | hwif->dmatable_dma = 0; | 423 | hwif->dmatable_dma = 0; |
| 434 | hwif->set_dma_mode = icside_set_dma_mode; | 424 | hwif->set_dma_mode = icside_set_dma_mode; |
| 435 | hwif->autodma = 1; | ||
| 436 | 425 | ||
| 437 | hwif->ide_dma_check = icside_dma_check; | ||
| 438 | hwif->dma_host_off = icside_dma_host_off; | 426 | hwif->dma_host_off = icside_dma_host_off; |
| 439 | hwif->dma_off_quietly = icside_dma_off_quietly; | 427 | hwif->dma_off_quietly = icside_dma_off_quietly; |
| 440 | hwif->dma_host_on = icside_dma_host_on; | 428 | hwif->dma_host_on = icside_dma_host_on; |
| @@ -446,11 +434,6 @@ static void icside_dma_init(ide_hwif_t *hwif) | |||
| 446 | hwif->ide_dma_test_irq = icside_dma_test_irq; | 434 | hwif->ide_dma_test_irq = icside_dma_test_irq; |
| 447 | hwif->dma_timeout = icside_dma_timeout; | 435 | hwif->dma_timeout = icside_dma_timeout; |
| 448 | hwif->dma_lost_irq = icside_dma_lost_irq; | 436 | hwif->dma_lost_irq = icside_dma_lost_irq; |
| 449 | |||
| 450 | hwif->drives[0].autodma = hwif->autodma; | ||
| 451 | hwif->drives[1].autodma = hwif->autodma; | ||
| 452 | |||
| 453 | printk(" capable%s\n", hwif->autodma ? ", auto-enable" : ""); | ||
| 454 | } | 437 | } |
| 455 | #else | 438 | #else |
| 456 | #define icside_dma_init(hwif) (0) | 439 | #define icside_dma_init(hwif) (0) |
diff --git a/drivers/ide/cris/ide-cris.c b/drivers/ide/cris/ide-cris.c index c306c9f534ab..06c75f18eb88 100644 --- a/drivers/ide/cris/ide-cris.c +++ b/drivers/ide/cris/ide-cris.c | |||
| @@ -664,7 +664,6 @@ cris_ide_inb(unsigned long reg) | |||
| 664 | return (unsigned char)cris_ide_inw(reg); | 664 | return (unsigned char)cris_ide_inw(reg); |
| 665 | } | 665 | } |
| 666 | 666 | ||
| 667 | static int cris_dma_check (ide_drive_t *drive); | ||
| 668 | static int cris_dma_end (ide_drive_t *drive); | 667 | static int cris_dma_end (ide_drive_t *drive); |
| 669 | static int cris_dma_setup (ide_drive_t *drive); | 668 | static int cris_dma_setup (ide_drive_t *drive); |
| 670 | static void cris_dma_exec_cmd (ide_drive_t *drive, u8 command); | 669 | static void cris_dma_exec_cmd (ide_drive_t *drive, u8 command); |
| @@ -792,7 +791,6 @@ init_e100_ide (void) | |||
| 792 | hwif->ata_output_data = &cris_ide_output_data; | 791 | hwif->ata_output_data = &cris_ide_output_data; |
| 793 | hwif->atapi_input_bytes = &cris_atapi_input_bytes; | 792 | hwif->atapi_input_bytes = &cris_atapi_input_bytes; |
| 794 | hwif->atapi_output_bytes = &cris_atapi_output_bytes; | 793 | hwif->atapi_output_bytes = &cris_atapi_output_bytes; |
| 795 | hwif->ide_dma_check = &cris_dma_check; | ||
| 796 | hwif->ide_dma_end = &cris_dma_end; | 794 | hwif->ide_dma_end = &cris_dma_end; |
| 797 | hwif->dma_setup = &cris_dma_setup; | 795 | hwif->dma_setup = &cris_dma_setup; |
| 798 | hwif->dma_exec_cmd = &cris_dma_exec_cmd; | 796 | hwif->dma_exec_cmd = &cris_dma_exec_cmd; |
| @@ -808,11 +806,10 @@ init_e100_ide (void) | |||
| 808 | hwif->dma_off_quietly = &cris_dma_off; | 806 | hwif->dma_off_quietly = &cris_dma_off; |
| 809 | hwif->cbl = ATA_CBL_PATA40; | 807 | hwif->cbl = ATA_CBL_PATA40; |
| 810 | hwif->pio_mask = ATA_PIO4, | 808 | hwif->pio_mask = ATA_PIO4, |
| 809 | hwif->drives[0].autotune = 1; | ||
| 810 | hwif->drives[1].autotune = 1; | ||
| 811 | hwif->ultra_mask = cris_ultra_mask; | 811 | hwif->ultra_mask = cris_ultra_mask; |
| 812 | hwif->mwdma_mask = 0x07; /* Multiword DMA 0-2 */ | 812 | hwif->mwdma_mask = 0x07; /* Multiword DMA 0-2 */ |
| 813 | hwif->autodma = 1; | ||
| 814 | hwif->drives[0].autodma = 1; | ||
| 815 | hwif->drives[1].autodma = 1; | ||
| 816 | } | 813 | } |
| 817 | 814 | ||
| 818 | /* Reset pulse */ | 815 | /* Reset pulse */ |
| @@ -1018,14 +1015,6 @@ static ide_startstop_t cris_dma_intr (ide_drive_t *drive) | |||
| 1018 | * the caller should revert to PIO for the current request. | 1015 | * the caller should revert to PIO for the current request. |
| 1019 | */ | 1016 | */ |
| 1020 | 1017 | ||
| 1021 | static int cris_dma_check(ide_drive_t *drive) | ||
| 1022 | { | ||
| 1023 | if (ide_tune_dma(drive)) | ||
| 1024 | return 0; | ||
| 1025 | |||
| 1026 | return -1; | ||
| 1027 | } | ||
| 1028 | |||
| 1029 | static int cris_dma_end(ide_drive_t *drive) | 1018 | static int cris_dma_end(ide_drive_t *drive) |
| 1030 | { | 1019 | { |
| 1031 | drive->waiting_for_dma = 0; | 1020 | drive->waiting_for_dma = 0; |
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c index a4cbbbaccde9..bc57ce6bf0b3 100644 --- a/drivers/ide/ide-dma.c +++ b/drivers/ide/ide-dma.c | |||
| @@ -338,35 +338,30 @@ static int config_drive_for_dma (ide_drive_t *drive) | |||
| 338 | ide_hwif_t *hwif = drive->hwif; | 338 | ide_hwif_t *hwif = drive->hwif; |
| 339 | struct hd_driveid *id = drive->id; | 339 | struct hd_driveid *id = drive->id; |
| 340 | 340 | ||
| 341 | /* consult the list of known "bad" drives */ | ||
| 342 | if (__ide_dma_bad_drive(drive)) | ||
| 343 | return -1; | ||
| 344 | |||
| 345 | if (drive->media != ide_disk && hwif->atapi_dma == 0) | 341 | if (drive->media != ide_disk && hwif->atapi_dma == 0) |
| 346 | return -1; | 342 | return 0; |
| 347 | 343 | ||
| 348 | if ((id->capability & 1) && drive->autodma) { | 344 | /* |
| 349 | /* | 345 | * Enable DMA on any drive that has |
| 350 | * Enable DMA on any drive that has | 346 | * UltraDMA (mode 0/1/2/3/4/5/6) enabled |
| 351 | * UltraDMA (mode 0/1/2/3/4/5/6) enabled | 347 | */ |
| 352 | */ | 348 | if ((id->field_valid & 4) && ((id->dma_ultra >> 8) & 0x7f)) |
| 353 | if ((id->field_valid & 4) && ((id->dma_ultra >> 8) & 0x7f)) | 349 | return 1; |
| 354 | return 0; | 350 | |
| 355 | /* | 351 | /* |
| 356 | * Enable DMA on any drive that has mode2 DMA | 352 | * Enable DMA on any drive that has mode2 DMA |
| 357 | * (multi or single) enabled | 353 | * (multi or single) enabled |
| 358 | */ | 354 | */ |
| 359 | if (id->field_valid & 2) /* regular DMA */ | 355 | if (id->field_valid & 2) /* regular DMA */ |
| 360 | if ((id->dma_mword & 0x404) == 0x404 || | 356 | if ((id->dma_mword & 0x404) == 0x404 || |
| 361 | (id->dma_1word & 0x404) == 0x404) | 357 | (id->dma_1word & 0x404) == 0x404) |
| 362 | return 0; | 358 | return 1; |
| 363 | 359 | ||
| 364 | /* Consult the list of known "good" drives */ | 360 | /* Consult the list of known "good" drives */ |
| 365 | if (ide_dma_good_drive(drive)) | 361 | if (ide_dma_good_drive(drive)) |
| 366 | return 0; | 362 | return 1; |
| 367 | } | ||
| 368 | 363 | ||
| 369 | return -1; | 364 | return 0; |
| 370 | } | 365 | } |
| 371 | 366 | ||
| 372 | /** | 367 | /** |
| @@ -627,6 +622,8 @@ static int __ide_dma_test_irq(ide_drive_t *drive) | |||
| 627 | drive->name, __FUNCTION__); | 622 | drive->name, __FUNCTION__); |
| 628 | return 0; | 623 | return 0; |
| 629 | } | 624 | } |
| 625 | #else | ||
| 626 | static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; } | ||
| 630 | #endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ | 627 | #endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ |
| 631 | 628 | ||
| 632 | int __ide_dma_bad_drive (ide_drive_t *drive) | 629 | int __ide_dma_bad_drive (ide_drive_t *drive) |
| @@ -758,17 +755,20 @@ u8 ide_find_dma_mode(ide_drive_t *drive, u8 req_mode) | |||
| 758 | 755 | ||
| 759 | EXPORT_SYMBOL_GPL(ide_find_dma_mode); | 756 | EXPORT_SYMBOL_GPL(ide_find_dma_mode); |
| 760 | 757 | ||
| 761 | int ide_tune_dma(ide_drive_t *drive) | 758 | static int ide_tune_dma(ide_drive_t *drive) |
| 762 | { | 759 | { |
| 763 | u8 speed; | 760 | u8 speed; |
| 764 | 761 | ||
| 765 | if ((drive->id->capability & 1) == 0 || drive->autodma == 0) | 762 | if (noautodma || drive->nodma || (drive->id->capability & 1) == 0) |
| 766 | return 0; | 763 | return 0; |
| 767 | 764 | ||
| 768 | /* consult the list of known "bad" drives */ | 765 | /* consult the list of known "bad" drives */ |
| 769 | if (__ide_dma_bad_drive(drive)) | 766 | if (__ide_dma_bad_drive(drive)) |
| 770 | return 0; | 767 | return 0; |
| 771 | 768 | ||
| 769 | if (drive->hwif->host_flags & IDE_HFLAG_TRUST_BIOS_FOR_DMA) | ||
| 770 | return config_drive_for_dma(drive); | ||
| 771 | |||
| 772 | speed = ide_max_dma_mode(drive); | 772 | speed = ide_max_dma_mode(drive); |
| 773 | 773 | ||
| 774 | if (!speed) | 774 | if (!speed) |
| @@ -783,7 +783,22 @@ int ide_tune_dma(ide_drive_t *drive) | |||
| 783 | return 1; | 783 | return 1; |
| 784 | } | 784 | } |
| 785 | 785 | ||
| 786 | EXPORT_SYMBOL_GPL(ide_tune_dma); | 786 | static int ide_dma_check(ide_drive_t *drive) |
| 787 | { | ||
| 788 | ide_hwif_t *hwif = drive->hwif; | ||
| 789 | int vdma = (hwif->host_flags & IDE_HFLAG_VDMA)? 1 : 0; | ||
| 790 | |||
| 791 | if (!vdma && ide_tune_dma(drive)) | ||
| 792 | return 0; | ||
| 793 | |||
| 794 | /* TODO: always do PIO fallback */ | ||
| 795 | if (hwif->host_flags & IDE_HFLAG_TRUST_BIOS_FOR_DMA) | ||
| 796 | return -1; | ||
| 797 | |||
| 798 | ide_set_max_pio(drive); | ||
| 799 | |||
| 800 | return vdma ? 0 : -1; | ||
| 801 | } | ||
| 787 | 802 | ||
| 788 | void ide_dma_verbose(ide_drive_t *drive) | 803 | void ide_dma_verbose(ide_drive_t *drive) |
| 789 | { | 804 | { |
| @@ -842,7 +857,7 @@ int ide_set_dma(ide_drive_t *drive) | |||
| 842 | ide_hwif_t *hwif = drive->hwif; | 857 | ide_hwif_t *hwif = drive->hwif; |
| 843 | int rc; | 858 | int rc; |
| 844 | 859 | ||
| 845 | rc = hwif->ide_dma_check(drive); | 860 | rc = ide_dma_check(drive); |
| 846 | 861 | ||
| 847 | switch(rc) { | 862 | switch(rc) { |
| 848 | case -1: /* DMA needs to be disabled */ | 863 | case -1: /* DMA needs to be disabled */ |
| @@ -1019,8 +1034,6 @@ void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_p | |||
| 1019 | hwif->ide_dma_on = &__ide_dma_on; | 1034 | hwif->ide_dma_on = &__ide_dma_on; |
| 1020 | if (!hwif->dma_host_on) | 1035 | if (!hwif->dma_host_on) |
| 1021 | hwif->dma_host_on = &ide_dma_host_on; | 1036 | hwif->dma_host_on = &ide_dma_host_on; |
| 1022 | if (!hwif->ide_dma_check) | ||
| 1023 | hwif->ide_dma_check = &config_drive_for_dma; | ||
| 1024 | if (!hwif->dma_setup) | 1037 | if (!hwif->dma_setup) |
| 1025 | hwif->dma_setup = &ide_dma_setup; | 1038 | hwif->dma_setup = &ide_dma_setup; |
| 1026 | if (!hwif->dma_exec_cmd) | 1039 | if (!hwif->dma_exec_cmd) |
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 04273d3c147c..ec835e37e729 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
| @@ -219,11 +219,11 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request * | |||
| 219 | 219 | ||
| 220 | case ide_pm_restore_dma: /* Resume step 3 (restore DMA) */ | 220 | case ide_pm_restore_dma: /* Resume step 3 (restore DMA) */ |
| 221 | /* | 221 | /* |
| 222 | * Right now, all we do is call hwif->ide_dma_check(drive), | 222 | * Right now, all we do is call ide_set_dma(drive), |
| 223 | * we could be smarter and check for current xfer_speed | 223 | * we could be smarter and check for current xfer_speed |
| 224 | * in struct drive etc... | 224 | * in struct drive etc... |
| 225 | */ | 225 | */ |
| 226 | if (drive->hwif->ide_dma_check == NULL) | 226 | if (drive->hwif->ide_dma_on == NULL) |
| 227 | break; | 227 | break; |
| 228 | drive->hwif->dma_off_quietly(drive); | 228 | drive->hwif->dma_off_quietly(drive); |
| 229 | /* | 229 | /* |
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index aa738833bed5..d4d790f91f91 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
| @@ -776,7 +776,7 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) | |||
| 776 | // msleep(50); | 776 | // msleep(50); |
| 777 | 777 | ||
| 778 | #ifdef CONFIG_BLK_DEV_IDEDMA | 778 | #ifdef CONFIG_BLK_DEV_IDEDMA |
| 779 | if (hwif->ide_dma_check) /* check if host supports DMA */ | 779 | if (hwif->ide_dma_on) /* check if host supports DMA */ |
| 780 | hwif->dma_host_off(drive); | 780 | hwif->dma_host_off(drive); |
| 781 | #endif | 781 | #endif |
| 782 | 782 | ||
| @@ -830,7 +830,7 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) | |||
| 830 | #ifdef CONFIG_BLK_DEV_IDEDMA | 830 | #ifdef CONFIG_BLK_DEV_IDEDMA |
| 831 | if (speed >= XFER_SW_DMA_0) | 831 | if (speed >= XFER_SW_DMA_0) |
| 832 | hwif->dma_host_on(drive); | 832 | hwif->dma_host_on(drive); |
| 833 | else if (hwif->ide_dma_check) /* check if host supports DMA */ | 833 | else if (hwif->ide_dma_on) /* check if host supports DMA */ |
| 834 | hwif->dma_off_quietly(drive); | 834 | hwif->dma_off_quietly(drive); |
| 835 | #endif | 835 | #endif |
| 836 | 836 | ||
diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c index 0e2562f0f74e..af86433baede 100644 --- a/drivers/ide/ide-lib.c +++ b/drivers/ide/ide-lib.c | |||
| @@ -96,21 +96,6 @@ static u8 ide_rate_filter(ide_drive_t *drive, u8 speed) | |||
| 96 | return min(speed, mode); | 96 | return min(speed, mode); |
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | int ide_use_fast_pio(ide_drive_t *drive) | ||
| 100 | { | ||
| 101 | struct hd_driveid *id = drive->id; | ||
| 102 | |||
| 103 | if ((id->capability & 1) && drive->autodma) | ||
| 104 | return 1; | ||
| 105 | |||
| 106 | if ((id->capability & 8) || (id->field_valid & 2)) | ||
| 107 | return 1; | ||
| 108 | |||
| 109 | return 0; | ||
| 110 | } | ||
| 111 | |||
| 112 | EXPORT_SYMBOL_GPL(ide_use_fast_pio); | ||
| 113 | |||
| 114 | /* | 99 | /* |
| 115 | * Standard (generic) timings for PIO modes, from ATA2 specification. | 100 | * Standard (generic) timings for PIO modes, from ATA2 specification. |
| 116 | * These timings are for access to the IDE data port register *only*. | 101 | * These timings are for access to the IDE data port register *only*. |
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 34b1fb65bc79..3c945d64d845 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
| @@ -835,16 +835,7 @@ static void probe_hwif(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif)) | |||
| 835 | 835 | ||
| 836 | drive->nice1 = 1; | 836 | drive->nice1 = 1; |
| 837 | 837 | ||
| 838 | /* | 838 | if (hwif->ide_dma_on) { |
| 839 | * MAJOR HACK BARF :-/ | ||
| 840 | * | ||
| 841 | * FIXME: chipsets own this cruft! | ||
| 842 | */ | ||
| 843 | /* | ||
| 844 | * Move here to prevent module loading clashing. | ||
| 845 | */ | ||
| 846 | // drive->autodma = hwif->autodma; | ||
| 847 | if (hwif->ide_dma_check) { | ||
| 848 | /* | 839 | /* |
| 849 | * Force DMAing for the beginning of the check. | 840 | * Force DMAing for the beginning of the check. |
| 850 | * Some chipsets appear to do interesting | 841 | * Some chipsets appear to do interesting |
| @@ -852,10 +843,7 @@ static void probe_hwif(ide_hwif_t *hwif, void (*fixup)(ide_hwif_t *hwif)) | |||
| 852 | * PARANOIA!!! | 843 | * PARANOIA!!! |
| 853 | */ | 844 | */ |
| 854 | hwif->dma_off_quietly(drive); | 845 | hwif->dma_off_quietly(drive); |
| 855 | #ifdef CONFIG_IDEDMA_ONLYDISK | 846 | ide_set_dma(drive); |
| 856 | if (drive->media == ide_disk) | ||
| 857 | #endif | ||
| 858 | ide_set_dma(drive); | ||
| 859 | } | 847 | } |
| 860 | } | 848 | } |
| 861 | } | 849 | } |
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 5c0e4078b5cb..5b090662683e 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
| @@ -100,8 +100,6 @@ static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */ | |||
| 100 | 100 | ||
| 101 | int noautodma = 0; | 101 | int noautodma = 0; |
| 102 | 102 | ||
| 103 | EXPORT_SYMBOL(noautodma); | ||
| 104 | |||
| 105 | #ifdef CONFIG_BLK_DEV_IDEACPI | 103 | #ifdef CONFIG_BLK_DEV_IDEACPI |
| 106 | int ide_noacpi = 0; | 104 | int ide_noacpi = 0; |
| 107 | int ide_noacpitfs = 1; | 105 | int ide_noacpitfs = 1; |
| @@ -418,7 +416,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) | |||
| 418 | hwif->dma_exec_cmd = tmp_hwif->dma_exec_cmd; | 416 | hwif->dma_exec_cmd = tmp_hwif->dma_exec_cmd; |
| 419 | hwif->dma_start = tmp_hwif->dma_start; | 417 | hwif->dma_start = tmp_hwif->dma_start; |
| 420 | hwif->ide_dma_end = tmp_hwif->ide_dma_end; | 418 | hwif->ide_dma_end = tmp_hwif->ide_dma_end; |
| 421 | hwif->ide_dma_check = tmp_hwif->ide_dma_check; | ||
| 422 | hwif->ide_dma_on = tmp_hwif->ide_dma_on; | 419 | hwif->ide_dma_on = tmp_hwif->ide_dma_on; |
| 423 | hwif->dma_off_quietly = tmp_hwif->dma_off_quietly; | 420 | hwif->dma_off_quietly = tmp_hwif->dma_off_quietly; |
| 424 | hwif->ide_dma_test_irq = tmp_hwif->ide_dma_test_irq; | 421 | hwif->ide_dma_test_irq = tmp_hwif->ide_dma_test_irq; |
| @@ -461,7 +458,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) | |||
| 461 | hwif->select_data = tmp_hwif->select_data; | 458 | hwif->select_data = tmp_hwif->select_data; |
| 462 | hwif->extra_base = tmp_hwif->extra_base; | 459 | hwif->extra_base = tmp_hwif->extra_base; |
| 463 | hwif->extra_ports = tmp_hwif->extra_ports; | 460 | hwif->extra_ports = tmp_hwif->extra_ports; |
| 464 | hwif->autodma = tmp_hwif->autodma; | ||
| 465 | 461 | ||
| 466 | hwif->hwif_data = tmp_hwif->hwif_data; | 462 | hwif->hwif_data = tmp_hwif->hwif_data; |
| 467 | } | 463 | } |
| @@ -823,7 +819,7 @@ int set_using_dma(ide_drive_t *drive, int arg) | |||
| 823 | if (!drive->id || !(drive->id->capability & 1)) | 819 | if (!drive->id || !(drive->id->capability & 1)) |
| 824 | goto out; | 820 | goto out; |
| 825 | 821 | ||
| 826 | if (hwif->ide_dma_check == NULL) | 822 | if (hwif->ide_dma_on == NULL) |
| 827 | goto out; | 823 | goto out; |
| 828 | 824 | ||
| 829 | err = -EBUSY; | 825 | err = -EBUSY; |
| @@ -1276,7 +1272,7 @@ static int __init ide_setup(char *s) | |||
| 1276 | if (!strcmp(s, "ide=nodma")) { | 1272 | if (!strcmp(s, "ide=nodma")) { |
| 1277 | printk(" : Prevented DMA\n"); | 1273 | printk(" : Prevented DMA\n"); |
| 1278 | noautodma = 1; | 1274 | noautodma = 1; |
| 1279 | return 1; | 1275 | goto obsolete_option; |
| 1280 | } | 1276 | } |
| 1281 | 1277 | ||
| 1282 | #ifdef CONFIG_IDEPCI_PCIBUS_ORDER | 1278 | #ifdef CONFIG_IDEPCI_PCIBUS_ORDER |
| @@ -1310,7 +1306,7 @@ static int __init ide_setup(char *s) | |||
| 1310 | */ | 1306 | */ |
| 1311 | if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) { | 1307 | if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) { |
| 1312 | const char *hd_words[] = { | 1308 | const char *hd_words[] = { |
| 1313 | "none", "noprobe", "nowerr", "cdrom", "minus5", | 1309 | "none", "noprobe", "nowerr", "cdrom", "nodma", |
| 1314 | "autotune", "noautotune", "minus8", "swapdata", "bswap", | 1310 | "autotune", "noautotune", "minus8", "swapdata", "bswap", |
| 1315 | "noflush", "remap", "remap63", "scsi", NULL }; | 1311 | "noflush", "remap", "remap63", "scsi", NULL }; |
| 1316 | unit = s[2] - 'a'; | 1312 | unit = s[2] - 'a'; |
| @@ -1338,6 +1334,9 @@ static int __init ide_setup(char *s) | |||
| 1338 | drive->ready_stat = 0; | 1334 | drive->ready_stat = 0; |
| 1339 | hwif->noprobe = 0; | 1335 | hwif->noprobe = 0; |
| 1340 | goto done; | 1336 | goto done; |
| 1337 | case -5: /* nodma */ | ||
| 1338 | drive->nodma = 1; | ||
| 1339 | goto done; | ||
| 1341 | case -6: /* "autotune" */ | 1340 | case -6: /* "autotune" */ |
| 1342 | drive->autotune = IDE_TUNE_AUTO; | 1341 | drive->autotune = IDE_TUNE_AUTO; |
| 1343 | goto obsolete_option; | 1342 | goto obsolete_option; |
| @@ -1399,7 +1398,7 @@ static int __init ide_setup(char *s) | |||
| 1399 | */ | 1398 | */ |
| 1400 | static const char *ide_words[] = { | 1399 | static const char *ide_words[] = { |
| 1401 | "noprobe", "serialize", "minus3", "minus4", | 1400 | "noprobe", "serialize", "minus3", "minus4", |
| 1402 | "reset", "dma", "ata66", "minus8", "minus9", | 1401 | "reset", "minus6", "ata66", "minus8", "minus9", |
| 1403 | "minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb", | 1402 | "minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb", |
| 1404 | "dtc2278", "umc8672", "ali14xx", NULL }; | 1403 | "dtc2278", "umc8672", "ali14xx", NULL }; |
| 1405 | hw = s[3] - '0'; | 1404 | hw = s[3] - '0'; |
| @@ -1478,6 +1477,7 @@ static int __init ide_setup(char *s) | |||
| 1478 | case -10: /* minus10 */ | 1477 | case -10: /* minus10 */ |
| 1479 | case -9: /* minus9 */ | 1478 | case -9: /* minus9 */ |
| 1480 | case -8: /* minus8 */ | 1479 | case -8: /* minus8 */ |
| 1480 | case -6: | ||
| 1481 | case -4: | 1481 | case -4: |
| 1482 | case -3: | 1482 | case -3: |
| 1483 | goto bad_option; | 1483 | goto bad_option; |
| @@ -1492,9 +1492,6 @@ static int __init ide_setup(char *s) | |||
| 1492 | #else | 1492 | #else |
| 1493 | goto bad_hwif; | 1493 | goto bad_hwif; |
| 1494 | #endif | 1494 | #endif |
| 1495 | case -6: /* dma */ | ||
| 1496 | hwif->autodma = 1; | ||
| 1497 | goto obsolete_option; | ||
| 1498 | case -5: /* "reset" */ | 1495 | case -5: /* "reset" */ |
| 1499 | hwif->reset = 1; | 1496 | hwif->reset = 1; |
| 1500 | goto obsolete_option; | 1497 | goto obsolete_option; |
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c index 4cdb519f9832..e8e360c2619d 100644 --- a/drivers/ide/legacy/ide-cs.c +++ b/drivers/ide/legacy/ide-cs.c | |||
| @@ -28,7 +28,7 @@ | |||
| 28 | and other provisions required by the GPL. If you do not delete | 28 | and other provisions required by the GPL. If you do not delete |
| 29 | the provisions above, a recipient may use your version of this | 29 | the provisions above, a recipient may use your version of this |
| 30 | file under either the MPL or the GPL. | 30 | file under either the MPL or the GPL. |
| 31 | 31 | ||
| 32 | ======================================================================*/ | 32 | ======================================================================*/ |
| 33 | 33 | ||
| 34 | #include <linux/module.h> | 34 | #include <linux/module.h> |
| @@ -327,13 +327,13 @@ failed: | |||
| 327 | After a card is removed, ide_release() will unregister the net | 327 | After a card is removed, ide_release() will unregister the net |
| 328 | device, and release the PCMCIA configuration. If the device is | 328 | device, and release the PCMCIA configuration. If the device is |
| 329 | still open, this will be postponed until it is closed. | 329 | still open, this will be postponed until it is closed. |
| 330 | 330 | ||
| 331 | ======================================================================*/ | 331 | ======================================================================*/ |
| 332 | 332 | ||
| 333 | void ide_release(struct pcmcia_device *link) | 333 | void ide_release(struct pcmcia_device *link) |
| 334 | { | 334 | { |
| 335 | ide_info_t *info = link->priv; | 335 | ide_info_t *info = link->priv; |
| 336 | 336 | ||
| 337 | DEBUG(0, "ide_release(0x%p)\n", link); | 337 | DEBUG(0, "ide_release(0x%p)\n", link); |
| 338 | 338 | ||
| 339 | if (info->ndev) { | 339 | if (info->ndev) { |
| @@ -353,11 +353,12 @@ void ide_release(struct pcmcia_device *link) | |||
| 353 | stuff to run after an event is received. A CARD_REMOVAL event | 353 | stuff to run after an event is received. A CARD_REMOVAL event |
| 354 | also sets some flags to discourage the ide drivers from | 354 | also sets some flags to discourage the ide drivers from |
| 355 | talking to the ports. | 355 | talking to the ports. |
| 356 | 356 | ||
| 357 | ======================================================================*/ | 357 | ======================================================================*/ |
| 358 | 358 | ||
| 359 | static struct pcmcia_device_id ide_ids[] = { | 359 | static struct pcmcia_device_id ide_ids[] = { |
| 360 | PCMCIA_DEVICE_FUNC_ID(4), | 360 | PCMCIA_DEVICE_FUNC_ID(4), |
| 361 | PCMCIA_DEVICE_MANF_CARD(0x0000, 0x0000), /* Corsair */ | ||
| 361 | PCMCIA_DEVICE_MANF_CARD(0x0007, 0x0000), /* Hitachi */ | 362 | PCMCIA_DEVICE_MANF_CARD(0x0007, 0x0000), /* Hitachi */ |
| 362 | PCMCIA_DEVICE_MANF_CARD(0x000a, 0x0000), /* I-O Data CFA */ | 363 | PCMCIA_DEVICE_MANF_CARD(0x000a, 0x0000), /* I-O Data CFA */ |
| 363 | PCMCIA_DEVICE_MANF_CARD(0x001c, 0x0001), /* Mitsubishi CFA */ | 364 | PCMCIA_DEVICE_MANF_CARD(0x001c, 0x0001), /* Mitsubishi CFA */ |
| @@ -366,7 +367,7 @@ static struct pcmcia_device_id ide_ids[] = { | |||
| 366 | PCMCIA_DEVICE_MANF_CARD(0x0098, 0x0000), /* Toshiba */ | 367 | PCMCIA_DEVICE_MANF_CARD(0x0098, 0x0000), /* Toshiba */ |
| 367 | PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x002d), | 368 | PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x002d), |
| 368 | PCMCIA_DEVICE_MANF_CARD(0x00ce, 0x0000), /* Samsung */ | 369 | PCMCIA_DEVICE_MANF_CARD(0x00ce, 0x0000), /* Samsung */ |
| 369 | PCMCIA_DEVICE_MANF_CARD(0x0319, 0x0000), /* Hitachi */ | 370 | PCMCIA_DEVICE_MANF_CARD(0x0319, 0x0000), /* Hitachi */ |
| 370 | PCMCIA_DEVICE_MANF_CARD(0x2080, 0x0001), | 371 | PCMCIA_DEVICE_MANF_CARD(0x2080, 0x0001), |
| 371 | PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0100), /* Viking CFA */ | 372 | PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0100), /* Viking CFA */ |
| 372 | PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0200), /* Lexar, Viking CFA */ | 373 | PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0200), /* Lexar, Viking CFA */ |
| @@ -384,6 +385,7 @@ static struct pcmcia_device_id ide_ids[] = { | |||
| 384 | PCMCIA_DEVICE_PROD_ID12("FREECOM", "PCCARD-IDE", 0x5714cbf7, 0x48e0ab8e), | 385 | PCMCIA_DEVICE_PROD_ID12("FREECOM", "PCCARD-IDE", 0x5714cbf7, 0x48e0ab8e), |
| 385 | PCMCIA_DEVICE_PROD_ID12("HITACHI", "FLASH", 0xf4f43949, 0x9eb86aae), | 386 | PCMCIA_DEVICE_PROD_ID12("HITACHI", "FLASH", 0xf4f43949, 0x9eb86aae), |
| 386 | PCMCIA_DEVICE_PROD_ID12("HITACHI", "microdrive", 0xf4f43949, 0xa6d76178), | 387 | PCMCIA_DEVICE_PROD_ID12("HITACHI", "microdrive", 0xf4f43949, 0xa6d76178), |
| 388 | PCMCIA_DEVICE_PROD_ID12("Hyperstone", "Model1", 0x3d5b9ef5, 0xca6ab420), | ||
| 387 | PCMCIA_DEVICE_PROD_ID12("IBM", "microdrive", 0xb569a6e5, 0xa6d76178), | 389 | PCMCIA_DEVICE_PROD_ID12("IBM", "microdrive", 0xb569a6e5, 0xa6d76178), |
| 388 | PCMCIA_DEVICE_PROD_ID12("IBM", "IBM17JSSFP20", 0xb569a6e5, 0xf2508753), | 390 | PCMCIA_DEVICE_PROD_ID12("IBM", "IBM17JSSFP20", 0xb569a6e5, 0xf2508753), |
| 389 | PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF8GB", 0x2e6d1829, 0xacbe682e), | 391 | PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF8GB", 0x2e6d1829, 0xacbe682e), |
diff --git a/drivers/ide/mips/au1xxx-ide.c b/drivers/ide/mips/au1xxx-ide.c index 892d08f61dc0..47c035a550e3 100644 --- a/drivers/ide/mips/au1xxx-ide.c +++ b/drivers/ide/mips/au1xxx-ide.c | |||
| @@ -351,11 +351,18 @@ static int auide_dma_setup(ide_drive_t *drive) | |||
| 351 | return 0; | 351 | return 0; |
| 352 | } | 352 | } |
| 353 | 353 | ||
| 354 | static int auide_dma_check(ide_drive_t *drive) | 354 | static u8 auide_mdma_filter(ide_drive_t *drive) |
| 355 | { | 355 | { |
| 356 | u8 speed = ide_max_dma_mode(drive); | 356 | /* |
| 357 | * FIXME: ->white_list and ->black_list are based on completely bogus | ||
| 358 | * ->ide_dma_check implementation which didn't set neither the host | ||
| 359 | * controller timings nor the device for the desired transfer mode. | ||
| 360 | * | ||
| 361 | * They should be either removed or 0x00 MWDMA mask should be | ||
| 362 | * returned for devices on the ->black_list. | ||
| 363 | */ | ||
| 357 | 364 | ||
| 358 | if( dbdma_init_done == 0 ){ | 365 | if (dbdma_init_done == 0) { |
| 359 | auide_hwif.white_list = ide_in_drive_list(drive->id, | 366 | auide_hwif.white_list = ide_in_drive_list(drive->id, |
| 360 | dma_white_list); | 367 | dma_white_list); |
| 361 | auide_hwif.black_list = ide_in_drive_list(drive->id, | 368 | auide_hwif.black_list = ide_in_drive_list(drive->id, |
| @@ -366,22 +373,11 @@ static int auide_dma_check(ide_drive_t *drive) | |||
| 366 | } | 373 | } |
| 367 | 374 | ||
| 368 | /* Is the drive in our DMA black list? */ | 375 | /* Is the drive in our DMA black list? */ |
| 369 | 376 | if (auide_hwif.black_list) | |
| 370 | if ( auide_hwif.black_list ) { | ||
| 371 | drive->using_dma = 0; | ||
| 372 | |||
| 373 | /* Borrowed the warning message from ide-dma.c */ | ||
| 374 | |||
| 375 | printk(KERN_WARNING "%s: Disabling DMA for %s (blacklisted)\n", | 377 | printk(KERN_WARNING "%s: Disabling DMA for %s (blacklisted)\n", |
| 376 | drive->name, drive->id->model); | 378 | drive->name, drive->id->model); |
| 377 | } | ||
| 378 | else | ||
| 379 | drive->using_dma = 1; | ||
| 380 | |||
| 381 | if (drive->autodma && (speed & XFER_MODE) != XFER_PIO) | ||
| 382 | return 0; | ||
| 383 | 379 | ||
| 384 | return -1; | 380 | return drive->hwif->mwdma_mask; |
| 385 | } | 381 | } |
| 386 | 382 | ||
| 387 | static int auide_dma_test_irq(ide_drive_t *drive) | 383 | static int auide_dma_test_irq(ide_drive_t *drive) |
| @@ -692,7 +688,8 @@ static int au_ide_probe(struct device *dev) | |||
| 692 | hwif->dma_off_quietly = &auide_dma_off_quietly; | 688 | hwif->dma_off_quietly = &auide_dma_off_quietly; |
| 693 | hwif->dma_timeout = &auide_dma_timeout; | 689 | hwif->dma_timeout = &auide_dma_timeout; |
| 694 | 690 | ||
| 695 | hwif->ide_dma_check = &auide_dma_check; | 691 | hwif->mdma_filter = &auide_mdma_filter; |
| 692 | |||
| 696 | hwif->dma_exec_cmd = &auide_dma_exec_cmd; | 693 | hwif->dma_exec_cmd = &auide_dma_exec_cmd; |
| 697 | hwif->dma_start = &auide_dma_start; | 694 | hwif->dma_start = &auide_dma_start; |
| 698 | hwif->ide_dma_end = &auide_dma_end; | 695 | hwif->ide_dma_end = &auide_dma_end; |
| @@ -703,19 +700,14 @@ static int au_ide_probe(struct device *dev) | |||
| 703 | hwif->dma_lost_irq = &auide_dma_lost_irq; | 700 | hwif->dma_lost_irq = &auide_dma_lost_irq; |
| 704 | hwif->ide_dma_on = &auide_dma_on; | 701 | hwif->ide_dma_on = &auide_dma_on; |
| 705 | 702 | ||
| 706 | hwif->autodma = 1; | ||
| 707 | hwif->drives[0].autodma = hwif->autodma; | ||
| 708 | hwif->drives[1].autodma = hwif->autodma; | ||
| 709 | hwif->atapi_dma = 1; | 703 | hwif->atapi_dma = 1; |
| 710 | 704 | ||
| 711 | #else /* !CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */ | 705 | #else /* !CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */ |
| 712 | hwif->autodma = 0; | ||
| 713 | hwif->channel = 0; | 706 | hwif->channel = 0; |
| 714 | hwif->hold = 1; | 707 | hwif->hold = 1; |
| 715 | hwif->select_data = 0; /* no chipset-specific code */ | 708 | hwif->select_data = 0; /* no chipset-specific code */ |
| 716 | hwif->config_data = 0; /* no chipset-specific code */ | 709 | hwif->config_data = 0; /* no chipset-specific code */ |
| 717 | 710 | ||
| 718 | hwif->drives[0].autodma = 0; | ||
| 719 | hwif->drives[0].autotune = 1; /* 1=autotune, 2=noautotune, 0=default */ | 711 | hwif->drives[0].autotune = 1; /* 1=autotune, 2=noautotune, 0=default */ |
| 720 | #endif | 712 | #endif |
| 721 | hwif->drives[0].no_io_32bit = 1; | 713 | hwif->drives[0].no_io_32bit = 1; |
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index d6cb2d5143c8..3a4c2c26a77e 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/aec62xx.c Version 0.24 May 24, 2007 | 2 | * linux/drivers/ide/pci/aec62xx.c Version 0.25 Aug 1, 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org> |
| 5 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> |
| @@ -141,17 +141,6 @@ static void aec_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
| 141 | drive->hwif->set_dma_mode(drive, pio + XFER_PIO_0); | 141 | drive->hwif->set_dma_mode(drive, pio + XFER_PIO_0); |
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | static int aec62xx_config_drive_xfer_rate (ide_drive_t *drive) | ||
| 145 | { | ||
| 146 | if (ide_tune_dma(drive)) | ||
| 147 | return 0; | ||
| 148 | |||
| 149 | if (ide_use_fast_pio(drive)) | ||
| 150 | ide_set_max_pio(drive); | ||
| 151 | |||
| 152 | return -1; | ||
| 153 | } | ||
| 154 | |||
| 155 | static void aec62xx_dma_lost_irq (ide_drive_t *drive) | 144 | static void aec62xx_dma_lost_irq (ide_drive_t *drive) |
| 156 | { | 145 | { |
| 157 | switch (HWIF(drive)->pci_dev->device) { | 146 | switch (HWIF(drive)->pci_dev->device) { |
| @@ -207,15 +196,14 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) | |||
| 207 | } else | 196 | } else |
| 208 | hwif->set_dma_mode = &aec6260_set_mode; | 197 | hwif->set_dma_mode = &aec6260_set_mode; |
| 209 | 198 | ||
| 210 | if (!hwif->dma_base) { | 199 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; |
| 211 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | 200 | |
| 201 | if (hwif->dma_base == 0) | ||
| 212 | return; | 202 | return; |
| 213 | } | ||
| 214 | 203 | ||
| 215 | hwif->ultra_mask = hwif->cds->udma_mask; | 204 | hwif->ultra_mask = hwif->cds->udma_mask; |
| 216 | hwif->mwdma_mask = 0x07; | 205 | hwif->mwdma_mask = 0x07; |
| 217 | 206 | ||
| 218 | hwif->ide_dma_check = &aec62xx_config_drive_xfer_rate; | ||
| 219 | hwif->dma_lost_irq = &aec62xx_dma_lost_irq; | 207 | hwif->dma_lost_irq = &aec62xx_dma_lost_irq; |
| 220 | 208 | ||
| 221 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) { | 209 | if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) { |
| @@ -230,10 +218,6 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) | |||
| 230 | 218 | ||
| 231 | hwif->cbl = (ata66 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | 219 | hwif->cbl = (ata66 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; |
| 232 | } | 220 | } |
| 233 | |||
| 234 | if (!noautodma) | ||
| 235 | hwif->autodma = 1; | ||
| 236 | hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; | ||
| 237 | } | 221 | } |
| 238 | 222 | ||
| 239 | static int __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d) | 223 | static int __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d) |
| @@ -325,12 +309,12 @@ static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_devi | |||
| 325 | return d.init_setup(dev, &d); | 309 | return d.init_setup(dev, &d); |
| 326 | } | 310 | } |
| 327 | 311 | ||
| 328 | static struct pci_device_id aec62xx_pci_tbl[] = { | 312 | static const struct pci_device_id aec62xx_pci_tbl[] = { |
| 329 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP850UF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | 313 | { PCI_VDEVICE(ARTOP, PCI_DEVICE_ID_ARTOP_ATP850UF), 0 }, |
| 330 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, | 314 | { PCI_VDEVICE(ARTOP, PCI_DEVICE_ID_ARTOP_ATP860), 1 }, |
| 331 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP860R, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 }, | 315 | { PCI_VDEVICE(ARTOP, PCI_DEVICE_ID_ARTOP_ATP860R), 2 }, |
| 332 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 }, | 316 | { PCI_VDEVICE(ARTOP, PCI_DEVICE_ID_ARTOP_ATP865), 3 }, |
| 333 | { PCI_VENDOR_ID_ARTOP, PCI_DEVICE_ID_ARTOP_ATP865R, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 }, | 317 | { PCI_VDEVICE(ARTOP, PCI_DEVICE_ID_ARTOP_ATP865R), 4 }, |
| 334 | { 0, }, | 318 | { 0, }, |
| 335 | }; | 319 | }; |
| 336 | MODULE_DEVICE_TABLE(pci, aec62xx_pci_tbl); | 320 | MODULE_DEVICE_TABLE(pci, aec62xx_pci_tbl); |
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index 0b83443bf250..31d4e50647d5 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
| @@ -437,26 +437,6 @@ static void ali_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 437 | } | 437 | } |
| 438 | 438 | ||
| 439 | /** | 439 | /** |
| 440 | * ali15x3_config_drive_for_dma - configure for DMA | ||
| 441 | * @drive: drive to configure | ||
| 442 | * | ||
| 443 | * Configure a drive for DMA operation. If DMA is not possible we | ||
| 444 | * drop the drive into PIO mode instead. | ||
| 445 | */ | ||
| 446 | |||
| 447 | static int ali15x3_config_drive_for_dma(ide_drive_t *drive) | ||
| 448 | { | ||
| 449 | drive->init_speed = 0; | ||
| 450 | |||
| 451 | if (ide_tune_dma(drive)) | ||
| 452 | return 0; | ||
| 453 | |||
| 454 | ide_set_max_pio(drive); | ||
| 455 | |||
| 456 | return -1; | ||
| 457 | } | ||
| 458 | |||
| 459 | /** | ||
| 460 | * ali15x3_dma_setup - begin a DMA phase | 440 | * ali15x3_dma_setup - begin a DMA phase |
| 461 | * @drive: target device | 441 | * @drive: target device |
| 462 | * | 442 | * |
| @@ -680,7 +660,6 @@ static u8 __devinit ata66_ali15x3(ide_hwif_t *hwif) | |||
| 680 | 660 | ||
| 681 | static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif) | 661 | static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif) |
| 682 | { | 662 | { |
| 683 | hwif->autodma = 0; | ||
| 684 | hwif->set_pio_mode = &ali_set_pio_mode; | 663 | hwif->set_pio_mode = &ali_set_pio_mode; |
| 685 | hwif->set_dma_mode = &ali_set_dma_mode; | 664 | hwif->set_dma_mode = &ali_set_dma_mode; |
| 686 | hwif->udma_filter = &ali_udma_filter; | 665 | hwif->udma_filter = &ali_udma_filter; |
| @@ -715,17 +694,10 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif) | |||
| 715 | hwif->mwdma_mask = 0x07; | 694 | hwif->mwdma_mask = 0x07; |
| 716 | hwif->swdma_mask = 0x07; | 695 | hwif->swdma_mask = 0x07; |
| 717 | 696 | ||
| 718 | hwif->ide_dma_check = &ali15x3_config_drive_for_dma; | ||
| 719 | hwif->dma_setup = &ali15x3_dma_setup; | 697 | hwif->dma_setup = &ali15x3_dma_setup; |
| 720 | 698 | ||
| 721 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 699 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 722 | hwif->cbl = ata66_ali15x3(hwif); | 700 | hwif->cbl = ata66_ali15x3(hwif); |
| 723 | |||
| 724 | if (!noautodma) | ||
| 725 | hwif->autodma = 1; | ||
| 726 | |||
| 727 | hwif->drives[0].autodma = hwif->autodma; | ||
| 728 | hwif->drives[1].autodma = hwif->autodma; | ||
| 729 | } | 701 | } |
| 730 | 702 | ||
| 731 | /** | 703 | /** |
| @@ -836,9 +808,9 @@ static int __devinit alim15x3_init_one(struct pci_dev *dev, const struct pci_dev | |||
| 836 | } | 808 | } |
| 837 | 809 | ||
| 838 | 810 | ||
| 839 | static struct pci_device_id alim15x3_pci_tbl[] = { | 811 | static const struct pci_device_id alim15x3_pci_tbl[] = { |
| 840 | { PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5229, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | 812 | { PCI_VDEVICE(AL, PCI_DEVICE_ID_AL_M5229), 0 }, |
| 841 | { PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5228, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | 813 | { PCI_VDEVICE(AL, PCI_DEVICE_ID_AL_M5228), 0 }, |
| 842 | { 0, }, | 814 | { 0, }, |
| 843 | }; | 815 | }; |
| 844 | MODULE_DEVICE_TABLE(pci, alim15x3_pci_tbl); | 816 | MODULE_DEVICE_TABLE(pci, alim15x3_pci_tbl); |
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index 6ff4089a2379..3bf3d931eea1 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Version 2.23 | 2 | * Version 2.24 |
| 3 | * | 3 | * |
| 4 | * AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04 | 4 | * AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04 |
| 5 | * IDE driver for Linux. | 5 | * IDE driver for Linux. |
| @@ -28,9 +28,6 @@ | |||
| 28 | 28 | ||
| 29 | #include "ide-timing.h" | 29 | #include "ide-timing.h" |
| 30 | 30 | ||
| 31 | #define DISPLAY_AMD_TIMINGS | ||
| 32 | |||
| 33 | #define AMD_IDE_ENABLE (0x00 + amd_config->base) | ||
| 34 | #define AMD_IDE_CONFIG (0x01 + amd_config->base) | 31 | #define AMD_IDE_CONFIG (0x01 + amd_config->base) |
| 35 | #define AMD_CABLE_DETECT (0x02 + amd_config->base) | 32 | #define AMD_CABLE_DETECT (0x02 + amd_config->base) |
| 36 | #define AMD_DRIVE_TIMING (0x08 + amd_config->base) | 33 | #define AMD_DRIVE_TIMING (0x08 + amd_config->base) |
| @@ -88,118 +85,6 @@ static char *amd_dma[] = { "16", "25", "33", "44", "66", "100", "133" }; | |||
| 88 | static unsigned char amd_cyc2udma[] = { 6, 6, 5, 4, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 7 }; | 85 | static unsigned char amd_cyc2udma[] = { 6, 6, 5, 4, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 7 }; |
| 89 | 86 | ||
| 90 | /* | 87 | /* |
| 91 | * AMD /proc entry. | ||
| 92 | */ | ||
| 93 | |||
| 94 | #ifdef CONFIG_IDE_PROC_FS | ||
| 95 | |||
| 96 | #include <linux/stat.h> | ||
| 97 | #include <linux/proc_fs.h> | ||
| 98 | |||
| 99 | static u8 amd74xx_proc; | ||
| 100 | |||
| 101 | static unsigned char amd_udma2cyc[] = { 4, 6, 8, 10, 3, 2, 1, 15 }; | ||
| 102 | static unsigned long amd_base; | ||
| 103 | static struct pci_dev *bmide_dev; | ||
| 104 | extern int (*amd74xx_display_info)(char *, char **, off_t, int); /* ide-proc.c */ | ||
| 105 | |||
| 106 | #define amd_print(format, arg...) p += sprintf(p, format "\n" , ## arg) | ||
| 107 | #define amd_print_drive(name, format, arg...)\ | ||
| 108 | p += sprintf(p, name); for (i = 0; i < 4; i++) p += sprintf(p, format, ## arg); p += sprintf(p, "\n"); | ||
| 109 | |||
| 110 | static int amd74xx_get_info(char *buffer, char **addr, off_t offset, int count) | ||
| 111 | { | ||
| 112 | int speed[4], cycle[4], setup[4], active[4], recover[4], den[4], | ||
| 113 | uen[4], udma[4], active8b[4], recover8b[4]; | ||
| 114 | struct pci_dev *dev = bmide_dev; | ||
| 115 | unsigned int v, u, i; | ||
| 116 | unsigned short c, w; | ||
| 117 | unsigned char t; | ||
| 118 | int len; | ||
| 119 | char *p = buffer; | ||
| 120 | |||
| 121 | amd_print("----------AMD BusMastering IDE Configuration----------------"); | ||
| 122 | |||
| 123 | amd_print("Driver Version: 2.13"); | ||
| 124 | amd_print("South Bridge: %s", pci_name(bmide_dev)); | ||
| 125 | |||
| 126 | amd_print("Revision: IDE %#x", dev->revision); | ||
| 127 | amd_print("Highest DMA rate: UDMA%s", amd_dma[fls(amd_config->udma_mask) - 1]); | ||
| 128 | |||
| 129 | amd_print("BM-DMA base: %#lx", amd_base); | ||
| 130 | amd_print("PCI clock: %d.%dMHz", amd_clock / 1000, amd_clock / 100 % 10); | ||
| 131 | |||
| 132 | amd_print("-----------------------Primary IDE-------Secondary IDE------"); | ||
| 133 | |||
| 134 | pci_read_config_byte(dev, AMD_IDE_CONFIG, &t); | ||
| 135 | amd_print("Prefetch Buffer: %10s%20s", (t & 0x80) ? "yes" : "no", (t & 0x20) ? "yes" : "no"); | ||
| 136 | amd_print("Post Write Buffer: %10s%20s", (t & 0x40) ? "yes" : "no", (t & 0x10) ? "yes" : "no"); | ||
| 137 | |||
| 138 | pci_read_config_byte(dev, AMD_IDE_ENABLE, &t); | ||
| 139 | amd_print("Enabled: %10s%20s", (t & 0x02) ? "yes" : "no", (t & 0x01) ? "yes" : "no"); | ||
| 140 | |||
| 141 | c = inb(amd_base + 0x02) | (inb(amd_base + 0x0a) << 8); | ||
| 142 | amd_print("Simplex only: %10s%20s", (c & 0x80) ? "yes" : "no", (c & 0x8000) ? "yes" : "no"); | ||
| 143 | |||
| 144 | amd_print("Cable Type: %10s%20s", (amd_80w & 1) ? "80w" : "40w", (amd_80w & 2) ? "80w" : "40w"); | ||
| 145 | |||
| 146 | if (!amd_clock) | ||
| 147 | return p - buffer; | ||
| 148 | |||
| 149 | amd_print("-------------------drive0----drive1----drive2----drive3-----"); | ||
| 150 | |||
| 151 | pci_read_config_byte(dev, AMD_ADDRESS_SETUP, &t); | ||
| 152 | pci_read_config_dword(dev, AMD_DRIVE_TIMING, &v); | ||
| 153 | pci_read_config_word(dev, AMD_8BIT_TIMING, &w); | ||
| 154 | pci_read_config_dword(dev, AMD_UDMA_TIMING, &u); | ||
| 155 | |||
| 156 | for (i = 0; i < 4; i++) { | ||
| 157 | setup[i] = ((t >> ((3 - i) << 1)) & 0x3) + 1; | ||
| 158 | recover8b[i] = ((w >> ((1 - (i >> 1)) << 3)) & 0xf) + 1; | ||
| 159 | active8b[i] = ((w >> (((1 - (i >> 1)) << 3) + 4)) & 0xf) + 1; | ||
| 160 | active[i] = ((v >> (((3 - i) << 3) + 4)) & 0xf) + 1; | ||
| 161 | recover[i] = ((v >> ((3 - i) << 3)) & 0xf) + 1; | ||
| 162 | |||
| 163 | udma[i] = amd_udma2cyc[((u >> ((3 - i) << 3)) & 0x7)]; | ||
| 164 | uen[i] = ((u >> ((3 - i) << 3)) & 0x40) ? 1 : 0; | ||
| 165 | den[i] = (c & ((i & 1) ? 0x40 : 0x20) << ((i & 2) << 2)); | ||
| 166 | |||
| 167 | if (den[i] && uen[i] && udma[i] == 1) { | ||
| 168 | speed[i] = amd_clock * 3; | ||
| 169 | cycle[i] = 666666 / amd_clock; | ||
| 170 | continue; | ||
| 171 | } | ||
| 172 | |||
| 173 | if (den[i] && uen[i] && udma[i] == 15) { | ||
| 174 | speed[i] = amd_clock * 4; | ||
| 175 | cycle[i] = 500000 / amd_clock; | ||
| 176 | continue; | ||
| 177 | } | ||
| 178 | |||
| 179 | speed[i] = 4 * amd_clock / ((den[i] && uen[i]) ? udma[i] : (active[i] + recover[i]) * 2); | ||
| 180 | cycle[i] = 1000000 * ((den[i] && uen[i]) ? udma[i] : (active[i] + recover[i]) * 2) / amd_clock / 2; | ||
| 181 | } | ||
| 182 | |||
| 183 | amd_print_drive("Transfer Mode: ", "%10s", den[i] ? (uen[i] ? "UDMA" : "DMA") : "PIO"); | ||
| 184 | |||
| 185 | amd_print_drive("Address Setup: ", "%8dns", 1000000 * setup[i] / amd_clock); | ||
| 186 | amd_print_drive("Cmd Active: ", "%8dns", 1000000 * active8b[i] / amd_clock); | ||
| 187 | amd_print_drive("Cmd Recovery: ", "%8dns", 1000000 * recover8b[i] / amd_clock); | ||
| 188 | amd_print_drive("Data Active: ", "%8dns", 1000000 * active[i] / amd_clock); | ||
| 189 | amd_print_drive("Data Recovery: ", "%8dns", 1000000 * recover[i] / amd_clock); | ||
| 190 | amd_print_drive("Cycle Time: ", "%8dns", cycle[i]); | ||
| 191 | amd_print_drive("Transfer Rate: ", "%4d.%dMB/s", speed[i] / 1000, speed[i] / 100 % 10); | ||
| 192 | |||
| 193 | /* hoping p - buffer is less than 4K... */ | ||
| 194 | len = (p - buffer) - offset; | ||
| 195 | *addr = buffer + offset; | ||
| 196 | |||
| 197 | return len > count ? count : len; | ||
| 198 | } | ||
| 199 | |||
| 200 | #endif | ||
| 201 | |||
| 202 | /* | ||
| 203 | * amd_set_speed() writes timing values to the chipset registers | 88 | * amd_set_speed() writes timing values to the chipset registers |
| 204 | */ | 89 | */ |
| 205 | 90 | ||
| @@ -264,16 +149,6 @@ static void amd_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
| 264 | amd_set_drive(drive, XFER_PIO_0 + pio); | 149 | amd_set_drive(drive, XFER_PIO_0 + pio); |
| 265 | } | 150 | } |
| 266 | 151 | ||
| 267 | static int amd74xx_ide_dma_check(ide_drive_t *drive) | ||
| 268 | { | ||
| 269 | if (ide_tune_dma(drive)) | ||
| 270 | return 0; | ||
| 271 | |||
| 272 | ide_set_max_pio(drive); | ||
| 273 | |||
| 274 | return -1; | ||
| 275 | } | ||
| 276 | |||
| 277 | /* | 152 | /* |
| 278 | * The initialization callback. Here we determine the IDE chip type | 153 | * The initialization callback. Here we determine the IDE chip type |
| 279 | * and initialize its drive independent registers. | 154 | * and initialize its drive independent registers. |
| @@ -363,19 +238,6 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch | |||
| 363 | amd_chipset->name, pci_name(dev), dev->revision, | 238 | amd_chipset->name, pci_name(dev), dev->revision, |
| 364 | amd_dma[fls(amd_config->udma_mask) - 1]); | 239 | amd_dma[fls(amd_config->udma_mask) - 1]); |
| 365 | 240 | ||
| 366 | /* | ||
| 367 | * Register /proc/ide/amd74xx entry | ||
| 368 | */ | ||
| 369 | |||
| 370 | #if defined(DISPLAY_AMD_TIMINGS) && defined(CONFIG_IDE_PROC_FS) | ||
| 371 | if (!amd74xx_proc) { | ||
| 372 | amd_base = pci_resource_start(dev, 4); | ||
| 373 | bmide_dev = dev; | ||
| 374 | ide_pci_create_host_proc("amd74xx", amd74xx_get_info); | ||
| 375 | amd74xx_proc = 1; | ||
| 376 | } | ||
| 377 | #endif /* DISPLAY_AMD_TIMINGS && CONFIG_IDE_PROC_FS */ | ||
| 378 | |||
| 379 | return dev->irq; | 241 | return dev->irq; |
| 380 | } | 242 | } |
| 381 | 243 | ||
| @@ -386,8 +248,6 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | |||
| 386 | if (hwif->irq == 0) /* 0 is bogus but will do for now */ | 248 | if (hwif->irq == 0) /* 0 is bogus but will do for now */ |
| 387 | hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel); | 249 | hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel); |
| 388 | 250 | ||
| 389 | hwif->autodma = 0; | ||
| 390 | |||
| 391 | hwif->set_pio_mode = &amd_set_pio_mode; | 251 | hwif->set_pio_mode = &amd_set_pio_mode; |
| 392 | hwif->set_dma_mode = &amd_set_drive; | 252 | hwif->set_dma_mode = &amd_set_drive; |
| 393 | 253 | ||
| @@ -395,7 +255,6 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | |||
| 395 | hwif->drives[i].io_32bit = 1; | 255 | hwif->drives[i].io_32bit = 1; |
| 396 | hwif->drives[i].unmask = 1; | 256 | hwif->drives[i].unmask = 1; |
| 397 | hwif->drives[i].autotune = 1; | 257 | hwif->drives[i].autotune = 1; |
| 398 | hwif->drives[i].dn = hwif->channel * 2 + i; | ||
| 399 | } | 258 | } |
| 400 | 259 | ||
| 401 | if (!hwif->dma_base) | 260 | if (!hwif->dma_base) |
| @@ -414,12 +273,6 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) | |||
| 414 | else | 273 | else |
| 415 | hwif->cbl = ATA_CBL_PATA40; | 274 | hwif->cbl = ATA_CBL_PATA40; |
| 416 | } | 275 | } |
| 417 | |||
| 418 | hwif->ide_dma_check = &amd74xx_ide_dma_check; | ||
| 419 | if (!noautodma) | ||
| 420 | hwif->autodma = 1; | ||
| 421 | hwif->drives[0].autodma = hwif->autodma; | ||
| 422 | hwif->drives[1].autodma = hwif->autodma; | ||
| 423 | } | 276 | } |
| 424 | 277 | ||
| 425 | #define DECLARE_AMD_DEV(name_str) \ | 278 | #define DECLARE_AMD_DEV(name_str) \ |
| @@ -489,34 +342,34 @@ static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_ | |||
| 489 | return ide_setup_pci_device(dev, amd_chipset); | 342 | return ide_setup_pci_device(dev, amd_chipset); |
| 490 | } | 343 | } |
| 491 | 344 | ||
| 492 | static struct pci_device_id amd74xx_pci_tbl[] = { | 345 | static const struct pci_device_id amd74xx_pci_tbl[] = { |
| 493 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_COBRA_7401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | 346 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_COBRA_7401), 0 }, |
| 494 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7409, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, | 347 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_VIPER_7409), 1 }, |
| 495 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 }, | 348 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_VIPER_7411), 2 }, |
| 496 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 }, | 349 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_OPUS_7441), 3 }, |
| 497 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 }, | 350 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_8111_IDE), 4 }, |
| 498 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 }, | 351 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE), 5 }, |
| 499 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 }, | 352 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE), 6 }, |
| 500 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 }, | 353 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE), 7 }, |
| 501 | #ifdef CONFIG_BLK_DEV_IDE_SATA | 354 | #ifdef CONFIG_BLK_DEV_IDE_SATA |
| 502 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 }, | 355 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA), 8 }, |
| 503 | #endif | 356 | #endif |
| 504 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 }, | 357 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE), 9 }, |
| 505 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 }, | 358 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE), 10 }, |
| 506 | #ifdef CONFIG_BLK_DEV_IDE_SATA | 359 | #ifdef CONFIG_BLK_DEV_IDE_SATA |
| 507 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 }, | 360 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA), 11 }, |
| 508 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 }, | 361 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2), 12 }, |
| 509 | #endif | 362 | #endif |
| 510 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13 }, | 363 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE), 13 }, |
| 511 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14 }, | 364 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE), 14 }, |
| 512 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15 }, | 365 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE), 15 }, |
| 513 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 }, | 366 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE), 16 }, |
| 514 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 }, | 367 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE), 17 }, |
| 515 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 }, | 368 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE), 18 }, |
| 516 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19 }, | 369 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE), 19 }, |
| 517 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20 }, | 370 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE), 20 }, |
| 518 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 21 }, | 371 | { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE), 21 }, |
| 519 | { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 22 }, | 372 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), 22 }, |
| 520 | { 0, }, | 373 | { 0, }, |
| 521 | }; | 374 | }; |
| 522 | MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); | 375 | MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); |
diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c index 0eb97f021d39..446900da1329 100644 --- a/drivers/ide/pci/atiixp.c +++ b/drivers/ide/pci/atiixp.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/atiixp.c Version 0.02 Jun 16 2007 | 2 | * linux/drivers/ide/pci/atiixp.c Version 0.03 Aug 3 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2003 ATI Inc. <hyu@ati.com> | 4 | * Copyright (C) 2003 ATI Inc. <hyu@ati.com> |
| 5 | * Copyright (C) 2004,2007 Bartlomiej Zolnierkiewicz | 5 | * Copyright (C) 2004,2007 Bartlomiej Zolnierkiewicz |
| @@ -47,43 +47,6 @@ static int save_mdma_mode[4]; | |||
| 47 | 47 | ||
| 48 | static DEFINE_SPINLOCK(atiixp_lock); | 48 | static DEFINE_SPINLOCK(atiixp_lock); |
| 49 | 49 | ||
| 50 | /** | ||
| 51 | * atiixp_dma_2_pio - return the PIO mode matching DMA | ||
| 52 | * @xfer_rate: transfer speed | ||
| 53 | * | ||
| 54 | * Returns the nearest equivalent PIO timing for the PIO or DMA | ||
| 55 | * mode requested by the controller. | ||
| 56 | */ | ||
| 57 | |||
| 58 | static u8 atiixp_dma_2_pio(u8 xfer_rate) { | ||
| 59 | switch(xfer_rate) { | ||
| 60 | case XFER_UDMA_6: | ||
| 61 | case XFER_UDMA_5: | ||
| 62 | case XFER_UDMA_4: | ||
| 63 | case XFER_UDMA_3: | ||
| 64 | case XFER_UDMA_2: | ||
| 65 | case XFER_UDMA_1: | ||
| 66 | case XFER_UDMA_0: | ||
| 67 | case XFER_MW_DMA_2: | ||
| 68 | case XFER_PIO_4: | ||
| 69 | return 4; | ||
| 70 | case XFER_MW_DMA_1: | ||
| 71 | case XFER_PIO_3: | ||
| 72 | return 3; | ||
| 73 | case XFER_SW_DMA_2: | ||
| 74 | case XFER_PIO_2: | ||
| 75 | return 2; | ||
| 76 | case XFER_MW_DMA_0: | ||
| 77 | case XFER_SW_DMA_1: | ||
| 78 | case XFER_SW_DMA_0: | ||
| 79 | case XFER_PIO_1: | ||
| 80 | case XFER_PIO_0: | ||
| 81 | case XFER_PIO_SLOW: | ||
| 82 | default: | ||
| 83 | return 0; | ||
| 84 | } | ||
| 85 | } | ||
| 86 | |||
| 87 | static void atiixp_dma_host_on(ide_drive_t *drive) | 50 | static void atiixp_dma_host_on(ide_drive_t *drive) |
| 88 | { | 51 | { |
| 89 | struct pci_dev *dev = drive->hwif->pci_dev; | 52 | struct pci_dev *dev = drive->hwif->pci_dev; |
| @@ -169,7 +132,9 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 169 | int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8; | 132 | int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8; |
| 170 | u32 tmp32; | 133 | u32 tmp32; |
| 171 | u16 tmp16; | 134 | u16 tmp16; |
| 172 | u8 pio; | 135 | |
| 136 | if (speed < XFER_MW_DMA_0) | ||
| 137 | return; | ||
| 173 | 138 | ||
| 174 | spin_lock_irqsave(&atiixp_lock, flags); | 139 | spin_lock_irqsave(&atiixp_lock, flags); |
| 175 | 140 | ||
| @@ -191,34 +156,6 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 191 | } | 156 | } |
| 192 | 157 | ||
| 193 | spin_unlock_irqrestore(&atiixp_lock, flags); | 158 | spin_unlock_irqrestore(&atiixp_lock, flags); |
| 194 | |||
| 195 | if (speed >= XFER_SW_DMA_0) | ||
| 196 | pio = atiixp_dma_2_pio(speed); | ||
| 197 | else | ||
| 198 | pio = speed - XFER_PIO_0; | ||
| 199 | |||
| 200 | atiixp_set_pio_mode(drive, pio); | ||
| 201 | } | ||
| 202 | |||
| 203 | /** | ||
| 204 | * atiixp_dma_check - set up an IDE device | ||
| 205 | * @drive: IDE drive to configure | ||
| 206 | * | ||
| 207 | * Set up the ATIIXP interface for the best available speed on this | ||
| 208 | * interface, preferring DMA to PIO. | ||
| 209 | */ | ||
| 210 | |||
| 211 | static int atiixp_dma_check(ide_drive_t *drive) | ||
| 212 | { | ||
| 213 | drive->init_speed = 0; | ||
| 214 | |||
| 215 | if (ide_tune_dma(drive)) | ||
| 216 | return 0; | ||
| 217 | |||
| 218 | if (ide_use_fast_pio(drive)) | ||
| 219 | ide_set_max_pio(drive); | ||
| 220 | |||
| 221 | return -1; | ||
| 222 | } | 159 | } |
| 223 | 160 | ||
| 224 | /** | 161 | /** |
| @@ -238,7 +175,6 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) | |||
| 238 | if (!hwif->irq) | 175 | if (!hwif->irq) |
| 239 | hwif->irq = ch ? 15 : 14; | 176 | hwif->irq = ch ? 15 : 14; |
| 240 | 177 | ||
| 241 | hwif->autodma = 0; | ||
| 242 | hwif->set_pio_mode = &atiixp_set_pio_mode; | 178 | hwif->set_pio_mode = &atiixp_set_pio_mode; |
| 243 | hwif->set_dma_mode = &atiixp_set_dma_mode; | 179 | hwif->set_dma_mode = &atiixp_set_dma_mode; |
| 244 | hwif->drives[0].autotune = 1; | 180 | hwif->drives[0].autotune = 1; |
| @@ -249,8 +185,7 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) | |||
| 249 | 185 | ||
| 250 | hwif->atapi_dma = 1; | 186 | hwif->atapi_dma = 1; |
| 251 | hwif->ultra_mask = 0x3f; | 187 | hwif->ultra_mask = 0x3f; |
| 252 | hwif->mwdma_mask = 0x06; | 188 | hwif->mwdma_mask = 0x07; |
| 253 | hwif->swdma_mask = 0x04; | ||
| 254 | 189 | ||
| 255 | pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode); | 190 | pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode); |
| 256 | 191 | ||
| @@ -261,12 +196,6 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) | |||
| 261 | 196 | ||
| 262 | hwif->dma_host_on = &atiixp_dma_host_on; | 197 | hwif->dma_host_on = &atiixp_dma_host_on; |
| 263 | hwif->dma_host_off = &atiixp_dma_host_off; | 198 | hwif->dma_host_off = &atiixp_dma_host_off; |
| 264 | hwif->ide_dma_check = &atiixp_dma_check; | ||
| 265 | if (!noautodma) | ||
| 266 | hwif->autodma = 1; | ||
| 267 | |||
| 268 | hwif->drives[1].autodma = hwif->autodma; | ||
| 269 | hwif->drives[0].autodma = hwif->autodma; | ||
| 270 | } | 199 | } |
| 271 | 200 | ||
| 272 | 201 | ||
| @@ -303,12 +232,12 @@ static int __devinit atiixp_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 303 | return ide_setup_pci_device(dev, &atiixp_pci_info[id->driver_data]); | 232 | return ide_setup_pci_device(dev, &atiixp_pci_info[id->driver_data]); |
| 304 | } | 233 | } |
| 305 | 234 | ||
| 306 | static struct pci_device_id atiixp_pci_tbl[] = { | 235 | static const struct pci_device_id atiixp_pci_tbl[] = { |
| 307 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 236 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP200_IDE), 0 }, |
| 308 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 237 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP300_IDE), 0 }, |
| 309 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 238 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), 0 }, |
| 310 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 239 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), 1 }, |
| 311 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 240 | { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP700_IDE), 0 }, |
| 312 | { 0, }, | 241 | { 0, }, |
| 313 | }; | 242 | }; |
| 314 | MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl); | 243 | MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl); |
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c index d50f15e34b80..f3d3bde8daba 100644 --- a/drivers/ide/pci/cmd64x.c +++ b/drivers/ide/pci/cmd64x.c | |||
| @@ -330,17 +330,6 @@ static void cmd64x_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 330 | (void) pci_write_config_byte(dev, pciU, regU); | 330 | (void) pci_write_config_byte(dev, pciU, regU); |
| 331 | } | 331 | } |
| 332 | 332 | ||
| 333 | static int cmd64x_config_drive_for_dma (ide_drive_t *drive) | ||
| 334 | { | ||
| 335 | if (ide_tune_dma(drive)) | ||
| 336 | return 0; | ||
| 337 | |||
| 338 | if (ide_use_fast_pio(drive)) | ||
| 339 | ide_set_max_pio(drive); | ||
| 340 | |||
| 341 | return -1; | ||
| 342 | } | ||
| 343 | |||
| 344 | static int cmd648_ide_dma_end (ide_drive_t *drive) | 333 | static int cmd648_ide_dma_end (ide_drive_t *drive) |
| 345 | { | 334 | { |
| 346 | ide_hwif_t *hwif = HWIF(drive); | 335 | ide_hwif_t *hwif = HWIF(drive); |
| @@ -547,8 +536,6 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) | |||
| 547 | if (dev->device == PCI_DEVICE_ID_CMD_646 && rev < 5) | 536 | if (dev->device == PCI_DEVICE_ID_CMD_646 && rev < 5) |
| 548 | hwif->ultra_mask = 0x00; | 537 | hwif->ultra_mask = 0x00; |
| 549 | 538 | ||
| 550 | hwif->ide_dma_check = &cmd64x_config_drive_for_dma; | ||
| 551 | |||
| 552 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 539 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 553 | hwif->cbl = ata66_cmd64x(hwif); | 540 | hwif->cbl = ata66_cmd64x(hwif); |
| 554 | 541 | ||
| @@ -572,10 +559,6 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) | |||
| 572 | hwif->ide_dma_test_irq = &cmd64x_ide_dma_test_irq; | 559 | hwif->ide_dma_test_irq = &cmd64x_ide_dma_test_irq; |
| 573 | break; | 560 | break; |
| 574 | } | 561 | } |
| 575 | |||
| 576 | if (!noautodma) | ||
| 577 | hwif->autodma = 1; | ||
| 578 | hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; | ||
| 579 | } | 562 | } |
| 580 | 563 | ||
| 581 | static int __devinit init_setup_cmd64x(struct pci_dev *dev, ide_pci_device_t *d) | 564 | static int __devinit init_setup_cmd64x(struct pci_dev *dev, ide_pci_device_t *d) |
| @@ -654,11 +637,11 @@ static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 654 | return d.init_setup(dev, &d); | 637 | return d.init_setup(dev, &d); |
| 655 | } | 638 | } |
| 656 | 639 | ||
| 657 | static struct pci_device_id cmd64x_pci_tbl[] = { | 640 | static const struct pci_device_id cmd64x_pci_tbl[] = { |
| 658 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_643, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 641 | { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_643), 0 }, |
| 659 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_646, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 642 | { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_646), 1 }, |
| 660 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, | 643 | { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_648), 2 }, |
| 661 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_649, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, | 644 | { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_649), 3 }, |
| 662 | { 0, }, | 645 | { 0, }, |
| 663 | }; | 646 | }; |
| 664 | MODULE_DEVICE_TABLE(pci, cmd64x_pci_tbl); | 647 | MODULE_DEVICE_TABLE(pci, cmd64x_pci_tbl); |
diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c index fbce90048aec..a8bf4940ca9c 100644 --- a/drivers/ide/pci/cs5520.c +++ b/drivers/ide/pci/cs5520.c | |||
| @@ -105,15 +105,6 @@ static void cs5520_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 105 | cs5520_set_pio_mode(drive, 0); | 105 | cs5520_set_pio_mode(drive, 0); |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | static int cs5520_config_drive_xfer_rate(ide_drive_t *drive) | ||
| 109 | { | ||
| 110 | /* Tune the drive for PIO modes up to PIO 4 */ | ||
| 111 | ide_set_max_pio(drive); | ||
| 112 | |||
| 113 | /* Then tell the core to use DMA operations */ | ||
| 114 | return 0; | ||
| 115 | } | ||
| 116 | |||
| 117 | /* | 108 | /* |
| 118 | * We provide a callback for our nonstandard DMA location | 109 | * We provide a callback for our nonstandard DMA location |
| 119 | */ | 110 | */ |
| @@ -148,7 +139,6 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif) | |||
| 148 | return; | 139 | return; |
| 149 | } | 140 | } |
| 150 | 141 | ||
| 151 | hwif->ide_dma_check = &cs5520_config_drive_xfer_rate; | ||
| 152 | hwif->ide_dma_on = &cs5520_dma_on; | 142 | hwif->ide_dma_on = &cs5520_dma_on; |
| 153 | 143 | ||
| 154 | /* ATAPI is harder so leave it for now */ | 144 | /* ATAPI is harder so leave it for now */ |
| @@ -156,12 +146,6 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif) | |||
| 156 | hwif->ultra_mask = 0; | 146 | hwif->ultra_mask = 0; |
| 157 | hwif->swdma_mask = 0; | 147 | hwif->swdma_mask = 0; |
| 158 | hwif->mwdma_mask = 0; | 148 | hwif->mwdma_mask = 0; |
| 159 | |||
| 160 | if (!noautodma) | ||
| 161 | hwif->autodma = 1; | ||
| 162 | |||
| 163 | hwif->drives[0].autodma = hwif->autodma; | ||
| 164 | hwif->drives[1].autodma = hwif->autodma; | ||
| 165 | } | 149 | } |
| 166 | 150 | ||
| 167 | #define DECLARE_CS_DEV(name_str) \ | 151 | #define DECLARE_CS_DEV(name_str) \ |
| @@ -171,7 +155,8 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif) | |||
| 171 | .init_hwif = init_hwif_cs5520, \ | 155 | .init_hwif = init_hwif_cs5520, \ |
| 172 | .autodma = AUTODMA, \ | 156 | .autodma = AUTODMA, \ |
| 173 | .bootable = ON_BOARD, \ | 157 | .bootable = ON_BOARD, \ |
| 174 | .host_flags = IDE_HFLAG_ISA_PORTS, \ | 158 | .host_flags = IDE_HFLAG_ISA_PORTS | \ |
| 159 | IDE_HFLAG_VDMA, \ | ||
| 175 | .pio_mask = ATA_PIO4, \ | 160 | .pio_mask = ATA_PIO4, \ |
| 176 | } | 161 | } |
| 177 | 162 | ||
| @@ -233,9 +218,9 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 233 | return 0; | 218 | return 0; |
| 234 | } | 219 | } |
| 235 | 220 | ||
| 236 | static struct pci_device_id cs5520_pci_tbl[] = { | 221 | static const struct pci_device_id cs5520_pci_tbl[] = { |
| 237 | { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5510, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 222 | { PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5510), 0 }, |
| 238 | { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 223 | { PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5520), 1 }, |
| 239 | { 0, }, | 224 | { 0, }, |
| 240 | }; | 225 | }; |
| 241 | MODULE_DEVICE_TABLE(pci, cs5520_pci_tbl); | 226 | MODULE_DEVICE_TABLE(pci, cs5520_pci_tbl); |
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c index e4121577cef0..0d23b8aabe9c 100644 --- a/drivers/ide/pci/cs5530.c +++ b/drivers/ide/pci/cs5530.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/cs5530.c Version 0.74 Jul 28 2007 | 2 | * linux/drivers/ide/pci/cs5530.c Version 0.76 Aug 3 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2000 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 2000 Andre Hedrick <andre@linux-ide.org> |
| 5 | * Copyright (C) 2000 Mark Lord <mlord@pobox.com> | 5 | * Copyright (C) 2000 Mark Lord <mlord@pobox.com> |
| @@ -104,22 +104,6 @@ out: | |||
| 104 | return mask; | 104 | return mask; |
| 105 | } | 105 | } |
| 106 | 106 | ||
| 107 | /** | ||
| 108 | * cs5530_config_dma - set DMA/UDMA mode | ||
| 109 | * @drive: drive to tune | ||
| 110 | * | ||
| 111 | * cs5530_config_dma() handles setting of DMA/UDMA mode | ||
| 112 | * for both the chipset and drive. | ||
| 113 | */ | ||
| 114 | |||
| 115 | static int cs5530_config_dma(ide_drive_t *drive) | ||
| 116 | { | ||
| 117 | if (ide_tune_dma(drive)) | ||
| 118 | return 0; | ||
| 119 | |||
| 120 | return 1; | ||
| 121 | } | ||
| 122 | |||
| 123 | static void cs5530_set_dma_mode(ide_drive_t *drive, const u8 mode) | 107 | static void cs5530_set_dma_mode(ide_drive_t *drive, const u8 mode) |
| 124 | { | 108 | { |
| 125 | unsigned long basereg; | 109 | unsigned long basereg; |
| @@ -260,7 +244,6 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif) | |||
| 260 | { | 244 | { |
| 261 | unsigned long basereg; | 245 | unsigned long basereg; |
| 262 | u32 d0_timings; | 246 | u32 d0_timings; |
| 263 | hwif->autodma = 0; | ||
| 264 | 247 | ||
| 265 | if (hwif->mate) | 248 | if (hwif->mate) |
| 266 | hwif->serialized = hwif->mate->serialized = 1; | 249 | hwif->serialized = hwif->mate->serialized = 1; |
| @@ -270,20 +253,13 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif) | |||
| 270 | 253 | ||
| 271 | basereg = CS5530_BASEREG(hwif); | 254 | basereg = CS5530_BASEREG(hwif); |
| 272 | d0_timings = inl(basereg + 0); | 255 | d0_timings = inl(basereg + 0); |
| 273 | if (CS5530_BAD_PIO(d0_timings)) { | 256 | if (CS5530_BAD_PIO(d0_timings)) |
| 274 | /* PIO timings not initialized? */ | ||
| 275 | outl(cs5530_pio_timings[(d0_timings >> 31) & 1][0], basereg + 0); | 257 | outl(cs5530_pio_timings[(d0_timings >> 31) & 1][0], basereg + 0); |
| 276 | if (!hwif->drives[0].autotune) | 258 | if (CS5530_BAD_PIO(inl(basereg + 8))) |
| 277 | hwif->drives[0].autotune = 1; | ||
| 278 | /* needs autotuning later */ | ||
| 279 | } | ||
| 280 | if (CS5530_BAD_PIO(inl(basereg + 8))) { | ||
| 281 | /* PIO timings not initialized? */ | ||
| 282 | outl(cs5530_pio_timings[(d0_timings >> 31) & 1][0], basereg + 8); | 259 | outl(cs5530_pio_timings[(d0_timings >> 31) & 1][0], basereg + 8); |
| 283 | if (!hwif->drives[1].autotune) | 260 | |
| 284 | hwif->drives[1].autotune = 1; | 261 | hwif->drives[0].autotune = 1; |
| 285 | /* needs autotuning later */ | 262 | hwif->drives[1].autotune = 1; |
| 286 | } | ||
| 287 | 263 | ||
| 288 | if (hwif->dma_base == 0) | 264 | if (hwif->dma_base == 0) |
| 289 | return; | 265 | return; |
| @@ -293,11 +269,6 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif) | |||
| 293 | hwif->mwdma_mask = 0x07; | 269 | hwif->mwdma_mask = 0x07; |
| 294 | 270 | ||
| 295 | hwif->udma_filter = cs5530_udma_filter; | 271 | hwif->udma_filter = cs5530_udma_filter; |
| 296 | hwif->ide_dma_check = &cs5530_config_dma; | ||
| 297 | if (!noautodma) | ||
| 298 | hwif->autodma = 1; | ||
| 299 | hwif->drives[0].autodma = hwif->autodma; | ||
| 300 | hwif->drives[1].autodma = hwif->autodma; | ||
| 301 | } | 272 | } |
| 302 | 273 | ||
| 303 | static ide_pci_device_t cs5530_chipset __devinitdata = { | 274 | static ide_pci_device_t cs5530_chipset __devinitdata = { |
| @@ -315,8 +286,8 @@ static int __devinit cs5530_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 315 | return ide_setup_pci_device(dev, &cs5530_chipset); | 286 | return ide_setup_pci_device(dev, &cs5530_chipset); |
| 316 | } | 287 | } |
| 317 | 288 | ||
| 318 | static struct pci_device_id cs5530_pci_tbl[] = { | 289 | static const struct pci_device_id cs5530_pci_tbl[] = { |
| 319 | { PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 290 | { PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE), 0 }, |
| 320 | { 0, }, | 291 | { 0, }, |
| 321 | }; | 292 | }; |
| 322 | MODULE_DEVICE_TABLE(pci, cs5530_pci_tbl); | 293 | MODULE_DEVICE_TABLE(pci, cs5530_pci_tbl); |
diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c index 257865778f92..e4891a16afef 100644 --- a/drivers/ide/pci/cs5535.c +++ b/drivers/ide/pci/cs5535.c | |||
| @@ -157,19 +157,6 @@ static void cs5535_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
| 157 | cs5535_set_speed(drive, XFER_PIO_0 + pio); | 157 | cs5535_set_speed(drive, XFER_PIO_0 + pio); |
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | static int cs5535_dma_check(ide_drive_t *drive) | ||
| 161 | { | ||
| 162 | drive->init_speed = 0; | ||
| 163 | |||
| 164 | if (ide_tune_dma(drive)) | ||
| 165 | return 0; | ||
| 166 | |||
| 167 | if (ide_use_fast_pio(drive)) | ||
| 168 | ide_set_max_pio(drive); | ||
| 169 | |||
| 170 | return -1; | ||
| 171 | } | ||
| 172 | |||
| 173 | static u8 __devinit cs5535_cable_detect(struct pci_dev *dev) | 160 | static u8 __devinit cs5535_cable_detect(struct pci_dev *dev) |
| 174 | { | 161 | { |
| 175 | u8 bit; | 162 | u8 bit; |
| @@ -190,8 +177,6 @@ static u8 __devinit cs5535_cable_detect(struct pci_dev *dev) | |||
| 190 | */ | 177 | */ |
| 191 | static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) | 178 | static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) |
| 192 | { | 179 | { |
| 193 | hwif->autodma = 0; | ||
| 194 | |||
| 195 | hwif->set_pio_mode = &cs5535_set_pio_mode; | 180 | hwif->set_pio_mode = &cs5535_set_pio_mode; |
| 196 | hwif->set_dma_mode = &cs5535_set_dma_mode; | 181 | hwif->set_dma_mode = &cs5535_set_dma_mode; |
| 197 | 182 | ||
| @@ -200,18 +185,11 @@ static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) | |||
| 200 | if (hwif->dma_base == 0) | 185 | if (hwif->dma_base == 0) |
| 201 | return; | 186 | return; |
| 202 | 187 | ||
| 203 | hwif->ide_dma_check = &cs5535_dma_check; | ||
| 204 | |||
| 205 | hwif->atapi_dma = 1; | 188 | hwif->atapi_dma = 1; |
| 206 | hwif->ultra_mask = 0x1F; | 189 | hwif->ultra_mask = 0x1F; |
| 207 | hwif->mwdma_mask = 0x07; | 190 | hwif->mwdma_mask = 0x07; |
| 208 | 191 | ||
| 209 | hwif->cbl = cs5535_cable_detect(hwif->pci_dev); | 192 | hwif->cbl = cs5535_cable_detect(hwif->pci_dev); |
| 210 | |||
| 211 | if (!noautodma) | ||
| 212 | hwif->autodma = 1; | ||
| 213 | |||
| 214 | hwif->drives[1].autodma = hwif->drives[0].autodma = hwif->autodma; | ||
| 215 | } | 193 | } |
| 216 | 194 | ||
| 217 | static ide_pci_device_t cs5535_chipset __devinitdata = { | 195 | static ide_pci_device_t cs5535_chipset __devinitdata = { |
| @@ -229,10 +207,8 @@ static int __devinit cs5535_init_one(struct pci_dev *dev, | |||
| 229 | return ide_setup_pci_device(dev, &cs5535_chipset); | 207 | return ide_setup_pci_device(dev, &cs5535_chipset); |
| 230 | } | 208 | } |
| 231 | 209 | ||
| 232 | static struct pci_device_id cs5535_pci_tbl[] = | 210 | static const struct pci_device_id cs5535_pci_tbl[] = { |
| 233 | { | 211 | { PCI_VDEVICE(NS, PCI_DEVICE_ID_NS_CS5535_IDE), 0 }, |
| 234 | { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_IDE, PCI_ANY_ID, | ||
| 235 | PCI_ANY_ID, 0, 0, 0}, | ||
| 236 | { 0, }, | 212 | { 0, }, |
| 237 | }; | 213 | }; |
| 238 | 214 | ||
diff --git a/drivers/ide/pci/cy82c693.c b/drivers/ide/pci/cy82c693.c index dc278025d318..c498ecfd7fcb 100644 --- a/drivers/ide/pci/cy82c693.c +++ b/drivers/ide/pci/cy82c693.c | |||
| @@ -428,8 +428,6 @@ static unsigned int __devinit init_chipset_cy82c693(struct pci_dev *dev, const c | |||
| 428 | */ | 428 | */ |
| 429 | static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif) | 429 | static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif) |
| 430 | { | 430 | { |
| 431 | hwif->autodma = 0; | ||
| 432 | |||
| 433 | hwif->chipset = ide_cy82c693; | 431 | hwif->chipset = ide_cy82c693; |
| 434 | hwif->set_pio_mode = &cy82c693_set_pio_mode; | 432 | hwif->set_pio_mode = &cy82c693_set_pio_mode; |
| 435 | 433 | ||
| @@ -444,10 +442,6 @@ static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif) | |||
| 444 | hwif->swdma_mask = 0x04; | 442 | hwif->swdma_mask = 0x04; |
| 445 | 443 | ||
| 446 | hwif->ide_dma_on = &cy82c693_ide_dma_on; | 444 | hwif->ide_dma_on = &cy82c693_ide_dma_on; |
| 447 | if (!noautodma) | ||
| 448 | hwif->autodma = 1; | ||
| 449 | hwif->drives[0].autodma = hwif->autodma; | ||
| 450 | hwif->drives[1].autodma = hwif->autodma; | ||
| 451 | } | 445 | } |
| 452 | 446 | ||
| 453 | static __devinitdata ide_hwif_t *primary; | 447 | static __devinitdata ide_hwif_t *primary; |
| @@ -469,7 +463,7 @@ static ide_pci_device_t cy82c693_chipset __devinitdata = { | |||
| 469 | .init_hwif = init_hwif_cy82c693, | 463 | .init_hwif = init_hwif_cy82c693, |
| 470 | .autodma = AUTODMA, | 464 | .autodma = AUTODMA, |
| 471 | .bootable = ON_BOARD, | 465 | .bootable = ON_BOARD, |
| 472 | .host_flags = IDE_HFLAG_SINGLE, | 466 | .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_TRUST_BIOS_FOR_DMA, |
| 473 | .pio_mask = ATA_PIO4, | 467 | .pio_mask = ATA_PIO4, |
| 474 | }; | 468 | }; |
| 475 | 469 | ||
| @@ -489,8 +483,8 @@ static int __devinit cy82c693_init_one(struct pci_dev *dev, const struct pci_dev | |||
| 489 | return ret; | 483 | return ret; |
| 490 | } | 484 | } |
| 491 | 485 | ||
| 492 | static struct pci_device_id cy82c693_pci_tbl[] = { | 486 | static const struct pci_device_id cy82c693_pci_tbl[] = { |
| 493 | { PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 487 | { PCI_VDEVICE(CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693), 0 }, |
| 494 | { 0, }, | 488 | { 0, }, |
| 495 | }; | 489 | }; |
| 496 | MODULE_DEVICE_TABLE(pci, cy82c693_pci_tbl); | 490 | MODULE_DEVICE_TABLE(pci, cy82c693_pci_tbl); |
diff --git a/drivers/ide/pci/generic.c b/drivers/ide/pci/generic.c index 48caa468b762..cce6311b02df 100644 --- a/drivers/ide/pci/generic.c +++ b/drivers/ide/pci/generic.c | |||
| @@ -73,11 +73,6 @@ static void __devinit init_hwif_generic (ide_hwif_t *hwif) | |||
| 73 | hwif->ultra_mask = 0x7f; | 73 | hwif->ultra_mask = 0x7f; |
| 74 | hwif->mwdma_mask = 0x07; | 74 | hwif->mwdma_mask = 0x07; |
| 75 | hwif->swdma_mask = 0x07; | 75 | hwif->swdma_mask = 0x07; |
| 76 | |||
| 77 | if (!noautodma) | ||
| 78 | hwif->autodma = 1; | ||
| 79 | hwif->drives[0].autodma = hwif->autodma; | ||
| 80 | hwif->drives[1].autodma = hwif->autodma; | ||
| 81 | } | 76 | } |
| 82 | 77 | ||
| 83 | #if 0 | 78 | #if 0 |
| @@ -97,77 +92,92 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = { | |||
| 97 | .init_hwif = init_hwif_generic, | 92 | .init_hwif = init_hwif_generic, |
| 98 | .autodma = AUTODMA, | 93 | .autodma = AUTODMA, |
| 99 | .bootable = ON_BOARD, | 94 | .bootable = ON_BOARD, |
| 95 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 100 | },{ /* 1 */ | 96 | },{ /* 1 */ |
| 101 | .name = "NS87410", | 97 | .name = "NS87410", |
| 102 | .init_hwif = init_hwif_generic, | 98 | .init_hwif = init_hwif_generic, |
| 103 | .autodma = AUTODMA, | 99 | .autodma = AUTODMA, |
| 104 | .enablebits = {{0x43,0x08,0x08}, {0x47,0x08,0x08}}, | 100 | .enablebits = {{0x43,0x08,0x08}, {0x47,0x08,0x08}}, |
| 105 | .bootable = ON_BOARD, | 101 | .bootable = ON_BOARD, |
| 102 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 106 | },{ /* 2 */ | 103 | },{ /* 2 */ |
| 107 | .name = "SAMURAI", | 104 | .name = "SAMURAI", |
| 108 | .init_hwif = init_hwif_generic, | 105 | .init_hwif = init_hwif_generic, |
| 109 | .autodma = AUTODMA, | 106 | .autodma = AUTODMA, |
| 110 | .bootable = ON_BOARD, | 107 | .bootable = ON_BOARD, |
| 108 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 111 | },{ /* 3 */ | 109 | },{ /* 3 */ |
| 112 | .name = "HT6565", | 110 | .name = "HT6565", |
| 113 | .init_hwif = init_hwif_generic, | 111 | .init_hwif = init_hwif_generic, |
| 114 | .autodma = AUTODMA, | 112 | .autodma = AUTODMA, |
| 115 | .bootable = ON_BOARD, | 113 | .bootable = ON_BOARD, |
| 114 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 116 | },{ /* 4 */ | 115 | },{ /* 4 */ |
| 117 | .name = "UM8673F", | 116 | .name = "UM8673F", |
| 118 | .init_hwif = init_hwif_generic, | 117 | .init_hwif = init_hwif_generic, |
| 119 | .autodma = NODMA, | 118 | .autodma = NODMA, |
| 120 | .bootable = ON_BOARD, | 119 | .bootable = ON_BOARD, |
| 120 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 121 | },{ /* 5 */ | 121 | },{ /* 5 */ |
| 122 | .name = "UM8886A", | 122 | .name = "UM8886A", |
| 123 | .init_hwif = init_hwif_generic, | 123 | .init_hwif = init_hwif_generic, |
| 124 | .autodma = NODMA, | 124 | .autodma = NODMA, |
| 125 | .bootable = ON_BOARD, | 125 | .bootable = ON_BOARD, |
| 126 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 126 | },{ /* 6 */ | 127 | },{ /* 6 */ |
| 127 | .name = "UM8886BF", | 128 | .name = "UM8886BF", |
| 128 | .init_hwif = init_hwif_generic, | 129 | .init_hwif = init_hwif_generic, |
| 129 | .autodma = NODMA, | 130 | .autodma = NODMA, |
| 130 | .bootable = ON_BOARD, | 131 | .bootable = ON_BOARD, |
| 132 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 131 | },{ /* 7 */ | 133 | },{ /* 7 */ |
| 132 | .name = "HINT_IDE", | 134 | .name = "HINT_IDE", |
| 133 | .init_hwif = init_hwif_generic, | 135 | .init_hwif = init_hwif_generic, |
| 134 | .autodma = AUTODMA, | 136 | .autodma = AUTODMA, |
| 135 | .bootable = ON_BOARD, | 137 | .bootable = ON_BOARD, |
| 138 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 136 | },{ /* 8 */ | 139 | },{ /* 8 */ |
| 137 | .name = "VIA_IDE", | 140 | .name = "VIA_IDE", |
| 138 | .init_hwif = init_hwif_generic, | 141 | .init_hwif = init_hwif_generic, |
| 139 | .autodma = NOAUTODMA, | 142 | .autodma = NOAUTODMA, |
| 140 | .bootable = ON_BOARD, | 143 | .bootable = ON_BOARD, |
| 144 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 141 | },{ /* 9 */ | 145 | },{ /* 9 */ |
| 142 | .name = "OPTI621V", | 146 | .name = "OPTI621V", |
| 143 | .init_hwif = init_hwif_generic, | 147 | .init_hwif = init_hwif_generic, |
| 144 | .autodma = NOAUTODMA, | 148 | .autodma = NOAUTODMA, |
| 145 | .bootable = ON_BOARD, | 149 | .bootable = ON_BOARD, |
| 150 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 146 | },{ /* 10 */ | 151 | },{ /* 10 */ |
| 147 | .name = "VIA8237SATA", | 152 | .name = "VIA8237SATA", |
| 148 | .init_hwif = init_hwif_generic, | 153 | .init_hwif = init_hwif_generic, |
| 149 | .autodma = AUTODMA, | 154 | .autodma = AUTODMA, |
| 150 | .bootable = OFF_BOARD, | 155 | .bootable = OFF_BOARD, |
| 156 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 151 | },{ /* 11 */ | 157 | },{ /* 11 */ |
| 152 | .name = "Piccolo0102", | 158 | .name = "Piccolo0102", |
| 153 | .init_hwif = init_hwif_generic, | 159 | .init_hwif = init_hwif_generic, |
| 154 | .autodma = NOAUTODMA, | 160 | .autodma = NOAUTODMA, |
| 155 | .bootable = ON_BOARD, | 161 | .bootable = ON_BOARD, |
| 162 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 156 | },{ /* 12 */ | 163 | },{ /* 12 */ |
| 157 | .name = "Piccolo0103", | 164 | .name = "Piccolo0103", |
| 158 | .init_hwif = init_hwif_generic, | 165 | .init_hwif = init_hwif_generic, |
| 159 | .autodma = NOAUTODMA, | 166 | .autodma = NOAUTODMA, |
| 160 | .bootable = ON_BOARD, | 167 | .bootable = ON_BOARD, |
| 168 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 161 | },{ /* 13 */ | 169 | },{ /* 13 */ |
| 162 | .name = "Piccolo0105", | 170 | .name = "Piccolo0105", |
| 163 | .init_hwif = init_hwif_generic, | 171 | .init_hwif = init_hwif_generic, |
| 164 | .autodma = NOAUTODMA, | 172 | .autodma = NOAUTODMA, |
| 165 | .bootable = ON_BOARD, | 173 | .bootable = ON_BOARD, |
| 174 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 166 | },{ /* 14 */ | 175 | },{ /* 14 */ |
| 167 | .name = "Revolution", | 176 | .name = "Revolution", |
| 168 | .init_hwif = init_hwif_generic, | 177 | .init_hwif = init_hwif_generic, |
| 169 | .autodma = AUTODMA, | 178 | .autodma = AUTODMA, |
| 170 | .bootable = OFF_BOARD, | 179 | .bootable = OFF_BOARD, |
| 180 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 171 | } | 181 | } |
| 172 | }; | 182 | }; |
| 173 | 183 | ||
| @@ -226,25 +236,28 @@ out: | |||
| 226 | return ret; | 236 | return ret; |
| 227 | } | 237 | } |
| 228 | 238 | ||
| 229 | static struct pci_device_id generic_pci_tbl[] = { | 239 | static const struct pci_device_id generic_pci_tbl[] = { |
| 230 | { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 240 | { PCI_VDEVICE(NS, PCI_DEVICE_ID_NS_87410), 1 }, |
| 231 | { PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_SAMURAI_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, | 241 | { PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_SAMURAI_IDE), 2 }, |
| 232 | { PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_6565, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, | 242 | { PCI_VDEVICE(HOLTEK, PCI_DEVICE_ID_HOLTEK_6565), 3 }, |
| 233 | { PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8673F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, | 243 | { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8673F), 4 }, |
| 234 | { PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5}, | 244 | { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8886A), 5 }, |
| 235 | { PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886BF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6}, | 245 | { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8886BF), 6 }, |
| 236 | { PCI_VENDOR_ID_HINT, PCI_DEVICE_ID_HINT_VXPROII_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7}, | 246 | { PCI_VDEVICE(HINT, PCI_DEVICE_ID_HINT_VXPROII_IDE), 7 }, |
| 237 | { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C561, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8}, | 247 | { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C561), 8 }, |
| 238 | { PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C558, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9}, | 248 | { PCI_VDEVICE(OPTI, PCI_DEVICE_ID_OPTI_82C558), 9 }, |
| 239 | #ifdef CONFIG_BLK_DEV_IDE_SATA | 249 | #ifdef CONFIG_BLK_DEV_IDE_SATA |
| 240 | { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10}, | 250 | { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_8237_SATA), 10 }, |
| 241 | #endif | 251 | #endif |
| 242 | { PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11}, | 252 | { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO), 11 }, |
| 243 | { PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12}, | 253 | { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), 12 }, |
| 244 | { PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13}, | 254 | { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO_2), 13 }, |
| 245 | { PCI_VENDOR_ID_NETCELL,PCI_DEVICE_ID_REVOLUTION, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14}, | 255 | { PCI_VDEVICE(NETCELL, PCI_DEVICE_ID_REVOLUTION), 14 }, |
| 246 | /* Must come last. If you add entries adjust this table appropriately and the init_one code */ | 256 | /* |
| 247 | { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 0}, | 257 | * Must come last. If you add entries adjust |
| 258 | * this table and generic_chipsets[] appropriately. | ||
| 259 | */ | ||
| 260 | { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 0 }, | ||
| 248 | { 0, }, | 261 | { 0, }, |
| 249 | }; | 262 | }; |
| 250 | MODULE_DEVICE_TABLE(pci, generic_pci_tbl); | 263 | MODULE_DEVICE_TABLE(pci, generic_pci_tbl); |
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c index 218852aaf22a..44ac0e2f7a09 100644 --- a/drivers/ide/pci/hpt34x.c +++ b/drivers/ide/pci/hpt34x.c | |||
| @@ -80,19 +80,6 @@ static void hpt34x_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
| 80 | hpt34x_set_mode(drive, XFER_PIO_0 + pio); | 80 | hpt34x_set_mode(drive, XFER_PIO_0 + pio); |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | static int hpt34x_config_drive_xfer_rate (ide_drive_t *drive) | ||
| 84 | { | ||
| 85 | drive->init_speed = 0; | ||
| 86 | |||
| 87 | if (ide_tune_dma(drive)) | ||
| 88 | return -1; | ||
| 89 | |||
| 90 | if (ide_use_fast_pio(drive)) | ||
| 91 | ide_set_max_pio(drive); | ||
| 92 | |||
| 93 | return -1; | ||
| 94 | } | ||
| 95 | |||
| 96 | /* | 83 | /* |
| 97 | * If the BIOS does not set the IO base addaress to XX00, 343 will fail. | 84 | * If the BIOS does not set the IO base addaress to XX00, 343 will fail. |
| 98 | */ | 85 | */ |
| @@ -140,8 +127,6 @@ static void __devinit init_hwif_hpt34x(ide_hwif_t *hwif) | |||
| 140 | { | 127 | { |
| 141 | u16 pcicmd = 0; | 128 | u16 pcicmd = 0; |
| 142 | 129 | ||
| 143 | hwif->autodma = 0; | ||
| 144 | |||
| 145 | hwif->set_pio_mode = &hpt34x_set_pio_mode; | 130 | hwif->set_pio_mode = &hpt34x_set_pio_mode; |
| 146 | hwif->set_dma_mode = &hpt34x_set_mode; | 131 | hwif->set_dma_mode = &hpt34x_set_mode; |
| 147 | 132 | ||
| @@ -154,16 +139,13 @@ static void __devinit init_hwif_hpt34x(ide_hwif_t *hwif) | |||
| 154 | return; | 139 | return; |
| 155 | 140 | ||
| 156 | #ifdef CONFIG_HPT34X_AUTODMA | 141 | #ifdef CONFIG_HPT34X_AUTODMA |
| 142 | if ((pcicmd & PCI_COMMAND_MEMORY) == 0) | ||
| 143 | return; | ||
| 144 | |||
| 157 | hwif->ultra_mask = 0x07; | 145 | hwif->ultra_mask = 0x07; |
| 158 | hwif->mwdma_mask = 0x07; | 146 | hwif->mwdma_mask = 0x07; |
| 159 | hwif->swdma_mask = 0x07; | 147 | hwif->swdma_mask = 0x07; |
| 160 | #endif | 148 | #endif |
| 161 | |||
| 162 | hwif->ide_dma_check = &hpt34x_config_drive_xfer_rate; | ||
| 163 | if (!noautodma) | ||
| 164 | hwif->autodma = (pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0; | ||
| 165 | hwif->drives[0].autodma = hwif->autodma; | ||
| 166 | hwif->drives[1].autodma = hwif->autodma; | ||
| 167 | } | 149 | } |
| 168 | 150 | ||
| 169 | static ide_pci_device_t hpt34x_chipset __devinitdata = { | 151 | static ide_pci_device_t hpt34x_chipset __devinitdata = { |
| @@ -190,8 +172,8 @@ static int __devinit hpt34x_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 190 | return ide_setup_pci_device(dev, d); | 172 | return ide_setup_pci_device(dev, d); |
| 191 | } | 173 | } |
| 192 | 174 | ||
| 193 | static struct pci_device_id hpt34x_pci_tbl[] = { | 175 | static const struct pci_device_id hpt34x_pci_tbl[] = { |
| 194 | { PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT343, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 176 | { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT343), 0 }, |
| 195 | { 0, }, | 177 | { 0, }, |
| 196 | }; | 178 | }; |
| 197 | MODULE_DEVICE_TABLE(pci, hpt34x_pci_tbl); | 179 | MODULE_DEVICE_TABLE(pci, hpt34x_pci_tbl); |
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index 8812a9bb032f..fcb21ddab2cc 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/hpt366.c Version 1.13 Sep 29, 2007 | 2 | * linux/drivers/ide/pci/hpt366.c Version 1.14 Oct 1, 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> |
| 5 | * Portions Copyright (C) 2001 Sun Microsystems, Inc. | 5 | * Portions Copyright (C) 2001 Sun Microsystems, Inc. |
| @@ -713,19 +713,6 @@ static void hpt3xx_maskproc(ide_drive_t *drive, int mask) | |||
| 713 | IDE_CONTROL_REG); | 713 | IDE_CONTROL_REG); |
| 714 | } | 714 | } |
| 715 | 715 | ||
| 716 | static int hpt366_config_drive_xfer_rate(ide_drive_t *drive) | ||
| 717 | { | ||
| 718 | drive->init_speed = 0; | ||
| 719 | |||
| 720 | if (ide_tune_dma(drive)) | ||
| 721 | return 0; | ||
| 722 | |||
| 723 | if (ide_use_fast_pio(drive)) | ||
| 724 | ide_set_max_pio(drive); | ||
| 725 | |||
| 726 | return -1; | ||
| 727 | } | ||
| 728 | |||
| 729 | /* | 716 | /* |
| 730 | * This is specific to the HPT366 UDMA chipset | 717 | * This is specific to the HPT366 UDMA chipset |
| 731 | * by HighPoint|Triones Technologies, Inc. | 718 | * by HighPoint|Triones Technologies, Inc. |
| @@ -1304,10 +1291,10 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) | |||
| 1304 | if (new_mcr != old_mcr) | 1291 | if (new_mcr != old_mcr) |
| 1305 | pci_write_config_byte(dev, hwif->select_data + 1, new_mcr); | 1292 | pci_write_config_byte(dev, hwif->select_data + 1, new_mcr); |
| 1306 | 1293 | ||
| 1307 | if (!hwif->dma_base) { | 1294 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; |
| 1308 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | 1295 | |
| 1296 | if (hwif->dma_base == 0) | ||
| 1309 | return; | 1297 | return; |
| 1310 | } | ||
| 1311 | 1298 | ||
| 1312 | hwif->ultra_mask = hwif->cds->udma_mask; | 1299 | hwif->ultra_mask = hwif->cds->udma_mask; |
| 1313 | hwif->mwdma_mask = 0x07; | 1300 | hwif->mwdma_mask = 0x07; |
| @@ -1349,8 +1336,6 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) | |||
| 1349 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 1336 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 1350 | hwif->cbl = (scr1 & ata66) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | 1337 | hwif->cbl = (scr1 & ata66) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; |
| 1351 | 1338 | ||
| 1352 | hwif->ide_dma_check = &hpt366_config_drive_xfer_rate; | ||
| 1353 | |||
| 1354 | if (chip_type >= HPT374) { | 1339 | if (chip_type >= HPT374) { |
| 1355 | hwif->ide_dma_test_irq = &hpt374_ide_dma_test_irq; | 1340 | hwif->ide_dma_test_irq = &hpt374_ide_dma_test_irq; |
| 1356 | hwif->ide_dma_end = &hpt374_ide_dma_end; | 1341 | hwif->ide_dma_end = &hpt374_ide_dma_end; |
| @@ -1360,10 +1345,6 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) | |||
| 1360 | hwif->dma_timeout = &hpt370_dma_timeout; | 1345 | hwif->dma_timeout = &hpt370_dma_timeout; |
| 1361 | } else | 1346 | } else |
| 1362 | hwif->dma_lost_irq = &hpt366_dma_lost_irq; | 1347 | hwif->dma_lost_irq = &hpt366_dma_lost_irq; |
| 1363 | |||
| 1364 | if (!noautodma) | ||
| 1365 | hwif->autodma = 1; | ||
| 1366 | hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; | ||
| 1367 | } | 1348 | } |
| 1368 | 1349 | ||
| 1369 | static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase) | 1350 | static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase) |
| @@ -1657,13 +1638,13 @@ static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 1657 | return d.init_setup(dev, &d); | 1638 | return d.init_setup(dev, &d); |
| 1658 | } | 1639 | } |
| 1659 | 1640 | ||
| 1660 | static struct pci_device_id hpt366_pci_tbl[] = { | 1641 | static const struct pci_device_id hpt366_pci_tbl[] = { |
| 1661 | { PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT366, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 1642 | { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), 0 }, |
| 1662 | { PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT372, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 1643 | { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372), 1 }, |
| 1663 | { PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT302, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, | 1644 | { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT302), 2 }, |
| 1664 | { PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT371, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, | 1645 | { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT371), 3 }, |
| 1665 | { PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT374, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, | 1646 | { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT374), 4 }, |
| 1666 | { PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT372N, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5}, | 1647 | { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372N), 5 }, |
| 1667 | { 0, }, | 1648 | { 0, }, |
| 1668 | }; | 1649 | }; |
| 1669 | MODULE_DEVICE_TABLE(pci, hpt366_pci_tbl); | 1650 | MODULE_DEVICE_TABLE(pci, hpt366_pci_tbl); |
diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c index ecf4ce078dce..24a71d03744a 100644 --- a/drivers/ide/pci/it8213.c +++ b/drivers/ide/pci/it8213.c | |||
| @@ -18,37 +18,6 @@ | |||
| 18 | #include <asm/io.h> | 18 | #include <asm/io.h> |
| 19 | 19 | ||
| 20 | /** | 20 | /** |
| 21 | * it8213_dma_2_pio - return the PIO mode matching DMA | ||
| 22 | * @xfer_rate: transfer speed | ||
| 23 | * | ||
| 24 | * Returns the nearest equivalent PIO timing for the DMA | ||
| 25 | * mode requested by the controller. | ||
| 26 | */ | ||
| 27 | |||
| 28 | static u8 it8213_dma_2_pio (u8 xfer_rate) { | ||
| 29 | switch(xfer_rate) { | ||
| 30 | case XFER_UDMA_6: | ||
| 31 | case XFER_UDMA_5: | ||
| 32 | case XFER_UDMA_4: | ||
| 33 | case XFER_UDMA_3: | ||
| 34 | case XFER_UDMA_2: | ||
| 35 | case XFER_UDMA_1: | ||
| 36 | case XFER_UDMA_0: | ||
| 37 | case XFER_MW_DMA_2: | ||
| 38 | return 4; | ||
| 39 | case XFER_MW_DMA_1: | ||
| 40 | return 3; | ||
| 41 | case XFER_SW_DMA_2: | ||
| 42 | return 2; | ||
| 43 | case XFER_MW_DMA_0: | ||
| 44 | case XFER_SW_DMA_1: | ||
| 45 | case XFER_SW_DMA_0: | ||
| 46 | default: | ||
| 47 | return 0; | ||
| 48 | } | ||
| 49 | } | ||
| 50 | |||
| 51 | /** | ||
| 52 | * it8213_set_pio_mode - set host controller for PIO mode | 21 | * it8213_set_pio_mode - set host controller for PIO mode |
| 53 | * @drive: drive | 22 | * @drive: drive |
| 54 | * @pio: PIO mode number | 23 | * @pio: PIO mode number |
| @@ -166,6 +135,9 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 166 | } else | 135 | } else |
| 167 | pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); | 136 | pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); |
| 168 | } else { | 137 | } else { |
| 138 | const u8 mwdma_to_pio[] = { 0, 3, 4 }; | ||
| 139 | u8 pio; | ||
| 140 | |||
| 169 | if (reg48 & u_flag) | 141 | if (reg48 & u_flag) |
| 170 | pci_write_config_byte(dev, 0x48, reg48 & ~u_flag); | 142 | pci_write_config_byte(dev, 0x48, reg48 & ~u_flag); |
| 171 | if (reg4a & a_speed) | 143 | if (reg4a & a_speed) |
| @@ -174,38 +146,21 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 174 | pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); | 146 | pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); |
| 175 | if (reg55 & w_flag) | 147 | if (reg55 & w_flag) |
| 176 | pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag); | 148 | pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag); |
| 177 | } | ||
| 178 | |||
| 179 | it8213_set_pio_mode(drive, it8213_dma_2_pio(speed)); | ||
| 180 | } | ||
| 181 | |||
| 182 | /** | ||
| 183 | * it8213_configure_drive_for_dma - set up for DMA transfers | ||
| 184 | * @drive: drive we are going to set up | ||
| 185 | * | ||
| 186 | * Set up the drive for DMA, tune the controller and drive as | ||
| 187 | * required. If the drive isn't suitable for DMA or we hit | ||
| 188 | * other problems then we will drop down to PIO and set up | ||
| 189 | * PIO appropriately | ||
| 190 | */ | ||
| 191 | 149 | ||
| 192 | static int it8213_config_drive_for_dma (ide_drive_t *drive) | 150 | if (speed >= XFER_MW_DMA_0) |
| 193 | { | 151 | pio = mwdma_to_pio[speed - XFER_MW_DMA_0]; |
| 194 | if (ide_tune_dma(drive)) | 152 | else |
| 195 | return 0; | 153 | pio = 2; /* only SWDMA2 is allowed */ |
| 196 | 154 | ||
| 197 | ide_set_max_pio(drive); | 155 | it8213_set_pio_mode(drive, pio); |
| 198 | 156 | } | |
| 199 | return -1; | ||
| 200 | } | 157 | } |
| 201 | 158 | ||
| 202 | /** | 159 | /** |
| 203 | * init_hwif_it8213 - set up hwif structs | 160 | * init_hwif_it8213 - set up hwif structs |
| 204 | * @hwif: interface to set up | 161 | * @hwif: interface to set up |
| 205 | * | 162 | * |
| 206 | * We do the basic set up of the interface structure. The IT8212 | 163 | * We do the basic set up of the interface structure. |
| 207 | * requires several custom handlers so we override the default | ||
| 208 | * ide DMA handlers appropriately | ||
| 209 | */ | 164 | */ |
| 210 | 165 | ||
| 211 | static void __devinit init_hwif_it8213(ide_hwif_t *hwif) | 166 | static void __devinit init_hwif_it8213(ide_hwif_t *hwif) |
| @@ -215,8 +170,6 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif) | |||
| 215 | hwif->set_dma_mode = &it8213_set_dma_mode; | 170 | hwif->set_dma_mode = &it8213_set_dma_mode; |
| 216 | hwif->set_pio_mode = &it8213_set_pio_mode; | 171 | hwif->set_pio_mode = &it8213_set_pio_mode; |
| 217 | 172 | ||
| 218 | hwif->autodma = 0; | ||
| 219 | |||
| 220 | hwif->drives[0].autotune = 1; | 173 | hwif->drives[0].autotune = 1; |
| 221 | hwif->drives[1].autotune = 1; | 174 | hwif->drives[1].autotune = 1; |
| 222 | 175 | ||
| @@ -230,20 +183,8 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif) | |||
| 230 | 183 | ||
| 231 | pci_read_config_byte(hwif->pci_dev, 0x42, ®42h); | 184 | pci_read_config_byte(hwif->pci_dev, 0x42, ®42h); |
| 232 | 185 | ||
| 233 | hwif->ide_dma_check = &it8213_config_drive_for_dma; | ||
| 234 | |||
| 235 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 186 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 236 | hwif->cbl = (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | 187 | hwif->cbl = (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; |
| 237 | |||
| 238 | /* | ||
| 239 | * The BIOS often doesn't set up DMA on this controller | ||
| 240 | * so we always do it. | ||
| 241 | */ | ||
| 242 | if (!noautodma) | ||
| 243 | hwif->autodma = 1; | ||
| 244 | |||
| 245 | hwif->drives[0].autodma = hwif->autodma; | ||
| 246 | hwif->drives[1].autodma = hwif->autodma; | ||
| 247 | } | 188 | } |
| 248 | 189 | ||
| 249 | 190 | ||
| @@ -279,9 +220,8 @@ static int __devinit it8213_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 279 | return 0; | 220 | return 0; |
| 280 | } | 221 | } |
| 281 | 222 | ||
| 282 | 223 | static const struct pci_device_id it8213_pci_tbl[] = { | |
| 283 | static struct pci_device_id it8213_pci_tbl[] = { | 224 | { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8213), 0 }, |
| 284 | { PCI_VENDOR_ID_ITE, 0x8213, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | ||
| 285 | { 0, }, | 225 | { 0, }, |
| 286 | }; | 226 | }; |
| 287 | 227 | ||
diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c index 1b69d82478c6..f3391a8698ac 100644 --- a/drivers/ide/pci/it821x.c +++ b/drivers/ide/pci/it821x.c | |||
| @@ -416,26 +416,6 @@ static void it821x_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 416 | } | 416 | } |
| 417 | 417 | ||
| 418 | /** | 418 | /** |
| 419 | * it821x_configure_drive_for_dma - set up for DMA transfers | ||
| 420 | * @drive: drive we are going to set up | ||
| 421 | * | ||
| 422 | * Set up the drive for DMA, tune the controller and drive as | ||
| 423 | * required. If the drive isn't suitable for DMA or we hit | ||
| 424 | * other problems then we will drop down to PIO and set up | ||
| 425 | * PIO appropriately | ||
| 426 | */ | ||
| 427 | |||
| 428 | static int it821x_config_drive_for_dma (ide_drive_t *drive) | ||
| 429 | { | ||
| 430 | if (ide_tune_dma(drive)) | ||
| 431 | return 0; | ||
| 432 | |||
| 433 | ide_set_max_pio(drive); | ||
| 434 | |||
| 435 | return -1; | ||
| 436 | } | ||
| 437 | |||
| 438 | /** | ||
| 439 | * ata66_it821x - check for 80 pin cable | 419 | * ata66_it821x - check for 80 pin cable |
| 440 | * @hwif: interface to check | 420 | * @hwif: interface to check |
| 441 | * | 421 | * |
| @@ -557,10 +537,11 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) | |||
| 557 | struct it821x_dev *idev = kzalloc(sizeof(struct it821x_dev), GFP_KERNEL); | 537 | struct it821x_dev *idev = kzalloc(sizeof(struct it821x_dev), GFP_KERNEL); |
| 558 | u8 conf; | 538 | u8 conf; |
| 559 | 539 | ||
| 560 | if(idev == NULL) { | 540 | if (idev == NULL) { |
| 561 | printk(KERN_ERR "it821x: out of memory, falling back to legacy behaviour.\n"); | 541 | printk(KERN_ERR "it821x: out of memory, falling back to legacy behaviour.\n"); |
| 562 | goto fallback; | 542 | return; |
| 563 | } | 543 | } |
| 544 | |||
| 564 | ide_set_hwifdata(hwif, idev); | 545 | ide_set_hwifdata(hwif, idev); |
| 565 | 546 | ||
| 566 | hwif->atapi_dma = 1; | 547 | hwif->atapi_dma = 1; |
| @@ -609,29 +590,14 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) | |||
| 609 | hwif->drives[0].autotune = 1; | 590 | hwif->drives[0].autotune = 1; |
| 610 | hwif->drives[1].autotune = 1; | 591 | hwif->drives[1].autotune = 1; |
| 611 | 592 | ||
| 612 | if (!hwif->dma_base) | 593 | if (hwif->dma_base == 0) |
| 613 | goto fallback; | 594 | return; |
| 614 | 595 | ||
| 615 | hwif->ultra_mask = 0x7f; | 596 | hwif->ultra_mask = 0x7f; |
| 616 | hwif->mwdma_mask = 0x07; | 597 | hwif->mwdma_mask = 0x07; |
| 617 | 598 | ||
| 618 | hwif->ide_dma_check = &it821x_config_drive_for_dma; | ||
| 619 | |||
| 620 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 599 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 621 | hwif->cbl = ata66_it821x(hwif); | 600 | hwif->cbl = ata66_it821x(hwif); |
| 622 | |||
| 623 | /* | ||
| 624 | * The BIOS often doesn't set up DMA on this controller | ||
| 625 | * so we always do it. | ||
| 626 | */ | ||
| 627 | |||
| 628 | hwif->autodma = 1; | ||
| 629 | hwif->drives[0].autodma = hwif->autodma; | ||
| 630 | hwif->drives[1].autodma = hwif->autodma; | ||
| 631 | return; | ||
| 632 | fallback: | ||
| 633 | hwif->autodma = 0; | ||
| 634 | return; | ||
| 635 | } | 601 | } |
| 636 | 602 | ||
| 637 | static void __devinit it8212_disable_raid(struct pci_dev *dev) | 603 | static void __devinit it8212_disable_raid(struct pci_dev *dev) |
| @@ -697,9 +663,9 @@ static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 697 | return 0; | 663 | return 0; |
| 698 | } | 664 | } |
| 699 | 665 | ||
| 700 | static struct pci_device_id it821x_pci_tbl[] = { | 666 | static const struct pci_device_id it821x_pci_tbl[] = { |
| 701 | { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 667 | { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), 0 }, |
| 702 | { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8212, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 668 | { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8212), 0 }, |
| 703 | { 0, }, | 669 | { 0, }, |
| 704 | }; | 670 | }; |
| 705 | 671 | ||
diff --git a/drivers/ide/pci/jmicron.c b/drivers/ide/pci/jmicron.c index 582b4cae2b53..bb893ffcc987 100644 --- a/drivers/ide/pci/jmicron.c +++ b/drivers/ide/pci/jmicron.c | |||
| @@ -100,24 +100,6 @@ static void jmicron_set_dma_mode(ide_drive_t *drive, const u8 mode) | |||
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | /** | 102 | /** |
| 103 | * jmicron_configure_drive_for_dma - set up for DMA transfers | ||
| 104 | * @drive: drive we are going to set up | ||
| 105 | * | ||
| 106 | * As the JMicron snoops for timings all we actually need to do is | ||
| 107 | * make sure we don't set an invalid mode. | ||
| 108 | */ | ||
| 109 | |||
| 110 | static int jmicron_config_drive_for_dma (ide_drive_t *drive) | ||
| 111 | { | ||
| 112 | if (ide_tune_dma(drive)) | ||
| 113 | return 0; | ||
| 114 | |||
| 115 | ide_set_max_pio(drive); | ||
| 116 | |||
| 117 | return -1; | ||
| 118 | } | ||
| 119 | |||
| 120 | /** | ||
| 121 | * init_hwif_jmicron - set up hwif structs | 103 | * init_hwif_jmicron - set up hwif structs |
| 122 | * @hwif: interface to set up | 104 | * @hwif: interface to set up |
| 123 | * | 105 | * |
| @@ -132,25 +114,15 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif) | |||
| 132 | hwif->drives[0].autotune = 1; | 114 | hwif->drives[0].autotune = 1; |
| 133 | hwif->drives[1].autotune = 1; | 115 | hwif->drives[1].autotune = 1; |
| 134 | 116 | ||
| 135 | if (!hwif->dma_base) | 117 | if (hwif->dma_base == 0) |
| 136 | goto fallback; | 118 | return; |
| 137 | 119 | ||
| 138 | hwif->atapi_dma = 1; | 120 | hwif->atapi_dma = 1; |
| 139 | hwif->ultra_mask = 0x7f; | 121 | hwif->ultra_mask = 0x7f; |
| 140 | hwif->mwdma_mask = 0x07; | 122 | hwif->mwdma_mask = 0x07; |
| 141 | 123 | ||
| 142 | hwif->ide_dma_check = &jmicron_config_drive_for_dma; | ||
| 143 | |||
| 144 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 124 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 145 | hwif->cbl = ata66_jmicron(hwif); | 125 | hwif->cbl = ata66_jmicron(hwif); |
| 146 | |||
| 147 | hwif->autodma = 1; | ||
| 148 | hwif->drives[0].autodma = hwif->autodma; | ||
| 149 | hwif->drives[1].autodma = hwif->autodma; | ||
| 150 | return; | ||
| 151 | fallback: | ||
| 152 | hwif->autodma = 0; | ||
| 153 | return; | ||
| 154 | } | 126 | } |
| 155 | 127 | ||
| 156 | static ide_pci_device_t jmicron_chipset __devinitdata = { | 128 | static ide_pci_device_t jmicron_chipset __devinitdata = { |
diff --git a/drivers/ide/pci/ns87415.c b/drivers/ide/pci/ns87415.c index 465c935fdf25..a8cd50ab62fb 100644 --- a/drivers/ide/pci/ns87415.c +++ b/drivers/ide/pci/ns87415.c | |||
| @@ -197,7 +197,6 @@ static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif) | |||
| 197 | u8 stat; | 197 | u8 stat; |
| 198 | #endif | 198 | #endif |
| 199 | 199 | ||
| 200 | hwif->autodma = 0; | ||
| 201 | hwif->selectproc = &ns87415_selectproc; | 200 | hwif->selectproc = &ns87415_selectproc; |
| 202 | 201 | ||
| 203 | /* | 202 | /* |
| @@ -259,11 +258,6 @@ static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif) | |||
| 259 | outb(0x60, hwif->dma_status); | 258 | outb(0x60, hwif->dma_status); |
| 260 | hwif->dma_setup = &ns87415_ide_dma_setup; | 259 | hwif->dma_setup = &ns87415_ide_dma_setup; |
| 261 | hwif->ide_dma_end = &ns87415_ide_dma_end; | 260 | hwif->ide_dma_end = &ns87415_ide_dma_end; |
| 262 | |||
| 263 | if (!noautodma) | ||
| 264 | hwif->autodma = 1; | ||
| 265 | hwif->drives[0].autodma = hwif->autodma; | ||
| 266 | hwif->drives[1].autodma = hwif->autodma; | ||
| 267 | } | 261 | } |
| 268 | 262 | ||
| 269 | static ide_pci_device_t ns87415_chipset __devinitdata = { | 263 | static ide_pci_device_t ns87415_chipset __devinitdata = { |
| @@ -274,6 +268,7 @@ static ide_pci_device_t ns87415_chipset __devinitdata = { | |||
| 274 | .init_hwif = init_hwif_ns87415, | 268 | .init_hwif = init_hwif_ns87415, |
| 275 | .autodma = AUTODMA, | 269 | .autodma = AUTODMA, |
| 276 | .bootable = ON_BOARD, | 270 | .bootable = ON_BOARD, |
| 271 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 277 | }; | 272 | }; |
| 278 | 273 | ||
| 279 | static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 274 | static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
| @@ -281,8 +276,8 @@ static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_devi | |||
| 281 | return ide_setup_pci_device(dev, &ns87415_chipset); | 276 | return ide_setup_pci_device(dev, &ns87415_chipset); |
| 282 | } | 277 | } |
| 283 | 278 | ||
| 284 | static struct pci_device_id ns87415_pci_tbl[] = { | 279 | static const struct pci_device_id ns87415_pci_tbl[] = { |
| 285 | { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87415, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 280 | { PCI_VDEVICE(NS, PCI_DEVICE_ID_NS_87415), 0 }, |
| 286 | { 0, }, | 281 | { 0, }, |
| 287 | }; | 282 | }; |
| 288 | MODULE_DEVICE_TABLE(pci, ns87415_pci_tbl); | 283 | MODULE_DEVICE_TABLE(pci, ns87415_pci_tbl); |
diff --git a/drivers/ide/pci/opti621.c b/drivers/ide/pci/opti621.c index 9fa06393469a..250662ea18ad 100644 --- a/drivers/ide/pci/opti621.c +++ b/drivers/ide/pci/opti621.c | |||
| @@ -328,7 +328,6 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
| 328 | */ | 328 | */ |
| 329 | static void __devinit init_hwif_opti621 (ide_hwif_t *hwif) | 329 | static void __devinit init_hwif_opti621 (ide_hwif_t *hwif) |
| 330 | { | 330 | { |
| 331 | hwif->autodma = 0; | ||
| 332 | hwif->drives[0].drive_data = PIO_DONT_KNOW; | 331 | hwif->drives[0].drive_data = PIO_DONT_KNOW; |
| 333 | hwif->drives[1].drive_data = PIO_DONT_KNOW; | 332 | hwif->drives[1].drive_data = PIO_DONT_KNOW; |
| 334 | 333 | ||
| @@ -340,11 +339,6 @@ static void __devinit init_hwif_opti621 (ide_hwif_t *hwif) | |||
| 340 | hwif->atapi_dma = 1; | 339 | hwif->atapi_dma = 1; |
| 341 | hwif->mwdma_mask = 0x07; | 340 | hwif->mwdma_mask = 0x07; |
| 342 | hwif->swdma_mask = 0x07; | 341 | hwif->swdma_mask = 0x07; |
| 343 | |||
| 344 | if (!noautodma) | ||
| 345 | hwif->autodma = 1; | ||
| 346 | hwif->drives[0].autodma = hwif->autodma; | ||
| 347 | hwif->drives[1].autodma = hwif->autodma; | ||
| 348 | } | 342 | } |
| 349 | 343 | ||
| 350 | static ide_pci_device_t opti621_chipsets[] __devinitdata = { | 344 | static ide_pci_device_t opti621_chipsets[] __devinitdata = { |
| @@ -355,6 +349,7 @@ static ide_pci_device_t opti621_chipsets[] __devinitdata = { | |||
| 355 | .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, | 349 | .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, |
| 356 | .bootable = ON_BOARD, | 350 | .bootable = ON_BOARD, |
| 357 | .pio_mask = ATA_PIO3, | 351 | .pio_mask = ATA_PIO3, |
| 352 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 358 | },{ /* 1 */ | 353 | },{ /* 1 */ |
| 359 | .name = "OPTI621X", | 354 | .name = "OPTI621X", |
| 360 | .init_hwif = init_hwif_opti621, | 355 | .init_hwif = init_hwif_opti621, |
| @@ -362,6 +357,7 @@ static ide_pci_device_t opti621_chipsets[] __devinitdata = { | |||
| 362 | .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, | 357 | .enablebits = {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, |
| 363 | .bootable = ON_BOARD, | 358 | .bootable = ON_BOARD, |
| 364 | .pio_mask = ATA_PIO3, | 359 | .pio_mask = ATA_PIO3, |
| 360 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 365 | } | 361 | } |
| 366 | }; | 362 | }; |
| 367 | 363 | ||
| @@ -370,9 +366,9 @@ static int __devinit opti621_init_one(struct pci_dev *dev, const struct pci_devi | |||
| 370 | return ide_setup_pci_device(dev, &opti621_chipsets[id->driver_data]); | 366 | return ide_setup_pci_device(dev, &opti621_chipsets[id->driver_data]); |
| 371 | } | 367 | } |
| 372 | 368 | ||
| 373 | static struct pci_device_id opti621_pci_tbl[] = { | 369 | static const struct pci_device_id opti621_pci_tbl[] = { |
| 374 | { PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C621, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 370 | { PCI_VDEVICE(OPTI, PCI_DEVICE_ID_OPTI_82C621), 0 }, |
| 375 | { PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 371 | { PCI_VDEVICE(OPTI, PCI_DEVICE_ID_OPTI_82C825), 1 }, |
| 376 | { 0, }, | 372 | { 0, }, |
| 377 | }; | 373 | }; |
| 378 | MODULE_DEVICE_TABLE(pci, opti621_pci_tbl); | 374 | MODULE_DEVICE_TABLE(pci, opti621_pci_tbl); |
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c index ad0bdcb0c02b..8704b6f33312 100644 --- a/drivers/ide/pci/pdc202xx_new.c +++ b/drivers/ide/pci/pdc202xx_new.c | |||
| @@ -223,19 +223,6 @@ static u8 pdcnew_cable_detect(ide_hwif_t *hwif) | |||
| 223 | return ATA_CBL_PATA80; | 223 | return ATA_CBL_PATA80; |
| 224 | } | 224 | } |
| 225 | 225 | ||
| 226 | static int pdcnew_config_drive_xfer_rate(ide_drive_t *drive) | ||
| 227 | { | ||
| 228 | drive->init_speed = 0; | ||
| 229 | |||
| 230 | if (ide_tune_dma(drive)) | ||
| 231 | return 0; | ||
| 232 | |||
| 233 | if (ide_use_fast_pio(drive)) | ||
| 234 | ide_set_max_pio(drive); | ||
| 235 | |||
| 236 | return -1; | ||
| 237 | } | ||
| 238 | |||
| 239 | static int pdcnew_quirkproc(ide_drive_t *drive) | 226 | static int pdcnew_quirkproc(ide_drive_t *drive) |
| 240 | { | 227 | { |
| 241 | const char **list, *model = drive->id->model; | 228 | const char **list, *model = drive->id->model; |
| @@ -482,8 +469,6 @@ static unsigned int __devinit init_chipset_pdcnew(struct pci_dev *dev, const cha | |||
| 482 | 469 | ||
| 483 | static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif) | 470 | static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif) |
| 484 | { | 471 | { |
| 485 | hwif->autodma = 0; | ||
| 486 | |||
| 487 | hwif->set_pio_mode = &pdcnew_set_pio_mode; | 472 | hwif->set_pio_mode = &pdcnew_set_pio_mode; |
| 488 | hwif->set_dma_mode = &pdcnew_set_mode; | 473 | hwif->set_dma_mode = &pdcnew_set_mode; |
| 489 | 474 | ||
| @@ -502,14 +487,8 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif) | |||
| 502 | hwif->ultra_mask = hwif->cds->udma_mask; | 487 | hwif->ultra_mask = hwif->cds->udma_mask; |
| 503 | hwif->mwdma_mask = 0x07; | 488 | hwif->mwdma_mask = 0x07; |
| 504 | 489 | ||
| 505 | hwif->ide_dma_check = &pdcnew_config_drive_xfer_rate; | ||
| 506 | |||
| 507 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 490 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 508 | hwif->cbl = pdcnew_cable_detect(hwif); | 491 | hwif->cbl = pdcnew_cable_detect(hwif); |
| 509 | |||
| 510 | if (!noautodma) | ||
| 511 | hwif->autodma = 1; | ||
| 512 | hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; | ||
| 513 | } | 492 | } |
| 514 | 493 | ||
| 515 | static int __devinit init_setup_pdcnew(struct pci_dev *dev, ide_pci_device_t *d) | 494 | static int __devinit init_setup_pdcnew(struct pci_dev *dev, ide_pci_device_t *d) |
| @@ -658,14 +637,14 @@ static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_de | |||
| 658 | return d->init_setup(dev, d); | 637 | return d->init_setup(dev, d); |
| 659 | } | 638 | } |
| 660 | 639 | ||
| 661 | static struct pci_device_id pdc202new_pci_tbl[] = { | 640 | static const struct pci_device_id pdc202new_pci_tbl[] = { |
| 662 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 641 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20268), 0 }, |
| 663 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20269, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 642 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20269), 1 }, |
| 664 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20270, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, | 643 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20270), 2 }, |
| 665 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20271, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, | 644 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20271), 3 }, |
| 666 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20275, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, | 645 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20275), 4 }, |
| 667 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20276, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5}, | 646 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20276), 5 }, |
| 668 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20277, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6}, | 647 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20277), 6 }, |
| 669 | { 0, }, | 648 | { 0, }, |
| 670 | }; | 649 | }; |
| 671 | MODULE_DEVICE_TABLE(pci, pdc202new_pci_tbl); | 650 | MODULE_DEVICE_TABLE(pci, pdc202new_pci_tbl); |
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index 8c3e8cf36ec9..e1d2337a9f1d 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c | |||
| @@ -179,19 +179,6 @@ static void pdc_old_disable_66MHz_clock(ide_hwif_t *hwif) | |||
| 179 | outb(clock & ~(hwif->channel ? 0x08 : 0x02), clock_reg); | 179 | outb(clock & ~(hwif->channel ? 0x08 : 0x02), clock_reg); |
| 180 | } | 180 | } |
| 181 | 181 | ||
| 182 | static int pdc202xx_config_drive_xfer_rate (ide_drive_t *drive) | ||
| 183 | { | ||
| 184 | drive->init_speed = 0; | ||
| 185 | |||
| 186 | if (ide_tune_dma(drive)) | ||
| 187 | return 0; | ||
| 188 | |||
| 189 | if (ide_use_fast_pio(drive)) | ||
| 190 | ide_set_max_pio(drive); | ||
| 191 | |||
| 192 | return -1; | ||
| 193 | } | ||
| 194 | |||
| 195 | static int pdc202xx_quirkproc (ide_drive_t *drive) | 182 | static int pdc202xx_quirkproc (ide_drive_t *drive) |
| 196 | { | 183 | { |
| 197 | const char **list, *model = drive->id->model; | 184 | const char **list, *model = drive->id->model; |
| @@ -325,8 +312,6 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif) | |||
| 325 | (dev->device == PCI_DEVICE_ID_PROMISE_20265)) | 312 | (dev->device == PCI_DEVICE_ID_PROMISE_20265)) |
| 326 | hwif->rqsize = 256; | 313 | hwif->rqsize = 256; |
| 327 | 314 | ||
| 328 | hwif->autodma = 0; | ||
| 329 | |||
| 330 | hwif->set_pio_mode = &pdc202xx_set_pio_mode; | 315 | hwif->set_pio_mode = &pdc202xx_set_pio_mode; |
| 331 | hwif->set_dma_mode = &pdc202xx_set_mode; | 316 | hwif->set_dma_mode = &pdc202xx_set_mode; |
| 332 | 317 | ||
| @@ -347,7 +332,6 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif) | |||
| 347 | hwif->swdma_mask = 0x07; | 332 | hwif->swdma_mask = 0x07; |
| 348 | hwif->atapi_dma = 1; | 333 | hwif->atapi_dma = 1; |
| 349 | 334 | ||
| 350 | hwif->ide_dma_check = &pdc202xx_config_drive_xfer_rate; | ||
| 351 | hwif->dma_lost_irq = &pdc202xx_dma_lost_irq; | 335 | hwif->dma_lost_irq = &pdc202xx_dma_lost_irq; |
| 352 | hwif->dma_timeout = &pdc202xx_dma_timeout; | 336 | hwif->dma_timeout = &pdc202xx_dma_timeout; |
| 353 | 337 | ||
| @@ -359,10 +343,6 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif) | |||
| 359 | hwif->ide_dma_end = &pdc202xx_old_ide_dma_end; | 343 | hwif->ide_dma_end = &pdc202xx_old_ide_dma_end; |
| 360 | } | 344 | } |
| 361 | hwif->ide_dma_test_irq = &pdc202xx_old_ide_dma_test_irq; | 345 | hwif->ide_dma_test_irq = &pdc202xx_old_ide_dma_test_irq; |
| 362 | |||
| 363 | if (!noautodma) | ||
| 364 | hwif->autodma = 1; | ||
| 365 | hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; | ||
| 366 | } | 346 | } |
| 367 | 347 | ||
| 368 | static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase) | 348 | static void __devinit init_dma_pdc202xx(ide_hwif_t *hwif, unsigned long dmabase) |
| @@ -510,12 +490,12 @@ static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_dev | |||
| 510 | return d->init_setup(dev, d); | 490 | return d->init_setup(dev, d); |
| 511 | } | 491 | } |
| 512 | 492 | ||
| 513 | static struct pci_device_id pdc202xx_pci_tbl[] = { | 493 | static const struct pci_device_id pdc202xx_pci_tbl[] = { |
| 514 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 494 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20246), 0 }, |
| 515 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20262, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 495 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20262), 1 }, |
| 516 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20263, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, | 496 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20263), 2 }, |
| 517 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20265, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, | 497 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20265), 3 }, |
| 518 | { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20267, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, | 498 | { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20267), 4 }, |
| 519 | { 0, }, | 499 | { 0, }, |
| 520 | }; | 500 | }; |
| 521 | MODULE_DEVICE_TABLE(pci, pdc202xx_pci_tbl); | 501 | MODULE_DEVICE_TABLE(pci, pdc202xx_pci_tbl); |
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index 38c91ba6497b..a8dd0c0add35 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/piix.c Version 0.52 Jul 14, 2007 | 2 | * linux/drivers/ide/pci/piix.c Version 0.53 Aug 9, 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer | 4 | * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer |
| 5 | * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org> | 5 | * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org> |
| @@ -106,37 +106,6 @@ | |||
| 106 | static int no_piix_dma; | 106 | static int no_piix_dma; |
| 107 | 107 | ||
| 108 | /** | 108 | /** |
| 109 | * piix_dma_2_pio - return the PIO mode matching DMA | ||
| 110 | * @xfer_rate: transfer speed | ||
| 111 | * | ||
| 112 | * Returns the nearest equivalent PIO timing for the DMA | ||
| 113 | * mode requested by the controller. | ||
| 114 | */ | ||
| 115 | |||
| 116 | static u8 piix_dma_2_pio (u8 xfer_rate) { | ||
| 117 | switch(xfer_rate) { | ||
| 118 | case XFER_UDMA_6: | ||
| 119 | case XFER_UDMA_5: | ||
| 120 | case XFER_UDMA_4: | ||
| 121 | case XFER_UDMA_3: | ||
| 122 | case XFER_UDMA_2: | ||
| 123 | case XFER_UDMA_1: | ||
| 124 | case XFER_UDMA_0: | ||
| 125 | case XFER_MW_DMA_2: | ||
| 126 | return 4; | ||
| 127 | case XFER_MW_DMA_1: | ||
| 128 | return 3; | ||
| 129 | case XFER_SW_DMA_2: | ||
| 130 | return 2; | ||
| 131 | case XFER_MW_DMA_0: | ||
| 132 | case XFER_SW_DMA_1: | ||
| 133 | case XFER_SW_DMA_0: | ||
| 134 | default: | ||
| 135 | return 0; | ||
| 136 | } | ||
| 137 | } | ||
| 138 | |||
| 139 | /** | ||
| 140 | * piix_set_pio_mode - set host controller for PIO mode | 109 | * piix_set_pio_mode - set host controller for PIO mode |
| 141 | * @drive: drive | 110 | * @drive: drive |
| 142 | * @pio: PIO mode number | 111 | * @pio: PIO mode number |
| @@ -263,6 +232,9 @@ static void piix_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 263 | } else | 232 | } else |
| 264 | pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); | 233 | pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); |
| 265 | } else { | 234 | } else { |
| 235 | const u8 mwdma_to_pio[] = { 0, 3, 4 }; | ||
| 236 | u8 pio; | ||
| 237 | |||
| 266 | if (reg48 & u_flag) | 238 | if (reg48 & u_flag) |
| 267 | pci_write_config_byte(dev, 0x48, reg48 & ~u_flag); | 239 | pci_write_config_byte(dev, 0x48, reg48 & ~u_flag); |
| 268 | if (reg4a & a_speed) | 240 | if (reg4a & a_speed) |
| @@ -271,30 +243,14 @@ static void piix_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 271 | pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); | 243 | pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); |
| 272 | if (reg55 & w_flag) | 244 | if (reg55 & w_flag) |
| 273 | pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag); | 245 | pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag); |
| 274 | } | ||
| 275 | 246 | ||
| 276 | piix_set_pio_mode(drive, piix_dma_2_pio(speed)); | 247 | if (speed >= XFER_MW_DMA_0) |
| 277 | } | 248 | pio = mwdma_to_pio[speed - XFER_MW_DMA_0]; |
| 278 | 249 | else | |
| 279 | /** | 250 | pio = 2; /* only SWDMA2 is allowed */ |
| 280 | * piix_config_drive_xfer_rate - set up an IDE device | ||
| 281 | * @drive: IDE drive to configure | ||
| 282 | * | ||
| 283 | * Set up the PIIX interface for the best available speed on this | ||
| 284 | * interface, preferring DMA to PIO. | ||
| 285 | */ | ||
| 286 | |||
| 287 | static int piix_config_drive_xfer_rate (ide_drive_t *drive) | ||
| 288 | { | ||
| 289 | drive->init_speed = 0; | ||
| 290 | 251 | ||
| 291 | if (ide_tune_dma(drive)) | 252 | piix_set_pio_mode(drive, pio); |
| 292 | return 0; | 253 | } |
| 293 | |||
| 294 | if (ide_use_fast_pio(drive)) | ||
| 295 | ide_set_max_pio(drive); | ||
| 296 | |||
| 297 | return -1; | ||
| 298 | } | 254 | } |
| 299 | 255 | ||
| 300 | /** | 256 | /** |
| @@ -428,8 +384,6 @@ static void __devinit init_hwif_piix(ide_hwif_t *hwif) | |||
| 428 | return; | 384 | return; |
| 429 | } | 385 | } |
| 430 | 386 | ||
| 431 | hwif->autodma = 0; | ||
| 432 | |||
| 433 | hwif->set_pio_mode = &piix_set_pio_mode; | 387 | hwif->set_pio_mode = &piix_set_pio_mode; |
| 434 | hwif->set_dma_mode = &piix_set_dma_mode; | 388 | hwif->set_dma_mode = &piix_set_dma_mode; |
| 435 | 389 | ||
| @@ -456,13 +410,6 @@ static void __devinit init_hwif_piix(ide_hwif_t *hwif) | |||
| 456 | 410 | ||
| 457 | if (no_piix_dma) | 411 | if (no_piix_dma) |
| 458 | hwif->ultra_mask = hwif->mwdma_mask = hwif->swdma_mask = 0; | 412 | hwif->ultra_mask = hwif->mwdma_mask = hwif->swdma_mask = 0; |
| 459 | |||
| 460 | hwif->ide_dma_check = &piix_config_drive_xfer_rate; | ||
| 461 | if (!noautodma) | ||
| 462 | hwif->autodma = 1; | ||
| 463 | |||
| 464 | hwif->drives[1].autodma = hwif->autodma; | ||
| 465 | hwif->drives[0].autodma = hwif->autodma; | ||
| 466 | } | 413 | } |
| 467 | 414 | ||
| 468 | #define DECLARE_PIIX_DEV(name_str, udma) \ | 415 | #define DECLARE_PIIX_DEV(name_str, udma) \ |
| @@ -565,34 +512,34 @@ static void __devinit piix_check_450nx(void) | |||
| 565 | printk(KERN_WARNING "piix: A BIOS update may resolve this.\n"); | 512 | printk(KERN_WARNING "piix: A BIOS update may resolve this.\n"); |
| 566 | } | 513 | } |
| 567 | 514 | ||
| 568 | static struct pci_device_id piix_pci_tbl[] = { | 515 | static const struct pci_device_id piix_pci_tbl[] = { |
| 569 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 516 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371FB_0), 0 }, |
| 570 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 517 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371FB_1), 1 }, |
| 571 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, | 518 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371MX), 2 }, |
| 572 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, | 519 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371SB_1), 3 }, |
| 573 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, | 520 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371AB), 4 }, |
| 574 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5}, | 521 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801AB_1), 5 }, |
| 575 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6}, | 522 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82443MX_1), 6 }, |
| 576 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7}, | 523 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801AA_1), 7 }, |
| 577 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82372FB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8}, | 524 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82372FB_1), 8 }, |
| 578 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9}, | 525 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82451NX), 9 }, |
| 579 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10}, | 526 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801BA_9), 10 }, |
| 580 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11}, | 527 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801BA_8), 11 }, |
| 581 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10,PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12}, | 528 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801CA_10), 12 }, |
| 582 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_11,PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13}, | 529 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801CA_11), 13 }, |
| 583 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_11,PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14}, | 530 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_11), 14 }, |
| 584 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_11,PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15}, | 531 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801EB_11), 15 }, |
| 585 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801E_11, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16}, | 532 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801E_11), 16 }, |
| 586 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_10,PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17}, | 533 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_10), 17 }, |
| 587 | #ifdef CONFIG_BLK_DEV_IDE_SATA | 534 | #ifdef CONFIG_BLK_DEV_IDE_SATA |
| 588 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18}, | 535 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801EB_1), 18 }, |
| 589 | #endif | 536 | #endif |
| 590 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19}, | 537 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ESB_2), 19 }, |
| 591 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_19, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20}, | 538 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH6_19), 20 }, |
| 592 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 21}, | 539 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH7_21), 21 }, |
| 593 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 22}, | 540 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_1), 22 }, |
| 594 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_18, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 23}, | 541 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ESB2_18), 23 }, |
| 595 | { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 24}, | 542 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH8_6), 24 }, |
| 596 | { 0, }, | 543 | { 0, }, |
| 597 | }; | 544 | }; |
| 598 | MODULE_DEVICE_TABLE(pci, piix_pci_tbl); | 545 | MODULE_DEVICE_TABLE(pci, piix_pci_tbl); |
diff --git a/drivers/ide/pci/rz1000.c b/drivers/ide/pci/rz1000.c index 10e1ae7a4a02..3f506e8d44e3 100644 --- a/drivers/ide/pci/rz1000.c +++ b/drivers/ide/pci/rz1000.c | |||
| @@ -61,9 +61,9 @@ static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 61 | return ide_setup_pci_device(dev, &rz1000_chipset); | 61 | return ide_setup_pci_device(dev, &rz1000_chipset); |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | static struct pci_device_id rz1000_pci_tbl[] = { | 64 | static const struct pci_device_id rz1000_pci_tbl[] = { |
| 65 | { PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 65 | { PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000), 0 }, |
| 66 | { PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 66 | { PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001), 0 }, |
| 67 | { 0, }, | 67 | { 0, }, |
| 68 | }; | 68 | }; |
| 69 | MODULE_DEVICE_TABLE(pci, rz1000_pci_tbl); | 69 | MODULE_DEVICE_TABLE(pci, rz1000_pci_tbl); |
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c index ee0e3f554d9a..54c5c98a2e26 100644 --- a/drivers/ide/pci/sc1200.c +++ b/drivers/ide/pci/sc1200.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/sc1200.c Version 0.95 Jun 16 2007 | 2 | * linux/drivers/ide/pci/sc1200.c Version 0.97 Aug 3 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2000-2002 Mark Lord <mlord@pobox.com> | 4 | * Copyright (C) 2000-2002 Mark Lord <mlord@pobox.com> |
| 5 | * Copyright (C) 2007 Bartlomiej Zolnierkiewicz | 5 | * Copyright (C) 2007 Bartlomiej Zolnierkiewicz |
| @@ -199,19 +199,6 @@ static void sc1200_set_dma_mode(ide_drive_t *drive, const u8 mode) | |||
| 199 | } | 199 | } |
| 200 | } | 200 | } |
| 201 | 201 | ||
| 202 | /* | ||
| 203 | * sc1200_config_dma() handles selection/setting of DMA/UDMA modes | ||
| 204 | * for both the chipset and drive. | ||
| 205 | */ | ||
| 206 | static int sc1200_config_dma (ide_drive_t *drive) | ||
| 207 | { | ||
| 208 | if (ide_tune_dma(drive)) | ||
| 209 | return 0; | ||
| 210 | |||
| 211 | return 1; | ||
| 212 | } | ||
| 213 | |||
| 214 | |||
| 215 | /* Replacement for the standard ide_dma_end action in | 202 | /* Replacement for the standard ide_dma_end action in |
| 216 | * dma_proc. | 203 | * dma_proc. |
| 217 | * | 204 | * |
| @@ -377,27 +364,22 @@ static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif) | |||
| 377 | { | 364 | { |
| 378 | if (hwif->mate) | 365 | if (hwif->mate) |
| 379 | hwif->serialized = hwif->mate->serialized = 1; | 366 | hwif->serialized = hwif->mate->serialized = 1; |
| 380 | hwif->autodma = 0; | ||
| 381 | 367 | ||
| 382 | hwif->set_pio_mode = &sc1200_set_pio_mode; | 368 | hwif->set_pio_mode = &sc1200_set_pio_mode; |
| 383 | hwif->set_dma_mode = &sc1200_set_dma_mode; | 369 | hwif->set_dma_mode = &sc1200_set_dma_mode; |
| 384 | 370 | ||
| 371 | hwif->drives[0].autotune = 1; | ||
| 372 | hwif->drives[1].autotune = 1; | ||
| 373 | |||
| 385 | if (hwif->dma_base == 0) | 374 | if (hwif->dma_base == 0) |
| 386 | return; | 375 | return; |
| 387 | 376 | ||
| 388 | hwif->udma_filter = sc1200_udma_filter; | 377 | hwif->udma_filter = sc1200_udma_filter; |
| 389 | hwif->ide_dma_check = &sc1200_config_dma; | ||
| 390 | hwif->ide_dma_end = &sc1200_ide_dma_end; | 378 | hwif->ide_dma_end = &sc1200_ide_dma_end; |
| 391 | 379 | ||
| 392 | if (!noautodma) | ||
| 393 | hwif->autodma = 1; | ||
| 394 | |||
| 395 | hwif->atapi_dma = 1; | 380 | hwif->atapi_dma = 1; |
| 396 | hwif->ultra_mask = 0x07; | 381 | hwif->ultra_mask = 0x07; |
| 397 | hwif->mwdma_mask = 0x07; | 382 | hwif->mwdma_mask = 0x07; |
| 398 | |||
| 399 | hwif->drives[0].autodma = hwif->autodma; | ||
| 400 | hwif->drives[1].autodma = hwif->autodma; | ||
| 401 | } | 383 | } |
| 402 | 384 | ||
| 403 | static ide_pci_device_t sc1200_chipset __devinitdata = { | 385 | static ide_pci_device_t sc1200_chipset __devinitdata = { |
| @@ -414,8 +396,8 @@ static int __devinit sc1200_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 414 | return ide_setup_pci_device(dev, &sc1200_chipset); | 396 | return ide_setup_pci_device(dev, &sc1200_chipset); |
| 415 | } | 397 | } |
| 416 | 398 | ||
| 417 | static struct pci_device_id sc1200_pci_tbl[] = { | 399 | static const struct pci_device_id sc1200_pci_tbl[] = { |
| 418 | { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SCx200_IDE), 0}, | 400 | { PCI_VDEVICE(NS, PCI_DEVICE_ID_NS_SCx200_IDE), 0}, |
| 419 | { 0, }, | 401 | { 0, }, |
| 420 | }; | 402 | }; |
| 421 | MODULE_DEVICE_TABLE(pci, sc1200_pci_tbl); | 403 | MODULE_DEVICE_TABLE(pci, sc1200_pci_tbl); |
diff --git a/drivers/ide/pci/scc_pata.c b/drivers/ide/pci/scc_pata.c index 67f06dd11b34..bd4c1d3070e4 100644 --- a/drivers/ide/pci/scc_pata.c +++ b/drivers/ide/pci/scc_pata.c | |||
| @@ -284,28 +284,6 @@ static void scc_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 284 | } | 284 | } |
| 285 | 285 | ||
| 286 | /** | 286 | /** |
| 287 | * scc_configure_drive_for_dma - set up for DMA transfers | ||
| 288 | * @drive: drive we are going to set up | ||
| 289 | * | ||
| 290 | * Set up the drive for DMA, tune the controller and drive as | ||
| 291 | * required. | ||
| 292 | * If the drive isn't suitable for DMA or we hit other problems | ||
| 293 | * then we will drop down to PIO and set up PIO appropriately. | ||
| 294 | * (return -1) | ||
| 295 | */ | ||
| 296 | |||
| 297 | static int scc_config_drive_for_dma(ide_drive_t *drive) | ||
| 298 | { | ||
| 299 | if (ide_tune_dma(drive)) | ||
| 300 | return 0; | ||
| 301 | |||
| 302 | if (ide_use_fast_pio(drive)) | ||
| 303 | ide_set_max_pio(drive); | ||
| 304 | |||
| 305 | return -1; | ||
| 306 | } | ||
| 307 | |||
| 308 | /** | ||
| 309 | * scc_ide_dma_setup - begin a DMA phase | 287 | * scc_ide_dma_setup - begin a DMA phase |
| 310 | * @drive: target device | 288 | * @drive: target device |
| 311 | * | 289 | * |
| @@ -702,7 +680,6 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif) | |||
| 702 | hwif->ide_dma_end = scc_ide_dma_end; | 680 | hwif->ide_dma_end = scc_ide_dma_end; |
| 703 | hwif->set_pio_mode = scc_set_pio_mode; | 681 | hwif->set_pio_mode = scc_set_pio_mode; |
| 704 | hwif->set_dma_mode = scc_set_dma_mode; | 682 | hwif->set_dma_mode = scc_set_dma_mode; |
| 705 | hwif->ide_dma_check = scc_config_drive_for_dma; | ||
| 706 | hwif->ide_dma_test_irq = scc_dma_test_irq; | 683 | hwif->ide_dma_test_irq = scc_dma_test_irq; |
| 707 | hwif->udma_filter = scc_udma_filter; | 684 | hwif->udma_filter = scc_udma_filter; |
| 708 | 685 | ||
| @@ -720,12 +697,6 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif) | |||
| 720 | 697 | ||
| 721 | /* we support 80c cable only. */ | 698 | /* we support 80c cable only. */ |
| 722 | hwif->cbl = ATA_CBL_PATA80; | 699 | hwif->cbl = ATA_CBL_PATA80; |
| 723 | |||
| 724 | hwif->autodma = 0; | ||
| 725 | if (!noautodma) | ||
| 726 | hwif->autodma = 1; | ||
| 727 | hwif->drives[0].autodma = hwif->autodma; | ||
| 728 | hwif->drives[1].autodma = hwif->autodma; | ||
| 729 | } | 700 | } |
| 730 | 701 | ||
| 731 | #define DECLARE_SCC_DEV(name_str) \ | 702 | #define DECLARE_SCC_DEV(name_str) \ |
| @@ -793,8 +764,8 @@ static void __devexit scc_remove(struct pci_dev *dev) | |||
| 793 | memset(ports, 0, sizeof(*ports)); | 764 | memset(ports, 0, sizeof(*ports)); |
| 794 | } | 765 | } |
| 795 | 766 | ||
| 796 | static struct pci_device_id scc_pci_tbl[] = { | 767 | static const struct pci_device_id scc_pci_tbl[] = { |
| 797 | { PCI_VENDOR_ID_TOSHIBA_2, PCI_DEVICE_ID_TOSHIBA_SCC_ATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 768 | { PCI_VDEVICE(TOSHIBA_2, PCI_DEVICE_ID_TOSHIBA_SCC_ATA), 0 }, |
| 798 | { 0, }, | 769 | { 0, }, |
| 799 | }; | 770 | }; |
| 800 | MODULE_DEVICE_TABLE(pci, scc_pci_tbl); | 771 | MODULE_DEVICE_TABLE(pci, scc_pci_tbl); |
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index 49ec0ac64a4b..d3ffc52e22af 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c | |||
| @@ -97,6 +97,7 @@ static u8 svwks_udma_filter(ide_drive_t *drive) | |||
| 97 | mode = 2; | 97 | mode = 2; |
| 98 | 98 | ||
| 99 | switch(mode) { | 99 | switch(mode) { |
| 100 | case 3: mask = 0x3f; break; | ||
| 100 | case 2: mask = 0x1f; break; | 101 | case 2: mask = 0x1f; break; |
| 101 | case 1: mask = 0x07; break; | 102 | case 1: mask = 0x07; break; |
| 102 | default: mask = 0x00; break; | 103 | default: mask = 0x00; break; |
| @@ -195,19 +196,6 @@ static void svwks_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 195 | pci_write_config_byte(dev, 0x54, ultra_enable); | 196 | pci_write_config_byte(dev, 0x54, ultra_enable); |
| 196 | } | 197 | } |
| 197 | 198 | ||
| 198 | static int svwks_config_drive_xfer_rate (ide_drive_t *drive) | ||
| 199 | { | ||
| 200 | drive->init_speed = 0; | ||
| 201 | |||
| 202 | if (ide_tune_dma(drive)) | ||
| 203 | return 0; | ||
| 204 | |||
| 205 | if (ide_use_fast_pio(drive)) | ||
| 206 | ide_set_max_pio(drive); | ||
| 207 | |||
| 208 | return -1; | ||
| 209 | } | ||
| 210 | |||
| 211 | static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const char *name) | 199 | static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const char *name) |
| 212 | { | 200 | { |
| 213 | unsigned int reg; | 201 | unsigned int reg; |
| @@ -386,23 +374,16 @@ static void __devinit init_hwif_svwks (ide_hwif_t *hwif) | |||
| 386 | 374 | ||
| 387 | hwif->mwdma_mask = 0x07; | 375 | hwif->mwdma_mask = 0x07; |
| 388 | 376 | ||
| 389 | hwif->autodma = 0; | ||
| 390 | |||
| 391 | hwif->drives[0].autotune = 1; | 377 | hwif->drives[0].autotune = 1; |
| 392 | hwif->drives[1].autotune = 1; | 378 | hwif->drives[1].autotune = 1; |
| 393 | 379 | ||
| 394 | if (!hwif->dma_base) | 380 | if (!hwif->dma_base) |
| 395 | return; | 381 | return; |
| 396 | 382 | ||
| 397 | hwif->ide_dma_check = &svwks_config_drive_xfer_rate; | ||
| 398 | if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { | 383 | if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { |
| 399 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 384 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 400 | hwif->cbl = ata66_svwks(hwif); | 385 | hwif->cbl = ata66_svwks(hwif); |
| 401 | } | 386 | } |
| 402 | if (!noautodma) | ||
| 403 | hwif->autodma = 1; | ||
| 404 | |||
| 405 | hwif->drives[0].autodma = hwif->drives[1].autodma = 1; | ||
| 406 | } | 387 | } |
| 407 | 388 | ||
| 408 | static int __devinit init_setup_svwks (struct pci_dev *dev, ide_pci_device_t *d) | 389 | static int __devinit init_setup_svwks (struct pci_dev *dev, ide_pci_device_t *d) |
| @@ -490,12 +471,12 @@ static int __devinit svwks_init_one(struct pci_dev *dev, const struct pci_device | |||
| 490 | return d->init_setup(dev, d); | 471 | return d->init_setup(dev, d); |
| 491 | } | 472 | } |
| 492 | 473 | ||
| 493 | static struct pci_device_id svwks_pci_tbl[] = { | 474 | static const struct pci_device_id svwks_pci_tbl[] = { |
| 494 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 475 | { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE), 0 }, |
| 495 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 476 | { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE), 1 }, |
| 496 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, | 477 | { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE), 2 }, |
| 497 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3}, | 478 | { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2), 3 }, |
| 498 | { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4}, | 479 | { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE), 4 }, |
| 499 | { 0, }, | 480 | { 0, }, |
| 500 | }; | 481 | }; |
| 501 | MODULE_DEVICE_TABLE(pci, svwks_pci_tbl); | 482 | MODULE_DEVICE_TABLE(pci, svwks_pci_tbl); |
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c index c74fef6bbc91..9a9474f534e5 100644 --- a/drivers/ide/pci/sgiioc4.c +++ b/drivers/ide/pci/sgiioc4.c | |||
| @@ -296,20 +296,6 @@ static void sgiioc4_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 296 | { | 296 | { |
| 297 | } | 297 | } |
| 298 | 298 | ||
| 299 | static int sgiioc4_ide_dma_check(ide_drive_t *drive) | ||
| 300 | { | ||
| 301 | if (ide_tune_dma(drive)) | ||
| 302 | return 0; | ||
| 303 | |||
| 304 | /* | ||
| 305 | * ->set_pio_mode is not implemented currently | ||
| 306 | * so this is just for the completness | ||
| 307 | */ | ||
| 308 | ide_set_max_pio(drive); | ||
| 309 | |||
| 310 | return -1; | ||
| 311 | } | ||
| 312 | |||
| 313 | /* returns 1 if dma irq issued, 0 otherwise */ | 299 | /* returns 1 if dma irq issued, 0 otherwise */ |
| 314 | static int | 300 | static int |
| 315 | sgiioc4_ide_dma_test_irq(ide_drive_t * drive) | 301 | sgiioc4_ide_dma_test_irq(ide_drive_t * drive) |
| @@ -612,7 +598,6 @@ ide_init_sgiioc4(ide_hwif_t * hwif) | |||
| 612 | hwif->dma_setup = &sgiioc4_ide_dma_setup; | 598 | hwif->dma_setup = &sgiioc4_ide_dma_setup; |
| 613 | hwif->dma_start = &sgiioc4_ide_dma_start; | 599 | hwif->dma_start = &sgiioc4_ide_dma_start; |
| 614 | hwif->ide_dma_end = &sgiioc4_ide_dma_end; | 600 | hwif->ide_dma_end = &sgiioc4_ide_dma_end; |
| 615 | hwif->ide_dma_check = &sgiioc4_ide_dma_check; | ||
| 616 | hwif->ide_dma_on = &sgiioc4_ide_dma_on; | 601 | hwif->ide_dma_on = &sgiioc4_ide_dma_on; |
| 617 | hwif->dma_off_quietly = &sgiioc4_dma_off_quietly; | 602 | hwif->dma_off_quietly = &sgiioc4_dma_off_quietly; |
| 618 | hwif->ide_dma_test_irq = &sgiioc4_ide_dma_test_irq; | 603 | hwif->ide_dma_test_irq = &sgiioc4_ide_dma_test_irq; |
| @@ -689,12 +674,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
| 689 | /* Initializing chipset IRQ Registers */ | 674 | /* Initializing chipset IRQ Registers */ |
| 690 | writel(0x03, (void __iomem *)(irqport + IOC4_INTR_SET * 4)); | 675 | writel(0x03, (void __iomem *)(irqport + IOC4_INTR_SET * 4)); |
| 691 | 676 | ||
| 692 | hwif->autodma = 0; | 677 | if (dma_base == 0 || ide_dma_sgiioc4(hwif, dma_base)) |
| 693 | |||
| 694 | if (dma_base && ide_dma_sgiioc4(hwif, dma_base) == 0) { | ||
| 695 | hwif->autodma = 1; | ||
| 696 | hwif->drives[1].autodma = hwif->drives[0].autodma = 1; | ||
| 697 | } else | ||
| 698 | printk(KERN_INFO "%s: %s Bus-Master DMA disabled\n", | 678 | printk(KERN_INFO "%s: %s Bus-Master DMA disabled\n", |
| 699 | hwif->name, DRV_NAME); | 679 | hwif->name, DRV_NAME); |
| 700 | 680 | ||
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index ce7784996d12..85d0afd00e66 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c | |||
| @@ -311,27 +311,6 @@ static void sil_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 311 | } | 311 | } |
| 312 | } | 312 | } |
| 313 | 313 | ||
| 314 | /** | ||
| 315 | * siimage_configure_drive_for_dma - set up for DMA transfers | ||
| 316 | * @drive: drive we are going to set up | ||
| 317 | * | ||
| 318 | * Set up the drive for DMA, tune the controller and drive as | ||
| 319 | * required. If the drive isn't suitable for DMA or we hit | ||
| 320 | * other problems then we will drop down to PIO and set up | ||
| 321 | * PIO appropriately | ||
| 322 | */ | ||
| 323 | |||
| 324 | static int siimage_config_drive_for_dma (ide_drive_t *drive) | ||
| 325 | { | ||
| 326 | if (ide_tune_dma(drive)) | ||
| 327 | return 0; | ||
| 328 | |||
| 329 | if (ide_use_fast_pio(drive)) | ||
| 330 | ide_set_max_pio(drive); | ||
| 331 | |||
| 332 | return -1; | ||
| 333 | } | ||
| 334 | |||
| 335 | /* returns 1 if dma irq issued, 0 otherwise */ | 314 | /* returns 1 if dma irq issued, 0 otherwise */ |
| 336 | static int siimage_io_ide_dma_test_irq (ide_drive_t *drive) | 315 | static int siimage_io_ide_dma_test_irq (ide_drive_t *drive) |
| 337 | { | 316 | { |
| @@ -894,8 +873,6 @@ static u8 __devinit ata66_siimage(ide_hwif_t *hwif) | |||
| 894 | 873 | ||
| 895 | static void __devinit init_hwif_siimage(ide_hwif_t *hwif) | 874 | static void __devinit init_hwif_siimage(ide_hwif_t *hwif) |
| 896 | { | 875 | { |
| 897 | hwif->autodma = 0; | ||
| 898 | |||
| 899 | hwif->resetproc = &siimage_reset; | 876 | hwif->resetproc = &siimage_reset; |
| 900 | hwif->set_pio_mode = &sil_set_pio_mode; | 877 | hwif->set_pio_mode = &sil_set_pio_mode; |
| 901 | hwif->set_dma_mode = &sil_set_dma_mode; | 878 | hwif->set_dma_mode = &sil_set_dma_mode; |
| @@ -925,8 +902,6 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif) | |||
| 925 | if (!is_sata(hwif)) | 902 | if (!is_sata(hwif)) |
| 926 | hwif->atapi_dma = 1; | 903 | hwif->atapi_dma = 1; |
| 927 | 904 | ||
| 928 | hwif->ide_dma_check = &siimage_config_drive_for_dma; | ||
| 929 | |||
| 930 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 905 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 931 | hwif->cbl = ata66_siimage(hwif); | 906 | hwif->cbl = ata66_siimage(hwif); |
| 932 | 907 | ||
| @@ -935,15 +910,6 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif) | |||
| 935 | } else { | 910 | } else { |
| 936 | hwif->ide_dma_test_irq = & siimage_io_ide_dma_test_irq; | 911 | hwif->ide_dma_test_irq = & siimage_io_ide_dma_test_irq; |
| 937 | } | 912 | } |
| 938 | |||
| 939 | /* | ||
| 940 | * The BIOS often doesn't set up DMA on this controller | ||
| 941 | * so we always do it. | ||
| 942 | */ | ||
| 943 | |||
| 944 | hwif->autodma = 1; | ||
| 945 | hwif->drives[0].autodma = hwif->autodma; | ||
| 946 | hwif->drives[1].autodma = hwif->autodma; | ||
| 947 | } | 913 | } |
| 948 | 914 | ||
| 949 | #define DECLARE_SII_DEV(name_str) \ | 915 | #define DECLARE_SII_DEV(name_str) \ |
| @@ -978,11 +944,11 @@ static int __devinit siimage_init_one(struct pci_dev *dev, const struct pci_devi | |||
| 978 | return ide_setup_pci_device(dev, &siimage_chipsets[id->driver_data]); | 944 | return ide_setup_pci_device(dev, &siimage_chipsets[id->driver_data]); |
| 979 | } | 945 | } |
| 980 | 946 | ||
| 981 | static struct pci_device_id siimage_pci_tbl[] = { | 947 | static const struct pci_device_id siimage_pci_tbl[] = { |
| 982 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 948 | { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_680), 0 }, |
| 983 | #ifdef CONFIG_BLK_DEV_IDE_SATA | 949 | #ifdef CONFIG_BLK_DEV_IDE_SATA |
| 984 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_3112, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 950 | { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_3112), 1 }, |
| 985 | { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_1210SA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2}, | 951 | { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_1210SA), 2 }, |
| 986 | #endif | 952 | #endif |
| 987 | { 0, }, | 953 | { 0, }, |
| 988 | }; | 954 | }; |
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index b375ee53d66d..5a54e2e20b3c 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/sis5513.c Version 0.27 Jul 14, 2007 | 2 | * linux/drivers/ide/pci/sis5513.c Version 0.31 Aug 9, 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 1999-2000 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 1999-2000 Andre Hedrick <andre@linux-ide.org> |
| 5 | * Copyright (C) 2002 Lionel Bouton <Lionel.Bouton@inet6.fr>, Maintainer | 5 | * Copyright (C) 2002 Lionel Bouton <Lionel.Bouton@inet6.fr>, Maintainer |
| @@ -65,8 +65,6 @@ | |||
| 65 | 65 | ||
| 66 | #include "ide-timing.h" | 66 | #include "ide-timing.h" |
| 67 | 67 | ||
| 68 | #define DISPLAY_SIS_TIMINGS | ||
| 69 | |||
| 70 | /* registers layout and init values are chipset family dependant */ | 68 | /* registers layout and init values are chipset family dependant */ |
| 71 | 69 | ||
| 72 | #define ATA_16 0x01 | 70 | #define ATA_16 0x01 |
| @@ -193,362 +191,124 @@ static char* chipset_capability[] = { | |||
| 193 | "ATA 133 (1st gen)", "ATA 133 (2nd gen)" | 191 | "ATA 133 (1st gen)", "ATA 133 (2nd gen)" |
| 194 | }; | 192 | }; |
| 195 | 193 | ||
| 196 | #if defined(DISPLAY_SIS_TIMINGS) && defined(CONFIG_IDE_PROC_FS) | 194 | /* |
| 197 | #include <linux/stat.h> | 195 | * Configuration functions |
| 198 | #include <linux/proc_fs.h> | 196 | */ |
| 199 | |||
| 200 | static u8 sis_proc = 0; | ||
| 201 | |||
| 202 | static struct pci_dev *bmide_dev; | ||
| 203 | |||
| 204 | static char* cable_type[] = { | ||
| 205 | "80 pins", | ||
| 206 | "40 pins" | ||
| 207 | }; | ||
| 208 | 197 | ||
| 209 | static char* recovery_time[] ={ | 198 | static u8 sis_ata133_get_base(ide_drive_t *drive) |
| 210 | "12 PCICLK", "1 PCICLK", | 199 | { |
| 211 | "2 PCICLK", "3 PCICLK", | 200 | struct pci_dev *dev = drive->hwif->pci_dev; |
| 212 | "4 PCICLK", "5 PCICLCK", | 201 | u32 reg54 = 0; |
| 213 | "6 PCICLK", "7 PCICLCK", | ||
| 214 | "8 PCICLK", "9 PCICLCK", | ||
| 215 | "10 PCICLK", "11 PCICLK", | ||
| 216 | "13 PCICLK", "14 PCICLK", | ||
| 217 | "15 PCICLK", "15 PCICLK" | ||
| 218 | }; | ||
| 219 | 202 | ||
| 220 | static char* active_time[] = { | 203 | pci_read_config_dword(dev, 0x54, ®54); |
| 221 | "8 PCICLK", "1 PCICLCK", | ||
| 222 | "2 PCICLK", "3 PCICLK", | ||
| 223 | "4 PCICLK", "5 PCICLK", | ||
| 224 | "6 PCICLK", "12 PCICLK" | ||
| 225 | }; | ||
| 226 | 204 | ||
| 227 | static char* cycle_time[] = { | 205 | return ((reg54 & 0x40000000) ? 0x70 : 0x40) + drive->dn * 4; |
| 228 | "Reserved", "2 CLK", | 206 | } |
| 229 | "3 CLK", "4 CLK", | ||
| 230 | "5 CLK", "6 CLK", | ||
| 231 | "7 CLK", "8 CLK", | ||
| 232 | "9 CLK", "10 CLK", | ||
| 233 | "11 CLK", "12 CLK", | ||
| 234 | "13 CLK", "14 CLK", | ||
| 235 | "15 CLK", "16 CLK" | ||
| 236 | }; | ||
| 237 | 207 | ||
| 238 | /* Generic add master or slave info function */ | 208 | static void sis_ata16_program_timings(ide_drive_t *drive, const u8 mode) |
| 239 | static char* get_drives_info (char *buffer, u8 pos) | ||
| 240 | { | 209 | { |
| 241 | u8 reg00, reg01, reg10, reg11; /* timing registers */ | 210 | struct pci_dev *dev = drive->hwif->pci_dev; |
| 242 | u32 regdw0, regdw1; | 211 | u16 t1 = 0; |
| 243 | char* p = buffer; | 212 | u8 drive_pci = 0x40 + drive->dn * 2; |
| 244 | |||
| 245 | /* Postwrite/Prefetch */ | ||
| 246 | if (chipset_family < ATA_133) { | ||
| 247 | pci_read_config_byte(bmide_dev, 0x4b, ®00); | ||
| 248 | p += sprintf(p, "Drive %d: Postwrite %s \t \t Postwrite %s\n", | ||
| 249 | pos, (reg00 & (0x10 << pos)) ? "Enabled" : "Disabled", | ||
| 250 | (reg00 & (0x40 << pos)) ? "Enabled" : "Disabled"); | ||
| 251 | p += sprintf(p, " Prefetch %s \t \t Prefetch %s\n", | ||
| 252 | (reg00 & (0x01 << pos)) ? "Enabled" : "Disabled", | ||
| 253 | (reg00 & (0x04 << pos)) ? "Enabled" : "Disabled"); | ||
| 254 | pci_read_config_byte(bmide_dev, 0x40+2*pos, ®00); | ||
| 255 | pci_read_config_byte(bmide_dev, 0x41+2*pos, ®01); | ||
| 256 | pci_read_config_byte(bmide_dev, 0x44+2*pos, ®10); | ||
| 257 | pci_read_config_byte(bmide_dev, 0x45+2*pos, ®11); | ||
| 258 | } else { | ||
| 259 | u32 reg54h; | ||
| 260 | u8 drive_pci = 0x40; | ||
| 261 | pci_read_config_dword(bmide_dev, 0x54, ®54h); | ||
| 262 | if (reg54h & 0x40000000) { | ||
| 263 | // Configuration space remapped to 0x70 | ||
| 264 | drive_pci = 0x70; | ||
| 265 | } | ||
| 266 | pci_read_config_dword(bmide_dev, (unsigned long)drive_pci+4*pos, ®dw0); | ||
| 267 | pci_read_config_dword(bmide_dev, (unsigned long)drive_pci+4*pos+8, ®dw1); | ||
| 268 | 213 | ||
| 269 | p += sprintf(p, "Drive %d:\n", pos); | 214 | const u16 pio_timings[] = { 0x000, 0x607, 0x404, 0x303, 0x301 }; |
| 270 | } | 215 | const u16 mwdma_timings[] = { 0x008, 0x302, 0x301 }; |
| 271 | 216 | ||
| 217 | pci_read_config_word(dev, drive_pci, &t1); | ||
| 272 | 218 | ||
| 273 | /* UDMA */ | 219 | /* clear active/recovery timings */ |
| 274 | if (chipset_family >= ATA_133) { | 220 | t1 &= ~0x070f; |
| 275 | p += sprintf(p, " UDMA %s \t \t \t UDMA %s\n", | 221 | if (mode >= XFER_MW_DMA_0) { |
| 276 | (regdw0 & 0x04) ? "Enabled" : "Disabled", | 222 | if (chipset_family > ATA_16) |
| 277 | (regdw1 & 0x04) ? "Enabled" : "Disabled"); | 223 | t1 &= ~0x8000; /* disable UDMA */ |
| 278 | p += sprintf(p, " UDMA Cycle Time %s \t UDMA Cycle Time %s\n", | 224 | t1 |= mwdma_timings[mode - XFER_MW_DMA_0]; |
| 279 | cycle_time[(regdw0 & 0xF0) >> 4], | 225 | } else |
| 280 | cycle_time[(regdw1 & 0xF0) >> 4]); | 226 | t1 |= pio_timings[mode - XFER_PIO_0]; |
| 281 | } else if (chipset_family >= ATA_33) { | ||
| 282 | p += sprintf(p, " UDMA %s \t \t \t UDMA %s\n", | ||
| 283 | (reg01 & 0x80) ? "Enabled" : "Disabled", | ||
| 284 | (reg11 & 0x80) ? "Enabled" : "Disabled"); | ||
| 285 | |||
| 286 | p += sprintf(p, " UDMA Cycle Time "); | ||
| 287 | switch(chipset_family) { | ||
| 288 | case ATA_33: p += sprintf(p, cycle_time[(reg01 & 0x60) >> 5]); break; | ||
| 289 | case ATA_66: | ||
| 290 | case ATA_100a: p += sprintf(p, cycle_time[(reg01 & 0x70) >> 4]); break; | ||
| 291 | case ATA_100: | ||
| 292 | case ATA_133a: p += sprintf(p, cycle_time[reg01 & 0x0F]); break; | ||
| 293 | default: p += sprintf(p, "?"); break; | ||
| 294 | } | ||
| 295 | p += sprintf(p, " \t UDMA Cycle Time "); | ||
| 296 | switch(chipset_family) { | ||
| 297 | case ATA_33: p += sprintf(p, cycle_time[(reg11 & 0x60) >> 5]); break; | ||
| 298 | case ATA_66: | ||
| 299 | case ATA_100a: p += sprintf(p, cycle_time[(reg11 & 0x70) >> 4]); break; | ||
| 300 | case ATA_100: | ||
| 301 | case ATA_133a: p += sprintf(p, cycle_time[reg11 & 0x0F]); break; | ||
| 302 | default: p += sprintf(p, "?"); break; | ||
| 303 | } | ||
| 304 | p += sprintf(p, "\n"); | ||
| 305 | } | ||
| 306 | 227 | ||
| 228 | pci_write_config_word(dev, drive_pci, t1); | ||
| 229 | } | ||
| 307 | 230 | ||
| 308 | if (chipset_family < ATA_133) { /* else case TODO */ | 231 | static void sis_ata100_program_timings(ide_drive_t *drive, const u8 mode) |
| 232 | { | ||
| 233 | struct pci_dev *dev = drive->hwif->pci_dev; | ||
| 234 | u8 t1, drive_pci = 0x40 + drive->dn * 2; | ||
| 309 | 235 | ||
| 310 | /* Data Active */ | 236 | /* timing bits: 7:4 active 3:0 recovery */ |
| 311 | p += sprintf(p, " Data Active Time "); | 237 | const u8 pio_timings[] = { 0x00, 0x67, 0x44, 0x33, 0x31 }; |
| 312 | switch(chipset_family) { | 238 | const u8 mwdma_timings[] = { 0x08, 0x32, 0x31 }; |
| 313 | case ATA_16: /* confirmed */ | ||
| 314 | case ATA_33: | ||
| 315 | case ATA_66: | ||
| 316 | case ATA_100a: p += sprintf(p, active_time[reg01 & 0x07]); break; | ||
| 317 | case ATA_100: | ||
| 318 | case ATA_133a: p += sprintf(p, active_time[(reg00 & 0x70) >> 4]); break; | ||
| 319 | default: p += sprintf(p, "?"); break; | ||
| 320 | } | ||
| 321 | p += sprintf(p, " \t Data Active Time "); | ||
| 322 | switch(chipset_family) { | ||
| 323 | case ATA_16: | ||
| 324 | case ATA_33: | ||
| 325 | case ATA_66: | ||
| 326 | case ATA_100a: p += sprintf(p, active_time[reg11 & 0x07]); break; | ||
| 327 | case ATA_100: | ||
| 328 | case ATA_133a: p += sprintf(p, active_time[(reg10 & 0x70) >> 4]); break; | ||
| 329 | default: p += sprintf(p, "?"); break; | ||
| 330 | } | ||
| 331 | p += sprintf(p, "\n"); | ||
| 332 | 239 | ||
| 333 | /* Data Recovery */ | 240 | if (mode >= XFER_MW_DMA_0) { |
| 334 | /* warning: may need (reg&0x07) for pre ATA66 chips */ | 241 | u8 t2 = 0; |
| 335 | p += sprintf(p, " Data Recovery Time %s \t Data Recovery Time %s\n", | ||
| 336 | recovery_time[reg00 & 0x0f], recovery_time[reg10 & 0x0f]); | ||
| 337 | } | ||
| 338 | 242 | ||
| 339 | return p; | 243 | pci_read_config_byte(dev, drive_pci, &t2); |
| 340 | } | 244 | t2 &= ~0x80; /* disable UDMA */ |
| 245 | pci_write_config_byte(dev, drive_pci, t2); | ||
| 341 | 246 | ||
| 342 | static char* get_masters_info(char* buffer) | 247 | t1 = mwdma_timings[mode - XFER_MW_DMA_0]; |
| 343 | { | 248 | } else |
| 344 | return get_drives_info(buffer, 0); | 249 | t1 = pio_timings[mode - XFER_PIO_0]; |
| 345 | } | ||
| 346 | 250 | ||
| 347 | static char* get_slaves_info(char* buffer) | 251 | pci_write_config_byte(dev, drive_pci + 1, t1); |
| 348 | { | ||
| 349 | return get_drives_info(buffer, 1); | ||
| 350 | } | 252 | } |
| 351 | 253 | ||
| 352 | /* Main get_info, called on /proc/ide/sis reads */ | 254 | static void sis_ata133_program_timings(ide_drive_t *drive, const u8 mode) |
| 353 | static int sis_get_info (char *buffer, char **addr, off_t offset, int count) | ||
| 354 | { | 255 | { |
| 355 | char *p = buffer; | 256 | struct pci_dev *dev = drive->hwif->pci_dev; |
| 356 | int len; | 257 | u32 t1 = 0; |
| 357 | u8 reg; | 258 | u8 drive_pci = sis_ata133_get_base(drive), clk, idx; |
| 358 | u16 reg2, reg3; | ||
| 359 | |||
| 360 | p += sprintf(p, "\nSiS 5513 "); | ||
| 361 | switch(chipset_family) { | ||
| 362 | case ATA_16: p += sprintf(p, "DMA 16"); break; | ||
| 363 | case ATA_33: p += sprintf(p, "Ultra 33"); break; | ||
| 364 | case ATA_66: p += sprintf(p, "Ultra 66"); break; | ||
| 365 | case ATA_100a: | ||
| 366 | case ATA_100: p += sprintf(p, "Ultra 100"); break; | ||
| 367 | case ATA_133a: | ||
| 368 | case ATA_133: p += sprintf(p, "Ultra 133"); break; | ||
| 369 | default: p+= sprintf(p, "Unknown???"); break; | ||
| 370 | } | ||
| 371 | p += sprintf(p, " chipset\n"); | ||
| 372 | p += sprintf(p, "--------------- Primary Channel " | ||
| 373 | "---------------- Secondary Channel " | ||
| 374 | "-------------\n"); | ||
| 375 | |||
| 376 | /* Status */ | ||
| 377 | pci_read_config_byte(bmide_dev, 0x4a, ®); | ||
| 378 | if (chipset_family == ATA_133) { | ||
| 379 | pci_read_config_word(bmide_dev, 0x50, ®2); | ||
| 380 | pci_read_config_word(bmide_dev, 0x52, ®3); | ||
| 381 | } | ||
| 382 | p += sprintf(p, "Channel Status: "); | ||
| 383 | if (chipset_family < ATA_66) { | ||
| 384 | p += sprintf(p, "%s \t \t \t \t %s\n", | ||
| 385 | (reg & 0x04) ? "On" : "Off", | ||
| 386 | (reg & 0x02) ? "On" : "Off"); | ||
| 387 | } else if (chipset_family < ATA_133) { | ||
| 388 | p += sprintf(p, "%s \t \t \t \t %s \n", | ||
| 389 | (reg & 0x02) ? "On" : "Off", | ||
| 390 | (reg & 0x04) ? "On" : "Off"); | ||
| 391 | } else { /* ATA_133 */ | ||
| 392 | p += sprintf(p, "%s \t \t \t \t %s \n", | ||
| 393 | (reg2 & 0x02) ? "On" : "Off", | ||
| 394 | (reg3 & 0x02) ? "On" : "Off"); | ||
| 395 | } | ||
| 396 | |||
| 397 | /* Operation Mode */ | ||
| 398 | pci_read_config_byte(bmide_dev, 0x09, ®); | ||
| 399 | p += sprintf(p, "Operation Mode: %s \t \t \t %s \n", | ||
| 400 | (reg & 0x01) ? "Native" : "Compatible", | ||
| 401 | (reg & 0x04) ? "Native" : "Compatible"); | ||
| 402 | 259 | ||
| 403 | /* 80-pin cable ? */ | 260 | pci_read_config_dword(dev, drive_pci, &t1); |
| 404 | if (chipset_family >= ATA_133) { | ||
| 405 | p += sprintf(p, "Cable Type: %s \t \t \t %s\n", | ||
| 406 | (reg2 & 0x01) ? cable_type[1] : cable_type[0], | ||
| 407 | (reg3 & 0x01) ? cable_type[1] : cable_type[0]); | ||
| 408 | } else if (chipset_family > ATA_33) { | ||
| 409 | pci_read_config_byte(bmide_dev, 0x48, ®); | ||
| 410 | p += sprintf(p, "Cable Type: %s \t \t \t %s\n", | ||
| 411 | (reg & 0x10) ? cable_type[1] : cable_type[0], | ||
| 412 | (reg & 0x20) ? cable_type[1] : cable_type[0]); | ||
| 413 | } | ||
| 414 | 261 | ||
| 415 | /* Prefetch Count */ | 262 | t1 &= 0xc0c00fff; |
| 416 | if (chipset_family < ATA_133) { | 263 | clk = (t1 & 0x08) ? ATA_133 : ATA_100; |
| 417 | pci_read_config_word(bmide_dev, 0x4c, ®2); | 264 | if (mode >= XFER_MW_DMA_0) { |
| 418 | pci_read_config_word(bmide_dev, 0x4e, ®3); | 265 | t1 &= ~0x04; /* disable UDMA */ |
| 419 | p += sprintf(p, "Prefetch Count: %d \t \t \t \t %d\n", | 266 | idx = mode - XFER_MW_DMA_0 + 5; |
| 420 | reg2, reg3); | ||
| 421 | } | 267 | } |
| 268 | idx = mode - XFER_PIO_0; | ||
| 269 | t1 |= ini_time_value[clk][idx] << 12; | ||
| 270 | t1 |= act_time_value[clk][idx] << 16; | ||
| 271 | t1 |= rco_time_value[clk][idx] << 24; | ||
| 422 | 272 | ||
| 423 | p = get_masters_info(p); | 273 | pci_write_config_dword(dev, drive_pci, t1); |
| 424 | p = get_slaves_info(p); | 274 | } |
| 425 | |||
| 426 | len = (p - buffer) - offset; | ||
| 427 | *addr = buffer + offset; | ||
| 428 | 275 | ||
| 429 | return len > count ? count : len; | 276 | static void sis_program_timings(ide_drive_t *drive, const u8 mode) |
| 277 | { | ||
| 278 | if (chipset_family < ATA_100) /* ATA_16/33/66/100a */ | ||
| 279 | sis_ata16_program_timings(drive, mode); | ||
| 280 | else if (chipset_family < ATA_133) /* ATA_100/133a */ | ||
| 281 | sis_ata100_program_timings(drive, mode); | ||
| 282 | else /* ATA_133 */ | ||
| 283 | sis_ata133_program_timings(drive, mode); | ||
| 430 | } | 284 | } |
| 431 | #endif /* defined(DISPLAY_SIS_TIMINGS) && defined(CONFIG_IDE_PROC_FS) */ | ||
| 432 | 285 | ||
| 433 | /* | ||
| 434 | * Configuration functions | ||
| 435 | */ | ||
| 436 | /* Enables per-drive prefetch and postwrite */ | ||
| 437 | static void config_drive_art_rwp (ide_drive_t *drive) | 286 | static void config_drive_art_rwp (ide_drive_t *drive) |
| 438 | { | 287 | { |
| 439 | ide_hwif_t *hwif = HWIF(drive); | 288 | ide_hwif_t *hwif = HWIF(drive); |
| 440 | struct pci_dev *dev = hwif->pci_dev; | 289 | struct pci_dev *dev = hwif->pci_dev; |
| 441 | |||
| 442 | u8 reg4bh = 0; | 290 | u8 reg4bh = 0; |
| 443 | u8 rw_prefetch = (0x11 << drive->dn); | 291 | u8 rw_prefetch = 0; |
| 444 | 292 | ||
| 445 | if (drive->media != ide_disk) | ||
| 446 | return; | ||
| 447 | pci_read_config_byte(dev, 0x4b, ®4bh); | 293 | pci_read_config_byte(dev, 0x4b, ®4bh); |
| 448 | 294 | ||
| 449 | if ((reg4bh & rw_prefetch) != rw_prefetch) | 295 | if (drive->media == ide_disk) |
| 296 | rw_prefetch = 0x11 << drive->dn; | ||
| 297 | |||
| 298 | if ((reg4bh & (0x11 << drive->dn)) != rw_prefetch) | ||
| 450 | pci_write_config_byte(dev, 0x4b, reg4bh|rw_prefetch); | 299 | pci_write_config_byte(dev, 0x4b, reg4bh|rw_prefetch); |
| 451 | } | 300 | } |
| 452 | 301 | ||
| 453 | /* Set per-drive active and recovery time */ | ||
| 454 | static void sis_set_pio_mode(ide_drive_t *drive, const u8 pio) | 302 | static void sis_set_pio_mode(ide_drive_t *drive, const u8 pio) |
| 455 | { | 303 | { |
| 456 | ide_hwif_t *hwif = HWIF(drive); | ||
| 457 | struct pci_dev *dev = hwif->pci_dev; | ||
| 458 | |||
| 459 | u8 drive_pci, test1, test2; | ||
| 460 | |||
| 461 | config_drive_art_rwp(drive); | 304 | config_drive_art_rwp(drive); |
| 462 | 305 | sis_program_timings(drive, XFER_PIO_0 + pio); | |
| 463 | /* In pre ATA_133 case, drives sit at 0x40 + 4*drive->dn */ | ||
| 464 | drive_pci = 0x40; | ||
| 465 | /* In SiS962 case drives sit at (0x40 or 0x70) + 8*drive->dn) */ | ||
| 466 | if (chipset_family >= ATA_133) { | ||
| 467 | u32 reg54h; | ||
| 468 | pci_read_config_dword(dev, 0x54, ®54h); | ||
| 469 | if (reg54h & 0x40000000) drive_pci = 0x70; | ||
| 470 | drive_pci += ((drive->dn)*0x4); | ||
| 471 | } else { | ||
| 472 | drive_pci += ((drive->dn)*0x2); | ||
| 473 | } | ||
| 474 | |||
| 475 | /* register layout changed with newer ATA100 chips */ | ||
| 476 | if (chipset_family < ATA_100) { | ||
| 477 | pci_read_config_byte(dev, drive_pci, &test1); | ||
| 478 | pci_read_config_byte(dev, drive_pci+1, &test2); | ||
| 479 | |||
| 480 | /* Clear active and recovery timings */ | ||
| 481 | test1 &= ~0x0F; | ||
| 482 | test2 &= ~0x07; | ||
| 483 | |||
| 484 | switch(pio) { | ||
| 485 | case 4: test1 |= 0x01; test2 |= 0x03; break; | ||
| 486 | case 3: test1 |= 0x03; test2 |= 0x03; break; | ||
| 487 | case 2: test1 |= 0x04; test2 |= 0x04; break; | ||
| 488 | case 1: test1 |= 0x07; test2 |= 0x06; break; | ||
| 489 | case 0: /* PIO0: register setting == X000 */ | ||
| 490 | default: break; | ||
| 491 | } | ||
| 492 | pci_write_config_byte(dev, drive_pci, test1); | ||
| 493 | pci_write_config_byte(dev, drive_pci+1, test2); | ||
| 494 | } else if (chipset_family < ATA_133) { | ||
| 495 | switch(pio) { /* active recovery | ||
| 496 | v v */ | ||
| 497 | case 4: test1 = 0x30|0x01; break; | ||
| 498 | case 3: test1 = 0x30|0x03; break; | ||
| 499 | case 2: test1 = 0x40|0x04; break; | ||
| 500 | case 1: test1 = 0x60|0x07; break; | ||
| 501 | case 0: test1 = 0x00; break; | ||
| 502 | default: break; | ||
| 503 | } | ||
| 504 | pci_write_config_byte(dev, drive_pci, test1); | ||
| 505 | } else { /* ATA_133 */ | ||
| 506 | u32 test3; | ||
| 507 | pci_read_config_dword(dev, drive_pci, &test3); | ||
| 508 | test3 &= 0xc0c00fff; | ||
| 509 | if (test3 & 0x08) { | ||
| 510 | test3 |= ini_time_value[ATA_133][pio] << 12; | ||
| 511 | test3 |= act_time_value[ATA_133][pio] << 16; | ||
| 512 | test3 |= rco_time_value[ATA_133][pio] << 24; | ||
| 513 | } else { | ||
| 514 | test3 |= ini_time_value[ATA_100][pio] << 12; | ||
| 515 | test3 |= act_time_value[ATA_100][pio] << 16; | ||
| 516 | test3 |= rco_time_value[ATA_100][pio] << 24; | ||
| 517 | } | ||
| 518 | pci_write_config_dword(dev, drive_pci, test3); | ||
| 519 | } | ||
| 520 | } | 306 | } |
| 521 | 307 | ||
| 522 | static void sis_set_dma_mode(ide_drive_t *drive, const u8 speed) | 308 | static void sis_set_dma_mode(ide_drive_t *drive, const u8 speed) |
| 523 | { | 309 | { |
| 524 | ide_hwif_t *hwif = HWIF(drive); | 310 | ide_hwif_t *hwif = HWIF(drive); |
| 525 | struct pci_dev *dev = hwif->pci_dev; | 311 | struct pci_dev *dev = hwif->pci_dev; |
| 526 | u32 regdw; | ||
| 527 | u8 drive_pci, reg; | ||
| 528 | |||
| 529 | /* See sis_set_pio_mode() for drive PCI config registers */ | ||
| 530 | drive_pci = 0x40; | ||
| 531 | if (chipset_family >= ATA_133) { | ||
| 532 | u32 reg54h; | ||
| 533 | pci_read_config_dword(dev, 0x54, ®54h); | ||
| 534 | if (reg54h & 0x40000000) drive_pci = 0x70; | ||
| 535 | drive_pci += ((drive->dn)*0x4); | ||
| 536 | pci_read_config_dword(dev, (unsigned long)drive_pci, ®dw); | ||
| 537 | /* Disable UDMA bit for non UDMA modes on UDMA chips */ | ||
| 538 | if (speed < XFER_UDMA_0) { | ||
| 539 | regdw &= 0xfffffffb; | ||
| 540 | pci_write_config_dword(dev, (unsigned long)drive_pci, regdw); | ||
| 541 | } | ||
| 542 | |||
| 543 | } else { | ||
| 544 | drive_pci += ((drive->dn)*0x2); | ||
| 545 | pci_read_config_byte(dev, drive_pci+1, ®); | ||
| 546 | /* Disable UDMA bit for non UDMA modes on UDMA chips */ | ||
| 547 | if ((speed < XFER_UDMA_0) && (chipset_family > ATA_16)) { | ||
| 548 | reg &= 0x7F; | ||
| 549 | pci_write_config_byte(dev, drive_pci+1, reg); | ||
| 550 | } | ||
| 551 | } | ||
| 552 | 312 | ||
| 553 | /* Config chip for mode */ | 313 | /* Config chip for mode */ |
| 554 | switch(speed) { | 314 | switch(speed) { |
| @@ -560,6 +320,10 @@ static void sis_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 560 | case XFER_UDMA_1: | 320 | case XFER_UDMA_1: |
| 561 | case XFER_UDMA_0: | 321 | case XFER_UDMA_0: |
| 562 | if (chipset_family >= ATA_133) { | 322 | if (chipset_family >= ATA_133) { |
| 323 | u32 regdw = 0; | ||
| 324 | u8 drive_pci = sis_ata133_get_base(drive); | ||
| 325 | |||
| 326 | pci_read_config_dword(dev, drive_pci, ®dw); | ||
| 563 | regdw |= 0x04; | 327 | regdw |= 0x04; |
| 564 | regdw &= 0xfffff00f; | 328 | regdw &= 0xfffff00f; |
| 565 | /* check if ATA133 enable */ | 329 | /* check if ATA133 enable */ |
| @@ -572,6 +336,9 @@ static void sis_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 572 | } | 336 | } |
| 573 | pci_write_config_dword(dev, (unsigned long)drive_pci, regdw); | 337 | pci_write_config_dword(dev, (unsigned long)drive_pci, regdw); |
| 574 | } else { | 338 | } else { |
| 339 | u8 drive_pci = 0x40 + drive->dn * 2, reg = 0; | ||
| 340 | |||
| 341 | pci_read_config_byte(dev, drive_pci+1, ®); | ||
| 575 | /* Force the UDMA bit on if we want to use UDMA */ | 342 | /* Force the UDMA bit on if we want to use UDMA */ |
| 576 | reg |= 0x80; | 343 | reg |= 0x80; |
| 577 | /* clean reg cycle time bits */ | 344 | /* clean reg cycle time bits */ |
| @@ -586,9 +353,7 @@ static void sis_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 586 | case XFER_MW_DMA_2: | 353 | case XFER_MW_DMA_2: |
| 587 | case XFER_MW_DMA_1: | 354 | case XFER_MW_DMA_1: |
| 588 | case XFER_MW_DMA_0: | 355 | case XFER_MW_DMA_0: |
| 589 | case XFER_SW_DMA_2: | 356 | sis_program_timings(drive, speed); |
| 590 | case XFER_SW_DMA_1: | ||
| 591 | case XFER_SW_DMA_0: | ||
| 592 | break; | 357 | break; |
| 593 | default: | 358 | default: |
| 594 | BUG(); | 359 | BUG(); |
| @@ -596,32 +361,12 @@ static void sis_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 596 | } | 361 | } |
| 597 | } | 362 | } |
| 598 | 363 | ||
| 599 | static int sis5513_config_xfer_rate(ide_drive_t *drive) | ||
| 600 | { | ||
| 601 | /* | ||
| 602 | * TODO: always set PIO mode and remove this | ||
| 603 | */ | ||
| 604 | ide_set_max_pio(drive); | ||
| 605 | |||
| 606 | drive->init_speed = 0; | ||
| 607 | |||
| 608 | if (ide_tune_dma(drive)) | ||
| 609 | return 0; | ||
| 610 | |||
| 611 | if (ide_use_fast_pio(drive)) | ||
| 612 | ide_set_max_pio(drive); | ||
| 613 | |||
| 614 | return -1; | ||
| 615 | } | ||
| 616 | |||
| 617 | static u8 sis5513_ata133_udma_filter(ide_drive_t *drive) | 364 | static u8 sis5513_ata133_udma_filter(ide_drive_t *drive) |
| 618 | { | 365 | { |
| 619 | struct pci_dev *dev = drive->hwif->pci_dev; | 366 | struct pci_dev *dev = drive->hwif->pci_dev; |
| 620 | int drive_pci; | 367 | u32 regdw = 0; |
| 621 | u32 reg54 = 0, regdw = 0; | 368 | u8 drive_pci = sis_ata133_get_base(drive); |
| 622 | 369 | ||
| 623 | pci_read_config_dword(dev, 0x54, ®54); | ||
| 624 | drive_pci = ((reg54 & 0x40000000) ? 0x70 : 0x40) + drive->dn * 4; | ||
| 625 | pci_read_config_dword(dev, drive_pci, ®dw); | 370 | pci_read_config_dword(dev, drive_pci, ®dw); |
| 626 | 371 | ||
| 627 | /* if ATA133 disable, we should not set speed above UDMA5 */ | 372 | /* if ATA133 disable, we should not set speed above UDMA5 */ |
| @@ -767,14 +512,6 @@ static unsigned int __devinit init_chipset_sis5513 (struct pci_dev *dev, const c | |||
| 767 | } | 512 | } |
| 768 | break; | 513 | break; |
| 769 | } | 514 | } |
| 770 | |||
| 771 | #if defined(DISPLAY_SIS_TIMINGS) && defined(CONFIG_IDE_PROC_FS) | ||
| 772 | if (!sis_proc) { | ||
| 773 | sis_proc = 1; | ||
| 774 | bmide_dev = dev; | ||
| 775 | ide_pci_create_host_proc("sis", sis_get_info); | ||
| 776 | } | ||
| 777 | #endif | ||
| 778 | } | 515 | } |
| 779 | 516 | ||
| 780 | return 0; | 517 | return 0; |
| @@ -827,8 +564,6 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif) | |||
| 827 | { | 564 | { |
| 828 | u8 udma_rates[] = { 0x00, 0x00, 0x07, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f }; | 565 | u8 udma_rates[] = { 0x00, 0x00, 0x07, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f }; |
| 829 | 566 | ||
| 830 | hwif->autodma = 0; | ||
| 831 | |||
| 832 | if (!hwif->irq) | 567 | if (!hwif->irq) |
| 833 | hwif->irq = hwif->channel ? 15 : 14; | 568 | hwif->irq = hwif->channel ? 15 : 14; |
| 834 | 569 | ||
| @@ -838,32 +573,19 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif) | |||
| 838 | if (chipset_family >= ATA_133) | 573 | if (chipset_family >= ATA_133) |
| 839 | hwif->udma_filter = sis5513_ata133_udma_filter; | 574 | hwif->udma_filter = sis5513_ata133_udma_filter; |
| 840 | 575 | ||
| 841 | if (!(hwif->dma_base)) { | 576 | hwif->drives[0].autotune = 1; |
| 842 | hwif->drives[0].autotune = 1; | 577 | hwif->drives[1].autotune = 1; |
| 843 | hwif->drives[1].autotune = 1; | 578 | |
| 579 | if (hwif->dma_base == 0) | ||
| 844 | return; | 580 | return; |
| 845 | } | ||
| 846 | 581 | ||
| 847 | hwif->atapi_dma = 1; | 582 | hwif->atapi_dma = 1; |
| 848 | 583 | ||
| 849 | hwif->ultra_mask = udma_rates[chipset_family]; | 584 | hwif->ultra_mask = udma_rates[chipset_family]; |
| 850 | hwif->mwdma_mask = 0x07; | 585 | hwif->mwdma_mask = 0x07; |
| 851 | hwif->swdma_mask = 0x07; | ||
| 852 | |||
| 853 | if (!chipset_family) | ||
| 854 | return; | ||
| 855 | 586 | ||
| 856 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 587 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 857 | hwif->cbl = ata66_sis5513(hwif); | 588 | hwif->cbl = ata66_sis5513(hwif); |
| 858 | |||
| 859 | if (chipset_family > ATA_16) { | ||
| 860 | hwif->ide_dma_check = &sis5513_config_xfer_rate; | ||
| 861 | if (!noautodma) | ||
| 862 | hwif->autodma = 1; | ||
| 863 | } | ||
| 864 | hwif->drives[0].autodma = hwif->autodma; | ||
| 865 | hwif->drives[1].autodma = hwif->autodma; | ||
| 866 | return; | ||
| 867 | } | 589 | } |
| 868 | 590 | ||
| 869 | static ide_pci_device_t sis5513_chipset __devinitdata = { | 591 | static ide_pci_device_t sis5513_chipset __devinitdata = { |
| @@ -881,10 +603,10 @@ static int __devinit sis5513_init_one(struct pci_dev *dev, const struct pci_devi | |||
| 881 | return ide_setup_pci_device(dev, &sis5513_chipset); | 603 | return ide_setup_pci_device(dev, &sis5513_chipset); |
| 882 | } | 604 | } |
| 883 | 605 | ||
| 884 | static struct pci_device_id sis5513_pci_tbl[] = { | 606 | static const struct pci_device_id sis5513_pci_tbl[] = { |
| 885 | { PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 607 | { PCI_VDEVICE(SI, PCI_DEVICE_ID_SI_5513), 0 }, |
| 886 | { PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5518, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 608 | { PCI_VDEVICE(SI, PCI_DEVICE_ID_SI_5518), 0 }, |
| 887 | { PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_1180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 609 | { PCI_VDEVICE(SI, PCI_DEVICE_ID_SI_1180), 0 }, |
| 888 | { 0, }, | 610 | { 0, }, |
| 889 | }; | 611 | }; |
| 890 | MODULE_DEVICE_TABLE(pci, sis5513_pci_tbl); | 612 | MODULE_DEVICE_TABLE(pci, sis5513_pci_tbl); |
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c index 2ef26e3f7be4..771efb8884c8 100644 --- a/drivers/ide/pci/sl82c105.c +++ b/drivers/ide/pci/sl82c105.c | |||
| @@ -145,19 +145,6 @@ static void sl82c105_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | /* | 147 | /* |
| 148 | * Check to see if the drive and chipset are capable of DMA mode. | ||
| 149 | */ | ||
| 150 | static int sl82c105_ide_dma_check(ide_drive_t *drive) | ||
| 151 | { | ||
| 152 | DBG(("sl82c105_ide_dma_check(drive:%s)\n", drive->name)); | ||
| 153 | |||
| 154 | if (ide_tune_dma(drive)) | ||
| 155 | return 0; | ||
| 156 | |||
| 157 | return -1; | ||
| 158 | } | ||
| 159 | |||
| 160 | /* | ||
| 161 | * The SL82C105 holds off all IDE interrupts while in DMA mode until | 148 | * The SL82C105 holds off all IDE interrupts while in DMA mode until |
| 162 | * all DMA activity is completed. Sometimes this causes problems (eg, | 149 | * all DMA activity is completed. Sometimes this causes problems (eg, |
| 163 | * when the drive wants to report an error condition). | 150 | * when the drive wants to report an error condition). |
| @@ -404,17 +391,12 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) | |||
| 404 | hwif->atapi_dma = 1; | 391 | hwif->atapi_dma = 1; |
| 405 | hwif->mwdma_mask = 0x07; | 392 | hwif->mwdma_mask = 0x07; |
| 406 | 393 | ||
| 407 | hwif->ide_dma_check = &sl82c105_ide_dma_check; | ||
| 408 | hwif->ide_dma_on = &sl82c105_ide_dma_on; | 394 | hwif->ide_dma_on = &sl82c105_ide_dma_on; |
| 409 | hwif->dma_off_quietly = &sl82c105_dma_off_quietly; | 395 | hwif->dma_off_quietly = &sl82c105_dma_off_quietly; |
| 410 | hwif->dma_lost_irq = &sl82c105_dma_lost_irq; | 396 | hwif->dma_lost_irq = &sl82c105_dma_lost_irq; |
| 411 | hwif->dma_start = &sl82c105_dma_start; | 397 | hwif->dma_start = &sl82c105_dma_start; |
| 412 | hwif->dma_timeout = &sl82c105_dma_timeout; | 398 | hwif->dma_timeout = &sl82c105_dma_timeout; |
| 413 | 399 | ||
| 414 | if (!noautodma) | ||
| 415 | hwif->autodma = 1; | ||
| 416 | hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; | ||
| 417 | |||
| 418 | if (hwif->mate) | 400 | if (hwif->mate) |
| 419 | hwif->serialized = hwif->mate->serialized = 1; | 401 | hwif->serialized = hwif->mate->serialized = 1; |
| 420 | } | 402 | } |
| @@ -434,8 +416,8 @@ static int __devinit sl82c105_init_one(struct pci_dev *dev, const struct pci_dev | |||
| 434 | return ide_setup_pci_device(dev, &sl82c105_chipset); | 416 | return ide_setup_pci_device(dev, &sl82c105_chipset); |
| 435 | } | 417 | } |
| 436 | 418 | ||
| 437 | static struct pci_device_id sl82c105_pci_tbl[] = { | 419 | static const struct pci_device_id sl82c105_pci_tbl[] = { |
| 438 | { PCI_DEVICE(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105), 0}, | 420 | { PCI_VDEVICE(WINBOND, PCI_DEVICE_ID_WINBOND_82C105), 0 }, |
| 439 | { 0, }, | 421 | { 0, }, |
| 440 | }; | 422 | }; |
| 441 | MODULE_DEVICE_TABLE(pci, sl82c105_pci_tbl); | 423 | MODULE_DEVICE_TABLE(pci, sl82c105_pci_tbl); |
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index ebac87f7200a..fa8df6d43832 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/drivers/ide/pci/slc90e66.c Version 0.16 Jul 14, 2007 | 2 | * linux/drivers/ide/pci/slc90e66.c Version 0.18 Aug 9, 2007 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> |
| 5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> |
| @@ -21,27 +21,6 @@ | |||
| 21 | 21 | ||
| 22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
| 23 | 23 | ||
| 24 | static u8 slc90e66_dma_2_pio (u8 xfer_rate) { | ||
| 25 | switch(xfer_rate) { | ||
| 26 | case XFER_UDMA_4: | ||
| 27 | case XFER_UDMA_3: | ||
| 28 | case XFER_UDMA_2: | ||
| 29 | case XFER_UDMA_1: | ||
| 30 | case XFER_UDMA_0: | ||
| 31 | case XFER_MW_DMA_2: | ||
| 32 | return 4; | ||
| 33 | case XFER_MW_DMA_1: | ||
| 34 | return 3; | ||
| 35 | case XFER_SW_DMA_2: | ||
| 36 | return 2; | ||
| 37 | case XFER_MW_DMA_0: | ||
| 38 | case XFER_SW_DMA_1: | ||
| 39 | case XFER_SW_DMA_0: | ||
| 40 | default: | ||
| 41 | return 0; | ||
| 42 | } | ||
| 43 | } | ||
| 44 | |||
| 45 | static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) | 24 | static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) |
| 46 | { | 25 | { |
| 47 | ide_hwif_t *hwif = HWIF(drive); | 26 | ide_hwif_t *hwif = HWIF(drive); |
| @@ -132,26 +111,21 @@ static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
| 132 | pci_write_config_word(dev, 0x4a, reg4a|u_speed); | 111 | pci_write_config_word(dev, 0x4a, reg4a|u_speed); |
| 133 | } | 112 | } |
| 134 | } else { | 113 | } else { |
| 114 | const u8 mwdma_to_pio[] = { 0, 3, 4 }; | ||
| 115 | u8 pio; | ||
| 116 | |||
| 135 | if (reg48 & u_flag) | 117 | if (reg48 & u_flag) |
| 136 | pci_write_config_word(dev, 0x48, reg48 & ~u_flag); | 118 | pci_write_config_word(dev, 0x48, reg48 & ~u_flag); |
| 137 | if (reg4a & a_speed) | 119 | if (reg4a & a_speed) |
| 138 | pci_write_config_word(dev, 0x4a, reg4a & ~a_speed); | 120 | pci_write_config_word(dev, 0x4a, reg4a & ~a_speed); |
| 139 | } | ||
| 140 | |||
| 141 | slc90e66_set_pio_mode(drive, slc90e66_dma_2_pio(speed)); | ||
| 142 | } | ||
| 143 | 121 | ||
| 144 | static int slc90e66_config_drive_xfer_rate (ide_drive_t *drive) | 122 | if (speed >= XFER_MW_DMA_0) |
| 145 | { | 123 | pio = mwdma_to_pio[speed - XFER_MW_DMA_0]; |
| 146 | drive->init_speed = 0; | 124 | else |
| 147 | 125 | pio = 2; /* only SWDMA2 is allowed */ | |
| 148 | if (ide_tune_dma(drive)) | ||
| 149 | return 0; | ||
| 150 | |||
| 151 | if (ide_use_fast_pio(drive)) | ||
| 152 | ide_set_max_pio(drive); | ||
| 153 | 126 | ||
| 154 | return -1; | 127 | slc90e66_set_pio_mode(drive, pio); |
| 128 | } | ||
| 155 | } | 129 | } |
| 156 | 130 | ||
| 157 | static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) | 131 | static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) |
| @@ -159,8 +133,6 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) | |||
| 159 | u8 reg47 = 0; | 133 | u8 reg47 = 0; |
| 160 | u8 mask = hwif->channel ? 0x01 : 0x02; /* bit0:Primary */ | 134 | u8 mask = hwif->channel ? 0x01 : 0x02; /* bit0:Primary */ |
| 161 | 135 | ||
| 162 | hwif->autodma = 0; | ||
| 163 | |||
| 164 | if (!hwif->irq) | 136 | if (!hwif->irq) |
| 165 | hwif->irq = hwif->channel ? 15 : 14; | 137 | hwif->irq = hwif->channel ? 15 : 14; |
| 166 | 138 | ||
| @@ -169,11 +141,11 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) | |||
| 169 | 141 | ||
| 170 | pci_read_config_byte(hwif->pci_dev, 0x47, ®47); | 142 | pci_read_config_byte(hwif->pci_dev, 0x47, ®47); |
| 171 | 143 | ||
| 172 | if (!hwif->dma_base) { | 144 | hwif->drives[0].autotune = 1; |
| 173 | hwif->drives[0].autotune = 1; | 145 | hwif->drives[1].autotune = 1; |
| 174 | hwif->drives[1].autotune = 1; | 146 | |
| 147 | if (hwif->dma_base == 0) | ||
| 175 | return; | 148 | return; |
| 176 | } | ||
| 177 | 149 | ||
| 178 | hwif->atapi_dma = 1; | 150 | hwif->atapi_dma = 1; |
| 179 | hwif->ultra_mask = 0x1f; | 151 | hwif->ultra_mask = 0x1f; |
| @@ -183,13 +155,6 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) | |||
| 183 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 155 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 184 | /* bit[0(1)]: 0:80, 1:40 */ | 156 | /* bit[0(1)]: 0:80, 1:40 */ |
| 185 | hwif->cbl = (reg47 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | 157 | hwif->cbl = (reg47 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; |
| 186 | |||
| 187 | hwif->ide_dma_check = &slc90e66_config_drive_xfer_rate; | ||
| 188 | |||
| 189 | if (!noautodma) | ||
| 190 | hwif->autodma = 1; | ||
| 191 | hwif->drives[0].autodma = hwif->autodma; | ||
| 192 | hwif->drives[1].autodma = hwif->autodma; | ||
| 193 | } | 158 | } |
| 194 | 159 | ||
| 195 | static ide_pci_device_t slc90e66_chipset __devinitdata = { | 160 | static ide_pci_device_t slc90e66_chipset __devinitdata = { |
| @@ -206,8 +171,8 @@ static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_dev | |||
| 206 | return ide_setup_pci_device(dev, &slc90e66_chipset); | 171 | return ide_setup_pci_device(dev, &slc90e66_chipset); |
| 207 | } | 172 | } |
| 208 | 173 | ||
| 209 | static struct pci_device_id slc90e66_pci_tbl[] = { | 174 | static const struct pci_device_id slc90e66_pci_tbl[] = { |
| 210 | { PCI_DEVICE(PCI_VENDOR_ID_EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_1), 0}, | 175 | { PCI_VDEVICE(EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_1), 0 }, |
| 211 | { 0, }, | 176 | { 0, }, |
| 212 | }; | 177 | }; |
| 213 | MODULE_DEVICE_TABLE(pci, slc90e66_pci_tbl); | 178 | MODULE_DEVICE_TABLE(pci, slc90e66_pci_tbl); |
diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c index 840415d68d38..de62db576adc 100644 --- a/drivers/ide/pci/tc86c001.c +++ b/drivers/ide/pci/tc86c001.c | |||
| @@ -162,17 +162,6 @@ static int tc86c001_busproc(ide_drive_t *drive, int state) | |||
| 162 | return 0; | 162 | return 0; |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | static int tc86c001_config_drive_xfer_rate(ide_drive_t *drive) | ||
| 166 | { | ||
| 167 | if (ide_tune_dma(drive)) | ||
| 168 | return 0; | ||
| 169 | |||
| 170 | if (ide_use_fast_pio(drive)) | ||
| 171 | ide_set_max_pio(drive); | ||
| 172 | |||
| 173 | return -1; | ||
| 174 | } | ||
| 175 | |||
| 176 | static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) | 165 | static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) |
| 177 | { | 166 | { |
| 178 | unsigned long sc_base = pci_resource_start(hwif->pci_dev, 5); | 167 | unsigned long sc_base = pci_resource_start(hwif->pci_dev, 5); |
| @@ -213,7 +202,6 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) | |||
| 213 | hwif->ultra_mask = 0x1f; | 202 | hwif->ultra_mask = 0x1f; |
| 214 | hwif->mwdma_mask = 0x07; | 203 | hwif->mwdma_mask = 0x07; |
| 215 | 204 | ||
| 216 | hwif->ide_dma_check = &tc86c001_config_drive_xfer_rate; | ||
| 217 | hwif->dma_start = &tc86c001_dma_start; | 205 | hwif->dma_start = &tc86c001_dma_start; |
| 218 | 206 | ||
| 219 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) { | 207 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) { |
| @@ -224,10 +212,6 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) | |||
| 224 | scr1 = hwif->INW(sc_base + 0x00); | 212 | scr1 = hwif->INW(sc_base + 0x00); |
| 225 | hwif->cbl = (scr1 & 0x2000) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; | 213 | hwif->cbl = (scr1 & 0x2000) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; |
| 226 | } | 214 | } |
| 227 | |||
| 228 | if (!noautodma) | ||
| 229 | hwif->autodma = 1; | ||
| 230 | hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma; | ||
| 231 | } | 215 | } |
| 232 | 216 | ||
| 233 | static unsigned int __devinit init_chipset_tc86c001(struct pci_dev *dev, | 217 | static unsigned int __devinit init_chipset_tc86c001(struct pci_dev *dev, |
| @@ -256,9 +240,8 @@ static int __devinit tc86c001_init_one(struct pci_dev *dev, | |||
| 256 | return ide_setup_pci_device(dev, &tc86c001_chipset); | 240 | return ide_setup_pci_device(dev, &tc86c001_chipset); |
| 257 | } | 241 | } |
| 258 | 242 | ||
| 259 | static struct pci_device_id tc86c001_pci_tbl[] = { | 243 | static const struct pci_device_id tc86c001_pci_tbl[] = { |
| 260 | { PCI_VENDOR_ID_TOSHIBA_2, PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE, | 244 | { PCI_VDEVICE(TOSHIBA_2, PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE), 0 }, |
| 261 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | ||
| 262 | { 0, } | 245 | { 0, } |
| 263 | }; | 246 | }; |
| 264 | MODULE_DEVICE_TABLE(pci, tc86c001_pci_tbl); | 247 | MODULE_DEVICE_TABLE(pci, tc86c001_pci_tbl); |
diff --git a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c index 54e411d4e56c..4075c907f05c 100644 --- a/drivers/ide/pci/triflex.c +++ b/drivers/ide/pci/triflex.c | |||
| @@ -96,16 +96,6 @@ static void triflex_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
| 96 | triflex_set_mode(drive, XFER_PIO_0 + pio); | 96 | triflex_set_mode(drive, XFER_PIO_0 + pio); |
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | static int triflex_config_drive_xfer_rate(ide_drive_t *drive) | ||
| 100 | { | ||
| 101 | if (ide_tune_dma(drive)) | ||
| 102 | return 0; | ||
| 103 | |||
| 104 | ide_set_max_pio(drive); | ||
| 105 | |||
| 106 | return -1; | ||
| 107 | } | ||
| 108 | |||
| 109 | static void __devinit init_hwif_triflex(ide_hwif_t *hwif) | 99 | static void __devinit init_hwif_triflex(ide_hwif_t *hwif) |
| 110 | { | 100 | { |
| 111 | hwif->set_pio_mode = &triflex_set_pio_mode; | 101 | hwif->set_pio_mode = &triflex_set_pio_mode; |
| @@ -117,12 +107,6 @@ static void __devinit init_hwif_triflex(ide_hwif_t *hwif) | |||
| 117 | hwif->atapi_dma = 1; | 107 | hwif->atapi_dma = 1; |
| 118 | hwif->mwdma_mask = 0x07; | 108 | hwif->mwdma_mask = 0x07; |
| 119 | hwif->swdma_mask = 0x07; | 109 | hwif->swdma_mask = 0x07; |
| 120 | hwif->ide_dma_check = &triflex_config_drive_xfer_rate; | ||
| 121 | |||
| 122 | if (!noautodma) | ||
| 123 | hwif->autodma = 1; | ||
| 124 | hwif->drives[0].autodma = hwif->autodma; | ||
| 125 | hwif->drives[1].autodma = hwif->autodma; | ||
| 126 | } | 110 | } |
| 127 | 111 | ||
| 128 | static ide_pci_device_t triflex_device __devinitdata = { | 112 | static ide_pci_device_t triflex_device __devinitdata = { |
| @@ -140,9 +124,8 @@ static int __devinit triflex_init_one(struct pci_dev *dev, | |||
| 140 | return ide_setup_pci_device(dev, &triflex_device); | 124 | return ide_setup_pci_device(dev, &triflex_device); |
| 141 | } | 125 | } |
| 142 | 126 | ||
| 143 | static struct pci_device_id triflex_pci_tbl[] = { | 127 | static const struct pci_device_id triflex_pci_tbl[] = { |
| 144 | { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_TRIFLEX_IDE, | 128 | { PCI_VDEVICE(COMPAQ, PCI_DEVICE_ID_COMPAQ_TRIFLEX_IDE), 0 }, |
| 145 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | ||
| 146 | { 0, }, | 129 | { 0, }, |
| 147 | }; | 130 | }; |
| 148 | MODULE_DEVICE_TABLE(pci, triflex_pci_tbl); | 131 | MODULE_DEVICE_TABLE(pci, triflex_pci_tbl); |
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c index dc4f4e298e00..e3d943ada7b0 100644 --- a/drivers/ide/pci/trm290.c +++ b/drivers/ide/pci/trm290.c | |||
| @@ -292,9 +292,6 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif) | |||
| 292 | hwif->ide_dma_test_irq = &trm290_ide_dma_test_irq; | 292 | hwif->ide_dma_test_irq = &trm290_ide_dma_test_irq; |
| 293 | 293 | ||
| 294 | hwif->selectproc = &trm290_selectproc; | 294 | hwif->selectproc = &trm290_selectproc; |
| 295 | hwif->autodma = 0; /* play it safe for now */ | ||
| 296 | hwif->drives[0].autodma = hwif->autodma; | ||
| 297 | hwif->drives[1].autodma = hwif->autodma; | ||
| 298 | #if 1 | 295 | #if 1 |
| 299 | { | 296 | { |
| 300 | /* | 297 | /* |
| @@ -329,6 +326,9 @@ static ide_pci_device_t trm290_chipset __devinitdata = { | |||
| 329 | .init_hwif = init_hwif_trm290, | 326 | .init_hwif = init_hwif_trm290, |
| 330 | .autodma = NOAUTODMA, | 327 | .autodma = NOAUTODMA, |
| 331 | .bootable = ON_BOARD, | 328 | .bootable = ON_BOARD, |
| 329 | #if 0 /* play it safe for now */ | ||
| 330 | .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, | ||
| 331 | #endif | ||
| 332 | }; | 332 | }; |
| 333 | 333 | ||
| 334 | static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 334 | static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
| @@ -336,8 +336,8 @@ static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_devic | |||
| 336 | return ide_setup_pci_device(dev, &trm290_chipset); | 336 | return ide_setup_pci_device(dev, &trm290_chipset); |
| 337 | } | 337 | } |
| 338 | 338 | ||
| 339 | static struct pci_device_id trm290_pci_tbl[] = { | 339 | static const struct pci_device_id trm290_pci_tbl[] = { |
| 340 | { PCI_VENDOR_ID_TEKRAM, PCI_DEVICE_ID_TEKRAM_DC290, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 340 | { PCI_VDEVICE(TEKRAM, PCI_DEVICE_ID_TEKRAM_DC290), 0 }, |
| 341 | { 0, }, | 341 | { 0, }, |
| 342 | }; | 342 | }; |
| 343 | MODULE_DEVICE_TABLE(pci, trm290_pci_tbl); | 343 | MODULE_DEVICE_TABLE(pci, trm290_pci_tbl); |
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c index 479e49661032..b25fb65b240e 100644 --- a/drivers/ide/pci/via82cxxx.c +++ b/drivers/ide/pci/via82cxxx.c | |||
| @@ -197,24 +197,6 @@ static void via_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
| 197 | via_set_drive(drive, XFER_PIO_0 + pio); | 197 | via_set_drive(drive, XFER_PIO_0 + pio); |
| 198 | } | 198 | } |
| 199 | 199 | ||
| 200 | /** | ||
| 201 | * via82cxxx_ide_dma_check - set up for DMA if possible | ||
| 202 | * @drive: IDE drive to set up | ||
| 203 | * | ||
| 204 | * Set up the drive for the highest supported speed considering the | ||
| 205 | * driver, controller and cable | ||
| 206 | */ | ||
| 207 | |||
| 208 | static int via82cxxx_ide_dma_check (ide_drive_t *drive) | ||
| 209 | { | ||
| 210 | if (ide_tune_dma(drive)) | ||
| 211 | return 0; | ||
| 212 | |||
| 213 | ide_set_max_pio(drive); | ||
| 214 | |||
| 215 | return -1; | ||
| 216 | } | ||
| 217 | |||
| 218 | static struct via_isa_bridge *via_config_find(struct pci_dev **isa) | 200 | static struct via_isa_bridge *via_config_find(struct pci_dev **isa) |
| 219 | { | 201 | { |
| 220 | struct via_isa_bridge *via_config; | 202 | struct via_isa_bridge *via_config; |
| @@ -443,8 +425,6 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) | |||
| 443 | struct via82cxxx_dev *vdev = pci_get_drvdata(hwif->pci_dev); | 425 | struct via82cxxx_dev *vdev = pci_get_drvdata(hwif->pci_dev); |
| 444 | int i; | 426 | int i; |
| 445 | 427 | ||
| 446 | hwif->autodma = 0; | ||
| 447 | |||
| 448 | hwif->set_pio_mode = &via_set_pio_mode; | 428 | hwif->set_pio_mode = &via_set_pio_mode; |
| 449 | hwif->set_dma_mode = &via_set_drive; | 429 | hwif->set_dma_mode = &via_set_drive; |
| 450 | 430 | ||
| @@ -458,7 +438,6 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) | |||
| 458 | hwif->drives[i].io_32bit = 1; | 438 | hwif->drives[i].io_32bit = 1; |
| 459 | hwif->drives[i].unmask = (vdev->via_config->flags & VIA_NO_UNMASK) ? 0 : 1; | 439 | hwif->drives[i].unmask = (vdev->via_config->flags & VIA_NO_UNMASK) ? 0 : 1; |
| 460 | hwif->drives[i].autotune = 1; | 440 | hwif->drives[i].autotune = 1; |
| 461 | hwif->drives[i].dn = hwif->channel * 2 + i; | ||
| 462 | } | 441 | } |
| 463 | 442 | ||
| 464 | if (!hwif->dma_base) | 443 | if (!hwif->dma_base) |
| @@ -472,12 +451,6 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif) | |||
| 472 | 451 | ||
| 473 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) | 452 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
| 474 | hwif->cbl = via82cxxx_cable_detect(hwif); | 453 | hwif->cbl = via82cxxx_cable_detect(hwif); |
| 475 | |||
| 476 | hwif->ide_dma_check = &via82cxxx_ide_dma_check; | ||
| 477 | if (!noautodma) | ||
| 478 | hwif->autodma = 1; | ||
| 479 | hwif->drives[0].autodma = hwif->autodma; | ||
| 480 | hwif->drives[1].autodma = hwif->autodma; | ||
| 481 | } | 454 | } |
| 482 | 455 | ||
| 483 | static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = { | 456 | static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = { |
| @@ -522,11 +495,11 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i | |||
| 522 | return ide_setup_pci_device(dev, &via82cxxx_chipsets[id->driver_data]); | 495 | return ide_setup_pci_device(dev, &via82cxxx_chipsets[id->driver_data]); |
| 523 | } | 496 | } |
| 524 | 497 | ||
| 525 | static struct pci_device_id via_pci_tbl[] = { | 498 | static const struct pci_device_id via_pci_tbl[] = { |
| 526 | { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 499 | { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), 0 }, |
| 527 | { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 500 | { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C586_1), 0 }, |
| 528 | { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_6410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 501 | { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_6410), 1 }, |
| 529 | { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_SATA_EIDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, | 502 | { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), 1 }, |
| 530 | { 0, }, | 503 | { 0, }, |
| 531 | }; | 504 | }; |
| 532 | MODULE_DEVICE_TABLE(pci, via_pci_tbl); | 505 | MODULE_DEVICE_TABLE(pci, via_pci_tbl); |
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c index 9e86406bf44b..1d25a3433008 100644 --- a/drivers/ide/ppc/pmac.c +++ b/drivers/ide/ppc/pmac.c | |||
| @@ -1421,17 +1421,12 @@ static struct macio_driver pmac_ide_macio_driver = | |||
| 1421 | .resume = pmac_ide_macio_resume, | 1421 | .resume = pmac_ide_macio_resume, |
| 1422 | }; | 1422 | }; |
| 1423 | 1423 | ||
| 1424 | static struct pci_device_id pmac_ide_pci_match[] = { | 1424 | static const struct pci_device_id pmac_ide_pci_match[] = { |
| 1425 | { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_ATA, | 1425 | { PCI_VDEVICE(APPLE, PCI_DEVICE_ID_APPLE_UNI_N_ATA), 0 }, |
| 1426 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 1426 | { PCI_VDEVICE(APPLE, PCI_DEVICE_ID_APPLE_IPID_ATA100), 0 }, |
| 1427 | { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_IPID_ATA100, | 1427 | { PCI_VDEVICE(APPLE, PCI_DEVICE_ID_APPLE_K2_ATA100), 0 }, |
| 1428 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 1428 | { PCI_VDEVICE(APPLE, PCI_DEVICE_ID_APPLE_SH_ATA), 0 }, |
| 1429 | { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_K2_ATA100, | 1429 | { PCI_VDEVICE(APPLE, PCI_DEVICE_ID_APPLE_IPID2_ATA), 0 }, |
| 1430 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | ||
| 1431 | { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_SH_ATA, | ||
| 1432 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | ||
| 1433 | { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_IPID2_ATA, | ||
| 1434 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | ||
| 1435 | {}, | 1430 | {}, |
| 1436 | }; | 1431 | }; |
| 1437 | 1432 | ||
| @@ -1579,19 +1574,6 @@ pmac_ide_destroy_dmatable (ide_drive_t *drive) | |||
| 1579 | } | 1574 | } |
| 1580 | 1575 | ||
| 1581 | /* | 1576 | /* |
| 1582 | * Check what is the best DMA timing setting for the drive and | ||
| 1583 | * call appropriate functions to apply it. | ||
| 1584 | */ | ||
| 1585 | static int | ||
| 1586 | pmac_ide_dma_check(ide_drive_t *drive) | ||
| 1587 | { | ||
| 1588 | if (ide_tune_dma(drive)) | ||
| 1589 | return 0; | ||
| 1590 | |||
| 1591 | return -1; | ||
| 1592 | } | ||
| 1593 | |||
| 1594 | /* | ||
| 1595 | * Prepare a DMA transfer. We build the DMA table, adjust the timings for | 1577 | * Prepare a DMA transfer. We build the DMA table, adjust the timings for |
| 1596 | * a read on KeyLargo ATA/66 and mark us as waiting for DMA completion | 1578 | * a read on KeyLargo ATA/66 and mark us as waiting for DMA completion |
| 1597 | */ | 1579 | */ |
| @@ -1788,7 +1770,6 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) | |||
| 1788 | 1770 | ||
| 1789 | hwif->dma_off_quietly = &ide_dma_off_quietly; | 1771 | hwif->dma_off_quietly = &ide_dma_off_quietly; |
| 1790 | hwif->ide_dma_on = &__ide_dma_on; | 1772 | hwif->ide_dma_on = &__ide_dma_on; |
| 1791 | hwif->ide_dma_check = &pmac_ide_dma_check; | ||
| 1792 | hwif->dma_setup = &pmac_ide_dma_setup; | 1773 | hwif->dma_setup = &pmac_ide_dma_setup; |
| 1793 | hwif->dma_exec_cmd = &pmac_ide_dma_exec_cmd; | 1774 | hwif->dma_exec_cmd = &pmac_ide_dma_exec_cmd; |
| 1794 | hwif->dma_start = &pmac_ide_dma_start; | 1775 | hwif->dma_start = &pmac_ide_dma_start; |
| @@ -1823,9 +1804,6 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) | |||
| 1823 | hwif->swdma_mask = 0x00; | 1804 | hwif->swdma_mask = 0x00; |
| 1824 | break; | 1805 | break; |
| 1825 | } | 1806 | } |
| 1826 | |||
| 1827 | hwif->autodma = 1; | ||
| 1828 | hwif->drives[1].autodma = hwif->drives[0].autodma = hwif->autodma; | ||
| 1829 | } | 1807 | } |
| 1830 | 1808 | ||
| 1831 | #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ | 1809 | #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ |
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c index 1129f8c30840..3d101f73f910 100644 --- a/drivers/ide/setup-pci.c +++ b/drivers/ide/setup-pci.c | |||
| @@ -145,27 +145,13 @@ static int ide_setup_pci_baseregs (struct pci_dev *dev, const char *name) | |||
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | 147 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI |
| 148 | |||
| 149 | #ifdef CONFIG_BLK_DEV_IDEDMA_FORCED | ||
| 150 | /* | ||
| 151 | * Long lost data from 2.0.34 that is now in 2.0.39 | ||
| 152 | * | ||
| 153 | * This was used in ./drivers/block/triton.c to do DMA Base address setup | ||
| 154 | * when PnP failed. Oh the things we forget. I believe this was part | ||
| 155 | * of SFF-8038i that has been withdrawn from public access... :-(( | ||
| 156 | */ | ||
| 157 | #define DEFAULT_BMIBA 0xe800 /* in case BIOS did not init it */ | ||
| 158 | #define DEFAULT_BMCRBA 0xcc00 /* VIA's default value */ | ||
| 159 | #define DEFAULT_BMALIBA 0xd400 /* ALI's default value */ | ||
| 160 | #endif /* CONFIG_BLK_DEV_IDEDMA_FORCED */ | ||
| 161 | |||
| 162 | /** | 148 | /** |
| 163 | * ide_get_or_set_dma_base - setup BMIBA | 149 | * ide_get_or_set_dma_base - setup BMIBA |
| 164 | * @hwif: Interface | 150 | * @hwif: Interface |
| 165 | * | 151 | * |
| 166 | * Fetch the DMA Bus-Master-I/O-Base-Address (BMIBA) from PCI space: | 152 | * Fetch the DMA Bus-Master-I/O-Base-Address (BMIBA) from PCI space. |
| 167 | * If need be we set up the DMA base. Where a device has a partner that | 153 | * Where a device has a partner that is already in DMA mode we check |
| 168 | * is already in DMA mode we check and enforce IDE simplex rules. | 154 | * and enforce IDE simplex rules. |
| 169 | */ | 155 | */ |
| 170 | 156 | ||
| 171 | static unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif) | 157 | static unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif) |
| @@ -173,12 +159,6 @@ static unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif) | |||
| 173 | unsigned long dma_base = 0; | 159 | unsigned long dma_base = 0; |
| 174 | struct pci_dev *dev = hwif->pci_dev; | 160 | struct pci_dev *dev = hwif->pci_dev; |
| 175 | 161 | ||
| 176 | #ifdef CONFIG_BLK_DEV_IDEDMA_FORCED | ||
| 177 | int second_chance = 0; | ||
| 178 | |||
| 179 | second_chance_to_dma: | ||
| 180 | #endif /* CONFIG_BLK_DEV_IDEDMA_FORCED */ | ||
| 181 | |||
| 182 | if (hwif->mmio) | 162 | if (hwif->mmio) |
| 183 | return hwif->dma_base; | 163 | return hwif->dma_base; |
| 184 | 164 | ||
| @@ -192,26 +172,6 @@ second_chance_to_dma: | |||
| 192 | } | 172 | } |
| 193 | } | 173 | } |
| 194 | 174 | ||
| 195 | #ifdef CONFIG_BLK_DEV_IDEDMA_FORCED | ||
| 196 | /* FIXME - should use pci_assign_resource surely */ | ||
| 197 | if ((!dma_base) && (!second_chance)) { | ||
| 198 | unsigned long set_bmiba = 0; | ||
| 199 | second_chance++; | ||
| 200 | switch(dev->vendor) { | ||
| 201 | case PCI_VENDOR_ID_AL: | ||
| 202 | set_bmiba = DEFAULT_BMALIBA; break; | ||
| 203 | case PCI_VENDOR_ID_VIA: | ||
| 204 | set_bmiba = DEFAULT_BMCRBA; break; | ||
| 205 | case PCI_VENDOR_ID_INTEL: | ||
| 206 | set_bmiba = DEFAULT_BMIBA; break; | ||
| 207 | default: | ||
| 208 | return dma_base; | ||
| 209 | } | ||
| 210 | pci_write_config_dword(dev, 0x20, set_bmiba|1); | ||
| 211 | goto second_chance_to_dma; | ||
| 212 | } | ||
| 213 | #endif /* CONFIG_BLK_DEV_IDEDMA_FORCED */ | ||
| 214 | |||
| 215 | if (dma_base) { | 175 | if (dma_base) { |
| 216 | u8 simplex_stat = 0; | 176 | u8 simplex_stat = 0; |
| 217 | dma_base += hwif->channel ? 8 : 0; | 177 | dma_base += hwif->channel ? 8 : 0; |
| @@ -478,8 +438,6 @@ static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwi | |||
| 478 | * Set up BM-DMA capability | 438 | * Set up BM-DMA capability |
| 479 | * (PnP BIOS should have done this) | 439 | * (PnP BIOS should have done this) |
| 480 | */ | 440 | */ |
| 481 | /* default DMA off if we had to configure it here */ | ||
| 482 | hwif->autodma = 0; | ||
| 483 | pci_set_master(dev); | 441 | pci_set_master(dev); |
| 484 | if (pci_read_config_word(dev, PCI_COMMAND, &pcicmd) || !(pcicmd & PCI_COMMAND_MASTER)) { | 442 | if (pci_read_config_word(dev, PCI_COMMAND, &pcicmd) || !(pcicmd & PCI_COMMAND_MASTER)) { |
| 485 | printk(KERN_ERR "%s: %s error updating PCICMD\n", | 443 | printk(KERN_ERR "%s: %s error updating PCICMD\n", |
