]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/pci/msi.c
PCI/MSI: Add weak pcibios_msi_controller()
[karo-tx-linux.git] / drivers / pci / msi.c
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  */
8
9 #include <linux/err.h>
10 #include <linux/mm.h>
11 #include <linux/irq.h>
12 #include <linux/interrupt.h>
13 #include <linux/export.h>
14 #include <linux/ioport.h>
15 #include <linux/pci.h>
16 #include <linux/proc_fs.h>
17 #include <linux/msi.h>
18 #include <linux/smp.h>
19 #include <linux/errno.h>
20 #include <linux/io.h>
21 #include <linux/slab.h>
22
23 #include "pci.h"
24
25 static int pci_msi_enable = 1;
26 int pci_msi_ignore_mask;
27
28 #define msix_table_size(flags)  ((flags & PCI_MSIX_FLAGS_QSIZE) + 1)
29
30
31 /* Arch hooks */
32
33 struct msi_controller * __weak pcibios_msi_controller(struct pci_dev *dev)
34 {
35         return NULL;
36 }
37
38 static struct msi_controller *pci_msi_controller(struct pci_dev *dev)
39 {
40         struct msi_controller *msi_ctrl = dev->bus->msi;
41
42         if (msi_ctrl)
43                 return msi_ctrl;
44
45         return pcibios_msi_controller(dev);
46 }
47
48 int __weak arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
49 {
50         struct msi_controller *chip = pci_msi_controller(dev);
51         int err;
52
53         if (!chip || !chip->setup_irq)
54                 return -EINVAL;
55
56         err = chip->setup_irq(chip, dev, desc);
57         if (err < 0)
58                 return err;
59
60         irq_set_chip_data(desc->irq, chip);
61
62         return 0;
63 }
64
65 void __weak arch_teardown_msi_irq(unsigned int irq)
66 {
67         struct msi_controller *chip = irq_get_chip_data(irq);
68
69         if (!chip || !chip->teardown_irq)
70                 return;
71
72         chip->teardown_irq(chip, irq);
73 }
74
75 int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
76 {
77         struct msi_desc *entry;
78         int ret;
79
80         /*
81          * If an architecture wants to support multiple MSI, it needs to
82          * override arch_setup_msi_irqs()
83          */
84         if (type == PCI_CAP_ID_MSI && nvec > 1)
85                 return 1;
86
87         list_for_each_entry(entry, &dev->msi_list, list) {
88                 ret = arch_setup_msi_irq(dev, entry);
89                 if (ret < 0)
90                         return ret;
91                 if (ret > 0)
92                         return -ENOSPC;
93         }
94
95         return 0;
96 }
97
98 /*
99  * We have a default implementation available as a separate non-weak
100  * function, as it is used by the Xen x86 PCI code
101  */
102 void default_teardown_msi_irqs(struct pci_dev *dev)
103 {
104         struct msi_desc *entry;
105
106         list_for_each_entry(entry, &dev->msi_list, list) {
107                 int i, nvec;
108                 if (entry->irq == 0)
109                         continue;
110                 if (entry->nvec_used)
111                         nvec = entry->nvec_used;
112                 else
113                         nvec = 1 << entry->msi_attrib.multiple;
114                 for (i = 0; i < nvec; i++)
115                         arch_teardown_msi_irq(entry->irq + i);
116         }
117 }
118
119 void __weak arch_teardown_msi_irqs(struct pci_dev *dev)
120 {
121         return default_teardown_msi_irqs(dev);
122 }
123
124 static void default_restore_msi_irq(struct pci_dev *dev, int irq)
125 {
126         struct msi_desc *entry;
127
128         entry = NULL;
129         if (dev->msix_enabled) {
130                 list_for_each_entry(entry, &dev->msi_list, list) {
131                         if (irq == entry->irq)
132                                 break;
133                 }
134         } else if (dev->msi_enabled)  {
135                 entry = irq_get_msi_desc(irq);
136         }
137
138         if (entry)
139                 __write_msi_msg(entry, &entry->msg);
140 }
141
142 void __weak arch_restore_msi_irqs(struct pci_dev *dev)
143 {
144         return default_restore_msi_irqs(dev);
145 }
146
147 static void msi_set_enable(struct pci_dev *dev, int enable)
148 {
149         u16 control;
150
151         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
152         control &= ~PCI_MSI_FLAGS_ENABLE;
153         if (enable)
154                 control |= PCI_MSI_FLAGS_ENABLE;
155         pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
156 }
157
158 static void msix_clear_and_set_ctrl(struct pci_dev *dev, u16 clear, u16 set)
159 {
160         u16 ctrl;
161
162         pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &ctrl);
163         ctrl &= ~clear;
164         ctrl |= set;
165         pci_write_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, ctrl);
166 }
167
168 static inline __attribute_const__ u32 msi_mask(unsigned x)
169 {
170         /* Don't shift by >= width of type */
171         if (x >= 5)
172                 return 0xffffffff;
173         return (1 << (1 << x)) - 1;
174 }
175
176 /*
177  * PCI 2.3 does not specify mask bits for each MSI interrupt.  Attempting to
178  * mask all MSI interrupts by clearing the MSI enable bit does not work
179  * reliably as devices without an INTx disable bit will then generate a
180  * level IRQ which will never be cleared.
181  */
182 u32 __msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag)
183 {
184         u32 mask_bits = desc->masked;
185
186         if (pci_msi_ignore_mask || !desc->msi_attrib.maskbit)
187                 return 0;
188
189         mask_bits &= ~mask;
190         mask_bits |= flag;
191         pci_write_config_dword(desc->dev, desc->mask_pos, mask_bits);
192
193         return mask_bits;
194 }
195
196 static void msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag)
197 {
198         desc->masked = __msi_mask_irq(desc, mask, flag);
199 }
200
201 /*
202  * This internal function does not flush PCI writes to the device.
203  * All users must ensure that they read from the device before either
204  * assuming that the device state is up to date, or returning out of this
205  * file.  This saves a few milliseconds when initialising devices with lots
206  * of MSI-X interrupts.
207  */
208 u32 __msix_mask_irq(struct msi_desc *desc, u32 flag)
209 {
210         u32 mask_bits = desc->masked;
211         unsigned offset = desc->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE +
212                                                 PCI_MSIX_ENTRY_VECTOR_CTRL;
213
214         if (pci_msi_ignore_mask)
215                 return 0;
216
217         mask_bits &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT;
218         if (flag)
219                 mask_bits |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
220         writel(mask_bits, desc->mask_base + offset);
221
222         return mask_bits;
223 }
224
225 static void msix_mask_irq(struct msi_desc *desc, u32 flag)
226 {
227         desc->masked = __msix_mask_irq(desc, flag);
228 }
229
230 static void msi_set_mask_bit(struct irq_data *data, u32 flag)
231 {
232         struct msi_desc *desc = irq_data_get_msi(data);
233
234         if (desc->msi_attrib.is_msix) {
235                 msix_mask_irq(desc, flag);
236                 readl(desc->mask_base);         /* Flush write to device */
237         } else {
238                 unsigned offset = data->irq - desc->irq;
239                 msi_mask_irq(desc, 1 << offset, flag << offset);
240         }
241 }
242
243 void mask_msi_irq(struct irq_data *data)
244 {
245         msi_set_mask_bit(data, 1);
246 }
247
248 void unmask_msi_irq(struct irq_data *data)
249 {
250         msi_set_mask_bit(data, 0);
251 }
252
253 void default_restore_msi_irqs(struct pci_dev *dev)
254 {
255         struct msi_desc *entry;
256
257         list_for_each_entry(entry, &dev->msi_list, list) {
258                 default_restore_msi_irq(dev, entry->irq);
259         }
260 }
261
262 void __read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
263 {
264         BUG_ON(entry->dev->current_state != PCI_D0);
265
266         if (entry->msi_attrib.is_msix) {
267                 void __iomem *base = entry->mask_base +
268                         entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
269
270                 msg->address_lo = readl(base + PCI_MSIX_ENTRY_LOWER_ADDR);
271                 msg->address_hi = readl(base + PCI_MSIX_ENTRY_UPPER_ADDR);
272                 msg->data = readl(base + PCI_MSIX_ENTRY_DATA);
273         } else {
274                 struct pci_dev *dev = entry->dev;
275                 int pos = dev->msi_cap;
276                 u16 data;
277
278                 pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
279                                       &msg->address_lo);
280                 if (entry->msi_attrib.is_64) {
281                         pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
282                                               &msg->address_hi);
283                         pci_read_config_word(dev, pos + PCI_MSI_DATA_64, &data);
284                 } else {
285                         msg->address_hi = 0;
286                         pci_read_config_word(dev, pos + PCI_MSI_DATA_32, &data);
287                 }
288                 msg->data = data;
289         }
290 }
291
292 void read_msi_msg(unsigned int irq, struct msi_msg *msg)
293 {
294         struct msi_desc *entry = irq_get_msi_desc(irq);
295
296         __read_msi_msg(entry, msg);
297 }
298
299 void __get_cached_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
300 {
301         /* Assert that the cache is valid, assuming that
302          * valid messages are not all-zeroes. */
303         BUG_ON(!(entry->msg.address_hi | entry->msg.address_lo |
304                  entry->msg.data));
305
306         *msg = entry->msg;
307 }
308
309 void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg)
310 {
311         struct msi_desc *entry = irq_get_msi_desc(irq);
312
313         __get_cached_msi_msg(entry, msg);
314 }
315 EXPORT_SYMBOL_GPL(get_cached_msi_msg);
316
317 void __write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
318 {
319         if (entry->dev->current_state != PCI_D0) {
320                 /* Don't touch the hardware now */
321         } else if (entry->msi_attrib.is_msix) {
322                 void __iomem *base;
323                 base = entry->mask_base +
324                         entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
325
326                 writel(msg->address_lo, base + PCI_MSIX_ENTRY_LOWER_ADDR);
327                 writel(msg->address_hi, base + PCI_MSIX_ENTRY_UPPER_ADDR);
328                 writel(msg->data, base + PCI_MSIX_ENTRY_DATA);
329         } else {
330                 struct pci_dev *dev = entry->dev;
331                 int pos = dev->msi_cap;
332                 u16 msgctl;
333
334                 pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &msgctl);
335                 msgctl &= ~PCI_MSI_FLAGS_QSIZE;
336                 msgctl |= entry->msi_attrib.multiple << 4;
337                 pci_write_config_word(dev, pos + PCI_MSI_FLAGS, msgctl);
338
339                 pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
340                                        msg->address_lo);
341                 if (entry->msi_attrib.is_64) {
342                         pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
343                                                msg->address_hi);
344                         pci_write_config_word(dev, pos + PCI_MSI_DATA_64,
345                                               msg->data);
346                 } else {
347                         pci_write_config_word(dev, pos + PCI_MSI_DATA_32,
348                                               msg->data);
349                 }
350         }
351         entry->msg = *msg;
352 }
353
354 void write_msi_msg(unsigned int irq, struct msi_msg *msg)
355 {
356         struct msi_desc *entry = irq_get_msi_desc(irq);
357
358         __write_msi_msg(entry, msg);
359 }
360 EXPORT_SYMBOL_GPL(write_msi_msg);
361
362 static void free_msi_irqs(struct pci_dev *dev)
363 {
364         struct msi_desc *entry, *tmp;
365         struct attribute **msi_attrs;
366         struct device_attribute *dev_attr;
367         int count = 0;
368
369         list_for_each_entry(entry, &dev->msi_list, list) {
370                 int i, nvec;
371                 if (!entry->irq)
372                         continue;
373                 if (entry->nvec_used)
374                         nvec = entry->nvec_used;
375                 else
376                         nvec = 1 << entry->msi_attrib.multiple;
377                 for (i = 0; i < nvec; i++)
378                         BUG_ON(irq_has_action(entry->irq + i));
379         }
380
381         arch_teardown_msi_irqs(dev);
382
383         list_for_each_entry_safe(entry, tmp, &dev->msi_list, list) {
384                 if (entry->msi_attrib.is_msix) {
385                         if (list_is_last(&entry->list, &dev->msi_list))
386                                 iounmap(entry->mask_base);
387                 }
388
389                 list_del(&entry->list);
390                 kfree(entry);
391         }
392
393         if (dev->msi_irq_groups) {
394                 sysfs_remove_groups(&dev->dev.kobj, dev->msi_irq_groups);
395                 msi_attrs = dev->msi_irq_groups[0]->attrs;
396                 while (msi_attrs[count]) {
397                         dev_attr = container_of(msi_attrs[count],
398                                                 struct device_attribute, attr);
399                         kfree(dev_attr->attr.name);
400                         kfree(dev_attr);
401                         ++count;
402                 }
403                 kfree(msi_attrs);
404                 kfree(dev->msi_irq_groups[0]);
405                 kfree(dev->msi_irq_groups);
406                 dev->msi_irq_groups = NULL;
407         }
408 }
409
410 static struct msi_desc *alloc_msi_entry(struct pci_dev *dev)
411 {
412         struct msi_desc *desc = kzalloc(sizeof(*desc), GFP_KERNEL);
413         if (!desc)
414                 return NULL;
415
416         INIT_LIST_HEAD(&desc->list);
417         desc->dev = dev;
418
419         return desc;
420 }
421
422 static void pci_intx_for_msi(struct pci_dev *dev, int enable)
423 {
424         if (!(dev->dev_flags & PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG))
425                 pci_intx(dev, enable);
426 }
427
428 static void __pci_restore_msi_state(struct pci_dev *dev)
429 {
430         u16 control;
431         struct msi_desc *entry;
432
433         if (!dev->msi_enabled)
434                 return;
435
436         entry = irq_get_msi_desc(dev->irq);
437
438         pci_intx_for_msi(dev, 0);
439         msi_set_enable(dev, 0);
440         arch_restore_msi_irqs(dev);
441
442         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
443         msi_mask_irq(entry, msi_mask(entry->msi_attrib.multi_cap),
444                      entry->masked);
445         control &= ~PCI_MSI_FLAGS_QSIZE;
446         control |= (entry->msi_attrib.multiple << 4) | PCI_MSI_FLAGS_ENABLE;
447         pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
448 }
449
450 static void __pci_restore_msix_state(struct pci_dev *dev)
451 {
452         struct msi_desc *entry;
453
454         if (!dev->msix_enabled)
455                 return;
456         BUG_ON(list_empty(&dev->msi_list));
457
458         /* route the table */
459         pci_intx_for_msi(dev, 0);
460         msix_clear_and_set_ctrl(dev, 0,
461                                 PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL);
462
463         arch_restore_msi_irqs(dev);
464         list_for_each_entry(entry, &dev->msi_list, list) {
465                 msix_mask_irq(entry, entry->masked);
466         }
467
468         msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
469 }
470
471 void pci_restore_msi_state(struct pci_dev *dev)
472 {
473         __pci_restore_msi_state(dev);
474         __pci_restore_msix_state(dev);
475 }
476 EXPORT_SYMBOL_GPL(pci_restore_msi_state);
477
478 static ssize_t msi_mode_show(struct device *dev, struct device_attribute *attr,
479                              char *buf)
480 {
481         struct msi_desc *entry;
482         unsigned long irq;
483         int retval;
484
485         retval = kstrtoul(attr->attr.name, 10, &irq);
486         if (retval)
487                 return retval;
488
489         entry = irq_get_msi_desc(irq);
490         if (entry)
491                 return sprintf(buf, "%s\n",
492                                 entry->msi_attrib.is_msix ? "msix" : "msi");
493
494         return -ENODEV;
495 }
496
497 static int populate_msi_sysfs(struct pci_dev *pdev)
498 {
499         struct attribute **msi_attrs;
500         struct attribute *msi_attr;
501         struct device_attribute *msi_dev_attr;
502         struct attribute_group *msi_irq_group;
503         const struct attribute_group **msi_irq_groups;
504         struct msi_desc *entry;
505         int ret = -ENOMEM;
506         int num_msi = 0;
507         int count = 0;
508
509         /* Determine how many msi entries we have */
510         list_for_each_entry(entry, &pdev->msi_list, list) {
511                 ++num_msi;
512         }
513         if (!num_msi)
514                 return 0;
515
516         /* Dynamically create the MSI attributes for the PCI device */
517         msi_attrs = kzalloc(sizeof(void *) * (num_msi + 1), GFP_KERNEL);
518         if (!msi_attrs)
519                 return -ENOMEM;
520         list_for_each_entry(entry, &pdev->msi_list, list) {
521                 msi_dev_attr = kzalloc(sizeof(*msi_dev_attr), GFP_KERNEL);
522                 if (!msi_dev_attr)
523                         goto error_attrs;
524                 msi_attrs[count] = &msi_dev_attr->attr;
525
526                 sysfs_attr_init(&msi_dev_attr->attr);
527                 msi_dev_attr->attr.name = kasprintf(GFP_KERNEL, "%d",
528                                                     entry->irq);
529                 if (!msi_dev_attr->attr.name)
530                         goto error_attrs;
531                 msi_dev_attr->attr.mode = S_IRUGO;
532                 msi_dev_attr->show = msi_mode_show;
533                 ++count;
534         }
535
536         msi_irq_group = kzalloc(sizeof(*msi_irq_group), GFP_KERNEL);
537         if (!msi_irq_group)
538                 goto error_attrs;
539         msi_irq_group->name = "msi_irqs";
540         msi_irq_group->attrs = msi_attrs;
541
542         msi_irq_groups = kzalloc(sizeof(void *) * 2, GFP_KERNEL);
543         if (!msi_irq_groups)
544                 goto error_irq_group;
545         msi_irq_groups[0] = msi_irq_group;
546
547         ret = sysfs_create_groups(&pdev->dev.kobj, msi_irq_groups);
548         if (ret)
549                 goto error_irq_groups;
550         pdev->msi_irq_groups = msi_irq_groups;
551
552         return 0;
553
554 error_irq_groups:
555         kfree(msi_irq_groups);
556 error_irq_group:
557         kfree(msi_irq_group);
558 error_attrs:
559         count = 0;
560         msi_attr = msi_attrs[count];
561         while (msi_attr) {
562                 msi_dev_attr = container_of(msi_attr, struct device_attribute, attr);
563                 kfree(msi_attr->name);
564                 kfree(msi_dev_attr);
565                 ++count;
566                 msi_attr = msi_attrs[count];
567         }
568         kfree(msi_attrs);
569         return ret;
570 }
571
572 static struct msi_desc *msi_setup_entry(struct pci_dev *dev)
573 {
574         u16 control;
575         struct msi_desc *entry;
576
577         /* MSI Entry Initialization */
578         entry = alloc_msi_entry(dev);
579         if (!entry)
580                 return NULL;
581
582         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
583
584         entry->msi_attrib.is_msix       = 0;
585         entry->msi_attrib.is_64         = !!(control & PCI_MSI_FLAGS_64BIT);
586         entry->msi_attrib.entry_nr      = 0;
587         entry->msi_attrib.maskbit       = !!(control & PCI_MSI_FLAGS_MASKBIT);
588         entry->msi_attrib.default_irq   = dev->irq;     /* Save IOAPIC IRQ */
589         entry->msi_attrib.multi_cap     = (control & PCI_MSI_FLAGS_QMASK) >> 1;
590
591         if (control & PCI_MSI_FLAGS_64BIT)
592                 entry->mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
593         else
594                 entry->mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
595
596         /* Save the initial mask status */
597         if (entry->msi_attrib.maskbit)
598                 pci_read_config_dword(dev, entry->mask_pos, &entry->masked);
599
600         return entry;
601 }
602
603 /**
604  * msi_capability_init - configure device's MSI capability structure
605  * @dev: pointer to the pci_dev data structure of MSI device function
606  * @nvec: number of interrupts to allocate
607  *
608  * Setup the MSI capability structure of the device with the requested
609  * number of interrupts.  A return value of zero indicates the successful
610  * setup of an entry with the new MSI irq.  A negative return value indicates
611  * an error, and a positive return value indicates the number of interrupts
612  * which could have been allocated.
613  */
614 static int msi_capability_init(struct pci_dev *dev, int nvec)
615 {
616         struct msi_desc *entry;
617         int ret;
618         unsigned mask;
619
620         msi_set_enable(dev, 0); /* Disable MSI during set up */
621
622         entry = msi_setup_entry(dev);
623         if (!entry)
624                 return -ENOMEM;
625
626         /* All MSIs are unmasked by default, Mask them all */
627         mask = msi_mask(entry->msi_attrib.multi_cap);
628         msi_mask_irq(entry, mask, mask);
629
630         list_add_tail(&entry->list, &dev->msi_list);
631
632         /* Configure MSI capability structure */
633         ret = arch_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSI);
634         if (ret) {
635                 msi_mask_irq(entry, mask, ~mask);
636                 free_msi_irqs(dev);
637                 return ret;
638         }
639
640         ret = populate_msi_sysfs(dev);
641         if (ret) {
642                 msi_mask_irq(entry, mask, ~mask);
643                 free_msi_irqs(dev);
644                 return ret;
645         }
646
647         /* Set MSI enabled bits  */
648         pci_intx_for_msi(dev, 0);
649         msi_set_enable(dev, 1);
650         dev->msi_enabled = 1;
651
652         dev->irq = entry->irq;
653         return 0;
654 }
655
656 static void __iomem *msix_map_region(struct pci_dev *dev, unsigned nr_entries)
657 {
658         resource_size_t phys_addr;
659         u32 table_offset;
660         u8 bir;
661
662         pci_read_config_dword(dev, dev->msix_cap + PCI_MSIX_TABLE,
663                               &table_offset);
664         bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR);
665         table_offset &= PCI_MSIX_TABLE_OFFSET;
666         phys_addr = pci_resource_start(dev, bir) + table_offset;
667
668         return ioremap_nocache(phys_addr, nr_entries * PCI_MSIX_ENTRY_SIZE);
669 }
670
671 static int msix_setup_entries(struct pci_dev *dev, void __iomem *base,
672                               struct msix_entry *entries, int nvec)
673 {
674         struct msi_desc *entry;
675         int i;
676
677         for (i = 0; i < nvec; i++) {
678                 entry = alloc_msi_entry(dev);
679                 if (!entry) {
680                         if (!i)
681                                 iounmap(base);
682                         else
683                                 free_msi_irqs(dev);
684                         /* No enough memory. Don't try again */
685                         return -ENOMEM;
686                 }
687
688                 entry->msi_attrib.is_msix       = 1;
689                 entry->msi_attrib.is_64         = 1;
690                 entry->msi_attrib.entry_nr      = entries[i].entry;
691                 entry->msi_attrib.default_irq   = dev->irq;
692                 entry->mask_base                = base;
693
694                 list_add_tail(&entry->list, &dev->msi_list);
695         }
696
697         return 0;
698 }
699
700 static void msix_program_entries(struct pci_dev *dev,
701                                  struct msix_entry *entries)
702 {
703         struct msi_desc *entry;
704         int i = 0;
705
706         list_for_each_entry(entry, &dev->msi_list, list) {
707                 int offset = entries[i].entry * PCI_MSIX_ENTRY_SIZE +
708                                                 PCI_MSIX_ENTRY_VECTOR_CTRL;
709
710                 entries[i].vector = entry->irq;
711                 irq_set_msi_desc(entry->irq, entry);
712                 entry->masked = readl(entry->mask_base + offset);
713                 msix_mask_irq(entry, 1);
714                 i++;
715         }
716 }
717
718 /**
719  * msix_capability_init - configure device's MSI-X capability
720  * @dev: pointer to the pci_dev data structure of MSI-X device function
721  * @entries: pointer to an array of struct msix_entry entries
722  * @nvec: number of @entries
723  *
724  * Setup the MSI-X capability structure of device function with a
725  * single MSI-X irq. A return of zero indicates the successful setup of
726  * requested MSI-X entries with allocated irqs or non-zero for otherwise.
727  **/
728 static int msix_capability_init(struct pci_dev *dev,
729                                 struct msix_entry *entries, int nvec)
730 {
731         int ret;
732         u16 control;
733         void __iomem *base;
734
735         /* Ensure MSI-X is disabled while it is set up */
736         msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
737
738         pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &control);
739         /* Request & Map MSI-X table region */
740         base = msix_map_region(dev, msix_table_size(control));
741         if (!base)
742                 return -ENOMEM;
743
744         ret = msix_setup_entries(dev, base, entries, nvec);
745         if (ret)
746                 return ret;
747
748         ret = arch_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSIX);
749         if (ret)
750                 goto out_avail;
751
752         /*
753          * Some devices require MSI-X to be enabled before we can touch the
754          * MSI-X registers.  We need to mask all the vectors to prevent
755          * interrupts coming in before they're fully set up.
756          */
757         msix_clear_and_set_ctrl(dev, 0,
758                                 PCI_MSIX_FLAGS_MASKALL | PCI_MSIX_FLAGS_ENABLE);
759
760         msix_program_entries(dev, entries);
761
762         ret = populate_msi_sysfs(dev);
763         if (ret)
764                 goto out_free;
765
766         /* Set MSI-X enabled bits and unmask the function */
767         pci_intx_for_msi(dev, 0);
768         dev->msix_enabled = 1;
769
770         msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
771
772         return 0;
773
774 out_avail:
775         if (ret < 0) {
776                 /*
777                  * If we had some success, report the number of irqs
778                  * we succeeded in setting up.
779                  */
780                 struct msi_desc *entry;
781                 int avail = 0;
782
783                 list_for_each_entry(entry, &dev->msi_list, list) {
784                         if (entry->irq != 0)
785                                 avail++;
786                 }
787                 if (avail != 0)
788                         ret = avail;
789         }
790
791 out_free:
792         free_msi_irqs(dev);
793
794         return ret;
795 }
796
797 /**
798  * pci_msi_supported - check whether MSI may be enabled on a device
799  * @dev: pointer to the pci_dev data structure of MSI device function
800  * @nvec: how many MSIs have been requested ?
801  *
802  * Look at global flags, the device itself, and its parent buses
803  * to determine if MSI/-X are supported for the device. If MSI/-X is
804  * supported return 1, else return 0.
805  **/
806 static int pci_msi_supported(struct pci_dev *dev, int nvec)
807 {
808         struct pci_bus *bus;
809
810         /* MSI must be globally enabled and supported by the device */
811         if (!pci_msi_enable)
812                 return 0;
813
814         if (!dev || dev->no_msi || dev->current_state != PCI_D0)
815                 return 0;
816
817         /*
818          * You can't ask to have 0 or less MSIs configured.
819          *  a) it's stupid ..
820          *  b) the list manipulation code assumes nvec >= 1.
821          */
822         if (nvec < 1)
823                 return 0;
824
825         /*
826          * Any bridge which does NOT route MSI transactions from its
827          * secondary bus to its primary bus must set NO_MSI flag on
828          * the secondary pci_bus.
829          * We expect only arch-specific PCI host bus controller driver
830          * or quirks for specific PCI bridges to be setting NO_MSI.
831          */
832         for (bus = dev->bus; bus; bus = bus->parent)
833                 if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
834                         return 0;
835
836         return 1;
837 }
838
839 /**
840  * pci_msi_vec_count - Return the number of MSI vectors a device can send
841  * @dev: device to report about
842  *
843  * This function returns the number of MSI vectors a device requested via
844  * Multiple Message Capable register. It returns a negative errno if the
845  * device is not capable sending MSI interrupts. Otherwise, the call succeeds
846  * and returns a power of two, up to a maximum of 2^5 (32), according to the
847  * MSI specification.
848  **/
849 int pci_msi_vec_count(struct pci_dev *dev)
850 {
851         int ret;
852         u16 msgctl;
853
854         if (!dev->msi_cap)
855                 return -EINVAL;
856
857         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl);
858         ret = 1 << ((msgctl & PCI_MSI_FLAGS_QMASK) >> 1);
859
860         return ret;
861 }
862 EXPORT_SYMBOL(pci_msi_vec_count);
863
864 void pci_msi_shutdown(struct pci_dev *dev)
865 {
866         struct msi_desc *desc;
867         u32 mask;
868
869         if (!pci_msi_enable || !dev || !dev->msi_enabled)
870                 return;
871
872         BUG_ON(list_empty(&dev->msi_list));
873         desc = list_first_entry(&dev->msi_list, struct msi_desc, list);
874
875         msi_set_enable(dev, 0);
876         pci_intx_for_msi(dev, 1);
877         dev->msi_enabled = 0;
878
879         /* Return the device with MSI unmasked as initial states */
880         mask = msi_mask(desc->msi_attrib.multi_cap);
881         /* Keep cached state to be restored */
882         __msi_mask_irq(desc, mask, ~mask);
883
884         /* Restore dev->irq to its default pin-assertion irq */
885         dev->irq = desc->msi_attrib.default_irq;
886 }
887
888 void pci_disable_msi(struct pci_dev *dev)
889 {
890         if (!pci_msi_enable || !dev || !dev->msi_enabled)
891                 return;
892
893         pci_msi_shutdown(dev);
894         free_msi_irqs(dev);
895 }
896 EXPORT_SYMBOL(pci_disable_msi);
897
898 /**
899  * pci_msix_vec_count - return the number of device's MSI-X table entries
900  * @dev: pointer to the pci_dev data structure of MSI-X device function
901  * This function returns the number of device's MSI-X table entries and
902  * therefore the number of MSI-X vectors device is capable of sending.
903  * It returns a negative errno if the device is not capable of sending MSI-X
904  * interrupts.
905  **/
906 int pci_msix_vec_count(struct pci_dev *dev)
907 {
908         u16 control;
909
910         if (!dev->msix_cap)
911                 return -EINVAL;
912
913         pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &control);
914         return msix_table_size(control);
915 }
916 EXPORT_SYMBOL(pci_msix_vec_count);
917
918 /**
919  * pci_enable_msix - configure device's MSI-X capability structure
920  * @dev: pointer to the pci_dev data structure of MSI-X device function
921  * @entries: pointer to an array of MSI-X entries
922  * @nvec: number of MSI-X irqs requested for allocation by device driver
923  *
924  * Setup the MSI-X capability structure of device function with the number
925  * of requested irqs upon its software driver call to request for
926  * MSI-X mode enabled on its hardware device function. A return of zero
927  * indicates the successful configuration of MSI-X capability structure
928  * with new allocated MSI-X irqs. A return of < 0 indicates a failure.
929  * Or a return of > 0 indicates that driver request is exceeding the number
930  * of irqs or MSI-X vectors available. Driver should use the returned value to
931  * re-send its request.
932  **/
933 int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec)
934 {
935         int nr_entries;
936         int i, j;
937
938         if (!pci_msi_supported(dev, nvec))
939                 return -EINVAL;
940
941         if (!entries)
942                 return -EINVAL;
943
944         nr_entries = pci_msix_vec_count(dev);
945         if (nr_entries < 0)
946                 return nr_entries;
947         if (nvec > nr_entries)
948                 return nr_entries;
949
950         /* Check for any invalid entries */
951         for (i = 0; i < nvec; i++) {
952                 if (entries[i].entry >= nr_entries)
953                         return -EINVAL;         /* invalid entry */
954                 for (j = i + 1; j < nvec; j++) {
955                         if (entries[i].entry == entries[j].entry)
956                                 return -EINVAL; /* duplicate entry */
957                 }
958         }
959         WARN_ON(!!dev->msix_enabled);
960
961         /* Check whether driver already requested for MSI irq */
962         if (dev->msi_enabled) {
963                 dev_info(&dev->dev, "can't enable MSI-X (MSI IRQ already assigned)\n");
964                 return -EINVAL;
965         }
966         return msix_capability_init(dev, entries, nvec);
967 }
968 EXPORT_SYMBOL(pci_enable_msix);
969
970 void pci_msix_shutdown(struct pci_dev *dev)
971 {
972         struct msi_desc *entry;
973
974         if (!pci_msi_enable || !dev || !dev->msix_enabled)
975                 return;
976
977         /* Return the device with MSI-X masked as initial states */
978         list_for_each_entry(entry, &dev->msi_list, list) {
979                 /* Keep cached states to be restored */
980                 __msix_mask_irq(entry, 1);
981         }
982
983         msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
984         pci_intx_for_msi(dev, 1);
985         dev->msix_enabled = 0;
986 }
987
988 void pci_disable_msix(struct pci_dev *dev)
989 {
990         if (!pci_msi_enable || !dev || !dev->msix_enabled)
991                 return;
992
993         pci_msix_shutdown(dev);
994         free_msi_irqs(dev);
995 }
996 EXPORT_SYMBOL(pci_disable_msix);
997
998 void pci_no_msi(void)
999 {
1000         pci_msi_enable = 0;
1001 }
1002
1003 /**
1004  * pci_msi_enabled - is MSI enabled?
1005  *
1006  * Returns true if MSI has not been disabled by the command-line option
1007  * pci=nomsi.
1008  **/
1009 int pci_msi_enabled(void)
1010 {
1011         return pci_msi_enable;
1012 }
1013 EXPORT_SYMBOL(pci_msi_enabled);
1014
1015 void pci_msi_init_pci_dev(struct pci_dev *dev)
1016 {
1017         INIT_LIST_HEAD(&dev->msi_list);
1018
1019         /* Disable the msi hardware to avoid screaming interrupts
1020          * during boot.  This is the power on reset default so
1021          * usually this should be a noop.
1022          */
1023         dev->msi_cap = pci_find_capability(dev, PCI_CAP_ID_MSI);
1024         if (dev->msi_cap)
1025                 msi_set_enable(dev, 0);
1026
1027         dev->msix_cap = pci_find_capability(dev, PCI_CAP_ID_MSIX);
1028         if (dev->msix_cap)
1029                 msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
1030 }
1031
1032 /**
1033  * pci_enable_msi_range - configure device's MSI capability structure
1034  * @dev: device to configure
1035  * @minvec: minimal number of interrupts to configure
1036  * @maxvec: maximum number of interrupts to configure
1037  *
1038  * This function tries to allocate a maximum possible number of interrupts in a
1039  * range between @minvec and @maxvec. It returns a negative errno if an error
1040  * occurs. If it succeeds, it returns the actual number of interrupts allocated
1041  * and updates the @dev's irq member to the lowest new interrupt number;
1042  * the other interrupt numbers allocated to this device are consecutive.
1043  **/
1044 int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec)
1045 {
1046         int nvec;
1047         int rc;
1048
1049         if (!pci_msi_supported(dev, minvec))
1050                 return -EINVAL;
1051
1052         WARN_ON(!!dev->msi_enabled);
1053
1054         /* Check whether driver already requested MSI-X irqs */
1055         if (dev->msix_enabled) {
1056                 dev_info(&dev->dev,
1057                          "can't enable MSI (MSI-X already enabled)\n");
1058                 return -EINVAL;
1059         }
1060
1061         if (maxvec < minvec)
1062                 return -ERANGE;
1063
1064         nvec = pci_msi_vec_count(dev);
1065         if (nvec < 0)
1066                 return nvec;
1067         else if (nvec < minvec)
1068                 return -EINVAL;
1069         else if (nvec > maxvec)
1070                 nvec = maxvec;
1071
1072         do {
1073                 rc = msi_capability_init(dev, nvec);
1074                 if (rc < 0) {
1075                         return rc;
1076                 } else if (rc > 0) {
1077                         if (rc < minvec)
1078                                 return -ENOSPC;
1079                         nvec = rc;
1080                 }
1081         } while (rc);
1082
1083         return nvec;
1084 }
1085 EXPORT_SYMBOL(pci_enable_msi_range);
1086
1087 /**
1088  * pci_enable_msix_range - configure device's MSI-X capability structure
1089  * @dev: pointer to the pci_dev data structure of MSI-X device function
1090  * @entries: pointer to an array of MSI-X entries
1091  * @minvec: minimum number of MSI-X irqs requested
1092  * @maxvec: maximum number of MSI-X irqs requested
1093  *
1094  * Setup the MSI-X capability structure of device function with a maximum
1095  * possible number of interrupts in the range between @minvec and @maxvec
1096  * upon its software driver call to request for MSI-X mode enabled on its
1097  * hardware device function. It returns a negative errno if an error occurs.
1098  * If it succeeds, it returns the actual number of interrupts allocated and
1099  * indicates the successful configuration of MSI-X capability structure
1100  * with new allocated MSI-X interrupts.
1101  **/
1102 int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
1103                                int minvec, int maxvec)
1104 {
1105         int nvec = maxvec;
1106         int rc;
1107
1108         if (maxvec < minvec)
1109                 return -ERANGE;
1110
1111         do {
1112                 rc = pci_enable_msix(dev, entries, nvec);
1113                 if (rc < 0) {
1114                         return rc;
1115                 } else if (rc > 0) {
1116                         if (rc < minvec)
1117                                 return -ENOSPC;
1118                         nvec = rc;
1119                 }
1120         } while (rc);
1121
1122         return nvec;
1123 }
1124 EXPORT_SYMBOL(pci_enable_msix_range);