Commit 33c1002ed912ac9dacedd5d5b166da3b72d18460
1 parent
1c3dd326ad
Exists in
master
and in
7 other branches
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
- drivers/ide/cris/ide-cris.c
- drivers/ide/ide-dma.c
- drivers/ide/ide.c
- drivers/ide/mips/au1xxx-ide.c
- drivers/ide/pci/aec62xx.c
- drivers/ide/pci/alim15x3.c
- drivers/ide/pci/amd74xx.c
- drivers/ide/pci/atiixp.c
- drivers/ide/pci/cmd64x.c
- drivers/ide/pci/cs5520.c
- drivers/ide/pci/cs5530.c
- drivers/ide/pci/cs5535.c
- drivers/ide/pci/cy82c693.c
- drivers/ide/pci/generic.c
- drivers/ide/pci/hpt34x.c
- drivers/ide/pci/hpt366.c
- drivers/ide/pci/it8213.c
- drivers/ide/pci/it821x.c
- drivers/ide/pci/jmicron.c
- drivers/ide/pci/ns87415.c
- drivers/ide/pci/opti621.c
- drivers/ide/pci/pdc202xx_new.c
- drivers/ide/pci/pdc202xx_old.c
- drivers/ide/pci/piix.c
- drivers/ide/pci/sc1200.c
- drivers/ide/pci/scc_pata.c
- drivers/ide/pci/serverworks.c
- drivers/ide/pci/sgiioc4.c
- drivers/ide/pci/siimage.c
- drivers/ide/pci/sis5513.c
- drivers/ide/pci/sl82c105.c
- drivers/ide/pci/slc90e66.c
- drivers/ide/pci/tc86c001.c
- drivers/ide/pci/triflex.c
- drivers/ide/pci/trm290.c
- drivers/ide/pci/via82cxxx.c
- drivers/ide/ppc/pmac.c
- include/linux/ide.h
drivers/ide/arm/icside.c
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]) |
drivers/ide/ide.c
... | ... | @@ -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
drivers/ide/pci/atiixp.c
drivers/ide/pci/cmd64x.c
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
drivers/ide/pci/cs5535.c
drivers/ide/pci/cy82c693.c
drivers/ide/pci/generic.c
drivers/ide/pci/hpt34x.c
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
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
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
drivers/ide/pci/pdc202xx_new.c
drivers/ide/pci/pdc202xx_old.c
drivers/ide/pci/piix.c
drivers/ide/pci/sc1200.c
drivers/ide/pci/scc_pata.c
drivers/ide/pci/serverworks.c
drivers/ide/pci/sgiioc4.c
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
drivers/ide/pci/sl82c105.c
drivers/ide/pci/slc90e66.c
drivers/ide/pci/tc86c001.c
drivers/ide/pci/triflex.c
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
drivers/ide/ppc/pmac.c
include/linux/ide.h
... | ... | @@ -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 { |