Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PCI: Document pci_iomap()

This useful interface is hardly mentioned anywhere in the in-tree
documentation.

Signed-off-by: Rolf Eike Beer <eike-kernel@sf-tec.de>
Cc: Tejun Heo <htejun@gmail.com>
Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Rolf Eike Beer and committed by
Greg Kroah-Hartman
5ca24814 4e68fc97

+19 -2
+2 -1
Documentation/DocBook/deviceiobook.tmpl
··· 316 316 317 317 <chapter id="pubfunctions"> 318 318 <title>Public Functions Provided</title> 319 - !Einclude/asm-i386/io.h 319 + !Iinclude/asm-i386/io.h 320 + !Elib/iomap.c 320 321 </chapter> 321 322 322 323 </book>
+3
include/asm-i386/io.h
··· 112 112 * writew/writel functions and the other mmio helpers. The returned 113 113 * address is not guaranteed to be usable directly as a virtual 114 114 * address. 115 + * 116 + * If the area you are trying to map is a PCI BAR you should have a 117 + * look at pci_iomap(). 115 118 */ 116 119 117 120 static inline void __iomem * ioremap(unsigned long offset, unsigned long size)
+14 -1
lib/iomap.c
··· 240 240 EXPORT_SYMBOL(ioport_map); 241 241 EXPORT_SYMBOL(ioport_unmap); 242 242 243 - /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ 243 + /** 244 + * pci_iomap - create a virtual mapping cookie for a PCI BAR 245 + * @dev: PCI device that owns the BAR 246 + * @bar: BAR number 247 + * @maxlen: length of the memory to map 248 + * 249 + * Using this function you will get a __iomem address to your device BAR. 250 + * You can access it using ioread*() and iowrite*(). These functions hide 251 + * the details if this is a MMIO or PIO address space and will just do what 252 + * you expect from them in the correct way. 253 + * 254 + * @maxlen specifies the maximum length to map. If you want to get access to 255 + * the complete BAR without checking for its length first, pass %0 here. 256 + * */ 244 257 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 245 258 { 246 259 unsigned long start = pci_resource_start(dev, bar);