aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-18 18:30:06 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-10-18 18:30:06 -0400
commit33c1002ed912ac9dacedd5d5b166da3b72d18460 (patch)
treec129987c6935542a8bd95924873ac6bf0e1e756c
parent1c3dd326ad790934fd88ec086e75a9d61ddaef8a (diff)
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>
-rw-r--r--drivers/ide/arm/icside.c1
-rw-r--r--drivers/ide/cris/ide-cris.c1
-rw-r--r--drivers/ide/ide-dma.c12
-rw-r--r--drivers/ide/ide.c3
-rw-r--r--drivers/ide/mips/au1xxx-ide.c3
-rw-r--r--drivers/ide/pci/aec62xx.c5
-rw-r--r--drivers/ide/pci/alim15x3.c4
-rw-r--r--drivers/ide/pci/amd74xx.c2
-rw-r--r--drivers/ide/pci/atiixp.c1
-rw-r--r--drivers/ide/pci/cmd64x.c1
-rw-r--r--drivers/ide/pci/cs5520.c6
-rw-r--r--drivers/ide/pci/cs5530.c1
-rw-r--r--drivers/ide/pci/cs5535.c1
-rw-r--r--drivers/ide/pci/cy82c693.c1
-rw-r--r--drivers/ide/pci/generic.c1
-rw-r--r--drivers/ide/pci/hpt34x.c1
-rw-r--r--drivers/ide/pci/hpt366.c6
-rw-r--r--drivers/ide/pci/it8213.c1
-rw-r--r--drivers/ide/pci/it821x.c12
-rw-r--r--drivers/ide/pci/jmicron.c1
-rw-r--r--drivers/ide/pci/ns87415.c3
-rw-r--r--drivers/ide/pci/opti621.c1
-rw-r--r--drivers/ide/pci/pdc202xx_new.c2
-rw-r--r--drivers/ide/pci/pdc202xx_old.c1
-rw-r--r--drivers/ide/pci/piix.c2
-rw-r--r--drivers/ide/pci/sc1200.c1
-rw-r--r--drivers/ide/pci/scc_pata.c1
-rw-r--r--drivers/ide/pci/serverworks.c2
-rw-r--r--drivers/ide/pci/sgiioc4.c1
-rw-r--r--drivers/ide/pci/siimage.c4
-rw-r--r--drivers/ide/pci/sis5513.c2
-rw-r--r--drivers/ide/pci/sl82c105.c1
-rw-r--r--drivers/ide/pci/slc90e66.c1
-rw-r--r--drivers/ide/pci/tc86c001.c1
-rw-r--r--drivers/ide/pci/triflex.c1
-rw-r--r--drivers/ide/pci/trm290.c4
-rw-r--r--drivers/ide/pci/via82cxxx.c2
-rw-r--r--drivers/ide/ppc/pmac.c1
-rw-r--r--include/linux/ide.h3
39 files changed, 40 insertions, 58 deletions
diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c
index e4875cef78bb..3af33fbf1f88 100644
--- a/drivers/ide/arm/icside.c
+++ b/drivers/ide/arm/icside.c
@@ -415,7 +415,6 @@ static void icside_dma_lost_irq(ide_drive_t *drive)
415 415
416static void icside_dma_init(ide_hwif_t *hwif) 416static void icside_dma_init(ide_hwif_t *hwif)
417{ 417{
418 hwif->atapi_dma = 1;
419 hwif->mwdma_mask = 7; /* MW0..2 */ 418 hwif->mwdma_mask = 7; /* MW0..2 */
420 hwif->swdma_mask = 7; /* SW0..2 */ 419 hwif->swdma_mask = 7; /* SW0..2 */
421 420
diff --git a/drivers/ide/cris/ide-cris.c b/drivers/ide/cris/ide-cris.c
index 06c75f18eb88..9a96a10ba9d3 100644
--- a/drivers/ide/cris/ide-cris.c
+++ b/drivers/ide/cris/ide-cris.c
@@ -805,6 +805,7 @@ init_e100_ide (void)
805 hwif->dma_host_on = &cris_dma_on; 805 hwif->dma_host_on = &cris_dma_on;
806 hwif->dma_off_quietly = &cris_dma_off; 806 hwif->dma_off_quietly = &cris_dma_off;
807 hwif->cbl = ATA_CBL_PATA40; 807 hwif->cbl = ATA_CBL_PATA40;
808 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
808 hwif->pio_mask = ATA_PIO4, 809 hwif->pio_mask = ATA_PIO4,
809 hwif->drives[0].autotune = 1; 810 hwif->drives[0].autotune = 1;
810 hwif->drives[1].autotune = 1; 811 hwif->drives[1].autotune = 1;
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index bc57ce6bf0b3..80b4f17f3941 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -338,8 +338,10 @@ 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 if (drive->media != ide_disk && hwif->atapi_dma == 0) 341 if (drive->media != ide_disk) {
342 return 0; 342 if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA)
343 return -1;
344 }
343 345
344 /* 346 /*
345 * Enable DMA on any drive that has 347 * Enable DMA on any drive that has
@@ -726,8 +728,10 @@ u8 ide_find_dma_mode(ide_drive_t *drive, u8 req_mode)
726 int x, i; 728 int x, i;
727 u8 mode = 0; 729 u8 mode = 0;
728 730
729 if (drive->media != ide_disk && hwif->atapi_dma == 0) 731 if (drive->media != ide_disk) {
730 return 0; 732 if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA)
733 return 0;
734 }
731 735
732 for (i = 0; i < ARRAY_SIZE(xfer_mode_bases); i++) { 736 for (i = 0; i < ARRAY_SIZE(xfer_mode_bases); i++) {
733 if (req_mode < xfer_mode_bases[i]) 737 if (req_mode < xfer_mode_bases[i])
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 5b090662683e..f78943f86314 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -134,8 +134,6 @@ static void init_hwif_data(ide_hwif_t *hwif, unsigned int index)
134 134
135 hwif->bus_state = BUSSTATE_ON; 135 hwif->bus_state = BUSSTATE_ON;
136 136
137 hwif->atapi_dma = 0; /* disable all atapi dma */
138
139 init_completion(&hwif->gendev_rel_comp); 137 init_completion(&hwif->gendev_rel_comp);
140 138
141 default_hwif_iops(hwif); 139 default_hwif_iops(hwif);
@@ -379,7 +377,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif)
379 377
380 hwif->pio_mask = tmp_hwif->pio_mask; 378 hwif->pio_mask = tmp_hwif->pio_mask;
381 379
382 hwif->atapi_dma = tmp_hwif->atapi_dma;
383 hwif->ultra_mask = tmp_hwif->ultra_mask; 380 hwif->ultra_mask = tmp_hwif->ultra_mask;
384 hwif->mwdma_mask = tmp_hwif->mwdma_mask; 381 hwif->mwdma_mask = tmp_hwif->mwdma_mask;
385 hwif->swdma_mask = tmp_hwif->swdma_mask; 382 hwif->swdma_mask = tmp_hwif->swdma_mask;
diff --git a/drivers/ide/mips/au1xxx-ide.c b/drivers/ide/mips/au1xxx-ide.c
index 47c035a550e3..2f322d7e881b 100644
--- a/drivers/ide/mips/au1xxx-ide.c
+++ b/drivers/ide/mips/au1xxx-ide.c
@@ -699,9 +699,6 @@ static int au_ide_probe(struct device *dev)
699 hwif->dma_host_on = &auide_dma_host_on; 699 hwif->dma_host_on = &auide_dma_host_on;
700 hwif->dma_lost_irq = &auide_dma_lost_irq; 700 hwif->dma_lost_irq = &auide_dma_lost_irq;
701 hwif->ide_dma_on = &auide_dma_on; 701 hwif->ide_dma_on = &auide_dma_on;
702
703 hwif->atapi_dma = 1;
704
705#else /* !CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */ 702#else /* !CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA */
706 hwif->channel = 0; 703 hwif->channel = 0;
707 hwif->hold = 1; 704 hwif->hold = 1;
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c
index 3a4c2c26a77e..7bf922fc7a07 100644
--- a/drivers/ide/pci/aec62xx.c
+++ b/drivers/ide/pci/aec62xx.c
@@ -247,6 +247,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
247 .autodma = AUTODMA, 247 .autodma = AUTODMA,
248 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, 248 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
249 .bootable = OFF_BOARD, 249 .bootable = OFF_BOARD,
250 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
250 .pio_mask = ATA_PIO4, 251 .pio_mask = ATA_PIO4,
251 .udma_mask = 0x07, /* udma0-2 */ 252 .udma_mask = 0x07, /* udma0-2 */
252 },{ /* 1 */ 253 },{ /* 1 */
@@ -256,6 +257,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
256 .init_hwif = init_hwif_aec62xx, 257 .init_hwif = init_hwif_aec62xx,
257 .autodma = NOAUTODMA, 258 .autodma = NOAUTODMA,
258 .bootable = OFF_BOARD, 259 .bootable = OFF_BOARD,
260 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
259 .pio_mask = ATA_PIO4, 261 .pio_mask = ATA_PIO4,
260 .udma_mask = 0x1f, /* udma0-4 */ 262 .udma_mask = 0x1f, /* udma0-4 */
261 },{ /* 2 */ 263 },{ /* 2 */
@@ -266,6 +268,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
266 .autodma = AUTODMA, 268 .autodma = AUTODMA,
267 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, 269 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
268 .bootable = NEVER_BOARD, 270 .bootable = NEVER_BOARD,
271 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
269 .pio_mask = ATA_PIO4, 272 .pio_mask = ATA_PIO4,
270 .udma_mask = 0x1f, /* udma0-4 */ 273 .udma_mask = 0x1f, /* udma0-4 */
271 },{ /* 3 */ 274 },{ /* 3 */
@@ -275,6 +278,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
275 .init_hwif = init_hwif_aec62xx, 278 .init_hwif = init_hwif_aec62xx,
276 .autodma = AUTODMA, 279 .autodma = AUTODMA,
277 .bootable = OFF_BOARD, 280 .bootable = OFF_BOARD,
281 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
278 .pio_mask = ATA_PIO4, 282 .pio_mask = ATA_PIO4,
279 .udma_mask = 0x3f, /* udma0-5 */ 283 .udma_mask = 0x3f, /* udma0-5 */
280 },{ /* 4 */ 284 },{ /* 4 */
@@ -285,6 +289,7 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
285 .autodma = AUTODMA, 289 .autodma = AUTODMA,
286 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, 290 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
287 .bootable = OFF_BOARD, 291 .bootable = OFF_BOARD,
292 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
288 .pio_mask = ATA_PIO4, 293 .pio_mask = ATA_PIO4,
289 .udma_mask = 0x3f, /* udma0-5 */ 294 .udma_mask = 0x3f, /* udma0-5 */
290 } 295 }
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c
index 31d4e50647d5..6f8ebc959d85 100644
--- a/drivers/ide/pci/alim15x3.c
+++ b/drivers/ide/pci/alim15x3.c
@@ -677,8 +677,8 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif)
677 * check in ->init_dma guarantees m5229_revision >= 0x20 here 677 * check in ->init_dma guarantees m5229_revision >= 0x20 here
678 */ 678 */
679 679
680 if (m5229_revision > 0x20) 680 if (m5229_revision == 0x20)
681 hwif->atapi_dma = 1; 681 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
682 682
683 if (m5229_revision <= 0x20) 683 if (m5229_revision <= 0x20)
684 hwif->ultra_mask = 0x00; /* no udma */ 684 hwif->ultra_mask = 0x00; /* no udma */
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c
index 3bf3d931eea1..9e9e2b6ef6cb 100644
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -260,8 +260,6 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
260 if (!hwif->dma_base) 260 if (!hwif->dma_base)
261 return; 261 return;
262 262
263 hwif->atapi_dma = 1;
264
265 hwif->ultra_mask = amd_config->udma_mask; 263 hwif->ultra_mask = amd_config->udma_mask;
266 hwif->mwdma_mask = 0x07; 264 hwif->mwdma_mask = 0x07;
267 if ((amd_config->flags & AMD_BAD_SWDMA) == 0) 265 if ((amd_config->flags & AMD_BAD_SWDMA) == 0)
diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c
index 446900da1329..9bb1b93325c6 100644
--- a/drivers/ide/pci/atiixp.c
+++ b/drivers/ide/pci/atiixp.c
@@ -183,7 +183,6 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
183 if (!hwif->dma_base) 183 if (!hwif->dma_base)
184 return; 184 return;
185 185
186 hwif->atapi_dma = 1;
187 hwif->ultra_mask = 0x3f; 186 hwif->ultra_mask = 0x3f;
188 hwif->mwdma_mask = 0x07; 187 hwif->mwdma_mask = 0x07;
189 188
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c
index f3d3bde8daba..bd9adfbe982e 100644
--- a/drivers/ide/pci/cmd64x.c
+++ b/drivers/ide/pci/cmd64x.c
@@ -517,7 +517,6 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif)
517 if (!hwif->dma_base) 517 if (!hwif->dma_base)
518 return; 518 return;
519 519
520 hwif->atapi_dma = 1;
521 hwif->mwdma_mask = 0x07; 520 hwif->mwdma_mask = 0x07;
522 hwif->ultra_mask = hwif->cds->udma_mask; 521 hwif->ultra_mask = hwif->cds->udma_mask;
523 522
diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c
index a8bf4940ca9c..b7906a980120 100644
--- a/drivers/ide/pci/cs5520.c
+++ b/drivers/ide/pci/cs5520.c
@@ -125,6 +125,7 @@ static void __devinit cs5520_init_setup_dma(struct pci_dev *dev, ide_pci_device_
125 125
126static int cs5520_dma_on(ide_drive_t *drive) 126static int cs5520_dma_on(ide_drive_t *drive)
127{ 127{
128 /* ATAPI is harder so leave it for now */
128 drive->vdma = 1; 129 drive->vdma = 1;
129 return 0; 130 return 0;
130} 131}
@@ -141,8 +142,6 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif)
141 142
142 hwif->ide_dma_on = &cs5520_dma_on; 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 hwif->ultra_mask = 0; 145 hwif->ultra_mask = 0;
147 hwif->swdma_mask = 0; 146 hwif->swdma_mask = 0;
148 hwif->mwdma_mask = 0; 147 hwif->mwdma_mask = 0;
@@ -156,7 +155,8 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif)
156 .autodma = AUTODMA, \ 155 .autodma = AUTODMA, \
157 .bootable = ON_BOARD, \ 156 .bootable = ON_BOARD, \
158 .host_flags = IDE_HFLAG_ISA_PORTS | \ 157 .host_flags = IDE_HFLAG_ISA_PORTS | \
159 IDE_HFLAG_VDMA, \ 158 IDE_HFLAG_VDMA | \
159 IDE_HFLAG_NO_ATAPI_DMA, \
160 .pio_mask = ATA_PIO4, \ 160 .pio_mask = ATA_PIO4, \
161 } 161 }
162 162
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c
index 0d23b8aabe9c..2ca5bb280a8a 100644
--- a/drivers/ide/pci/cs5530.c
+++ b/drivers/ide/pci/cs5530.c
@@ -264,7 +264,6 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif)
264 if (hwif->dma_base == 0) 264 if (hwif->dma_base == 0)
265 return; 265 return;
266 266
267 hwif->atapi_dma = 1;
268 hwif->ultra_mask = 0x07; 267 hwif->ultra_mask = 0x07;
269 hwif->mwdma_mask = 0x07; 268 hwif->mwdma_mask = 0x07;
270 269
diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c
index c141b7306179..45dc9a1b65a4 100644
--- a/drivers/ide/pci/cs5535.c
+++ b/drivers/ide/pci/cs5535.c
@@ -185,7 +185,6 @@ static void __devinit init_hwif_cs5535(ide_hwif_t *hwif)
185 if (hwif->dma_base == 0) 185 if (hwif->dma_base == 0)
186 return; 186 return;
187 187
188 hwif->atapi_dma = 1;
189 hwif->ultra_mask = 0x1F; 188 hwif->ultra_mask = 0x1F;
190 hwif->mwdma_mask = 0x07; 189 hwif->mwdma_mask = 0x07;
191 190
diff --git a/drivers/ide/pci/cy82c693.c b/drivers/ide/pci/cy82c693.c
index c498ecfd7fcb..c1e672f03244 100644
--- a/drivers/ide/pci/cy82c693.c
+++ b/drivers/ide/pci/cy82c693.c
@@ -437,7 +437,6 @@ static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif)
437 return; 437 return;
438 } 438 }
439 439
440 hwif->atapi_dma = 1;
441 hwif->mwdma_mask = 0x04; 440 hwif->mwdma_mask = 0x04;
442 hwif->swdma_mask = 0x04; 441 hwif->swdma_mask = 0x04;
443 442
diff --git a/drivers/ide/pci/generic.c b/drivers/ide/pci/generic.c
index d543abc26c71..dcee8278141e 100644
--- a/drivers/ide/pci/generic.c
+++ b/drivers/ide/pci/generic.c
@@ -69,7 +69,6 @@ static void __devinit init_hwif_generic (ide_hwif_t *hwif)
69 if (!(hwif->dma_base)) 69 if (!(hwif->dma_base))
70 return; 70 return;
71 71
72 hwif->atapi_dma = 1;
73 hwif->ultra_mask = 0x7f; 72 hwif->ultra_mask = 0x7f;
74 hwif->mwdma_mask = 0x07; 73 hwif->mwdma_mask = 0x07;
75 hwif->swdma_mask = 0x07; 74 hwif->swdma_mask = 0x07;
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c
index 44ac0e2f7a09..9709681dff6f 100644
--- a/drivers/ide/pci/hpt34x.c
+++ b/drivers/ide/pci/hpt34x.c
@@ -155,6 +155,7 @@ static ide_pci_device_t hpt34x_chipset __devinitdata = {
155 .autodma = NOAUTODMA, 155 .autodma = NOAUTODMA,
156 .bootable = NEVER_BOARD, 156 .bootable = NEVER_BOARD,
157 .extra = 16, 157 .extra = 16,
158 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
158 .pio_mask = ATA_PIO5, 159 .pio_mask = ATA_PIO5,
159}; 160};
160 161
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
index fcb21ddab2cc..5d96a086bde4 100644
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -1555,6 +1555,7 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1555 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, 1555 .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1556 .bootable = OFF_BOARD, 1556 .bootable = OFF_BOARD,
1557 .extra = 240, 1557 .extra = 240,
1558 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1558 .pio_mask = ATA_PIO4, 1559 .pio_mask = ATA_PIO4,
1559 },{ /* 1 */ 1560 },{ /* 1 */
1560 .name = "HPT372A", 1561 .name = "HPT372A",
@@ -1567,6 +1568,7 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1567 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, 1568 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
1568 .bootable = OFF_BOARD, 1569 .bootable = OFF_BOARD,
1569 .extra = 240, 1570 .extra = 240,
1571 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1570 .pio_mask = ATA_PIO4, 1572 .pio_mask = ATA_PIO4,
1571 },{ /* 2 */ 1573 },{ /* 2 */
1572 .name = "HPT302", 1574 .name = "HPT302",
@@ -1579,6 +1581,7 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1579 .udma_mask = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, 1581 .udma_mask = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
1580 .bootable = OFF_BOARD, 1582 .bootable = OFF_BOARD,
1581 .extra = 240, 1583 .extra = 240,
1584 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1582 .pio_mask = ATA_PIO4, 1585 .pio_mask = ATA_PIO4,
1583 },{ /* 3 */ 1586 },{ /* 3 */
1584 .name = "HPT371", 1587 .name = "HPT371",
@@ -1591,6 +1594,7 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1591 .udma_mask = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, 1594 .udma_mask = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
1592 .bootable = OFF_BOARD, 1595 .bootable = OFF_BOARD,
1593 .extra = 240, 1596 .extra = 240,
1597 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1594 .pio_mask = ATA_PIO4, 1598 .pio_mask = ATA_PIO4,
1595 },{ /* 4 */ 1599 },{ /* 4 */
1596 .name = "HPT374", 1600 .name = "HPT374",
@@ -1603,6 +1607,7 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1603 .udma_mask = ATA_UDMA5, 1607 .udma_mask = ATA_UDMA5,
1604 .bootable = OFF_BOARD, 1608 .bootable = OFF_BOARD,
1605 .extra = 240, 1609 .extra = 240,
1610 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1606 .pio_mask = ATA_PIO4, 1611 .pio_mask = ATA_PIO4,
1607 },{ /* 5 */ 1612 },{ /* 5 */
1608 .name = "HPT372N", 1613 .name = "HPT372N",
@@ -1615,6 +1620,7 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
1615 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5, 1620 .udma_mask = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
1616 .bootable = OFF_BOARD, 1621 .bootable = OFF_BOARD,
1617 .extra = 240, 1622 .extra = 240,
1623 .host_flags = IDE_HFLAG_NO_ATAPI_DMA,
1618 .pio_mask = ATA_PIO4, 1624 .pio_mask = ATA_PIO4,
1619 } 1625 }
1620}; 1626};
diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c
index 24a71d03744a..b52bca7b497a 100644
--- a/drivers/ide/pci/it8213.c
+++ b/drivers/ide/pci/it8213.c
@@ -176,7 +176,6 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif)
176 if (!hwif->dma_base) 176 if (!hwif->dma_base)
177 return; 177 return;
178 178
179 hwif->atapi_dma = 1;
180 hwif->ultra_mask = 0x7f; 179 hwif->ultra_mask = 0x7f;
181 hwif->mwdma_mask = 0x06; 180 hwif->mwdma_mask = 0x06;
182 hwif->swdma_mask = 0x04; 181 hwif->swdma_mask = 0x04;
diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c
index f3391a8698ac..1b1286baa8e0 100644
--- a/drivers/ide/pci/it821x.c
+++ b/drivers/ide/pci/it821x.c
@@ -544,12 +544,10 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
544 544
545 ide_set_hwifdata(hwif, idev); 545 ide_set_hwifdata(hwif, idev);
546 546
547 hwif->atapi_dma = 1;
548
549 pci_read_config_byte(hwif->pci_dev, 0x50, &conf); 547 pci_read_config_byte(hwif->pci_dev, 0x50, &conf);
550 if(conf & 1) { 548 if (conf & 1) {
551 idev->smart = 1; 549 idev->smart = 1;
552 hwif->atapi_dma = 0; 550 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
553 /* Long I/O's although allowed in LBA48 space cause the 551 /* Long I/O's although allowed in LBA48 space cause the
554 onboard firmware to enter the twighlight zone */ 552 onboard firmware to enter the twighlight zone */
555 hwif->rqsize = 256; 553 hwif->rqsize = 256;
@@ -570,10 +568,10 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
570 */ 568 */
571 569
572 pci_read_config_byte(hwif->pci_dev, 0x08, &conf); 570 pci_read_config_byte(hwif->pci_dev, 0x08, &conf);
573 if(conf == 0x10) { 571 if (conf == 0x10) {
574 idev->timing10 = 1; 572 idev->timing10 = 1;
575 hwif->atapi_dma = 0; 573 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
576 if(!idev->smart) 574 if (idev->smart == 0)
577 printk(KERN_WARNING "it821x: Revision 0x10, workarounds activated.\n"); 575 printk(KERN_WARNING "it821x: Revision 0x10, workarounds activated.\n");
578 } 576 }
579 577
diff --git a/drivers/ide/pci/jmicron.c b/drivers/ide/pci/jmicron.c
index bb893ffcc987..d151fbc26370 100644
--- a/drivers/ide/pci/jmicron.c
+++ b/drivers/ide/pci/jmicron.c
@@ -117,7 +117,6 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif)
117 if (hwif->dma_base == 0) 117 if (hwif->dma_base == 0)
118 return; 118 return;
119 119
120 hwif->atapi_dma = 1;
121 hwif->ultra_mask = 0x7f; 120 hwif->ultra_mask = 0x7f;
122 hwif->mwdma_mask = 0x07; 121 hwif->mwdma_mask = 0x07;
123 122
diff --git a/drivers/ide/pci/ns87415.c b/drivers/ide/pci/ns87415.c
index a8cd50ab62fb..2d5dd983bfe3 100644
--- a/drivers/ide/pci/ns87415.c
+++ b/drivers/ide/pci/ns87415.c
@@ -268,7 +268,8 @@ static ide_pci_device_t ns87415_chipset __devinitdata = {
268 .init_hwif = init_hwif_ns87415, 268 .init_hwif = init_hwif_ns87415,
269 .autodma = AUTODMA, 269 .autodma = AUTODMA,
270 .bootable = ON_BOARD, 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
274static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_device_id *id) 275static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_device_id *id)
diff --git a/drivers/ide/pci/opti621.c b/drivers/ide/pci/opti621.c
index 250662ea18ad..2437aed73f35 100644
--- a/drivers/ide/pci/opti621.c
+++ b/drivers/ide/pci/opti621.c
@@ -336,7 +336,6 @@ static void __devinit init_hwif_opti621 (ide_hwif_t *hwif)
336 if (!(hwif->dma_base)) 336 if (!(hwif->dma_base))
337 return; 337 return;
338 338
339 hwif->atapi_dma = 1;
340 hwif->mwdma_mask = 0x07; 339 hwif->mwdma_mask = 0x07;
341 hwif->swdma_mask = 0x07; 340 hwif->swdma_mask = 0x07;
342} 341}
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c
index 8704b6f33312..2238df9b8372 100644
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -482,8 +482,6 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif)
482 if (hwif->dma_base == 0) 482 if (hwif->dma_base == 0)
483 return; 483 return;
484 484
485 hwif->atapi_dma = 1;
486
487 hwif->ultra_mask = hwif->cds->udma_mask; 485 hwif->ultra_mask = hwif->cds->udma_mask;
488 hwif->mwdma_mask = 0x07; 486 hwif->mwdma_mask = 0x07;
489 487
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c
index e1d2337a9f1d..903bf715fab3 100644
--- a/drivers/ide/pci/pdc202xx_old.c
+++ b/drivers/ide/pci/pdc202xx_old.c
@@ -330,7 +330,6 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
330 hwif->ultra_mask = hwif->cds->udma_mask; 330 hwif->ultra_mask = hwif->cds->udma_mask;
331 hwif->mwdma_mask = 0x07; 331 hwif->mwdma_mask = 0x07;
332 hwif->swdma_mask = 0x07; 332 hwif->swdma_mask = 0x07;
333 hwif->atapi_dma = 1;
334 333
335 hwif->dma_lost_irq = &pdc202xx_dma_lost_irq; 334 hwif->dma_lost_irq = &pdc202xx_dma_lost_irq;
336 hwif->dma_timeout = &pdc202xx_dma_timeout; 335 hwif->dma_timeout = &pdc202xx_dma_timeout;
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c
index a8dd0c0add35..3694db62f257 100644
--- a/drivers/ide/pci/piix.c
+++ b/drivers/ide/pci/piix.c
@@ -397,8 +397,6 @@ static void __devinit init_hwif_piix(ide_hwif_t *hwif)
397 if (piix_is_ichx(hwif->pci_dev)) 397 if (piix_is_ichx(hwif->pci_dev))
398 hwif->ide_dma_clear_irq = &piix_dma_clear_irq; 398 hwif->ide_dma_clear_irq = &piix_dma_clear_irq;
399 399
400 hwif->atapi_dma = 1;
401
402 hwif->ultra_mask = hwif->cds->udma_mask; 400 hwif->ultra_mask = hwif->cds->udma_mask;
403 hwif->mwdma_mask = 0x06; 401 hwif->mwdma_mask = 0x06;
404 hwif->swdma_mask = 0x04; 402 hwif->swdma_mask = 0x04;
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c
index 54c5c98a2e26..0ba9d2408575 100644
--- a/drivers/ide/pci/sc1200.c
+++ b/drivers/ide/pci/sc1200.c
@@ -377,7 +377,6 @@ static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif)
377 hwif->udma_filter = sc1200_udma_filter; 377 hwif->udma_filter = sc1200_udma_filter;
378 hwif->ide_dma_end = &sc1200_ide_dma_end; 378 hwif->ide_dma_end = &sc1200_ide_dma_end;
379 379
380 hwif->atapi_dma = 1;
381 hwif->ultra_mask = 0x07; 380 hwif->ultra_mask = 0x07;
382 hwif->mwdma_mask = 0x07; 381 hwif->mwdma_mask = 0x07;
383} 382}
diff --git a/drivers/ide/pci/scc_pata.c b/drivers/ide/pci/scc_pata.c
index bd4c1d3070e4..ac519fa62153 100644
--- a/drivers/ide/pci/scc_pata.c
+++ b/drivers/ide/pci/scc_pata.c
@@ -693,7 +693,6 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif)
693 } 693 }
694 hwif->mwdma_mask = 0x00; 694 hwif->mwdma_mask = 0x00;
695 hwif->swdma_mask = 0x00; 695 hwif->swdma_mask = 0x00;
696 hwif->atapi_dma = 1;
697 696
698 /* we support 80c cable only. */ 697 /* we support 80c cable only. */
699 hwif->cbl = ATA_CBL_PATA80; 698 hwif->cbl = ATA_CBL_PATA80;
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c
index d3ffc52e22af..40b89a29014f 100644
--- a/drivers/ide/pci/serverworks.c
+++ b/drivers/ide/pci/serverworks.c
@@ -367,8 +367,6 @@ static void __devinit init_hwif_svwks (ide_hwif_t *hwif)
367 hwif->set_dma_mode = &svwks_set_dma_mode; 367 hwif->set_dma_mode = &svwks_set_dma_mode;
368 hwif->udma_filter = &svwks_udma_filter; 368 hwif->udma_filter = &svwks_udma_filter;
369 369
370 hwif->atapi_dma = 1;
371
372 if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) 370 if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE)
373 hwif->ultra_mask = 0x3f; 371 hwif->ultra_mask = 0x3f;
374 372
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c
index 9a9474f534e5..9122cb71bcc9 100644
--- a/drivers/ide/pci/sgiioc4.c
+++ b/drivers/ide/pci/sgiioc4.c
@@ -592,7 +592,6 @@ ide_init_sgiioc4(ide_hwif_t * hwif)
592 if (hwif->dma_base == 0) 592 if (hwif->dma_base == 0)
593 return; 593 return;
594 594
595 hwif->atapi_dma = 1;
596 hwif->mwdma_mask = 0x04; 595 hwif->mwdma_mask = 0x04;
597 596
598 hwif->dma_setup = &sgiioc4_ide_dma_setup; 597 hwif->dma_setup = &sgiioc4_ide_dma_setup;
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c
index 5ca14ae46c9d..4c8108345d83 100644
--- a/drivers/ide/pci/siimage.c
+++ b/drivers/ide/pci/siimage.c
@@ -899,8 +899,8 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif)
899 hwif->ultra_mask = 0x7f; 899 hwif->ultra_mask = 0x7f;
900 hwif->mwdma_mask = 0x07; 900 hwif->mwdma_mask = 0x07;
901 901
902 if (!is_sata(hwif)) 902 if (is_sata(hwif))
903 hwif->atapi_dma = 1; 903 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
904 904
905 if (hwif->cbl != ATA_CBL_PATA40_SHORT) 905 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
906 hwif->cbl = ata66_siimage(hwif); 906 hwif->cbl = ata66_siimage(hwif);
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c
index 5a54e2e20b3c..f756c7f83b5d 100644
--- a/drivers/ide/pci/sis5513.c
+++ b/drivers/ide/pci/sis5513.c
@@ -579,8 +579,6 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif)
579 if (hwif->dma_base == 0) 579 if (hwif->dma_base == 0)
580 return; 580 return;
581 581
582 hwif->atapi_dma = 1;
583
584 hwif->ultra_mask = udma_rates[chipset_family]; 582 hwif->ultra_mask = udma_rates[chipset_family];
585 hwif->mwdma_mask = 0x07; 583 hwif->mwdma_mask = 0x07;
586 584
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c
index 771efb8884c8..e78448148aca 100644
--- a/drivers/ide/pci/sl82c105.c
+++ b/drivers/ide/pci/sl82c105.c
@@ -388,7 +388,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
388 return; 388 return;
389 } 389 }
390 390
391 hwif->atapi_dma = 1;
392 hwif->mwdma_mask = 0x07; 391 hwif->mwdma_mask = 0x07;
393 392
394 hwif->ide_dma_on = &sl82c105_ide_dma_on; 393 hwif->ide_dma_on = &sl82c105_ide_dma_on;
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c
index fa8df6d43832..d0447219752d 100644
--- a/drivers/ide/pci/slc90e66.c
+++ b/drivers/ide/pci/slc90e66.c
@@ -147,7 +147,6 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif)
147 if (hwif->dma_base == 0) 147 if (hwif->dma_base == 0)
148 return; 148 return;
149 149
150 hwif->atapi_dma = 1;
151 hwif->ultra_mask = 0x1f; 150 hwif->ultra_mask = 0x1f;
152 hwif->mwdma_mask = 0x06; 151 hwif->mwdma_mask = 0x06;
153 hwif->swdma_mask = 0x04; 152 hwif->swdma_mask = 0x04;
diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c
index de62db576adc..0e3a8fe2037d 100644
--- a/drivers/ide/pci/tc86c001.c
+++ b/drivers/ide/pci/tc86c001.c
@@ -198,7 +198,6 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif)
198 /* Sector Count Register limit */ 198 /* Sector Count Register limit */
199 hwif->rqsize = 0xffff; 199 hwif->rqsize = 0xffff;
200 200
201 hwif->atapi_dma = 1;
202 hwif->ultra_mask = 0x1f; 201 hwif->ultra_mask = 0x1f;
203 hwif->mwdma_mask = 0x07; 202 hwif->mwdma_mask = 0x07;
204 203
diff --git a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c
index 4075c907f05c..68e1e9adf84d 100644
--- a/drivers/ide/pci/triflex.c
+++ b/drivers/ide/pci/triflex.c
@@ -104,7 +104,6 @@ static void __devinit init_hwif_triflex(ide_hwif_t *hwif)
104 if (hwif->dma_base == 0) 104 if (hwif->dma_base == 0)
105 return; 105 return;
106 106
107 hwif->atapi_dma = 1;
108 hwif->mwdma_mask = 0x07; 107 hwif->mwdma_mask = 0x07;
109 hwif->swdma_mask = 0x07; 108 hwif->swdma_mask = 0x07;
110} 109}
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c
index e3d943ada7b0..1307454f9c15 100644
--- a/drivers/ide/pci/trm290.c
+++ b/drivers/ide/pci/trm290.c
@@ -327,7 +327,9 @@ static ide_pci_device_t trm290_chipset __devinitdata = {
327 .autodma = NOAUTODMA, 327 .autodma = NOAUTODMA,
328 .bootable = ON_BOARD, 328 .bootable = ON_BOARD,
329#if 0 /* play it safe for now */ 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#endif 333#endif
332}; 334};
333 335
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c
index b25fb65b240e..648432f4c79e 100644
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -443,8 +443,6 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif)
443 if (!hwif->dma_base) 443 if (!hwif->dma_base)
444 return; 444 return;
445 445
446 hwif->atapi_dma = 1;
447
448 hwif->ultra_mask = vdev->via_config->udma_mask; 446 hwif->ultra_mask = vdev->via_config->udma_mask;
449 hwif->mwdma_mask = 0x07; 447 hwif->mwdma_mask = 0x07;
450 hwif->swdma_mask = 0x07; 448 hwif->swdma_mask = 0x07;
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c
index 1d25a3433008..c55479356768 100644
--- a/drivers/ide/ppc/pmac.c
+++ b/drivers/ide/ppc/pmac.c
@@ -1780,7 +1780,6 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1780 hwif->dma_timeout = &ide_dma_timeout; 1780 hwif->dma_timeout = &ide_dma_timeout;
1781 hwif->dma_lost_irq = &pmac_ide_dma_lost_irq; 1781 hwif->dma_lost_irq = &pmac_ide_dma_lost_irq;
1782 1782
1783 hwif->atapi_dma = 1;
1784 switch(pmif->kind) { 1783 switch(pmif->kind) {
1785 case controller_sh_ata6: 1784 case controller_sh_ata6:
1786 hwif->ultra_mask = pmif->cable_80 ? 0x7f : 0x07; 1785 hwif->ultra_mask = pmif->cable_80 ? 0x7f : 0x07;
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 69dbe7dc04be..e44ecc942ff8 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -685,7 +685,6 @@ typedef struct hwif_s {
685 685
686 u8 pio_mask; 686 u8 pio_mask;
687 687
688 u8 atapi_dma; /* host supports atapi_dma */
689 u8 ultra_mask; 688 u8 ultra_mask;
690 u8 mwdma_mask; 689 u8 mwdma_mask;
691 u8 swdma_mask; 690 u8 swdma_mask;
@@ -1258,6 +1257,8 @@ enum {
1258 IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10), 1257 IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10),
1259 /* host uses VDMA */ 1258 /* host uses VDMA */
1260 IDE_HFLAG_VDMA = (1 << 11), 1259 IDE_HFLAG_VDMA = (1 << 11),
1260 /* ATAPI DMA is unsupported */
1261 IDE_HFLAG_NO_ATAPI_DMA = (1 << 12),
1261}; 1262};
1262 1263
1263typedef struct ide_pci_device_s { 1264typedef struct ide_pci_device_s {