Commit 33c1002ed912ac9dacedd5d5b166da3b72d18460

Authored by Bartlomiej Zolnierkiewicz
1 parent 1c3dd326ad

ide: add IDE_HFLAG_NO_ATAPI_DMA host flag

Add IDE_HFLAG_NO_ATAPI_DMA host flag and set it in host drivers which
don't support ATAPI DMA.  Then remove no longer needed hwif->atapi_dma.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

Showing 39 changed files with 40 additions and 58 deletions Side-by-side Diff

drivers/ide/arm/icside.c
... ... @@ -415,7 +415,6 @@
415 415  
416 416 static void icside_dma_init(ide_hwif_t *hwif)
417 417 {
418   - hwif->atapi_dma = 1;
419 418 hwif->mwdma_mask = 7; /* MW0..2 */
420 419 hwif->swdma_mask = 7; /* SW0..2 */
421 420  
drivers/ide/cris/ide-cris.c
... ... @@ -805,6 +805,7 @@
805 805 hwif->dma_host_on = &cris_dma_on;
806 806 hwif->dma_off_quietly = &cris_dma_off;
807 807 hwif->cbl = ATA_CBL_PATA40;
  808 + hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
808 809 hwif->pio_mask = ATA_PIO4,
809 810 hwif->drives[0].autotune = 1;
810 811 hwif->drives[1].autotune = 1;
drivers/ide/ide-dma.c
... ... @@ -338,8 +338,10 @@
338 338 ide_hwif_t *hwif = drive->hwif;
339 339 struct hd_driveid *id = drive->id;
340 340  
341   - if (drive->media != ide_disk && hwif->atapi_dma == 0)
342   - return 0;
  341 + if (drive->media != ide_disk) {
  342 + if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA)
  343 + return -1;
  344 + }
343 345  
344 346 /*
345 347 * Enable DMA on any drive that has
... ... @@ -726,8 +728,10 @@
726 728 int x, i;
727 729 u8 mode = 0;
728 730  
729   - if (drive->media != ide_disk && hwif->atapi_dma == 0)
730   - return 0;
  731 + if (drive->media != ide_disk) {
  732 + if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA)
  733 + return 0;
  734 + }
731 735  
732 736 for (i = 0; i < ARRAY_SIZE(xfer_mode_bases); i++) {
733 737 if (req_mode < xfer_mode_bases[i])
... ... @@ -134,8 +134,6 @@
134 134  
135 135 hwif->bus_state = BUSSTATE_ON;
136 136  
137   - hwif->atapi_dma = 0; /* disable all atapi dma */
138   -
139 137 init_completion(&hwif->gendev_rel_comp);
140 138  
141 139 default_hwif_iops(hwif);
... ... @@ -379,7 +377,6 @@
379 377  
380 378 hwif->pio_mask = tmp_hwif->pio_mask;
381 379  
382   - hwif->atapi_dma = tmp_hwif->atapi_dma;
383 380 hwif->ultra_mask = tmp_hwif->ultra_mask;
384 381 hwif->mwdma_mask = tmp_hwif->mwdma_mask;
385 382 hwif->swdma_mask = tmp_hwif->swdma_mask;
drivers/ide/mips/au1xxx-ide.c
... ... @@ -699,9 +699,6 @@
699 699 hwif->dma_host_on = &auide_dma_host_on;
700 700 hwif->dma_lost_irq = &auide_dma_lost_irq;
701 701 hwif->ide_dma_on = &auide_dma_on;
702   -
703   - hwif->atapi_dma = 1;
704   -
705 702 #else /* !CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */
706 703 hwif->channel = 0;
707 704 hwif->hold = 1;
drivers/ide/pci/aec62xx.c
... ... @@ -247,6 +247,7 @@
247 247 .autodma = AUTODMA,
248 248 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
249 249 .bootable = OFF_BOARD,
  250 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
