]> git.proxmox.com Git - mirror_ubuntu-kernels.git/blame - arch/powerpc/kernel/iomap.c
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[mirror_ubuntu-kernels.git] / arch / powerpc / kernel / iomap.c
CommitLineData
b2441318 1// SPDX-License-Identifier: GPL-2.0
1da177e4 2/*
1da177e4
LT
3 * ppc64 "iomap" interface implementation.
4 *
5 * (C) Copyright 2004 Linus Torvalds
6 */
1da177e4
LT
7#include <linux/pci.h>
8#include <linux/mm.h>
93087948 9#include <linux/export.h>
1da177e4 10#include <asm/io.h>
50747cb8 11#include <asm/pci-bridge.h>
38e9d36b 12#include <asm/isa-bridge.h>
1da177e4
LT
13
14/*
15 * Here comes the ppc64 implementation of the IOMAP
16 * interfaces.
17 */
8943212c 18unsigned int ioread8(void __iomem *addr)
1da177e4
LT
19{
20 return readb(addr);
21}
8943212c 22unsigned int ioread16(void __iomem *addr)
1da177e4
LT
23{
24 return readw(addr);
25}
8943212c 26unsigned int ioread16be(void __iomem *addr)
76637536 27{
0eb57368 28 return readw_be(addr);
76637536 29}
8943212c 30unsigned int ioread32(void __iomem *addr)
1da177e4
LT
31{
32 return readl(addr);
33}
8943212c 34unsigned int ioread32be(void __iomem *addr)
76637536 35{
0eb57368 36 return readl_be(addr);
76637536 37}
1da177e4
LT
38EXPORT_SYMBOL(ioread8);
39EXPORT_SYMBOL(ioread16);
76637536 40EXPORT_SYMBOL(ioread16be);
1da177e4 41EXPORT_SYMBOL(ioread32);
76637536 42EXPORT_SYMBOL(ioread32be);
d54fc90c
HG
43#ifdef __powerpc64__
44u64 ioread64(void __iomem *addr)
45{
46 return readq(addr);
47}
48u64 ioread64be(void __iomem *addr)
49{
50 return readq_be(addr);
51}
52EXPORT_SYMBOL(ioread64);
53EXPORT_SYMBOL(ioread64be);
54#endif /* __powerpc64__ */
1da177e4 55
8943212c 56void iowrite8(u8 val, void __iomem *addr)
1da177e4
LT
57{
58 writeb(val, addr);
59}
8943212c 60void iowrite16(u16 val, void __iomem *addr)
1da177e4
LT
61{
62 writew(val, addr);
63}
8943212c 64void iowrite16be(u16 val, void __iomem *addr)
76637536 65{
0eb57368 66 writew_be(val, addr);
76637536 67}
8943212c 68void iowrite32(u32 val, void __iomem *addr)
1da177e4
LT
69{
70 writel(val, addr);
71}
8943212c 72void iowrite32be(u32 val, void __iomem *addr)
76637536 73{
0eb57368 74 writel_be(val, addr);
76637536 75}
1da177e4
LT
76EXPORT_SYMBOL(iowrite8);
77EXPORT_SYMBOL(iowrite16);
76637536 78EXPORT_SYMBOL(iowrite16be);
1da177e4 79EXPORT_SYMBOL(iowrite32);
76637536 80EXPORT_SYMBOL(iowrite32be);
d54fc90c
HG
81#ifdef __powerpc64__
82void iowrite64(u64 val, void __iomem *addr)
83{
84 writeq(val, addr);
85}
86void iowrite64be(u64 val, void __iomem *addr)
87{
88 writeq_be(val, addr);
89}
90EXPORT_SYMBOL(iowrite64);
91EXPORT_SYMBOL(iowrite64be);
92#endif /* __powerpc64__ */
1da177e4
LT
93
94/*
95 * These are the "repeat read/write" functions. Note the
96 * non-CPU byte order. We do things in "IO byteorder"
97 * here.
98 *
99 * FIXME! We could make these do EEH handling if we really
100 * wanted. Not clear if we do.
101 */
102void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
103{
0eb57368 104 readsb(addr, dst, count);
1da177e4
LT
105}
106void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
107{
0eb57368 108 readsw(addr, dst, count);
1da177e4
LT
109}
110void ioread32_rep(void __iomem *addr, void *dst, unsigned long count)
111{
0eb57368 112 readsl(addr, dst, count);
1da177e4
LT
113}
114EXPORT_SYMBOL(ioread8_rep);
115EXPORT_SYMBOL(ioread16_rep);
116EXPORT_SYMBOL(ioread32_rep);
117
118void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
119{
0eb57368 120 writesb(addr, src, count);
1da177e4
LT
121}
122void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
123{
0eb57368 124 writesw(addr, src, count);
1da177e4
LT
125}
126void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
127{
0eb57368 128 writesl(addr, src, count);
1da177e4
LT
129}
130EXPORT_SYMBOL(iowrite8_rep);
131EXPORT_SYMBOL(iowrite16_rep);
132EXPORT_SYMBOL(iowrite32_rep);
133
134void __iomem *ioport_map(unsigned long port, unsigned int len)
135{
68a64357 136 return (void __iomem *) (port + _IO_BASE);
1da177e4
LT
137}
138
139void ioport_unmap(void __iomem *addr)
140{
141 /* Nothing to do */
142}
143EXPORT_SYMBOL(ioport_map);
144EXPORT_SYMBOL(ioport_unmap);
145
81210c20 146#ifdef CONFIG_PCI
1da177e4
LT
147void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
148{
50747cb8
BH
149 if (isa_vaddr_is_ioport(addr))
150 return;
151 if (pcibios_vaddr_is_ioport(addr))
152 return;
153 iounmap(addr);
1da177e4 154}
50747cb8 155
1da177e4 156EXPORT_SYMBOL(pci_iounmap);
a85fe3fc 157#endif /* CONFIG_PCI */