6 #include <linux/module.h>
7 #include <linux/wait.h>
8 #include <linux/bitops.h>
9 #include <xen/events.h>
10 #include <linux/sched.h>
22 static void xen_pcibk_control_isr(
struct pci_dev *
dev,
int reset)
28 dev_data = pci_get_drvdata(dev);
43 if (!enable && !dev_data->
isr_on)
57 if (dev_data->
irq == 0)
60 dev_dbg(&dev->
dev,
"%s: #%d %s %s%s %s-> %s\n",
63 pci_is_enabled(dev) ?
"on" :
"off",
66 dev_data->
isr_on ?
"enable" :
"disable",
67 enable ?
"enable" :
"disable");
74 dev_err(&dev->
dev,
"%s: failed to install fake IRQ " \
75 "handler for IRQ %d! (rc:%d)\n",
89 pci_is_enabled(dev) ?
"on" :
"off",
92 enable ? (dev_data->
isr_on ?
"enabled" :
"failed to enable") :
93 (dev_data->
isr_on ?
"failed to disable" :
"disabled"));
104 xen_pcibk_control_isr(dev, 1 );
108 #ifdef CONFIG_PCI_MSI
132 #ifdef CONFIG_PCI_MSI
138 int otherend = pdev->
xdev->otherend_id;
144 status = pci_enable_msi(dev);
161 dev_data = pci_get_drvdata(dev);
183 dev_data = pci_get_drvdata(dev);
207 for (i = 0; i < op->
value; i++) {
215 for (i = 0; i < op->
value; i++) {
228 pci_name(dev), result);
233 dev_data = pci_get_drvdata(dev);
237 return result > 0 ? 0 :
result;
258 dev_data = pci_get_drvdata(dev);
300 dev = xen_pcibk_get_pci_dev(pdev, op->
domain, op->
bus, op->
devfn);
305 dev_data = pci_get_drvdata(dev);
317 #ifdef CONFIG_PCI_MSI
319 op->
err = xen_pcibk_enable_msi(pdev, dev, op);
322 op->
err = xen_pcibk_disable_msi(pdev, dev, op);
325 op->
err = xen_pcibk_enable_msix(pdev, dev, op);
328 op->
err = xen_pcibk_disable_msix(pdev, dev, op);
336 if (!op->
err && dev && dev_data) {
339 xen_pcibk_control_isr(dev, 0 );
372 if ((dev_data->
handled % 1000) == 0) {
375 "with other domains. Turning ISR off\n",