diff options
| author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-03-31 14:15:21 -0400 |
|---|---|---|
| committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-03-31 14:15:21 -0400 |
| commit | 11998b316173f814698f9037ce9179d634d1f423 (patch) | |
| tree | 468bc633384c3bb4cd32754fd853c07fcd54afbc | |
| parent | 8a4a5738ba499083cf4c5668895efe220b1946d3 (diff) | |
ide: move ide_map_sg() call out of ->dma_setup method (take 2)
Move ide_map_sg() call from ->dma_setup implementations and
ide_destroy_dmatable() one from *_build_dmatable() to ide_dma_prepare().
There should be no functional changes caused by this patch.
Sergei:
Removed 'use_pio_instead' labels and replaced 'goto' with 'return 0' --
that required no changes to the follow-up patches...
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
| -rw-r--r-- | drivers/ide/au1xxx-ide.c | 9 | ||||
| -rw-r--r-- | drivers/ide/ide-dma-sff.c | 2 | ||||
| -rw-r--r-- | drivers/ide/ide-dma.c | 8 | ||||
| -rw-r--r-- | drivers/ide/pmac.c | 11 | ||||
| -rw-r--r-- | drivers/ide/scc_pata.c | 4 | ||||
| -rw-r--r-- | drivers/ide/sgiioc4.c | 9 | ||||
| -rw-r--r-- | drivers/ide/trm290.c | 5 | ||||
| -rw-r--r-- | drivers/ide/tx4939ide.c | 6 |
8 files changed, 17 insertions, 37 deletions
diff --git a/drivers/ide/au1xxx-ide.c b/drivers/ide/au1xxx-ide.c index ba2a211758a9..239643806b97 100644 --- a/drivers/ide/au1xxx-ide.c +++ b/drivers/ide/au1xxx-ide.c | |||
| @@ -236,7 +236,7 @@ static int auide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 236 | if (++count >= PRD_ENTRIES) { | 236 | if (++count >= PRD_ENTRIES) { |
| 237 | printk(KERN_WARNING "%s: DMA table too small\n", | 237 | printk(KERN_WARNING "%s: DMA table too small\n", |
| 238 | drive->name); | 238 | drive->name); |
| 239 | goto use_pio_instead; | 239 | return 0; |
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | /* Lets enable intr for the last descriptor only */ | 242 | /* Lets enable intr for the last descriptor only */ |
| @@ -272,9 +272,6 @@ static int auide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 272 | if (count) | 272 | if (count) |
| 273 | return 1; | 273 | return 1; |
| 274 | 274 | ||
| 275 | use_pio_instead: | ||
| 276 | ide_destroy_dmatable(drive); | ||
| 277 | |||
| 278 | return 0; /* revert to PIO for this request */ | 275 | return 0; /* revert to PIO for this request */ |
| 279 | } | 276 | } |
| 280 | 277 | ||
| @@ -290,10 +287,8 @@ static void auide_dma_start(ide_drive_t *drive ) | |||
| 290 | 287 | ||
| 291 | static int auide_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) | 288 | static int auide_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) |
| 292 | { | 289 | { |
| 293 | if (auide_build_dmatable(drive, cmd) == 0) { | 290 | if (auide_build_dmatable(drive, cmd) == 0) |
| 294 | ide_map_sg(drive, cmd); | ||
| 295 | return 1; | 291 | return 1; |
| 296 | } | ||
| 297 | 292 | ||
| 298 | drive->waiting_for_dma = 1; | 293 | drive->waiting_for_dma = 1; |
| 299 | return 0; | 294 | return 0; |
diff --git a/drivers/ide/ide-dma-sff.c b/drivers/ide/ide-dma-sff.c index f8adbb5eb339..e10054b827a0 100644 --- a/drivers/ide/ide-dma-sff.c +++ b/drivers/ide/ide-dma-sff.c | |||
| @@ -166,8 +166,6 @@ use_pio_instead: | |||
| 166 | printk(KERN_ERR "%s: %s\n", drive->name, | 166 | printk(KERN_ERR "%s: %s\n", drive->name, |
| 167 | count ? "DMA table too small" : "empty DMA table?"); | 167 | count ? "DMA table too small" : "empty DMA table?"); |
| 168 | 168 | ||
| 169 | ide_destroy_dmatable(drive); | ||
| 170 | |||
| 171 | return 0; /* revert to PIO for this request */ | 169 | return 0; /* revert to PIO for this request */ |
| 172 | } | 170 | } |
| 173 | EXPORT_SYMBOL_GPL(ide_build_dmatable); | 171 | EXPORT_SYMBOL_GPL(ide_build_dmatable); |
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c index c0505e2dfc2e..d61f9a8cc18a 100644 --- a/drivers/ide/ide-dma.c +++ b/drivers/ide/ide-dma.c | |||
| @@ -570,8 +570,12 @@ int ide_dma_prepare(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 570 | 570 | ||
| 571 | if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0 || | 571 | if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0 || |
| 572 | (dma_ops->dma_check && dma_ops->dma_check(drive, cmd)) || | 572 | (dma_ops->dma_check && dma_ops->dma_check(drive, cmd)) || |
| 573 | ide_build_sglist(drive, cmd) == 0 || | 573 | ide_build_sglist(drive, cmd) == 0) |
| 574 | dma_ops->dma_setup(drive, cmd)) | ||
| 575 | return 1; | 574 | return 1; |
| 575 | if (dma_ops->dma_setup(drive, cmd)) { | ||
| 576 | ide_destroy_dmatable(drive); | ||
| 577 | ide_map_sg(drive, cmd); | ||
| 578 | return 1; | ||
| 579 | } | ||
| 576 | return 0; | 580 | return 0; |
| 577 | } | 581 | } |
diff --git a/drivers/ide/pmac.c b/drivers/ide/pmac.c index 5643a8b957bf..1df7b7636453 100644 --- a/drivers/ide/pmac.c +++ b/drivers/ide/pmac.c | |||
| @@ -1455,7 +1455,7 @@ static int pmac_ide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 1455 | "switching to PIO on Ohare chipset\n", drive->name); | 1455 | "switching to PIO on Ohare chipset\n", drive->name); |
| 1456 | pmif->broken_dma_warn = 1; | 1456 | pmif->broken_dma_warn = 1; |
| 1457 | } | 1457 | } |
| 1458 | goto use_pio_instead; | 1458 | return 0; |
| 1459 | } | 1459 | } |
| 1460 | while (cur_len) { | 1460 | while (cur_len) { |
| 1461 | unsigned int tc = (cur_len < 0xfe00)? cur_len: 0xfe00; | 1461 | unsigned int tc = (cur_len < 0xfe00)? cur_len: 0xfe00; |
| @@ -1463,7 +1463,7 @@ static int pmac_ide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 1463 | if (count++ >= MAX_DCMDS) { | 1463 | if (count++ >= MAX_DCMDS) { |
| 1464 | printk(KERN_WARNING "%s: DMA table too small\n", | 1464 | printk(KERN_WARNING "%s: DMA table too small\n", |
| 1465 | drive->name); | 1465 | drive->name); |
| 1466 | goto use_pio_instead; | 1466 | return 0; |
| 1467 | } | 1467 | } |
| 1468 | st_le16(&table->command, wr? OUTPUT_MORE: INPUT_MORE); | 1468 | st_le16(&table->command, wr? OUTPUT_MORE: INPUT_MORE); |
| 1469 | st_le16(&table->req_count, tc); | 1469 | st_le16(&table->req_count, tc); |
| @@ -1492,9 +1492,6 @@ static int pmac_ide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 1492 | 1492 | ||
| 1493 | printk(KERN_DEBUG "%s: empty DMA table?\n", drive->name); | 1493 | printk(KERN_DEBUG "%s: empty DMA table?\n", drive->name); |
| 1494 | 1494 | ||
| 1495 | use_pio_instead: | ||
| 1496 | ide_destroy_dmatable(drive); | ||
| 1497 | |||
| 1498 | return 0; /* revert to PIO for this request */ | 1495 | return 0; /* revert to PIO for this request */ |
| 1499 | } | 1496 | } |
| 1500 | 1497 | ||
| @@ -1510,10 +1507,8 @@ static int pmac_ide_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 1510 | u8 unit = drive->dn & 1, ata4 = (pmif->kind == controller_kl_ata4); | 1507 | u8 unit = drive->dn & 1, ata4 = (pmif->kind == controller_kl_ata4); |
| 1511 | u8 write = !!(cmd->tf_flags & IDE_TFLAG_WRITE); | 1508 | u8 write = !!(cmd->tf_flags & IDE_TFLAG_WRITE); |
| 1512 | 1509 | ||
| 1513 | if (pmac_ide_build_dmatable(drive, cmd) == 0) { | 1510 | if (pmac_ide_build_dmatable(drive, cmd) == 0) |
| 1514 | ide_map_sg(drive, cmd); | ||
| 1515 | return 1; | 1511 | return 1; |
| 1516 | } | ||
| 1517 | 1512 | ||
| 1518 | /* Apple adds 60ns to wrDataSetup on reads */ | 1513 | /* Apple adds 60ns to wrDataSetup on reads */ |
| 1519 | if (ata4 && (pmif->timings[unit] & TR_66_UDMA_EN)) { | 1514 | if (ata4 && (pmif->timings[unit] & TR_66_UDMA_EN)) { |
diff --git a/drivers/ide/scc_pata.c b/drivers/ide/scc_pata.c index 693536ebe331..2cdf51d8917a 100644 --- a/drivers/ide/scc_pata.c +++ b/drivers/ide/scc_pata.c | |||
| @@ -321,10 +321,8 @@ static int scc_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 321 | u8 dma_stat; | 321 | u8 dma_stat; |
| 322 | 322 | ||
| 323 | /* fall back to pio! */ | 323 | /* fall back to pio! */ |
| 324 | if (ide_build_dmatable(drive, cmd) == 0) { | 324 | if (ide_build_dmatable(drive, cmd) == 0) |
| 325 | ide_map_sg(drive, cmd); | ||
| 326 | return 1; | 325 | return 1; |
| 327 | } | ||
| 328 | 326 | ||
| 329 | /* PRD table */ | 327 | /* PRD table */ |
| 330 | out_be32((void __iomem *)(hwif->dma_base + 8), hwif->dmatable_dma); | 328 | out_be32((void __iomem *)(hwif->dma_base + 8), hwif->dmatable_dma); |
diff --git a/drivers/ide/sgiioc4.c b/drivers/ide/sgiioc4.c index 457a762a1f29..d90e8c5af0a2 100644 --- a/drivers/ide/sgiioc4.c +++ b/drivers/ide/sgiioc4.c | |||
| @@ -442,7 +442,7 @@ static int sgiioc4_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 442 | printk(KERN_WARNING | 442 | printk(KERN_WARNING |
| 443 | "%s: DMA table too small\n", | 443 | "%s: DMA table too small\n", |
| 444 | drive->name); | 444 | drive->name); |
| 445 | goto use_pio_instead; | 445 | return 0; |
| 446 | } else { | 446 | } else { |
| 447 | u32 bcount = | 447 | u32 bcount = |
| 448 | 0x10000 - (cur_addr & 0xffff); | 448 | 0x10000 - (cur_addr & 0xffff); |
| @@ -477,9 +477,6 @@ static int sgiioc4_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 477 | return count; | 477 | return count; |
| 478 | } | 478 | } |
| 479 | 479 | ||
| 480 | use_pio_instead: | ||
| 481 | ide_destroy_dmatable(drive); | ||
| 482 | |||
| 483 | return 0; /* revert to PIO for this request */ | 480 | return 0; /* revert to PIO for this request */ |
| 484 | } | 481 | } |
| 485 | 482 | ||
| @@ -488,11 +485,9 @@ static int sgiioc4_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 488 | int ddir; | 485 | int ddir; |
| 489 | u8 write = !!(cmd->tf_flags & IDE_TFLAG_WRITE); | 486 | u8 write = !!(cmd->tf_flags & IDE_TFLAG_WRITE); |
| 490 | 487 | ||
| 491 | if (sgiioc4_build_dmatable(drive, cmd) == 0) { | 488 | if (sgiioc4_build_dmatable(drive, cmd) == 0) |
| 492 | /* try PIO instead of DMA */ | 489 | /* try PIO instead of DMA */ |
| 493 | ide_map_sg(drive, cmd); | ||
| 494 | return 1; | 490 | return 1; |
| 495 | } | ||
| 496 | 491 | ||
| 497 | if (write) | 492 | if (write) |
| 498 | /* Writes TO the IOC4 FROM Main Memory */ | 493 | /* Writes TO the IOC4 FROM Main Memory */ |
diff --git a/drivers/ide/trm290.c b/drivers/ide/trm290.c index 1076efd050dc..0be27cae27d5 100644 --- a/drivers/ide/trm290.c +++ b/drivers/ide/trm290.c | |||
| @@ -193,11 +193,10 @@ static int trm290_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 193 | unsigned int count, rw = (cmd->tf_flags & IDE_TFLAG_WRITE) ? 1 : 2; | 193 | unsigned int count, rw = (cmd->tf_flags & IDE_TFLAG_WRITE) ? 1 : 2; |
| 194 | 194 | ||
| 195 | count = ide_build_dmatable(drive, cmd); | 195 | count = ide_build_dmatable(drive, cmd); |
| 196 | if (count == 0) { | 196 | if (count == 0) |
| 197 | ide_map_sg(drive, cmd); | ||
| 198 | /* try PIO instead of DMA */ | 197 | /* try PIO instead of DMA */ |
| 199 | return 1; | 198 | return 1; |
| 200 | } | 199 | |
| 201 | outl(hwif->dmatable_dma | rw, hwif->dma_base); | 200 | outl(hwif->dmatable_dma | rw, hwif->dma_base); |
| 202 | drive->waiting_for_dma = 1; | 201 | drive->waiting_for_dma = 1; |
| 203 | /* start DMA */ | 202 | /* start DMA */ |
diff --git a/drivers/ide/tx4939ide.c b/drivers/ide/tx4939ide.c index f62ced855cf3..7267c46c07cd 100644 --- a/drivers/ide/tx4939ide.c +++ b/drivers/ide/tx4939ide.c | |||
| @@ -279,8 +279,6 @@ use_pio_instead: | |||
| 279 | printk(KERN_ERR "%s: %s\n", drive->name, | 279 | printk(KERN_ERR "%s: %s\n", drive->name, |
| 280 | count ? "DMA table too small" : "empty DMA table?"); | 280 | count ? "DMA table too small" : "empty DMA table?"); |
| 281 | 281 | ||
| 282 | ide_destroy_dmatable(drive); | ||
| 283 | |||
| 284 | return 0; /* revert to PIO for this request */ | 282 | return 0; /* revert to PIO for this request */ |
| 285 | } | 283 | } |
| 286 | #else | 284 | #else |
| @@ -294,10 +292,8 @@ static int tx4939ide_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) | |||
| 294 | u8 rw = (cmd->tf_flags & IDE_TFLAG_WRITE) ? 0 : ATA_DMA_WR; | 292 | u8 rw = (cmd->tf_flags & IDE_TFLAG_WRITE) ? 0 : ATA_DMA_WR; |
| 295 | 293 | ||
| 296 | /* fall back to PIO! */ | 294 | /* fall back to PIO! */ |
| 297 | if (tx4939ide_build_dmatable(drive, cmd) == 0) { | 295 | if (tx4939ide_build_dmatable(drive, cmd) == 0) |
| 298 | ide_map_sg(drive, cmd); | ||
| 299 | return 1; | 296 | return 1; |
| 300 | } | ||
| 301 | 297 | ||
| 302 | /* PRD table */ | 298 | /* PRD table */ |
| 303 | tx4939ide_writel(hwif->dmatable_dma, base, TX4939IDE_PRD_Ptr); | 299 | tx4939ide_writel(hwif->dmatable_dma, base, TX4939IDE_PRD_Ptr); |
