iomap.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Implement the sparc iomap interfaces
  3. */
  4. #include <linux/pci.h>
  5. #include <linux/module.h>
  6. #include <asm/io.h>
  7. /* Create a virtual mapping cookie for an IO port range */
  8. void __iomem *ioport_map(unsigned long port, unsigned int nr)
  9. {
  10. return (void __iomem *) (unsigned long) port;
  11. }
  12. void ioport_unmap(void __iomem *addr)
  13. {
  14. /* Nothing to do */
  15. }
  16. EXPORT_SYMBOL(ioport_map);
  17. EXPORT_SYMBOL(ioport_unmap);
  18. /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
  19. void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
  20. {
  21. resource_size_t start = pci_resource_start(dev, bar);
  22. resource_size_t len = pci_resource_len(dev, bar);
  23. unsigned long flags = pci_resource_flags(dev, bar);
  24. if (!len || !start)
  25. return NULL;
  26. if (maxlen && len > maxlen)
  27. len = maxlen;
  28. if (flags & IORESOURCE_IO)
  29. return ioport_map(start, len);
  30. if (flags & IORESOURCE_MEM) {
  31. if (flags & IORESOURCE_CACHEABLE)
  32. return ioremap(start, len);
  33. return ioremap_nocache(start, len);
  34. }
  35. /* What? */
  36. return NULL;
  37. }
  38. void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
  39. {
  40. /* nothing to do */
  41. }
  42. EXPORT_SYMBOL(pci_iomap);
  43. EXPORT_SYMBOL(pci_iounmap);