// SPDX-License-Identifier: GPL-2.0

#include <linux/pci.h>

__rust_helper u16 rust_helper_pci_dev_id(struct pci_dev *dev)
{
	return PCI_DEVID(dev->bus->number, dev->devfn);
}

__rust_helper resource_size_t
rust_helper_pci_resource_start(struct pci_dev *pdev, int bar)
{
	return pci_resource_start(pdev, bar);
}

__rust_helper resource_size_t rust_helper_pci_resource_len(struct pci_dev *pdev,
							   int bar)
{
	return pci_resource_len(pdev, bar);
}

__rust_helper bool rust_helper_dev_is_pci(const struct device *dev)
{
	return dev_is_pci(dev);
}

#ifndef CONFIG_PCI_MSI
__rust_helper int rust_helper_pci_alloc_irq_vectors(struct pci_dev *dev,
						    unsigned int min_vecs,
						    unsigned int max_vecs,
						    unsigned int flags)
{
	return pci_alloc_irq_vectors(dev, min_vecs, max_vecs, flags);
}

__rust_helper void rust_helper_pci_free_irq_vectors(struct pci_dev *dev)
{
	pci_free_irq_vectors(dev);
}

__rust_helper int rust_helper_pci_irq_vector(struct pci_dev *pdev,
					     unsigned int nvec)
{
	return pci_irq_vector(pdev, nvec);
}
#endif