250 251 .pio_mask = ATA_PIO4,
251 252 .udma_mask = 0x07, /* udma0-2 */
252 253 },{ /* 1 */
... ... @@ -256,6 +257,7 @@
256 257 .init_hwif = init_hwif_aec62xx,
257 258 .autodma = NOAUTODMA,
258 259 .bootable = OFF_BOARD,
  260 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
259 261 .pio_mask = ATA_PIO4,
260 262 .udma_mask = 0x1f, /* udma0-4 */
261 263 },{ /* 2 */
... ... @@ -266,6 +268,7 @@
266 268 .autodma = AUTODMA,
267 269 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
268 270 .bootable = NEVER_BOARD,
  271 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
269 272 .pio_mask = ATA_PIO4,
270 273 .udma_mask = 0x1f, /* udma0-4 */
271 274 },{ /* 3 */
... ... @@ -275,6 +278,7 @@
275 278 .init_hwif = init_hwif_aec62xx,
276 279 .autodma = AUTODMA,
277 280 .bootable = OFF_BOARD,
  281 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
278 282 .pio_mask = ATA_PIO4,
279 283 .udma_mask = 0x3f, /* udma0-5 */
280 284 },{ /* 4 */
... ... @@ -285,6 +289,7 @@
285 289 .autodma = AUTODMA,
286 290 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
287 291 .bootable = OFF_BOARD,
  292 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
288 293 .pio_mask = ATA_PIO4,
289 294 .udma_mask = 0x3f, /* udma0-5 */
290 295 }
drivers/ide/pci/alim15x3.c
... ... @@ -677,8 +677,8 @@
677 677 * check in ->init_dma guarantees m5229_revision >= 0x20 here
678 678 */
679 679  
680   - if (m5229_revision > 0x20)
681   - hwif->atapi_dma = 1;
  680 + if (m5229_revision == 0x20)
  681 + hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
682 682  
683 683 if (m5229_revision <= 0x20)
684 684 hwif->ultra_mask = 0x00; /* no udma */
drivers/ide/pci/amd74xx.c
... ... @@ -260,8 +260,6 @@
260 260 if (!hwif->dma_base)
261 261 return;
262 262  
263   - hwif->atapi_dma = 1;
264   -
265 263 hwif->ultra_mask = amd_config->udma_mask;
266 264 hwif->mwdma_mask = 0x07;
267 265 if ((amd_config->flags & AMD_BAD_SWDMA) == 0)
drivers/ide/pci/atiixp.c
... ... @@ -183,7 +183,6 @@
183 183 if (!hwif->dma_base)
184 184 return;
185 185  
186   - hwif->atapi_dma = 1;
187 186 hwif->ultra_mask = 0x3f;
188 187 hwif->mwdma_mask = 0x07;
189 188  
drivers/ide/pci/cmd64x.c
... ... @@ -517,7 +517,6 @@
517 517 if (!hwif->dma_base)
518 518 return;
519 519  
520   - hwif->atapi_dma = 1;
521 520 hwif->mwdma_mask = 0x07;
522 521 hwif->ultra_mask = hwif->cds->udma_mask;
523 522  
drivers/ide/pci/cs5520.c
... ... @@ -125,6 +125,7 @@
125 125  
126 126 static int cs5520_dma_on(ide_drive_t *drive)
127 127 {
  128 + /* ATAPI is harder so leave it for now */
128 129 drive->vdma = 1;
129 130 return 0;
130 131 }
... ... @@ -141,8 +142,6 @@
141 142  
142 143 hwif->ide_dma_on = &cs5520_dma_on;
143 144  
144   - /* ATAPI is harder so leave it for now */
145   - hwif->atapi_dma = 0;
146 145 hwif->ultra_mask = 0;
147 146 hwif->swdma_mask = 0;
148 147 hwif->mwdma_mask = 0;
... ... @@ -156,7 +155,8 @@
156 155 .autodma = AUTODMA, \
157 156 .bootable = ON_BOARD, \
158 157 .host_flags = IDE_HFLAG_ISA_PORTS | \
159   - IDE_HFLAG_VDMA, \
  158 + IDE_HFLAG_VDMA | \
  159 + IDE_HFLAG_NO_ATAPI_DMA, \
