162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */
262306a36Sopenharmony_ci/* Generic I/O port emulation.
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
562306a36Sopenharmony_ci * Written by David Howells (dhowells@redhat.com)
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci#ifndef __ASM_GENERIC_PCI_IOMAP_H
862306a36Sopenharmony_ci#define __ASM_GENERIC_PCI_IOMAP_H
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistruct pci_dev;
1162306a36Sopenharmony_ci#ifdef CONFIG_PCI
1262306a36Sopenharmony_ci/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
1362306a36Sopenharmony_ciextern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
1462306a36Sopenharmony_ciextern void __iomem *pci_iomap_wc(struct pci_dev *dev, int bar, unsigned long max);
1562306a36Sopenharmony_ciextern void __iomem *pci_iomap_range(struct pci_dev *dev, int bar,
1662306a36Sopenharmony_ci				     unsigned long offset,
1762306a36Sopenharmony_ci				     unsigned long maxlen);
1862306a36Sopenharmony_ciextern void __iomem *pci_iomap_wc_range(struct pci_dev *dev, int bar,
1962306a36Sopenharmony_ci					unsigned long offset,
2062306a36Sopenharmony_ci					unsigned long maxlen);
2162306a36Sopenharmony_ciextern void pci_iounmap(struct pci_dev *dev, void __iomem *);
2262306a36Sopenharmony_ci/* Create a virtual mapping cookie for a port on a given PCI device.
2362306a36Sopenharmony_ci * Do not call this directly, it exists to make it easier for architectures
2462306a36Sopenharmony_ci * to override */
2562306a36Sopenharmony_ci#ifdef CONFIG_NO_GENERIC_PCI_IOPORT_MAP
2662306a36Sopenharmony_ciextern void __iomem *__pci_ioport_map(struct pci_dev *dev, unsigned long port,
2762306a36Sopenharmony_ci				      unsigned int nr);
2862306a36Sopenharmony_ci#elif !defined(CONFIG_HAS_IOPORT_MAP)
2962306a36Sopenharmony_ci#define __pci_ioport_map(dev, port, nr) NULL
3062306a36Sopenharmony_ci#else
3162306a36Sopenharmony_ci#define __pci_ioport_map(dev, port, nr) ioport_map((port), (nr))
3262306a36Sopenharmony_ci#endif
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#elif defined(CONFIG_GENERIC_PCI_IOMAP)
3562306a36Sopenharmony_cistatic inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci	return NULL;
3862306a36Sopenharmony_ci}
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistatic inline void __iomem *pci_iomap_wc(struct pci_dev *dev, int bar, unsigned long max)
4162306a36Sopenharmony_ci{
4262306a36Sopenharmony_ci	return NULL;
4362306a36Sopenharmony_ci}
4462306a36Sopenharmony_cistatic inline void __iomem *pci_iomap_range(struct pci_dev *dev, int bar,
4562306a36Sopenharmony_ci					    unsigned long offset,
4662306a36Sopenharmony_ci					    unsigned long maxlen)
4762306a36Sopenharmony_ci{
4862306a36Sopenharmony_ci	return NULL;
4962306a36Sopenharmony_ci}
5062306a36Sopenharmony_cistatic inline void __iomem *pci_iomap_wc_range(struct pci_dev *dev, int bar,
5162306a36Sopenharmony_ci					       unsigned long offset,
5262306a36Sopenharmony_ci					       unsigned long maxlen)
5362306a36Sopenharmony_ci{
5462306a36Sopenharmony_ci	return NULL;
5562306a36Sopenharmony_ci}
5662306a36Sopenharmony_cistatic inline void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
5762306a36Sopenharmony_ci{ }
5862306a36Sopenharmony_ci#endif
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci#endif /* __ASM_GENERIC_PCI_IOMAP_H */
61