2  *  IDE DMA support (including IDE PCI BM-DMA).
 
   4  *  Copyright (C) 1995-1998   Mark Lord
 
   5  *  Copyright (C) 1999-2000   Andre Hedrick <andre@linux-ide.org>
 
   6  *  Copyright (C) 2004, 2007  Bartlomiej Zolnierkiewicz
 
   8  *  May be copied or modified under the terms of the GNU General Public License
 
  10  *  DMA is supported for all IDE devices (disk drives, cdroms, tapes, floppies).
 
  14  *  Special Thanks to Mark for his Six years of work.
 
  18  * Thanks to "Christopher J. Reimer" <reimer@doe.carleton.ca> for
 
  19  * fixing the problem with the BIOS on some Acer motherboards.
 
  21  * Thanks to "Benoit Poulot-Cazajous" <poulot@chorus.fr> for testing
 
  22  * "TX" chipset compatibility and for providing patches for the "TX" chipset.
 
  24  * Thanks to Christian Brunner <chb@muc.de> for taking a good first crack
 
  25  * at generic DMA -- his patches were referred to when preparing this code.
 
  27  * Most importantly, thanks to Robert Bringman <rob@mars.trion.com>
 
  28  * for supplying a Promise UDMA board & WD UDMA drive for this work!
 
  31 #include <linux/module.h>
 
  32 #include <linux/types.h>
 
  33 #include <linux/kernel.h>
 
  34 #include <linux/timer.h>
 
  36 #include <linux/interrupt.h>
 
  37 #include <linux/pci.h>
 
  38 #include <linux/init.h>
 
  39 #include <linux/ide.h>
 
  40 #include <linux/delay.h>
 
  41 #include <linux/scatterlist.h>
 
  42 #include <linux/dma-mapping.h>
 
  47 static const struct drive_list_entry drive_whitelist [] = {
 
  49         { "Micropolis 2112A"    ,       NULL            },
 
  50         { "CONNER CTMA 4000"    ,       NULL            },
 
  51         { "CONNER CTT8000-A"    ,       NULL            },
 
  52         { "ST34342A"            ,       NULL            },
 
  56 static const struct drive_list_entry drive_blacklist [] = {
 
  58         { "WDC AC11000H"        ,       NULL            },
 
  59         { "WDC AC22100H"        ,       NULL            },
 
  60         { "WDC AC32500H"        ,       NULL            },
 
  61         { "WDC AC33100H"        ,       NULL            },
 
  62         { "WDC AC31600H"        ,       NULL            },
 
  63         { "WDC AC32100H"        ,       "24.09P07"      },
 
  64         { "WDC AC23200L"        ,       "21.10N21"      },
 
  65         { "Compaq CRD-8241B"    ,       NULL            },
 
  66         { "CRD-8400B"           ,       NULL            },
 
  67         { "CRD-8480B",                  NULL            },
 
  68         { "CRD-8482B",                  NULL            },
 
  70         { "SanDisk SDP3B"       ,       NULL            },
 
  71         { "SanDisk SDP3B-64"    ,       NULL            },
 
  72         { "SANYO CD-ROM CRD"    ,       NULL            },
 
  73         { "HITACHI CDR-8"       ,       NULL            },
 
  74         { "HITACHI CDR-8335"    ,       NULL            },
 
  75         { "HITACHI CDR-8435"    ,       NULL            },
 
  76         { "Toshiba CD-ROM XM-6202B"     ,       NULL            },
 
  77         { "TOSHIBA CD-ROM XM-1702BC",   NULL            },
 
  78         { "CD-532E-A"           ,       NULL            },
 
  79         { "E-IDE CD-ROM CR-840",        NULL            },
 
  80         { "CD-ROM Drive/F5A",   NULL            },
 
  81         { "WPI CDD-820",                NULL            },
 
  82         { "SAMSUNG CD-ROM SC-148C",     NULL            },
 
  83         { "SAMSUNG CD-ROM SC",  NULL            },
 
  84         { "ATAPI CD-ROM DRIVE 40X MAXIMUM",     NULL            },
 
  85         { "_NEC DV5800A",               NULL            },
 
  86         { "SAMSUNG CD-ROM SN-124",      "N001" },
 
  87         { "Seagate STT20000A",          NULL  },
 
  88         { "CD-ROM CDR_U200",            "1.09" },
 
  94  *      ide_dma_intr    -       IDE DMA interrupt handler
 
  95  *      @drive: the drive the interrupt is for
 
  97  *      Handle an interrupt completing a read/write DMA transfer on an 
 
 101 ide_startstop_t ide_dma_intr (ide_drive_t *drive)
 
 103         ide_hwif_t *hwif = drive->hwif;
 
 104         u8 stat = 0, dma_stat = 0;
 
 106         dma_stat = hwif->dma_ops->dma_end(drive);
 
 107         stat = hwif->tp_ops->read_status(hwif);
 
 109         if (OK_STAT(stat, DRIVE_READY, drive->bad_wstat | ATA_DRQ)) {
 
 111                         struct request *rq = HWGROUP(drive)->rq;
 
 113                         task_end_request(drive, rq, stat);
 
 116                 printk(KERN_ERR "%s: dma_intr: bad DMA status (dma_stat=%x)\n", 
 
 117                        drive->name, dma_stat);
 
 119         return ide_error(drive, "dma_intr", stat);
 
 122 EXPORT_SYMBOL_GPL(ide_dma_intr);
 
 124 static int ide_dma_good_drive(ide_drive_t *drive)
 
 126         return ide_in_drive_list(drive->id, drive_whitelist);
 
 130  *      ide_build_sglist        -       map IDE scatter gather for DMA I/O
 
 131  *      @drive: the drive to build the DMA table for
 
 132  *      @rq: the request holding the sg list
 
 134  *      Perform the DMA mapping magic necessary to access the source or
 
 135  *      target buffers of a request via DMA.  The lower layers of the
 
 136  *      kernel provide the necessary cache management so that we can
 
 137  *      operate in a portable fashion.
 
 140 int ide_build_sglist(ide_drive_t *drive, struct request *rq)
 
 142         ide_hwif_t *hwif = HWIF(drive);
 
 143         struct scatterlist *sg = hwif->sg_table;
 
 145         ide_map_sg(drive, rq);
 
 147         if (rq_data_dir(rq) == READ)
 
 148                 hwif->sg_dma_direction = DMA_FROM_DEVICE;
 
 150                 hwif->sg_dma_direction = DMA_TO_DEVICE;
 
 152         return dma_map_sg(hwif->dev, sg, hwif->sg_nents,
 
 153                           hwif->sg_dma_direction);
 
 156 EXPORT_SYMBOL_GPL(ide_build_sglist);
 
 158 #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
 
 160  *      ide_build_dmatable      -       build IDE DMA table
 
 162  *      ide_build_dmatable() prepares a dma request. We map the command
 
 163  *      to get the pci bus addresses of the buffers and then build up
 
 164  *      the PRD table that the IDE layer wants to be fed. The code
 
 165  *      knows about the 64K wrap bug in the CS5530.
 
 167  *      Returns the number of built PRD entries if all went okay,
 
 168  *      returns 0 otherwise.
 
 170  *      May also be invoked from trm290.c
 
 173 int ide_build_dmatable (ide_drive_t *drive, struct request *rq)
 
 175         ide_hwif_t *hwif        = HWIF(drive);
 
 176         __le32 *table = (__le32 *)hwif->dmatable_cpu;
 
 177         unsigned int is_trm290  = (hwif->chipset == ide_trm290) ? 1 : 0;
 
 178         unsigned int count = 0;
 
 180         struct scatterlist *sg;
 
 182         hwif->sg_nents = i = ide_build_sglist(drive, rq);
 
 192                 cur_addr = sg_dma_address(sg);
 
 193                 cur_len = sg_dma_len(sg);
 
 196                  * Fill in the dma table, without crossing any 64kB boundaries.
 
 197                  * Most hardware requires 16-bit alignment of all blocks,
 
 198                  * but the trm290 requires 32-bit alignment.
 
 202                         if (count++ >= PRD_ENTRIES) {
 
 203                                 printk(KERN_ERR "%s: DMA table too small\n", drive->name);
 
 204                                 goto use_pio_instead;
 
 206                                 u32 xcount, bcount = 0x10000 - (cur_addr & 0xffff);
 
 208                                 if (bcount > cur_len)
 
 210                                 *table++ = cpu_to_le32(cur_addr);
 
 211                                 xcount = bcount & 0xffff;
 
 213                                         xcount = ((xcount >> 2) - 1) << 16;
 
 214                                 else if (xcount == 0x0000) {
 
 216          * Most chipsets correctly interpret a length of 0x0000 as 64KB,
 
 217          * but at least one (e.g. CS5530) misinterprets it as zero (!).
 
 218          * So here we break the 64KB entry into two 32KB entries instead.
 
 220                                         if (count++ >= PRD_ENTRIES) {
 
 221                                                 printk(KERN_ERR "%s: DMA table too small\n", drive->name);
 
 222                                                 goto use_pio_instead;
 
 224                                         *table++ = cpu_to_le32(0x8000);
 
 225                                         *table++ = cpu_to_le32(cur_addr + 0x8000);
 
 228                                 *table++ = cpu_to_le32(xcount);
 
 240                         *--table |= cpu_to_le32(0x80000000);
 
 244         printk(KERN_ERR "%s: empty DMA table?\n", drive->name);
 
 247         ide_destroy_dmatable(drive);
 
 249         return 0; /* revert to PIO for this request */
 
 252 EXPORT_SYMBOL_GPL(ide_build_dmatable);
 
 256  *      ide_destroy_dmatable    -       clean up DMA mapping
 
 257  *      @drive: The drive to unmap
 
 259  *      Teardown mappings after DMA has completed. This must be called
 
 260  *      after the completion of each use of ide_build_dmatable and before
 
 261  *      the next use of ide_build_dmatable. Failure to do so will cause
 
 262  *      an oops as only one mapping can be live for each target at a given
 
 266 void ide_destroy_dmatable (ide_drive_t *drive)
 
 268         ide_hwif_t *hwif = drive->hwif;
 
 270         dma_unmap_sg(hwif->dev, hwif->sg_table, hwif->sg_nents,
 
 271                      hwif->sg_dma_direction);
 
 274 EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
 
 276 #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
 
 278  *      config_drive_for_dma    -       attempt to activate IDE DMA
 
 279  *      @drive: the drive to place in DMA mode
 
 281  *      If the drive supports at least mode 2 DMA or UDMA of any kind
 
 282  *      then attempt to place it into DMA mode. Drives that are known to
 
 283  *      support DMA but predate the DMA properties or that are known
 
 284  *      to have DMA handling bugs are also set up appropriately based
 
 285  *      on the good/bad drive lists.
 
 288 static int config_drive_for_dma (ide_drive_t *drive)
 
 290         ide_hwif_t *hwif = drive->hwif;
 
 293         if (drive->media != ide_disk) {
 
 294                 if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA)
 
 299          * Enable DMA on any drive that has
 
 300          * UltraDMA (mode 0/1/2/3/4/5/6) enabled
 
 302         if ((id[ATA_ID_FIELD_VALID] & 4) &&
 
 303             ((id[ATA_ID_UDMA_MODES] >> 8) & 0x7f))
 
 307          * Enable DMA on any drive that has mode2 DMA
 
 308          * (multi or single) enabled
 
 310         if (id[ATA_ID_FIELD_VALID] & 2) /* regular DMA */
 
 311                 if ((id[ATA_ID_MWDMA_MODES] & 0x404) == 0x404 ||
 
 312                     (id[ATA_ID_SWDMA_MODES] & 0x404) == 0x404)
 
 315         /* Consult the list of known "good" drives */
 
 316         if (ide_dma_good_drive(drive))
 
 323  *      dma_timer_expiry        -       handle a DMA timeout
 
 324  *      @drive: Drive that timed out
 
 326  *      An IDE DMA transfer timed out. In the event of an error we ask
 
 327  *      the driver to resolve the problem, if a DMA transfer is still
 
 328  *      in progress we continue to wait (arguably we need to add a 
 
 329  *      secondary 'I don't care what the drive thinks' timeout here)
 
 330  *      Finally if we have an interrupt we let it complete the I/O.
 
 331  *      But only one time - we clear expiry and if it's still not
 
 332  *      completed after WAIT_CMD, we error and retry in PIO.
 
 333  *      This can occur if an interrupt is lost or due to hang or bugs.
 
 336 static int dma_timer_expiry (ide_drive_t *drive)
 
 338         ide_hwif_t *hwif        = HWIF(drive);
 
 339         u8 dma_stat             = hwif->tp_ops->read_sff_dma_status(hwif);
 
 341         printk(KERN_WARNING "%s: dma_timer_expiry: dma status == 0x%02x\n",
 
 342                 drive->name, dma_stat);
 
 344         if ((dma_stat & 0x18) == 0x18)  /* BUSY Stupid Early Timer !! */
 
 347         HWGROUP(drive)->expiry = NULL;  /* one free ride for now */
 
 349         /* 1 dmaing, 2 error, 4 intr */
 
 350         if (dma_stat & 2)       /* ERROR */
 
 353         if (dma_stat & 1)       /* DMAing */
 
 356         if (dma_stat & 4)       /* Got an Interrupt */
 
 359         return 0;       /* Status is unknown -- reset the bus */
 
 363  *      ide_dma_host_set        -       Enable/disable DMA on a host
 
 364  *      @drive: drive to control
 
 366  *      Enable/disable DMA on an IDE controller following generic
 
 367  *      bus-mastering IDE controller behaviour.
 
 370 void ide_dma_host_set(ide_drive_t *drive, int on)
 
 372         ide_hwif_t *hwif        = HWIF(drive);
 
 373         u8 unit                 = (drive->select.b.unit & 0x01);
 
 374         u8 dma_stat             = hwif->tp_ops->read_sff_dma_status(hwif);
 
 377                 dma_stat |= (1 << (5 + unit));
 
 379                 dma_stat &= ~(1 << (5 + unit));
 
 381         if (hwif->host_flags & IDE_HFLAG_MMIO)
 
 383                        (void __iomem *)(hwif->dma_base + ATA_DMA_STATUS));
 
 385                 outb(dma_stat, hwif->dma_base + ATA_DMA_STATUS);
 
 388 EXPORT_SYMBOL_GPL(ide_dma_host_set);
 
 389 #endif /* CONFIG_BLK_DEV_IDEDMA_SFF  */
 
 392  *      ide_dma_off_quietly     -       Generic DMA kill
 
 393  *      @drive: drive to control
 
 395  *      Turn off the current DMA on this IDE controller. 
 
 398 void ide_dma_off_quietly(ide_drive_t *drive)
 
 400         drive->using_dma = 0;
 
 401         ide_toggle_bounce(drive, 0);
 
 403         drive->hwif->dma_ops->dma_host_set(drive, 0);
 
 406 EXPORT_SYMBOL(ide_dma_off_quietly);
 
 409  *      ide_dma_off     -       disable DMA on a device
 
 410  *      @drive: drive to disable DMA on
 
 412  *      Disable IDE DMA for a device on this IDE controller.
 
 413  *      Inform the user that DMA has been disabled.
 
 416 void ide_dma_off(ide_drive_t *drive)
 
 418         printk(KERN_INFO "%s: DMA disabled\n", drive->name);
 
 419         ide_dma_off_quietly(drive);
 
 422 EXPORT_SYMBOL(ide_dma_off);
 
 425  *      ide_dma_on              -       Enable DMA on a device
 
 426  *      @drive: drive to enable DMA on
 
 428  *      Enable IDE DMA for a device on this IDE controller.
 
 431 void ide_dma_on(ide_drive_t *drive)
 
 433         drive->using_dma = 1;
 
 434         ide_toggle_bounce(drive, 1);
 
 436         drive->hwif->dma_ops->dma_host_set(drive, 1);
 
 439 #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
 
 441  *      ide_dma_setup   -       begin a DMA phase
 
 442  *      @drive: target device
 
 444  *      Build an IDE DMA PRD (IDE speak for scatter gather table)
 
 445  *      and then set up the DMA transfer registers for a device
 
 446  *      that follows generic IDE PCI DMA behaviour. Controllers can
 
 447  *      override this function if they need to
 
 449  *      Returns 0 on success. If a PIO fallback is required then 1
 
 453 int ide_dma_setup(ide_drive_t *drive)
 
 455         ide_hwif_t *hwif = drive->hwif;
 
 456         struct request *rq = HWGROUP(drive)->rq;
 
 457         unsigned int reading;
 
 458         u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0;
 
 466         /* fall back to pio! */
 
 467         if (!ide_build_dmatable(drive, rq)) {
 
 468                 ide_map_sg(drive, rq);
 
 473         if (hwif->host_flags & IDE_HFLAG_MMIO)
 
 474                 writel(hwif->dmatable_dma,
 
 475                        (void __iomem *)(hwif->dma_base + ATA_DMA_TABLE_OFS));
 
 477                 outl(hwif->dmatable_dma, hwif->dma_base + ATA_DMA_TABLE_OFS);
 
 481                 writeb(reading, (void __iomem *)(hwif->dma_base + ATA_DMA_CMD));
 
 483                 outb(reading, hwif->dma_base + ATA_DMA_CMD);
 
 485         /* read DMA status for INTR & ERROR flags */
 
 486         dma_stat = hwif->tp_ops->read_sff_dma_status(hwif);
 
 488         /* clear INTR & ERROR flags */
 
 491                        (void __iomem *)(hwif->dma_base + ATA_DMA_STATUS));
 
 493                 outb(dma_stat | 6, hwif->dma_base + ATA_DMA_STATUS);
 
 495         drive->waiting_for_dma = 1;
 
 499 EXPORT_SYMBOL_GPL(ide_dma_setup);
 
 501 void ide_dma_exec_cmd(ide_drive_t *drive, u8 command)
 
 503         /* issue cmd to drive */
 
 504         ide_execute_command(drive, command, &ide_dma_intr, 2*WAIT_CMD, dma_timer_expiry);
 
 506 EXPORT_SYMBOL_GPL(ide_dma_exec_cmd);
 
 508 void ide_dma_start(ide_drive_t *drive)
 
 510         ide_hwif_t *hwif = drive->hwif;
 
 513         /* Note that this is done *after* the cmd has
 
 514          * been issued to the drive, as per the BM-IDE spec.
 
 515          * The Promise Ultra33 doesn't work correctly when
 
 516          * we do this part before issuing the drive cmd.
 
 518         if (hwif->host_flags & IDE_HFLAG_MMIO) {
 
 519                 dma_cmd = readb((void __iomem *)(hwif->dma_base + ATA_DMA_CMD));
 
 522                        (void __iomem *)(hwif->dma_base + ATA_DMA_CMD));
 
 524                 dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD);
 
 525                 outb(dma_cmd | 1, hwif->dma_base + ATA_DMA_CMD);
 
 532 EXPORT_SYMBOL_GPL(ide_dma_start);
 
 534 /* returns 1 on error, 0 otherwise */
 
 535 int __ide_dma_end (ide_drive_t *drive)
 
 537         ide_hwif_t *hwif = drive->hwif;
 
 538         u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0;
 
 539         u8 dma_stat = 0, dma_cmd = 0;
 
 541         drive->waiting_for_dma = 0;
 
 544                 /* get DMA command mode */
 
 545                 dma_cmd = readb((void __iomem *)(hwif->dma_base + ATA_DMA_CMD));
 
 548                        (void __iomem *)(hwif->dma_base + ATA_DMA_CMD));
 
 550                 dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD);
 
 551                 outb(dma_cmd & ~1, hwif->dma_base + ATA_DMA_CMD);
 
 555         dma_stat = hwif->tp_ops->read_sff_dma_status(hwif);
 
 558                 /* clear the INTR & ERROR bits */
 
 560                        (void __iomem *)(hwif->dma_base + ATA_DMA_STATUS));
 
 562                 outb(dma_stat | 6, hwif->dma_base + ATA_DMA_STATUS);
 
 564         /* purge DMA mappings */
 
 565         ide_destroy_dmatable(drive);
 
 566         /* verify good DMA status */
 
 569         return (dma_stat & 7) != 4 ? (0x10 | dma_stat) : 0;
 
 572 EXPORT_SYMBOL(__ide_dma_end);
 
 574 /* returns 1 if dma irq issued, 0 otherwise */
 
 575 int ide_dma_test_irq(ide_drive_t *drive)
 
 577         ide_hwif_t *hwif        = HWIF(drive);
 
 578         u8 dma_stat             = hwif->tp_ops->read_sff_dma_status(hwif);
 
 580         /* return 1 if INTR asserted */
 
 581         if ((dma_stat & 4) == 4)
 
 583         if (!drive->waiting_for_dma)
 
 584                 printk(KERN_WARNING "%s: (%s) called while not waiting\n",
 
 585                         drive->name, __func__);
 
 588 EXPORT_SYMBOL_GPL(ide_dma_test_irq);
 
 590 static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; }
 
 591 #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */
 
 593 int __ide_dma_bad_drive (ide_drive_t *drive)
 
 597         int blacklist = ide_in_drive_list(id, drive_blacklist);
 
 599                 printk(KERN_WARNING "%s: Disabling (U)DMA for %s (blacklisted)\n",
 
 600                                     drive->name, (char *)&id[ATA_ID_PROD]);
 
 606 EXPORT_SYMBOL(__ide_dma_bad_drive);
 
 608 static const u8 xfer_mode_bases[] = {
 
 614 static unsigned int ide_get_mode_mask(ide_drive_t *drive, u8 base, u8 req_mode)
 
 617         ide_hwif_t *hwif = drive->hwif;
 
 618         const struct ide_port_ops *port_ops = hwif->port_ops;
 
 619         unsigned int mask = 0;
 
 623                 if ((id[ATA_ID_FIELD_VALID] & 4) == 0)
 
 626                 if (port_ops && port_ops->udma_filter)
 
 627                         mask = port_ops->udma_filter(drive);
 
 629                         mask = hwif->ultra_mask;
 
 630                 mask &= id[ATA_ID_UDMA_MODES];
 
 633                  * avoid false cable warning from eighty_ninty_three()
 
 635                 if (req_mode > XFER_UDMA_2) {
 
 636                         if ((mask & 0x78) && (eighty_ninty_three(drive) == 0))
 
 641                 if ((id[ATA_ID_FIELD_VALID] & 2) == 0)
 
 643                 if (port_ops && port_ops->mdma_filter)
 
 644                         mask = port_ops->mdma_filter(drive);
 
 646                         mask = hwif->mwdma_mask;
 
 647                 mask &= id[ATA_ID_MWDMA_MODES];
 
 650                 if (id[ATA_ID_FIELD_VALID] & 2) {
 
 651                         mask = id[ATA_ID_SWDMA_MODES] & hwif->swdma_mask;
 
 652                 } else if (id[ATA_ID_OLD_DMA_MODES] >> 8) {
 
 653                         u8 mode = id[ATA_ID_OLD_DMA_MODES] >> 8;
 
 656                          * if the mode is valid convert it to the mask
 
 657                          * (the maximum allowed mode is XFER_SW_DMA_2)
 
 660                                 mask = ((2 << mode) - 1) & hwif->swdma_mask;
 
 672  *      ide_find_dma_mode       -       compute DMA speed
 
 674  *      @req_mode: requested mode
 
 676  *      Checks the drive/host capabilities and finds the speed to use for
 
 677  *      the DMA transfer.  The speed is then limited by the requested mode.
 
 679  *      Returns 0 if the drive/host combination is incapable of DMA transfers
 
 680  *      or if the requested mode is not a DMA mode.
 
 683 u8 ide_find_dma_mode(ide_drive_t *drive, u8 req_mode)
 
 685         ide_hwif_t *hwif = drive->hwif;
 
 690         if (drive->media != ide_disk) {
 
 691                 if (hwif->host_flags & IDE_HFLAG_NO_ATAPI_DMA)
 
 695         for (i = 0; i < ARRAY_SIZE(xfer_mode_bases); i++) {
 
 696                 if (req_mode < xfer_mode_bases[i])
 
 698                 mask = ide_get_mode_mask(drive, xfer_mode_bases[i], req_mode);
 
 701                         mode = xfer_mode_bases[i] + x;
 
 706         if (hwif->chipset == ide_acorn && mode == 0) {
 
 710                 if (ide_dma_good_drive(drive) &&
 
 711                     drive->id[ATA_ID_EIDE_DMA_TIME] < 150)
 
 712                         mode = XFER_MW_DMA_1;
 
 715         mode = min(mode, req_mode);
 
 717         printk(KERN_INFO "%s: %s mode selected\n", drive->name,
 
 718                           mode ? ide_xfer_verbose(mode) : "no DMA");
 
 723 EXPORT_SYMBOL_GPL(ide_find_dma_mode);
 
 725 static int ide_tune_dma(ide_drive_t *drive)
 
 727         ide_hwif_t *hwif = drive->hwif;
 
 730         if (drive->nodma || ata_id_has_dma(drive->id) == 0)
 
 733         /* consult the list of known "bad" drives */
 
 734         if (__ide_dma_bad_drive(drive))
 
 737         if (ide_id_dma_bug(drive))
 
 740         if (hwif->host_flags & IDE_HFLAG_TRUST_BIOS_FOR_DMA)
 
 741                 return config_drive_for_dma(drive);
 
 743         speed = ide_max_dma_mode(drive);
 
 748         if (ide_set_dma_mode(drive, speed))
 
 754 static int ide_dma_check(ide_drive_t *drive)
 
 756         ide_hwif_t *hwif = drive->hwif;
 
 758         if (ide_tune_dma(drive))
 
 761         /* TODO: always do PIO fallback */
 
 762         if (hwif->host_flags & IDE_HFLAG_TRUST_BIOS_FOR_DMA)
 
 765         ide_set_max_pio(drive);
 
 770 int ide_id_dma_bug(ide_drive_t *drive)
 
 774         if (id[ATA_ID_FIELD_VALID] & 4) {
 
 775                 if ((id[ATA_ID_UDMA_MODES] >> 8) &&
 
 776                     (id[ATA_ID_MWDMA_MODES] >> 8))
 
 778         } else if (id[ATA_ID_FIELD_VALID] & 2) {
 
 779                 if ((id[ATA_ID_MWDMA_MODES] >> 8) &&
 
 780                     (id[ATA_ID_SWDMA_MODES] >> 8))
 
 785         printk(KERN_ERR "%s: bad DMA info in identify block\n", drive->name);
 
 789 int ide_set_dma(ide_drive_t *drive)
 
 794          * Force DMAing for the beginning of the check.
 
 795          * Some chipsets appear to do interesting
 
 796          * things, if not checked and cleared.
 
 799         ide_dma_off_quietly(drive);
 
 801         rc = ide_dma_check(drive);
 
 810 void ide_check_dma_crc(ide_drive_t *drive)
 
 814         ide_dma_off_quietly(drive);
 
 815         drive->crc_count = 0;
 
 816         mode = drive->current_speed;
 
 818          * Don't try non Ultra-DMA modes without iCRC's.  Force the
 
 819          * device to PIO and make the user enable SWDMA/MWDMA modes.
 
 821         if (mode > XFER_UDMA_0 && mode <= XFER_UDMA_7)
 
 825         ide_set_xfer_rate(drive, mode);
 
 826         if (drive->current_speed >= XFER_SW_DMA_0)
 
 830 #ifdef CONFIG_BLK_DEV_IDEDMA_SFF
 
 831 void ide_dma_lost_irq (ide_drive_t *drive)
 
 833         printk("%s: DMA interrupt recovery\n", drive->name);
 
 836 EXPORT_SYMBOL(ide_dma_lost_irq);
 
 838 void ide_dma_timeout (ide_drive_t *drive)
 
 840         ide_hwif_t *hwif = HWIF(drive);
 
 842         printk(KERN_ERR "%s: timeout waiting for DMA\n", drive->name);
 
 844         if (hwif->dma_ops->dma_test_irq(drive))
 
 847         hwif->dma_ops->dma_end(drive);
 
 850 EXPORT_SYMBOL(ide_dma_timeout);
 
 852 void ide_release_dma_engine(ide_hwif_t *hwif)
 
 854         if (hwif->dmatable_cpu) {
 
 855                 struct pci_dev *pdev = to_pci_dev(hwif->dev);
 
 857                 pci_free_consistent(pdev, PRD_ENTRIES * PRD_BYTES,
 
 858                                     hwif->dmatable_cpu, hwif->dmatable_dma);
 
 859                 hwif->dmatable_cpu = NULL;
 
 863 int ide_allocate_dma_engine(ide_hwif_t *hwif)
 
 865         struct pci_dev *pdev = to_pci_dev(hwif->dev);
 
 867         hwif->dmatable_cpu = pci_alloc_consistent(pdev,
 
 868                                                   PRD_ENTRIES * PRD_BYTES,
 
 869                                                   &hwif->dmatable_dma);
 
 871         if (hwif->dmatable_cpu)
 
 874         printk(KERN_ERR "%s: -- Error, unable to allocate DMA table.\n",
 
 879 EXPORT_SYMBOL_GPL(ide_allocate_dma_engine);
 
 881 const struct ide_dma_ops sff_dma_ops = {
 
 882         .dma_host_set           = ide_dma_host_set,
 
 883         .dma_setup              = ide_dma_setup,
 
 884         .dma_exec_cmd           = ide_dma_exec_cmd,
 
 885         .dma_start              = ide_dma_start,
 
 886         .dma_end                = __ide_dma_end,
 
 887         .dma_test_irq           = ide_dma_test_irq,
 
 888         .dma_timeout            = ide_dma_timeout,
 
 889         .dma_lost_irq           = ide_dma_lost_irq,
 
 891 EXPORT_SYMBOL_GPL(sff_dma_ops);
 
 892 #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */