linux/drivers/pci/msi.c
<<
>>
Prefs
   1/*
   2 * File:        msi.c
   3 * Purpose:     PCI Message Signaled Interrupt (MSI)
   4 *
   5 * Copyright (C) 2003-2004 Intel
   6 * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com)
   7 * Copyright (C) 2016 Christoph Hellwig.
   8 */
   9
  10#include <linux/err.h>
  11#include <linux/mm.h>
  12#include <linux/irq.h>
  13#include <linux/interrupt.h>
  14#include <linux/export.h>
  15#include <linux/ioport.h>
  16#include <linux/pci.h>
  17#include <linux/proc_fs.h>
  18#include <linux/msi.h>
  19#include <linux/smp.h>
  20#include <linux/errno.h>
  21#include <linux/io.h>
  22#include <linux/slab.h>
  23#include <linux/irqdomain.h>
  24#include <linux/of_irq.h>
  25
  26#include "pci.h"
  27
  28static int pci_msi_enable = 1;
  29int pci_msi_ignore_mask;
  30
  31#define msix_table_size(flags)  ((flags & PCI_MSIX_FLAGS_QSIZE) + 1)
  32
  33#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
  34static struct irq_domain *pci_msi_default_domain;
  35static DEFINE_MUTEX(pci_msi_domain_lock);
  36
  37struct irq_domain * __weak arch_get_pci_msi_domain(struct pci_dev *dev)
  38{
  39        return pci_msi_default_domain;
  40}
  41
  42static struct irq_domain *pci_msi_get_domain(struct pci_dev *dev)
  43{
  44        struct irq_domain *domain;
  45
  46        domain = dev_get_msi_domain(&dev->dev);
  47        if (domain)
  48                return domain;
  49
  50        return arch_get_pci_msi_domain(dev);
  51}
  52
  53static int pci_msi_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
  54{
  55        struct irq_domain *domain;
  56
  57        domain = pci_msi_get_domain(dev);
  58        if (domain && irq_domain_is_hierarchy(domain))
  59                return pci_msi_domain_alloc_irqs(domain, dev, nvec, type);
  60
  61        return arch_setup_msi_irqs(dev, nvec, type);
  62}
  63
  64static void pci_msi_teardown_msi_irqs(struct pci_dev *dev)
  65{
  66        struct irq_domain *domain;
  67
  68        domain = pci_msi_get_domain(dev);
  69        if (domain && irq_domain_is_hierarchy(domain))
  70                pci_msi_domain_free_irqs(domain, dev);
  71        else
  72                arch_teardown_msi_irqs(dev);
  73}
  74#else
  75#define pci_msi_setup_msi_irqs          arch_setup_msi_irqs
  76#define pci_msi_teardown_msi_irqs       arch_teardown_msi_irqs
  77#endif
  78
  79/* Arch hooks */
  80
  81int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
  82{
  83        struct msi_controller *chip = dev->bus->msi;
  84        int err;
  85
  86        if (!chip || !chip->setup_irq)
  87                return -EINVAL;
  88
  89        err = chip->setup_irq(chip, dev, desc);
  90        if (err < 0)
  91                return err;
  92
  93        irq_set_chip_data(desc->irq, chip);
  94
  95        return 0;
  96}
  97
  98void __weak arch_teardown_msi_irq(unsigned int irq)
  99{
 100        struct msi_controller *chip = irq_get_chip_data(irq);
 101
 102        if (!chip || !chip->teardown_irq)
 103                return;
 104
 105        chip->teardown_irq(chip, irq);
 106}
 107
 108int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
 109{
 110        struct msi_controller *chip = dev->bus->msi;
 111        struct msi_desc *entry;
 112        int ret;
 113
 114        if (chip && chip->setup_irqs)
 115                return chip->setup_irqs(chip, dev, nvec, type);
 116        /*
 117         * If an architecture wants to support multiple MSI, it needs to
 118         * override arch_setup_msi_irqs()
 119         */
 120        if (type == PCI_CAP_ID_MSI && nvec > 1)
 121                return 1;
 122
 123        for_each_pci_msi_entry(entry, dev) {
 124                ret = arch_setup_msi_irq(dev, entry);
 125                if (ret < 0)
 126                        return ret;
 127                if (ret > 0)
 128                        return -ENOSPC;
 129        }
 130
 131        return 0;
 132}
 133
 134/*
 135 * We have a default implementation available as a separate non-weak
 136 * function, as it is used by the Xen x86 PCI code
 137 */
 138void default_teardown_msi_irqs(struct pci_dev *dev)
 139{
 140        int i;
 141        struct msi_desc *entry;
 142
 143        for_each_pci_msi_entry(entry, dev)
 144                if (entry->irq)
 145                        for (i = 0; i < entry->nvec_used; i++)
 146                                arch_teardown_msi_irq(entry->irq + i);
 147}
 148
 149void __weak arch_teardown_msi_irqs(struct pci_dev *dev)
 150{
 151        return default_teardown_msi_irqs(dev);
 152}
 153
 154static void default_restore_msi_irq(struct pci_dev *dev, int irq)
 155{
 156        struct msi_desc *entry;
 157
 158        entry = NULL;
 159        if (dev->msix_enabled) {
 160                for_each_pci_msi_entry(entry, dev) {
 161                        if (irq == entry->irq)
 162                                break;
 163                }
 164        } else if (dev->msi_enabled)  {
 165                entry = irq_get_msi_desc(irq);
 166        }
 167
 168        if (entry)
 169                __pci_write_msi_msg(entry, &entry->msg);
 170}
 171
 172void __weak arch_restore_msi_irqs(struct pci_dev *dev)
 173{
 174        return default_restore_msi_irqs(dev);
 175}
 176
 177static inline __attribute_const__ u32 msi_mask(unsigned x)
 178{
 179        /* Don't shift by >= width of type */
 180        if (x >= 5)
 181                return 0xffffffff;
 182        return (1 << (1 << x)) - 1;
 183}
 184
 185/*
 186 * PCI 2.3 does not specify mask bits for each MSI interrupt.  Attempting to
 187 * mask all MSI interrupts by clearing the MSI enable bit does not work
 188 * reliably as devices without an INTx disable bit will then generate a
 189 * level IRQ which will never be cleared.
 190 */
 191u32 __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag)
 192{
 193        u32 mask_bits = desc->masked;
 194
 195        if (pci_msi_ignore_mask || !desc->msi_attrib.maskbit)
 196                return 0;
 197
 198        mask_bits &= ~mask;
 199        mask_bits |= flag;
 200        pci_write_config_dword(msi_desc_to_pci_dev(desc), desc->mask_pos,
 201                               mask_bits);
 202
 203        return mask_bits;
 204}
 205
 206static void msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag)
 207{
 208        desc->masked = __pci_msi_desc_mask_irq(desc, mask, flag);
 209}
 210
 211static void __iomem *pci_msix_desc_addr(struct msi_desc *desc)
 212{
 213        return desc->mask_base +
 214                desc->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
 215}
 216
 217/*
 218 * This internal function does not flush PCI writes to the device.
 219 * All users must ensure that they read from the device before either
 220 * assuming that the device state is up to date, or returning out of this
 221 * file.  This saves a few milliseconds when initialising devices with lots
 222 * of MSI-X interrupts.
 223 */
 224u32 __pci_msix_desc_mask_irq(struct msi_desc *desc, u32 flag)
 225{
 226        u32 mask_bits = desc->masked;
 227
 228        if (pci_msi_ignore_mask)
 229                return 0;
 230
 231        mask_bits &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT;
 232        if (flag)
 233                mask_bits |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
 234        writel(mask_bits, pci_msix_desc_addr(desc) + PCI_MSIX_ENTRY_VECTOR_CTRL);
 235
 236        return mask_bits;
 237}
 238
 239static void msix_mask_irq(struct msi_desc *desc, u32 flag)
 240{
 241        desc->masked = __pci_msix_desc_mask_irq(desc, flag);
 242}
 243
 244static void msi_set_mask_bit(struct irq_data *data, u32 flag)
 245{
 246        struct msi_desc *desc = irq_data_get_msi_desc(data);
 247
 248        if (desc->msi_attrib.is_msix) {
 249                msix_mask_irq(desc, flag);
 250                readl(desc->mask_base);         /* Flush write to device */
 251        } else {
 252                unsigned offset = data->irq - desc->irq;
 253                msi_mask_irq(desc, 1 << offset, flag << offset);
 254        }
 255}
 256
 257/**
 258 * pci_msi_mask_irq - Generic irq chip callback to mask PCI/MSI interrupts
 259 * @data:       pointer to irqdata associated to that interrupt
 260 */
 261void pci_msi_mask_irq(struct irq_data *data)
 262{
 263        msi_set_mask_bit(data, 1);
 264}
 265EXPORT_SYMBOL_GPL(pci_msi_mask_irq);
 266
 267/**
 268 * pci_msi_unmask_irq - Generic irq chip callback to unmask PCI/MSI interrupts
 269 * @data:       pointer to irqdata associated to that interrupt
 270 */
 271void pci_msi_unmask_irq(struct irq_data *data)
 272{
 273        msi_set_mask_bit(data, 0);
 274}
 275EXPORT_SYMBOL_GPL(pci_msi_unmask_irq);
 276
 277void default_restore_msi_irqs(struct pci_dev *dev)
 278{
 279        struct msi_desc *entry;
 280
 281        for_each_pci_msi_entry(entry, dev)
 282                default_restore_msi_irq(dev, entry->irq);
 283}
 284
 285void __pci_read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
 286{
 287        struct pci_dev *dev = msi_desc_to_pci_dev(entry);
 288
 289        BUG_ON(dev->current_state != PCI_D0);
 290
 291        if (entry->msi_attrib.is_msix) {
 292                void __iomem *base = pci_msix_desc_addr(entry);
 293
 294                msg->address_lo = readl(base + PCI_MSIX_ENTRY_LOWER_ADDR);
 295                msg->address_hi = readl(base + PCI_MSIX_ENTRY_UPPER_ADDR);
 296                msg->data = readl(base + PCI_MSIX_ENTRY_DATA);
 297        } else {
 298                int pos = dev->msi_cap;
 299                u16 data;
 300
 301                pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
 302                                      &msg->address_lo);
 303                if (entry->msi_attrib.is_64) {
 304                        pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
 305                                              &msg->address_hi);
 306                        pci_read_config_word(dev, pos + PCI_MSI_DATA_64, &data);
 307                } else {
 308                        msg->address_hi = 0;
 309                        pci_read_config_word(dev, pos + PCI_MSI_DATA_32, &data);
 310                }
 311                msg->data = data;
 312        }
 313}
 314
 315void __pci_write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
 316{
 317        struct pci_dev *dev = msi_desc_to_pci_dev(entry);
 318
 319        if (dev->current_state != PCI_D0) {
 320                /* Don't touch the hardware now */
 321        } else if (entry->msi_attrib.is_msix) {
 322                void __iomem *base = pci_msix_desc_addr(entry);
 323
 324                writel(msg->address_lo, base + PCI_MSIX_ENTRY_LOWER_ADDR);
 325                writel(msg->address_hi, base + PCI_MSIX_ENTRY_UPPER_ADDR);
 326                writel(msg->data, base + PCI_MSIX_ENTRY_DATA);
 327        } else {
 328                int pos = dev->msi_cap;
 329                u16 msgctl;
 330
 331                pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &msgctl);
 332                msgctl &= ~PCI_MSI_FLAGS_QSIZE;
 333                msgctl |= entry->msi_attrib.multiple << 4;
 334                pci_write_config_word(dev, pos + PCI_MSI_FLAGS, msgctl);
 335
 336                pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
 337                                       msg->address_lo);
 338                if (entry->msi_attrib.is_64) {
 339                        pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
 340                                               msg->address_hi);
 341                        pci_write_config_word(dev, pos + PCI_MSI_DATA_64,
 342                                              msg->data);
 343                } else {
 344                        pci_write_config_word(dev, pos + PCI_MSI_DATA_32,
 345                                              msg->data);
 346                }
 347        }
 348        entry->msg = *msg;
 349}
 350
 351void pci_write_msi_msg(unsigned int irq, struct msi_msg *msg)
 352{
 353        struct msi_desc *entry = irq_get_msi_desc(irq);
 354
 355        __pci_write_msi_msg(entry, msg);
 356}
 357EXPORT_SYMBOL_GPL(pci_write_msi_msg);
 358
 359static void free_msi_irqs(struct pci_dev *dev)
 360{
 361        struct list_head *msi_list = dev_to_msi_list(&dev->dev);
 362        struct msi_desc *entry, *tmp;
 363        struct attribute **msi_attrs;
 364        struct device_attribute *dev_attr;
 365        int i, count = 0;
 366
 367        for_each_pci_msi_entry(entry, dev)
 368                if (entry->irq)
 369                        for (i = 0; i < entry->nvec_used; i++)
 370                                BUG_ON(irq_has_action(entry->irq + i));
 371
 372        pci_msi_teardown_msi_irqs(dev);
 373
 374        list_for_each_entry_safe(entry, tmp, msi_list, list) {
 375                if (entry->msi_attrib.is_msix) {
 376                        if (list_is_last(&entry->list, msi_list))
 377                                iounmap(entry->mask_base);
 378                }
 379
 380                list_del(&entry->list);
 381                kfree(entry);
 382        }
 383
 384        if (dev->msi_irq_groups) {
 385                sysfs_remove_groups(&dev->dev.kobj, dev->msi_irq_groups);
 386                msi_attrs = dev->msi_irq_groups[0]->attrs;
 387                while (msi_attrs[count]) {
 388                        dev_attr = container_of(msi_attrs[count],
 389                                                struct device_attribute, attr);
 390                        kfree(dev_attr->attr.name);
 391                        kfree(dev_attr);
 392                        ++count;
 393                }
 394                kfree(msi_attrs);
 395                kfree(dev->msi_irq_groups[0]);
 396                kfree(dev->msi_irq_groups);
 397                dev->msi_irq_groups = NULL;
 398        }
 399}
 400
 401static void pci_intx_for_msi(struct pci_dev *dev, int enable)
 402{
 403        if (!(dev->dev_flags & PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG))
 404                pci_intx(dev, enable);
 405}
 406
 407static void __pci_restore_msi_state(struct pci_dev *dev)
 408{
 409        u16 control;
 410        struct msi_desc *entry;
 411
 412        if (!dev->msi_enabled)
 413                return;
 414
 415        entry = irq_get_msi_desc(dev->irq);
 416
 417        pci_intx_for_msi(dev, 0);
 418        pci_msi_set_enable(dev, 0);
 419        arch_restore_msi_irqs(dev);
 420
 421        pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
 422        msi_mask_irq(entry, msi_mask(entry->msi_attrib.multi_cap),
 423                     entry->masked);
 424        control &= ~PCI_MSI_FLAGS_QSIZE;
 425        control |= (entry->msi_attrib.multiple << 4) | PCI_MSI_FLAGS_ENABLE;
 426        pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
 427}
 428
 429static void __pci_restore_msix_state(struct pci_dev *dev)
 430{
 431        struct msi_desc *entry;
 432
 433        if (!dev->msix_enabled)
 434                return;
 435        BUG_ON(list_empty(dev_to_msi_list(&dev->dev)));
 436
 437        /* route the table */
 438        pci_intx_for_msi(dev, 0);
 439        pci_msix_clear_and_set_ctrl(dev, 0,
 440                                PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL);
 441
 442        arch_restore_msi_irqs(dev);
 443        for_each_pci_msi_entry(entry, dev)
 444                msix_mask_irq(entry, entry->masked);
 445
 446        pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
 447}
 448
 449void pci_restore_msi_state(struct pci_dev *dev)
 450{
 451        __pci_restore_msi_state(dev);
 452        __pci_restore_msix_state(dev);
 453}
 454EXPORT_SYMBOL_GPL(pci_restore_msi_state);
 455
 456static ssize_t msi_mode_show(struct device *dev, struct device_attribute *attr,
 457                             char *buf)
 458{
 459        struct msi_desc *entry;
 460        unsigned long irq;
 461        int retval;
 462
 463        retval = kstrtoul(attr->attr.name, 10, &irq);
 464        if (retval)
 465                return retval;
 466
 467        entry = irq_get_msi_desc(irq);
 468        if (entry)
 469                return sprintf(buf, "%s\n",
 470                                entry->msi_attrib.is_msix ? "msix" : "msi");
 471
 472        return -ENODEV;
 473}
 474
 475static int populate_msi_sysfs(struct pci_dev *pdev)
 476{
 477        struct attribute **msi_attrs;
 478        struct attribute *msi_attr;
 479        struct device_attribute *msi_dev_attr;
 480        struct attribute_group *msi_irq_group;
 481        const struct attribute_group **msi_irq_groups;
 482        struct msi_desc *entry;
 483        int ret = -ENOMEM;
 484        int num_msi = 0;
 485        int count = 0;
 486        int i;
 487
 488        /* Determine how many msi entries we have */
 489        for_each_pci_msi_entry(entry, pdev)
 490                num_msi += entry->nvec_used;
 491        if (!num_msi)
 492                return 0;
 493
 494        /* Dynamically create the MSI attributes for the PCI device */
 495        msi_attrs = kzalloc(sizeof(void *) * (num_msi + 1), GFP_KERNEL);
 496        if (!msi_attrs)
 497                return -ENOMEM;
 498        for_each_pci_msi_entry(entry, pdev) {
 499                for (i = 0; i < entry->nvec_used; i++) {
 500                        msi_dev_attr = kzalloc(sizeof(*msi_dev_attr), GFP_KERNEL);
 501                        if (!msi_dev_attr)
 502                                goto error_attrs;
 503                        msi_attrs[count] = &msi_dev_attr->attr;
 504
 505                        sysfs_attr_init(&msi_dev_attr->attr);
 506                        msi_dev_attr->attr.name = kasprintf(GFP_KERNEL, "%d",
 507                                                            entry->irq + i);
 508                        if (!msi_dev_attr->attr.name)
 509                                goto error_attrs;
 510                        msi_dev_attr->attr.mode = S_IRUGO;
 511                        msi_dev_attr->show = msi_mode_show;
 512                        ++count;
 513                }
 514        }
 515
 516        msi_irq_group = kzalloc(sizeof(*msi_irq_group), GFP_KERNEL);
 517        if (!msi_irq_group)
 518                goto error_attrs;
 519        msi_irq_group->name = "msi_irqs";
 520        msi_irq_group->attrs = msi_attrs;
 521
 522        msi_irq_groups = kzalloc(sizeof(void *) * 2, GFP_KERNEL);
 523        if (!msi_irq_groups)
 524                goto error_irq_group;
 525        msi_irq_groups[0] = msi_irq_group;
 526
 527        ret = sysfs_create_groups(&pdev->dev.kobj, msi_irq_groups);
 528        if (ret)
 529                goto error_irq_groups;
 530        pdev->msi_irq_groups = msi_irq_groups;
 531
 532        return 0;
 533
 534error_irq_groups:
 535        kfree(msi_irq_groups);
 536error_irq_group:
 537        kfree(msi_irq_group);
 538error_attrs:
 539        count = 0;
 540        msi_attr = msi_attrs[count];
 541        while (msi_attr) {
 542                msi_dev_attr = container_of(msi_attr, struct device_attribute, attr);
 543                kfree(msi_attr->name);
 544                kfree(msi_dev_attr);
 545                ++count;
 546                msi_attr = msi_attrs[count];
 547        }
 548        kfree(msi_attrs);
 549        return ret;
 550}
 551
 552static struct msi_desc *msi_setup_entry(struct pci_dev *dev, int nvec)
 553{
 554        u16 control;
 555        struct msi_desc *entry;
 556
 557        /* MSI Entry Initialization */
 558        entry = alloc_msi_entry(&dev->dev);
 559        if (!entry)
 560                return NULL;
 561
 562        pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
 563
 564        entry->msi_attrib.is_msix       = 0;
 565        entry->msi_attrib.is_64         = !!(control & PCI_MSI_FLAGS_64BIT);
 566        entry->msi_attrib.entry_nr      = 0;
 567        entry->msi_attrib.maskbit       = !!(control & PCI_MSI_FLAGS_MASKBIT);
 568        entry->msi_attrib.default_irq   = dev->irq;     /* Save IOAPIC IRQ */
 569        entry->msi_attrib.multi_cap     = (control & PCI_MSI_FLAGS_QMASK) >> 1;
 570        entry->msi_attrib.multiple      = ilog2(__roundup_pow_of_two(nvec));
 571        entry->nvec_used                = nvec;
 572        entry->affinity                 = dev->irq_affinity;
 573
 574        if (control & PCI_MSI_FLAGS_64BIT)
 575                entry->mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
 576        else
 577                entry->mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
 578
 579        /* Save the initial mask status */
 580        if (entry->msi_attrib.maskbit)
 581                pci_read_config_dword(dev, entry->mask_pos, &entry->masked);
 582
 583        return entry;
 584}
 585
 586static int msi_verify_entries(struct pci_dev *dev)
 587{
 588        struct msi_desc *entry;
 589
 590        for_each_pci_msi_entry(entry, dev) {
 591                if (!dev->no_64bit_msi || !entry->msg.address_hi)
 592                        continue;
 593                dev_err(&dev->dev, "Device has broken 64-bit MSI but arch"
 594                        " tried to assign one above 4G\n");
 595                return -EIO;
 596        }
 597        return 0;
 598}
 599
 600/**
 601 * msi_capability_init - configure device's MSI capability structure
 602 * @dev: pointer to the pci_dev data structure of MSI device function
 603 * @nvec: number of interrupts to allocate
 604 *
 605 * Setup the MSI capability structure of the device with the requested
 606 * number of interrupts.  A return value of zero indicates the successful
 607 * setup of an entry with the new MSI irq.  A negative return value indicates
 608 * an error, and a positive return value indicates the number of interrupts
 609 * which could have been allocated.
 610 */
 611static int msi_capability_init(struct pci_dev *dev, int nvec)
 612{
 613        struct msi_desc *entry;
 614        int ret;
 615        unsigned mask;
 616
 617        pci_msi_set_enable(dev, 0);     /* Disable MSI during set up */
 618
 619        entry = msi_setup_entry(dev, nvec);
 620        if (!entry)
 621                return -ENOMEM;
 622
 623        /* All MSIs are unmasked by default, Mask them all */
 624        mask = msi_mask(entry->msi_attrib.multi_cap);
 625        msi_mask_irq(entry, mask, mask);
 626
 627        list_add_tail(&entry->list, dev_to_msi_list(&dev->dev));
 628
 629        /* Configure MSI capability structure */
 630        ret = pci_msi_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSI);
 631        if (ret) {
 632                msi_mask_irq(entry, mask, ~mask);
 633                free_msi_irqs(dev);
 634                return ret;
 635        }
 636
 637        ret = msi_verify_entries(dev);
 638        if (ret) {
 639                msi_mask_irq(entry, mask, ~mask);
 640                free_msi_irqs(dev);
 641                return ret;
 642        }
 643
 644        ret = populate_msi_sysfs(dev);
 645        if (ret) {
 646                msi_mask_irq(entry, mask, ~mask);
 647                free_msi_irqs(dev);
 648                return ret;
 649        }
 650
 651        /* Set MSI enabled bits  */
 652        pci_intx_for_msi(dev, 0);
 653        pci_msi_set_enable(dev, 1);
 654        dev->msi_enabled = 1;
 655
 656        pcibios_free_irq(dev);
 657        dev->irq = entry->irq;
 658        return 0;
 659}
 660
 661static void __iomem *msix_map_region(struct pci_dev *dev, unsigned nr_entries)
 662{
 663        resource_size_t phys_addr;
 664        u32 table_offset;
 665        unsigned long flags;
 666        u8 bir;
 667
 668        pci_read_config_dword(dev, dev->msix_cap + PCI_MSIX_TABLE,
 669                              &table_offset);
 670        bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR);
 671        flags = pci_resource_flags(dev, bir);
 672        if (!flags || (flags & IORESOURCE_UNSET))
 673                return NULL;
 674
 675        table_offset &= PCI_MSIX_TABLE_OFFSET;
 676        phys_addr = pci_resource_start(dev, bir) + table_offset;
 677
 678        return ioremap_nocache(phys_addr, nr_entries * PCI_MSIX_ENTRY_SIZE);
 679}
 680
 681static int msix_setup_entries(struct pci_dev *dev, void __iomem *base,
 682                              struct msix_entry *entries, int nvec)
 683{
 684        const struct cpumask *mask = NULL;
 685        struct msi_desc *entry;
 686        int cpu = -1, i;
 687
 688        for (i = 0; i < nvec; i++) {
 689                if (dev->irq_affinity) {
 690                        cpu = cpumask_next(cpu, dev->irq_affinity);
 691                        if (cpu >= nr_cpu_ids)
 692                                cpu = cpumask_first(dev->irq_affinity);
 693                        mask = cpumask_of(cpu);
 694                }
 695
 696                entry = alloc_msi_entry(&dev->dev);
 697                if (!entry) {
 698                        if (!i)
 699                                iounmap(base);
 700                        else
 701                                free_msi_irqs(dev);
 702                        /* No enough memory. Don't try again */
 703                        return -ENOMEM;
 704                }
 705
 706                entry->msi_attrib.is_msix       = 1;
 707                entry->msi_attrib.is_64         = 1;
 708                if (entries)
 709                        entry->msi_attrib.entry_nr = entries[i].entry;
 710                else
 711                        entry->msi_attrib.entry_nr = i;
 712                entry->msi_attrib.default_irq   = dev->irq;
 713                entry->mask_base                = base;
 714                entry->nvec_used                = 1;
 715                entry->affinity                 = mask;
 716
 717                list_add_tail(&entry->list, dev_to_msi_list(&dev->dev));
 718        }
 719
 720        return 0;
 721}
 722
 723static void msix_program_entries(struct pci_dev *dev,
 724                                 struct msix_entry *entries)
 725{
 726        struct msi_desc *entry;
 727        int i = 0;
 728
 729        for_each_pci_msi_entry(entry, dev) {
 730                if (entries)
 731                        entries[i++].vector = entry->irq;
 732                entry->masked = readl(pci_msix_desc_addr(entry) +
 733                                PCI_MSIX_ENTRY_VECTOR_CTRL);
 734                msix_mask_irq(entry, 1);
 735        }
 736}
 737
 738/**
 739 * msix_capability_init - configure device's MSI-X capability
 740 * @dev: pointer to the pci_dev data structure of MSI-X device function
 741 * @entries: pointer to an array of struct msix_entry entries
 742 * @nvec: number of @entries
 743 *
 744 * Setup the MSI-X capability structure of device function with a
 745 * single MSI-X irq. A return of zero indicates the successful setup of
 746 * requested MSI-X entries with allocated irqs or non-zero for otherwise.
 747 **/
 748static int msix_capability_init(struct pci_dev *dev,
 749                                struct msix_entry *entries, int nvec)
 750{
 751        int ret;
 752        u16 control;
 753        void __iomem *base;
 754
 755        /* Ensure MSI-X is disabled while it is set up */
 756        pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
 757
 758        pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &control);
 759        /* Request & Map MSI-X table region */
 760        base = msix_map_region(dev, msix_table_size(control));
 761        if (!base)
 762                return -ENOMEM;
 763
 764        ret = msix_setup_entries(dev, base, entries, nvec);
 765        if (ret)
 766                return ret;
 767
 768        ret = pci_msi_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSIX);
 769        if (ret)
 770                goto out_avail;
 771
 772        /* Check if all MSI entries honor device restrictions */
 773        ret = msi_verify_entries(dev);
 774        if (ret)
 775                goto out_free;
 776
 777        /*
 778         * Some devices require MSI-X to be enabled before we can touch the
 779         * MSI-X registers.  We need to mask all the vectors to prevent
 780         * interrupts coming in before they're fully set up.
 781         */
 782        pci_msix_clear_and_set_ctrl(dev, 0,
 783                                PCI_MSIX_FLAGS_MASKALL | PCI_MSIX_FLAGS_ENABLE);
 784
 785        msix_program_entries(dev, entries);
 786
 787        ret = populate_msi_sysfs(dev);
 788        if (ret)
 789                goto out_free;
 790
 791        /* Set MSI-X enabled bits and unmask the function */
 792        pci_intx_for_msi(dev, 0);
 793        dev->msix_enabled = 1;
 794        pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
 795
 796        pcibios_free_irq(dev);
 797        return 0;
 798
 799out_avail:
 800        if (ret < 0) {
 801                /*
 802                 * If we had some success, report the number of irqs
 803                 * we succeeded in setting up.
 804                 */
 805                struct msi_desc *entry;
 806                int avail = 0;
 807
 808                for_each_pci_msi_entry(entry, dev) {
 809                        if (entry->irq != 0)
 810                                avail++;
 811                }
 812                if (avail != 0)
 813                        ret = avail;
 814        }
 815
 816out_free:
 817        free_msi_irqs(dev);
 818
 819        return ret;
 820}
 821
 822/**
 823 * pci_msi_supported - check whether MSI may be enabled on a device
 824 * @dev: pointer to the pci_dev data structure of MSI device function
 825 * @nvec: how many MSIs have been requested ?
 826 *
 827 * Look at global flags, the device itself, and its parent buses
 828 * to determine if MSI/-X are supported for the device. If MSI/-X is
 829 * supported return 1, else return 0.
 830 **/
 831static int pci_msi_supported(struct pci_dev *dev, int nvec)
 832{
 833        struct pci_bus *bus;
 834
 835        /* MSI must be globally enabled and supported by the device */
 836        if (!pci_msi_enable)
 837                return 0;
 838
 839        if (!dev || dev->no_msi || dev->current_state != PCI_D0)
 840                return 0;
 841
 842        /*
 843         * You can't ask to have 0 or less MSIs configured.
 844         *  a) it's stupid ..
 845         *  b) the list manipulation code assumes nvec >= 1.
 846         */
 847        if (nvec < 1)
 848                return 0;
 849
 850        /*
 851         * Any bridge which does NOT route MSI transactions from its
 852         * secondary bus to its primary bus must set NO_MSI flag on
 853         * the secondary pci_bus.
 854         * We expect only arch-specific PCI host bus controller driver
 855         * or quirks for specific PCI bridges to be setting NO_MSI.
 856         */
 857        for (bus = dev->bus; bus; bus = bus->parent)
 858                if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
 859                        return 0;
 860
 861        return 1;
 862}
 863
 864/**
 865 * pci_msi_vec_count - Return the number of MSI vectors a device can send
 866 * @dev: device to report about
 867 *
 868 * This function returns the number of MSI vectors a device requested via
 869 * Multiple Message Capable register. It returns a negative errno if the
 870 * device is not capable sending MSI interrupts. Otherwise, the call succeeds
 871 * and returns a power of two, up to a maximum of 2^5 (32), according to the
 872 * MSI specification.
 873 **/
 874int pci_msi_vec_count(struct pci_dev *dev)
 875{
 876        int ret;
 877        u16 msgctl;
 878
 879        if (!dev->msi_cap)
 880                return -EINVAL;
 881
 882        pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl);
 883        ret = 1 << ((msgctl & PCI_MSI_FLAGS_QMASK) >> 1);
 884
 885        return ret;
 886}
 887EXPORT_SYMBOL(pci_msi_vec_count);
 888
 889void pci_msi_shutdown(struct pci_dev *dev)
 890{
 891        struct msi_desc *desc;
 892        u32 mask;
 893
 894        if (!pci_msi_enable || !dev || !dev->msi_enabled)
 895                return;
 896
 897        BUG_ON(list_empty(dev_to_msi_list(&dev->dev)));
 898        desc = first_pci_msi_entry(dev);
 899
 900        pci_msi_set_enable(dev, 0);
 901        pci_intx_for_msi(dev, 1);
 902        dev->msi_enabled = 0;
 903
 904        /* Return the device with MSI unmasked as initial states */
 905        mask = msi_mask(desc->msi_attrib.multi_cap);
 906        /* Keep cached state to be restored */
 907        __pci_msi_desc_mask_irq(desc, mask, ~mask);
 908
 909        /* Restore dev->irq to its default pin-assertion irq */
 910        dev->irq = desc->msi_attrib.default_irq;
 911        pcibios_alloc_irq(dev);
 912}
 913
 914void pci_disable_msi(struct pci_dev *dev)
 915{
 916        if (!pci_msi_enable || !dev || !dev->msi_enabled)
 917                return;
 918
 919        pci_msi_shutdown(dev);
 920        free_msi_irqs(dev);
 921}
 922EXPORT_SYMBOL(pci_disable_msi);
 923
 924/**
 925 * pci_msix_vec_count - return the number of device's MSI-X table entries
 926 * @dev: pointer to the pci_dev data structure of MSI-X device function
 927 * This function returns the number of device's MSI-X table entries and
 928 * therefore the number of MSI-X vectors device is capable of sending.
 929 * It returns a negative errno if the device is not capable of sending MSI-X
 930 * interrupts.
 931 **/
 932int pci_msix_vec_count(struct pci_dev *dev)
 933{
 934        u16 control;
 935
 936        if (!dev->msix_cap)
 937                return -EINVAL;
 938
 939        pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &control);
 940        return msix_table_size(control);
 941}
 942EXPORT_SYMBOL(pci_msix_vec_count);
 943
 944/**
 945 * pci_enable_msix - configure device's MSI-X capability structure
 946 * @dev: pointer to the pci_dev data structure of MSI-X device function
 947 * @entries: pointer to an array of MSI-X entries (optional)
 948 * @nvec: number of MSI-X irqs requested for allocation by device driver
 949 *
 950 * Setup the MSI-X capability structure of device function with the number
 951 * of requested irqs upon its software driver call to request for
 952 * MSI-X mode enabled on its hardware device function. A return of zero
 953 * indicates the successful configuration of MSI-X capability structure
 954 * with new allocated MSI-X irqs. A return of < 0 indicates a failure.
 955 * Or a return of > 0 indicates that driver request is exceeding the number
 956 * of irqs or MSI-X vectors available. Driver should use the returned value to
 957 * re-send its request.
 958 **/
 959int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec)
 960{
 961        int nr_entries;
 962        int i, j;
 963
 964        if (!pci_msi_supported(dev, nvec))
 965                return -EINVAL;
 966
 967        nr_entries = pci_msix_vec_count(dev);
 968        if (nr_entries < 0)
 969                return nr_entries;
 970        if (nvec > nr_entries)
 971                return nr_entries;
 972
 973        if (entries) {
 974                /* Check for any invalid entries */
 975                for (i = 0; i < nvec; i++) {
 976                        if (entries[i].entry >= nr_entries)
 977                                return -EINVAL;         /* invalid entry */
 978                        for (j = i + 1; j < nvec; j++) {
 979                                if (entries[i].entry == entries[j].entry)
 980                                        return -EINVAL; /* duplicate entry */
 981                        }
 982                }
 983        }
 984        WARN_ON(!!dev->msix_enabled);
 985
 986        /* Check whether driver already requested for MSI irq */
 987        if (dev->msi_enabled) {
 988                dev_info(&dev->dev, "can't enable MSI-X (MSI IRQ already assigned)\n");
 989                return -EINVAL;
 990        }
 991        return msix_capability_init(dev, entries, nvec);
 992}
 993EXPORT_SYMBOL(pci_enable_msix);
 994
 995void pci_msix_shutdown(struct pci_dev *dev)
 996{
 997        struct msi_desc *entry;
 998
 999        if (!pci_msi_enable || !dev || !dev->msix_enabled)
1000                return;
1001
1002        /* Return the device with MSI-X masked as initial states */
1003        for_each_pci_msi_entry(entry, dev) {
1004                /* Keep cached states to be restored */
1005                __pci_msix_desc_mask_irq(entry, 1);
1006        }
1007
1008        pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
1009        pci_intx_for_msi(dev, 1);
1010        dev->msix_enabled = 0;
1011        pcibios_alloc_irq(dev);
1012}
1013
1014void pci_disable_msix(struct pci_dev *dev)
1015{
1016        if (!pci_msi_enable || !dev || !dev->msix_enabled)
1017                return;
1018
1019        pci_msix_shutdown(dev);
1020        free_msi_irqs(dev);
1021}
1022EXPORT_SYMBOL(pci_disable_msix);
1023
1024void pci_no_msi(void)
1025{
1026        pci_msi_enable = 0;
1027}
1028
1029/**
1030 * pci_msi_enabled - is MSI enabled?
1031 *
1032 * Returns true if MSI has not been disabled by the command-line option
1033 * pci=nomsi.
1034 **/
1035int pci_msi_enabled(void)
1036{
1037        return pci_msi_enable;
1038}
1039EXPORT_SYMBOL(pci_msi_enabled);
1040
1041static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
1042                unsigned int flags)
1043{
1044        int nvec;
1045        int rc;
1046
1047        if (!pci_msi_supported(dev, minvec))
1048                return -EINVAL;
1049
1050        WARN_ON(!!dev->msi_enabled);
1051
1052        /* Check whether driver already requested MSI-X irqs */
1053        if (dev->msix_enabled) {
1054                dev_info(&dev->dev,
1055                         "can't enable MSI (MSI-X already enabled)\n");
1056                return -EINVAL;
1057        }
1058
1059        if (maxvec < minvec)
1060                return -ERANGE;
1061
1062        nvec = pci_msi_vec_count(dev);
1063        if (nvec < 0)
1064                return nvec;
1065        if (nvec < minvec)
1066                return -EINVAL;
1067
1068        if (nvec > maxvec)
1069                nvec = maxvec;
1070
1071        for (;;) {
1072                if (flags & PCI_IRQ_AFFINITY) {
1073                        dev->irq_affinity = irq_create_affinity_mask(&nvec);
1074                        if (nvec < minvec)
1075                                return -ENOSPC;
1076                }
1077
1078                rc = msi_capability_init(dev, nvec);
1079                if (rc == 0)
1080                        return nvec;
1081
1082                kfree(dev->irq_affinity);
1083                dev->irq_affinity = NULL;
1084
1085                if (rc < 0)
1086                        return rc;
1087                if (rc < minvec)
1088                        return -ENOSPC;
1089
1090                nvec = rc;
1091        }
1092}
1093
1094/**
1095 * pci_enable_msi_range - configure device's MSI capability structure
1096 * @dev: device to configure
1097 * @minvec: minimal number of interrupts to configure
1098 * @maxvec: maximum number of interrupts to configure
1099 *
1100 * This function tries to allocate a maximum possible number of interrupts in a
1101 * range between @minvec and @maxvec. It returns a negative errno if an error
1102 * occurs. If it succeeds, it returns the actual number of interrupts allocated
1103 * and updates the @dev's irq member to the lowest new interrupt number;
1104 * the other interrupt numbers allocated to this device are consecutive.
1105 **/
1106int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec)
1107{
1108        return __pci_enable_msi_range(dev, minvec, maxvec, 0);
1109}
1110EXPORT_SYMBOL(pci_enable_msi_range);
1111
1112static int __pci_enable_msix_range(struct pci_dev *dev,
1113                struct msix_entry *entries, int minvec, int maxvec,
1114                unsigned int flags)
1115{
1116        int nvec = maxvec;
1117        int rc;
1118
1119        if (maxvec < minvec)
1120                return -ERANGE;
1121
1122        for (;;) {
1123                if (flags & PCI_IRQ_AFFINITY) {
1124                        dev->irq_affinity = irq_create_affinity_mask(&nvec);
1125                        if (nvec < minvec)
1126                                return -ENOSPC;
1127                }
1128
1129                rc = pci_enable_msix(dev, entries, nvec);
1130                if (rc == 0)
1131                        return nvec;
1132
1133                kfree(dev->irq_affinity);
1134                dev->irq_affinity = NULL;
1135
1136                if (rc < 0)
1137                        return rc;
1138                if (rc < minvec)
1139                        return -ENOSPC;
1140
1141                nvec = rc;
1142        }
1143}
1144
1145/**
1146 * pci_enable_msix_range - configure device's MSI-X capability structure
1147 * @dev: pointer to the pci_dev data structure of MSI-X device function
1148 * @entries: pointer to an array of MSI-X entries
1149 * @minvec: minimum number of MSI-X irqs requested
1150 * @maxvec: maximum number of MSI-X irqs requested
1151 *
1152 * Setup the MSI-X capability structure of device function with a maximum
1153 * possible number of interrupts in the range between @minvec and @maxvec
1154 * upon its software driver call to request for MSI-X mode enabled on its
1155 * hardware device function. It returns a negative errno if an error occurs.
1156 * If it succeeds, it returns the actual number of interrupts allocated and
1157 * indicates the successful configuration of MSI-X capability structure
1158 * with new allocated MSI-X interrupts.
1159 **/
1160int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
1161                int minvec, int maxvec)
1162{
1163        return __pci_enable_msix_range(dev, entries, minvec, maxvec, 0);
1164}
1165EXPORT_SYMBOL(pci_enable_msix_range);
1166
1167/**
1168 * pci_alloc_irq_vectors - allocate multiple IRQs for a device
1169 * @dev:                PCI device to operate on
1170 * @min_vecs:           minimum number of vectors required (must be >= 1)
1171 * @max_vecs:           maximum (desired) number of vectors
1172 * @flags:              flags or quirks for the allocation
1173 *
1174 * Allocate up to @max_vecs interrupt vectors for @dev, using MSI-X or MSI
1175 * vectors if available, and fall back to a single legacy vector
1176 * if neither is available.  Return the number of vectors allocated,
1177 * (which might be smaller than @max_vecs) if successful, or a negative
1178 * error code on error. If less than @min_vecs interrupt vectors are
1179 * available for @dev the function will fail with -ENOSPC.
1180 *
1181 * To get the Linux IRQ number used for a vector that can be passed to
1182 * request_irq() use the pci_irq_vector() helper.
1183 */
1184int pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
1185                unsigned int max_vecs, unsigned int flags)
1186{
1187        int vecs = -ENOSPC;
1188
1189        if (flags & PCI_IRQ_MSIX) {
1190                vecs = __pci_enable_msix_range(dev, NULL, min_vecs, max_vecs,
1191                                flags);
1192                if (vecs > 0)
1193                        return vecs;
1194        }
1195
1196        if (flags & PCI_IRQ_MSI) {
1197                vecs = __pci_enable_msi_range(dev, min_vecs, max_vecs, flags);
1198                if (vecs > 0)
1199                        return vecs;
1200        }
1201
1202        /* use legacy irq if allowed */
1203        if ((flags & PCI_IRQ_LEGACY) && min_vecs == 1) {
1204                pci_intx(dev, 1);
1205                return 1;
1206        }
1207
1208        return vecs;
1209}
1210EXPORT_SYMBOL(pci_alloc_irq_vectors);
1211
1212/**
1213 * pci_free_irq_vectors - free previously allocated IRQs for a device
1214 * @dev:                PCI device to operate on
1215 *
1216 * Undoes the allocations and enabling in pci_alloc_irq_vectors().
1217 */
1218void pci_free_irq_vectors(struct pci_dev *dev)
1219{
1220        pci_disable_msix(dev);
1221        pci_disable_msi(dev);
1222}
1223EXPORT_SYMBOL(pci_free_irq_vectors);
1224
1225/**
1226 * pci_irq_vector - return Linux IRQ number of a device vector
1227 * @dev: PCI device to operate on
1228 * @nr: device-relative interrupt vector index (0-based).
1229 */
1230int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
1231{
1232        if (dev->msix_enabled) {
1233                struct msi_desc *entry;
1234                int i = 0;
1235
1236                for_each_pci_msi_entry(entry, dev) {
1237                        if (i == nr)
1238                                return entry->irq;
1239                        i++;
1240                }
1241                WARN_ON_ONCE(1);
1242                return -EINVAL;
1243        }
1244
1245        if (dev->msi_enabled) {
1246                struct msi_desc *entry = first_pci_msi_entry(dev);
1247
1248                if (WARN_ON_ONCE(nr >= entry->nvec_used))
1249                        return -EINVAL;
1250        } else {
1251                if (WARN_ON_ONCE(nr > 0))
1252                        return -EINVAL;
1253        }
1254
1255        return dev->irq + nr;
1256}
1257EXPORT_SYMBOL(pci_irq_vector);
1258
1259struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc)
1260{
1261        return to_pci_dev(desc->dev);
1262}
1263EXPORT_SYMBOL(msi_desc_to_pci_dev);
1264
1265void *msi_desc_to_pci_sysdata(struct msi_desc *desc)
1266{
1267        struct pci_dev *dev = msi_desc_to_pci_dev(desc);
1268
1269        return dev->bus->sysdata;
1270}
1271EXPORT_SYMBOL_GPL(msi_desc_to_pci_sysdata);
1272
1273#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
1274/**
1275 * pci_msi_domain_write_msg - Helper to write MSI message to PCI config space
1276 * @irq_data:   Pointer to interrupt data of the MSI interrupt
1277 * @msg:        Pointer to the message
1278 */
1279void pci_msi_domain_write_msg(struct irq_data *irq_data, struct msi_msg *msg)
1280{
1281        struct msi_desc *desc = irq_data_get_msi_desc(irq_data);
1282
1283        /*
1284         * For MSI-X desc->irq is always equal to irq_data->irq. For
1285         * MSI only the first interrupt of MULTI MSI passes the test.
1286         */
1287        if (desc->irq == irq_data->irq)
1288                __pci_write_msi_msg(desc, msg);
1289}
1290
1291/**
1292 * pci_msi_domain_calc_hwirq - Generate a unique ID for an MSI source
1293 * @dev:        Pointer to the PCI device
1294 * @desc:       Pointer to the msi descriptor
1295 *
1296 * The ID number is only used within the irqdomain.
1297 */
1298irq_hw_number_t pci_msi_domain_calc_hwirq(struct pci_dev *dev,
1299                                          struct msi_desc *desc)
1300{
1301        return (irq_hw_number_t)desc->msi_attrib.entry_nr |
1302                PCI_DEVID(dev->bus->number, dev->devfn) << 11 |
1303                (pci_domain_nr(dev->bus) & 0xFFFFFFFF) << 27;
1304}
1305
1306static inline bool pci_msi_desc_is_multi_msi(struct msi_desc *desc)
1307{
1308        return !desc->msi_attrib.is_msix && desc->nvec_used > 1;
1309}
1310
1311/**
1312 * pci_msi_domain_check_cap - Verify that @domain supports the capabilities for @dev
1313 * @domain:     The interrupt domain to check
1314 * @info:       The domain info for verification
1315 * @dev:        The device to check
1316 *
1317 * Returns:
1318 *  0 if the functionality is supported
1319 *  1 if Multi MSI is requested, but the domain does not support it
1320 *  -ENOTSUPP otherwise
1321 */
1322int pci_msi_domain_check_cap(struct irq_domain *domain,
1323                             struct msi_domain_info *info, struct device *dev)
1324{
1325        struct msi_desc *desc = first_pci_msi_entry(to_pci_dev(dev));
1326
1327        /* Special handling to support pci_enable_msi_range() */
1328        if (pci_msi_desc_is_multi_msi(desc) &&
1329            !(info->flags & MSI_FLAG_MULTI_PCI_MSI))
1330                return 1;
1331        else if (desc->msi_attrib.is_msix && !(info->flags & MSI_FLAG_PCI_MSIX))
1332                return -ENOTSUPP;
1333
1334        return 0;
1335}
1336
1337static int pci_msi_domain_handle_error(struct irq_domain *domain,
1338                                       struct msi_desc *desc, int error)
1339{
1340        /* Special handling to support pci_enable_msi_range() */
1341        if (pci_msi_desc_is_multi_msi(desc) && error == -ENOSPC)
1342                return 1;
1343
1344        return error;
1345}
1346
1347#ifdef GENERIC_MSI_DOMAIN_OPS
1348static void pci_msi_domain_set_desc(msi_alloc_info_t *arg,
1349                                    struct msi_desc *desc)
1350{
1351        arg->desc = desc;
1352        arg->hwirq = pci_msi_domain_calc_hwirq(msi_desc_to_pci_dev(desc),
1353                                               desc);
1354}
1355#else
1356#define pci_msi_domain_set_desc         NULL
1357#endif
1358
1359static struct msi_domain_ops pci_msi_domain_ops_default = {
1360        .set_desc       = pci_msi_domain_set_desc,
1361        .msi_check      = pci_msi_domain_check_cap,
1362        .handle_error   = pci_msi_domain_handle_error,
1363};
1364
1365static void pci_msi_domain_update_dom_ops(struct msi_domain_info *info)
1366{
1367        struct msi_domain_ops *ops = info->ops;
1368
1369        if (ops == NULL) {
1370                info->ops = &pci_msi_domain_ops_default;
1371        } else {
1372                if (ops->set_desc == NULL)
1373                        ops->set_desc = pci_msi_domain_set_desc;
1374                if (ops->msi_check == NULL)
1375                        ops->msi_check = pci_msi_domain_check_cap;
1376                if (ops->handle_error == NULL)
1377                        ops->handle_error = pci_msi_domain_handle_error;
1378        }
1379}
1380
1381static void pci_msi_domain_update_chip_ops(struct msi_domain_info *info)
1382{
1383        struct irq_chip *chip = info->chip;
1384
1385        BUG_ON(!chip);
1386        if (!chip->irq_write_msi_msg)
1387                chip->irq_write_msi_msg = pci_msi_domain_write_msg;
1388        if (!chip->irq_mask)
1389                chip->irq_mask = pci_msi_mask_irq;
1390        if (!chip->irq_unmask)
1391                chip->irq_unmask = pci_msi_unmask_irq;
1392}
1393
1394/**
1395 * pci_msi_create_irq_domain - Create a MSI interrupt domain
1396 * @fwnode:     Optional fwnode of the interrupt controller
1397 * @info:       MSI domain info
1398 * @parent:     Parent irq domain
1399 *
1400 * Updates the domain and chip ops and creates a MSI interrupt domain.
1401 *
1402 * Returns:
1403 * A domain pointer or NULL in case of failure.
1404 */
1405struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
1406                                             struct msi_domain_info *info,
1407                                             struct irq_domain *parent)
1408{
1409        struct irq_domain *domain;
1410
1411        if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS)
1412                pci_msi_domain_update_dom_ops(info);
1413        if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
1414                pci_msi_domain_update_chip_ops(info);
1415
1416        info->flags |= MSI_FLAG_ACTIVATE_EARLY;
1417
1418        domain = msi_create_irq_domain(fwnode, info, parent);
1419        if (!domain)
1420                return NULL;
1421
1422        domain->bus_token = DOMAIN_BUS_PCI_MSI;
1423        return domain;
1424}
1425EXPORT_SYMBOL_GPL(pci_msi_create_irq_domain);
1426
1427/**
1428 * pci_msi_domain_alloc_irqs - Allocate interrupts for @dev in @domain
1429 * @domain:     The interrupt domain to allocate from
1430 * @dev:        The device for which to allocate
1431 * @nvec:       The number of interrupts to allocate
1432 * @type:       Unused to allow simpler migration from the arch_XXX interfaces
1433 *
1434 * Returns:
1435 * A virtual interrupt number or an error code in case of failure
1436 */
1437int pci_msi_domain_alloc_irqs(struct irq_domain *domain, struct pci_dev *dev,
1438                              int nvec, int type)
1439{
1440        return msi_domain_alloc_irqs(domain, &dev->dev, nvec);
1441}
1442
1443/**
1444 * pci_msi_domain_free_irqs - Free interrupts for @dev in @domain
1445 * @domain:     The interrupt domain
1446 * @dev:        The device for which to free interrupts
1447 */
1448void pci_msi_domain_free_irqs(struct irq_domain *domain, struct pci_dev *dev)
1449{
1450        msi_domain_free_irqs(domain, &dev->dev);
1451}
1452
1453/**
1454 * pci_msi_create_default_irq_domain - Create a default MSI interrupt domain
1455 * @fwnode:     Optional fwnode of the interrupt controller
1456 * @info:       MSI domain info
1457 * @parent:     Parent irq domain
1458 *
1459 * Returns: A domain pointer or NULL in case of failure. If successful
1460 * the default PCI/MSI irqdomain pointer is updated.
1461 */
1462struct irq_domain *pci_msi_create_default_irq_domain(struct fwnode_handle *fwnode,
1463                struct msi_domain_info *info, struct irq_domain *parent)
1464{
1465        struct irq_domain *domain;
1466
1467        mutex_lock(&pci_msi_domain_lock);
1468        if (pci_msi_default_domain) {
1469                pr_err("PCI: default irq domain for PCI MSI has already been created.\n");
1470                domain = NULL;
1471        } else {
1472                domain = pci_msi_create_irq_domain(fwnode, info, parent);
1473                pci_msi_default_domain = domain;
1474        }
1475        mutex_unlock(&pci_msi_domain_lock);
1476
1477        return domain;
1478}
1479
1480static int get_msi_id_cb(struct pci_dev *pdev, u16 alias, void *data)
1481{
1482        u32 *pa = data;
1483
1484        *pa = alias;
1485        return 0;
1486}
1487/**
1488 * pci_msi_domain_get_msi_rid - Get the MSI requester id (RID)
1489 * @domain:     The interrupt domain
1490 * @pdev:       The PCI device.
1491 *
1492 * The RID for a device is formed from the alias, with a firmware
1493 * supplied mapping applied
1494 *
1495 * Returns: The RID.
1496 */
1497u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev)
1498{
1499        struct device_node *of_node;
1500        u32 rid = 0;
1501
1502        pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid);
1503
1504        of_node = irq_domain_get_of_node(domain);
1505        if (of_node)
1506                rid = of_msi_map_rid(&pdev->dev, of_node, rid);
1507
1508        return rid;
1509}
1510
1511/**
1512 * pci_msi_get_device_domain - Get the MSI domain for a given PCI device
1513 * @pdev:       The PCI device
1514 *
1515 * Use the firmware data to find a device-specific MSI domain
1516 * (i.e. not one that is ste as a default).
1517 *
1518 * Returns: The coresponding MSI domain or NULL if none has been found.
1519 */
1520struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
1521{
1522        u32 rid = 0;
1523
1524        pci_for_each_dma_alias(pdev, get_msi_id_cb, &rid);
1525        return of_msi_map_get_device_domain(&pdev->dev, rid);
1526}
1527#endif /* CONFIG_PCI_MSI_IRQ_DOMAIN */
1528