160 160 .pio_mask = ATA_PIO4, \
161 161 }
162 162  
drivers/ide/pci/cs5530.c
... ... @@ -264,7 +264,6 @@
264 264 if (hwif->dma_base == 0)
265 265 return;
266 266  
267   - hwif->atapi_dma = 1;
268 267 hwif->ultra_mask = 0x07;
269 268 hwif->mwdma_mask = 0x07;
270 269  
drivers/ide/pci/cs5535.c
... ... @@ -185,7 +185,6 @@
185 185 if (hwif->dma_base == 0)
186 186 return;
187 187  
188   - hwif->atapi_dma = 1;
189 188 hwif->ultra_mask = 0x1F;
190 189 hwif->mwdma_mask = 0x07;
191 190  
drivers/ide/pci/cy82c693.c
... ... @@ -437,7 +437,6 @@
437 437 return;
438 438 }
439 439  
440   - hwif->atapi_dma = 1;
441 440 hwif->mwdma_mask = 0x04;
442 441 hwif->swdma_mask = 0x04;
443 442  
drivers/ide/pci/generic.c
... ... @@ -69,7 +69,6 @@
69 69 if (!(hwif->dma_base))
70 70 return;
71 71  
72   - hwif->atapi_dma = 1;
73 72 hwif->ultra_mask = 0x7f;
74 73 hwif->mwdma_mask = 0x07;
75 74 hwif->swdma_mask = 0x07;
drivers/ide/pci/hpt34x.c
... ... @@ -155,6 +155,7 @@
155 155 .autodma = NOAUTODMA,
156 156 .bootable = NEVER_BOARD,
157 157 .extra = 16,
  158 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
158 159 .pio_mask = ATA_PIO5,
159 160 };
160 161  
drivers/ide/pci/hpt366.c
... ... @@ -1555,6 +1555,7 @@
1555 1555 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1556 1556 .bootable = OFF_BOARD,
1557 1557 .extra = 240,
  1558 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1558 1559 .pio_mask = ATA_PIO4,
