linux/drivers/dma/ioat_dma.c
<<
>>
Prefs
   1/*
   2 * Intel I/OAT DMA Linux driver
   3 * Copyright(c) 2004 - 2007 Intel Corporation.
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms and conditions of the GNU General Public License,
   7 * version 2, as published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it will be useful, but WITHOUT
  10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  12 * more details.
  13 *
  14 * You should have received a copy of the GNU General Public License along with
  15 * this program; if not, write to the Free Software Foundation, Inc.,
  16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  17 *
  18 * The full GNU General Public License is included in this distribution in
  19 * the file called "COPYING".
  20 *
  21 */
  22
  23/*
  24 * This driver supports an Intel I/OAT DMA engine, which does asynchronous
  25 * copy operations.
  26 */
  27
  28#include <linux/init.h>
  29#include <linux/module.h>
  30#include <linux/pci.h>
  31#include <linux/interrupt.h>
  32#include <linux/dmaengine.h>
  33#include <linux/delay.h>
  34#include <linux/dma-mapping.h>
  35#include "ioatdma.h"
  36#include "ioatdma_registers.h"
  37#include "ioatdma_hw.h"
  38
  39#define to_ioat_chan(chan) container_of(chan, struct ioat_dma_chan, common)
  40#define to_ioatdma_device(dev) container_of(dev, struct ioatdma_device, common)
  41#define to_ioat_desc(lh) container_of(lh, struct ioat_desc_sw, node)
  42#define tx_to_ioat_desc(tx) container_of(tx, struct ioat_desc_sw, async_tx)
  43
  44static int ioat_pending_level = 4;
  45module_param(ioat_pending_level, int, 0644);
  46MODULE_PARM_DESC(ioat_pending_level,
  47                 "high-water mark for pushing ioat descriptors (default: 4)");
  48
  49/* internal functions */
  50static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan);
  51static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan);
  52
  53static struct ioat_desc_sw *
  54ioat1_dma_get_next_descriptor(struct ioat_dma_chan *ioat_chan);
  55static struct ioat_desc_sw *
  56ioat2_dma_get_next_descriptor(struct ioat_dma_chan *ioat_chan);
  57
  58static inline struct ioat_dma_chan *ioat_lookup_chan_by_index(
  59                                                struct ioatdma_device *device,
  60                                                int index)
  61{
  62        return device->idx[index];
  63}
  64
  65/**
  66 * ioat_dma_do_interrupt - handler used for single vector interrupt mode
  67 * @irq: interrupt id
  68 * @data: interrupt data
  69 */
  70static irqreturn_t ioat_dma_do_interrupt(int irq, void *data)
  71{
  72        struct ioatdma_device *instance = data;
  73        struct ioat_dma_chan *ioat_chan;
  74        unsigned long attnstatus;
  75        int bit;
  76        u8 intrctrl;
  77
  78        intrctrl = readb(instance->reg_base + IOAT_INTRCTRL_OFFSET);
  79
  80        if (!(intrctrl & IOAT_INTRCTRL_MASTER_INT_EN))
  81                return IRQ_NONE;
  82
  83        if (!(intrctrl & IOAT_INTRCTRL_INT_STATUS)) {
  84                writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
  85                return IRQ_NONE;
  86        }
  87
  88        attnstatus = readl(instance->reg_base + IOAT_ATTNSTATUS_OFFSET);
  89        for_each_bit(bit, &attnstatus, BITS_PER_LONG) {
  90                ioat_chan = ioat_lookup_chan_by_index(instance, bit);
  91                tasklet_schedule(&ioat_chan->cleanup_task);
  92        }
  93
  94        writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
  95        return IRQ_HANDLED;
  96}
  97
  98/**
  99 * ioat_dma_do_interrupt_msix - handler used for vector-per-channel interrupt mode
 100 * @irq: interrupt id
 101 * @data: interrupt data
 102 */
 103static irqreturn_t ioat_dma_do_interrupt_msix(int irq, void *data)
 104{
 105        struct ioat_dma_chan *ioat_chan = data;
 106
 107        tasklet_schedule(&ioat_chan->cleanup_task);
 108
 109        return IRQ_HANDLED;
 110}
 111
 112static void ioat_dma_cleanup_tasklet(unsigned long data);
 113
 114/**
 115 * ioat_dma_enumerate_channels - find and initialize the device's channels
 116 * @device: the device to be enumerated
 117 */
 118static int ioat_dma_enumerate_channels(struct ioatdma_device *device)
 119{
 120        u8 xfercap_scale;
 121        u32 xfercap;
 122        int i;
 123        struct ioat_dma_chan *ioat_chan;
 124
 125        device->common.chancnt = readb(device->reg_base + IOAT_CHANCNT_OFFSET);
 126        xfercap_scale = readb(device->reg_base + IOAT_XFERCAP_OFFSET);
 127        xfercap = (xfercap_scale == 0 ? -1 : (1UL << xfercap_scale));
 128
 129        for (i = 0; i < device->common.chancnt; i++) {
 130                ioat_chan = kzalloc(sizeof(*ioat_chan), GFP_KERNEL);
 131                if (!ioat_chan) {
 132                        device->common.chancnt = i;
 133                        break;
 134                }
 135
 136                ioat_chan->device = device;
 137                ioat_chan->reg_base = device->reg_base + (0x80 * (i + 1));
 138                ioat_chan->xfercap = xfercap;
 139                ioat_chan->desccount = 0;
 140                if (ioat_chan->device->version != IOAT_VER_1_2) {
 141                        writel(IOAT_DCACTRL_CMPL_WRITE_ENABLE
 142                                        | IOAT_DMA_DCA_ANY_CPU,
 143                                ioat_chan->reg_base + IOAT_DCACTRL_OFFSET);
 144                }
 145                spin_lock_init(&ioat_chan->cleanup_lock);
 146                spin_lock_init(&ioat_chan->desc_lock);
 147                INIT_LIST_HEAD(&ioat_chan->free_desc);
 148                INIT_LIST_HEAD(&ioat_chan->used_desc);
 149                /* This should be made common somewhere in dmaengine.c */
 150                ioat_chan->common.device = &device->common;
 151                list_add_tail(&ioat_chan->common.device_node,
 152                              &device->common.channels);
 153                device->idx[i] = ioat_chan;
 154                tasklet_init(&ioat_chan->cleanup_task,
 155                             ioat_dma_cleanup_tasklet,
 156                             (unsigned long) ioat_chan);
 157                tasklet_disable(&ioat_chan->cleanup_task);
 158        }
 159        return device->common.chancnt;
 160}
 161
 162static void ioat_set_src(dma_addr_t addr,
 163                         struct dma_async_tx_descriptor *tx,
 164                         int index)
 165{
 166        tx_to_ioat_desc(tx)->src = addr;
 167}
 168
 169static void ioat_set_dest(dma_addr_t addr,
 170                          struct dma_async_tx_descriptor *tx,
 171                          int index)
 172{
 173        tx_to_ioat_desc(tx)->dst = addr;
 174}
 175
 176/**
 177 * ioat_dma_memcpy_issue_pending - push potentially unrecognized appended
 178 *                                 descriptors to hw
 179 * @chan: DMA channel handle
 180 */
 181static inline void __ioat1_dma_memcpy_issue_pending(
 182                                                struct ioat_dma_chan *ioat_chan)
 183{
 184        ioat_chan->pending = 0;
 185        writeb(IOAT_CHANCMD_APPEND, ioat_chan->reg_base + IOAT1_CHANCMD_OFFSET);
 186}
 187
 188static void ioat1_dma_memcpy_issue_pending(struct dma_chan *chan)
 189{
 190        struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan);
 191
 192        if (ioat_chan->pending != 0) {
 193                spin_lock_bh(&ioat_chan->desc_lock);
 194                __ioat1_dma_memcpy_issue_pending(ioat_chan);
 195                spin_unlock_bh(&ioat_chan->desc_lock);
 196        }
 197}
 198
 199static inline void __ioat2_dma_memcpy_issue_pending(
 200                                                struct ioat_dma_chan *ioat_chan)
 201{
 202        ioat_chan->pending = 0;
 203        writew(ioat_chan->dmacount,
 204               ioat_chan->reg_base + IOAT_CHAN_DMACOUNT_OFFSET);
 205}
 206
 207static void ioat2_dma_memcpy_issue_pending(struct dma_chan *chan)
 208{
 209        struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan);
 210
 211        if (ioat_chan->pending != 0) {
 212                spin_lock_bh(&ioat_chan->desc_lock);
 213                __ioat2_dma_memcpy_issue_pending(ioat_chan);
 214                spin_unlock_bh(&ioat_chan->desc_lock);
 215        }
 216}
 217
 218static dma_cookie_t ioat1_tx_submit(struct dma_async_tx_descriptor *tx)
 219{
 220        struct ioat_dma_chan *ioat_chan = to_ioat_chan(tx->chan);
 221        struct ioat_desc_sw *first = tx_to_ioat_desc(tx);
 222        struct ioat_desc_sw *prev, *new;
 223        struct ioat_dma_descriptor *hw;
 224        dma_cookie_t cookie;
 225        LIST_HEAD(new_chain);
 226        u32 copy;
 227        size_t len;
 228        dma_addr_t src, dst;
 229        int orig_ack;
 230        unsigned int desc_count = 0;
 231
 232        /* src and dest and len are stored in the initial descriptor */
 233        len = first->len;
 234        src = first->src;
 235        dst = first->dst;
 236        orig_ack = first->async_tx.ack;
 237        new = first;
 238
 239        spin_lock_bh(&ioat_chan->desc_lock);
 240        prev = to_ioat_desc(ioat_chan->used_desc.prev);
 241        prefetch(prev->hw);
 242        do {
 243                copy = min_t(size_t, len, ioat_chan->xfercap);
 244
 245                new->async_tx.ack = 1;
 246
 247                hw = new->hw;
 248                hw->size = copy;
 249                hw->ctl = 0;
 250                hw->src_addr = src;
 251                hw->dst_addr = dst;
 252                hw->next = 0;
 253
 254                /* chain together the physical address list for the HW */
 255                wmb();
 256                prev->hw->next = (u64) new->async_tx.phys;
 257
 258                len -= copy;
 259                dst += copy;
 260                src += copy;
 261
 262                list_add_tail(&new->node, &new_chain);
 263                desc_count++;
 264                prev = new;
 265        } while (len && (new = ioat1_dma_get_next_descriptor(ioat_chan)));
 266
 267        hw->ctl = IOAT_DMA_DESCRIPTOR_CTL_CP_STS;
 268        if (new->async_tx.callback) {
 269                hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN;
 270                if (first != new) {
 271                        /* move callback into to last desc */
 272                        new->async_tx.callback = first->async_tx.callback;
 273                        new->async_tx.callback_param
 274                                        = first->async_tx.callback_param;
 275                        first->async_tx.callback = NULL;
 276                        first->async_tx.callback_param = NULL;
 277                }
 278        }
 279
 280        new->tx_cnt = desc_count;
 281        new->async_tx.ack = orig_ack; /* client is in control of this ack */
 282
 283        /* store the original values for use in later cleanup */
 284        if (new != first) {
 285                new->src = first->src;
 286                new->dst = first->dst;
 287                new->len = first->len;
 288        }
 289
 290        /* cookie incr and addition to used_list must be atomic */
 291        cookie = ioat_chan->common.cookie;
 292        cookie++;
 293        if (cookie < 0)
 294                cookie = 1;
 295        ioat_chan->common.cookie = new->async_tx.cookie = cookie;
 296
 297        /* write address into NextDescriptor field of last desc in chain */
 298        to_ioat_desc(ioat_chan->used_desc.prev)->hw->next =
 299                                                        first->async_tx.phys;
 300        __list_splice(&new_chain, ioat_chan->used_desc.prev);
 301
 302        ioat_chan->dmacount += desc_count;
 303        ioat_chan->pending += desc_count;
 304        if (ioat_chan->pending >= ioat_pending_level)
 305                __ioat1_dma_memcpy_issue_pending(ioat_chan);
 306        spin_unlock_bh(&ioat_chan->desc_lock);
 307
 308        return cookie;
 309}
 310
 311static dma_cookie_t ioat2_tx_submit(struct dma_async_tx_descriptor *tx)
 312{
 313        struct ioat_dma_chan *ioat_chan = to_ioat_chan(tx->chan);
 314        struct ioat_desc_sw *first = tx_to_ioat_desc(tx);
 315        struct ioat_desc_sw *new;
 316        struct ioat_dma_descriptor *hw;
 317        dma_cookie_t cookie;
 318        u32 copy;
 319        size_t len;
 320        dma_addr_t src, dst;
 321        int orig_ack;
 322        unsigned int desc_count = 0;
 323
 324        /* src and dest and len are stored in the initial descriptor */
 325        len = first->len;
 326        src = first->src;
 327        dst = first->dst;
 328        orig_ack = first->async_tx.ack;
 329        new = first;
 330
 331        /*
 332         * ioat_chan->desc_lock is still in force in version 2 path
 333         * it gets unlocked at end of this function
 334         */
 335        do {
 336                copy = min_t(size_t, len, ioat_chan->xfercap);
 337
 338                new->async_tx.ack = 1;
 339
 340                hw = new->hw;
 341                hw->size = copy;
 342                hw->ctl = 0;
 343                hw->src_addr = src;
 344                hw->dst_addr = dst;
 345
 346                len -= copy;
 347                dst += copy;
 348                src += copy;
 349                desc_count++;
 350        } while (len && (new = ioat2_dma_get_next_descriptor(ioat_chan)));
 351
 352        hw->ctl = IOAT_DMA_DESCRIPTOR_CTL_CP_STS;
 353        if (new->async_tx.callback) {
 354                hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN;
 355                if (first != new) {
 356                        /* move callback into to last desc */
 357                        new->async_tx.callback = first->async_tx.callback;
 358                        new->async_tx.callback_param
 359                                        = first->async_tx.callback_param;
 360                        first->async_tx.callback = NULL;
 361                        first->async_tx.callback_param = NULL;
 362                }
 363        }
 364
 365        new->tx_cnt = desc_count;
 366        new->async_tx.ack = orig_ack; /* client is in control of this ack */
 367
 368        /* store the original values for use in later cleanup */
 369        if (new != first) {
 370                new->src = first->src;
 371                new->dst = first->dst;
 372                new->len = first->len;
 373        }
 374
 375        /* cookie incr and addition to used_list must be atomic */
 376        cookie = ioat_chan->common.cookie;
 377        cookie++;
 378        if (cookie < 0)
 379                cookie = 1;
 380        ioat_chan->common.cookie = new->async_tx.cookie = cookie;
 381
 382        ioat_chan->dmacount += desc_count;
 383        ioat_chan->pending += desc_count;
 384        if (ioat_chan->pending >= ioat_pending_level)
 385                __ioat2_dma_memcpy_issue_pending(ioat_chan);
 386        spin_unlock_bh(&ioat_chan->desc_lock);
 387
 388        return cookie;
 389}
 390
 391/**
 392 * ioat_dma_alloc_descriptor - allocate and return a sw and hw descriptor pair
 393 * @ioat_chan: the channel supplying the memory pool for the descriptors
 394 * @flags: allocation flags
 395 */
 396static struct ioat_desc_sw *ioat_dma_alloc_descriptor(
 397                                        struct ioat_dma_chan *ioat_chan,
 398                                        gfp_t flags)
 399{
 400        struct ioat_dma_descriptor *desc;
 401        struct ioat_desc_sw *desc_sw;
 402        struct ioatdma_device *ioatdma_device;
 403        dma_addr_t phys;
 404
 405        ioatdma_device = to_ioatdma_device(ioat_chan->common.device);
 406        desc = pci_pool_alloc(ioatdma_device->dma_pool, flags, &phys);
 407        if (unlikely(!desc))
 408                return NULL;
 409
 410        desc_sw = kzalloc(sizeof(*desc_sw), flags);
 411        if (unlikely(!desc_sw)) {
 412                pci_pool_free(ioatdma_device->dma_pool, desc, phys);
 413                return NULL;
 414        }
 415
 416        memset(desc, 0, sizeof(*desc));
 417        dma_async_tx_descriptor_init(&desc_sw->async_tx, &ioat_chan->common);
 418        desc_sw->async_tx.tx_set_src = ioat_set_src;
 419        desc_sw->async_tx.tx_set_dest = ioat_set_dest;
 420        switch (ioat_chan->device->version) {
 421        case IOAT_VER_1_2:
 422                desc_sw->async_tx.tx_submit = ioat1_tx_submit;
 423                break;
 424        case IOAT_VER_2_0:
 425                desc_sw->async_tx.tx_submit = ioat2_tx_submit;
 426                break;
 427        }
 428        INIT_LIST_HEAD(&desc_sw->async_tx.tx_list);
 429
 430        desc_sw->hw = desc;
 431        desc_sw->async_tx.phys = phys;
 432
 433        return desc_sw;
 434}
 435
 436static int ioat_initial_desc_count = 256;
 437module_param(ioat_initial_desc_count, int, 0644);
 438MODULE_PARM_DESC(ioat_initial_desc_count,
 439                 "initial descriptors per channel (default: 256)");
 440
 441/**
 442 * ioat2_dma_massage_chan_desc - link the descriptors into a circle
 443 * @ioat_chan: the channel to be massaged
 444 */
 445static void ioat2_dma_massage_chan_desc(struct ioat_dma_chan *ioat_chan)
 446{
 447        struct ioat_desc_sw *desc, *_desc;
 448
 449        /* setup used_desc */
 450        ioat_chan->used_desc.next = ioat_chan->free_desc.next;
 451        ioat_chan->used_desc.prev = NULL;
 452
 453        /* pull free_desc out of the circle so that every node is a hw
 454         * descriptor, but leave it pointing to the list
 455         */
 456        ioat_chan->free_desc.prev->next = ioat_chan->free_desc.next;
 457        ioat_chan->free_desc.next->prev = ioat_chan->free_desc.prev;
 458
 459        /* circle link the hw descriptors */
 460        desc = to_ioat_desc(ioat_chan->free_desc.next);
 461        desc->hw->next = to_ioat_desc(desc->node.next)->async_tx.phys;
 462        list_for_each_entry_safe(desc, _desc, ioat_chan->free_desc.next, node) {
 463                desc->hw->next = to_ioat_desc(desc->node.next)->async_tx.phys;
 464        }
 465}
 466
 467/**
 468 * ioat_dma_alloc_chan_resources - returns the number of allocated descriptors
 469 * @chan: the channel to be filled out
 470 */
 471static int ioat_dma_alloc_chan_resources(struct dma_chan *chan)
 472{
 473        struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan);
 474        struct ioat_desc_sw *desc;
 475        u16 chanctrl;
 476        u32 chanerr;
 477        int i;
 478        LIST_HEAD(tmp_list);
 479
 480        /* have we already been set up? */
 481        if (!list_empty(&ioat_chan->free_desc))
 482                return ioat_chan->desccount;
 483
 484        /* Setup register to interrupt and write completion status on error */
 485        chanctrl = IOAT_CHANCTRL_ERR_INT_EN |
 486                IOAT_CHANCTRL_ANY_ERR_ABORT_EN |
 487                IOAT_CHANCTRL_ERR_COMPLETION_EN;
 488        writew(chanctrl, ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
 489
 490        chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
 491        if (chanerr) {
 492                dev_err(&ioat_chan->device->pdev->dev,
 493                        "CHANERR = %x, clearing\n", chanerr);
 494                writel(chanerr, ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
 495        }
 496
 497        /* Allocate descriptors */
 498        for (i = 0; i < ioat_initial_desc_count; i++) {
 499                desc = ioat_dma_alloc_descriptor(ioat_chan, GFP_KERNEL);
 500                if (!desc) {
 501                        dev_err(&ioat_chan->device->pdev->dev,
 502                                "Only %d initial descriptors\n", i);
 503                        break;
 504                }
 505                list_add_tail(&desc->node, &tmp_list);
 506        }
 507        spin_lock_bh(&ioat_chan->desc_lock);
 508        ioat_chan->desccount = i;
 509        list_splice(&tmp_list, &ioat_chan->free_desc);
 510        if (ioat_chan->device->version != IOAT_VER_1_2)
 511                ioat2_dma_massage_chan_desc(ioat_chan);
 512        spin_unlock_bh(&ioat_chan->desc_lock);
 513
 514        /* allocate a completion writeback area */
 515        /* doing 2 32bit writes to mmio since 1 64b write doesn't work */
 516        ioat_chan->completion_virt =
 517                pci_pool_alloc(ioat_chan->device->completion_pool,
 518                               GFP_KERNEL,
 519                               &ioat_chan->completion_addr);
 520        memset(ioat_chan->completion_virt, 0,
 521               sizeof(*ioat_chan->completion_virt));
 522        writel(((u64) ioat_chan->completion_addr) & 0x00000000FFFFFFFF,
 523               ioat_chan->reg_base + IOAT_CHANCMP_OFFSET_LOW);
 524        writel(((u64) ioat_chan->completion_addr) >> 32,
 525               ioat_chan->reg_base + IOAT_CHANCMP_OFFSET_HIGH);
 526
 527        tasklet_enable(&ioat_chan->cleanup_task);
 528        ioat_dma_start_null_desc(ioat_chan);  /* give chain to dma device */
 529        return ioat_chan->desccount;
 530}
 531
 532/**
 533 * ioat_dma_free_chan_resources - release all the descriptors
 534 * @chan: the channel to be cleaned
 535 */
 536static void ioat_dma_free_chan_resources(struct dma_chan *chan)
 537{
 538        struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan);
 539        struct ioatdma_device *ioatdma_device = to_ioatdma_device(chan->device);
 540        struct ioat_desc_sw *desc, *_desc;
 541        int in_use_descs = 0;
 542
 543        tasklet_disable(&ioat_chan->cleanup_task);
 544        ioat_dma_memcpy_cleanup(ioat_chan);
 545
 546        /* Delay 100ms after reset to allow internal DMA logic to quiesce
 547         * before removing DMA descriptor resources.
 548         */
 549        writeb(IOAT_CHANCMD_RESET,
 550               ioat_chan->reg_base
 551                        + IOAT_CHANCMD_OFFSET(ioat_chan->device->version));
 552        mdelay(100);
 553
 554        spin_lock_bh(&ioat_chan->desc_lock);
 555        switch (ioat_chan->device->version) {
 556        case IOAT_VER_1_2:
 557                list_for_each_entry_safe(desc, _desc,
 558                                         &ioat_chan->used_desc, node) {
 559                        in_use_descs++;
 560                        list_del(&desc->node);
 561                        pci_pool_free(ioatdma_device->dma_pool, desc->hw,
 562                                      desc->async_tx.phys);
 563                        kfree(desc);
 564                }
 565                list_for_each_entry_safe(desc, _desc,
 566                                         &ioat_chan->free_desc, node) {
 567                        list_del(&desc->node);
 568                        pci_pool_free(ioatdma_device->dma_pool, desc->hw,
 569                                      desc->async_tx.phys);
 570                        kfree(desc);
 571                }
 572                break;
 573        case IOAT_VER_2_0:
 574                list_for_each_entry_safe(desc, _desc,
 575                                         ioat_chan->free_desc.next, node) {
 576                        list_del(&desc->node);
 577                        pci_pool_free(ioatdma_device->dma_pool, desc->hw,
 578                                      desc->async_tx.phys);
 579                        kfree(desc);
 580                }
 581                desc = to_ioat_desc(ioat_chan->free_desc.next);
 582                pci_pool_free(ioatdma_device->dma_pool, desc->hw,
 583                              desc->async_tx.phys);
 584                kfree(desc);
 585                INIT_LIST_HEAD(&ioat_chan->free_desc);
 586                INIT_LIST_HEAD(&ioat_chan->used_desc);
 587                break;
 588        }
 589        spin_unlock_bh(&ioat_chan->desc_lock);
 590
 591        pci_pool_free(ioatdma_device->completion_pool,
 592                      ioat_chan->completion_virt,
 593                      ioat_chan->completion_addr);
 594
 595        /* one is ok since we left it on there on purpose */
 596        if (in_use_descs > 1)
 597                dev_err(&ioat_chan->device->pdev->dev,
 598                        "Freeing %d in use descriptors!\n",
 599                        in_use_descs - 1);
 600
 601        ioat_chan->last_completion = ioat_chan->completion_addr = 0;
 602        ioat_chan->pending = 0;
 603        ioat_chan->dmacount = 0;
 604}
 605
 606/**
 607 * ioat_dma_get_next_descriptor - return the next available descriptor
 608 * @ioat_chan: IOAT DMA channel handle
 609 *
 610 * Gets the next descriptor from the chain, and must be called with the
 611 * channel's desc_lock held.  Allocates more descriptors if the channel
 612 * has run out.
 613 */
 614static struct ioat_desc_sw *
 615ioat1_dma_get_next_descriptor(struct ioat_dma_chan *ioat_chan)
 616{
 617        struct ioat_desc_sw *new;
 618
 619        if (!list_empty(&ioat_chan->free_desc)) {
 620                new = to_ioat_desc(ioat_chan->free_desc.next);
 621                list_del(&new->node);
 622        } else {
 623                /* try to get another desc */
 624                new = ioat_dma_alloc_descriptor(ioat_chan, GFP_ATOMIC);
 625                if (!new) {
 626                        dev_err(&ioat_chan->device->pdev->dev,
 627                                "alloc failed\n");
 628                        return NULL;
 629                }
 630        }
 631
 632        prefetch(new->hw);
 633        return new;
 634}
 635
 636static struct ioat_desc_sw *
 637ioat2_dma_get_next_descriptor(struct ioat_dma_chan *ioat_chan)
 638{
 639        struct ioat_desc_sw *new;
 640
 641        /*
 642         * used.prev points to where to start processing
 643         * used.next points to next free descriptor
 644         * if used.prev == NULL, there are none waiting to be processed
 645         * if used.next == used.prev.prev, there is only one free descriptor,
 646         *      and we need to use it to as a noop descriptor before
 647         *      linking in a new set of descriptors, since the device
 648         *      has probably already read the pointer to it
 649         */
 650        if (ioat_chan->used_desc.prev &&
 651            ioat_chan->used_desc.next == ioat_chan->used_desc.prev->prev) {
 652
 653                struct ioat_desc_sw *desc;
 654                struct ioat_desc_sw *noop_desc;
 655                int i;
 656
 657                /* set up the noop descriptor */
 658                noop_desc = to_ioat_desc(ioat_chan->used_desc.next);
 659                noop_desc->hw->size = 0;
 660                noop_desc->hw->ctl = IOAT_DMA_DESCRIPTOR_NUL;
 661                noop_desc->hw->src_addr = 0;
 662                noop_desc->hw->dst_addr = 0;
 663
 664                ioat_chan->used_desc.next = ioat_chan->used_desc.next->next;
 665                ioat_chan->pending++;
 666                ioat_chan->dmacount++;
 667
 668                /* try to get a few more descriptors */
 669                for (i = 16; i; i--) {
 670                        desc = ioat_dma_alloc_descriptor(ioat_chan, GFP_ATOMIC);
 671                        if (!desc) {
 672                                dev_err(&ioat_chan->device->pdev->dev,
 673                                        "alloc failed\n");
 674                                break;
 675                        }
 676                        list_add_tail(&desc->node, ioat_chan->used_desc.next);
 677
 678                        desc->hw->next
 679                                = to_ioat_desc(desc->node.next)->async_tx.phys;
 680                        to_ioat_desc(desc->node.prev)->hw->next
 681                                = desc->async_tx.phys;
 682                        ioat_chan->desccount++;
 683                }
 684
 685                ioat_chan->used_desc.next = noop_desc->node.next;
 686        }
 687        new = to_ioat_desc(ioat_chan->used_desc.next);
 688        prefetch(new);
 689        ioat_chan->used_desc.next = new->node.next;
 690
 691        if (ioat_chan->used_desc.prev == NULL)
 692                ioat_chan->used_desc.prev = &new->node;
 693
 694        prefetch(new->hw);
 695        return new;
 696}
 697
 698static struct ioat_desc_sw *ioat_dma_get_next_descriptor(
 699                                                struct ioat_dma_chan *ioat_chan)
 700{
 701        if (!ioat_chan)
 702                return NULL;
 703
 704        switch (ioat_chan->device->version) {
 705        case IOAT_VER_1_2:
 706                return ioat1_dma_get_next_descriptor(ioat_chan);
 707                break;
 708        case IOAT_VER_2_0:
 709                return ioat2_dma_get_next_descriptor(ioat_chan);
 710                break;
 711        }
 712        return NULL;
 713}
 714
 715static struct dma_async_tx_descriptor *ioat1_dma_prep_memcpy(
 716                                                struct dma_chan *chan,
 717                                                size_t len,
 718                                                int int_en)
 719{
 720        struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan);
 721        struct ioat_desc_sw *new;
 722
 723        spin_lock_bh(&ioat_chan->desc_lock);
 724        new = ioat_dma_get_next_descriptor(ioat_chan);
 725        spin_unlock_bh(&ioat_chan->desc_lock);
 726
 727        if (new) {
 728                new->len = len;
 729                return &new->async_tx;
 730        } else
 731                return NULL;
 732}
 733
 734static struct dma_async_tx_descriptor *ioat2_dma_prep_memcpy(
 735                                                struct dma_chan *chan,
 736                                                size_t len,
 737                                                int int_en)
 738{
 739        struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan);
 740        struct ioat_desc_sw *new;
 741
 742        spin_lock_bh(&ioat_chan->desc_lock);
 743        new = ioat2_dma_get_next_descriptor(ioat_chan);
 744
 745        /*
 746         * leave ioat_chan->desc_lock set in ioat 2 path
 747         * it will get unlocked at end of tx_submit
 748         */
 749
 750        if (new) {
 751                new->len = len;
 752                return &new->async_tx;
 753        } else
 754                return NULL;
 755}
 756
 757static void ioat_dma_cleanup_tasklet(unsigned long data)
 758{
 759        struct ioat_dma_chan *chan = (void *)data;
 760        ioat_dma_memcpy_cleanup(chan);
 761        writew(IOAT_CHANCTRL_INT_DISABLE,
 762               chan->reg_base + IOAT_CHANCTRL_OFFSET);
 763}
 764
 765/**
 766 * ioat_dma_memcpy_cleanup - cleanup up finished descriptors
 767 * @chan: ioat channel to be cleaned up
 768 */
 769static void ioat_dma_memcpy_cleanup(struct ioat_dma_chan *ioat_chan)
 770{
 771        unsigned long phys_complete;
 772        struct ioat_desc_sw *desc, *_desc;
 773        dma_cookie_t cookie = 0;
 774        unsigned long desc_phys;
 775        struct ioat_desc_sw *latest_desc;
 776
 777        prefetch(ioat_chan->completion_virt);
 778
 779        if (!spin_trylock_bh(&ioat_chan->cleanup_lock))
 780                return;
 781
 782        /* The completion writeback can happen at any time,
 783           so reads by the driver need to be atomic operations
 784           The descriptor physical addresses are limited to 32-bits
 785           when the CPU can only do a 32-bit mov */
 786
 787#if (BITS_PER_LONG == 64)
 788        phys_complete =
 789                ioat_chan->completion_virt->full
 790                & IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR;
 791#else
 792        phys_complete =
 793                ioat_chan->completion_virt->low & IOAT_LOW_COMPLETION_MASK;
 794#endif
 795
 796        if ((ioat_chan->completion_virt->full
 797                & IOAT_CHANSTS_DMA_TRANSFER_STATUS) ==
 798                                IOAT_CHANSTS_DMA_TRANSFER_STATUS_HALTED) {
 799                dev_err(&ioat_chan->device->pdev->dev,
 800                        "Channel halted, chanerr = %x\n",
 801                        readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET));
 802
 803                /* TODO do something to salvage the situation */
 804        }
 805
 806        if (phys_complete == ioat_chan->last_completion) {
 807                spin_unlock_bh(&ioat_chan->cleanup_lock);
 808                return;
 809        }
 810
 811        cookie = 0;
 812        spin_lock_bh(&ioat_chan->desc_lock);
 813        switch (ioat_chan->device->version) {
 814        case IOAT_VER_1_2:
 815                list_for_each_entry_safe(desc, _desc,
 816                                         &ioat_chan->used_desc, node) {
 817
 818                        /*
 819                         * Incoming DMA requests may use multiple descriptors,
 820                         * due to exceeding xfercap, perhaps. If so, only the
 821                         * last one will have a cookie, and require unmapping.
 822                         */
 823                        if (desc->async_tx.cookie) {
 824                                cookie = desc->async_tx.cookie;
 825
 826                                /*
 827                                 * yes we are unmapping both _page and _single
 828                                 * alloc'd regions with unmap_page. Is this
 829                                 * *really* that bad?
 830                                 */
 831                                pci_unmap_page(ioat_chan->device->pdev,
 832                                                pci_unmap_addr(desc, dst),
 833                                                pci_unmap_len(desc, len),
 834                                                PCI_DMA_FROMDEVICE);
 835                                pci_unmap_page(ioat_chan->device->pdev,
 836                                                pci_unmap_addr(desc, src),
 837                                                pci_unmap_len(desc, len),
 838                                                PCI_DMA_TODEVICE);
 839
 840                                if (desc->async_tx.callback) {
 841                                        desc->async_tx.callback(desc->async_tx.callback_param);
 842                                        desc->async_tx.callback = NULL;
 843                                }
 844                        }
 845
 846                        if (desc->async_tx.phys != phys_complete) {
 847                                /*
 848                                 * a completed entry, but not the last, so clean
 849                                 * up if the client is done with the descriptor
 850                                 */
 851                                if (desc->async_tx.ack) {
 852                                        list_del(&desc->node);
 853                                        list_add_tail(&desc->node,
 854                                                      &ioat_chan->free_desc);
 855                                } else
 856                                        desc->async_tx.cookie = 0;
 857                        } else {
 858                                /*
 859                                 * last used desc. Do not remove, so we can
 860                                 * append from it, but don't look at it next
 861                                 * time, either
 862                                 */
 863                                desc->async_tx.cookie = 0;
 864
 865                                /* TODO check status bits? */
 866                                break;
 867                        }
 868                }
 869                break;
 870        case IOAT_VER_2_0:
 871                /* has some other thread has already cleaned up? */
 872                if (ioat_chan->used_desc.prev == NULL)
 873                        break;
 874
 875                /* work backwards to find latest finished desc */
 876                desc = to_ioat_desc(ioat_chan->used_desc.next);
 877                latest_desc = NULL;
 878                do {
 879                        desc = to_ioat_desc(desc->node.prev);
 880                        desc_phys = (unsigned long)desc->async_tx.phys
 881                                       & IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR;
 882                        if (desc_phys == phys_complete) {
 883                                latest_desc = desc;
 884                                break;
 885                        }
 886                } while (&desc->node != ioat_chan->used_desc.prev);
 887
 888                if (latest_desc != NULL) {
 889
 890                        /* work forwards to clear finished descriptors */
 891                        for (desc = to_ioat_desc(ioat_chan->used_desc.prev);
 892                             &desc->node != latest_desc->node.next &&
 893                             &desc->node != ioat_chan->used_desc.next;
 894                             desc = to_ioat_desc(desc->node.next)) {
 895                                if (desc->async_tx.cookie) {
 896                                        cookie = desc->async_tx.cookie;
 897                                        desc->async_tx.cookie = 0;
 898
 899                                        pci_unmap_page(ioat_chan->device->pdev,
 900                                                      pci_unmap_addr(desc, dst),
 901                                                      pci_unmap_len(desc, len),
 902                                                      PCI_DMA_FROMDEVICE);
 903                                        pci_unmap_page(ioat_chan->device->pdev,
 904                                                      pci_unmap_addr(desc, src),
 905                                                      pci_unmap_len(desc, len),
 906                                                      PCI_DMA_TODEVICE);
 907
 908                                        if (desc->async_tx.callback) {
 909                                                desc->async_tx.callback(desc->async_tx.callback_param);
 910                                                desc->async_tx.callback = NULL;
 911                                        }
 912                                }
 913                        }
 914
 915                        /* move used.prev up beyond those that are finished */
 916                        if (&desc->node == ioat_chan->used_desc.next)
 917                                ioat_chan->used_desc.prev = NULL;
 918                        else
 919                                ioat_chan->used_desc.prev = &desc->node;
 920                }
 921                break;
 922        }
 923
 924        spin_unlock_bh(&ioat_chan->desc_lock);
 925
 926        ioat_chan->last_completion = phys_complete;
 927        if (cookie != 0)
 928                ioat_chan->completed_cookie = cookie;
 929
 930        spin_unlock_bh(&ioat_chan->cleanup_lock);
 931}
 932
 933static void ioat_dma_dependency_added(struct dma_chan *chan)
 934{
 935        struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan);
 936        spin_lock_bh(&ioat_chan->desc_lock);
 937        if (ioat_chan->pending == 0) {
 938                spin_unlock_bh(&ioat_chan->desc_lock);
 939                ioat_dma_memcpy_cleanup(ioat_chan);
 940        } else
 941                spin_unlock_bh(&ioat_chan->desc_lock);
 942}
 943
 944/**
 945 * ioat_dma_is_complete - poll the status of a IOAT DMA transaction
 946 * @chan: IOAT DMA channel handle
 947 * @cookie: DMA transaction identifier
 948 * @done: if not %NULL, updated with last completed transaction
 949 * @used: if not %NULL, updated with last used transaction
 950 */
 951static enum dma_status ioat_dma_is_complete(struct dma_chan *chan,
 952                                            dma_cookie_t cookie,
 953                                            dma_cookie_t *done,
 954                                            dma_cookie_t *used)
 955{
 956        struct ioat_dma_chan *ioat_chan = to_ioat_chan(chan);
 957        dma_cookie_t last_used;
 958        dma_cookie_t last_complete;
 959        enum dma_status ret;
 960
 961        last_used = chan->cookie;
 962        last_complete = ioat_chan->completed_cookie;
 963
 964        if (done)
 965                *done = last_complete;
 966        if (used)
 967                *used = last_used;
 968
 969        ret = dma_async_is_complete(cookie, last_complete, last_used);
 970        if (ret == DMA_SUCCESS)
 971                return ret;
 972
 973        ioat_dma_memcpy_cleanup(ioat_chan);
 974
 975        last_used = chan->cookie;
 976        last_complete = ioat_chan->completed_cookie;
 977
 978        if (done)
 979                *done = last_complete;
 980        if (used)
 981                *used = last_used;
 982
 983        return dma_async_is_complete(cookie, last_complete, last_used);
 984}
 985
 986static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan)
 987{
 988        struct ioat_desc_sw *desc;
 989
 990        spin_lock_bh(&ioat_chan->desc_lock);
 991
 992        desc = ioat_dma_get_next_descriptor(ioat_chan);
 993        desc->hw->ctl = IOAT_DMA_DESCRIPTOR_NUL
 994                                | IOAT_DMA_DESCRIPTOR_CTL_INT_GN
 995                                | IOAT_DMA_DESCRIPTOR_CTL_CP_STS;
 996        desc->hw->size = 0;
 997        desc->hw->src_addr = 0;
 998        desc->hw->dst_addr = 0;
 999        desc->async_tx.ack = 1;
1000        switch (ioat_chan->device->version) {
1001        case IOAT_VER_1_2:
1002                desc->hw->next = 0;
1003                list_add_tail(&desc->node, &ioat_chan->used_desc);
1004
1005                writel(((u64) desc->async_tx.phys) & 0x00000000FFFFFFFF,
1006                       ioat_chan->reg_base + IOAT1_CHAINADDR_OFFSET_LOW);
1007                writel(((u64) desc->async_tx.phys) >> 32,
1008                       ioat_chan->reg_base + IOAT1_CHAINADDR_OFFSET_HIGH);
1009
1010                writeb(IOAT_CHANCMD_START, ioat_chan->reg_base
1011                        + IOAT_CHANCMD_OFFSET(ioat_chan->device->version));
1012                break;
1013        case IOAT_VER_2_0:
1014                writel(((u64) desc->async_tx.phys) & 0x00000000FFFFFFFF,
1015                       ioat_chan->reg_base + IOAT2_CHAINADDR_OFFSET_LOW);
1016                writel(((u64) desc->async_tx.phys) >> 32,
1017                       ioat_chan->reg_base + IOAT2_CHAINADDR_OFFSET_HIGH);
1018
1019                ioat_chan->dmacount++;
1020                __ioat2_dma_memcpy_issue_pending(ioat_chan);
1021                break;
1022        }
1023        spin_unlock_bh(&ioat_chan->desc_lock);
1024}
1025
1026/*
1027 * Perform a IOAT transaction to verify the HW works.
1028 */
1029#define IOAT_TEST_SIZE 2000
1030
1031static void ioat_dma_test_callback(void *dma_async_param)
1032{
1033        printk(KERN_ERR "ioatdma: ioat_dma_test_callback(%p)\n",
1034                dma_async_param);
1035}
1036
1037/**
1038 * ioat_dma_self_test - Perform a IOAT transaction to verify the HW works.
1039 * @device: device to be tested
1040 */
1041static int ioat_dma_self_test(struct ioatdma_device *device)
1042{
1043        int i;
1044        u8 *src;
1045        u8 *dest;
1046        struct dma_chan *dma_chan;
1047        struct dma_async_tx_descriptor *tx;
1048        dma_addr_t addr;
1049        dma_cookie_t cookie;
1050        int err = 0;
1051
1052        src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL);
1053        if (!src)
1054                return -ENOMEM;
1055        dest = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL);
1056        if (!dest) {
1057                kfree(src);
1058                return -ENOMEM;
1059        }
1060
1061        /* Fill in src buffer */
1062        for (i = 0; i < IOAT_TEST_SIZE; i++)
1063                src[i] = (u8)i;
1064
1065        /* Start copy, using first DMA channel */
1066        dma_chan = container_of(device->common.channels.next,
1067                                struct dma_chan,
1068                                device_node);
1069        if (device->common.device_alloc_chan_resources(dma_chan) < 1) {
1070                dev_err(&device->pdev->dev,
1071                        "selftest cannot allocate chan resource\n");
1072                err = -ENODEV;
1073                goto out;
1074        }
1075
1076        tx = device->common.device_prep_dma_memcpy(dma_chan, IOAT_TEST_SIZE, 0);
1077        if (!tx) {
1078                dev_err(&device->pdev->dev,
1079                        "Self-test prep failed, disabling\n");
1080                err = -ENODEV;
1081                goto free_resources;
1082        }
1083
1084        async_tx_ack(tx);
1085        addr = dma_map_single(dma_chan->device->dev, src, IOAT_TEST_SIZE,
1086                              DMA_TO_DEVICE);
1087        tx->tx_set_src(addr, tx, 0);
1088        addr = dma_map_single(dma_chan->device->dev, dest, IOAT_TEST_SIZE,
1089                              DMA_FROM_DEVICE);
1090        tx->tx_set_dest(addr, tx, 0);
1091        tx->callback = ioat_dma_test_callback;
1092        tx->callback_param = (void *)0x8086;
1093        cookie = tx->tx_submit(tx);
1094        if (cookie < 0) {
1095                dev_err(&device->pdev->dev,
1096                        "Self-test setup failed, disabling\n");
1097                err = -ENODEV;
1098                goto free_resources;
1099        }
1100        device->common.device_issue_pending(dma_chan);
1101        msleep(1);
1102
1103        if (device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL)
1104                                        != DMA_SUCCESS) {
1105                dev_err(&device->pdev->dev,
1106                        "Self-test copy timed out, disabling\n");
1107                err = -ENODEV;
1108                goto free_resources;
1109        }
1110        if (memcmp(src, dest, IOAT_TEST_SIZE)) {
1111                dev_err(&device->pdev->dev,
1112                        "Self-test copy failed compare, disabling\n");
1113                err = -ENODEV;
1114                goto free_resources;
1115        }
1116
1117free_resources:
1118        device->common.device_free_chan_resources(dma_chan);
1119out:
1120        kfree(src);
1121        kfree(dest);
1122        return err;
1123}
1124
1125static char ioat_interrupt_style[32] = "msix";
1126module_param_string(ioat_interrupt_style, ioat_interrupt_style,
1127                    sizeof(ioat_interrupt_style), 0644);
1128MODULE_PARM_DESC(ioat_interrupt_style,
1129                 "set ioat interrupt style: msix (default), "
1130                 "msix-single-vector, msi, intx)");
1131
1132/**
1133 * ioat_dma_setup_interrupts - setup interrupt handler
1134 * @device: ioat device
1135 */
1136static int ioat_dma_setup_interrupts(struct ioatdma_device *device)
1137{
1138        struct ioat_dma_chan *ioat_chan;
1139        int err, i, j, msixcnt;
1140        u8 intrctrl = 0;
1141
1142        if (!strcmp(ioat_interrupt_style, "msix"))
1143                goto msix;
1144        if (!strcmp(ioat_interrupt_style, "msix-single-vector"))
1145                goto msix_single_vector;
1146        if (!strcmp(ioat_interrupt_style, "msi"))
1147                goto msi;
1148        if (!strcmp(ioat_interrupt_style, "intx"))
1149                goto intx;
1150        dev_err(&device->pdev->dev, "invalid ioat_interrupt_style %s\n",
1151                ioat_interrupt_style);
1152        goto err_no_irq;
1153
1154msix:
1155        /* The number of MSI-X vectors should equal the number of channels */
1156        msixcnt = device->common.chancnt;
1157        for (i = 0; i < msixcnt; i++)
1158                device->msix_entries[i].entry = i;
1159
1160        err = pci_enable_msix(device->pdev, device->msix_entries, msixcnt);
1161        if (err < 0)
1162                goto msi;
1163        if (err > 0)
1164                goto msix_single_vector;
1165
1166        for (i = 0; i < msixcnt; i++) {
1167                ioat_chan = ioat_lookup_chan_by_index(device, i);
1168                err = request_irq(device->msix_entries[i].vector,
1169                                  ioat_dma_do_interrupt_msix,
1170                                  0, "ioat-msix", ioat_chan);
1171                if (err) {
1172                        for (j = 0; j < i; j++) {
1173                                ioat_chan =
1174                                        ioat_lookup_chan_by_index(device, j);
1175                                free_irq(device->msix_entries[j].vector,
1176                                         ioat_chan);
1177                        }
1178                        goto msix_single_vector;
1179                }
1180        }
1181        intrctrl |= IOAT_INTRCTRL_MSIX_VECTOR_CONTROL;
1182        device->irq_mode = msix_multi_vector;
1183        goto done;
1184
1185msix_single_vector:
1186        device->msix_entries[0].entry = 0;
1187        err = pci_enable_msix(device->pdev, device->msix_entries, 1);
1188        if (err)
1189                goto msi;
1190
1191        err = request_irq(device->msix_entries[0].vector, ioat_dma_do_interrupt,
1192                          0, "ioat-msix", device);
1193        if (err) {
1194                pci_disable_msix(device->pdev);
1195                goto msi;
1196        }
1197        device->irq_mode = msix_single_vector;
1198        goto done;
1199
1200msi:
1201        err = pci_enable_msi(device->pdev);
1202        if (err)
1203                goto intx;
1204
1205        err = request_irq(device->pdev->irq, ioat_dma_do_interrupt,
1206                          0, "ioat-msi", device);
1207        if (err) {
1208                pci_disable_msi(device->pdev);
1209                goto intx;
1210        }
1211        /*
1212         * CB 1.2 devices need a bit set in configuration space to enable MSI
1213         */
1214        if (device->version == IOAT_VER_1_2) {
1215                u32 dmactrl;
1216                pci_read_config_dword(device->pdev,
1217                                      IOAT_PCI_DMACTRL_OFFSET, &dmactrl);
1218                dmactrl |= IOAT_PCI_DMACTRL_MSI_EN;
1219                pci_write_config_dword(device->pdev,
1220                                       IOAT_PCI_DMACTRL_OFFSET, dmactrl);
1221        }
1222        device->irq_mode = msi;
1223        goto done;
1224
1225intx:
1226        err = request_irq(device->pdev->irq, ioat_dma_do_interrupt,
1227                          IRQF_SHARED, "ioat-intx", device);
1228        if (err)
1229                goto err_no_irq;
1230        device->irq_mode = intx;
1231
1232done:
1233        intrctrl |= IOAT_INTRCTRL_MASTER_INT_EN;
1234        writeb(intrctrl, device->reg_base + IOAT_INTRCTRL_OFFSET);
1235        return 0;
1236
1237err_no_irq:
1238        /* Disable all interrupt generation */
1239        writeb(0, device->reg_base + IOAT_INTRCTRL_OFFSET);
1240        dev_err(&device->pdev->dev, "no usable interrupts\n");
1241        device->irq_mode = none;
1242        return -1;
1243}
1244
1245/**
1246 * ioat_dma_remove_interrupts - remove whatever interrupts were set
1247 * @device: ioat device
1248 */
1249static void ioat_dma_remove_interrupts(struct ioatdma_device *device)
1250{
1251        struct ioat_dma_chan *ioat_chan;
1252        int i;
1253
1254        /* Disable all interrupt generation */
1255        writeb(0, device->reg_base + IOAT_INTRCTRL_OFFSET);
1256
1257        switch (device->irq_mode) {
1258        case msix_multi_vector:
1259                for (i = 0; i < device->common.chancnt; i++) {
1260                        ioat_chan = ioat_lookup_chan_by_index(device, i);
1261                        free_irq(device->msix_entries[i].vector, ioat_chan);
1262                }
1263                pci_disable_msix(device->pdev);
1264                break;
1265        case msix_single_vector:
1266                free_irq(device->msix_entries[0].vector, device);
1267                pci_disable_msix(device->pdev);
1268                break;
1269        case msi:
1270                free_irq(device->pdev->irq, device);
1271                pci_disable_msi(device->pdev);
1272                break;
1273        case intx:
1274                free_irq(device->pdev->irq, device);
1275                break;
1276        case none:
1277                dev_warn(&device->pdev->dev,
1278                         "call to %s without interrupts setup\n", __func__);
1279        }
1280        device->irq_mode = none;
1281}
1282
1283struct ioatdma_device *ioat_dma_probe(struct pci_dev *pdev,
1284                                      void __iomem *iobase)
1285{
1286        int err;
1287        struct ioatdma_device *device;
1288
1289        device = kzalloc(sizeof(*device), GFP_KERNEL);
1290        if (!device) {
1291                err = -ENOMEM;
1292                goto err_kzalloc;
1293        }
1294        device->pdev = pdev;
1295        device->reg_base = iobase;
1296        device->version = readb(device->reg_base + IOAT_VER_OFFSET);
1297
1298        /* DMA coherent memory pool for DMA descriptor allocations */
1299        device->dma_pool = pci_pool_create("dma_desc_pool", pdev,
1300                                           sizeof(struct ioat_dma_descriptor),
1301                                           64, 0);
1302        if (!device->dma_pool) {
1303                err = -ENOMEM;
1304                goto err_dma_pool;
1305        }
1306
1307        device->completion_pool = pci_pool_create("completion_pool", pdev,
1308                                                  sizeof(u64), SMP_CACHE_BYTES,
1309                                                  SMP_CACHE_BYTES);
1310        if (!device->completion_pool) {
1311                err = -ENOMEM;
1312                goto err_completion_pool;
1313        }
1314
1315        INIT_LIST_HEAD(&device->common.channels);
1316        ioat_dma_enumerate_channels(device);
1317
1318        device->common.device_alloc_chan_resources =
1319                                                ioat_dma_alloc_chan_resources;
1320        device->common.device_free_chan_resources =
1321                                                ioat_dma_free_chan_resources;
1322        device->common.dev = &pdev->dev;
1323
1324        dma_cap_set(DMA_MEMCPY, device->common.cap_mask);
1325        device->common.device_is_tx_complete = ioat_dma_is_complete;
1326        device->common.device_dependency_added = ioat_dma_dependency_added;
1327        switch (device->version) {
1328        case IOAT_VER_1_2:
1329                device->common.device_prep_dma_memcpy = ioat1_dma_prep_memcpy;
1330                device->common.device_issue_pending =
1331                                                ioat1_dma_memcpy_issue_pending;
1332                break;
1333        case IOAT_VER_2_0:
1334                device->common.device_prep_dma_memcpy = ioat2_dma_prep_memcpy;
1335                device->common.device_issue_pending =
1336                                                ioat2_dma_memcpy_issue_pending;
1337                break;
1338        }
1339
1340        dev_err(&device->pdev->dev,
1341                "Intel(R) I/OAT DMA Engine found,"
1342                " %d channels, device version 0x%02x, driver version %s\n",
1343                device->common.chancnt, device->version, IOAT_DMA_VERSION);
1344
1345        err = ioat_dma_setup_interrupts(device);
1346        if (err)
1347                goto err_setup_interrupts;
1348
1349        err = ioat_dma_self_test(device);
1350        if (err)
1351                goto err_self_test;
1352
1353        dma_async_device_register(&device->common);
1354
1355        return device;
1356
1357err_self_test:
1358        ioat_dma_remove_interrupts(device);
1359err_setup_interrupts:
1360        pci_pool_destroy(device->completion_pool);
1361err_completion_pool:
1362        pci_pool_destroy(device->dma_pool);
1363err_dma_pool:
1364        kfree(device);
1365err_kzalloc:
1366        dev_err(&pdev->dev,
1367                "Intel(R) I/OAT DMA Engine initialization failed\n");
1368        return NULL;
1369}
1370
1371void ioat_dma_remove(struct ioatdma_device *device)
1372{
1373        struct dma_chan *chan, *_chan;
1374        struct ioat_dma_chan *ioat_chan;
1375
1376        ioat_dma_remove_interrupts(device);
1377
1378        dma_async_device_unregister(&device->common);
1379
1380        pci_pool_destroy(device->dma_pool);
1381        pci_pool_destroy(device->completion_pool);
1382
1383        iounmap(device->reg_base);
1384        pci_release_regions(device->pdev);
1385        pci_disable_device(device->pdev);
1386
1387        list_for_each_entry_safe(chan, _chan,
1388                                 &device->common.channels, device_node) {
1389                ioat_chan = to_ioat_chan(chan);
1390                list_del(&chan->device_node);
1391                kfree(ioat_chan);
1392        }
1393        kfree(device);
1394}
1395
1396