Linux Audio

Check our new training course

Loading...
v5.4
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * ppc64 "iomap" interface implementation.
  4 *
  5 * (C) Copyright 2004 Linus Torvalds
  6 */
  7#include <linux/pci.h>
  8#include <linux/mm.h>
  9#include <linux/export.h>
 10#include <asm/io.h>
 11#include <asm/pci-bridge.h>
 12#include <asm/isa-bridge.h>
 13
 14/*
 15 * Here comes the ppc64 implementation of the IOMAP 
 16 * interfaces.
 17 */
 18unsigned int ioread8(void __iomem *addr)
 19{
 20	return readb(addr);
 21}
 22unsigned int ioread16(void __iomem *addr)
 23{
 24	return readw(addr);
 25}
 26unsigned int ioread16be(void __iomem *addr)
 27{
 28	return readw_be(addr);
 29}
 30unsigned int ioread32(void __iomem *addr)
 31{
 32	return readl(addr);
 33}
 34unsigned int ioread32be(void __iomem *addr)
 35{
 36	return readl_be(addr);
 37}
 38EXPORT_SYMBOL(ioread8);
 39EXPORT_SYMBOL(ioread16);
 40EXPORT_SYMBOL(ioread16be);
 41EXPORT_SYMBOL(ioread32);
 42EXPORT_SYMBOL(ioread32be);
 43#ifdef __powerpc64__
 44u64 ioread64(void __iomem *addr)
 45{
 46	return readq(addr);
 47}
 48u64 ioread64_lo_hi(void __iomem *addr)
 49{
 50	return readq(addr);
 51}
 52u64 ioread64_hi_lo(void __iomem *addr)
 53{
 54	return readq(addr);
 55}
 56u64 ioread64be(void __iomem *addr)
 57{
 58	return readq_be(addr);
 59}
 60u64 ioread64be_lo_hi(void __iomem *addr)
 61{
 62	return readq_be(addr);
 63}
 64u64 ioread64be_hi_lo(void __iomem *addr)
 65{
 66	return readq_be(addr);
 67}
 68EXPORT_SYMBOL(ioread64);
 69EXPORT_SYMBOL(ioread64_lo_hi);
 70EXPORT_SYMBOL(ioread64_hi_lo);
 71EXPORT_SYMBOL(ioread64be);
 72EXPORT_SYMBOL(ioread64be_lo_hi);
 73EXPORT_SYMBOL(ioread64be_hi_lo);
 74#endif /* __powerpc64__ */
 75
 76void iowrite8(u8 val, void __iomem *addr)
 77{
 78	writeb(val, addr);
 79}
 80void iowrite16(u16 val, void __iomem *addr)
 81{
 82	writew(val, addr);
 83}
 84void iowrite16be(u16 val, void __iomem *addr)
 85{
 86	writew_be(val, addr);
 87}
 88void iowrite32(u32 val, void __iomem *addr)
 89{
 90	writel(val, addr);
 91}
 92void iowrite32be(u32 val, void __iomem *addr)
 93{
 94	writel_be(val, addr);
 95}
 96EXPORT_SYMBOL(iowrite8);
 97EXPORT_SYMBOL(iowrite16);
 98EXPORT_SYMBOL(iowrite16be);
 99EXPORT_SYMBOL(iowrite32);
100EXPORT_SYMBOL(iowrite32be);
101#ifdef __powerpc64__
102void iowrite64(u64 val, void __iomem *addr)
103{
104	writeq(val, addr);
105}
106void iowrite64_lo_hi(u64 val, void __iomem *addr)
107{
108	writeq(val, addr);
109}
110void iowrite64_hi_lo(u64 val, void __iomem *addr)
111{
112	writeq(val, addr);
113}
114void iowrite64be(u64 val, void __iomem *addr)
115{
116	writeq_be(val, addr);
117}
118void iowrite64be_lo_hi(u64 val, void __iomem *addr)
119{
120	writeq_be(val, addr);
121}
122void iowrite64be_hi_lo(u64 val, void __iomem *addr)
123{
124	writeq_be(val, addr);
125}
126EXPORT_SYMBOL(iowrite64);
127EXPORT_SYMBOL(iowrite64_lo_hi);
128EXPORT_SYMBOL(iowrite64_hi_lo);
129EXPORT_SYMBOL(iowrite64be);
130EXPORT_SYMBOL(iowrite64be_lo_hi);
131EXPORT_SYMBOL(iowrite64be_hi_lo);
132#endif /* __powerpc64__ */
133
134/*
135 * These are the "repeat read/write" functions. Note the
136 * non-CPU byte order. We do things in "IO byteorder"
137 * here.
138 *
139 * FIXME! We could make these do EEH handling if we really
140 * wanted. Not clear if we do.
141 */
142void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
143{
144	readsb(addr, dst, count);
145}
146void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
147{
148	readsw(addr, dst, count);
149}
150void ioread32_rep(void __iomem *addr, void *dst, unsigned long count)
151{
152	readsl(addr, dst, count);
153}
154EXPORT_SYMBOL(ioread8_rep);
155EXPORT_SYMBOL(ioread16_rep);
156EXPORT_SYMBOL(ioread32_rep);
157
158void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
159{
160	writesb(addr, src, count);
161}
162void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
163{
164	writesw(addr, src, count);
165}
166void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
167{
168	writesl(addr, src, count);
169}
170EXPORT_SYMBOL(iowrite8_rep);
171EXPORT_SYMBOL(iowrite16_rep);
172EXPORT_SYMBOL(iowrite32_rep);
173
174void __iomem *ioport_map(unsigned long port, unsigned int len)
175{
176	return (void __iomem *) (port + _IO_BASE);
177}
178
179void ioport_unmap(void __iomem *addr)
180{
181	/* Nothing to do */
182}
183EXPORT_SYMBOL(ioport_map);
184EXPORT_SYMBOL(ioport_unmap);
185
186#ifdef CONFIG_PCI
187void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
188{
189	if (isa_vaddr_is_ioport(addr))
190		return;
191	if (pcibios_vaddr_is_ioport(addr))
192		return;
193	iounmap(addr);
194}
195
196EXPORT_SYMBOL(pci_iounmap);
197#endif /* CONFIG_PCI */
v6.8
 1// SPDX-License-Identifier: GPL-2.0
 2/*
 3 * ppc64 "iomap" interface implementation.
 4 *
 5 * (C) Copyright 2004 Linus Torvalds
 6 */
 7#include <linux/pci.h>
 8#include <linux/mm.h>
 9#include <linux/export.h>
10#include <asm/io.h>
11#include <asm/pci-bridge.h>
12#include <asm/isa-bridge.h>
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14void __iomem *ioport_map(unsigned long port, unsigned int len)
15{
16	return (void __iomem *) (port + _IO_BASE);
17}
 
 
 
 
 
18EXPORT_SYMBOL(ioport_map);
 
19
20#ifdef CONFIG_PCI
21void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
22{
23	if (isa_vaddr_is_ioport(addr))
24		return;
25	if (pcibios_vaddr_is_ioport(addr))
26		return;
27	iounmap(addr);
28}
29
30EXPORT_SYMBOL(pci_iounmap);
31#endif /* CONFIG_PCI */