/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include
#include
#include
#include
#include
#include
/*
* PIRQ event channels are not supported on Arm, so nothing to do.
*/
int arch_pci_clean_pirqs(struct domain *d)
{
return 0;
}
struct pci_dev *dev_to_pci(struct device *dev)
{
ASSERT(dev->type == DEV_PCI);
return container_of(dev, struct pci_dev, arch.dev);
}
void arch_pci_init_pdev(struct pci_dev *pdev)
{
pci_to_dev(pdev)->type = DEV_PCI;
}
static int __init dt_pci_init(void)
{
struct dt_device_node *np;
int rc;
dt_for_each_device_node(dt_host, np)
{
rc = device_init(np, DEVICE_PCI_HOSTBRIDGE, NULL);
/*
* Ignore the following error codes:
* - EBADF: Indicate the current device is not a pci device.
* - ENODEV: The pci device is not present or cannot be used by
* Xen.
*/
if( !rc || rc == -EBADF || rc == -ENODEV )
continue;
return rc;
}
return 0;
}
#ifdef CONFIG_ACPI
static int __init acpi_pci_init(void)
{
printk(XENLOG_ERR "ACPI pci init not supported \n");
return -EOPNOTSUPP;
}
#else
static int __init acpi_pci_init(void)
{
return -EINVAL;
}
#endif
/* By default pci passthrough is disabled. */
bool __read_mostly pci_passthrough_enabled;
boolean_param("pci-passthrough", pci_passthrough_enabled);
static int __init pci_init(void)
{
/*
* Enable PCI passthrough when has been enabled explicitly
* (pci-passthrough=on).
*/
if ( !pci_passthrough_enabled )
return 0;
pci_segments_init();
if ( acpi_disabled )
return dt_pci_init();
else
return acpi_pci_init();
}
__initcall(pci_init);
/*
* Local variables:
* mode: C
* c-file-style: "BSD"
* c-basic-offset: 4
* tab-width: 4
* indent-tabs-mode: nil
* End:
*/