1559 1560 },{ /* 1 */
1560 1561 .name = "HPT372A",
... ... @@ -1567,6 +1568,7 @@
1567 1568 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
1568 1569 .bootable = OFF_BOARD,
1569 1570 .extra = 240,
  1571 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1570 1572 .pio_mask = ATA_PIO4,
1571 1573 },{ /* 2 */
1572 1574 .name = "HPT302",
... ... @@ -1579,6 +1581,7 @@
1579 1581 .udma_mask = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
1580 1582 .bootable = OFF_BOARD,
1581 1583 .extra = 240,
  1584 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1582 1585 .pio_mask = ATA_PIO4,
1583 1586 },{ /* 3 */
1584 1587 .name = "HPT371",
... ... @@ -1591,6 +1594,7 @@
1591 1594 .udma_mask = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
1592 1595 .bootable = OFF_BOARD,
1593 1596 .extra = 240,
  1597 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1594 1598 .pio_mask = ATA_PIO4,
1595 1599 },{ /* 4 */
1596 1600 .name = "HPT374",
... ... @@ -1603,6 +1607,7 @@
1603 1607 .udma_mask = ATA_UDMA5,
1604 1608 .bootable = OFF_BOARD,
1605 1609 .extra = 240,
  1610 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1606 1611 .pio_mask = ATA_PIO4,
1607 1612 },{ /* 5 */
1608 1613 .name = "HPT372N",
... ... @@ -1615,6 +1620,7 @@
1615 1620 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
1616 1621 .bootable = OFF_BOARD,
1617 1622 .extra = 240,
  1623 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1618 1624 .pio_mask = ATA_PIO4,
1619 1625 }
1620 1626 };
drivers/ide/pci/it8213.c
... ... @@ -176,7 +176,6 @@
176 176 if (!hwif->dma_base)
177 177 return;
178 178  
179   - hwif->atapi_dma = 1;
180 179 hwif->ultra_mask = 0x7f;
181 180 hwif->mwdma_mask = 0x06;
182 181 hwif->swdma_mask = 0x04;
drivers/ide/pci/it821x.c
... ... @@ -544,12 +544,10 @@
544 544  
545 545 ide_set_hwifdata(hwif, idev);
546 546  
547   - hwif->atapi_dma = 1;
548   -
549 547 pci_read_config_byte(hwif->pci_dev, 0x50, &conf);
550   - if(conf & 1) {
  548 + if (conf & 1) {
551 549 idev->smart = 1;
552   - hwif->atapi_dma = 0;
  550 + hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
553 551 /* Long I/O's although allowed in LBA48 space cause the
554 552 onboard firmware to enter the twighlight zone */
555 553 hwif->rqsize = 256;
556 554  
... ... @@ -570,10 +568,10 @@
570 568 */
571 569  
572 570 pci_read_config_byte(hwif->pci_dev, 0x08, &conf);
573   - if(conf == 0x10) {
  571 + if (conf == 0x10) {
574 572 idev->timing10 = 1;
575   - hwif->atapi_dma = 0;
576   - if(!idev->smart)
  573 + hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
  574 + if (idev->smart == 0)
577 575 printk(KERN_WARNING "it821x: Revision 0x10, workarounds activated.\n");
578 576 }
579 577  
drivers/ide/pci/jmicron.c
... ... @@ -117,7 +117,6 @@
117 117 if (hwif->dma_base == 0)
118 118 return;
119 119  
120   - hwif->atapi_dma = 1;
121 120 hwif->ultra_mask = 0x7f;
122 121 hwif->mwdma_mask = 0x07;
123 122  
drivers/ide/pci/ns87415.c
... ... @@ -268,7 +268,8 @@
268 268 .init_hwif = init_hwif_ns87415,
269 269 .autodma = AUTODMA,
270 270 .bootable = ON_BOARD,
271   - .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA,
  271 + .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA |
  272 + IDE_HFLAG_NO_ATAPI_DMA,
272 273 };
273 274  
274 275 static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_device_id *id)
drivers/ide/pci/opti621.c
... ... @@ -336,7 +336,6 @@
336 336 if (!(hwif->dma_base))
337 337 return;
338 338  
339   - hwif->atapi_dma = 1;
340 339 hwif->mwdma_mask = 0x07;
341 340 hwif->swdma_mask = 0x07;
342 341 }
drivers/ide/pci/pdc202xx_new.c
... ... @@ -482,8 +482,6 @@
482 482 if (hwif->dma_base == 0)
483 483 return;
484 484  
485   - hwif->atapi_dma = 1;
486   -
487 485 hwif->ultra_mask = hwif->cds->udma_mask;
488 486 hwif->mwdma_mask = 0x07;
489 487  
drivers/ide/pci/pdc202xx_old.c
... ... @@ -330,7 +330,6 @@
330 330 hwif->ultra_mask = hwif->cds->udma_mask;
331 331 hwif->mwdma_mask = 0x07;
332 332 hwif->swdma_mask = 0x07;
333   - hwif->atapi_dma = 1;
334 333  
335 334 hwif->dma_lost_irq = &pdc202xx_dma_lost_irq;
336 335 hwif->dma_timeout = &pdc202xx_dma_timeout;
drivers/ide/pci/piix.c
... ... @@ -397,8 +397,6 @@
397 397 if (piix_is_ichx(hwif->pci_dev))
398 398 hwif->ide_dma_clear_irq = &piix_dma_clear_irq;
399 399  
400   - hwif->atapi_dma = 1;
401   -
402 400 hwif->ultra_mask = hwif->cds->udma_mask;
403 401 hwif->mwdma_mask = 0x06;
404 402 hwif->swdma_mask = 0x04;
drivers/ide/pci/sc1200.c
... ... @@ -377,7 +377,6 @@
377 377 hwif->udma_filter = sc1200_udma_filter;
378 378 hwif->ide_dma_end = &sc1200_ide_dma_end;
379 379  
380   - hwif->atapi_dma = 1;
381 380 hwif->ultra_mask = 0x07;
382 381 hwif->mwdma_mask = 0x07;
383 382 }
drivers/ide/pci/scc_pata.c
... ... @@ -693,7 +693,6 @@
693 693 }
694 694 hwif->mwdma_mask = 0x00;
695 695 hwif->swdma_mask = 0x00;
696   - hwif->atapi_dma = 1;
697 696  
698 697 /* we support 80c cable only. */
699 698 hwif->cbl = ATA_CBL_PATA80;
drivers/ide/pci/serverworks.c
... ... @@ -367,8 +367,6 @@
367 367 hwif->set_dma_mode = &svwks_set_dma_mode;
368 368 hwif->udma_filter = &svwks_udma_filter;
369 369  
370   - hwif->atapi_dma = 1;
371   -
372 370 if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE)
373 371 hwif->ultra_mask = 0x3f;
374 372  
drivers/ide/pci/sgiioc4.c
... ... @@ -592,7 +592,6 @@
592 592 if (hwif->dma_base == 0)
593 593 return;
594 594  
595   - hwif->atapi_dma = 1;
596 595 hwif->mwdma_mask = 0x04;
597 596  
598 597 hwif->dma_setup = &sgiioc4_ide_dma_setup;
drivers/ide/pci/siimage.c
... ... @@ -899,8 +899,8 @@
899 899 hwif->ultra_mask = 0x7f;
900 900 hwif->mwdma_mask = 0x07;
901 901  
902   - if (!is_sata(hwif))
903   - hwif->atapi_dma = 1;
  902 + if (is_sata(hwif))
  903 + hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
