mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 14:06:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  linux/arch/arm/mm/iomap.c
 | |
|  *
 | |
|  * Map IO port and PCI memory spaces so that {read,write}[bwl] can
 | |
|  * be used to access this memory.
 | |
|  */
 | |
| #include <linux/module.h>
 | |
| #include <linux/pci.h>
 | |
| #include <linux/ioport.h>
 | |
| #include <linux/io.h>
 | |
| 
 | |
| #ifdef __io
 | |
| void __iomem *ioport_map(unsigned long port, unsigned int nr)
 | |
| {
 | |
| 	return __io(port);
 | |
| }
 | |
| EXPORT_SYMBOL(ioport_map);
 | |
| 
 | |
| void ioport_unmap(void __iomem *addr)
 | |
| {
 | |
| }
 | |
| EXPORT_SYMBOL(ioport_unmap);
 | |
| #endif
 | |
| 
 | |
| #ifdef CONFIG_PCI
 | |
| void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
 | |
| {
 | |
| 	resource_size_t start = pci_resource_start(dev, bar);
 | |
| 	resource_size_t len   = pci_resource_len(dev, bar);
 | |
| 	unsigned long flags = pci_resource_flags(dev, bar);
 | |
| 
 | |
| 	if (!len || !start)
 | |
| 		return NULL;
 | |
| 	if (maxlen && len > maxlen)
 | |
| 		len = maxlen;
 | |
| 	if (flags & IORESOURCE_IO)
 | |
| 		return ioport_map(start, len);
 | |
| 	if (flags & IORESOURCE_MEM) {
 | |
| 		if (flags & IORESOURCE_CACHEABLE)
 | |
| 			return ioremap(start, len);
 | |
| 		return ioremap_nocache(start, len);
 | |
| 	}
 | |
| 	return NULL;
 | |
| }
 | |
| EXPORT_SYMBOL(pci_iomap);
 | |
| 
 | |
| void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
 | |
| {
 | |
| 	if ((unsigned long)addr >= VMALLOC_START &&
 | |
| 	    (unsigned long)addr < VMALLOC_END)
 | |
| 		iounmap(addr);
 | |
| }
 | |
| EXPORT_SYMBOL(pci_iounmap);
 | |
| #endif
 | 
