aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/libata-core.c25
-rw-r--r--drivers/ata/libata-sff.c170
-rw-r--r--drivers/ata/pata_acpi.c4
-rw-r--r--drivers/ata/pata_ali.c2
-rw-r--r--drivers/ata/pata_at91.c1
-rw-r--r--drivers/ata/pata_bf54x.c2
-rw-r--r--drivers/ata/pata_cmd640.c6
-rw-r--r--drivers/ata/pata_hpt366.c2
-rw-r--r--drivers/ata/pata_hpt37x.c4
-rw-r--r--drivers/ata/pata_icside.c2
-rw-r--r--drivers/ata/pata_it821x.c2
-rw-r--r--drivers/ata/pata_macio.c2
-rw-r--r--drivers/ata/pata_pdc2027x.c4
-rw-r--r--drivers/ata/pata_pdc202xx_old.c2
-rw-r--r--drivers/ata/pata_platform.c1
-rw-r--r--drivers/ata/pata_scc.c6
-rw-r--r--drivers/ata/pata_serverworks.c6
-rw-r--r--drivers/ata/pata_via.c4
-rw-r--r--drivers/ata/pdc_adma.c4
-rw-r--r--drivers/ata/sata_inic162x.c5
-rw-r--r--drivers/ata/sata_mv.c2
-rw-r--r--drivers/ata/sata_nv.c6
-rw-r--r--drivers/ata/sata_promise.c3
-rw-r--r--drivers/ata/sata_qstor.c4
-rw-r--r--drivers/ata/sata_sx4.c5
-rw-r--r--drivers/ata/sata_uli.c4
-rw-r--r--include/linux/libata.h9
27 files changed, 116 insertions, 171 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 3d8b62f7441c..cc49a0d3089f 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5506,30 +5506,6 @@ void ata_host_resume(struct ata_host *host)
5506#endif 5506#endif
5507 5507
5508/** 5508/**
5509 * ata_port_start - Set port up for dma.
5510 * @ap: Port to initialize
5511 *
5512 * Called just after data structures for each port are
5513 * initialized. Allocates space for PRD table.
5514 *
5515 * May be used as the port_start() entry in ata_port_operations.
5516 *
5517 * LOCKING:
5518 * Inherited from caller.
5519 */
5520int ata_port_start(struct ata_port *ap)
5521{
5522 struct device *dev = ap->dev;
5523
5524 ap->prd = dmam_alloc_coherent(dev, ATA_PRD_TBL_SZ, &ap->prd_dma,
5525 GFP_KERNEL);
5526 if (!ap->prd)
5527 return -ENOMEM;
5528
5529 return 0;
5530}
5531
5532/**
5533 * ata_dev_init - Initialize an ata_device structure 5509 * ata_dev_init - Initialize an ata_device structure
5534 * @dev: Device structure to initialize 5510 * @dev: Device structure to initialize
5535 * 5511 *
@@ -6757,7 +6733,6 @@ EXPORT_SYMBOL_GPL(ata_xfer_mode2mask);
6757EXPORT_SYMBOL_GPL(ata_xfer_mode2shift); 6733EXPORT_SYMBOL_GPL(ata_xfer_mode2shift);
6758EXPORT_SYMBOL_GPL(ata_mode_string); 6734EXPORT_SYMBOL_GPL(ata_mode_string);
6759EXPORT_SYMBOL_GPL(ata_id_xfermask); 6735EXPORT_SYMBOL_GPL(ata_id_xfermask);
6760EXPORT_SYMBOL_GPL(ata_port_start);
6761EXPORT_SYMBOL_GPL(ata_do_set_mode); 6736EXPORT_SYMBOL_GPL(ata_do_set_mode);
6762EXPORT_SYMBOL_GPL(ata_std_qc_defer); 6737EXPORT_SYMBOL_GPL(ata_std_qc_defer);
6763EXPORT_SYMBOL_GPL(ata_noop_qc_prep); 6738EXPORT_SYMBOL_GPL(ata_noop_qc_prep);
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 6400e8751391..f1c99a3e8b2c 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -66,8 +66,6 @@ const struct ata_port_operations ata_sff_port_ops = {
66 .sff_irq_clear = ata_sff_irq_clear, 66 .sff_irq_clear = ata_sff_irq_clear,
67 67
68 .lost_interrupt = ata_sff_lost_interrupt, 68 .lost_interrupt = ata_sff_lost_interrupt,
69
70 .port_start = ata_sff_port_start,
71}; 69};
72EXPORT_SYMBOL_GPL(ata_sff_port_ops); 70EXPORT_SYMBOL_GPL(ata_sff_port_ops);
73 71
@@ -2444,50 +2442,6 @@ void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc)
2444EXPORT_SYMBOL_GPL(ata_sff_post_internal_cmd); 2442EXPORT_SYMBOL_GPL(ata_sff_post_internal_cmd);
2445 2443
2446/** 2444/**
2447 * ata_sff_port_start - Set port up for dma.
2448 * @ap: Port to initialize
2449 *
2450 * Called just after data structures for each port are
2451 * initialized. Allocates space for PRD table if the device
2452 * is DMA capable SFF.
2453 *
2454 * May be used as the port_start() entry in ata_port_operations.
2455 *
2456 * LOCKING:
2457 * Inherited from caller.
2458 */
2459int ata_sff_port_start(struct ata_port *ap)
2460{
2461 if (ap->ioaddr.bmdma_addr)
2462 return ata_port_start(ap);
2463 return 0;
2464}
2465EXPORT_SYMBOL_GPL(ata_sff_port_start);
2466
2467/**
2468 * ata_sff_port_start32 - Set port up for dma.
2469 * @ap: Port to initialize
2470 *
2471 * Called just after data structures for each port are
2472 * initialized. Allocates space for PRD table if the device
2473 * is DMA capable SFF.
2474 *
2475 * May be used as the port_start() entry in ata_port_operations for
2476 * devices that are capable of 32bit PIO.
2477 *
2478 * LOCKING:
2479 * Inherited from caller.
2480 */
2481int ata_sff_port_start32(struct ata_port *ap)
2482{
2483 ap->pflags |= ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE;
2484 if (ap->ioaddr.bmdma_addr)
2485 return ata_port_start(ap);
2486 return 0;
2487}
2488EXPORT_SYMBOL_GPL(ata_sff_port_start32);
2489
2490/**
2491 * ata_sff_std_ports - initialize ioaddr with standard port offsets. 2445 * ata_sff_std_ports - initialize ioaddr with standard port offsets.
2492 * @ioaddr: IO address structure to be initialized 2446 * @ioaddr: IO address structure to be initialized
2493 * 2447 *
@@ -2646,21 +2600,12 @@ int ata_pci_sff_prepare_host(struct pci_dev *pdev,
2646 goto err_out; 2600 goto err_out;
2647 2601
2648 /* init DMA related stuff */ 2602 /* init DMA related stuff */
2649 rc = ata_pci_bmdma_init(host); 2603 ata_pci_bmdma_init(host);
2650 if (rc)
2651 goto err_bmdma;
2652 2604
2653 devres_remove_group(&pdev->dev, NULL); 2605 devres_remove_group(&pdev->dev, NULL);
2654 *r_host = host; 2606 *r_host = host;
2655 return 0; 2607 return 0;
2656 2608
2657err_bmdma:
2658 /* This is necessary because PCI and iomap resources are
2659 * merged and releasing the top group won't release the
2660 * acquired resources if some of those have been acquired
2661 * before entering this function.
2662 */
2663 pcim_iounmap_regions(pdev, 0xf);
2664err_out: 2609err_out:
2665 devres_release_group(&pdev->dev, NULL); 2610 devres_release_group(&pdev->dev, NULL);
2666 return rc; 2611 return rc;
@@ -2843,12 +2788,12 @@ EXPORT_SYMBOL_GPL(ata_pci_sff_init_one);
2843const struct ata_port_operations ata_bmdma_port_ops = { 2788const struct ata_port_operations ata_bmdma_port_ops = {
2844 .inherits = &ata_sff_port_ops, 2789 .inherits = &ata_sff_port_ops,
2845 2790
2846 .mode_filter = ata_bmdma_mode_filter,
2847
2848 .bmdma_setup = ata_bmdma_setup, 2791 .bmdma_setup = ata_bmdma_setup,
2849 .bmdma_start = ata_bmdma_start, 2792 .bmdma_start = ata_bmdma_start,
2850 .bmdma_stop = ata_bmdma_stop, 2793 .bmdma_stop = ata_bmdma_stop,
2851 .bmdma_status = ata_bmdma_status, 2794 .bmdma_status = ata_bmdma_status,
2795
2796 .port_start = ata_bmdma_port_start,
2852}; 2797};
2853EXPORT_SYMBOL_GPL(ata_bmdma_port_ops); 2798EXPORT_SYMBOL_GPL(ata_bmdma_port_ops);
2854 2799
@@ -2856,22 +2801,10 @@ const struct ata_port_operations ata_bmdma32_port_ops = {
2856 .inherits = &ata_bmdma_port_ops, 2801 .inherits = &ata_bmdma_port_ops,
2857 2802
2858 .sff_data_xfer = ata_sff_data_xfer32, 2803 .sff_data_xfer = ata_sff_data_xfer32,
2859 .port_start = ata_sff_port_start32, 2804 .port_start = ata_bmdma_port_start32,
2860}; 2805};
2861EXPORT_SYMBOL_GPL(ata_bmdma32_port_ops); 2806EXPORT_SYMBOL_GPL(ata_bmdma32_port_ops);
2862 2807
2863unsigned long ata_bmdma_mode_filter(struct ata_device *adev,
2864 unsigned long xfer_mask)
2865{
2866 /* Filter out DMA modes if the device has been configured by
2867 the BIOS as PIO only */
2868
2869 if (adev->link->ap->ioaddr.bmdma_addr == NULL)
2870 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
2871 return xfer_mask;
2872}
2873EXPORT_SYMBOL_GPL(ata_bmdma_mode_filter);
2874
2875/** 2808/**
2876 * ata_bmdma_setup - Set up PCI IDE BMDMA transaction 2809 * ata_bmdma_setup - Set up PCI IDE BMDMA transaction
2877 * @qc: Info associated with this ATA transaction. 2810 * @qc: Info associated with this ATA transaction.
@@ -2976,6 +2909,53 @@ u8 ata_bmdma_status(struct ata_port *ap)
2976} 2909}
2977EXPORT_SYMBOL_GPL(ata_bmdma_status); 2910EXPORT_SYMBOL_GPL(ata_bmdma_status);
2978 2911
2912
2913/**
2914 * ata_bmdma_port_start - Set port up for bmdma.
2915 * @ap: Port to initialize
2916 *
2917 * Called just after data structures for each port are
2918 * initialized. Allocates space for PRD table.
2919 *
2920 * May be used as the port_start() entry in ata_port_operations.
2921 *
2922 * LOCKING:
2923 * Inherited from caller.
2924 */
2925int ata_bmdma_port_start(struct ata_port *ap)
2926{
2927 if (ap->mwdma_mask || ap->udma_mask) {
2928 ap->prd = dmam_alloc_coherent(ap->host->dev, ATA_PRD_TBL_SZ,
2929 &ap->prd_dma, GFP_KERNEL);
2930 if (!ap->prd)
2931 return -ENOMEM;
2932 }
2933
2934 return 0;
2935}
2936EXPORT_SYMBOL_GPL(ata_bmdma_port_start);
2937
2938/**
2939 * ata_bmdma_port_start32 - Set port up for dma.
2940 * @ap: Port to initialize
2941 *
2942 * Called just after data structures for each port are
2943 * initialized. Enables 32bit PIO and allocates space for PRD
2944 * table.
2945 *
2946 * May be used as the port_start() entry in ata_port_operations for
2947 * devices that are capable of 32bit PIO.
2948 *
2949 * LOCKING:
2950 * Inherited from caller.
2951 */
2952int ata_bmdma_port_start32(struct ata_port *ap)
2953{
2954 ap->pflags |= ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE;
2955 return ata_bmdma_port_start(ap);
2956}
2957EXPORT_SYMBOL_GPL(ata_bmdma_port_start32);
2958
2979#ifdef CONFIG_PCI 2959#ifdef CONFIG_PCI
2980 2960
2981/** 2961/**
@@ -3004,6 +2984,19 @@ int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev)
3004} 2984}
3005EXPORT_SYMBOL_GPL(ata_pci_bmdma_clear_simplex); 2985EXPORT_SYMBOL_GPL(ata_pci_bmdma_clear_simplex);
3006 2986
2987static void ata_bmdma_nodma(struct ata_host *host, const char *reason)
2988{
2989 int i;
2990
2991 dev_printk(KERN_ERR, host->dev, "BMDMA: %s, falling back to PIO\n",
2992 reason);
2993
2994 for (i = 0; i < 2; i++) {
2995 host->ports[i]->mwdma_mask = 0;
2996 host->ports[i]->udma_mask = 0;
2997 }
2998}
2999
3007/** 3000/**
3008 * ata_pci_bmdma_init - acquire PCI BMDMA resources and init ATA host 3001 * ata_pci_bmdma_init - acquire PCI BMDMA resources and init ATA host
3009 * @host: target ATA host 3002 * @host: target ATA host
@@ -3012,33 +3005,40 @@ EXPORT_SYMBOL_GPL(ata_pci_bmdma_clear_simplex);
3012 * 3005 *
3013 * LOCKING: 3006 * LOCKING:
3014 * Inherited from calling layer (may sleep). 3007 * Inherited from calling layer (may sleep).
3015 *
3016 * RETURNS:
3017 * 0 on success, -errno otherwise.
3018 */ 3008 */
3019int ata_pci_bmdma_init(struct ata_host *host) 3009void ata_pci_bmdma_init(struct ata_host *host)
3020{ 3010{
3021 struct device *gdev = host->dev; 3011 struct device *gdev = host->dev;
3022 struct pci_dev *pdev = to_pci_dev(gdev); 3012 struct pci_dev *pdev = to_pci_dev(gdev);
3023 int i, rc; 3013 int i, rc;
3024 3014
3025 /* No BAR4 allocation: No DMA */ 3015 /* No BAR4 allocation: No DMA */
3026 if (pci_resource_start(pdev, 4) == 0) 3016 if (pci_resource_start(pdev, 4) == 0) {
3027 return 0; 3017 ata_bmdma_nodma(host, "BAR4 is zero");
3018 return;
3019 }
3028 3020
3029 /* TODO: If we get no DMA mask we should fall back to PIO */ 3021 /*
3022 * Some controllers require BMDMA region to be initialized
3023 * even if DMA is not in use to clear IRQ status via
3024 * ->sff_irq_clear method. Try to initialize bmdma_addr
3025 * regardless of dma masks.
3026 */
3030 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 3027 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
3031 if (rc) 3028 if (rc)
3032 return rc; 3029 ata_bmdma_nodma(host, "failed to set dma mask");
3033 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 3030 if (!rc) {
3034 if (rc) 3031 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
3035 return rc; 3032 if (rc)
3033 ata_bmdma_nodma(host,
3034 "failed to set consistent dma mask");
3035 }
3036 3036
3037 /* request and iomap DMA region */ 3037 /* request and iomap DMA region */
3038 rc = pcim_iomap_regions(pdev, 1 << 4, dev_driver_string(gdev)); 3038 rc = pcim_iomap_regions(pdev, 1 << 4, dev_driver_string(gdev));
3039 if (rc) { 3039 if (rc) {
3040 dev_printk(KERN_ERR, gdev, "failed to request/iomap BAR4\n"); 3040 ata_bmdma_nodma(host, "failed to request/iomap BAR4");
3041 return -ENOMEM; 3041 return;
3042 } 3042 }
3043 host->iomap = pcim_iomap_table(pdev); 3043 host->iomap = pcim_iomap_table(pdev);
3044 3044
@@ -3057,8 +3057,6 @@ int ata_pci_bmdma_init(struct ata_host *host)
3057 ata_port_desc(ap, "bmdma 0x%llx", 3057 ata_port_desc(ap, "bmdma 0x%llx",
3058 (unsigned long long)pci_resource_start(pdev, 4) + 8 * i); 3058 (unsigned long long)pci_resource_start(pdev, 4) + 8 * i);
3059 } 3059 }
3060
3061 return 0;
3062} 3060}
3063EXPORT_SYMBOL_GPL(ata_pci_bmdma_init); 3061EXPORT_SYMBOL_GPL(ata_pci_bmdma_init);
3064 3062
diff --git a/drivers/ata/pata_acpi.c b/drivers/ata/pata_acpi.c
index 1ea2be0f4b94..1a5a309abccd 100644
--- a/drivers/ata/pata_acpi.c
+++ b/drivers/ata/pata_acpi.c
@@ -101,7 +101,7 @@ static unsigned long pacpi_discover_modes(struct ata_port *ap, struct ata_device
101static unsigned long pacpi_mode_filter(struct ata_device *adev, unsigned long mask) 101static unsigned long pacpi_mode_filter(struct ata_device *adev, unsigned long mask)
102{ 102{
103 struct pata_acpi *acpi = adev->link->ap->private_data; 103 struct pata_acpi *acpi = adev->link->ap->private_data;
104 return ata_bmdma_mode_filter(adev, mask & acpi->mask[adev->devno]); 104 return mask & acpi->mask[adev->devno];
105} 105}
106 106
107/** 107/**
@@ -205,7 +205,7 @@ static int pacpi_port_start(struct ata_port *ap)
205 return -ENOMEM; 205 return -ENOMEM;
206 acpi->mask[0] = pacpi_discover_modes(ap, &ap->link.device[0]); 206 acpi->mask[0] = pacpi_discover_modes(ap, &ap->link.device[0]);
207 acpi->mask[1] = pacpi_discover_modes(ap, &ap->link.device[1]); 207 acpi->mask[1] = pacpi_discover_modes(ap, &ap->link.device[1]);
208 ret = ata_sff_port_start(ap); 208 ret = ata_bmdma_port_start(ap);
209 if (ret < 0) 209 if (ret < 0)
210 return ret; 210 return ret;
211 211
diff --git a/drivers/ata/pata_ali.c b/drivers/ata/pata_ali.c
index dc61b72f751c..f306e10c748d 100644
--- a/drivers/ata/pata_ali.c
+++ b/drivers/ata/pata_ali.c
@@ -124,7 +124,7 @@ static unsigned long ali_20_filter(struct ata_device *adev, unsigned long mask)
124 ata_id_c_string(adev->id, model_num, ATA_ID_PROD, sizeof(model_num)); 124 ata_id_c_string(adev->id, model_num, ATA_ID_PROD, sizeof(model_num));
125 if (strstr(model_num, "WDC")) 125 if (strstr(model_num, "WDC"))
126 return mask &= ~ATA_MASK_UDMA; 126 return mask &= ~ATA_MASK_UDMA;
127 return ata_bmdma_mode_filter(adev, mask); 127 return mask;
128} 128}
129 129
130/** 130/**
diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c
index c6a946aa252c..0da0dcc7dd08 100644
--- a/drivers/ata/pata_at91.c
+++ b/drivers/ata/pata_at91.c
@@ -202,7 +202,6 @@ static struct ata_port_operations pata_at91_port_ops = {
202 .sff_data_xfer = pata_at91_data_xfer_noirq, 202 .sff_data_xfer = pata_at91_data_xfer_noirq,
203 .set_piomode = pata_at91_set_piomode, 203 .set_piomode = pata_at91_set_piomode,
204 .cable_detect = ata_cable_40wire, 204 .cable_detect = ata_cable_40wire,
205 .port_start = ATA_OP_NULL,
206}; 205};
207 206
208static int __devinit pata_at91_probe(struct platform_device *pdev) 207static int __devinit pata_at91_probe(struct platform_device *pdev)
diff --git a/drivers/ata/pata_bf54x.c b/drivers/ata/pata_bf54x.c
index 3d94c800e9d1..6422cfd13d0d 100644
--- a/drivers/ata/pata_bf54x.c
+++ b/drivers/ata/pata_bf54x.c
@@ -1450,8 +1450,6 @@ static struct ata_port_operations bfin_pata_ops = {
1450 1450
1451 .port_start = bfin_port_start, 1451 .port_start = bfin_port_start,
1452 .port_stop = bfin_port_stop, 1452 .port_stop = bfin_port_stop,
1453
1454 .mode_filter = ATA_OP_NULL, /* will be removed soon */
1455}; 1453};
1456 1454
1457static struct ata_port_info bfin_port_info[] = { 1455static struct ata_port_info bfin_port_info[] = {
diff --git a/drivers/ata/pata_cmd640.c b/drivers/ata/pata_cmd640.c
index 60ab2d2b1ccd..e5f289f59ca3 100644
--- a/drivers/ata/pata_cmd640.c
+++ b/drivers/ata/pata_cmd640.c
@@ -153,16 +153,12 @@ static int cmd640_port_start(struct ata_port *ap)
153 struct pci_dev *pdev = to_pci_dev(ap->host->dev); 153 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
154 struct cmd640_reg *timing; 154 struct cmd640_reg *timing;
155 155
156 int ret = ata_sff_port_start(ap);
157 if (ret < 0)
158 return ret;
159
160 timing = devm_kzalloc(&pdev->dev, sizeof(struct cmd640_reg), GFP_KERNEL); 156 timing = devm_kzalloc(&pdev->dev, sizeof(struct cmd640_reg), GFP_KERNEL);
161 if (timing == NULL) 157 if (timing == NULL)
162 return -ENOMEM; 158 return -ENOMEM;
163 timing->last = -1; /* Force a load */ 159 timing->last = -1; /* Force a load */
164 ap->private_data = timing; 160 ap->private_data = timing;
165 return ret; 161 return 0;
166} 162}
167 163
168static struct scsi_host_template cmd640_sht = { 164static struct scsi_host_template cmd640_sht = {
diff --git a/drivers/ata/pata_hpt366.c b/drivers/ata/pata_hpt366.c
index af49bfb57247..8580eb3cd54d 100644
--- a/drivers/ata/pata_hpt366.c
+++ b/drivers/ata/pata_hpt366.c
@@ -182,7 +182,7 @@ static unsigned long hpt366_filter(struct ata_device *adev, unsigned long mask)
182 } else if (adev->class == ATA_DEV_ATAPI) 182 } else if (adev->class == ATA_DEV_ATAPI)
183 mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA); 183 mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
184 184
185 return ata_bmdma_mode_filter(adev, mask); 185 return mask;
186} 186}
187 187
188static int hpt36x_cable_detect(struct ata_port *ap) 188static int hpt36x_cable_detect(struct ata_port *ap)
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c
index 8839307a64cf..98b498b6907c 100644
--- a/drivers/ata/pata_hpt37x.c
+++ b/drivers/ata/pata_hpt37x.c
@@ -282,7 +282,7 @@ static unsigned long hpt370_filter(struct ata_device *adev, unsigned long mask)
282 if (hpt_dma_blacklisted(adev, "UDMA100", bad_ata100_5)) 282 if (hpt_dma_blacklisted(adev, "UDMA100", bad_ata100_5))
283 mask &= ~(0xE0 << ATA_SHIFT_UDMA); 283 mask &= ~(0xE0 << ATA_SHIFT_UDMA);
284 } 284 }
285 return ata_bmdma_mode_filter(adev, mask); 285 return mask;
286} 286}
287 287
288/** 288/**
@@ -298,7 +298,7 @@ static unsigned long hpt370a_filter(struct ata_device *adev, unsigned long mask)
298 if (hpt_dma_blacklisted(adev, "UDMA100", bad_ata100_5)) 298 if (hpt_dma_blacklisted(adev, "UDMA100", bad_ata100_5))
299 mask &= ~(0xE0 << ATA_SHIFT_UDMA); 299 mask &= ~(0xE0 << ATA_SHIFT_UDMA);
300 } 300 }
301 return ata_bmdma_mode_filter(adev, mask); 301 return mask;
302} 302}
303 303
304/** 304/**
diff --git a/drivers/ata/pata_icside.c b/drivers/ata/pata_icside.c
index 832c8ccd0e80..ee85a9ce0a11 100644
--- a/drivers/ata/pata_icside.c
+++ b/drivers/ata/pata_icside.c
@@ -335,7 +335,7 @@ static struct ata_port_operations pata_icside_port_ops = {
335 .postreset = pata_icside_postreset, 335 .postreset = pata_icside_postreset,
336 .post_internal_cmd = pata_icside_bmdma_stop, 336 .post_internal_cmd = pata_icside_bmdma_stop,
337 337
338 .mode_filter = ATA_OP_NULL, /* will be removed soon */ 338 .port_start = ATA_OP_NULL, /* don't need PRD table */
339}; 339};
340 340
341static void __devinit 341static void __devinit
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c
index 5cb286fd839e..8d73438f292c 100644
--- a/drivers/ata/pata_it821x.c
+++ b/drivers/ata/pata_it821x.c
@@ -739,7 +739,7 @@ static int it821x_port_start(struct ata_port *ap)
739 struct it821x_dev *itdev; 739 struct it821x_dev *itdev;
740 u8 conf; 740 u8 conf;
741 741
742 int ret = ata_sff_port_start(ap); 742 int ret = ata_bmdma_port_start(ap);
743 if (ret < 0) 743 if (ret < 0)
744 return ret; 744 return ret;
745 745
diff --git a/drivers/ata/pata_macio.c b/drivers/ata/pata_macio.c
index 17e4e5d19696..25df50f51c04 100644
--- a/drivers/ata/pata_macio.c
+++ b/drivers/ata/pata_macio.c
@@ -720,6 +720,8 @@ static int pata_macio_port_start(struct ata_port *ap)
720 if (priv->dma_table_cpu == NULL) { 720 if (priv->dma_table_cpu == NULL) {
721 dev_err(priv->dev, "Unable to allocate DMA command list\n"); 721 dev_err(priv->dev, "Unable to allocate DMA command list\n");
722 ap->ioaddr.bmdma_addr = NULL; 722 ap->ioaddr.bmdma_addr = NULL;
723 ap->mwdma_mask = 0;
724 ap->udma_mask = 0;
723 } 725 }
724 return 0; 726 return 0;
725} 727}
diff --git a/drivers/ata/pata_pdc2027x.c b/drivers/ata/pata_pdc2027x.c
index ca5cad0fd80b..09f1f22c0307 100644
--- a/drivers/ata/pata_pdc2027x.c
+++ b/drivers/ata/pata_pdc2027x.c
@@ -265,7 +265,7 @@ static unsigned long pdc2027x_mode_filter(struct ata_device *adev, unsigned long
265 struct ata_device *pair = ata_dev_pair(adev); 265 struct ata_device *pair = ata_dev_pair(adev);
266 266
267 if (adev->class != ATA_DEV_ATA || adev->devno == 0 || pair == NULL) 267 if (adev->class != ATA_DEV_ATA || adev->devno == 0 || pair == NULL)
268 return ata_bmdma_mode_filter(adev, mask); 268 return mask;
269 269
270 /* Check for slave of a Maxtor at UDMA6 */ 270 /* Check for slave of a Maxtor at UDMA6 */
271 ata_id_c_string(pair->id, model_num, ATA_ID_PROD, 271 ata_id_c_string(pair->id, model_num, ATA_ID_PROD,
@@ -274,7 +274,7 @@ static unsigned long pdc2027x_mode_filter(struct ata_device *adev, unsigned long
274 if (strstr(model_num, "Maxtor") == NULL && pair->dma_mode == XFER_UDMA_6) 274 if (strstr(model_num, "Maxtor") == NULL && pair->dma_mode == XFER_UDMA_6)
275 mask &= ~ (1 << (6 + ATA_SHIFT_UDMA)); 275 mask &= ~ (1 << (6 + ATA_SHIFT_UDMA));
276 276
277 return ata_bmdma_mode_filter(adev, mask); 277 return mask;
278} 278}
279 279
280/** 280/**
diff --git a/drivers/ata/pata_pdc202xx_old.c b/drivers/ata/pata_pdc202xx_old.c
index 9ac0897cf8b0..fa1e2f3bc0fd 100644
--- a/drivers/ata/pata_pdc202xx_old.c
+++ b/drivers/ata/pata_pdc202xx_old.c
@@ -249,7 +249,7 @@ static int pdc2026x_port_start(struct ata_port *ap)
249 u8 burst = ioread8(bmdma + 0x1f); 249 u8 burst = ioread8(bmdma + 0x1f);
250 iowrite8(burst | 0x01, bmdma + 0x1f); 250 iowrite8(burst | 0x01, bmdma + 0x1f);
251 } 251 }
252 return ata_sff_port_start(ap); 252 return ata_bmdma_port_start(ap);
253} 253}
254 254
255/** 255/**
diff --git a/drivers/ata/pata_platform.c b/drivers/ata/pata_platform.c
index 3f6ebc6c665a..50400fa120fe 100644
--- a/drivers/ata/pata_platform.c
+++ b/drivers/ata/pata_platform.c
@@ -53,7 +53,6 @@ static struct ata_port_operations pata_platform_port_ops = {
53 .sff_data_xfer = ata_sff_data_xfer_noirq, 53 .sff_data_xfer = ata_sff_data_xfer_noirq,
54 .cable_detect = ata_cable_unknown, 54 .cable_detect = ata_cable_unknown,
55 .set_mode = pata_platform_set_mode, 55 .set_mode = pata_platform_set_mode,
56 .port_start = ATA_OP_NULL,
57}; 56};
58 57
59static void pata_platform_setup_port(struct ata_ioports *ioaddr, 58static void pata_platform_setup_port(struct ata_ioports *ioaddr,
diff --git a/drivers/ata/pata_scc.c b/drivers/ata/pata_scc.c
index d3988991ca68..70d549e28f0f 100644
--- a/drivers/ata/pata_scc.c
+++ b/drivers/ata/pata_scc.c
@@ -265,7 +265,7 @@ unsigned long scc_mode_filter(struct ata_device *adev, unsigned long mask)
265 printk(KERN_INFO "%s: limit ATAPI UDMA to UDMA4\n", DRV_NAME); 265 printk(KERN_INFO "%s: limit ATAPI UDMA to UDMA4\n", DRV_NAME);
266 mask &= ~(0xE0 << ATA_SHIFT_UDMA); 266 mask &= ~(0xE0 << ATA_SHIFT_UDMA);
267 } 267 }
268 return ata_bmdma_mode_filter(adev, mask); 268 return mask;
269} 269}
270 270
271/** 271/**
@@ -892,7 +892,7 @@ static void scc_irq_clear (struct ata_port *ap)
892 * scc_port_start - Set port up for dma. 892 * scc_port_start - Set port up for dma.
893 * @ap: Port to initialize 893 * @ap: Port to initialize
894 * 894 *
895 * Allocate space for PRD table using ata_port_start(). 895 * Allocate space for PRD table using ata_bmdma_port_start().
896 * Set PRD table address for PTERADD. (PRD Transfer End Read) 896 * Set PRD table address for PTERADD. (PRD Transfer End Read)
897 */ 897 */
898 898
@@ -901,7 +901,7 @@ static int scc_port_start (struct ata_port *ap)
901 void __iomem *mmio = ap->ioaddr.bmdma_addr; 901 void __iomem *mmio = ap->ioaddr.bmdma_addr;
902 int rc; 902 int rc;
903 903
904 rc = ata_port_start(ap); 904 rc = ata_bmdma_port_start(ap);
905 if (rc) 905 if (rc)
906 return rc; 906 return rc;
907 907
diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c
index 9524d54035f7..43ea389df2b3 100644
--- a/drivers/ata/pata_serverworks.c
+++ b/drivers/ata/pata_serverworks.c
@@ -198,7 +198,7 @@ static unsigned long serverworks_osb4_filter(struct ata_device *adev, unsigned l
198{ 198{
199 if (adev->class == ATA_DEV_ATA) 199 if (adev->class == ATA_DEV_ATA)
200 mask &= ~ATA_MASK_UDMA; 200 mask &= ~ATA_MASK_UDMA;
201 return ata_bmdma_mode_filter(adev, mask); 201 return mask;
202} 202}
203 203
204 204
@@ -218,7 +218,7 @@ static unsigned long serverworks_csb_filter(struct ata_device *adev, unsigned lo
218 218
219 /* Disk, UDMA */ 219 /* Disk, UDMA */
220 if (adev->class != ATA_DEV_ATA) 220 if (adev->class != ATA_DEV_ATA)
221 return ata_bmdma_mode_filter(adev, mask); 221 return mask;
222 222
223 /* Actually do need to check */ 223 /* Actually do need to check */
224 ata_id_c_string(adev->id, model_num, ATA_ID_PROD, sizeof(model_num)); 224 ata_id_c_string(adev->id, model_num, ATA_ID_PROD, sizeof(model_num));
@@ -227,7 +227,7 @@ static unsigned long serverworks_csb_filter(struct ata_device *adev, unsigned lo
227 if (!strcmp(p, model_num)) 227 if (!strcmp(p, model_num))
228 mask &= ~(0xE0 << ATA_SHIFT_UDMA); 228 mask &= ~(0xE0 << ATA_SHIFT_UDMA);
229 } 229 }
230 return ata_bmdma_mode_filter(adev, mask); 230 return mask;
231} 231}
232 232
233/** 233/**
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c
index 87fb89e407f7..7e3e0a5598b7 100644
--- a/drivers/ata/pata_via.c
+++ b/drivers/ata/pata_via.c
@@ -355,7 +355,7 @@ static unsigned long via_mode_filter(struct ata_device *dev, unsigned long mask)
355 mask &= ~ ATA_MASK_UDMA; 355 mask &= ~ ATA_MASK_UDMA;
356 } 356 }
357 } 357 }
358 return ata_bmdma_mode_filter(dev, mask); 358 return mask;
359} 359}
360 360
361/** 361/**
@@ -424,7 +424,7 @@ static int via_port_start(struct ata_port *ap)
424 struct via_port *vp; 424 struct via_port *vp;
425 struct pci_dev *pdev = to_pci_dev(ap->host->dev); 425 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
426 426
427 int ret = ata_sff_port_start(ap); 427 int ret = ata_bmdma_port_start(ap);
428 if (ret < 0) 428 if (ret < 0)
429 return ret; 429 return ret;
430 430
diff --git a/drivers/ata/pdc_adma.c b/drivers/ata/pdc_adma.c
index ed18d8b42c52..bb4f838655b6 100644
--- a/drivers/ata/pdc_adma.c
+++ b/drivers/ata/pdc_adma.c
@@ -556,11 +556,7 @@ static int adma_port_start(struct ata_port *ap)
556{ 556{
557 struct device *dev = ap->host->dev; 557 struct device *dev = ap->host->dev;
558 struct adma_port_priv *pp; 558 struct adma_port_priv *pp;
559 int rc;
560 559
561 rc = ata_port_start(ap);
562 if (rc)
563 return rc;
564 adma_enter_reg_mode(ap); 560 adma_enter_reg_mode(ap);
565 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); 561 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
566 if (!pp) 562 if (!pp)
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c
index d3e1bab2a7ad..a36149ebf4a2 100644
--- a/drivers/ata/sata_inic162x.c
+++ b/drivers/ata/sata_inic162x.c
@@ -682,7 +682,6 @@ static int inic_port_start(struct ata_port *ap)
682{ 682{
683 struct device *dev = ap->host->dev; 683 struct device *dev = ap->host->dev;
684 struct inic_port_priv *pp; 684 struct inic_port_priv *pp;
685 int rc;
686 685
687 /* alloc and initialize private data */ 686 /* alloc and initialize private data */
688 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); 687 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
@@ -691,10 +690,6 @@ static int inic_port_start(struct ata_port *ap)
691 ap->private_data = pp; 690 ap->private_data = pp;
692 691
693 /* Alloc resources */ 692 /* Alloc resources */
694 rc = ata_port_start(ap);
695 if (rc)
696 return rc;
697
698 pp->pkt = dmam_alloc_coherent(dev, sizeof(struct inic_pkt), 693 pp->pkt = dmam_alloc_coherent(dev, sizeof(struct inic_pkt),
699 &pp->pkt_dma, GFP_KERNEL); 694 &pp->pkt_dma, GFP_KERNEL);
700 if (!pp->pkt) 695 if (!pp->pkt)
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index a03371075990..83491861d110 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -717,8 +717,6 @@ static struct ata_port_operations mv6_ops = {
717 717
718 .port_start = mv_port_start, 718 .port_start = mv_port_start,
719 .port_stop = mv_port_stop, 719 .port_stop = mv_port_stop,
720
721 .mode_filter = ATA_OP_NULL, /* will be removed soon */
722}; 720};
723 721
724static struct ata_port_operations mv_iie_ops = { 722static struct ata_port_operations mv_iie_ops = {
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
index 20cc510595db..a007b20c1991 100644
--- a/drivers/ata/sata_nv.c
+++ b/drivers/ata/sata_nv.c
@@ -1156,7 +1156,8 @@ static int nv_adma_port_start(struct ata_port *ap)
1156 if (rc) 1156 if (rc)
1157 return rc; 1157 return rc;
1158 1158
1159 rc = ata_port_start(ap); 1159 /* we might fallback to bmdma, allocate bmdma resources */
1160 rc = ata_bmdma_port_start(ap);
1160 if (rc) 1161 if (rc)
1161 return rc; 1162 return rc;
1162 1163
@@ -1985,7 +1986,8 @@ static int nv_swncq_port_start(struct ata_port *ap)
1985 struct nv_swncq_port_priv *pp; 1986 struct nv_swncq_port_priv *pp;
1986 int rc; 1987 int rc;
1987 1988
1988 rc = ata_port_start(ap); 1989 /* we might fallback to bmdma, allocate bmdma resources */
1990 rc = ata_bmdma_port_start(ap);
1989 if (rc) 1991 if (rc)
1990 return rc; 1992 return rc;
1991 1993
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c
index 2c029ea12c54..e80628a77669 100644
--- a/drivers/ata/sata_promise.c
+++ b/drivers/ata/sata_promise.c
@@ -333,7 +333,8 @@ static int pdc_common_port_start(struct ata_port *ap)
333 struct pdc_port_priv *pp; 333 struct pdc_port_priv *pp;
334 int rc; 334 int rc;
335 335
336 rc = ata_port_start(ap); 336 /* we use the same prd table as bmdma, allocate it */
337 rc = ata_bmdma_port_start(ap);
337 if (rc) 338 if (rc)
338 return rc; 339 return rc;
339 340
diff --git a/drivers/ata/sata_qstor.c b/drivers/ata/sata_qstor.c
index febc6e748420..da84ea9e4fb0 100644
--- a/drivers/ata/sata_qstor.c
+++ b/drivers/ata/sata_qstor.c
@@ -504,11 +504,7 @@ static int qs_port_start(struct ata_port *ap)
504 void __iomem *mmio_base = qs_mmio_base(ap->host); 504 void __iomem *mmio_base = qs_mmio_base(ap->host);
505 void __iomem *chan = mmio_base + (ap->port_no * 0x4000); 505 void __iomem *chan = mmio_base + (ap->port_no * 0x4000);
506 u64 addr; 506 u64 addr;
507 int rc;
508 507
509 rc = ata_port_start(ap);
510 if (rc)
511 return rc;
512 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); 508 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
513 if (!pp) 509 if (!pp)
514 return -ENOMEM; 510 return -ENOMEM;
diff --git a/drivers/ata/sata_sx4.c b/drivers/ata/sata_sx4.c
index 7e3a25ec93b1..a4e552a325b0 100644
--- a/drivers/ata/sata_sx4.c
+++ b/drivers/ata/sata_sx4.c
@@ -302,11 +302,6 @@ static int pdc_port_start(struct ata_port *ap)
302{ 302{
303 struct device *dev = ap->host->dev; 303 struct device *dev = ap->host->dev;
304 struct pdc_port_priv *pp; 304 struct pdc_port_priv *pp;
305 int rc;
306
307 rc = ata_port_start(ap);
308 if (rc)
309 return rc;
310 305
311 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); 306 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
312 if (!pp) 307 if (!pp)
diff --git a/drivers/ata/sata_uli.c b/drivers/ata/sata_uli.c
index 011e098590d1..d8dac17dc2c8 100644
--- a/drivers/ata/sata_uli.c
+++ b/drivers/ata/sata_uli.c
@@ -181,9 +181,7 @@ static int uli_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
181 if (rc) 181 if (rc)
182 return rc; 182 return rc;
183 183
184 rc = ata_pci_bmdma_init(host); 184 ata_pci_bmdma_init(host);
185 if (rc)
186 return rc;
187 185
188 iomap = host->iomap; 186 iomap = host->iomap;
189 187
diff --git a/include/linux/libata.h b/include/linux/libata.h
index d735728873b5..45a547e42d47 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1000,7 +1000,6 @@ extern unsigned long ata_xfer_mode2mask(u8 xfer_mode);
1000extern int ata_xfer_mode2shift(unsigned long xfer_mode); 1000extern int ata_xfer_mode2shift(unsigned long xfer_mode);
1001extern const char *ata_mode_string(unsigned long xfer_mask); 1001extern const char *ata_mode_string(unsigned long xfer_mask);
1002extern unsigned long ata_id_xfermask(const u16 *id); 1002extern unsigned long ata_id_xfermask(const u16 *id);
1003extern int ata_port_start(struct ata_port *ap);
1004extern int ata_std_qc_defer(struct ata_queued_cmd *qc); 1003extern int ata_std_qc_defer(struct ata_queued_cmd *qc);
1005extern void ata_noop_qc_prep(struct ata_queued_cmd *qc); 1004extern void ata_noop_qc_prep(struct ata_queued_cmd *qc);
1006extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, 1005extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
@@ -1616,8 +1615,6 @@ extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes);
1616extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc); 1615extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc);
1617extern void ata_sff_error_handler(struct ata_port *ap); 1616extern void ata_sff_error_handler(struct ata_port *ap);
1618extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc); 1617extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc);
1619extern int ata_sff_port_start(struct ata_port *ap);
1620extern int ata_sff_port_start32(struct ata_port *ap);
1621extern void ata_sff_std_ports(struct ata_ioports *ioaddr); 1618extern void ata_sff_std_ports(struct ata_ioports *ioaddr);
1622#ifdef CONFIG_PCI 1619#ifdef CONFIG_PCI
1623extern int ata_pci_sff_init_host(struct ata_host *host); 1620extern int ata_pci_sff_init_host(struct ata_host *host);
@@ -1632,16 +1629,16 @@ extern int ata_pci_sff_init_one(struct pci_dev *pdev,
1632 struct scsi_host_template *sht, void *host_priv, int hflags); 1629 struct scsi_host_template *sht, void *host_priv, int hflags);
1633#endif /* CONFIG_PCI */ 1630#endif /* CONFIG_PCI */
1634 1631
1635extern unsigned long ata_bmdma_mode_filter(struct ata_device *dev,
1636 unsigned long xfer_mask);
1637extern void ata_bmdma_setup(struct ata_queued_cmd *qc); 1632extern void ata_bmdma_setup(struct ata_queued_cmd *qc);
1638extern void ata_bmdma_start(struct ata_queued_cmd *qc); 1633extern void ata_bmdma_start(struct ata_queued_cmd *qc);
1639extern void ata_bmdma_stop(struct ata_queued_cmd *qc); 1634extern void ata_bmdma_stop(struct ata_queued_cmd *qc);
1640extern u8 ata_bmdma_status(struct ata_port *ap); 1635extern u8 ata_bmdma_status(struct ata_port *ap);
1636extern int ata_bmdma_port_start(struct ata_port *ap);
1637extern int ata_bmdma_port_start32(struct ata_port *ap);
1641 1638
1642#ifdef CONFIG_PCI 1639#ifdef CONFIG_PCI
1643extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev); 1640extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev);
1644extern int ata_pci_bmdma_init(struct ata_host *host); 1641extern void ata_pci_bmdma_init(struct ata_host *host);
1645#endif /* CONFIG_PCI */ 1642#endif /* CONFIG_PCI */
1646 1643
1647/** 1644/**