904 904  
905 905 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
906 906 hwif->cbl = ata66_siimage(hwif);
drivers/ide/pci/sis5513.c
... ... @@ -579,8 +579,6 @@
579 579 if (hwif->dma_base == 0)
580 580 return;
581 581  
582   - hwif->atapi_dma = 1;
583   -
584 582 hwif->ultra_mask = udma_rates[chipset_family];
585 583 hwif->mwdma_mask = 0x07;
586 584  
drivers/ide/pci/sl82c105.c
... ... @@ -388,7 +388,6 @@
388 388 return;
389 389 }
390 390  
391   - hwif->atapi_dma = 1;
392 391 hwif->mwdma_mask = 0x07;
393 392  
394 393 hwif->ide_dma_on = &sl82c105_ide_dma_on;
drivers/ide/pci/slc90e66.c
... ... @@ -147,7 +147,6 @@
147 147 if (hwif->dma_base == 0)
148 148 return;
149 149  
150   - hwif->atapi_dma = 1;
151 150 hwif->ultra_mask = 0x1f;
152 151 hwif->mwdma_mask = 0x06;
153 152 hwif->swdma_mask = 0x04;
drivers/ide/pci/tc86c001.c
... ... @@ -198,7 +198,6 @@
198 198 /* Sector Count Register limit */
199 199 hwif->rqsize = 0xffff;
200 200  
201   - hwif->atapi_dma = 1;
202 201 hwif->ultra_mask = 0x1f;
203 202 hwif->mwdma_mask = 0x07;
204 203  
drivers/ide/pci/triflex.c
... ... @@ -104,7 +104,6 @@
104 104 if (hwif->dma_base == 0)
105 105 return;
106 106  
107   - hwif->atapi_dma = 1;
108 107 hwif->mwdma_mask = 0x07;
109 108 hwif->swdma_mask = 0x07;
110 109 }
drivers/ide/pci/trm290.c
... ... @@ -327,7 +327,9 @@
327 327 .autodma = NOAUTODMA,
328 328 .bootable = ON_BOARD,
329 329 #if 0 /* play it safe for now */
330   - .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA,
  330 + .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | IDE_HFLAG_NO_ATAPI_DMA,
  331 +#else
  332 + .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
331 333 #endif
332 334 };
333 335  
drivers/ide/pci/via82cxxx.c
... ... @@ -443,8 +443,6 @@
443 443 if (!hwif->dma_base)
444 444 return;
445 445  
446   - hwif->atapi_dma = 1;
447   -
448 446 hwif->ultra_mask = vdev->via_config->udma_mask;
449 447 hwif->mwdma_mask = 0x07;
450 448 hwif->swdma_mask = 0x07;
drivers/ide/ppc/pmac.c
... ... @@ -1780,7 +1780,6 @@
1780 1780 hwif->dma_timeout = &ide_dma_timeout;
1781 1781 hwif->dma_lost_irq = &pmac_ide_dma_lost_irq;
1782 1782  
1783   - hwif->atapi_dma = 1;
1784 1783 switch(pmif->kind) {
1785 1784 case controller_sh_ata6:
1786 1785 hwif->ultra_mask = pmif->cable_80 ? 0x7f : 0x07;
... ... @@ -685,7 +685,6 @@
685 685  
686 686 u8 pio_mask;
687 687  
688   - u8 atapi_dma; /* host supports atapi_dma */
689 688 u8 ultra_mask;
690 689 u8 mwdma_mask;
691 690 u8 swdma_mask;
... ... @@ -1258,6 +1257,8 @@
1258 1257 IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10),
1259 1258 /* host uses VDMA */
1260 1259 IDE_HFLAG_VDMA = (1 << 11),
  1260 + /* ATAPI DMA is unsupported */
  1261 + IDE_HFLAG_NO_ATAPI_DMA = (1 << 12),
1261 1262 };
1262 1263  
1263 1264 typedef struct ide_pci_device_s {