Linux Audio

Check our new training course

Loading...
v4.17
 1/*
 2 * Copyright 2006-2007, Michael Ellerman, IBM Corporation.
 3 *
 4 * This program is free software; you can redistribute it and/or
 5 * modify it under the terms of the GNU General Public License
 6 * as published by the Free Software Foundation; either version
 7 * 2 of the License, or (at your option) any later version.
 8 */
 9
10#include <linux/kernel.h>
11#include <linux/msi.h>
12#include <linux/pci.h>
13
14#include <asm/machdep.h>
15
16int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
17{
18	struct pci_controller *phb = pci_bus_to_host(dev->bus);
19
20	if (!phb->controller_ops.setup_msi_irqs ||
21	    !phb->controller_ops.teardown_msi_irqs) {
22		pr_debug("msi: Platform doesn't provide MSI callbacks.\n");
23		return -ENOSYS;
24	}
25
26	/* PowerPC doesn't support multiple MSI yet */
27	if (type == PCI_CAP_ID_MSI && nvec > 1)
28		return 1;
29
30	return phb->controller_ops.setup_msi_irqs(dev, nvec, type);
 
 
 
 
 
31}
32
33void arch_teardown_msi_irqs(struct pci_dev *dev)
34{
35	struct pci_controller *phb = pci_bus_to_host(dev->bus);
 
36
37	phb->controller_ops.teardown_msi_irqs(dev);
 
 
38}
v3.5.6
 1/*
 2 * Copyright 2006-2007, Michael Ellerman, IBM Corporation.
 3 *
 4 * This program is free software; you can redistribute it and/or
 5 * modify it under the terms of the GNU General Public License
 6 * as published by the Free Software Foundation; either version
 7 * 2 of the License, or (at your option) any later version.
 8 */
 9
10#include <linux/kernel.h>
11#include <linux/msi.h>
12#include <linux/pci.h>
13
14#include <asm/machdep.h>
15
16int arch_msi_check_device(struct pci_dev* dev, int nvec, int type)
17{
18	if (!ppc_md.setup_msi_irqs || !ppc_md.teardown_msi_irqs) {
 
 
 
19		pr_debug("msi: Platform doesn't provide MSI callbacks.\n");
20		return -ENOSYS;
21	}
22
23	/* PowerPC doesn't support multiple MSI yet */
24	if (type == PCI_CAP_ID_MSI && nvec > 1)
25		return 1;
26
27	if (ppc_md.msi_check_device) {
28		pr_debug("msi: Using platform check routine.\n");
29		return ppc_md.msi_check_device(dev, nvec, type);
30	}
31
32        return 0;
33}
34
35int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
36{
37	return ppc_md.setup_msi_irqs(dev, nvec, type);
38}
39
40void arch_teardown_msi_irqs(struct pci_dev *dev)
41{
42	ppc_md.teardown_msi_irqs(dev);
43}