iomap.c 875 B

123456789101112131415161718192021222324252627282930313233343536373839
  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 <asm/io.h>
  10. #include <asm/pci-bridge.h>
  11. void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
  12. {
  13. resource_size_t start = pci_resource_start(dev, bar);
  14. resource_size_t len = pci_resource_len(dev, bar);
  15. unsigned long flags = pci_resource_flags(dev, bar);
  16. if (!len)
  17. return NULL;
  18. if (max && len > max)
  19. len = max;
  20. if (flags & IORESOURCE_IO)
  21. return ioport_map(start, len);
  22. if (flags & IORESOURCE_MEM)
  23. return ioremap(start, len);
  24. /* What? */
  25. return NULL;
  26. }
  27. EXPORT_SYMBOL(pci_iomap);
  28. void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
  29. {
  30. if (isa_vaddr_is_ioport(addr))
  31. return;
  32. if (pcibios_vaddr_is_ioport(addr))
  33. return;
  34. iounmap(addr);
  35. }
  36. EXPORT_SYMBOL(pci_iounmap);