iomap.c 901 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * ppc64 "iomap" interface implementation.
  3. *
  4. * (C) Copyright 2004 Linus Torvalds
  5. */
  6. #include <linux/init.h>
  7. #include <linux/pci.h>
  8. #include <linux/mm.h>
  9. #include <linux/export.h>
  10. #include <asm/io.h>
  11. #include <asm/pci-bridge.h>
  12. void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
  13. {
  14. resource_size_t start = pci_resource_start(dev, bar);
  15. resource_size_t len = pci_resource_len(dev, bar);
  16. unsigned long flags = pci_resource_flags(dev, bar);
  17. if (!len)
  18. return NULL;
  19. if (max && len > max)
  20. len = max;
  21. if (flags & IORESOURCE_IO)
  22. return ioport_map(start, len);
  23. if (flags & IORESOURCE_MEM)
  24. return ioremap(start, len);
  25. /* What? */
  26. return NULL;
  27. }
  28. EXPORT_SYMBOL(pci_iomap);
  29. void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
  30. {
  31. if (isa_vaddr_is_ioport(addr))
  32. return;
  33. if (pcibios_vaddr_is_ioport(addr))
  34. return;
  35. iounmap(addr);
  36. }
  37. EXPORT_SYMBOL(pci_iounmap);