Linux-libre 3.16.85-gnu
[librecmc/linux-libre.git] / arch / arm64 / kernel / io.c
1 /*
2  * Based on arch/arm/kernel/io.c
3  *
4  * Copyright (C) 2012 ARM Ltd.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #include <linux/export.h>
20 #include <linux/types.h>
21 #include <linux/io.h>
22
23 /*
24  * Copy data from IO memory space to "real" memory space.
25  */
26 void __memcpy_fromio(void *to, const volatile void __iomem *from, size_t count)
27 {
28         unsigned char *t = to;
29         while (count) {
30                 count--;
31                 *t = readb(from);
32                 t++;
33                 from++;
34         }
35 }
36 EXPORT_SYMBOL(__memcpy_fromio);
37
38 /*
39  * Copy data from "real" memory space to IO memory space.
40  */
41 void __memcpy_toio(volatile void __iomem *to, const void *from, size_t count)
42 {
43         const unsigned char *f = from;
44         while (count) {
45                 count--;
46                 writeb(*f, to);
47                 f++;
48                 to++;
49         }
50 }
51 EXPORT_SYMBOL(__memcpy_toio);
52
53 /*
54  * "memset" on IO memory space.
55  */
56 void __memset_io(volatile void __iomem *dst, int c, size_t count)
57 {
58         while (count) {
59                 count--;
60                 writeb(c, dst);
61                 dst++;
62         }
63 }
64 EXPORT_SYMBOL(__memset_io);