/* * iomap.c, Memory Mapped I/O routines for MIPS architecture. * * This code is based on lib/iomap.c, by Linus Torvalds. * * Copyright (C) 2004-2005 Yoichi Yuasa * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include void __iomem *ioport_map(unsigned long port, unsigned int nr) { unsigned long end; end = port + nr - 1UL; if (ioport_resource.start > port || ioport_resource.end < end || port > end) return NULL; return (void __iomem *)(mips_io_port_base + port); } void ioport_unmap(void __iomem *addr) { } EXPORT_SYMBOL(ioport_map); EXPORT_SYMBOL(ioport_unmap); void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) { unsigned long start, len, flags; if (dev == NULL) return NULL; start = pci_resource_start(dev, bar); len = pci_resource_len(dev, bar); if (!start || !len) return NULL; if (maxlen != 0 && len > maxlen) len = maxlen; flags = pci_resource_flags(dev, bar); if (flags & IORESOURCE_IO) return ioport_map(start, len); if (flags & IORESOURCE_MEM) { if (flags & IORESOURCE_CACHEABLE) return ioremap_cachable(start, len); return ioremap_nocache(start, len); } return NULL; } void pci_iounmap(struct pci_dev *dev, void __iomem *addr) { iounmap(addr); } EXPORT_SYMBOL(pci_iomap); EXPORT_SYMBOL(pci_iounmap);