1/* ASB2305 PCI I/O mapping handler 2 * 3 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public Licence 8 * as published by the Free Software Foundation; either version 9 * 2 of the Licence, or (at your option) any later version. 10 */ 11#include <linux/pci.h> 12#include <linux/module.h> 13 14/* 15 * Create a virtual mapping cookie for a PCI BAR (memory or IO) 16 */ 17void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 18{ 19 resource_size_t start = pci_resource_start(dev, bar); 20 resource_size_t len = pci_resource_len(dev, bar); 21 unsigned long flags = pci_resource_flags(dev, bar); 22 23 if (!len || !start) 24 return NULL; 25 26 if ((flags & IORESOURCE_IO) || (flags & IORESOURCE_MEM)) { 27 if (flags & IORESOURCE_CACHEABLE && !(flags & IORESOURCE_IO)) 28 return ioremap(start, len); 29 else 30 return ioremap_nocache(start, len); 31 } 32 33 return NULL; 34} 35EXPORT_SYMBOL(pci_iomap); 36