[POWERPC] Add function to check if address is an IO port
[deliverable/linux.git] / arch / powerpc / kernel / iomap.c
CommitLineData
1da177e4 1/*
1da177e4
LT
2 * ppc64 "iomap" interface implementation.
3 *
4 * (C) Copyright 2004 Linus Torvalds
5 */
6#include <linux/init.h>
7#include <linux/pci.h>
8#include <linux/mm.h>
9#include <asm/io.h>
10
11/*
12 * Here comes the ppc64 implementation of the IOMAP
13 * interfaces.
14 */
8943212c 15unsigned int ioread8(void __iomem *addr)
1da177e4
LT
16{
17 return readb(addr);
18}
8943212c 19unsigned int ioread16(void __iomem *addr)
1da177e4
LT
20{
21 return readw(addr);
22}
8943212c 23unsigned int ioread16be(void __iomem *addr)
76637536
AO
24{
25 return in_be16(addr);
26}
8943212c 27unsigned int ioread32(void __iomem *addr)
1da177e4
LT
28{
29 return readl(addr);
30}
8943212c 31unsigned int ioread32be(void __iomem *addr)
76637536
AO
32{
33 return in_be32(addr);
34}
1da177e4
LT
35EXPORT_SYMBOL(ioread8);
36EXPORT_SYMBOL(ioread16);
76637536 37EXPORT_SYMBOL(ioread16be);
1da177e4 38EXPORT_SYMBOL(ioread32);
76637536 39EXPORT_SYMBOL(ioread32be);
1da177e4 40
8943212c 41void iowrite8(u8 val, void __iomem *addr)
1da177e4
LT
42{
43 writeb(val, addr);
44}
8943212c 45void iowrite16(u16 val, void __iomem *addr)
1da177e4
LT
46{
47 writew(val, addr);
48}
8943212c 49void iowrite16be(u16 val, void __iomem *addr)
76637536
AO
50{
51 out_be16(addr, val);
52}
8943212c 53void iowrite32(u32 val, void __iomem *addr)
1da177e4
LT
54{
55 writel(val, addr);
56}
8943212c 57void iowrite32be(u32 val, void __iomem *addr)
76637536
AO
58{
59 out_be32(addr, val);
60}
1da177e4
LT
61EXPORT_SYMBOL(iowrite8);
62EXPORT_SYMBOL(iowrite16);
76637536 63EXPORT_SYMBOL(iowrite16be);
1da177e4 64EXPORT_SYMBOL(iowrite32);
76637536 65EXPORT_SYMBOL(iowrite32be);
1da177e4
LT
66
67/*
68 * These are the "repeat read/write" functions. Note the
69 * non-CPU byte order. We do things in "IO byteorder"
70 * here.
71 *
72 * FIXME! We could make these do EEH handling if we really
73 * wanted. Not clear if we do.
74 */
75void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
76{
6c9afc65 77 _insb((u8 __iomem *) addr, dst, count);
1da177e4
LT
78}
79void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
80{
6c9afc65 81 _insw_ns((u16 __iomem *) addr, dst, count);
1da177e4
LT
82}
83void ioread32_rep(void __iomem *addr, void *dst, unsigned long count)
84{
6c9afc65 85 _insl_ns((u32 __iomem *) addr, dst, count);
1da177e4
LT
86}
87EXPORT_SYMBOL(ioread8_rep);
88EXPORT_SYMBOL(ioread16_rep);
89EXPORT_SYMBOL(ioread32_rep);
90
91void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
92{
6c9afc65 93 _outsb((u8 __iomem *) addr, src, count);
1da177e4
LT
94}
95void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
96{
6c9afc65 97 _outsw_ns((u16 __iomem *) addr, src, count);
1da177e4
LT
98}
99void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
100{
6c9afc65 101 _outsl_ns((u32 __iomem *) addr, src, count);
1da177e4
LT
102}
103EXPORT_SYMBOL(iowrite8_rep);
104EXPORT_SYMBOL(iowrite16_rep);
105EXPORT_SYMBOL(iowrite32_rep);
106
107void __iomem *ioport_map(unsigned long port, unsigned int len)
108{
68a64357 109 return (void __iomem *) (port + _IO_BASE);
1da177e4
LT
110}
111
112void ioport_unmap(void __iomem *addr)
113{
114 /* Nothing to do */
115}
116EXPORT_SYMBOL(ioport_map);
117EXPORT_SYMBOL(ioport_unmap);
118
119void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
120{
121 unsigned long start = pci_resource_start(dev, bar);
122 unsigned long len = pci_resource_len(dev, bar);
123 unsigned long flags = pci_resource_flags(dev, bar);
124
125 if (!len)
126 return NULL;
127 if (max && len > max)
128 len = max;
129 if (flags & IORESOURCE_IO)
130 return ioport_map(start, len);
131 if (flags & IORESOURCE_MEM)
132 return ioremap(start, len);
133 /* What? */
134 return NULL;
135}
136
137void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
138{
139 /* Nothing to do */
140}
141EXPORT_SYMBOL(pci_iomap);
142EXPORT_SYMBOL(pci_iounmap);
This page took 0.222107 seconds and 5 git commands to generate.